Message ID | 20230906200024.5305-6-wsa+renesas@sang-engineering.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | i2c: clock calculation cleanups for Renesas devices | expand |
Hi Wolfram Sang, > Subject: [PATCH 5/5] i2c: riic: avoid potential division by zero > > Value comes from DT, so it could be 0. Unlikely, but could be. > > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> > --- > drivers/i2c/busses/i2c-riic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-riic.c b/drivers/i2c/busses/i2c-riic.c > index f0ee8871d5ae..e43ff483c56e 100644 > --- a/drivers/i2c/busses/i2c-riic.c > +++ b/drivers/i2c/busses/i2c-riic.c > @@ -313,7 +313,7 @@ static int riic_init_hw(struct riic_dev *riic, struct > i2c_timings *t) > * frequency with only 62 clock ticks max (31 high, 31 low). > * Aim for a duty of 60% LOW, 40% HIGH. > */ > - total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz); > + total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz ?: 1); Not sure clamping function min_t/min(t->bus_freq_hz, 1) Or ternary condition is good in this case for avoiding potential division by 0? Cheers, Biju > > for (cks = 0; cks < 7; cks++) { > /* > -- > 2.35.1
> Subject: RE: [PATCH 5/5] i2c: riic: avoid potential division by zero > > Hi Wolfram Sang, > > > Subject: [PATCH 5/5] i2c: riic: avoid potential division by zero > > > > Value comes from DT, so it could be 0. Unlikely, but could be. > > > > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> > > --- > > drivers/i2c/busses/i2c-riic.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/i2c/busses/i2c-riic.c > > b/drivers/i2c/busses/i2c-riic.c index f0ee8871d5ae..e43ff483c56e > > 100644 > > --- a/drivers/i2c/busses/i2c-riic.c > > +++ b/drivers/i2c/busses/i2c-riic.c > > @@ -313,7 +313,7 @@ static int riic_init_hw(struct riic_dev *riic, > > struct i2c_timings *t) > > * frequency with only 62 clock ticks max (31 high, 31 low). > > * Aim for a duty of 60% LOW, 40% HIGH. > > */ > > - total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz); > > + total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz ?: 1); > > Not sure clamping function min_t/min(t->bus_freq_hz, 1) Typo min->max.
> > - total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz); > > + total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz ?: 1); > > Not sure clamping function min_t/min(t->bus_freq_hz, 1) > Or ternary condition is good in this case for avoiding potential division by 0? Both work. I chose the ternary because I believe it involves less computation and a tad tighter syntax.
On Wed, 6 Sep 2023, Wolfram Sang wrote: > Value comes from DT, so it could be 0. Unlikely, but could be. > > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
diff --git a/drivers/i2c/busses/i2c-riic.c b/drivers/i2c/busses/i2c-riic.c index f0ee8871d5ae..e43ff483c56e 100644 --- a/drivers/i2c/busses/i2c-riic.c +++ b/drivers/i2c/busses/i2c-riic.c @@ -313,7 +313,7 @@ static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t) * frequency with only 62 clock ticks max (31 high, 31 low). * Aim for a duty of 60% LOW, 40% HIGH. */ - total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz); + total_ticks = DIV_ROUND_UP(rate, t->bus_freq_hz ?: 1); for (cks = 0; cks < 7; cks++) { /*
Value comes from DT, so it could be 0. Unlikely, but could be. Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> --- drivers/i2c/busses/i2c-riic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)