[PATCH] usb: dwc3: core: fix clk_get_rate returning negative value
Marek Vasut
marex at denx.de
Thu Jun 15 22:59:11 CEST 2023
On 6/15/23 16:59, Eugen Hristev wrote:
> Unlike it's Linux counterpart, clk_get_rate can return a negative value, -ve.
> The driver does not take that into account, stores the rate into
> an unsigned long, and if clk_get_rate fails, it will take into consideration
> the actual value and wrongly program the hardware.
> E.g. on error -2 (no such entry), the rate will be 18446744073709551614
> and this will be subsequently used by the driver to program the DWC3
> To fix this, exit the function if the value is negative.
>
> Fixes: 6bae0eb5b8bd ("usb: dwc3: Calculate REFCLKPER based on reference clock")
> Signed-off-by: Eugen Hristev <eugen.hristev at collabora.com>
> ---
> drivers/usb/dwc3/core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 49f6a1900b01..5a8c29424578 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -138,7 +138,7 @@ static void dwc3_ref_clk_period(struct dwc3 *dwc)
>
> if (dwc->ref_clk) {
> rate = clk_get_rate(dwc->ref_clk);
This ^ assigns to unsigned long .
Please just change the data type of the $rate to 'long' (drop the unsigned).
> - if (!rate)
> + if (!rate || (long)rate < 0)
if (rate <= 0) will work too ^
More information about the U-Boot
mailing list