Thread (4 messages) 4 messages, 2 authors, 2025-10-05

RE: [PATCH V2] rtc: zynqmp: Restore alarm functionality after kexec transition

From: T, Harini <hidden>
Date: 2025-09-25 06:04:24
Also in: linux-rtc, lkml

[Public]

Ping!
-----Original Message-----
From: T, Harini
Sent: Wednesday, September 3, 2025 8:53 PM
To: Harini T <redacted>; alexandre.belloni@bootlin.com; Simek,
Michal [off-list ref]
Cc: linux-rtc@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
kernel@vger.kernel.org; git (AMD-Xilinx) [off-list ref]
Subject: RE: [PATCH V2] rtc: zynqmp: Restore alarm functionality after kexec
transition

Hi Alexandre,
quoted
-----Original Message-----
From: Harini T <redacted>
Sent: Wednesday, July 30, 2025 7:51 PM
To: alexandre.belloni@bootlin.com; Simek, Michal
[off-list ref]
Cc: linux-rtc@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
linux- kernel@vger.kernel.org; git (AMD-Xilinx) [off-list ref]; T,
Harini [off-list ref]
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.
quoted
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 <redacted>
---
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@amd.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
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help