From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751533AbdFGNGA convert rfc822-to-8bit (ORCPT ); Wed, 7 Jun 2017 09:06:00 -0400 Received: from gw.hale.at ([89.26.116.210]:45968 "EHLO gw.hale.at" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751203AbdFGNF6 (ORCPT ); Wed, 7 Jun 2017 09:05:58 -0400 X-HALE-Mailborder-Watermark: 1497445555.63235@wRRKWOW4nZ0ztbFVkZyAjQ X-HALE-Mailborder-From: michael.thalmeier@hale.at X-HALE-Mailborder-SpamCheck: not spam, SpamAssassin (nicht zwischen gespeichert, Wertung=-1.899, benoetigt 3, autolearn=not spam, ALL_TRUSTED -1.00, BAYES_00 -1.90, SURBL_BLOCKED 1.00, URIBL_BLOCKED 0.00) X-HALE-Mailborder-IP-Protocol: IPv4 X-HALE-Mailborder: Found to be clean X-HALE-Mailborder-ID: 6B2D92CA47C.A9E0B X-HALE-Mailborder-Information: Please contact your admin for more information Date: Wed, 7 Jun 2017 15:05:03 +0200 From: Michael Thalmeier To: Alexandre Belloni Cc: Alessandro Zummo , linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] rtc: rtc-stmp3xxx: detect power failure on backup power domain Message-ID: <20170607130503.GA32452@entw49.hale> References: <20170518144521.9294-1-michael.thalmeier@hale.at> <20170518155631.kcbkr6ldxailkg7i@piout.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20170518155631.kcbkr6ldxailkg7i@piout.net> User-Agent: Mutt/1.8.0 (2017-02-23) Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 18, 2017 at 05:56:31PM +0200, Alexandre Belloni wrote: > Hi, > > On 18/05/2017 at 16:45:21 +0200, Michael Thalmeier wrote: > > To detect when the backup power domain has lost power a software defined bit > > is set in one of the general purpose persistent registers when writing a new > > time into the rtc. > > When reading the time this bit is checked to determine if a power fail has > > happened since the last time the rtc time was set. > > > > I'm kind of concerned that other people may want to use those register > for something else but I don't currently have anything better to > suggest. > > The other concern is that when updating the kernel, this will make amm > the rtc report that the time is invalid until the next update. So this > should be disabled by default. How would you think this is best to disable by default? With a config option or with a module parameter? Either way would also allow to make the bit mask in the PERSISTENT2 register configurable, so one can use whichever bit is still unused by some other applications. > > > When we detect a power fail we return -ENODATA. > > > > All the other drivers return -EINVAL in that case. > > > Signed-off-by: Michael Thalmeier > > --- > > drivers/rtc/rtc-stmp3xxx.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/drivers/rtc/rtc-stmp3xxx.c b/drivers/rtc/rtc-stmp3xxx.c > > index d578e40..51330ec 100644 > > --- a/drivers/rtc/rtc-stmp3xxx.c > > +++ b/drivers/rtc/rtc-stmp3xxx.c > > @@ -62,6 +62,9 @@ > > /* missing bitmask in headers */ > > #define STMP3XXX_RTC_PERSISTENT1_FORCE_UPDATER 0x80000000 > > > > +#define STMP3XXX_RTC_PERSISTENT2 0x80 > > +#define STMP3XXX_RTC_PERSISTENT2_VALID_TIME 0x01 > > + > > struct stmp3xxx_rtc_data { > > struct rtc_device *rtc; > > void __iomem *io; > > @@ -160,6 +163,10 @@ static int stmp3xxx_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) > > if (ret) > > return ret; > > > > + if (!(readl(rtc_data->io + STMP3XXX_RTC_PERSISTENT2) & > > + STMP3XXX_RTC_PERSISTENT2_VALID_TIME)) > > + return -ENODATA; > > + > > rtc_time_to_tm(readl(rtc_data->io + STMP3XXX_RTC_SECONDS), rtc_tm); > > return 0; > > } > > @@ -169,6 +176,8 @@ static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t) > > struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); > > > > writel(t, rtc_data->io + STMP3XXX_RTC_SECONDS); > > + writel(STMP3XXX_RTC_PERSISTENT2_VALID_TIME, > > + rtc_data->io + STMP3XXX_RTC_PERSISTENT2 + STMP_OFFSET_REG_SET); > > return stmp3xxx_wait_time(rtc_data); > > } > > > > -- > > 2.9.2 > > > > -- > Alexandre Belloni, Free Electrons > Embedded Linux and Kernel engineering > http://free-electrons.com -- Michael Thalmeier (Entwicklung) HALE electronic GmbH Eugen-Müller-Straße 18, 5020 Salzburg, Austria Tel: +43 (662) 439011 0 Fax: +43 (662) 439011 9 michael.thalmeier@hale.at Firmenbuchnummer: FN 66801m HG Salzburg