aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch
new file mode 100644
index 00000000..045e3897
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9055-amd-xgbe-Update-SSINC-value-based-on-125MHz-PTP-cloc.patch
@@ -0,0 +1,113 @@
+From 408cadc25201633fe7022848440846c9ee22f6a2 Mon Sep 17 00:00:00 2001
+From: Devang Vyas <devangnayanbhai.vyas@amd.com>
+Date: Mon, 20 Jun 2022 15:54:48 +0530
+Subject: [PATCH 55/57] amd-xgbe: Update SSINC value based on 125MHz PTP clock
+ as per PPR
+
+Added xgbe version v2 flag to differentiate PTP clock frequency
+based on SSINC field. As current implementation is w.r.t 50MHz,
+added a flag for the backward compatibility with older chipsets
+
+Signed-off-by: Devang Vyas <devangnayanbhai.vyas@amd.com>
+Change-Id: I483af20d23766199f0315dd8d5b23cd4248453d2
+---
+ drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 13 ++++++++++---
+ drivers/net/ethernet/amd/xgbe/xgbe-pci.c | 2 ++
+ drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 10 +++++++---
+ drivers/net/ethernet/amd/xgbe/xgbe.h | 7 +++++++
+ 4 files changed, 26 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+index 0252d80f6834..8e37343ef098 100644
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+@@ -1627,9 +1627,16 @@ static int xgbe_config_tstamp(struct xgbe_prv_data *pdata,
+ if (!XGMAC_GET_BITS(mac_tscr, MAC_TSCR, TSENA))
+ return 0;
+
+- /* Initialize time registers */
+- XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SSINC, XGBE_TSTAMP_SSINC);
+- XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SNSINC, XGBE_TSTAMP_SNSINC);
++ if (pdata->vdata->tstamp_ptp_clock_freq) {
++ /* Initialize time registers based on 125MHz PTP Clock Frequency */
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SSINC, XGBE_V2_TSTAMP_SSINC);
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SNSINC, XGBE_V2_TSTAMP_SNSINC);
++ } else {
++ /* Initialize time registers based on 50MHz PTP Clock Frequency*/
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SSINC, XGBE_TSTAMP_SSINC);
++ XGMAC_IOWRITE_BITS(pdata, MAC_SSIR, SNSINC, XGBE_TSTAMP_SNSINC);
++ }
++
+ xgbe_update_tstamp_addend(pdata, pdata->tstamp_addend);
+ xgbe_set_tstamp_time(pdata, 0, 0);
+
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
+index 0f2ac86ff904..35bc4ce96072 100644
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-pci.c
+@@ -482,6 +482,7 @@ static struct xgbe_version_data xgbe_v2a = {
+ .tx_max_fifo_size = 229376,
+ .rx_max_fifo_size = 229376,
+ .tx_tstamp_workaround = 1,
++ .tstamp_ptp_clock_freq = 1,
+ .ecc_support = 1,
+ .i2c_support = 1,
+ .irq_reissue_support = 1,
+@@ -498,6 +499,7 @@ static struct xgbe_version_data xgbe_v2b = {
+ .tx_max_fifo_size = 65536,
+ .rx_max_fifo_size = 65536,
+ .tx_tstamp_workaround = 1,
++ .tstamp_ptp_clock_freq = 1,
+ .ecc_support = 1,
+ .i2c_support = 1,
+ .irq_reissue_support = 1,
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
+index d06d260cf1e2..c60db672192d 100644
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
+@@ -250,10 +250,14 @@ void xgbe_ptp_register(struct xgbe_prv_data *pdata)
+ pdata->ptp_clock = clock;
+
+ /* Calculate the addend:
+- * addend = 2^32 / (PTP ref clock / 50Mhz)
+- * = (2^32 * 50Mhz) / PTP ref clock
++ * addend = 2^32 / (PTP ref clock / (PTP clock based on SSINC))
++ * = (2^32 * (PTP clock based on SSINC)) / PTP ref clock
+ */
+- dividend = 50000000;
++ if (pdata->vdata->tstamp_ptp_clock_freq)
++ dividend = 125000000; // PTP clock frequency is 125MHz
++ else
++ dividend = 50000000; // PTP clock frequency is 50MHz
++
+ dividend <<= 32;
+ pdata->tstamp_addend = div_u64(dividend, pdata->ptpclk_rate);
+
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
+index 183289e094fb..895712fcbbd3 100644
+--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
++++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
+@@ -235,6 +235,12 @@
+ #define XGBE_TSTAMP_SSINC 20
+ #define XGBE_TSTAMP_SNSINC 0
+
++/* Timestamp support - values based on 125MHz PTP clock
++ * 125MHz => 8 nsec
++ */
++#define XGBE_V2_TSTAMP_SSINC 8
++#define XGBE_V2_TSTAMP_SNSINC 0
++
+ /* Driver PMT macros */
+ #define XGMAC_DRIVER_CONTEXT 1
+ #define XGMAC_IOCTL_CONTEXT 2
+@@ -1009,6 +1015,7 @@ struct xgbe_version_data {
+ unsigned int tx_max_fifo_size;
+ unsigned int rx_max_fifo_size;
+ unsigned int tx_tstamp_workaround;
++ unsigned int tstamp_ptp_clock_freq;
+ unsigned int ecc_support;
+ unsigned int i2c_support;
+ unsigned int irq_reissue_support;
+--
+2.37.3
+