[PATCH v1 RFC] rtc: meson-vrtc: Use ktime_get_real_ts64() to get the current time

Neil Armstrong neil.armstrong at linaro.org
Tue Mar 21 04:46:00 PDT 2023


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 at 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 at linaro.org>



More information about the linux-arm-kernel mailing list