lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 086/140] net: dsa: bcm_sf2: Fix IMP setup for port different than 8
    Date
    From: Florian Fainelli <f.fainelli@gmail.com>

    [ Upstream commit 5fc0f21246e50afdf318b5a3a941f7f4f57b8947 ]

    Since it became possible for the DSA core to use a CPU port different
    than 8, our bcm_sf2_imp_setup() function was broken because it assumes
    that registers are applicable to port 8. In particular, the port's MAC
    is going to stay disabled, so make sure we clear the RX_DIS and TX_DIS
    bits if we are not configured for port 8.

    Fixes: 9f91484f6fcc ("net: dsa: make "label" property optional for dsa2")
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/dsa/bcm_sf2.c | 36 +++++++++++++++++++++---------------
    1 file changed, 21 insertions(+), 15 deletions(-)

    --- a/drivers/net/dsa/bcm_sf2.c
    +++ b/drivers/net/dsa/bcm_sf2.c
    @@ -37,22 +37,11 @@ static void bcm_sf2_imp_setup(struct dsa
    unsigned int i;
    u32 reg, offset;

    - if (priv->type == BCM7445_DEVICE_ID)
    - offset = CORE_STS_OVERRIDE_IMP;
    - else
    - offset = CORE_STS_OVERRIDE_IMP2;
    -
    /* Enable the port memories */
    reg = core_readl(priv, CORE_MEM_PSM_VDD_CTRL);
    reg &= ~P_TXQ_PSM_VDD(port);
    core_writel(priv, reg, CORE_MEM_PSM_VDD_CTRL);

    - /* Enable Broadcast, Multicast, Unicast forwarding to IMP port */
    - reg = core_readl(priv, CORE_IMP_CTL);
    - reg |= (RX_BCST_EN | RX_MCST_EN | RX_UCST_EN);
    - reg &= ~(RX_DIS | TX_DIS);
    - core_writel(priv, reg, CORE_IMP_CTL);
    -
    /* Enable forwarding */
    core_writel(priv, SW_FWDG_EN, CORE_SWMODE);

    @@ -71,10 +60,27 @@ static void bcm_sf2_imp_setup(struct dsa

    b53_brcm_hdr_setup(ds, port);

    - /* Force link status for IMP port */
    - reg = core_readl(priv, offset);
    - reg |= (MII_SW_OR | LINK_STS);
    - core_writel(priv, reg, offset);
    + if (port == 8) {
    + if (priv->type == BCM7445_DEVICE_ID)
    + offset = CORE_STS_OVERRIDE_IMP;
    + else
    + offset = CORE_STS_OVERRIDE_IMP2;
    +
    + /* Force link status for IMP port */
    + reg = core_readl(priv, offset);
    + reg |= (MII_SW_OR | LINK_STS);
    + core_writel(priv, reg, offset);
    +
    + /* Enable Broadcast, Multicast, Unicast forwarding to IMP port */
    + reg = core_readl(priv, CORE_IMP_CTL);
    + reg |= (RX_BCST_EN | RX_MCST_EN | RX_UCST_EN);
    + reg &= ~(RX_DIS | TX_DIS);
    + core_writel(priv, reg, CORE_IMP_CTL);
    + } else {
    + reg = core_readl(priv, CORE_G_PCTL_PORT(port));
    + reg &= ~(RX_DIS | TX_DIS);
    + core_writel(priv, reg, CORE_G_PCTL_PORT(port));
    + }
    }

    static void bcm_sf2_gphy_enable_set(struct dsa_switch *ds, bool enable)

    \
     
     \ /
      Last update: 2019-11-08 20:13    [W:4.247 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site