All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sam Protsenko <semen.protsenko@linaro.org>
To: Alessandro Zummo <a.zummo@towertech.it>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH 4/4] rtc: s3c: Fix RTC read on first boot
Date: Tue, 19 Oct 2021 16:17:24 +0300	[thread overview]
Message-ID: <20211019131724.3109-5-semen.protsenko@linaro.org> (raw)
In-Reply-To: <20211019131724.3109-1-semen.protsenko@linaro.org>

On first RTC boot it has the month register value set to 0.
Unconditional subtracting of 1 subsequently in s3c_rtc_gettime() leads
to the next error message in kernel log:

    hctosys: unable to read the hardware clock

That happens in s3c_rtc_probe() when trying to register the RTC, which
in turn tries to read and validate the time. Initialize RTC date/time
registers to valid values in probe function on the first boot to prevent
such errors.

Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
 drivers/rtc/rtc-s3c.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index 238928e29fbc..c7e763bcf61f 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -403,6 +403,28 @@ static int s3c_rtc_remove(struct platform_device *pdev)
 	return 0;
 }
 
+/* Set RTC with valid date/time values on first boot */
+static int s3c_rtc_init_time(struct s3c_rtc *info)
+{
+	struct rtc_time tm;
+	int ret;
+
+	ret = s3c_rtc_read_time(info, &tm);
+	if (ret)
+		return ret;
+
+	/* Only init RTC date/time on first boot */
+	if (tm.tm_mday > 0)
+		return 0;
+
+	/* Init date/time: 1 Jan 2000 00:00:00 */
+	memset(&tm, 0, sizeof(struct rtc_time));
+	tm.tm_mday = 1;	/* tm_mday min valid value is 1 */
+	tm.tm_mon = 1;	/* January in internal representation */
+
+	return s3c_rtc_write_time(info, &tm);
+}
+
 static int s3c_rtc_probe(struct platform_device *pdev)
 {
 	struct s3c_rtc *info = NULL;
@@ -471,6 +493,10 @@ static int s3c_rtc_probe(struct platform_device *pdev)
 
 	device_init_wakeup(&pdev->dev, 1);
 
+	ret = s3c_rtc_init_time(info);
+	if (ret)
+		goto err_nortc;
+
 	info->rtc = devm_rtc_allocate_device(&pdev->dev);
 	if (IS_ERR(info->rtc)) {
 		ret = PTR_ERR(info->rtc);
-- 
2.30.2


  parent reply	other threads:[~2021-10-19 13:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-19 13:17 [PATCH 0/4] rtc: s3c: S3C driver improvements Sam Protsenko
2021-10-19 13:17 ` [PATCH 1/4] rtc: s3c: Remove usage of devm_rtc_device_register() Sam Protsenko
2021-10-19 16:11   ` Krzysztof Kozlowski
2021-10-19 13:17 ` [PATCH 2/4] rtc: s3c: Add time range Sam Protsenko
2021-10-19 16:17   ` Krzysztof Kozlowski
2021-10-19 16:22     ` Krzysztof Kozlowski
2021-10-19 16:35       ` Sam Protsenko
2021-10-19 17:48         ` Alexandre Belloni
2021-10-19 19:12           ` Sam Protsenko
2021-10-19 21:04             ` Alexandre Belloni
2021-10-20  6:29             ` Krzysztof Kozlowski
2021-10-21 19:48               ` Sam Protsenko
2021-10-21 20:55                 ` Alexandre Belloni
2021-10-19 16:20   ` Alexandre Belloni
2021-10-19 16:31     ` Sam Protsenko
2021-10-19 17:46       ` Alexandre Belloni
2021-10-19 13:17 ` [PATCH 3/4] rtc: s3c: Extract read/write IO into separate functions Sam Protsenko
2021-10-19 16:24   ` Krzysztof Kozlowski
2021-10-19 13:17 ` Sam Protsenko [this message]
2021-10-19 15:48   ` [PATCH 4/4] rtc: s3c: Fix RTC read on first boot Alexandre Belloni
2021-10-19 16:04     ` Sam Protsenko
2021-10-19 16:19       ` Krzysztof Kozlowski
2021-10-19 16:10     ` Krzysztof Kozlowski

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=20211019131724.3109-5-semen.protsenko@linaro.org \
    --to=semen.protsenko@linaro.org \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=krzysztof.kozlowski@canonical.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.