Skip to content

Commit

Permalink
rtc: core: Make the sync offset default more realistic
Browse files Browse the repository at this point in the history
The offset which is used to steer the start of an RTC synchronization
update via rtc_set_ntp_time() is huge. The math behind this is:

  tsched       twrite(t2.tv_sec - 1) 	 t2 (seconds increment)

twrite - tsched is the transport time for the write to hit the device.

t2 - twrite depends on the chip and is for most chips one second.

The rtc_set_ntp_time() calculation of tsched is:

    tsched = t2 - 1sec - (t2 - twrite)

The default for the sync offset is 500ms which means that twrite - tsched
is 500ms assumed that t2 - twrite is one second.

This is 0.5 seconds off for RTCs which are directly accessible by IO writes
and probably for the majority of i2C/SPI based RTC off by an order of
magnitude. Set it to 5ms which should bring it closer to reality.

The default can be adjusted by drivers (rtc_cmos does so) and could be
adjusted further by a calibration method which is an orthogonal problem.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20201206220541.960333166@linutronix.de
  • Loading branch information
Thomas Gleixner committed Dec 11, 2020
1 parent b0ecd8e commit 354c796
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/rtc/class.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ static struct rtc_device *rtc_allocate_device(void)
device_initialize(&rtc->dev);

/* Drivers can revise this default after allocating the device. */
rtc->set_offset_nsec = NSEC_PER_SEC / 2;
rtc->set_offset_nsec = 5 * NSEC_PER_MSEC;

rtc->irq_freq = 1;
rtc->max_user_freq = 64;
Expand Down

0 comments on commit 354c796

Please sign in to comment.