> -----Original Message-----
> From: Nguyen, Anthony L <[email protected]>
> Sent: Tuesday, January 20, 2026 2:44 PM
> To: [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; [email protected]
> Cc: Mina Almasry <[email protected]>; Nguyen, Anthony L
> <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]; intel-
> [email protected]; Olech, Milena <[email protected]>; Keller,
> Jacob E <[email protected]>; Shachar Raindel <[email protected]>;
> Loktionov, Aleksandr <[email protected]>; Salin, Samuel
> <[email protected]>
> Subject: [PATCH net 4/4] idpf: read lower clock bits inside the time sandwich
>
> From: Mina Almasry <[email protected]>
>
> 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: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
>
> Fixes: 5cb8805d2366 ("idpf: negotiate PTP capabilities and get PTP clock")
> Suggested-by: Shachar Raindel <[email protected]>
> Signed-off-by: Mina Almasry <[email protected]>
> Reviewed-by: Jacob Keller <[email protected]>
> Reviewed-by: Aleksandr Loktionov <[email protected]>
> Tested-by: Samuel Salin <[email protected]>
> Signed-off-by: Tony Nguyen <[email protected]>
> ---
> drivers/net/ethernet/intel/idpf/idpf_ptp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/idpf/idpf_ptp.c
> b/drivers/net/ethernet/intel/idpf/idpf_ptp.c
> index 3e1052d070cf..0a8b50350b86 100644
> --- a/drivers/net/ethernet/intel/idpf/idpf_ptp.c
> +++ b/drivers/net/ethernet/intel/idpf/idpf_ptp.c
> @@ -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);
I thought idpf_ptp_enable_shtime did a snapshot of the system time, but perhaps
it didn't get flushed until after a read...
> + lo = readl(ptp->dev_clk_regs.dev_clk_ns_l);
>
In that case, doing this read makes sense, as it would trigger a flush to
ensure that we have flushed the timestamp snapshot. There's no reason to use
something like idpf_flush() here because we're already going to do an important
read anyways.
Acked-by: Jacob Keller <[email protected]>
> /* 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);
> --
> 2.47.1