]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
idpf: read lower clock bits inside the time sandwich
authorMina Almasry <almasrymina@google.com>
Thu, 11 Dec 2025 10:19:29 +0000 (10:19 +0000)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 20 Jan 2026 20:55:34 +0000 (12:55 -0800)
PCIe reads need to be done inside the time sandwich because PCIe
writes may get buffered in the PCIe fabric and posted to the device
after the _postts completes. Doing the PCIe read inside the time
sandwich guarantees that the write gets flushed before the _postts
timestamp is taken.

Cc: lrizzo@google.com
Cc: namangulati@google.com
Cc: willemb@google.com
Cc: intel-wired-lan@lists.osuosl.org
Cc: milena.olech@intel.com
Cc: jacob.e.keller@intel.com
Fixes: 5cb8805d2366 ("idpf: negotiate PTP capabilities and get PTP clock")
Suggested-by: Shachar Raindel <shacharr@google.com>
Signed-off-by: Mina Almasry <almasrymina@google.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Tested-by: Samuel Salin <Samuel.salin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/idpf/idpf_ptp.c

index 3e1052d070cfdfa268bcdb6f397459fd3d428945..0a8b50350b8604d3f6e27790b457ba485a49013d 100644 (file)
@@ -108,11 +108,11 @@ static u64 idpf_ptp_read_src_clk_reg_direct(struct idpf_adapter *adapter,
        ptp_read_system_prets(sts);
 
        idpf_ptp_enable_shtime(adapter);
+       lo = readl(ptp->dev_clk_regs.dev_clk_ns_l);
 
        /* Read the system timestamp post PHC read */
        ptp_read_system_postts(sts);
 
-       lo = readl(ptp->dev_clk_regs.dev_clk_ns_l);
        hi = readl(ptp->dev_clk_regs.dev_clk_ns_h);
 
        spin_unlock(&ptp->read_dev_clk_lock);