drivers/rtc/rtc-zynqmp.c | 75 ++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 34 deletions(-)
Add improvements for read and set offset functions.
The basic functionality is still the same, but offset correction values
are now updated to match with expected.
The RTC calibration value operates with full ticks,
and fractional ticks which are a 1/16 of a full tick.
The 16 lowest bits in the calibration registers are for the full ticks
and value matches the external oscillator in Hz. Through that,
the maximum and minimum offset values can be calculated dynamically,
as they depend on the input frequency used.
For docs on the calibration register, see
https://docs.amd.com/r/en-US/ug1087-zynq-ultrascale-registers/CALIB_READ-RTC-Register
Due to rounding errors (different number of fract ticks),
offset readback will differ slightly depending on
if the offset is negative or positive. This is however well below the granularity
provided by the hardware.
For example
$ echo 34335 > offset
$ cat offset
34335
$ echo -34335 > offset
$ cat offset
-34326
Signed-off-by: Tomas Melin <tomas.melin@vaisala.com>
---
Changes in v4:
- Do not limit building to zynqmp arch as building on other platforms
might be needed. Implies dropping commit.
- No need for RTC_PPB to be 64 bit value, use 32 bit instead
- Link to v3: https://lore.kernel.org/r/20260119-zynqmp-rtc-updates-v3-0-acd902fdeab1@vaisala.com
Changes in v3:
- Add commit for limiting building of driver to zynqmp arch.
- Reorder variable declarations in set_offset
- Link to v2: https://lore.kernel.org/r/20260108-zynqmp-rtc-updates-v2-0-864c161fa83d@vaisala.com
Changes in v2:
- Add commit introducing check for calibration value overflow
- Update comments
- Align data types across set and read
- Rename fract_tick as fract_data conforming to data sheet
- Further improve on set offset calculation logic
- Link to v1: https://lore.kernel.org/r/20251201-zynqmp-rtc-updates-v1-0-33875c1e385b@vaisala.com
---
Tomas Melin (5):
rtc: zynqmp: correct frequency value
rtc: zynqmp: check calibration max value
rtc: zynqmp: rework read_offset
rtc: zynqmp: rework set_offset
rtc: zynqmp: use dynamic max and min offset ranges
drivers/rtc/rtc-zynqmp.c | 75 ++++++++++++++++++++++++++----------------------
1 file changed, 41 insertions(+), 34 deletions(-)
---
base-commit: cd635e33b0113287c94021be53d2a7c61a1614e9
change-id: 20251201-zynqmp-rtc-updates-d260364cc01b
Best regards,
--
Tomas Melin <tomas.melin@vaisala.com>
On 1/22/26 14:53, Tomas Melin wrote: > Add improvements for read and set offset functions. > The basic functionality is still the same, but offset correction values > are now updated to match with expected. > > The RTC calibration value operates with full ticks, > and fractional ticks which are a 1/16 of a full tick. > The 16 lowest bits in the calibration registers are for the full ticks > and value matches the external oscillator in Hz. Through that, > the maximum and minimum offset values can be calculated dynamically, > as they depend on the input frequency used. > > For docs on the calibration register, see > https://docs.amd.com/r/en-US/ug1087-zynq-ultrascale-registers/CALIB_READ-RTC-Register > > Due to rounding errors (different number of fract ticks), > offset readback will differ slightly depending on > if the offset is negative or positive. This is however well below the granularity > provided by the hardware. > > For example > $ echo 34335 > offset > $ cat offset > 34335 > $ echo -34335 > offset > $ cat offset > -34326 > > Signed-off-by: Tomas Melin <tomas.melin@vaisala.com> > --- > Changes in v4: > - Do not limit building to zynqmp arch as building on other platforms > might be needed. Implies dropping commit. > - No need for RTC_PPB to be 64 bit value, use 32 bit instead > - Link to v3: https://lore.kernel.org/r/20260119-zynqmp-rtc-updates-v3-0-acd902fdeab1@vaisala.com > > Changes in v3: > - Add commit for limiting building of driver to zynqmp arch. > - Reorder variable declarations in set_offset > - Link to v2: https://lore.kernel.org/r/20260108-zynqmp-rtc-updates-v2-0-864c161fa83d@vaisala.com > > Changes in v2: > - Add commit introducing check for calibration value overflow > - Update comments > - Align data types across set and read > - Rename fract_tick as fract_data conforming to data sheet > - Further improve on set offset calculation logic > - Link to v1: https://lore.kernel.org/r/20251201-zynqmp-rtc-updates-v1-0-33875c1e385b@vaisala.com > > --- > Tomas Melin (5): > rtc: zynqmp: correct frequency value > rtc: zynqmp: check calibration max value > rtc: zynqmp: rework read_offset > rtc: zynqmp: rework set_offset > rtc: zynqmp: use dynamic max and min offset ranges > > drivers/rtc/rtc-zynqmp.c | 75 ++++++++++++++++++++++++++---------------------- > 1 file changed, 41 insertions(+), 34 deletions(-) > --- > base-commit: cd635e33b0113287c94021be53d2a7c61a1614e9 > change-id: 20251201-zynqmp-rtc-updates-d260364cc01b > > Best regards, Acked-by: Michal Simek <michal.simek@amd.com> Thanks, Michal
On Thu, 22 Jan 2026 13:53:44 +0000, Tomas Melin wrote:
> Add improvements for read and set offset functions.
> The basic functionality is still the same, but offset correction values
> are now updated to match with expected.
>
> The RTC calibration value operates with full ticks,
> and fractional ticks which are a 1/16 of a full tick.
> The 16 lowest bits in the calibration registers are for the full ticks
> and value matches the external oscillator in Hz. Through that,
> the maximum and minimum offset values can be calculated dynamically,
> as they depend on the input frequency used.
>
> [...]
Applied, thanks!
[1/5] rtc: zynqmp: correct frequency value
https://git.kernel.org/abelloni/c/2724fb4d429c
[2/5] rtc: zynqmp: check calibration max value
https://git.kernel.org/abelloni/c/83b9e5eb0437
[3/5] rtc: zynqmp: rework read_offset
https://git.kernel.org/abelloni/c/0f9989443fae
[4/5] rtc: zynqmp: rework set_offset
https://git.kernel.org/abelloni/c/9f5af70268d6
[5/5] rtc: zynqmp: use dynamic max and min offset ranges
https://git.kernel.org/abelloni/c/2254383176fc
Best regards,
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
© 2016 - 2026 Red Hat, Inc.