aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch161
1 files changed, 161 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch
new file mode 100644
index 00000000..0a31f7c1
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0009-amd-xgbe-Always-attempt-link-training-in-KR-mode.patch
@@ -0,0 +1,161 @@
+From d95e49eb961bace4a0e4499fc0c8931a078656c0 Mon Sep 17 00:00:00 2001
+From: Tom Lendacky <thomas.lendacky@amd.com>
+Date: Wed, 23 May 2018 11:39:21 -0500
+Subject: [PATCH 09/95] amd-xgbe: Always attempt link training in KR mode
+
+Link training is always attempted when in KR mode, but the code is
+structured to check if link training has been enabled before attempting
+to perform it. Since that check will always be true, simplify the code
+to always enable and start link training during KR auto-negotiation.
+
+Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
+---
+ drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 69 +++++++------------------------
+ 1 file changed, 16 insertions(+), 53 deletions(-)
+
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
+index 36fddc2..eba757e 100644
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
+@@ -216,31 +216,8 @@ static void xgbe_an_clear_interrupts_all(struct xgbe_prv_data *pdata)
+ xgbe_an37_clear_interrupts(pdata);
+ }
+
+-static void xgbe_an73_enable_kr_training(struct xgbe_prv_data *pdata)
+-{
+- unsigned int reg;
+-
+- reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
+-
+- reg |= XGBE_KR_TRAINING_ENABLE;
+- XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg);
+-}
+-
+-static void xgbe_an73_disable_kr_training(struct xgbe_prv_data *pdata)
+-{
+- unsigned int reg;
+-
+- reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
+-
+- reg &= ~XGBE_KR_TRAINING_ENABLE;
+- XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg);
+-}
+-
+ static void xgbe_kr_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Enable KR training */
+- xgbe_an73_enable_kr_training(pdata);
+-
+ /* Set MAC to 10G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_10000);
+
+@@ -250,9 +227,6 @@ static void xgbe_kr_mode(struct xgbe_prv_data *pdata)
+
+ static void xgbe_kx_2500_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 2.5G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_2500);
+
+@@ -262,9 +236,6 @@ static void xgbe_kx_2500_mode(struct xgbe_prv_data *pdata)
+
+ static void xgbe_kx_1000_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 1G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_1000);
+
+@@ -278,9 +249,6 @@ static void xgbe_sfi_mode(struct xgbe_prv_data *pdata)
+ if (pdata->kr_redrv)
+ return xgbe_kr_mode(pdata);
+
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 10G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_10000);
+
+@@ -290,9 +258,6 @@ static void xgbe_sfi_mode(struct xgbe_prv_data *pdata)
+
+ static void xgbe_x_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 1G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_1000);
+
+@@ -302,9 +267,6 @@ static void xgbe_x_mode(struct xgbe_prv_data *pdata)
+
+ static void xgbe_sgmii_1000_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 1G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_1000);
+
+@@ -314,9 +276,6 @@ static void xgbe_sgmii_1000_mode(struct xgbe_prv_data *pdata)
+
+ static void xgbe_sgmii_100_mode(struct xgbe_prv_data *pdata)
+ {
+- /* Disable KR training */
+- xgbe_an73_disable_kr_training(pdata);
+-
+ /* Set MAC to 1G speed */
+ pdata->hw_if.set_speed(pdata, SPEED_1000);
+
+@@ -425,6 +384,12 @@ static void xgbe_an73_set(struct xgbe_prv_data *pdata, bool enable,
+ {
+ unsigned int reg;
+
++ /* Disable KR training for now */
++ reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
++ reg &= ~XGBE_KR_TRAINING_ENABLE;
++ XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg);
++
++ /* Update AN settings */
+ reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_CTRL1);
+ reg &= ~MDIO_AN_CTRL1_ENABLE;
+
+@@ -522,21 +487,19 @@ static enum xgbe_an xgbe_an73_tx_training(struct xgbe_prv_data *pdata,
+ XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_FECCTRL, reg);
+
+ /* Start KR training */
+- reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
+- if (reg & XGBE_KR_TRAINING_ENABLE) {
+- if (pdata->phy_if.phy_impl.kr_training_pre)
+- pdata->phy_if.phy_impl.kr_training_pre(pdata);
++ if (pdata->phy_if.phy_impl.kr_training_pre)
++ pdata->phy_if.phy_impl.kr_training_pre(pdata);
+
+- reg |= XGBE_KR_TRAINING_START;
+- XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL,
+- reg);
++ reg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL);
++ reg |= XGBE_KR_TRAINING_ENABLE;
++ reg |= XGBE_KR_TRAINING_START;
++ XMDIO_WRITE(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_10GBR_PMD_CTRL, reg);
+
+- netif_dbg(pdata, link, pdata->netdev,
+- "KR training initiated\n");
++ netif_dbg(pdata, link, pdata->netdev,
++ "KR training initiated\n");
+
+- if (pdata->phy_if.phy_impl.kr_training_post)
+- pdata->phy_if.phy_impl.kr_training_post(pdata);
+- }
++ if (pdata->phy_if.phy_impl.kr_training_post)
++ pdata->phy_if.phy_impl.kr_training_post(pdata);
+
+ return XGBE_AN_PAGE_RECEIVED;
+ }
+--
+2.7.4
+