lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 534/849] net: amd-xgbe: Toggle PLL settings during rate change
    Date
    From: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>

    [ Upstream commit daf182d360e509a494db18666799f4e85d83dda0 ]

    For each rate change command submission, the FW has to do a phy
    power off sequence internally. For this to happen correctly, the
    PLL re-initialization control setting has to be turned off before
    sending mailbox commands and re-enabled once the command submission
    is complete.

    Without the PLL control setting, the link up takes longer time in a
    fixed phy configuration.

    Fixes: 47f164deab22 ("amd-xgbe: Add PCI device support")
    Co-developed-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
    Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
    Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
    Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/amd/xgbe/xgbe-common.h | 8 ++++++++
    drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 20 +++++++++++++++++++-
    2 files changed, 27 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
    index b2cd3bdba9f89..533b8519ec352 100644
    --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
    +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
    @@ -1331,6 +1331,10 @@
    #define MDIO_VEND2_PMA_CDR_CONTROL 0x8056
    #endif

    +#ifndef MDIO_VEND2_PMA_MISC_CTRL0
    +#define MDIO_VEND2_PMA_MISC_CTRL0 0x8090
    +#endif
    +
    #ifndef MDIO_CTRL1_SPEED1G
    #define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100)
    #endif
    @@ -1389,6 +1393,10 @@
    #define XGBE_PMA_RX_RST_0_RESET_ON 0x10
    #define XGBE_PMA_RX_RST_0_RESET_OFF 0x00

    +#define XGBE_PMA_PLL_CTRL_MASK BIT(15)
    +#define XGBE_PMA_PLL_CTRL_ENABLE BIT(15)
    +#define XGBE_PMA_PLL_CTRL_DISABLE 0x0000
    +
    /* Bit setting and getting macros
    * The get macro will extract the current bit field value from within
    * the variable
    diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
    index 18e48b3bc402b..213769054391c 100644
    --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
    +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
    @@ -1977,12 +1977,26 @@ static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata)
    }
    }

    +static void xgbe_phy_pll_ctrl(struct xgbe_prv_data *pdata, bool enable)
    +{
    + XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_VEND2_PMA_MISC_CTRL0,
    + XGBE_PMA_PLL_CTRL_MASK,
    + enable ? XGBE_PMA_PLL_CTRL_ENABLE
    + : XGBE_PMA_PLL_CTRL_DISABLE);
    +
    + /* Wait for command to complete */
    + usleep_range(100, 200);
    +}
    +
    static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
    unsigned int cmd, unsigned int sub_cmd)
    {
    unsigned int s0 = 0;
    unsigned int wait;

    + /* Disable PLL re-initialization during FW command processing */
    + xgbe_phy_pll_ctrl(pdata, false);
    +
    /* Log if a previous command did not complete */
    if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) {
    netif_dbg(pdata, link, pdata->netdev,
    @@ -2003,7 +2017,7 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
    wait = XGBE_RATECHANGE_COUNT;
    while (wait--) {
    if (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
    - return;
    + goto reenable_pll;

    usleep_range(1000, 2000);
    }
    @@ -2013,6 +2027,10 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,

    /* Reset on error */
    xgbe_phy_rx_reset(pdata);
    +
    +reenable_pll:
    + /* Enable PLL re-initialization */
    + xgbe_phy_pll_ctrl(pdata, true);
    }

    static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:09    [W:4.117 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site