From a2ffe8d63a2b7f2326a5235cddc2ded2ec43953c Mon Sep 17 00:00:00 2001 From: Suhrid Subramaniam Date: Fri, 7 Aug 2026 13:59:40 -0500 Subject: serial: mtk: guard clk_get_rate() with clk_valid() Check that priv->clk has been populated before trying to use it in the MediaTek serial driver. The clock is optional and may not be populated in all cases (in which case it is expected that there was a fixed clock rate provided.) Note this changes behavior slightly: previously, a populated clock whose clk_get_rate() failed silently fell back to priv->fixed_clk_rate (which is only set from DT when clk_get_by_index() failed, so it would have been 0 here). Now an error is returned instead. Fixes: 3b17f2e2c2a9 ("serial: mtk: add support for using dynamic baud clock souce") Signed-off-by: Suhrid Subramaniam Link: https://patch.msgid.link/20260807-serial-mtk-clock-fixes-v3-2-8cc94d313b57@baylibre.com Signed-off-by: David Lechner --- drivers/serial/serial_mtk.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/serial/serial_mtk.c b/drivers/serial/serial_mtk.c index 28e87f485a2..697f5faec1b 100644 --- a/drivers/serial/serial_mtk.c +++ b/drivers/serial/serial_mtk.c @@ -215,9 +215,13 @@ static int mtk_serial_setbrg(struct udevice *dev, int baudrate) struct mtk_serial_priv *priv = dev_get_priv(dev); ulong clk_rate; - clk_rate = clk_get_rate(&priv->clk); - if (IS_ERR_VALUE(clk_rate) || clk_rate == 0) + if (clk_valid(&priv->clk)) { + clk_rate = clk_get_rate(&priv->clk); + if (IS_ERR_VALUE(clk_rate) || clk_rate == 0) + return -EINVAL; + } else { clk_rate = priv->fixed_clk_rate; + } _mtk_serial_setbrg(priv, baudrate, clk_rate); -- cgit v1.3.1