Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Revert "net: stmmac: correct MAC propagation delay"

This reverts commit 20bf98c94146eb6fe62177817cb32f53e72dd2e8.

Richard raised concerns about correctness of the code on previous
generations of the HW.

Fixes: 20bf98c94146 ("net: stmmac: correct MAC propagation delay")
Link: https://lore.kernel.org/all/ZMGIuKVP7BEotbrn@hoboy.vegasvil.org/
Link: https://lore.kernel.org/r/20230726224054.3241127-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

-56
-3
drivers/net/ethernet/stmicro/stmmac/hwif.h
··· 532 532 void (*get_systime) (void __iomem *ioaddr, u64 *systime); 533 533 void (*get_ptptime)(void __iomem *ioaddr, u64 *ptp_time); 534 534 void (*timestamp_interrupt)(struct stmmac_priv *priv); 535 - void (*correct_latency)(struct stmmac_priv *priv); 536 535 }; 537 536 538 537 #define stmmac_config_hw_tstamping(__priv, __args...) \ ··· 550 551 stmmac_do_void_callback(__priv, ptp, get_ptptime, __args) 551 552 #define stmmac_timestamp_interrupt(__priv, __args...) \ 552 553 stmmac_do_void_callback(__priv, ptp, timestamp_interrupt, __args) 553 - #define stmmac_correct_latency(__priv, __args...) \ 554 - stmmac_do_void_callback(__priv, ptp, correct_latency, __args) 555 554 556 555 struct stmmac_tx_queue; 557 556 struct stmmac_rx_queue;
-43
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
··· 60 60 *ssinc = data; 61 61 } 62 62 63 - static void correct_latency(struct stmmac_priv *priv) 64 - { 65 - void __iomem *ioaddr = priv->ptpaddr; 66 - u32 reg_tsic, reg_tsicsns; 67 - u32 reg_tsec, reg_tsecsns; 68 - u64 scaled_ns; 69 - u32 val; 70 - 71 - /* MAC-internal ingress latency */ 72 - scaled_ns = readl(ioaddr + PTP_TS_INGR_LAT); 73 - 74 - /* See section 11.7.2.5.3.1 "Ingress Correction" on page 4001 of 75 - * i.MX8MP Applications Processor Reference Manual Rev. 1, 06/2021 76 - */ 77 - val = readl(ioaddr + PTP_TCR); 78 - if (val & PTP_TCR_TSCTRLSSR) 79 - /* nanoseconds field is in decimal format with granularity of 1ns/bit */ 80 - scaled_ns = ((u64)NSEC_PER_SEC << 16) - scaled_ns; 81 - else 82 - /* nanoseconds field is in binary format with granularity of ~0.466ns/bit */ 83 - scaled_ns = ((1ULL << 31) << 16) - 84 - DIV_U64_ROUND_CLOSEST(scaled_ns * PSEC_PER_NSEC, 466U); 85 - 86 - reg_tsic = scaled_ns >> 16; 87 - reg_tsicsns = scaled_ns & 0xff00; 88 - 89 - /* set bit 31 for 2's compliment */ 90 - reg_tsic |= BIT(31); 91 - 92 - writel(reg_tsic, ioaddr + PTP_TS_INGR_CORR_NS); 93 - writel(reg_tsicsns, ioaddr + PTP_TS_INGR_CORR_SNS); 94 - 95 - /* MAC-internal egress latency */ 96 - scaled_ns = readl(ioaddr + PTP_TS_EGR_LAT); 97 - 98 - reg_tsec = scaled_ns >> 16; 99 - reg_tsecsns = scaled_ns & 0xff00; 100 - 101 - writel(reg_tsec, ioaddr + PTP_TS_EGR_CORR_NS); 102 - writel(reg_tsecsns, ioaddr + PTP_TS_EGR_CORR_SNS); 103 - } 104 - 105 63 static int init_systime(void __iomem *ioaddr, u32 sec, u32 nsec) 106 64 { 107 65 u32 value; ··· 221 263 .get_systime = get_systime, 222 264 .get_ptptime = get_ptptime, 223 265 .timestamp_interrupt = timestamp_interrupt, 224 - .correct_latency = correct_latency, 225 266 };
-4
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
··· 909 909 priv->hwts_tx_en = 0; 910 910 priv->hwts_rx_en = 0; 911 911 912 - stmmac_correct_latency(priv, priv); 913 - 914 912 return 0; 915 913 } 916 914 ··· 1094 1096 1095 1097 if (priv->dma_cap.fpesel) 1096 1098 stmmac_fpe_link_state_handle(priv, true); 1097 - 1098 - stmmac_correct_latency(priv, priv); 1099 1099 } 1100 1100 1101 1101 static const struct phylink_mac_ops stmmac_phylink_mac_ops = {
-6
drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.h
··· 26 26 #define PTP_ACR 0x40 /* Auxiliary Control Reg */ 27 27 #define PTP_ATNR 0x48 /* Auxiliary Timestamp - Nanoseconds Reg */ 28 28 #define PTP_ATSR 0x4c /* Auxiliary Timestamp - Seconds Reg */ 29 - #define PTP_TS_INGR_CORR_NS 0x58 /* Ingress timestamp correction nanoseconds */ 30 - #define PTP_TS_EGR_CORR_NS 0x5C /* Egress timestamp correction nanoseconds*/ 31 - #define PTP_TS_INGR_CORR_SNS 0x60 /* Ingress timestamp correction subnanoseconds */ 32 - #define PTP_TS_EGR_CORR_SNS 0x64 /* Egress timestamp correction subnanoseconds */ 33 - #define PTP_TS_INGR_LAT 0x68 /* MAC internal Ingress Latency */ 34 - #define PTP_TS_EGR_LAT 0x6c /* MAC internal Egress Latency */ 35 29 36 30 #define PTP_STNSUR_ADDSUB_SHIFT 31 37 31 #define PTP_DIGITAL_ROLLOVER_MODE 0x3B9ACA00 /* 10e9-1 ns */