Re: [PATCH v10 5/6] i2c: designware: add SLAVE mode functions

From: Andy Shevchenko
Date: Fri Jun 09 2017 - 04:56:08 EST


On Fri, 2017-06-09 at 14:57 +0800, kbuild test robot wrote:
> Hi Luis,
>

Luis, it seems you didn't rebase your patches against Wolfram's i2c-next
tree.

Please, rebase and retest.

> [auto build test ERROR on wsa/i2c/for-next]
> [also build test ERROR on v4.12-rc4 next-20170608]
> [if your patch is applied to the wrong git tree, please drop us a note
> to help improve the system]
>
> url:ÂÂÂÂhttps://github.com/0day-ci/linux/commits/Luis-Oliveira/i2c-des
> ignware-add-I2C-SLAVE-support/20170609-143533
> base:ÂÂÂhttps://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
> i2c/for-next
> config: x86_64-randconfig-x012-201723 (attached as .config)
> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> reproduce:
> ÂÂÂÂÂÂÂÂ# save the attached .config to linux build tree
> ÂÂÂÂÂÂÂÂmake ARCH=x86_64Â
>
> All error/warnings (new ones prefixed by >>):
>
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c: In function
> 'i2c_dw_irq_handler_slave':
> > > drivers/i2c/busses/i2c-designware-slave.c:285:3: error: implicit
> > > declaration of function 'i2c_slave_event' [-Werror=implicit-
> > > function-declaration]
>
> ÂÂÂÂÂÂi2c_slave_event(dev->slave, I2C_SLAVE_WRITE_REQUESTED, &val);
> ÂÂÂÂÂÂ^~~~~~~~~~~~~~~
> > > drivers/i2c/busses/i2c-designware-slave.c:285:31: error:
> > > 'I2C_SLAVE_WRITE_REQUESTED' undeclared (first use in this
> > > function)
>
> ÂÂÂÂÂÂi2c_slave_event(dev->slave, I2C_SLAVE_WRITE_REQUESTED, &val);
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~~~~~~~~~~
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c:285:31: note: each
> undeclared identifier is reported only once for each function it
> appears in
> > > drivers/i2c/busses/i2c-designware-slave.c:293:9: error:
> > > 'I2C_SLAVE_WRITE_RECEIVED' undeclared (first use in this function)
>
> ÂÂÂÂÂÂÂÂÂÂÂÂI2C_SLAVE_WRITE_RECEIVED, &val)) {
> ÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~~~~~~~~~
> > > drivers/i2c/busses/i2c-designware-slave.c:305:8: error:
> > > 'I2C_SLAVE_READ_REQUESTED' undeclared (first use in this function)
>
> ÂÂÂÂÂÂÂÂÂÂÂI2C_SLAVE_READ_REQUESTED, &val))
> ÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~~~~~~~~~
> > > drivers/i2c/busses/i2c-designware-slave.c:311:36: error:
> > > 'I2C_SLAVE_READ_PROCESSED' undeclared (first use in this function)
>
> ÂÂÂÂÂÂif (!i2c_slave_event(dev->slave, I2C_SLAVE_READ_PROCESSED,
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~~~~~~~~~
> > > drivers/i2c/busses/i2c-designware-slave.c:315:31: error:
> > > 'I2C_SLAVE_STOP' undeclared (first use in this function)
>
> ÂÂÂÂÂÂi2c_slave_event(dev->slave, I2C_SLAVE_STOP, &val);
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c: At top level:
> > > drivers/i2c/busses/i2c-designware-slave.c:351:2: error: unknown
> > > field 'reg_slave' specified in initializer
>
> ÂÂÂÂÂ.reg_slave = i2c_dw_reg_slave,
> ÂÂÂÂÂ^
> > > drivers/i2c/busses/i2c-designware-slave.c:351:15: warning: excess
> > > elements in struct initializer
>
> ÂÂÂÂÂ.reg_slave = i2c_dw_reg_slave,
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c:351:15: note: (near
> initialization for 'i2c_dw_algo')
> > > drivers/i2c/busses/i2c-designware-slave.c:352:2: error: unknown
> > > field 'unreg_slave' specified in initializer
>
> ÂÂÂÂÂ.unreg_slave = i2c_dw_unreg_slave,
> ÂÂÂÂÂ^
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c:352:17: warning: excess
> elements in struct initializer
> ÂÂÂÂÂ.unreg_slave = i2c_dw_unreg_slave,
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ^~~~~~~~~~~~~~~~~~
> ÂÂÂdrivers/i2c/busses/i2c-designware-slave.c:352:17: note: (near
> initialization for 'i2c_dw_algo')
> ÂÂÂcc1: some warnings being treated as errors
>
> vim +/i2c_slave_event +285 drivers/i2c/busses/i2c-designware-slave.c
>
> ÂÂÂ279 dev_dbg(dev->dev,
> ÂÂÂ280 "%#x STAUTS SLAVE_ACTTVITY=%#x :
> RAW_INTR_STAT=%#x"
> ÂÂÂ281 " : INTR_STAT=%#x\n",
> ÂÂÂ282 enabled, slave_activity, raw_stat,
> stat);
> ÂÂÂ283
> ÂÂÂ284 if ((stat & DW_IC_INTR_RX_FULL) && (stat &
> DW_IC_INTR_STOP_DET))
> Â> 285 i2c_slave_event(dev->slave,
> I2C_SLAVE_WRITE_REQUESTED, &val);
> ÂÂÂ286
> ÂÂÂ287 if (stat & DW_IC_INTR_RD_REQ) {
> ÂÂÂ288 if (slave_activity) {
> ÂÂÂ289 if (stat & DW_IC_INTR_RX_FULL) {
> ÂÂÂ290 ÂÂÂÂval = dw_readl(dev,
> DW_IC_DATA_CMD);
> ÂÂÂ291
> ÂÂÂ292 if
> (!i2c_slave_event(dev->slave,
> Â> 293 ÂÂÂÂI2C_SLAVE_WRITE_RECE
> IVED, &val)) {
> ÂÂÂ294 dev_vdbg(dev-
> >dev, "Byte %X acked!",
> ÂÂÂ295 val);
> ÂÂÂ296 }
> ÂÂÂ297 dw_readl(dev,
> DW_IC_CLR_RD_REQ);
> ÂÂÂ298 stat =
> i2c_dw_read_clear_intrbits_slave(dev);
> ÂÂÂ299 } else {
> ÂÂÂ300 dw_readl(dev,
> DW_IC_CLR_RD_REQ);
> ÂÂÂ301 dw_readl(dev,
> DW_IC_CLR_RX_UNDER);
> ÂÂÂ302 stat =
> i2c_dw_read_clear_intrbits_slave(dev);
> ÂÂÂ303 }
> ÂÂÂ304 if (!i2c_slave_event(dev->slave,
> Â> 305 ÂÂÂÂI2C_SLAVE_READ_REQUESTED,
> &val))
> ÂÂÂ306 dw_writel(dev, val,
> DW_IC_DATA_CMD);
> ÂÂÂ307 }
> ÂÂÂ308 }
> ÂÂÂ309
> ÂÂÂ310 if (stat & DW_IC_INTR_RX_DONE) {
> Â> 311 if (!i2c_slave_event(dev->slave,
> I2C_SLAVE_READ_PROCESSED,
> ÂÂÂ312 ÂÂÂÂ&val))
> ÂÂÂ313 dw_readl(dev,
> DW_IC_CLR_RX_DONE);
> ÂÂÂ314
> Â> 315 i2c_slave_event(dev->slave,
> I2C_SLAVE_STOP, &val);
> ÂÂÂ316 stat =
> i2c_dw_read_clear_intrbits_slave(dev);
> ÂÂÂ317 return 1;
> ÂÂÂ318 }
> ÂÂÂ319
> ÂÂÂ320 if (stat & DW_IC_INTR_RX_FULL) {
> ÂÂÂ321 val = dw_readl(dev, DW_IC_DATA_CMD);
> ÂÂÂ322 if (!i2c_slave_event(dev->slave,
> I2C_SLAVE_WRITE_RECEIVED,
> ÂÂÂ323 &val))
> ÂÂÂ324 dev_vdbg(dev->dev, "Byte %X
> acked!", val);
> ÂÂÂ325 } else {
> ÂÂÂ326 i2c_slave_event(dev->slave,
> I2C_SLAVE_STOP, &val);
> ÂÂÂ327 stat =
> i2c_dw_read_clear_intrbits_slave(dev);
> ÂÂÂ328 }
> ÂÂÂ329
> ÂÂÂ330 //~ if (stat & DW_IC_INTR_TX_OVER)
> ÂÂÂ331 //~ dw_readl(dev, DW_IC_CLR_TX_OVER);
> ÂÂÂ332
> ÂÂÂ333 return 1;
> ÂÂÂ334 }
> ÂÂÂ335
> ÂÂÂ336 static irqreturn_t i2c_dw_isr_slave(int this_irq, void
> *dev_id)
> ÂÂÂ337 {
> ÂÂÂ338 struct dw_i2c_dev *dev = dev_id;
> ÂÂÂ339 int ret;
> ÂÂÂ340
> ÂÂÂ341 i2c_dw_read_clear_intrbits_slave(dev);
> ÂÂÂ342 ret = i2c_dw_irq_handler_slave(dev);
> ÂÂÂ343 if (ret > 0)
> ÂÂÂ344 complete(&dev->cmd_complete);
> ÂÂÂ345
> ÂÂÂ346 return IRQ_RETVAL(ret);
> ÂÂÂ347 }
> ÂÂÂ348
> ÂÂÂ349 static struct i2c_algorithm i2c_dw_algo = {
> ÂÂÂ350 .functionality = i2c_dw_func,
> Â> 351 .reg_slave = i2c_dw_reg_slave,
> Â> 352 .unreg_slave = i2c_dw_unreg_slave,
> ÂÂÂ353 };
> ÂÂÂ354
> ÂÂÂ355 int i2c_dw_probe_slave(struct dw_i2c_dev *dev)
>
> ---
> 0-DAY kernel test infrastructureÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂOpen Source Technology
> Center
> https://lists.01.org/pipermail/kbuild-allÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂIntel
> Corporation

--
Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
Intel Finland Oy