[PATCH] phy address mask support for generic phy layer
authorMatt Porter <mporter@kernel.crashing.org>
Wed, 2 Nov 2005 23:13:06 +0000 (16:13 -0700)
committerJeff Garzik <jgarzik@pobox.com>
Sat, 5 Nov 2005 19:40:55 +0000 (14:40 -0500)
Adds a phy_mask field to struct mii_bus and uses it.  This field
indicates each phy address to be ignored when probing the mdio bus.

This support is needed for the fs_enet and ibm_emac drivers to be
converted to the generic phy layer among other drivers. Many systems
lock up on probing certain phy addresses or probing doesn't return
0xffff when nothing is found at the address. A new driver I'm
working on also makes use of this mask.

Signed-off-by: Matt Porter <mporter@kernel.crashing.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/phy/mdio_bus.c
include/linux/phy.h

index ad93b0da87f020b2e4c1de55f9de52db271bc089..5eab9c42a111228e827fae0a2d37fbae4f0c1a2e 100644 (file)
@@ -61,6 +61,9 @@ int mdiobus_register(struct mii_bus *bus)
        for (i = 0; i < PHY_MAX_ADDR; i++) {
                struct phy_device *phydev;
 
+               if (bus->phy_mask & (1 << i))
+                       continue;
+
                phydev = get_phy_device(bus, i);
 
                if (IS_ERR(phydev))
index 72cb67b66e0c85144c6544920299d5348708458e..92a9696fdebe0ecb7bad1922bffe3c8e360026d5 100644 (file)
@@ -72,6 +72,9 @@ struct mii_bus {
        /* list of all PHYs on bus */
        struct phy_device *phy_map[PHY_MAX_ADDR];
 
+       /* Phy addresses to be ignored when probing */
+       u32 phy_mask;
+
        /* Pointer to an array of interrupts, each PHY's
         * interrupt at the index matching its address */
        int *irq;