generic: ar8216: add sanity check to ar8216_probe
Verify that the mdio bus has PHY devices with a supported PHY ID at address 0-4. Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 35537
This commit is contained in:
parent
4720c75cf7
commit
774da6c7a4
1 changed files with 41 additions and 0 deletions
|
@ -1956,6 +1956,44 @@ ar8216_config_aneg(struct phy_device *phydev)
|
||||||
return genphy_config_aneg(phydev);
|
return genphy_config_aneg(phydev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const u32 ar8xxx_phy_ids[] = {
|
||||||
|
0x004dd033,
|
||||||
|
0x004dd041,
|
||||||
|
0x004dd042,
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool
|
||||||
|
ar8xxx_phy_match(u32 phy_id)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
|
||||||
|
if (phy_id == ar8xxx_phy_ids[i])
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
ar8xxx_is_possible(struct mii_bus *bus)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
u32 phy_id;
|
||||||
|
|
||||||
|
phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
|
||||||
|
phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
|
||||||
|
if (!ar8xxx_phy_match(phy_id)) {
|
||||||
|
pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
|
||||||
|
dev_name(&bus->dev), i, phy_id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ar8216_probe(struct phy_device *pdev)
|
ar8216_probe(struct phy_device *pdev)
|
||||||
{
|
{
|
||||||
|
@ -1966,6 +2004,9 @@ ar8216_probe(struct phy_device *pdev)
|
||||||
if (pdev->addr != 0 && pdev->addr != 4)
|
if (pdev->addr != 0 && pdev->addr != 4)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!ar8xxx_is_possible(pdev->bus))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
priv = kzalloc(sizeof(struct ar8216_priv), GFP_KERNEL);
|
priv = kzalloc(sizeof(struct ar8216_priv), GFP_KERNEL);
|
||||||
if (priv == NULL)
|
if (priv == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Loading…
Reference in a new issue