Hi Michael,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on wsa/i2c/for-next]
[also build test ERROR on v5.9 next-20201013]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Michael-Wu/i2c-designware-fix-slave-omitted-IC_INTR_STOP_DET/20201014-132759
base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
config: riscv-randconfig-r036-20201014 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project e7fe3c6dfede8d5781bd000741c3dea7088307a4)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# https://github.com/0day-ci/linux/commit/6bb28b0fda0a3f133918077bbfb1c6fe4809bf30
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Michael-Wu/i2c-designware-fix-slave-omitted-IC_INTR_STOP_DET/20201014-132759
git checkout 6bb28b0fda0a3f133918077bbfb1c6fe4809bf30
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
All errors (new ones prefixed by >>):
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:564:9: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
return inw(addr);
^~~~~~~~~
arch/riscv/include/asm/io.h:55:76: note: expanded from macro 'inw'
#define inw(c) ({ u16 __v; __io_pbr(); __v = readw_cpu((void*)(PCI_IOBASE + (c))); __io_par(__v); __v; })
~~~~~~~~~~ ^
arch/riscv/include/asm/mmio.h:88:76: note: expanded from macro 'readw_cpu'
#define readw_cpu(c) ({ u16 __r = le16_to_cpu((__force __le16)__raw_readw(c)); __r; })
^
include/uapi/linux/byteorder/little_endian.h:36:51: note: expanded from macro '__le16_to_cpu'
#define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
^
In file included from drivers/i2c/busses/i2c-designware-slave.c:13:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:572:9: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
return inl(addr);
^~~~~~~~~
arch/riscv/include/asm/io.h:56:76: note: expanded from macro 'inl'
#define inl(c) ({ u32 __v; __io_pbr(); __v = readl_cpu((void*)(PCI_IOBASE + (c))); __io_par(__v); __v; })
~~~~~~~~~~ ^
arch/riscv/include/asm/mmio.h:89:76: note: expanded from macro 'readl_cpu'
#define readl_cpu(c) ({ u32 __r = le32_to_cpu((__force __le32)__raw_readl(c)); __r; })
^
include/uapi/linux/byteorder/little_endian.h:34:51: note: expanded from macro '__le32_to_cpu'
#define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
^
In file included from drivers/i2c/busses/i2c-designware-slave.c:13:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:580:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
outb(value, addr);
^~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:58:68: note: expanded from macro 'outb'
#define outb(v,c) ({ __io_pbw(); writeb_cpu((v),(void*)(PCI_IOBASE + (c))); __io_paw(); })
~~~~~~~~~~ ^
arch/riscv/include/asm/mmio.h:91:52: note: expanded from macro 'writeb_cpu'
#define writeb_cpu(v, c) ((void)__raw_writeb((v), (c)))
^
In file included from drivers/i2c/busses/i2c-designware-slave.c:13:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:588:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
outw(value, addr);
^~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:59:68: note: expanded from macro 'outw'
#define outw(v,c) ({ __io_pbw(); writew_cpu((v),(void*)(PCI_IOBASE + (c))); __io_paw(); })
~~~~~~~~~~ ^
arch/riscv/include/asm/mmio.h:92:76: note: expanded from macro 'writew_cpu'
#define writew_cpu(v, c) ((void)__raw_writew((__force u16)cpu_to_le16(v), (c)))
^
In file included from drivers/i2c/busses/i2c-designware-slave.c:13:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:596:2: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
outl(value, addr);
^~~~~~~~~~~~~~~~~
arch/riscv/include/asm/io.h:60:68: note: expanded from macro 'outl'
#define outl(v,c) ({ __io_pbw(); writel_cpu((v),(void*)(PCI_IOBASE + (c))); __io_paw(); })
~~~~~~~~~~ ^
arch/riscv/include/asm/mmio.h:93:76: note: expanded from macro 'writel_cpu'
#define writel_cpu(v, c) ((void)__raw_writel((__force u32)cpu_to_le32(v), (c)))
^
In file included from drivers/i2c/busses/i2c-designware-slave.c:13:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:10:
In file included from ./arch/riscv/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:13:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/riscv/include/asm/io.h:148:
include/asm-generic/io.h:1017:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
~~~~~~~~~~ ^
>> drivers/i2c/busses/i2c-designware-slave.c:181:42: error: expected ';' after expression
dev->status = STATUS_WRITE_IN_PROGRESS
^
;
>> drivers/i2c/busses/i2c-designware-slave.c:195:22: error: use of undeclared identifier 'STATUS_IDEL'
if (dev->status != STATUS_IDEL) {
^
7 warnings and 2 errors generated.
vim +181 drivers/i2c/busses/i2c-designware-slave.c
151
152 /*
153 * Interrupt service routine. This gets called whenever an I2C slave interrupt
154 * occurs.
155 */
156
157 static int i2c_dw_irq_handler_slave(struct dw_i2c_dev *dev)
158 {
159 u32 raw_stat, stat, enabled, tmp;
160 u8 val = 0, slave_activity;
161
162 regmap_read(dev->map, DW_IC_ENABLE, &enabled);
163 regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &raw_stat);
164 regmap_read(dev->map, DW_IC_STATUS, &tmp);
165 slave_activity = ((tmp & DW_IC_STATUS_SLAVE_ACTIVITY) >> 6);
166
167 if (!enabled || !(raw_stat & ~DW_IC_INTR_ACTIVITY) || !dev->slave)
168 return 0;
169
170 stat = i2c_dw_read_clear_intrbits_slave(dev);
171 dev_dbg(dev->dev,
172 "%#x STATUS SLAVE_ACTIVITY=%#x : RAW_INTR_STAT=%#x : INTR_STAT=%#x\n",
173 enabled, slave_activity, raw_stat, stat);
174
175 if (stat & DW_IC_INTR_RX_FULL) {
176 if (dev->status != STATUS_WRITE_IN_PROGRESS) {
177 if (dev->status != STATUS_IDLE)
178 i2c_slave_event(dev->slave, I2C_SLAVE_STOP,
179 &val);
180
> 181 dev->status = STATUS_WRITE_IN_PROGRESS
182 i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_REQUESTED,
183 &val);
184 }
185
186 regmap_read(dev->map, DW_IC_DATA_CMD, &tmp);
187 val = tmp;
188
189 if (!i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_RECEIVED,
190 &val))
191 dev_vdbg(dev->dev, "Byte %X acked!", val);
192 }
193
194 if (stat & DW_IC_INTR_RD_REQ) {
> 195 if (dev->status != STATUS_IDEL) {
196 dev->status = STATUS_IDLE;
197 i2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
198 }
199
200 if (slave_activity) {
201 regmap_read(dev->map, DW_IC_CLR_RD_REQ, &tmp);
202 regmap_read(dev->map, DW_IC_CLR_RX_UNDER, &tmp);
203
204 dev->status = STATUS_READ_IN_PROGRESS;
205 i2c_slave_event(dev->slave, I2C_SLAVE_READ_REQUESTED,
206 &val);
207 regmap_write(dev->map, DW_IC_DATA_CMD, val);
208 }
209 }
210
211 if (stat & DW_IC_INTR_RX_DONE) {
212 i2c_slave_event(dev->slave, I2C_SLAVE_READ_PROCESSED, &val);
213 regmap_read(dev->map, DW_IC_CLR_RX_DONE, &tmp);
214
215 dev->status = STATUS_IDLE;
216 i2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
217 }
218
219 if (stat & DW_IC_INTR_STOP_DET) {
220 if (dev->status != STATUS_IDLE) {
221 dev->status = STATUS_IDLE;
222
223 i2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
224 }
225 }
226
227 return 1;
228 }
229
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
On Wed, Oct 14, 2020 at 03:39:51PM +0800, kernel test robot wrote:
> Hi Michael,
>
> Thank you for the patch! Yet something to improve:
Wondering if you compile this at all...
> include/asm-generic/io.h:1017:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
> ~~~~~~~~~~ ^
> >> drivers/i2c/busses/i2c-designware-slave.c:181:42: error: expected ';' after expression
> dev->status = STATUS_WRITE_IN_PROGRESS
> ^
> ;
> >> drivers/i2c/busses/i2c-designware-slave.c:195:22: error: use of undeclared identifier 'STATUS_IDEL'
> if (dev->status != STATUS_IDEL) {
> ^
> 7 warnings and 2 errors generated.
--
With Best Regards,
Andy Shevchenko
On 10/14/20 4:53 PM, [email protected] wrote:
>
> Wondering if you compile this at all...
I'm very sorry that I did not compile it because I only have ARM SoC with my
linux 4.9.170, but I've verified the logic of this patch in my linux.
I'll correct these two syntax errors in next version. The reported
warnings occurs from drivers/i2c/busses/i2c-designware-slave.c:13 seems
not made by this modification. Please correct me if I'm wrong....
> > include/asm-generic/io.h:1017:55: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> > return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE +
> port;
> >
> ~~~~~~~~~~ ^
> > >> drivers/i2c/busses/i2c-designware-slave.c:181:42: error: expected ';' after
> expression
> > dev->status =
> STATUS_WRITE_IN_PROGRESS
> >
> ^
> >
> ;
> > >> drivers/i2c/busses/i2c-designware-slave.c:195:22: error: use of
> undeclared identifier 'STATUS_IDEL'
> > if (dev->status != STATUS_IDEL) {
> > ^
> > 7 warnings and 2 errors generated.
>
>
>
On Wed, Oct 14, 2020 at 09:58:54AM +0000, [email protected] wrote:
> On 10/14/20 4:53 PM, [email protected] wrote:
> >
> > Wondering if you compile this at all...
>
>
> I'm very sorry that I did not compile it because I only have ARM SoC with my
> linux 4.9.170, but I've verified the logic of this patch in my linux.
>
> I'll correct these two syntax errors in next version. The reported
> warnings occurs from drivers/i2c/busses/i2c-designware-slave.c:13 seems
> not made by this modification. Please correct me if I'm wrong....
So, you have a chance to create a follow up patch to fix the warnings. :-)
--
With Best Regards,
Andy Shevchenko