Re: [PATCH RESEND] alarmtimer: Use aie_timer from RTC device instead of own timer
From: Thomas Gleixner
Date: Tue Oct 01 2024 - 04:32:23 EST
On Mon, Sep 30 2024 at 13:29, Mario Limonciello wrote:
> It was reported that suspend-then-hibernate stopped working with modern
> systemd versions on an AMD Cezanne system. The reason for this breakage
> was because systemd switched to using alarmtimer instead of the wakealarm
> sysfs file.
>
> The wakealarm sysfs file programs the time to the `rtc->aie_timer` member
> of the RTC, whereas the alarmtimer suspend routine programs it to it's
> own device.
>
> On AMD Cezanne systems rtc_read_alarm() is used to program a secondary
> timer with the value of the timer. This behavior was introduced by
> commit 59348401ebed9 ("platform/x86: amd-pmc: Add special handling
> for timer based S0i3 wakeup").
>
> As rtc_read_alarm() uses the `rtc->aie_timer` to report the cached
> timer no alarm is provided as enabled.
>
> To fix this issue, drop the use of a dedicated timer for the alarmtimer
> and instead use `rtc->aie_timer` in the alarmtimer suspend/resume
> routines.
I'm not sure that this is correct. There is a reason why alarmtimer uses
a dedicated timer and this worked correctly so far.
I'd rather look at commit 59348401ebed9, which plays games with the RTC.
Thanks,
tglx