Message ID | 20220510091654.8498-9-warp5tw@gmail.com |
---|---|
State | New |
Headers | show |
Series | i2c: npcm: Bug fixes timeout, spurious interrupts | expand |
On Tue, May 10, 2022 at 05:16:53PM +0800, Tyrone Ting wrote: > From: Tali Perry <tali.perry1@gmail.com> > > NPCM can support up to 10 own slave addresses. > In practice, only one address is actually being used. > In order to access addresses 2 and above, need to switch > register banks. The switch needs spinlock. > To avoid using spinlock for this useless feature > removed support of SA >= 2. > Also fix returned slave event enum. > > Remove some comment since the bank selection is not > required. The bank selection is not required since > the supported slave addresses are reduced. Fancy indentation. Please fix it in all your commit messages where it applies. ... > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > + dev_err(bus->dev, > + "try to enable more then 2 SA not supported\n"); Make it one line and drop {}. > + } ... > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > + dev_err(bus->dev, > + "get slave: try to use more then 2 slave addresses not supported\n"); As per above be consistent with abbreviations ("SA" here, which makes line shorter) and follow the above recommendation. > + }
Hi Andy: Thank you for your comments and they will be addressed. Andy Shevchenko <andriy.shevchenko@linux.intel.com> 於 2022年5月10日 週二 下午6:19寫道: > > On Tue, May 10, 2022 at 05:16:53PM +0800, Tyrone Ting wrote: > > From: Tali Perry <tali.perry1@gmail.com> > > > > NPCM can support up to 10 own slave addresses. > > In practice, only one address is actually being used. > > In order to access addresses 2 and above, need to switch > > register banks. The switch needs spinlock. > > To avoid using spinlock for this useless feature > > removed support of SA >= 2. > > > Also fix returned slave event enum. > > > > Remove some comment since the bank selection is not > > required. The bank selection is not required since > > the supported slave addresses are reduced. > > Fancy indentation. Please fix it in all your commit messages where it applies. > > ... > > > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > > + dev_err(bus->dev, > > + "try to enable more then 2 SA not supported\n"); > > Make it one line and drop {}. > > > + } > > ... > > > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > > + dev_err(bus->dev, > > + "get slave: try to use more then 2 slave addresses not supported\n"); > > As per above be consistent with abbreviations ("SA" here, which makes line > shorter) and follow the above recommendation. > > > + } > > -- > With Best Regards, > Andy Shevchenko > > Best Regards, Tyrone
Hi Andy: I would like to have your comments about the "Fancy indentation" because I'm not sure if I get the point. I remove extra empty lines and reformat the commit message. Please see the details below. Thank you. Tyrone Ting <warp5tw@gmail.com> 於 2022年5月11日 週三 上午9:39寫道: > > Hi Andy: > > Thank you for your comments and they will be addressed. > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> 於 2022年5月10日 週二 下午6:19寫道: > > > > On Tue, May 10, 2022 at 05:16:53PM +0800, Tyrone Ting wrote: > > > From: Tali Perry <tali.perry1@gmail.com> > > > > > > NPCM can support up to 10 own slave addresses. > > > In practice, only one address is actually being used. > > > In order to access addresses 2 and above, need to switch > > > register banks. The switch needs spinlock. > > > To avoid using spinlock for this useless feature > > > removed support of SA >= 2. > > > > > Also fix returned slave event enum. > > > > > > Remove some comment since the bank selection is not > > > required. The bank selection is not required since > > > the supported slave addresses are reduced. > > > > Fancy indentation. Please fix it in all your commit messages where it applies. > > I modify the commit message as following: NPCM can support up to 10 own slave addresses. In practice, only one address is actually being used. In order to access addresses 2 and above, need to switch register banks. The switch needs spinlock. To avoid using spinlock for this useless feature removed support of SA >= 2. Also fix returned slave event enum. Remove some comment since the bank selection is not required. The bank selection is not required since the supported slave addresses are reduced. > > ... > > > > > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > > > + dev_err(bus->dev, > > > + "try to enable more then 2 SA not supported\n"); > > > > Make it one line and drop {}. > > > > > + } > > > > ... > > > > > + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { > > > + dev_err(bus->dev, > > > + "get slave: try to use more then 2 slave addresses not supported\n"); > > > > As per above be consistent with abbreviations ("SA" here, which makes line > > shorter) and follow the above recommendation. > > > > > + } > > > > -- > > With Best Regards, > > Andy Shevchenko > > > > > > Best Regards, > Tyrone Best Regards, Tyrone
diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 82e600c24831..29d8a44b23c4 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -124,6 +124,8 @@ enum i2c_addr { * use this array to get the address or each register. */ #define I2C_NUM_OWN_ADDR 10 +#define I2C_NUM_OWN_ADDR_SUPPORTED 2 + static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = { NPCM_I2CADDR1, NPCM_I2CADDR2, NPCM_I2CADDR3, NPCM_I2CADDR4, NPCM_I2CADDR5, NPCM_I2CADDR6, NPCM_I2CADDR7, NPCM_I2CADDR8, @@ -392,14 +394,10 @@ static void npcm_i2c_disable(struct npcm_i2c *bus) #if IS_ENABLED(CONFIG_I2C_SLAVE) int i; - /* select bank 0 for I2C addresses */ - npcm_i2c_select_bank(bus, I2C_BANK_0); - /* Slave addresses removal */ - for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR; i++) + for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR_SUPPORTED; i++) iowrite8(0, bus->reg + npcm_i2caddr[i]); - npcm_i2c_select_bank(bus, I2C_BANK_1); #endif /* Disable module */ i2cctl2 = ioread8(bus->reg + NPCM_I2CCTL2); @@ -604,8 +602,7 @@ static int npcm_i2c_slave_enable(struct npcm_i2c *bus, enum i2c_addr addr_type, i2cctl1 &= ~NPCM_I2CCTL1_GCMEN; iowrite8(i2cctl1, bus->reg + NPCM_I2CCTL1); return 0; - } - if (addr_type == I2C_ARP_ADDR) { + } else if (addr_type == I2C_ARP_ADDR) { i2cctl3 = ioread8(bus->reg + NPCM_I2CCTL3); if (enable) i2cctl3 |= I2CCTL3_ARPMEN; @@ -614,16 +611,18 @@ static int npcm_i2c_slave_enable(struct npcm_i2c *bus, enum i2c_addr addr_type, iowrite8(i2cctl3, bus->reg + NPCM_I2CCTL3); return 0; } + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { + dev_err(bus->dev, + "try to enable more then 2 SA not supported\n"); + } if (addr_type >= I2C_ARP_ADDR) return -EFAULT; /* select bank 0 for address 3 to 10 */ - if (addr_type > I2C_SLAVE_ADDR2) - npcm_i2c_select_bank(bus, I2C_BANK_0); + /* Set and enable the address */ iowrite8(sa_reg, bus->reg + npcm_i2caddr[addr_type]); npcm_i2c_slave_int_enable(bus, enable); - if (addr_type > I2C_SLAVE_ADDR2) - npcm_i2c_select_bank(bus, I2C_BANK_1); + return 0; } #endif @@ -846,15 +845,13 @@ static u8 npcm_i2c_get_slave_addr(struct npcm_i2c *bus, enum i2c_addr addr_type) { u8 slave_add; - /* select bank 0 for address 3 to 10 */ - if (addr_type > I2C_SLAVE_ADDR2) - npcm_i2c_select_bank(bus, I2C_BANK_0); + if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) { + dev_err(bus->dev, + "get slave: try to use more then 2 slave addresses not supported\n"); + } slave_add = ioread8(bus->reg + npcm_i2caddr[(int)addr_type]); - if (addr_type > I2C_SLAVE_ADDR2) - npcm_i2c_select_bank(bus, I2C_BANK_1); - return slave_add; } @@ -864,12 +861,12 @@ static int npcm_i2c_remove_slave_addr(struct npcm_i2c *bus, u8 slave_add) /* Set the enable bit */ slave_add |= 0x80; - npcm_i2c_select_bank(bus, I2C_BANK_0); - for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR; i++) { + + for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR_SUPPORTED; i++) { if (ioread8(bus->reg + npcm_i2caddr[i]) == slave_add) iowrite8(0, bus->reg + npcm_i2caddr[i]); } - npcm_i2c_select_bank(bus, I2C_BANK_1); + return 0; } @@ -924,11 +921,15 @@ static int npcm_i2c_slave_get_wr_buf(struct npcm_i2c *bus) for (i = 0; i < I2C_HW_FIFO_SIZE; i++) { if (bus->slv_wr_size >= I2C_HW_FIFO_SIZE) break; - i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value); + if (bus->state == I2C_SLAVE_MATCH) { + i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value); + bus->state = I2C_OPER_STARTED; + } else { + i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value); + } ind = (bus->slv_wr_ind + bus->slv_wr_size) % I2C_HW_FIFO_SIZE; bus->slv_wr_buf[ind] = value; bus->slv_wr_size++; - i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value); } return I2C_HW_FIFO_SIZE - ret; } @@ -976,7 +977,6 @@ static void npcm_i2c_slave_xmit(struct npcm_i2c *bus, u16 nwrite, if (nwrite == 0) return; - bus->state = I2C_OPER_STARTED; bus->operation = I2C_WRITE_OPER; /* get the next buffer */