RE: [PATCH v2 5/5] rtc: zynqmp: use dynamic max and min offset ranges
From: T, Harini <hidden>
Date: 2026-01-14 15:37:25
Also in:
linux-rtc, lkml
[Public] Reviewed-by: Harini T <redacted> Thanks, Harini T
quoted hunk ↗ jump to hunk
-----Original Message----- From: Tomas Melin <redacted> Sent: Thursday, January 8, 2026 6:21 PM To: Alexandre Belloni <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; Tomas Melin [off-list ref] Subject: [PATCH v2 5/5] rtc: zynqmp: use dynamic max and min offset ranges Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. Maximum and minimum offsets in ppb that can be handled are dependent on the rtc clock frequency and what can fit in the 16-bit register field. Signed-off-by: Tomas Melin <redacted> --- drivers/rtc/rtc-zynqmp.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)diff --git a/drivers/rtc/rtc-zynqmp.c b/drivers/rtc/rtc-zynqmp.c indexd15c256e7ae56058ddc38849af6424cd29b8965e..f508c61f4046e906d9569cc7 79a1360474a85fd2 100644--- a/drivers/rtc/rtc-zynqmp.c +++ b/drivers/rtc/rtc-zynqmp.c@@ -44,8 +44,6 @@ #define RTC_FR_MASK 0xF0000 #define RTC_FR_MAX_TICKS 16 #define RTC_PPB 1000000000LL -#define RTC_MIN_OFFSET -32768000 -#define RTC_MAX_OFFSET 32767000 struct xlnx_rtc_dev { struct rtc_device *rtc;@@ -215,12 +213,12 @@ static int xlnx_rtc_set_offset(struct device *dev,long offset) /* Tick to offset multiplier */ tick_mult = DIV_ROUND_CLOSEST(RTC_PPB, xrtcdev->freq); - if (offset < RTC_MIN_OFFSET || offset > RTC_MAX_OFFSET) - return -ERANGE; - /* Number ticks for given offset */ max_tick = div_s64_rem(offset, tick_mult, &fract_offset); + if (freq + max_tick > RTC_TICK_MASK || (freq + max_tick < 1)) + return -ERANGE; + /* Number fractional ticks for given offset */ if (fract_offset) { fract_part = DIV_ROUND_UP(tick_mult, RTC_FR_MAX_TICKS); -- 2.47.3