diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch b/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch new file mode 100644 index 0000000000..54256dbaa0 --- /dev/null +++ b/target/linux/brcm47xx/patches-3.10/203-b44-abort-when-no-PHY-is-available-at-all.patch @@ -0,0 +1,40 @@ +From 1bfdc259652abe22a587fd6d856c1b71168cccb2 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Thu, 3 Oct 2013 20:49:10 +0200 +Subject: [PATCH 3/5] b44: abort when no PHY is available at all + +When the phy address is 31, this means that there is no PHY connected +to this MAC at all, no internal and no external PHY. Reading these PHY +registers causes a system reset on some routers. + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + drivers/net/ethernet/broadcom/b44.c | 6 ++++++ + drivers/net/ethernet/broadcom/b44.h | 1 + + 2 files changed, 7 insertions(+) + +--- a/drivers/net/ethernet/broadcom/b44.c ++++ b/drivers/net/ethernet/broadcom/b44.c +@@ -2207,6 +2207,12 @@ static int b44_init_one(struct ssb_devic + goto err_out_powerdown; + } + ++ if (bp->phy_addr == B44_PHY_ADDR_NO_PHY) { ++ dev_err(sdev->dev, "No PHY present on this MAC, aborting\n"); ++ err = -ENODEV; ++ goto err_out_powerdown; ++ } ++ + bp->mii_if.dev = dev; + bp->mii_if.mdio_read = b44_mii_read; + bp->mii_if.mdio_write = b44_mii_write; +--- a/drivers/net/ethernet/broadcom/b44.h ++++ b/drivers/net/ethernet/broadcom/b44.h +@@ -282,6 +282,7 @@ struct ring_info { + + #define B44_MCAST_TABLE_SIZE 32 + #define B44_PHY_ADDR_NO_LOACL_PHY 30 /* no local phy regs */ ++#define B44_PHY_ADDR_NO_PHY 31 /* no phy present at all */ + #define B44_MDC_RATIO 5000000 + + #define B44_STAT_REG_DECLARE \ |