Re: [PATCH v2 3/3] rtc: s3c: Add time range

From: Krzysztof Kozlowski
Date: Fri Oct 22 2021 - 04:54:46 EST


On 21/10/2021 22:22, Sam Protsenko wrote:
> 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 <semen.protsenko@xxxxxxxxxx>
> ---
> Changes in v2:
> - Removed check for 100 years range in s3c_rtc_settime()
> - Improved the commit message
>


Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxx>


Best regards,
Krzysztof