Re: [PATCH v4 2/6] i2c: npcm: use a software flag to indicate a BER condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Andi:

Thank you for your feedback.

Andi Shyti <andi.shyti@xxxxxxxxxx> 於 2024年9月26日 週四 上午4:22寫道:
>
> Hi Tyrone,
>
> patch looks good, but...
>
> On Fri, Sep 20, 2024 at 06:18:16PM GMT, warp5tw@xxxxxxxxx wrote:
> > From: Tyrone Ting <kfting@xxxxxxxxxxx>
> >
> > From: Tyrone Ting <kfting@xxxxxxxxxxx>
> >
> > If not clearing the BB (bus busy) condition in the BER (bus error)
> > interrupt, the driver causes a timeout and hence the i2c core
> > doesn't do the i2c transfer retry but returns the driver's return
> > value to the upper layer instead.
> >
> > Clear the BB condition in the BER interrupt and a software flag is
> > used. The driver does an i2c recovery without causing the timeout
> > if the flag is set.
> >
> > Signed-off-by: Tyrone Ting <kfting@xxxxxxxxxxx>
> > Reviewed-by: Tali Perry <tali.perry1@xxxxxxxxx>
> > ---
> >  drivers/i2c/busses/i2c-npcm7xx.c | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
> > index 2b76dbfba438..2d034503d8bc 100644
> > --- a/drivers/i2c/busses/i2c-npcm7xx.c
> > +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> > @@ -334,6 +334,7 @@ struct npcm_i2c {
> >       u64 nack_cnt;
> >       u64 timeout_cnt;
> >       u64 tx_complete_cnt;
> > +     bool ber_state;
>
> I need some comment here, what is this ber state? You described
> it in the commit log, but people won't be browsing much of the
> commit log rather than the code itself.
>
> You could perhaps mention the meaning as:
>
>         bool ber_state; /* brief description */
>

Understood. I'll add some descriptions.

> and...
>
> >  };
> >
> >  static inline void npcm_i2c_select_bank(struct npcm_i2c *bus,
> > @@ -1521,6 +1522,7 @@ static void npcm_i2c_irq_handle_ber(struct npcm_i2c *bus)
> >       if (npcm_i2c_is_master(bus)) {
> >               npcm_i2c_master_abort(bus);
> >       } else {
> > +             bus->ber_state = true;
> >               npcm_i2c_clear_master_status(bus);
> >
> >               /* Clear BB (BUS BUSY) bit */
> > @@ -1699,6 +1701,7 @@ static int npcm_i2c_recovery_tgclk(struct i2c_adapter *_adap)
> >               dev_dbg(bus->dev, "bus%d-0x%x recovery skipped, bus not stuck",
> >                       bus->num, bus->dest_addr);
> >               npcm_i2c_reset(bus);
> > +             bus->ber_state = false;
> >               return 0;
> >       }
> >
> > @@ -1763,6 +1766,7 @@ static int npcm_i2c_recovery_tgclk(struct i2c_adapter *_adap)
> >               if (bus->rec_succ_cnt < ULLONG_MAX)
> >                       bus->rec_succ_cnt++;
> >       }
> > +     bus->ber_state = false;
> >       return status;
> >  }
> >
> > @@ -2158,7 +2162,7 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
> >
> >       } while (time_is_after_jiffies(time_left) && bus_busy);
> >
> > -     if (bus_busy) {
> > +     if (bus_busy || bus->ber_state) {
>
> /*
>  * Check the BER (bus error) state, if it's true means that blah
>  * blah blah, while when it's false blah blah blah and we should
>  * or should not do blah blah blah
>  */
> if (bus_busy || bus->ber_state) {
>         ...
> }
>

Understood. Your comments will be addressed.

> Thanks,
> Andi
>
> >               iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST);
> >               npcm_i2c_reset(bus);
> >               i2c_recover_bus(adap);
> > --
> > 2.34.1
> >

Thank you.

Regards,
Tyrone





[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux