]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtc: loongson: Add missing alarm notifications for ACPI RTC events
authorLiu Dalin <liudalin@kylinsec.com.cn>
Fri, 9 May 2025 08:44:16 +0000 (16:44 +0800)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sat, 24 May 2025 22:18:29 +0000 (00:18 +0200)
When an application sets and enables an alarm on Loongson RTC devices,
the alarm notification fails to propagate to userspace because the
ACPI event handler omits calling rtc_update_irq().

As a result, processes waiting via select() or poll() on RTC device
files fail to receive alarm notifications.

The ACPI interrupt is also triggered multiple times. In loongson_rtc_handler,
we need to clear TOY_MATCH0_REG to resolve this issue.

Fixes: 09471d8f5b39 ("rtc: loongson: clear TOY_MATCH0_REG in loongson_rtc_isr()")
Fixes: 1b733a9ebc3d ("rtc: Add rtc driver for the Loongson family chips")
Signed-off-by: Liu Dalin <liudalin@kylinsec.com.cn>
Reviewed-by: Binbin Zhou <zhoubinbin@loongson.cn>
Link: https://lore.kernel.org/r/20250509084416.7979-1-liudalin@kylinsec.com.cn
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-loongson.c

index 97e5625c064ceb889ad56a2d951f95e6fc395803..2ca7ffd5d7a92afabdcd7f9890740dc8cccc99ae 100644 (file)
@@ -129,6 +129,14 @@ static u32 loongson_rtc_handler(void *id)
 {
        struct loongson_rtc_priv *priv = (struct loongson_rtc_priv *)id;
 
+       rtc_update_irq(priv->rtcdev, 1, RTC_AF | RTC_IRQF);
+
+       /*
+        * The TOY_MATCH0_REG should be cleared 0 here,
+        * otherwise the interrupt cannot be cleared.
+        */
+       regmap_write(priv->regmap, TOY_MATCH0_REG, 0);
+
        spin_lock(&priv->lock);
        /* Disable RTC alarm wakeup and interrupt */
        writel(readl(priv->pm_base + PM1_EN_REG) & ~RTC_EN,