diff mbox series

[net-next,3/3] net: dsa/bcm_sf2: move pause mode setting into mac_link_up()

Message ID E1jqDUw-0004uL-Ip@rmk-PC.armlinux.org.uk
State Accepted
Delegated to: David Miller
Headers show
Series Convert Broadcom SF2 to mac_link_up() resolved state | expand

Commit Message

Russell King (Oracle) June 30, 2020, 10:28 a.m. UTC
bcm_sf2 only appears to support pause modes on RGMII interfaces (the
enable bits are in the RGMII control register.)  Setup the pause modes
for RGMII connections.

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
 drivers/net/dsa/bcm_sf2.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

Comments

Jakub Kicinski June 30, 2020, 4:14 p.m. UTC | #1
On Tue, 30 Jun 2020 11:28:18 +0100 Russell King wrote:
> @@ -662,6 +655,22 @@ static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port,
>  		else
>  			offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
>  
> +		if (interface == PHY_INTERFACE_MODE_RGMII ||
> +		    interface == PHY_INTERFACE_MODE_RGMII_TXID ||
> +		    interface == PHY_INTERFACE_MODE_MII ||
> +		    interface == PHY_INTERFACE_MODE_REVMII) {
> +			reg = reg_readl(priv, REG_RGMII_CNTRL_P(port));
> +			reg &= ~(RX_PAUSE_EN | TX_PAUSE_EN);
> +
> +			if (tx_pause)
> +				reg |= TX_PAUSE_EN;
> +			if (rx_pause)
> +				reg |= RX_PAUSE_EN;
> +
> +			reg_writel(priv, reg, REG_RGMII_CNTRL_P(port));
> +		}
> +
> +

nit: double new line
diff mbox series

Patch

diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c
index 062e6efad53f..45e4d40d7e25 100644
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
@@ -587,18 +587,11 @@  static void bcm_sf2_sw_mac_config(struct dsa_switch *ds, int port,
 	reg = reg_readl(priv, REG_RGMII_CNTRL_P(port));
 	reg &= ~ID_MODE_DIS;
 	reg &= ~(PORT_MODE_MASK << PORT_MODE_SHIFT);
-	reg &= ~(RX_PAUSE_EN | TX_PAUSE_EN);
 
 	reg |= port_mode;
 	if (id_mode_dis)
 		reg |= ID_MODE_DIS;
 
-	if (state->pause & MLO_PAUSE_TXRX_MASK) {
-		if (state->pause & MLO_PAUSE_TX)
-			reg |= TX_PAUSE_EN;
-		reg |= RX_PAUSE_EN;
-	}
-
 	reg_writel(priv, reg, REG_RGMII_CNTRL_P(port));
 }
 
@@ -662,6 +655,22 @@  static void bcm_sf2_sw_mac_link_up(struct dsa_switch *ds, int port,
 		else
 			offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
 
+		if (interface == PHY_INTERFACE_MODE_RGMII ||
+		    interface == PHY_INTERFACE_MODE_RGMII_TXID ||
+		    interface == PHY_INTERFACE_MODE_MII ||
+		    interface == PHY_INTERFACE_MODE_REVMII) {
+			reg = reg_readl(priv, REG_RGMII_CNTRL_P(port));
+			reg &= ~(RX_PAUSE_EN | TX_PAUSE_EN);
+
+			if (tx_pause)
+				reg |= TX_PAUSE_EN;
+			if (rx_pause)
+				reg |= RX_PAUSE_EN;
+
+			reg_writel(priv, reg, REG_RGMII_CNTRL_P(port));
+		}
+
+
 		reg = SW_OVERRIDE | LINK_STS;
 		switch (speed) {
 		case SPEED_1000: