Patch "net: dsa: bcm_sf2: Fix ageing conditions and operation" has been added to the 4.1-stable tree
This is a note to let you know that I've just added the patch titled
net: dsa: bcm_sf2: Fix ageing conditions and operation
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-dsa-bcm_sf2-fix-ageing-conditions-and-operation.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Sep 30 05:18:31 CEST 2015
From: Florian Fainelli <[email protected]>
Date: Sat, 5 Sep 2015 13:07:27 -0700
Subject: net: dsa: bcm_sf2: Fix ageing conditions and operation
From: Florian Fainelli <[email protected]>
[ Upstream commit 39797a279d62972cd914ef580fdfacb13e508bf8 ]
The comparison check between cur_hw_state and hw_state is currently invalid because cur_hw_state is right shifted by G_MISTP_SHIFT, while hw_state is not, so we end-up comparing bits 2:0 with bits 7:5, which is going to cause an additional aging to occur. Fix this by not shifting cur_hw_state while reading it, but instead, mask the value with the appropriately shitfted bitmask.
The other problem with the fast-ageing process is that we did not set the EN_AGE_DYNAMIC bit to request the ageing to occur for dynamically learned MAC addresses. Finally, write back 0 to the FAST_AGE_CTRL register to avoid leaving spurious bits sets from one operation to the other.
--- drivers/net/dsa/bcm_sf2.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/net/dsa/bcm_sf2.c +8 -4
@@ -417,7 +417,7 @@ static int bcm_sf2_sw_fast_age_port(strucore_writel (priv, port,CORE_FAST_AGE_PORT ); reg =core_readl (priv,CORE_FAST_AGE_CTRL ); - reg |=EN_AGE_PORT |FAST_AGE_STR_DONE ; + reg |=EN_AGE_PORT |EN_AGE_DYNAMIC |FAST_AGE_STR_DONE ;core_writel (priv, reg,CORE_FAST_AGE_CTRL ); do {
@@ -431,6 +431,8 @@ static int bcm_sf2_sw_fast_age_port(struif (!timeout)return -ETIMEDOUT ; +core_writel (priv,0 ,CORE_FAST_AGE_CTRL ); +return 0 ; }
@@ -506,7 +508,7 @@ static int bcm_sf2_sw_br_set_stp_state(su32 reg; reg =core_readl (priv,CORE_G_PCTL_PORT (port)); - cur_hw_state = reg >>G_MISTP_STATE_SHIFT ; + cur_hw_state = reg & (G_MISTP_STATE_MASK <<G_MISTP_STATE_SHIFT );switch (state) {case BR_STATE_DISABLED :
@@ -530,10 +532,12 @@ static int bcm_sf2_sw_br_set_stp_state(s }/* Fast-age ARL entries if we are moving a port from Learning or -* Forwarding state to Disabled, Blocking or Listening state +* Forwarding (cur_hw_state) state to Disabled, Blocking or Listening +* state (hw_state) */ if (cur_hw_state != hw_state) { -if (cur_hw_state &4 && !(hw_state &4 )) { +if (cur_hw_state >=G_MISTP_LEARN_STATE && + hw_state <=G_MISTP_LISTEN_STATE ) { ret =bcm_sf2_sw_fast_age_port (ds, port);if (ret) {pr_err ("%s: fast-ageing failed\n" , __func__);
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/net-dsa-bcm_sf2-do-not-override-speed-settings.patch queue-4.1/net-phy-fixed_phy-handle-link-down-case.patch queue-4.1/net-dsa-bcm_sf2-fix-ageing-conditions-and-operation.patch queue-4.1/of_mdio-add-new-dt-property-managed-to-specify-the-phy-management-type.patch queue-4.1/net-dsa-bcm_sf2-fix-64-bits-register-writes.patch