diff options
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.patch | 161 |
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 + |