When CONFIG_SKIP_EARLY_DM is enabled and no clock driver is available
during early serial init, devm_clk_get_optional() returns an error
pointer. The original code attempted to enable this error pointer,
causing a crash.

Fix by checking for both error pointers and NULL before calling
clk_enable(), using IS_ERR_OR_NULL() to handle all cases properly.

Signed-off-by: Aswin Murugan <[email protected]>
---
 drivers/serial/serial_msm_geni.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/serial/serial_msm_geni.c b/drivers/serial/serial_msm_geni.c
index 3dca581f68f..d5c4f3f1310 100644
--- a/drivers/serial/serial_msm_geni.c
+++ b/drivers/serial/serial_msm_geni.c
@@ -524,7 +524,8 @@ static int msm_serial_probe(struct udevice *dev)
                priv->se = clk;
 
        /* Try enable clock */
-       clk_enable(clk);
+       if (!IS_ERR_OR_NULL(clk))
+               clk_enable(clk);
 
        /* Check if firmware loading is needed (BT UART) */
        proto = readl(priv->base + GENI_FW_REVISION_RO);
-- 
2.34.1

Reply via email to