lkml.org 
[lkml]   [2023]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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>

\
 
 \ /
  Last update: 2023-03-27 01:10    [W:0.069 / U:0.960 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site