On 12.06.23 08:49, Jan Kiszka wrote: > On 12.06.23 00:16, Alexandre Belloni wrote: >> On 11/06/2023 18:28:22+0200, Jan Kiszka wrote: >>> On 11.06.23 17:11, Alexandre Belloni wrote: >>>> On 11/06/2023 15:38:04+0200, Jan Kiszka wrote: >>>>> On 10.06.23 10:31, Alexandre Belloni wrote: >>>>>> Hello Jan, >>>>>> >>>>>> On 09/06/2023 23:04:12+0200, Jan Kiszka wrote: >>>>>>> From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> >>>>>>> >>>>>>> The VL bit in the seconds register remains set only until seconds are >>>>>>> written under main power. As this often happens during boot-up after >>>>>>> picking up a network time, make sure to preserve the low battery state >>>>>>> across this, caching it and returning it via the RTC_VL_BACKUP_LOW bit. >>>>>>> >>>>>>> To permit userspace clearing this state during runtime, also implement >>>>>>> RTC_VL_CLR that works against the cached state. >>>>>>> >>>>>>> This is emulating RTCs which have a battery voltage check that works >>>>>>> under main power as well. >>>>>>> >>>>>> >>>>>> Emulating doesn't work well and I deliberately chose to not implement >>>>>> it. For example, in your scenario, if you boot twice without using >>>>>> VL_READ, you anyway have lost the information. This makes emulating >>>>>> unreliabl. The fix you need is in userspace where you have to ensure you >>>>>> read the status before setting the time. >>>>> >>>>> Then let's make sure the bit is also set in the hardware register. Then >>>>> also the reboot issue (which is practically a minor one) is solved. The >>>>> current situation is far from optimal. >>>> >>>> This doesn't work because then the time will be considered invalid. I'm >>>> not sure why you don't want to fix your userspace. >>>> >>> >>> Nope, that could be easily avoided in software. The actual problem is >>> that the VL bit is not settable (clear-on-write). And that means we >>> can't do anything about losing the low battery information across >>> reboots - but that's no difference to the situation with the existing >>> driver. >>> >>> There is no "fix" for userspace as there is no standard framework to >>> read-out the status early and retrieve it from there when the user asks >>> for it. That's best done in the kernel. >> >> That's not true, nothing prevents userspace from reading the battery >> status before setting the time and destroying the information which is >> exactly what you should be doing. > > What is your "userspace"? Mine is stock Debian with systemd and > timesyncd enabled. But there is no framework to read the status early > enough and propagate that after timesyncd did its job. Any concrete > suggestion to "fix" userspace? > Ping - I still have seen no suggestion to improve this situation otherwise. >> >>> >>> In that light, I still believe my patch is an improvement over the >>> current situation without making anything worse. >> >> The information goes from behaving deterministically to being unreliable >> which makes the situation worse. > > Nope, not at all. You already lose the VL bit today during reboot when > you have written a new value (which is standard). So this here is not > making things worse. It's rather improving the situation for the first > boot at least. Deterministically. > > Jan > Thanks, Jan -- Siemens AG, Technology Competence Center Embedded Linux