Skip to content
Snippets Groups Projects
Commit 774da6c7 authored by Gabor Juhos's avatar Gabor Juhos
Browse files

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: default avatarGabor Juhos <juhosg@openwrt.org>

SVN-Revision: 35537
parent 4720c75c
No related branches found
No related tags found
No related merge requests found
...@@ -1956,6 +1956,44 @@ ar8216_config_aneg(struct phy_device *phydev) ...@@ -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) ...@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment