Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp987376pxb; Thu, 21 Oct 2021 13:27:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzfb5tNT/mdj4At2aOrPVJ8IPwWmoK2CddwAB4W7dRNLC6PXVnjjiFglp5eCVk2mDVNCMSI X-Received: by 2002:a17:906:368e:: with SMTP id a14mr9444548ejc.60.1634848063100; Thu, 21 Oct 2021 13:27:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634848063; cv=none; d=google.com; s=arc-20160816; b=oxh7gjRmFpyt+bmTPGpKFuNdsrgKHDrbmkRZZY01gIHrl532Dl/05j88VsN4I4/Lb3 gVhbJfpD2yU622fFHLh0yYbLAEUVqriUNxBWNaFxxcx1pQHnmBuFjr5zJhiZdM0Y5Tdw vZ/e4TA3kLiMRJCFRK/LrSFJnBULQTFcmAjTdyvfUNnPXvHvxq9PWxOhWkWhkvLOjf8u XYYY6qEOsH6GoJY2wMbaE2bZCPTqreRoDDE4cHUCr1A0RMX8VB2AQPZIX5UyhvN1y3ui A5705mXqJ8Sp7ugK3AKe/LaKQUR8ljm49f+vbF1rn6Y9pA7bHTti5+0r9Ay6GE0CS7xT 7QnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FoCS2Of8JxmjrHA0ciYvVff3O/0PQ9jcwIzAZgxkZS4=; b=Pm2uAKdPUjnoqoewk0a0Hd4+LmV+zP4REwR4sJ9rMC9+ye+LogCpzqPblC+nErWQug x+R8Dz6rl9f+gLxgNK5ZoCxoe81MPp3kEpXKp5YdQKirQeEJRr8HKiJznI/KHU4dPovi 5admrMREvR1wrYMkjgFr+EwavDGszgDZLwfJ9sWaV04pQfxg73arLKaTfP0l9FzY5koV YVCMnQ6o2J8WSgRjiHzKrX21UPnO6+7KMZd57Y9lBCh84ebLG2iXUbZbGYbQnQmEZR4s QIGHqiUQ9duHA2G7REEUKGSImVAt5SdzqIVeb5zPbY+r8q+u9MmdKkgCxkT3k3sNAEA0 H3yA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xZaim99s; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y24si8514720edu.314.2021.10.21.13.27.20; Thu, 21 Oct 2021 13:27:43 -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; dkim=pass header.i=@linaro.org header.s=google header.b=xZaim99s; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231502AbhJUUZ2 (ORCPT + 99 others); Thu, 21 Oct 2021 16:25:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232107AbhJUUZV (ORCPT ); Thu, 21 Oct 2021 16:25:21 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4EBDEC061224 for ; Thu, 21 Oct 2021 13:23:03 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id w19so2032016edd.2 for ; Thu, 21 Oct 2021 13:23:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FoCS2Of8JxmjrHA0ciYvVff3O/0PQ9jcwIzAZgxkZS4=; b=xZaim99sf1bhVyq0cz+y+AGLha2Rs85XXTMdgylFks8k1SKW0pM6Tf4ovbIHHTJm7a f5k7Kc/crnsPDQWV92l8nrxWK26UPS0UA+rBvHaM2ffryWvXOWI8H+Vc12Tq2LKjphVs wzjP56H05iTP5rL9g/zdrJ2L6raRN3zejvpMVVn9veKSfip5gnXk19/TJYGMM3Cs6Xro NiV7ep6Y1Es7b4YDM39aRn7Qzq1XDw0L/B1nl0TMSmfxpJ8SPH0oTL+60Uvt5Zohr7Vz 5qn3lg2t4TNzdHxT2nEQBsMV5NBCg2afSX3CPIj72gsISFp6/SGISgJ86s1J9/wes7lJ ge4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FoCS2Of8JxmjrHA0ciYvVff3O/0PQ9jcwIzAZgxkZS4=; b=o8yHifaNSU/EUntdNjTOYmooN53/kcuZQF4A5zpJy65QTafEoiYTNB5oLney7fTffe QqTdcHttIpACyv1xPOuqF3955WDY4N71Ew2heVQZRordG/64UTtjhFGGfqT1GcX55CYX OtwWUQ3aMDQIl2HmFDbYYurHCtMqvLp4IFJocQareNWZtL5w//ILykAXE+YCj2L/5CCs 4dY3wmByGxfgAVzDSMBwBMOgY3mUAM0wLaLmFIys9gCuraabDKE87kmg+0s31MLYrPQq lao2lCSQvPAvt162BlyUebhauAXF8vBcEpMFx+OzU0Jl1170n2cWqmOTxuhcIVvbWEej fTPg== X-Gm-Message-State: AOAM531l3YCAVCznw1bOgZGq/DVm2f7isP5VP04avQy/ry4wJAgTxv0/ myPWLhhdMEDQ+mhNifp9pv/cYQ== X-Received: by 2002:a17:906:181a:: with SMTP id v26mr2131988eje.478.1634847781841; Thu, 21 Oct 2021 13:23:01 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id u18sm3293456eds.86.2021.10.21.13.23.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Oct 2021 13:23:01 -0700 (PDT) From: Sam Protsenko To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/3] rtc: s3c: Add time range Date: Thu, 21 Oct 2021 23:22:56 +0300 Message-Id: <20211021202256.28517-4-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211021202256.28517-1-semen.protsenko@linaro.org> References: <20211021202256.28517-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This RTC driver starts counting from 2000 to avoid Y2K problem. Also it only supports 100 years range for all RTCs. Provide that info to RTC framework. Also remove check for 100 years range in s3c_rtc_settime(), as RTC core won't pass any invalid values to the driver, now that correct range is set. Here is the rationale on 100 years range limitation. Info on different Samsung RTCs (credit goes to Krzysztof Kozlowski): - All S3C chips have only 8-bit wide year register (can store 100 years range in BCD format) - S5Pv210 and Exynos chips have 12-bit year register (can store 1000 years range in BCD format) But in reality we usually can't make use of those 12 bits either: - RTCs might think that both 2000 and 2100 years are leap years. So when the YEAR register is 0, RTC goes from 28 Feb to 29 Feb, and when the YEAR register is 100, RTC also goes from 28 Feb to 29 Feb. This is of course incorrect: RTC breaks leap year criteria, which breaks the time contiguity, which leads to inability to use the RTC after year of 2099. It was found for example on Exynos850 SoC. - Despite having 12 bits for holding the year value, RTC might overflow the year value internally much earlier. For example, on Exynos850 the RTC overflows when YEAR=159, making the next YEAR=0. This way RTC actually has range of 160 years, not 1000 as one may think. All that said, there is no sense in trying to increase the time range for more than 100 years on RTCs that seem capable of that. It also doesn't have too much practical value -- current hardware will be probably obsolete by 2100. Tested manually on Exynos850 RTC: $ date -s "1999-12-31 23:59:50" $ hwclock -w -f /dev/rtc0 $ date -s "2100-01-01 00:00:00" $ hwclock -w -f /dev/rtc0 $ date -s "2000-01-01 00:00:00" $ hwclock -w -f /dev/rtc0 $ hwclock -r -f /dev/rtc0 $ date -s "2099-12-31 23:59:50" $ hwclock -w -f /dev/rtc0 $ hwclock -r -f /dev/rtc0 Signed-off-by: Sam Protsenko --- Changes in v2: - Removed check for 100 years range in s3c_rtc_settime() - Improved the commit message drivers/rtc/rtc-s3c.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index d1baf655c008..db529733c9c4 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -219,11 +219,6 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) rtc_tm.tm_year -= 100; rtc_tm.tm_mon += 1; - if (rtc_tm.tm_year < 0 || rtc_tm.tm_year >= 100) { - dev_err(dev, "rtc only supports 100 years\n"); - return -EINVAL; - } - return s3c_rtc_write_time(info, &rtc_tm); } @@ -478,6 +473,8 @@ static int s3c_rtc_probe(struct platform_device *pdev) } info->rtc->ops = &s3c_rtcops; + info->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; + info->rtc->range_max = RTC_TIMESTAMP_END_2099; ret = devm_rtc_register_device(info->rtc); if (ret) -- 2.30.2