diff options
| author | Suhrid Subramaniam <[email protected]> | 2026-08-07 13:59:40 -0500 |
|---|---|---|
| committer | David Lechner <[email protected]> | 2026-08-24 19:55:35 -0500 |
| commit | a2ffe8d63a2b7f2326a5235cddc2ded2ec43953c (patch) | |
| tree | d269c0a47005fb664063b8d69e7737ba36169e1a | |
| parent | 50c148cfcaa30a584a827a5b54a2864c5dc8a998 (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.c | 8 |
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); |
