Re: [PATCH v2 2/6] bus: mhi: host: Add support for non-posted TSC timesync feature
Vadim Fedorenko <[email protected]> Tue, 14 Apr 2026 18:46:14 +0100
| Newsgroups | dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
On 11/04/2026 09:12, Krishna Chaitanya Chundru wrote: > From: Vivek Pernamitta <[email protected]> > > Implement non-posted time synchronization as described in section 5.1.1 > of the MHI v1.2 specification. The host disables low-power link states > to minimize latency, reads the local time, issues a MMIO read to the > device's TIME register. > > Add support for initializing this feature and export a function to be > used by the drivers which does the time synchronization. > > MHI reads the device time registers in the MMIO address space pointed to > by the capability register after disabling all low power modes and keeping > MHI in M0. Before and after MHI reads, the local time is captured > and shared for processing. [...] > + /* > + * time critical code to fetch device time, delay between these two steps > + * should be deterministic as possible. > + */ > + preempt_disable(); > + local_irq_disable(); > + > + time->t_host_pre = ktime_get_real(); > + > + /* > + * To ensure the PCIe link is in L0 when ASPM is enabled, perform series > + * of back-to-back reads. This is necessary because the link may be in a > + * low-power state (e.g., L1 or L1ss), and need to be forced it to > + * transition to L0. > + */ > + for (i = 0; i < MHI_NUM_BACK_TO_BACK_READS; i++) { > + ret = mhi_read_reg(mhi_cntrl, mhi_tsync->time_reg, > + TSC_TIMESYNC_TIME_LOW_OFFSET, &time->t_dev_lo); > + > + ret = mhi_read_reg(mhi_cntrl, mhi_tsync->time_reg, > + TSC_TIMESYNC_TIME_HIGH_OFFSET, &time->t_dev_hi); > + } > + > + time->t_host_post = ktime_get_real(); > + > + local_irq_enable(); > + preempt_enable(); PTP_SYS_OFFSET_EXTENDED receives the amount of samples to read from user space, you can use it instead of MHI_NUM_BACK_TO_BACK_READS, and in this case it's better to grab host-pre and host-post time for a single register read. Also, PTP_SYS_OFFSET_EXTENDED was improved and currently supports multiple clockids as system time, it's good to account for it.