FAILED: patch "[PATCH] rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm" failed to apply to 6.1-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 457b5dbce31209e65e1184716ed3af59cb1c0372
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090900-washout-open-1097@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 457b5dbce31209e65e1184716ed3af59cb1c0372 Mon Sep 17 00:00:00 2001
From: Lad Prabhakar <[email protected]>
Date: Fri, 21 Aug 2026 22:10:19 +0100
Subject: [PATCH] rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm
RZN1_RTC_ALW is a weekday bitmask where bit N represents weekday N. When no alarm has been configured, the register has its power-on-reset value of zero.
rzn1_rtc_read_alarm() uses fls() to convert the weekday bitmask into a weekday number. When RZN1_RTC_ALW is zero, fls(0) returns zero and fls(wday) - 1 evaluates to -1. This invalid weekday is then used to calculate the alarm date and can either leave tm_wday set to -1 or produce a fabricated alarm date.
Treat a zero RZN1_RTC_ALW value as an unset alarm weekday and return without calculating the alarm date. Move reading RZN1_RTC_CTL1 before this check so that alrm->enabled is updated for both configured and unconfigured alarms.
drivers/rtc/rtc-rzn1.c +12 -4
@@ -235,13 +235,24 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)if (ret)return ret; + ctl1 =readl (rtc->base +RZN1_RTC_CTL1 ); + alrm->enabled = !!(ctl1 & (RZN1_RTC_CTL1_ALME |RZN1_RTC_CTL1_1SE )); + min =readl (rtc->base +RZN1_RTC_ALM ); hour =readl (rtc->base +RZN1_RTC_ALH ); - wday =readl (rtc->base +RZN1_RTC_ALW ); tm->tm_sec =0 ; tm->tm_min =bcd2bin (min); tm->tm_hour =bcd2bin (hour); + +/* +* If wday is zero, no bit is set in RZN1_RTC_ALW. This is the +* register's power-on reset value. +*/ + wday =readl (rtc->base +RZN1_RTC_ALW ); +if (!wday) +return 0 ; + delta_days = ((fls (wday) -1 ) - tm->tm_wday +7 ) %7 ; tm->tm_wday =fls (wday) -1 ;
@@ -250,9 +261,6 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)rtc_time64_to_tm (alarm, tm); } - ctl1 =readl (rtc->base +RZN1_RTC_CTL1 ); - alrm->enabled = !!(ctl1 & (RZN1_RTC_CTL1_ALME |RZN1_RTC_CTL1_1SE )); -return 0 ; }
Sasha Levin
maintainerPATCH 1/1 rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm
From: Lad Prabhakar <[email protected]>
[ Upstream commit 457b5dbce31209e65e1184716ed3af59cb1c0372 ]
RZN1_RTC_ALW is a weekday bitmask where bit N represents weekday N. When no alarm has been configured, the register has its power-on-reset value of zero.
rzn1_rtc_read_alarm() uses fls() to convert the weekday bitmask into a weekday number. When RZN1_RTC_ALW is zero, fls(0) returns zero and fls(wday) - 1 evaluates to -1. This invalid weekday is then used to calculate the alarm date and can either leave tm_wday set to -1 or produce a fabricated alarm date.
Treat a zero RZN1_RTC_ALW value as an unset alarm weekday and return without calculating the alarm date. Move reading RZN1_RTC_CTL1 before this check so that alrm->enabled is updated for both configured and unconfigured alarms.
--- drivers/rtc/rtc-rzn1.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/rtc/rtc-rzn1.c +12 -4
@@ -193,13 +193,24 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)if (ret)return ret; + ctl1 =readl (rtc->base +RZN1_RTC_CTL1 ); + alrm->enabled = !!(ctl1 &RZN1_RTC_CTL1_ALME ); + min =readl (rtc->base +RZN1_RTC_ALM ); hour =readl (rtc->base +RZN1_RTC_ALH ); - wday =readl (rtc->base +RZN1_RTC_ALW ); tm->tm_sec =0 ; tm->tm_min =bcd2bin (min); tm->tm_hour =bcd2bin (hour); + +/* +* If wday is zero, no bit is set in RZN1_RTC_ALW. This is the +* register's power-on reset value. +*/ + wday =readl (rtc->base +RZN1_RTC_ALW ); +if (!wday) +return 0 ; + delta_days = ((fls (wday) -1 ) - tm->tm_wday +7 ) %7 ; tm->tm_wday =fls (wday) -1 ;
@@ -208,9 +219,6 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)rtc_time64_to_tm (alarm, tm); } - ctl1 =readl (rtc->base +RZN1_RTC_CTL1 ); - alrm->enabled = !!(ctl1 &RZN1_RTC_CTL1_ALME ); -return 0 ; }
Signature · 1 line
2.53.0