]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
serial: mxc: Support bulk enabling clocks
authorAdam Ford <aford173@gmail.com>
Tue, 18 Mar 2025 23:38:33 +0000 (18:38 -0500)
committerFabio Estevam <festevam@gmail.com>
Wed, 19 Mar 2025 16:17:21 +0000 (13:17 -0300)
Depending on the platform, there may be multiple clock sources
required to enable a UART.  Use the bulk functions to get and
enable the clocks when the UART probes.  This can facilitate
the removal of functions to manually enable the clock.

This is made dependent on CLK_CCF which is used on imx6q,
imx8m[mnqp], several imxrt, imx9.  If/when the UART clock
registration is done for older boards, this limitation
could be updated.

Signed-off-by: Adam Ford <aford173@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
drivers/serial/serial_mxc.c
include/dm/platform_data/serial_mxc.h

index c5fd740be4deeacfdf178d813d6065ab6829c7f0..28f4435d01dde723e35ddab6790fa479372725b8 100644 (file)
@@ -3,6 +3,7 @@
  * (c) 2007 Sascha Hauer <s.hauer@pengutronix.de>
  */
 
+#include <clk.h>
 #include <dm.h>
 #include <errno.h>
 #include <watchdog.h>
@@ -312,7 +313,17 @@ int mxc_serial_setbrg(struct udevice *dev, int baudrate)
 static int mxc_serial_probe(struct udevice *dev)
 {
        struct mxc_serial_plat *plat = dev_get_plat(dev);
+#if CONFIG_IS_ENABLED(CLK_CCF)
+       int ret;
 
+       ret = clk_get_bulk(dev, &plat->clks);
+       if (ret)
+               return ret;
+
+       ret = clk_enable_bulk(&plat->clks);
+       if (ret)
+               return ret;
+#endif
        _mxc_serial_init(plat->reg, plat->use_dte);
 
        return 0;
index cc59eeb1dd10aceb7cbcbfccff2435bc1a0cd409..52657aa3debdc3002203c6f11d69bc02aef56865 100644 (file)
@@ -9,6 +9,9 @@
 /* Information about a serial port */
 struct mxc_serial_plat {
        struct mxc_uart *reg;  /* address of registers in physical memory */
+#if CONFIG_IS_ENABLED(CLK_CCF)
+       struct clk_bulk clks;
+#endif
        bool use_dte;
 };