diff mbox series

rtc-pm8xxx: Clear Alarm register on resume

Message ID 1584342688-14035-1-git-send-email-maggarwa@codeaurora.org
State Changes Requested
Headers show
Series rtc-pm8xxx: Clear Alarm register on resume | expand

Commit Message

Mohit Aggarwal March 16, 2020, 7:11 a.m. UTC
Currently, alarm register is not cleared on resume
leading to reboot during power off charging mode.

Change-Id: Ie2e6bbab8aa46e4e9b9cc984181ffab557cbbdae
Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
---
 drivers/rtc/rtc-pm8xxx.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Comments

Alexandre Belloni March 16, 2020, 10:29 a.m. UTC | #1
Hi,

On 16/03/2020 12:41:28+0530, Mohit Aggarwal wrote:
> Currently, alarm register is not cleared on resume
> leading to reboot during power off charging mode.
> 
> Change-Id: Ie2e6bbab8aa46e4e9b9cc984181ffab557cbbdae

No Change-Id upstream please.

> Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
> ---
>  drivers/rtc/rtc-pm8xxx.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
> index bbe013f..96e7985 100644
> --- a/drivers/rtc/rtc-pm8xxx.c
> +++ b/drivers/rtc/rtc-pm8xxx.c
> @@ -1,5 +1,5 @@
>  // SPDX-License-Identifier: GPL-2.0-only
> -/* Copyright (c) 2010-2011, 2019, The Linux Foundation. All rights reserved. */
> +/* Copyright (c) 2010-2011, 2019-2020, The Linux Foundation. All rights reserved. */
>  
>  #include <linux/of.h>
>  #include <linux/module.h>
> @@ -301,6 +301,7 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
>  	struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
>  	const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
>  	unsigned int ctrl_reg;
> +	u8 value[NUM_8_BIT_RTC_REGS] = {0};
>  
>  	spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
>  
> @@ -319,6 +320,16 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
>  		goto rtc_rw_fail;
>  	}
>  
> +	/* Clear Alarm register */
> +	if (!enable) {
> +		rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw, value,
> +					sizeof(value));

This is not properly aligned.

> +		if (rc) {
> +			dev_err(dev, "Write to RTC ALARM register failed\n");

Is that error message necessary? What would be the user action after
seeing that in the logs? Will the logs actually be seen?

> +			goto rtc_rw_fail;
> +		}
> +	}
> +
Mohit Aggarwal March 17, 2020, 4:50 a.m. UTC | #2
Hi,

Comments inline.


Thanks & Regards,
Mohit

-----Original Message-----
From: Alexandre Belloni <alexandre.belloni@bootlin.com> 
Sent: Monday, March 16, 2020 3:59 PM
To: Mohit Aggarwal <maggarwa@codeaurora.org>
Cc: a.zummo@towertech.it; linux-rtc@vger.kernel.org;
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rtc-pm8xxx: Clear Alarm register on resume

Hi,

On 16/03/2020 12:41:28+0530, Mohit Aggarwal wrote:
> Currently, alarm register is not cleared on resume leading to reboot 
> during power off charging mode.
> 
> Change-Id: Ie2e6bbab8aa46e4e9b9cc984181ffab557cbbdae

No Change-Id upstream please.
[Mohit]: Will fix in next patch.

> Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
> ---
>  drivers/rtc/rtc-pm8xxx.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c index 
> bbe013f..96e7985 100644
> --- a/drivers/rtc/rtc-pm8xxx.c
> +++ b/drivers/rtc/rtc-pm8xxx.c
> @@ -1,5 +1,5 @@
>  // SPDX-License-Identifier: GPL-2.0-only
> -/* Copyright (c) 2010-2011, 2019, The Linux Foundation. All rights 
> reserved. */
> +/* Copyright (c) 2010-2011, 2019-2020, The Linux Foundation. All 
> +rights reserved. */
>  
>  #include <linux/of.h>
>  #include <linux/module.h>
> @@ -301,6 +301,7 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device
*dev, unsigned int enable)
>  	struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
>  	const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
>  	unsigned int ctrl_reg;
> +	u8 value[NUM_8_BIT_RTC_REGS] = {0};
>  
>  	spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
>  
> @@ -319,6 +320,16 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device
*dev, unsigned int enable)
>  		goto rtc_rw_fail;
>  	}
>  
> +	/* Clear Alarm register */
> +	if (!enable) {
> +		rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw,
value,
> +					sizeof(value));

This is not properly aligned.
[Mohit]: I don't see any alignment issue at my end. I can see proper tabs
are present.

> +		if (rc) {
> +			dev_err(dev, "Write to RTC ALARM register
failed\n");

Is that error message necessary? What would be the user action after seeing
that in the logs? Will the logs actually be seen?
[Mohit]: In case issue in question reproduces even after this change then
for debugging purposes user can look out for this error log in kernel logs
which can help to triage the issue.

> +			goto rtc_rw_fail;
> +		}
> +	}
> +

--
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Alexandre Belloni March 17, 2020, 11:55 a.m. UTC | #3
On 17/03/2020 10:20:36+0530, maggarwa@codeaurora.org wrote:
> Hi,
> 
> Comments inline.
> 
> 
> Thanks & Regards,
> Mohit
> 
> -----Original Message-----
> From: Alexandre Belloni <alexandre.belloni@bootlin.com> 
> Sent: Monday, March 16, 2020 3:59 PM
> To: Mohit Aggarwal <maggarwa@codeaurora.org>
> Cc: a.zummo@towertech.it; linux-rtc@vger.kernel.org;
> linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] rtc-pm8xxx: Clear Alarm register on resume
> 
> Hi,
> 
> On 16/03/2020 12:41:28+0530, Mohit Aggarwal wrote:
> > Currently, alarm register is not cleared on resume leading to reboot 
> > during power off charging mode.
> > 
> > Change-Id: Ie2e6bbab8aa46e4e9b9cc984181ffab557cbbdae
> 
> No Change-Id upstream please.
> [Mohit]: Will fix in next patch.
> 
> > Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
> > ---
> >  drivers/rtc/rtc-pm8xxx.c | 13 ++++++++++++-
> >  1 file changed, 12 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c index 
> > bbe013f..96e7985 100644
> > --- a/drivers/rtc/rtc-pm8xxx.c
> > +++ b/drivers/rtc/rtc-pm8xxx.c
> > @@ -1,5 +1,5 @@
> >  // SPDX-License-Identifier: GPL-2.0-only
> > -/* Copyright (c) 2010-2011, 2019, The Linux Foundation. All rights 
> > reserved. */
> > +/* Copyright (c) 2010-2011, 2019-2020, The Linux Foundation. All 
> > +rights reserved. */
> >  
> >  #include <linux/of.h>
> >  #include <linux/module.h>
> > @@ -301,6 +301,7 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device
> *dev, unsigned int enable)
> >  	struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
> >  	const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
> >  	unsigned int ctrl_reg;
> > +	u8 value[NUM_8_BIT_RTC_REGS] = {0};
> >  
> >  	spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
> >  
> > @@ -319,6 +320,16 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device
> *dev, unsigned int enable)
> >  		goto rtc_rw_fail;
> >  	}
> >  
> > +	/* Clear Alarm register */
> > +	if (!enable) {
> > +		rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw,
> value,
> > +					sizeof(value));
> 
> This is not properly aligned.
> [Mohit]: I don't see any alignment issue at my end. I can see proper tabs
> are present.
> 

The alignment should match the opening parenthesis.

> > +		if (rc) {
> > +			dev_err(dev, "Write to RTC ALARM register
> failed\n");
> 
> Is that error message necessary? What would be the user action after seeing
> that in the logs? Will the logs actually be seen?
> [Mohit]: In case issue in question reproduces even after this change then
> for debugging purposes user can look out for this error log in kernel logs
> which can help to triage the issue.
> 

Who in the field on the final product will see this error message? For
debugging purposes, regmap already provides plenty of tracing
facilities.
Mohit Aggarwal March 18, 2020, 9:56 a.m. UTC | #4
Comments inline.

-----Original Message-----
From: Alexandre Belloni <alexandre.belloni@bootlin.com> 
Sent: Tuesday, March 17, 2020 5:25 PM
To: maggarwa@codeaurora.org
Cc: a.zummo@towertech.it; linux-rtc@vger.kernel.org;
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rtc-pm8xxx: Clear Alarm register on resume

On 17/03/2020 10:20:36+0530, maggarwa@codeaurora.org wrote:
> Hi,
> 
> Comments inline.
> 
> 
> Thanks & Regards,
> Mohit
> 
> -----Original Message-----
> From: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Sent: Monday, March 16, 2020 3:59 PM
> To: Mohit Aggarwal <maggarwa@codeaurora.org>
> Cc: a.zummo@towertech.it; linux-rtc@vger.kernel.org; 
> linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] rtc-pm8xxx: Clear Alarm register on resume
> 
> Hi,
> 
> On 16/03/2020 12:41:28+0530, Mohit Aggarwal wrote:
> > Currently, alarm register is not cleared on resume leading to reboot 
> > during power off charging mode.
> > 
> > Change-Id: Ie2e6bbab8aa46e4e9b9cc984181ffab557cbbdae
> 
> No Change-Id upstream please.
> [Mohit]: Will fix in next patch.
> 
> > Signed-off-by: Mohit Aggarwal <maggarwa@codeaurora.org>
> > ---
> >  drivers/rtc/rtc-pm8xxx.c | 13 ++++++++++++-
> >  1 file changed, 12 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c 
> > index
> > bbe013f..96e7985 100644
> > --- a/drivers/rtc/rtc-pm8xxx.c
> > +++ b/drivers/rtc/rtc-pm8xxx.c
> > @@ -1,5 +1,5 @@
> >  // SPDX-License-Identifier: GPL-2.0-only
> > -/* Copyright (c) 2010-2011, 2019, The Linux Foundation. All rights 
> > reserved. */
> > +/* Copyright (c) 2010-2011, 2019-2020, The Linux Foundation. All 
> > +rights reserved. */
> >  
> >  #include <linux/of.h>
> >  #include <linux/module.h>
> > @@ -301,6 +301,7 @@ static int pm8xxx_rtc_alarm_irq_enable(struct 
> > device
> *dev, unsigned int enable)
> >  	struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
> >  	const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
> >  	unsigned int ctrl_reg;
> > +	u8 value[NUM_8_BIT_RTC_REGS] = {0};
> >  
> >  	spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
> >  
> > @@ -319,6 +320,16 @@ static int pm8xxx_rtc_alarm_irq_enable(struct 
> > device
> *dev, unsigned int enable)
> >  		goto rtc_rw_fail;
> >  	}
> >  
> > +	/* Clear Alarm register */
> > +	if (!enable) {
> > +		rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw,
> value,
> > +					sizeof(value));
> 
> This is not properly aligned.
> [Mohit]: I don't see any alignment issue at my end. I can see proper 
> tabs are present.
> 

The alignment should match the opening parenthesis.
[Mohit]: Thanks for clarification. Uploaded new patch.

> > +		if (rc) {
> > +			dev_err(dev, "Write to RTC ALARM register
> failed\n");
> 
> Is that error message necessary? What would be the user action after 
> seeing that in the logs? Will the logs actually be seen?
> [Mohit]: In case issue in question reproduces even after this change 
> then for debugging purposes user can look out for this error log in 
> kernel logs which can help to triage the issue.
> 

Who in the field on the final product will see this error message? For
debugging purposes, regmap already provides plenty of tracing facilities.
[Mohit]: This is mostly for debugging issues reported during internal tests
using kernel logs. Also added the debug error log to remain in-line with
other error logs in file.


--
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
diff mbox series

Patch

diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index bbe013f..96e7985 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -1,5 +1,5 @@ 
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2010-2011, 2019, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2010-2011, 2019-2020, The Linux Foundation. All rights reserved. */
 
 #include <linux/of.h>
 #include <linux/module.h>
@@ -301,6 +301,7 @@  static int pm8xxx_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
 	struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
 	const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
 	unsigned int ctrl_reg;
+	u8 value[NUM_8_BIT_RTC_REGS] = {0};
 
 	spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
 
@@ -319,6 +320,16 @@  static int pm8xxx_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
 		goto rtc_rw_fail;
 	}
 
+	/* Clear Alarm register */
+	if (!enable) {
+		rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw, value,
+					sizeof(value));
+		if (rc) {
+			dev_err(dev, "Write to RTC ALARM register failed\n");
+			goto rtc_rw_fail;
+		}
+	}
+
 rtc_rw_fail:
 	spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
 	return rc;