]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ptp: ocp: Improve PCIe delay estimation
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Thu, 5 Sep 2024 14:00:28 +0000 (14:00 +0000)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Sep 2024 01:28:07 +0000 (18:28 -0700)
The PCIe bus can be pretty busy during boot and probe function can
see excessive delays. Let's find the minimal value out of several
tests and use it as estimated value.

Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20240905140028.560454-1-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/ptp/ptp_ocp.c

index e7479b9b90cb14b0af49713d9ae897f7ec2e9011..5feecaadde8e05a2a2bb462094434e47e5336400 100644 (file)
@@ -1558,22 +1558,24 @@ ptp_ocp_watchdog(struct timer_list *t)
 static void
 ptp_ocp_estimate_pci_timing(struct ptp_ocp *bp)
 {
-       ktime_t start, end;
-       ktime_t delay;
+       ktime_t start, end, delay = U64_MAX;
        u32 ctrl;
+       int i;
 
-       ctrl = ioread32(&bp->reg->ctrl);
-       ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE;
+       for (i = 0; i < 3; i++) {
+               ctrl = ioread32(&bp->reg->ctrl);
+               ctrl = OCP_CTRL_READ_TIME_REQ | OCP_CTRL_ENABLE;
 
-       iowrite32(ctrl, &bp->reg->ctrl);
+               iowrite32(ctrl, &bp->reg->ctrl);
 
-       start = ktime_get_ns();
+               start = ktime_get_raw_ns();
 
-       ctrl = ioread32(&bp->reg->ctrl);
+               ctrl = ioread32(&bp->reg->ctrl);
 
-       end = ktime_get_ns();
+               end = ktime_get_raw_ns();
 
-       delay = end - start;
+               delay = min(delay, end - start);
+       }
        bp->ts_window_adjust = (delay >> 5) * 3;
 }