[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
<DS7PR12MB606995B08A344C01711C7BCC9201A@DS7PR12MB6069.namprd12.prod.outlook.com>
Date: Wed, 3 Sep 2025 15:22:37 +0000
From: "T, Harini" <Harini.T@....com>
To: "T, Harini" <Harini.T@....com>, "alexandre.belloni@...tlin.com"
<alexandre.belloni@...tlin.com>, "Simek, Michal" <michal.simek@....com>
CC: "linux-rtc@...r.kernel.org" <linux-rtc@...r.kernel.org>,
"linux-arm-kernel@...ts.infradead.org"
<linux-arm-kernel@...ts.infradead.org>, "linux-kernel@...r.kernel.org"
<linux-kernel@...r.kernel.org>, "git (AMD-Xilinx)" <git@....com>
Subject: RE: [PATCH V2] rtc: zynqmp: Restore alarm functionality after kexec
transition
[Public]
Hi Alexandre,
> -----Original Message-----
> From: Harini T <harini.t@....com>
> Sent: Wednesday, July 30, 2025 7:51 PM
> To: alexandre.belloni@...tlin.com; Simek, Michal
> <michal.simek@....com>
> Cc: linux-rtc@...r.kernel.org; linux-arm-kernel@...ts.infradead.org; linux-
> kernel@...r.kernel.org; git (AMD-Xilinx) <git@....com>; T, Harini
> <Harini.T@....com>
> Subject: [PATCH V2] rtc: zynqmp: Restore alarm functionality after kexec
> transition
>
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
>
>
> During kexec reboots, RTC alarms that are fired during the kernel transition
> experience delayed execution. The new kernel would eventually honor these
> alarms, but the interrupt handlers would only execute after the driver probe
> is completed rather than at the intended alarm time.
>
> This is because pending alarm interrupt status from the previous kernel is not
> properly cleared during driver initialization, causing timing discrepancies in
> alarm delivery.
>
> To ensure precise alarm timing across kexec transitions, enhance the probe
> function to:
> 1. Clear any pending alarm interrupt status from previous boot.
> 2. Detect existing valid alarms and preserve their state.
> 3. Re-enable alarm interrupts for future alarms.
>
> Signed-off-by: Harini T <harini.t@....com>
> ---
> Changes in V2:
> - Remove shutdown handler to prevent alarm interrupts from being
> disabled during kexec transitions.
> - Add alarm state detection and restoration in probe.
>
> V1 link: https://lore.kernel.org/linux-rtc/20250724170517.974356-1-
> harini.t@....com/T/#u
> ---
> drivers/rtc/rtc-zynqmp.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/rtc/rtc-zynqmp.c b/drivers/rtc/rtc-zynqmp.c index
> f39102b66eac..3baa2b481d9f 100644
> --- a/drivers/rtc/rtc-zynqmp.c
> +++ b/drivers/rtc/rtc-zynqmp.c
> @@ -277,6 +277,10 @@ static irqreturn_t xlnx_rtc_interrupt(int irq, void *id)
> static int xlnx_rtc_probe(struct platform_device *pdev) {
> struct xlnx_rtc_dev *xrtcdev;
> + bool is_alarm_set = false;
> + u32 pending_alrm_irq;
> + u32 current_time;
> + u32 alarm_time;
> int ret;
>
> xrtcdev = devm_kzalloc(&pdev->dev, sizeof(*xrtcdev), GFP_KERNEL); @@
> -296,6 +300,17 @@ static int xlnx_rtc_probe(struct platform_device *pdev)
> if (IS_ERR(xrtcdev->reg_base))
> return PTR_ERR(xrtcdev->reg_base);
>
> + /* Clear any pending alarm interrupts from previous kernel/boot */
> + pending_alrm_irq = readl(xrtcdev->reg_base + RTC_INT_STS) &
> RTC_INT_ALRM;
> + if (pending_alrm_irq)
> + writel(pending_alrm_irq, xrtcdev->reg_base +
> + RTC_INT_STS);
> +
> + /* Check if a valid alarm is already set from previous kernel/boot */
> + alarm_time = readl(xrtcdev->reg_base + RTC_ALRM);
> + current_time = readl(xrtcdev->reg_base + RTC_CUR_TM);
> + if (alarm_time > current_time && alarm_time != 0)
> + is_alarm_set = true;
> +
> xrtcdev->alarm_irq = platform_get_irq_byname(pdev, "alarm");
> if (xrtcdev->alarm_irq < 0)
> return xrtcdev->alarm_irq; @@ -337,6 +352,10 @@ static int
> xlnx_rtc_probe(struct platform_device *pdev)
>
> xlnx_init_rtc(xrtcdev);
>
> + /* Re-enable alarm interrupt if a valid alarm was found */
> + if (is_alarm_set)
> + writel(RTC_INT_ALRM, xrtcdev->reg_base + RTC_INT_EN);
> +
> device_init_wakeup(&pdev->dev, true);
>
> return devm_rtc_register_device(xrtcdev->rtc);
> --
> 2.43.0
>
Kindly following up on this patch. I would appreciate it if you could review it when convenient and let me know if any updates are needed.
Thank you for your time.
Best regards,
Harini T
Powered by blists - more mailing lists