diff mbox series

[V2] rtc: loongson: Add missing alarm notifications for ACPI RTC events

Message ID 20250509084416.7979-1-liudalin@kylinsec.com.cn
State Accepted
Headers show
Series [V2] rtc: loongson: Add missing alarm notifications for ACPI RTC events | expand

Commit Message

Liu Dalin May 9, 2025, 8:44 a.m. UTC
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>
---
 drivers/rtc/rtc-loongson.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Binbin Zhou May 13, 2025, 7:32 a.m. UTC | #1
On 2025/5/9 16:44, Liu Dalin wrote:
> 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>
> ---
>   drivers/rtc/rtc-loongson.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
>
> diff --git a/drivers/rtc/rtc-loongson.c b/drivers/rtc/rtc-loongson.c
> index 97e5625c064c..2ca7ffd5d7a9 100644
> --- a/drivers/rtc/rtc-loongson.c
> +++ b/drivers/rtc/rtc-loongson.c
> @@ -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,
Thanks.
Binbin
Alexandre Belloni May 24, 2025, 10:28 p.m. UTC | #2
On Fri, 09 May 2025 16:44:16 +0800, Liu Dalin wrote:
> 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.
> 
> [...]

Applied, thanks!

[1/1] rtc: loongson: Add missing alarm notifications for ACPI RTC events
      https://git.kernel.org/abelloni/c/5af9f1fa5768

Best regards,
diff mbox series

Patch

diff --git a/drivers/rtc/rtc-loongson.c b/drivers/rtc/rtc-loongson.c
index 97e5625c064c..2ca7ffd5d7a9 100644
--- a/drivers/rtc/rtc-loongson.c
+++ b/drivers/rtc/rtc-loongson.c
@@ -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,