summaryrefslogtreecommitdiff
path: root/target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2013-10-22 21:01:35 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2013-10-22 21:01:35 +0000
commit6d2136c3f2acfdef23677973c3e8d21f92f6fe18 (patch)
tree2913979d3e903ff3a09b0fa5a8dd8fe5d8d4330a /target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch
parent5d4cc68b66516322240d906827d424df55ee0905 (diff)
downloadmtk-20170518-6d2136c3f2acfdef23677973c3e8d21f92f6fe18.zip
mtk-20170518-6d2136c3f2acfdef23677973c3e8d21f92f6fe18.tar.gz
mtk-20170518-6d2136c3f2acfdef23677973c3e8d21f92f6fe18.tar.bz2
brcm47xx: b44: detect external phy by bit set in DevControl register
Without this patch we treated only phy addr 30 as an external phy, but there is a register to check that. Now we do not have to try to reset the switch to check for an external switch. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 38502
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch97
1 files changed, 97 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch b/target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch
new file mode 100644
index 0000000..32754b0
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.10/201-b44-use-B44_FLAG_EXTERNAL_PHY.patch
@@ -0,0 +1,97 @@
+From 3fc36ba561bd9a9bdc097d6ace32f1303364268c Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Tue, 22 Oct 2013 21:05:25 +0200
+Subject: [PATCH 2/9] b44: use B44_FLAG_EXTERNAL_PHY
+
+---
+ drivers/net/ethernet/broadcom/b44.c | 18 +++++++++---------
+ drivers/net/ethernet/broadcom/b44.h | 2 +-
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/ethernet/broadcom/b44.c
++++ b/drivers/net/ethernet/broadcom/b44.c
+@@ -284,7 +284,7 @@ static int __b44_writephy(struct b44 *bp
+
+ static inline int b44_readphy(struct b44 *bp, int reg, u32 *val)
+ {
+- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
++ if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+ return 0;
+
+ return __b44_readphy(bp, bp->phy_addr, reg, val);
+@@ -292,7 +292,7 @@ static inline int b44_readphy(struct b44
+
+ static inline int b44_writephy(struct b44 *bp, int reg, u32 val)
+ {
+- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
++ if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+ return 0;
+
+ return __b44_writephy(bp, bp->phy_addr, reg, val);
+@@ -321,7 +321,7 @@ static int b44_phy_reset(struct b44 *bp)
+ u32 val;
+ int err;
+
+- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
++ if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+ return 0;
+ err = b44_writephy(bp, MII_BMCR, BMCR_RESET);
+ if (err)
+@@ -423,7 +423,7 @@ static int b44_setup_phy(struct b44 *bp)
+
+ b44_wap54g10_workaround(bp);
+
+- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
++ if (bp->flags & B44_FLAG_EXTERNAL_PHY)
+ return 0;
+ if ((err = b44_readphy(bp, B44_MII_ALEDCTRL, &val)) != 0)
+ goto out;
+@@ -521,7 +521,7 @@ static void b44_check_phy(struct b44 *bp
+ {
+ u32 bmsr, aux;
+
+- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) {
++ if (bp->flags & B44_FLAG_EXTERNAL_PHY) {
+ bp->flags |= B44_FLAG_100_BASE_T;
+ bp->flags |= B44_FLAG_FULL_DUPLEX;
+ if (!netif_carrier_ok(bp->dev)) {
+@@ -1315,7 +1315,7 @@ static void b44_chip_reset(struct b44 *b
+ if (!(br32(bp, B44_DEVCTRL) & DEVCTRL_IPP)) {
+ bw32(bp, B44_ENET_CTRL, ENET_CTRL_EPSEL);
+ br32(bp, B44_ENET_CTRL);
+- bp->flags &= ~B44_FLAG_INTERNAL_PHY;
++ bp->flags |= B44_FLAG_EXTERNAL_PHY;
+ } else {
+ u32 val = br32(bp, B44_DEVCTRL);
+
+@@ -1324,7 +1324,7 @@ static void b44_chip_reset(struct b44 *b
+ br32(bp, B44_DEVCTRL);
+ udelay(100);
+ }
+- bp->flags |= B44_FLAG_INTERNAL_PHY;
++ bp->flags &= ~B44_FLAG_EXTERNAL_PHY;
+ }
+ }
+
+@@ -1828,8 +1828,8 @@ static int b44_get_settings(struct net_d
+ DUPLEX_FULL : DUPLEX_HALF;
+ cmd->port = 0;
+ cmd->phy_address = bp->phy_addr;
+- cmd->transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ?
+- XCVR_INTERNAL : XCVR_EXTERNAL;
++ cmd->transceiver = (bp->flags & B44_FLAG_EXTERNAL_PHY) ?
++ XCVR_EXTERNAL : XCVR_INTERNAL;
+ cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ?
+ AUTONEG_DISABLE : AUTONEG_ENABLE;
+ if (cmd->autoneg == AUTONEG_ENABLE)
+--- a/drivers/net/ethernet/broadcom/b44.h
++++ b/drivers/net/ethernet/broadcom/b44.h
+@@ -376,7 +376,7 @@ struct b44 {
+ #define B44_FLAG_ADV_10FULL 0x02000000
+ #define B44_FLAG_ADV_100HALF 0x04000000
+ #define B44_FLAG_ADV_100FULL 0x08000000
+-#define B44_FLAG_INTERNAL_PHY 0x10000000
++#define B44_FLAG_EXTERNAL_PHY 0x10000000
+ #define B44_FLAG_RX_RING_HACK 0x20000000
+ #define B44_FLAG_TX_RING_HACK 0x40000000
+ #define B44_FLAG_WOL_ENABLE 0x80000000