From b7d7481b078608d6187c5bf433ea3dccf9b394e7 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Thu, 15 Dec 2011 13:25:23 +0000
Subject: [PATCH] ar71xx: ag71xx: check PHY IDs before accessing the switch
 registers

SVN-Revision: 29541
---
 .../files/drivers/net/ag71xx/ag71xx_ar7240.c    | 17 ++++++++---------
 1 file 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;
-- 
2.30.2