aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2011-12-15 13:25:23 +0000
committerGabor Juhos <juhosg@openwrt.org>2011-12-15 13:25:23 +0000
commitb7d7481b078608d6187c5bf433ea3dccf9b394e7 (patch)
tree901399f92597697c280d0a2d78114c4a6561e86f /target/linux/ar71xx
parent0655552860c1439183371307cfe3b5e1247c11d6 (diff)
downloadupstream-b7d7481b078608d6187c5bf433ea3dccf9b394e7.tar.gz
upstream-b7d7481b078608d6187c5bf433ea3dccf9b394e7.tar.bz2
upstream-b7d7481b078608d6187c5bf433ea3dccf9b394e7.zip
ar71xx: ag71xx: check PHY IDs before accessing the switch registers
SVN-Revision: 29541
Diffstat (limited to 'target/linux/ar71xx')
-rw-r--r--target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
index ffc4948587..c0eca4ae41 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c
@@ -852,6 +852,14 @@ static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
u8 ver;
int i;
+ phy_id1 = ar7240sw_phy_read(mii, 0, MII_PHYSID1);
+ phy_id2 = ar7240sw_phy_read(mii, 0, MII_PHYSID2);
+ if (phy_id1 != AR7240_PHY_ID1 || phy_id2 != AR7240_PHY_ID2) {
+ pr_err("%s: unknown phy id '%04x:%04x'\n",
+ ag->dev->name, phy_id1, phy_id2);
+ return NULL;
+ }
+
as = kzalloc(sizeof(*as), GFP_KERNEL);
if (!as)
return NULL;
@@ -859,7 +867,6 @@ static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
as->mii_bus = mii;
ctrl = ar7240sw_reg_read(mii, AR7240_REG_MASK_CTRL);
-
ver = (ctrl >> AR7240_MASK_CTRL_VERSION_S) & AR7240_MASK_CTRL_VERSION_M;
if (ver != 1) {
pr_err("%s: unsupported chip, ctrl=%08x\n",
@@ -867,14 +874,6 @@ static struct ar7240sw *ar7240_probe(struct ag71xx *ag)
return NULL;
}
- phy_id1 = ar7240sw_phy_read(mii, 0, MII_PHYSID1);
- phy_id2 = ar7240sw_phy_read(mii, 0, MII_PHYSID2);
- if (phy_id1 != AR7240_PHY_ID1 || phy_id2 != AR7240_PHY_ID2) {
- pr_err("%s: unknown phy id '%04x:%04x'\n",
- ag->dev->name, phy_id1, phy_id2);
- return NULL;
- }
-
swdev = &as->swdev;
swdev->name = "AR7240 built-in switch";
swdev->ports = AR7240_NUM_PORTS - 1;