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. Reviewed-by: Casey Connolly <[email protected]> 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 ff91e0018fa..935837c18e2 100644 --- a/drivers/serial/serial_msm_geni.c +++ b/drivers/serial/serial_msm_geni.c @@ -527,7 +527,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
