Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp583153pxb; Tue, 19 Oct 2021 08:50:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwS5nR9IUB3hhPL9BeNwmiUx1GQiKD6cDPgSy4gjgSp372w1wbeS2mDkLuRrV/2sPYgGWPM X-Received: by 2002:a17:90b:3ecb:: with SMTP id rm11mr792935pjb.110.1634658618595; Tue, 19 Oct 2021 08:50:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634658618; cv=none; d=google.com; s=arc-20160816; b=clfrKDafgw38mtlZ2cCAcbMmY12aLgYuFdqVKAoVXvD0DsJseW9vIRqFFJ4MN9RFZW B55AWWVRHgcewK2xQk6pg940d0VRmdKXh596LycXhg3VrOPtIXMlWCRmuBHrMiXk6Xwk ETzhDk37FsIM1i2EAUKpn5xBPGA+wTIbx82tFwgBSxdtbJxkIWA8D7luPhqr7HIsPyH/ 6274pqQZjLonby4k8rTSBlryBlfvDODDWhWE0tI4ltoOtz+Ma1uGL8mzPZpqPia5bcxS cClxMJBwvR0mBnhpUFDLx/gufsA0JNTclCqYEBDVeDkxx6kf3xBZHskoAwOcveNgagGg PeHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=TP9MIPuvWUr6R0L9ZwGhoS1qpTBe7zXDLF9GWOtWa6M=; b=dQDrGtIhLHi5Vcz3apM34l/FGpfSPr+S+P4AKC3Vy+qWuK0ZQp7x8trxf+EF11bSM4 cFwDEb7IDz2ByzxAutS6wDYGRKLZMmVN5L2N6JYh/xJ1nU6QSoU0oWcooG/J3+VjImmu 7HsksrBWtaEtARtDNaRgZ7yj2tvHb1hF7hQTvgmhNAMukK4BODAwh/yG43r9yIcCV+UB cGzBFKiIQ1B0LCs13wJ3bgW/CwG7h9GU7myUTKTw/FANQ6WVXnRjR67gYLTwuoJRTzvc uIja068Y3gdDEt5QyetPXivmIx7TjcJRvtuL3MNxZHoqoKFcauHCV//cGWzFRa5SfgSp toSw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z34si2374405pgl.161.2021.10.19.08.50.05; Tue, 19 Oct 2021 08:50:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232249AbhJSPvF (ORCPT + 99 others); Tue, 19 Oct 2021 11:51:05 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:59357 "EHLO relay11.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229803AbhJSPvE (ORCPT ); Tue, 19 Oct 2021 11:51:04 -0400 Received: (Authenticated sender: alexandre.belloni@bootlin.com) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 40B39100007; Tue, 19 Oct 2021 15:48:50 +0000 (UTC) Date: Tue, 19 Oct 2021 17:48:50 +0200 From: Alexandre Belloni To: Sam Protsenko Cc: Alessandro Zummo , Krzysztof Kozlowski , linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] rtc: s3c: Fix RTC read on first boot Message-ID: References: <20211019131724.3109-1-semen.protsenko@linaro.org> <20211019131724.3109-5-semen.protsenko@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20211019131724.3109-5-semen.protsenko@linaro.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 19/10/2021 16:17:24+0300, Sam Protsenko wrote: > 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. > No, never ever do that, the time is bogus and it has to stay this way, else userspace can't know whether the time on the RTC is the actual wall time or just some random value that you have set from the driver. > Signed-off-by: Sam Protsenko > --- > 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 > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com