> 
> Hi,
> 
> On 01/12/2020 16:47:46+0800, Biwen Li wrote:
> > From: Biwen Li <biwen...@nxp.com>
> >
> > - clear the flag TSF1 before enabling interrupt generation
> > - properly set flag WD_CD for rtc chips(pcf2129, pca2129)
> >
> 
> This change has to be a separate patch.
Sure, np. Will separate the patch in v2.
> 
> > Signed-off-by: Biwen Li <biwen...@nxp.com>
> > ---
> >  drivers/rtc/rtc-pcf2127.c | 21 ++++++++++++++++++++-
> >  1 file changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
> > index 07a5630ec841..0a45e2512258 100644
> > --- a/drivers/rtc/rtc-pcf2127.c
> > +++ b/drivers/rtc/rtc-pcf2127.c
> > @@ -601,6 +601,10 @@ static int pcf2127_probe(struct device *dev, struct
> regmap *regmap,
> >      * Watchdog timer enabled and reset pin /RST activated when timed out.
> >      * Select 1Hz clock source for watchdog timer.
> >      * Note: Countdown timer disabled and not available.
> > +    * For pca2129, pcf2129, only bit[7] is for Symbol WD_CD
> > +    * of register watchdg_tim_ctl. The bit[6] is labeled
> > +    * as T. Bits labeled as T must always be written with
> > +    * logic 0.
> >      */
> >     ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_WD_CTL,
> >                              PCF2127_BIT_WD_CTL_CD1 |
> > @@ -608,7 +612,7 @@ static int pcf2127_probe(struct device *dev, struct
> regmap *regmap,
> >                              PCF2127_BIT_WD_CTL_TF1 |
> >                              PCF2127_BIT_WD_CTL_TF0,
> >                              PCF2127_BIT_WD_CTL_CD1 |
> > -                            PCF2127_BIT_WD_CTL_CD0 |
> > +                            has_nvmem ? (PCF2127_BIT_WD_CTL_CD0) : (0) |
> 
> I don't like that because has_nvmem has nothing to do with
> PCF2127_BIT_WD_CTL_CD0 and nothing guarantees that we won't ever get an
> RTC without RST but with NVRAM and that willprobbly be overlooked.
Okay, got it. Will correct it in v2.
> 
> >                              PCF2127_BIT_WD_CTL_TF1);
> >     if (ret) {
> >             dev_err(dev, "%s: watchdog config (wd_ctl) failed\n", 
> > __func__); @@
> > -659,6 +663,21 @@ static int pcf2127_probe(struct device *dev, struct
> regmap *regmap,
> >             return ret;
> >     }
> >
> > +   /*
> > +    * Clear TSF1 field of ctrl1 register to clear interrupt
> > +    * before enabling interrupt generation when
> > +    * timestamp flag set. Unless the flag TSF1 won't
> > +    * be cleared and the interrupt(INT pin) is
> > +    * triggered continueously.
> > +    */
> > +   ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL1,
> > +                            PCF2127_BIT_CTRL1_TSF1,
> > +                            0);
> > +   if (ret) {
> > +           dev_err(dev, "%s:  control and status register 1 (ctrl1) 
> > failed, ret =
> 0x%x\n",
> > +                   __func__, ret);
> > +           return ret;
> > +   }
> 
> Doing that means ignoring timestamps taken while the system is offline.
> It also doesn't fully solve the issue because you are not clearing TSF2 here 
> and
> also it never gets cleared by the driver later on so I guess you will get the
> interrupt storm once a timestamp is taken.
Okay, got it. Thanks. Will clear TSF2 flag in v2.
> 
> 
> --
> Alexandre Belloni, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

Reply via email to