Le mar. 28 juil. 2026 à 01:25, David Lechner <[email protected]> a écrit : > > From: Suhrid Subramaniam <[email protected]> > > Use ulong for return value of clk_get_rate() in the MediaTek serial > driver. > > IS_ERR_VALUE() does a signed 64-bit comparison against the range of > possible error codes. If clk_get_rate() returns an error, assigning this > to a u32 truncates the top 32 bits making the value smaller, defeating > IS_ERR_VALUE() and producing a garbage divisor that hangs the UART. > > Fixes: 3b17f2e2c2a9 ("serial: mtk: add support for using dynamic baud clock > souce") > Signed-off-by: Suhrid Subramaniam <[email protected]> > Signed-off-by: David Lechner <[email protected]> > --- > drivers/serial/serial_mtk.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/serial/serial_mtk.c b/drivers/serial/serial_mtk.c > index 01cc415efdd..64b3287f8eb 100644 > --- a/drivers/serial/serial_mtk.c > +++ b/drivers/serial/serial_mtk.c > @@ -213,7 +213,7 @@ static int _mtk_serial_pending(struct mtk_serial_priv > *priv, bool input) > static int mtk_serial_setbrg(struct udevice *dev, int baudrate) > { > struct mtk_serial_priv *priv = dev_get_priv(dev); > - u32 clk_rate; > + ulong clk_rate; > > clk_rate = clk_get_rate(&priv->clk); > if (IS_ERR_VALUE(clk_rate) || clk_rate == 0) > @@ -266,6 +266,7 @@ static int mtk_serial_of_to_plat(struct udevice *dev) > { > struct mtk_serial_priv *priv = dev_get_priv(dev); > fdt_addr_t addr; > + ulong clk_rate; > int err; > > addr = dev_read_addr(dev); > @@ -282,10 +283,10 @@ static int mtk_serial_of_to_plat(struct udevice *dev) > return -EINVAL; > } > } else { > - err = clk_get_rate(&priv->clk); > - if (IS_ERR_VALUE(err)) { > + clk_rate = clk_get_rate(&priv->clk); > + if (IS_ERR_VALUE(clk_rate)) { > dev_err(dev, "invalid baud clock\n"); > - return -EINVAL; > + return (int)clk_rate;
Hello David, This is a functional changes, maybe deserves a separate patch? Cheers Julien > } > } > > > -- > 2.43.0 >
