[PATCH v3] i2c: davinci: fix division by zero on missing clock-frequency
Bartosz Golaszewski
brgl at kernel.org
Mon May 18 01:01:56 PDT 2026
On Fri, 15 May 2026 11:25:20 +0200, Chaitanya Sabnis
<chaitanya.msabnis at gmail.com> said:
> When the 'clock-frequency' property is missing from the device tree,
> the driver falls back to DAVINCI_I2C_DEFAULT_BUS_FREQ. However, this
> macro was defined in kHz (100), whereas the device tree property is
> expected in Hz.
>
> The probe function divided the fallback value by 1000, causing
> integer truncation that resulted in dev->bus_freq = 0. This triggered
> a deterministic division-by-zero kernel panic when calculating clock
> dividers later in the probe sequence.
>
> Fix this by redefining DAVINCI_I2C_DEFAULT_BUS_FREQ in Hz (100000)
> to match the expected device tree property unit, allowing the existing
> division logic to work correctly for both cases.
>
> Fixes: b04ce6385979 ("i2c: davinci: kill platform data")
> Reported-by: Sashiko <sashiko-bot at kernel.org>
> Closes: https://lore.kernel.org/all/20260514044726.57297C2BCB7@smtp.kernel.org/
> Signed-off-by: Chaitanya Sabnis <chaitanya.msabnis at gmail.com>
> ---
Missing changelog.
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski at oss.qualcomm.com>
> drivers/i2c/busses/i2c-davinci.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
> index a773ba082321..a264a480dc3c 100644
> --- a/drivers/i2c/busses/i2c-davinci.c
> +++ b/drivers/i2c/busses/i2c-davinci.c
> @@ -117,7 +117,7 @@
> /* timeout for pm runtime autosuspend */
> #define DAVINCI_I2C_PM_TIMEOUT 1000 /* ms */
>
> -#define DAVINCI_I2C_DEFAULT_BUS_FREQ 100
> +#define DAVINCI_I2C_DEFAULT_BUS_FREQ 100000
>
> struct davinci_i2c_dev {
> struct device *dev;
> @@ -761,9 +761,7 @@ static int davinci_i2c_probe(struct platform_device *pdev)
> r = device_property_read_u32(&pdev->dev, "clock-frequency", &prop);
> if (r)
> prop = DAVINCI_I2C_DEFAULT_BUS_FREQ;
> -
> dev->bus_freq = prop / 1000;
> -
These a ninja changes, at least mention them in the commit message.
Bart
> dev->has_pfunc = device_property_present(&pdev->dev, "ti,has-pfunc");
>
> dev->clk = devm_clk_get(&pdev->dev, NULL);
> --
> 2.43.0
>
>
More information about the linux-arm-kernel
mailing list