On Tue, Oct 20, 2026 at 12:10:24AM +0900, Baek Kyu, Kim wrote: > mpfs_rtc_readalarm() swaps the low and high words of the alarm time. > The RTC core reads this value during device registration to initialize > its alarm timer. This can populate the cached alarm and timer queue > with an incorrect expiry time, or leave an enabled hardware alarm out > of the timer queue if the decoded time appears to be in the past. > > Read the low 32 bits from ALARM_LOWER_REG and place the masked high > 11 bits from ALARM_UPPER_REG in bits 42:32. This matches the layout > used by mpfs_rtc_setalarm() and the low/high assembly in > mpfs_rtc_readtime(), so the RTC core imports the programmed alarm > time correctly during device registration. > > Fixes: 0b31d703598d ("rtc: Add driver for Microchip PolarFire SoC") > Signed-off-by: Baek Kyu, Kim That's very odd, wonder how that happened. Definitely a blindspot when it came to testing. This should look the same as reading the time. Reviewed-by: Conor Dooley CC: stable@vger.kernel.org Cheers, Conor. > --- > Tested with KUnit under ARM64 QEMU using RAM-backed MMIO and the actual > MPFS RTC callbacks and RTC core registration. All ten tests pass with the > fix, including importing a preloaded alarm and checking its timer queue > entry. Four additional tests covering current-date alarms also pass. > No physical MPFS hardware or suspend/wakeup was tested. > > drivers/rtc/rtc-mpfs.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/rtc-mpfs.c b/drivers/rtc/rtc-mpfs.c > index 60596b0ea9d8..6616ca1f02c7 100644 > --- a/drivers/rtc/rtc-mpfs.c > +++ b/drivers/rtc/rtc-mpfs.c > @@ -131,8 +131,8 @@ static int mpfs_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm) > > alrm->enabled = mode & MODE_WAKE_EN; > > - time = (u64)readl(rtcdev->base + ALARM_LOWER_REG) << 32; > - time |= (readl(rtcdev->base + ALARM_UPPER_REG) & ALARM_UPPER_MASK); > + time = readl(rtcdev->base + ALARM_LOWER_REG); > + time |= ((u64)readl(rtcdev->base + ALARM_UPPER_REG) & ALARM_UPPER_MASK) << 32; > rtc_time64_to_tm(time, &alrm->time); > > return 0; > > base-commit: 58161ead29e50d70a317ea26b472e0c7508e69da > -- > 2.55.0 >