aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch123
1 files changed, 0 insertions, 123 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch b/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch
deleted file mode 100644
index fdd79105..00000000
--- a/meta-amd-bsp/recipes-kernel/linux-5.4/linux-yocto-5.4.69-amdx86/0020-amd-xgbe-synchronization-between-AN-state-machine-an.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From f2d1ad6e4092c6a176f69232970a033589e86373 Mon Sep 17 00:00:00 2001
-From: Sudheesh Mavila <sudheesh.mavila@amd.com>
-Date: Sat, 9 Jan 2021 23:41:36 +0530
-Subject: [PATCH 20/21] amd-xgbe: synchronization between AN state machine and
- status polling timer thread
-
-xgbe driver uses a TIMEOUT to restart AN process if link is down.
-This create issue when TIMEOUT comes in between a KR training or RCC
-is in process. The patch avoids AN restart if TIMEOUT happens
-during KR cycle or RRC.
-
-TIMEOUT value also reduced to 1 sec to enable fast
-synchronization between LP.
-
-Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
----
- drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 29 +++++++++++++++++++--
- drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 1 +
- drivers/net/ethernet/amd/xgbe/xgbe.h | 4 ++-
- 3 files changed, 31 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
-index 7b17b9d0c40a..e4db9b9eb29b 100644
---- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
-+++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
-@@ -512,6 +512,7 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata,
- XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg);
-
- pdata->kr_done = 1;
-+ pdata->kr_start_time = jiffies;
-
- netif_dbg(pdata, link, pdata->netdev,
- "KR training initiated\n");
-@@ -884,6 +885,8 @@ static void xgbe_an73_state_machine(struct xgbe_prv_data *pdata)
- break;
-
- case XGBE_AN_PAGE_RECEIVED:
-+ if (xgbe_in_kr_mode(pdata))
-+ pdata->an_int = 0;
- pdata->an_state = xgbe_an73_page_received(pdata);
- pdata->an_supported++;
- break;
-@@ -1306,11 +1309,34 @@ static bool xgbe_phy_aneg_done(struct xgbe_prv_data *pdata)
- static void xgbe_check_link_timeout(struct xgbe_prv_data *pdata)
- {
- unsigned long link_timeout;
-+ int wait = 200;
-+ unsigned long kr_time;
-+ unsigned long rrc_time;
-
- link_timeout = pdata->link_check + (XGBE_LINK_TIMEOUT * HZ);
- if (time_after(jiffies, link_timeout)) {
- netif_dbg(pdata, link, pdata->netdev, "AN link timeout\n");
-- xgbe_phy_config_aneg(pdata);
-+ /* AN restart should not happen within 500ms of start of RRC or KR tarining */
-+ /* This loop ensures no AN restart during RRC window and KR training window */
-+ while (wait--) {
-+ mutex_lock(&pdata->an_mutex);
-+ kr_time = pdata->kr_start_time + msecs_to_jiffies(XGBE_AN_MS_TIMEOUT);
-+ rrc_time = pdata->rrc_start_time + msecs_to_jiffies(XGBE_AN_MS_TIMEOUT);
-+ mutex_unlock(&pdata->an_mutex);
-+ if (time_after(jiffies, kr_time) && time_after(jiffies, rrc_time))
-+ break;
-+ if (pdata->an_result == XGBE_AN_COMPLETE)
-+ break;
-+
-+ usleep_range(5000, 6000);
-+ }
-+ /* AN restart is required, if AN result is not COMPLETE */
-+ if (pdata->an_result != XGBE_AN_COMPLETE)
-+ xgbe_phy_config_aneg(pdata);
-+ else if ((pdata->an_result == XGBE_AN_COMPLETE) &&
-+ (xgbe_cur_mode(pdata) == XGBE_MODE_KX_1000))
-+ xgbe_phy_config_aneg(pdata);
-+
- }
- }
-
-@@ -1490,7 +1516,6 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata)
-
- /* Indicate the PHY is up and running */
- pdata->phy_started = 1;
-- pdata->an_result = XGBE_AN_NO_LINK;
-
- xgbe_an_init(pdata);
- xgbe_an_enable_interrupts(pdata);
-diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
-index ea00a6c4eba3..8392d60eba9d 100644
---- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
-+++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
-@@ -2945,6 +2945,7 @@ static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata)
- XGBE_PMA_CDR_TRACK_EN_MASK,
- XGBE_PMA_CDR_TRACK_EN_OFF);
- xgbe_phy_rrc(pdata);
-+ pdata->rrc_start_time = jiffies;
- phy_data->phy_cdr_notrack = 1;
- }
-
-diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
-index bb8bb6597743..c20471a1ea18 100644
---- a/drivers/net/ethernet/amd/xgbe/xgbe.h
-+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
-@@ -289,7 +289,7 @@
-
- /* Auto-negotiation */
- #define XGBE_AN_MS_TIMEOUT 500
--#define XGBE_LINK_TIMEOUT 5
-+#define XGBE_LINK_TIMEOUT 1
-
- #define XGBE_SGMII_AN_LINK_STATUS BIT(1)
- #define XGBE_SGMII_AN_LINK_SPEED (BIT(2) | BIT(3))
-@@ -1271,6 +1271,8 @@ struct xgbe_prv_data {
- unsigned long an_start;
- enum xgbe_an_mode an_mode;
- unsigned int kr_done;
-+ unsigned long kr_start_time;
-+ unsigned long rrc_start_time;
- unsigned int cdr_delay_required;
-
- /* I2C support */
---
-2.17.1
-