summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuhrid Subramaniam <[email protected]>2026-08-07 13:59:40 -0500
committerDavid Lechner <[email protected]>2026-08-24 19:55:35 -0500
commita2ffe8d63a2b7f2326a5235cddc2ded2ec43953c (patch)
treed269c0a47005fb664063b8d69e7737ba36169e1a
parent50c148cfcaa30a584a827a5b54a2864c5dc8a998 (diff)
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 <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: David Lechner <[email protected]>
-rw-r--r--drivers/serial/serial_mtk.c8
1 files 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);