linux-rtc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Francois Gervais <fgervais@distech-controls.com>
Cc: linux-rtc@vger.kernel.org,
	Alessandro Zummo <a.zummo@towertech.it>,
	Michael McCormick <michael.mccormick@enatel.net>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] rtc: pcf85063: add integrity check
Date: Sat, 17 Apr 2021 00:05:55 +0200	[thread overview]
Message-ID: <YHoKQ9qtupDhXVm3@piout.net> (raw)
In-Reply-To: <20210311174940.23072-1-fgervais@distech-controls.com>

Hi,

On 11/03/2021 12:49:40-0500, Francois Gervais wrote:
> Sometimes when the RTC battery is inserted, the voltage will bounce a
> bit and we've seen that this can randomly flip configuration bits in
> the RTC.
> 
> For example, we've seen COF bits flips and then the output clock
> frequency would not be the expected one anymore.
> 
> To remediate this issue, this adds an optional feature where if the OS
> bit it set on boot, it's possibly because the RTC lost power and again
> possibly because a new battery has been inserted. In that case, it
> reapplies defaults to configuration registers.
> 
> Signed-off-by: Francois Gervais <fgervais@distech-controls.com>
> ---
>  drivers/rtc/rtc-pcf85063.c | 54 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 54 insertions(+)
> 
> diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c
> index 463991c74fdd..774cc4cf93d8 100644
> --- a/drivers/rtc/rtc-pcf85063.c
> +++ b/drivers/rtc/rtc-pcf85063.c
> @@ -57,6 +57,10 @@
>  #define PCF85063_REG_ALM_S		0x0b
>  #define PCF85063_AEN			BIT(7)
>  
> +static bool integrity_check;
> +module_param(integrity_check, bool, 0444);
> +MODULE_PARM_DESC(integrity_check, "Set to one to enable the integrity check.");
> +
>  struct pcf85063_config {
>  	struct regmap_config regmap;
>  	unsigned has_alarms:1;
> @@ -357,6 +361,49 @@ static int pcf85063_load_capacitance(struct pcf85063 *pcf85063,
>  				  PCF85063_REG_CTRL1_CAP_SEL, reg);
>  }
>  
> +static int pcf85063_check_integrity(struct pcf85063 *pcf85063)
> +{
> +	int err;
> +	unsigned int val;
> +
> +	err = regmap_read(pcf85063->regmap, PCF85063_REG_SC, &val);
> +	if (err < 0) {
> +		dev_warn(&pcf85063->rtc->dev, "failed to read OS bit: %d",
> +			 err);
> +		return err;
> +	}
> +
> +	if (!(val & PCF85063_REG_SC_OS)) {
> +		dev_dbg(&pcf85063->rtc->dev, "integrity is ok\n");
> +		return 0;
> +	}
> +
> +	dev_dbg(&pcf85063->rtc->dev, "Power loss detected, restoring defaults\n");
> +	err = regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL1,
> +				 (unsigned int)~PCF85063_REG_CTRL1_CAP_SEL, 0);
> +	if (err < 0)
> +		goto err_restore;
> +
> +	err = regmap_write(pcf85063->regmap, PCF85063_REG_CTRL2, 0);
> +	if (err < 0)
> +		goto err_restore;
> +
> +	err = regmap_write(pcf85063->regmap, PCF85063_REG_OFFSET, 0);
> +	if (err < 0)
> +		goto err_restore;
> +
> +	err = regmap_write(pcf85063->regmap, PCF85063_REG_RAM, 0);
> +	if (err < 0)
> +		goto err_restore;
> +

I'm not sure I get the use case because PCF85063_REG_CTRL2 should be
initialized properly after the driver is probed anyway. The other two
can be set from userspace once it detects the oscillator failure which
would be better at deciding the policy anyway.

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2021-04-16 22:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 17:49 [PATCH 1/1] rtc: pcf85063: add integrity check Francois Gervais
2021-04-16 22:05 ` Alexandre Belloni [this message]
2021-04-19 20:26   ` Gervais, Francois
2021-04-19 21:15     ` Alexandre Belloni
2021-04-23 15:21       ` Gervais, Francois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YHoKQ9qtupDhXVm3@piout.net \
    --to=alexandre.belloni@bootlin.com \
    --cc=a.zummo@towertech.it \
    --cc=fgervais@distech-controls.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=michael.mccormick@enatel.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).