Messages in this thread | | | Date | Tue, 21 Mar 2023 12:46:00 +0100 | From | Neil Armstrong <> | Subject | Re: [PATCH v1 RFC] rtc: meson-vrtc: Use ktime_get_real_ts64() to get the current time |
| |
On 20/03/2023 22:21, Martin Blumenstingl wrote: > The VRTC alarm register can be programmed with an amount of seconds > after which the SoC will be woken up by the VRTC timer again. We are > already converting the alarm time from meson_vrtc_set_alarm() to > "seconds since 1970". This means we also need to use "seconds since > 1970" for the current time. > > This fixes a problem where setting the alarm to one minute in the future > results in the firmware (which handles wakeup) to output (on the serial > console) that the system will be woken up in billions of seconds. > ktime_get_raw_ts64() returns the time since boot, not since 1970. Switch > to ktime_get_real_ts64() to fix the calculation of the alarm time and to > make the SoC wake up at the specified date/time. Also the firmware > (which manages suspend) now prints either 59 or 60 seconds until wakeup > (depending on how long it takes for the system to enter suspend). > > Fixes: 6ef35398e827 ("rtc: Add Amlogic Virtual Wake RTC") > Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> > --- > drivers/rtc/rtc-meson-vrtc.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/rtc-meson-vrtc.c b/drivers/rtc/rtc-meson-vrtc.c > index 1463c8621561..648fa362ec44 100644 > --- a/drivers/rtc/rtc-meson-vrtc.c > +++ b/drivers/rtc/rtc-meson-vrtc.c > @@ -23,7 +23,7 @@ static int meson_vrtc_read_time(struct device *dev, struct rtc_time *tm) > struct timespec64 time; > > dev_dbg(dev, "%s\n", __func__); > - ktime_get_raw_ts64(&time); > + ktime_get_real_ts64(&time); > rtc_time64_to_tm(time.tv_sec, tm); > > return 0; > @@ -96,7 +96,7 @@ static int __maybe_unused meson_vrtc_suspend(struct device *dev) > long alarm_secs; > struct timespec64 time; > > - ktime_get_raw_ts64(&time); > + ktime_get_real_ts64(&time); > local_time = time.tv_sec; > > dev_dbg(dev, "alarm_time = %lus, local_time=%lus\n",
Thx for the fix!
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
| |