*/
 
 #include <common.h>
+#include <clk.h>
 #include <dm.h>
 #include <errno.h>
 #include <fdtdec.h>
 {
        struct ns16550_platdata *plat = dev->platdata;
        fdt_addr_t addr;
+       struct clk clk;
+       int err;
 
        /* try Processor Local Bus device first */
        addr = dev_get_addr(dev);
                                     "reg-offset", 0);
        plat->reg_shift = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
                                         "reg-shift", 0);
-       plat->clock = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
-                                    "clock-frequency",
-                                    CONFIG_SYS_NS16550_CLK);
+
+       err = clk_get_by_index(dev, 0, &clk);
+       if (!err) {
+               err = clk_get_rate(&clk);
+               if (!IS_ERR_VALUE(err))
+                       plat->clock = err;
+       } else if (err != -ENODEV && err != -ENOSYS) {
+               debug("ns16550 failed to get clock\n");
+               return err;
+       }
+
+       if (!plat->clock)
+               plat->clock = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+                                            "clock-frequency",
+                                            CONFIG_SYS_NS16550_CLK);
        if (!plat->clock) {
                debug("ns16550 clock not defined\n");
                return -EINVAL;