diff mbox

[2/2] b44: always set duplex mode why phy changes

Message ID 1393777774-7400-2-git-send-email-hauke@hauke-m.de
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Hauke Mehrtens March 2, 2014, 4:29 p.m. UTC
Without this patch b44_check_phy() was called when the phy called the
adjust callback. This method only change the mac duplex mode when the
carrier was off. When the phy changed the duplex mode after the carrier
was on the mac was not changed. This happened when an external phy was
used.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/ethernet/broadcom/b44.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Florian Fainelli March 2, 2014, 6:53 p.m. UTC | #1
Le dimanche 2 mars 2014, 17:29:34 Hauke Mehrtens a écrit :
> Without this patch b44_check_phy() was called when the phy called the
> adjust callback. This method only change the mac duplex mode when the
> carrier was off. When the phy changed the duplex mode after the carrier
> was on the mac was not changed. This happened when an external phy was
> used.
> 
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

Acked-by: Florian Fainelli <f.fainelli@gmail.com>

> ---
>  drivers/net/ethernet/broadcom/b44.c |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/b44.c
> b/drivers/net/ethernet/broadcom/b44.c index e8046e1..8a7bf7d 100644
> --- a/drivers/net/ethernet/broadcom/b44.c
> +++ b/drivers/net/ethernet/broadcom/b44.c
> @@ -2229,7 +2229,12 @@ static void b44_adjust_link(struct net_device *dev)
>  	}
> 
>  	if (status_changed) {
> -		b44_check_phy(bp);
> +		u32 val = br32(bp, B44_TX_CTRL);
> +		if (bp->flags & B44_FLAG_FULL_DUPLEX)
> +			val |= TX_CTRL_DUPLEX;
> +		else
> +			val &= ~TX_CTRL_DUPLEX;
> +		bw32(bp, B44_TX_CTRL, val);
>  		phy_print_status(phydev);
>  	}
>  }
David Miller March 3, 2014, 12:06 a.m. UTC | #2
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun,  2 Mar 2014 17:29:34 +0100

> Without this patch b44_check_phy() was called when the phy called the
> adjust callback. This method only change the mac duplex mode when the
> carrier was off. When the phy changed the duplex mode after the carrier
> was on the mac was not changed. This happened when an external phy was
> used.
> 
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c
index e8046e1..8a7bf7d 100644
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -2229,7 +2229,12 @@  static void b44_adjust_link(struct net_device *dev)
 	}
 
 	if (status_changed) {
-		b44_check_phy(bp);
+		u32 val = br32(bp, B44_TX_CTRL);
+		if (bp->flags & B44_FLAG_FULL_DUPLEX)
+			val |= TX_CTRL_DUPLEX;
+		else
+			val &= ~TX_CTRL_DUPLEX;
+		bw32(bp, B44_TX_CTRL, val);
 		phy_print_status(phydev);
 	}
 }