tree:   https://github.com/Freescale/linux-fslc 5.4-2.3.x-imx
head:   549889f65d65baa0e9efa8790dc81ce8c580d842
commit: 124d288c85caab0f868cec5387a1a32f39871392 [12739/16811] MLK-24495 i2c: 
lpi2c: fix i2c timing issue
config: x86_64-randconfig-m001-20210129 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/i2c/busses/i2c-imx-lpi2c.c:243 lpi2c_imx_config() warn: the 
'I2C_CLK_RATIO' macro might need parens

vim +/I2C_CLK_RATIO +243 drivers/i2c/busses/i2c-imx-lpi2c.c

a55fa9d0e42e31 Gao Pan    2016-11-30  220  static int lpi2c_imx_config(struct 
lpi2c_imx_struct *lpi2c_imx)
a55fa9d0e42e31 Gao Pan    2016-11-30  221  {
a55fa9d0e42e31 Gao Pan    2016-11-30  222       u8 prescale, filt, sethold, 
clkhi, clklo, datavd;
a55fa9d0e42e31 Gao Pan    2016-11-30  223       unsigned int clk_rate, 
clk_cycle;
a55fa9d0e42e31 Gao Pan    2016-11-30  224       enum lpi2c_imx_pincfg pincfg;
a55fa9d0e42e31 Gao Pan    2016-11-30  225       unsigned int temp;
a55fa9d0e42e31 Gao Pan    2016-11-30  226  
a55fa9d0e42e31 Gao Pan    2016-11-30  227       lpi2c_imx_set_mode(lpi2c_imx);
a55fa9d0e42e31 Gao Pan    2016-11-30  228  
c846995d43e1d2 Gao Pan    2018-01-19  229       clk_rate = 
clk_get_rate(lpi2c_imx->clk_per);
c846995d43e1d2 Gao Pan    2018-01-19  230       if (!clk_rate) {
c846995d43e1d2 Gao Pan    2018-01-19  231               
dev_dbg(&lpi2c_imx->adapter.dev, "clk_per rate is 0\n");
c846995d43e1d2 Gao Pan    2018-01-19  232               return -EINVAL;
c846995d43e1d2 Gao Pan    2018-01-19  233       }
c846995d43e1d2 Gao Pan    2018-01-19  234  
a55fa9d0e42e31 Gao Pan    2016-11-30  235       if (lpi2c_imx->mode == HS || 
lpi2c_imx->mode == ULTRA_FAST)
a55fa9d0e42e31 Gao Pan    2016-11-30  236               filt = 0;
a55fa9d0e42e31 Gao Pan    2016-11-30  237       else
a55fa9d0e42e31 Gao Pan    2016-11-30  238               filt = 2;
a55fa9d0e42e31 Gao Pan    2016-11-30  239  
a55fa9d0e42e31 Gao Pan    2016-11-30  240       for (prescale = 0; prescale <= 
7; prescale++) {
a55fa9d0e42e31 Gao Pan    2016-11-30  241               clk_cycle = clk_rate / 
((1 << prescale) * lpi2c_imx->bitrate)
124d288c85caab Clark Wang 2020-08-19  242                           - (2 + 
filt) / (1 << prescale);
124d288c85caab Clark Wang 2020-08-19 @243               clkhi = clk_cycle * 
I2C_CLK_RATIO;

This code is correct and adding parentheses would break it.  The define
is:

#define I2C_CLK_RATIO   24 / 59

Obvioulsy 24 / 59 is zero.  So the multiplication has to be done first:
(clk_cycle * 24) / 59 which is what happens now.  But checkpatch
encourages people to add parentheses so they will then the code will be:

        clkhi = clk_cycle * (24 / 59);

Which is the same as "clkhi = 0;".  In other words, this code works for
now but soon it will be broken.

a55fa9d0e42e31 Gao Pan    2016-11-30  244               clklo = clk_cycle - 
clkhi;
a55fa9d0e42e31 Gao Pan    2016-11-30  245               if (clklo < 64)
a55fa9d0e42e31 Gao Pan    2016-11-30  246                       break;
a55fa9d0e42e31 Gao Pan    2016-11-30  247       }
a55fa9d0e42e31 Gao Pan    2016-11-30  248  
a55fa9d0e42e31 Gao Pan    2016-11-30  249       if (prescale > 7)
a55fa9d0e42e31 Gao Pan    2016-11-30  250               return -EINVAL;
a55fa9d0e42e31 Gao Pan    2016-11-30  251  
a55fa9d0e42e31 Gao Pan    2016-11-30  252       /* set MCFGR1: PINCFG, 
PRESCALE, IGNACK */
a55fa9d0e42e31 Gao Pan    2016-11-30  253       if (lpi2c_imx->mode == 
ULTRA_FAST)
a55fa9d0e42e31 Gao Pan    2016-11-30  254               pincfg = TWO_PIN_OO;
a55fa9d0e42e31 Gao Pan    2016-11-30  255       else
a55fa9d0e42e31 Gao Pan    2016-11-30  256               pincfg = TWO_PIN_OD;
a55fa9d0e42e31 Gao Pan    2016-11-30  257       temp = prescale | pincfg << 24;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to