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