phy: Change mii_bus id field to a string
authorAndy Fleming <afleming@freescale.com>
Thu, 10 Apr 2008 00:38:13 +0000 (19:38 -0500)
committerJeff Garzik <jgarzik@redhat.com>
Thu, 17 Apr 2008 00:09:35 +0000 (20:09 -0400)
Having the id field be an int was making more complex bus topologies
excessively difficult.  For now, just convert it to a string, and
change all instances of "bus->id = val" to
snprintf(id, MII_BUS_ID_LEN, "%x", val).

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
21 files changed:
arch/powerpc/platforms/82xx/ep8248e.c
arch/powerpc/platforms/pasemi/gpio_mdio.c
arch/powerpc/sysdev/fsl_soc.c
drivers/net/au1000_eth.c
drivers/net/bfin_mac.c
drivers/net/cpmac.c
drivers/net/fec_mpc52xx.c
drivers/net/fec_mpc52xx_phy.c
drivers/net/fs_enet/fs_enet-main.c
drivers/net/fs_enet/mii-bitbang.c
drivers/net/fs_enet/mii-fec.c
drivers/net/gianfar_mii.c
drivers/net/macb.c
drivers/net/pasemi_mac.c
drivers/net/phy/fixed.c
drivers/net/sb1250-mac.c
drivers/net/ucc_geth.c
drivers/net/ucc_geth.h
drivers/net/ucc_geth_mii.c
include/linux/fsl_devices.h
include/linux/phy.h

index ba93d8ae9b0c8921739575e7775118bfe0cd28c8..d5770fdf7f0970701c033363f53013caa3e5b45e 100644 (file)
@@ -138,7 +138,7 @@ static int __devinit ep8248e_mdio_probe(struct of_device *ofdev,
 
        bus->name = "ep8248e-mdio-bitbang";
        bus->dev = &ofdev->dev;
-       bus->id = res.start;
+       snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
 
        return mdiobus_register(bus);
 }
index b46542990cf8288338c34c80a169d8364e942a56..ab6955412ba49becbc14e0c4aa536dbb7121ecbd 100644 (file)
@@ -241,7 +241,7 @@ static int __devinit gpio_mdio_probe(struct of_device *ofdev,
        new_bus->reset = &gpio_mdio_reset;
 
        prop = of_get_property(np, "reg", NULL);
-       new_bus->id = *prop;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", *prop);
        new_bus->priv = priv;
 
        new_bus->phy_mask = 0;
index 2c5388ce902abfaa3fd9f400c231a3dd64735cc5..3581416905eaca520485af0cdd13e5b8b7c6935d 100644 (file)
@@ -341,7 +341,7 @@ static int __init gfar_of_init(void)
                                goto unreg;
                        }
 
-                       gfar_data.bus_id = 0;
+                       snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "0");
                        gfar_data.phy_id = fixed_link[0];
                } else {
                        phy = of_find_node_by_phandle(*ph);
@@ -362,7 +362,8 @@ static int __init gfar_of_init(void)
                        }
 
                        gfar_data.phy_id = *id;
-                       gfar_data.bus_id = res.start;
+                       snprintf(gfar_data.bus_id, MII_BUS_ID_SIZE, "%x",
+                                       res.start);
 
                        of_node_put(phy);
                        of_node_put(mdio);
index 504b7ce2747de0c6cf91f6ab945608dd11dcfd76..3634b5fd791964d88bf42bd3785402b79e0fc44a 100644 (file)
@@ -701,7 +701,7 @@ static struct net_device * au1000_probe(int port_num)
        aup->mii_bus.write = mdiobus_write;
        aup->mii_bus.reset = mdiobus_reset;
        aup->mii_bus.name = "au1000_eth_mii";
-       aup->mii_bus.id = aup->mac_id;
+       snprintf(aup->mii_bus.id, MII_BUS_ID_SIZE, "%x", aup->mac_id);
        aup->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
        for(i = 0; i < PHY_MAX_ADDR; ++i)
                aup->mii_bus.irq[i] = PHY_POLL;
@@ -709,11 +709,11 @@ static struct net_device * au1000_probe(int port_num)
        /* if known, set corresponding PHY IRQs */
 #if defined(AU1XXX_PHY_STATIC_CONFIG)
 # if defined(AU1XXX_PHY0_IRQ)
-       if (AU1XXX_PHY0_BUSID == aup->mii_bus.id)
+       if (AU1XXX_PHY0_BUSID == aup->mac_id)
                aup->mii_bus.irq[AU1XXX_PHY0_ADDR] = AU1XXX_PHY0_IRQ;
 # endif
 # if defined(AU1XXX_PHY1_IRQ)
-       if (AU1XXX_PHY1_BUSID == aup->mii_bus.id)
+       if (AU1XXX_PHY1_BUSID == aup->mac_id)
                aup->mii_bus.irq[AU1XXX_PHY1_ADDR] = AU1XXX_PHY1_IRQ;
 # endif
 #endif
index 26b2dd5016cd4ecfcd9a94915dfa9cb4744f91f0..717dcc1aa1e97acb8bfddf2e44e97cc51cb8a8f7 100644 (file)
@@ -969,7 +969,7 @@ static int __init bf537mac_probe(struct net_device *dev)
        lp->mii_bus.write = mdiobus_write;
        lp->mii_bus.reset = mdiobus_reset;
        lp->mii_bus.name = "bfin_mac_mdio";
-       lp->mii_bus.id = 0;
+       snprintf(lp->mii_bus.id, MII_BUS_ID_SIZE, "0");
        lp->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
        for (i = 0; i < PHY_MAX_ADDR; ++i)
                lp->mii_bus.irq[i] = PHY_POLL;
index c85194f2cd2dc2b8a9bf5628e63b9189db0ec2cd..9da7ff437031fec11854152851c344608ec183ff 100644 (file)
@@ -987,7 +987,7 @@ static int external_switch;
 static int __devinit cpmac_probe(struct platform_device *pdev)
 {
        int rc, phy_id, i;
-       int mdio_bus_id = cpmac_mii.id;
+       char *mdio_bus_id = "0";
        struct resource *mem;
        struct cpmac_priv *priv;
        struct net_device *dev;
@@ -1008,8 +1008,6 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
                if (external_switch || dumb_switch) {
                        struct fixed_phy_status status = {};
 
-                       mdio_bus_id = 0;
-
                        /*
                         * FIXME: this should be in the platform code!
                         * Since there is not platform code at all (that is,
@@ -1143,6 +1141,7 @@ int __devinit cpmac_init(void)
        }
 
        cpmac_mii.phy_mask = ~(mask | 0x80000000);
+       snprintf(cpmac_mii.id, MII_BUS_ID_SIZE, "0");
 
        res = mdiobus_register(&cpmac_mii);
        if (res)
index 58b71e60204e6df0b505980c2205814141d5a171..43b5f30743c231d030a4d1a19721cde011d09afd 100644 (file)
@@ -198,7 +198,7 @@ static int mpc52xx_fec_init_phy(struct net_device *dev)
        struct phy_device *phydev;
        char phy_id[BUS_ID_SIZE];
 
-       snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT,
+       snprintf(phy_id, BUS_ID_SIZE, "%x:%02x",
                        (unsigned int)dev->base_addr, priv->phy_addr);
 
        priv->link = PHY_DOWN;
index 6a3ac4ea97e90af21bc7ab0cb0cea66dad7cf7cd..956836fc5ec09cb5141bb6e27a0ed3822f64f541 100644 (file)
@@ -124,7 +124,7 @@ static int mpc52xx_fec_mdio_probe(struct of_device *of, const struct of_device_i
                goto out_free;
        }
 
-       bus->id = res.start;
+       snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
        bus->priv = priv;
 
        bus->dev = dev;
index 940e2041ba3832de9dbb4b57351cac6775bc5cac..67b4b0728fce3b983e0f19556c3c3ecc856eddd7 100644 (file)
@@ -1178,7 +1178,7 @@ static int __devinit find_phy(struct device_node *np,
 
        data  = of_get_property(np, "fixed-link", NULL);
        if (data) {
-               snprintf(fpi->bus_id, 16, PHY_ID_FMT, 0, *data);
+               snprintf(fpi->bus_id, 16, "%x:%02x", 0, *data);
                return 0;
        }
 
@@ -1202,7 +1202,7 @@ static int __devinit find_phy(struct device_node *np,
        if (!data || len != 4)
                goto out_put_mdio;
 
-       snprintf(fpi->bus_id, 16, PHY_ID_FMT, res.start, *data);
+       snprintf(fpi->bus_id, 16, "%x:%02x", res.start, *data);
 
 out_put_mdio:
        of_node_put(mdionode);
index b8e4a736a130e6c79d537252f4fc2da3e7c2dddf..1620030cd33c92e7fd7044ea54c7f1d3c6442925 100644 (file)
@@ -130,7 +130,7 @@ static int __devinit fs_mii_bitbang_init(struct mii_bus *bus,
         * we get is an int, and the odds of multiple bitbang mdio buses
         * is low enough that it's not worth going too crazy.
         */
-       bus->id = res.start;
+       snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
 
        data = of_get_property(np, "fsl,mdio-pin", &len);
        if (!data || len != 4)
@@ -307,7 +307,7 @@ static int __devinit fs_enet_mdio_probe(struct device *dev)
                return -ENOMEM;
 
        new_bus->name = "BB MII Bus",
-       new_bus->id = pdev->id;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", pdev->id);
 
        new_bus->phy_mask = ~0x9;
        pdata = (struct fs_mii_bb_platform_info *)pdev->dev.platform_data;
index a89cf15090b8840ed3d79f986ab2c30e1b6bbedf..ba75efc9f5b50bdaf647a70015a2d08b3987ec9d 100644 (file)
@@ -196,7 +196,7 @@ static int __devinit fs_enet_mdio_probe(struct of_device *ofdev,
        if (ret)
                return ret;
 
-       new_bus->id = res.start;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", res.start);
 
        fec->fecp = ioremap(res.start, res.end - res.start + 1);
        if (!fec->fecp)
@@ -309,7 +309,7 @@ static int __devinit fs_enet_fec_mdio_probe(struct device *dev)
        new_bus->read = &fs_enet_fec_mii_read,
        new_bus->write = &fs_enet_fec_mii_write,
        new_bus->reset = &fs_enet_fec_mii_reset,
-       new_bus->id = pdev->id;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", pdev->id);
 
        pdata = (struct fs_mii_fec_platform_info *)pdev->dev.platform_data;
 
index 24327629bf039d989652f472133b807b6b22a1ba..b8898927236a69fa5723c1d1c0bc10faec7db2b3 100644 (file)
@@ -173,7 +173,7 @@ int gfar_mdio_probe(struct device *dev)
        new_bus->read = &gfar_mdio_read,
        new_bus->write = &gfar_mdio_write,
        new_bus->reset = &gfar_mdio_reset,
-       new_bus->id = pdev->id;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", pdev->id);
 
        pdata = (struct gianfar_mdio_data *)pdev->dev.platform_data;
 
index 489c7c3b90d9090994e87e2a401246e9caacfa25..d513bb8a490210c3dbaac6bfcdcd2d69b77b09de 100644 (file)
@@ -246,7 +246,7 @@ static int macb_mii_init(struct macb *bp)
        bp->mii_bus.read = &macb_mdio_read;
        bp->mii_bus.write = &macb_mdio_write;
        bp->mii_bus.reset = &macb_mdio_reset;
-       bp->mii_bus.id = bp->pdev->id;
+       snprintf(bp->mii_bus.id, MII_BUS_ID_SIZE, "%x", bp->pdev->id);
        bp->mii_bus.priv = bp;
        bp->mii_bus.dev = &bp->dev->dev;
        pdata = bp->pdev->dev.platform_data;
index 2e39e0285d8f9d2a6a9712ce33249749ede49377..bcd7f9814ed825a6699cfe8e6b7f509218dc48ae 100644 (file)
@@ -1012,7 +1012,7 @@ static int pasemi_mac_phy_init(struct net_device *dev)
                goto err;
 
        phy_id = *prop;
-       snprintf(mac->phy_id, BUS_ID_SIZE, PHY_ID_FMT, (int)r.start, phy_id);
+       snprintf(mac->phy_id, BUS_ID_SIZE, "%x:%02x", (int)r.start, phy_id);
 
        of_node_put(phy_dn);
 
index ca9b040f9ad98015520e4b22b29e3178b12043f9..4e07956a483b60f62050cfd6c83dfaea5f6eaa9c 100644 (file)
@@ -213,7 +213,7 @@ static int __init fixed_mdio_bus_init(void)
                goto err_pdev;
        }
 
-       fmb->mii_bus.id = 0;
+       snprintf(fmb->mii_bus.id, MII_BUS_ID_SIZE, "0");
        fmb->mii_bus.name = "Fixed MDIO Bus";
        fmb->mii_bus.dev = &pdev->dev;
        fmb->mii_bus.read = &fixed_mdio_read;
index 7b53d658e33712fa65d11e4932e260a6a8c3beca..888b7dec98663ae0bf4c66d480da3f11cd50495e 100644 (file)
@@ -2374,7 +2374,7 @@ static int sbmac_init(struct platform_device *pldev, long long base)
               dev->name, base, print_mac(mac, eaddr));
 
        sc->mii_bus.name = sbmac_mdio_string;
-       sc->mii_bus.id = idx;
+       snprintf(sc->mii_bus.id, MII_BUS_ID_SIZE, "%x", idx);
        sc->mii_bus.priv = sc;
        sc->mii_bus.read = sbmac_mii_read;
        sc->mii_bus.write = sbmac_mii_write;
index 0ee4c168e4c0ce00596a74599c5d8f408b386e67..29a4d650e8a8efcc1057ebad77746928a5f08157 100644 (file)
@@ -3954,7 +3954,7 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma
                if (err)
                        return -1;
 
-               ug_info->mdio_bus = res.start;
+               snprintf(ug_info->mdio_bus, MII_BUS_ID_SIZE, "%x", res.start);
        }
 
        /* get the phy interface type, or default to MII */
index 4fb95b3af948f940026f957a526bfc08cac948dd..9f8b7580a3a4578ddf6ed205279ccd7ecf1f5b4e 100644 (file)
@@ -1156,7 +1156,7 @@ struct ucc_geth_info {
        u16 pausePeriod;
        u16 extensionField;
        u8 phy_address;
-       u32 mdio_bus;
+       char mdio_bus[MII_BUS_ID_SIZE];
        u8 weightfactor[NUM_TX_QUEUES];
        u8 interruptcoalescingmaxvalue[NUM_RX_QUEUES];
        u8 l2qt[UCC_GETH_VLAN_PRIORITY_MAX];
index c69e654d539fcaae8df42cd7065af9e857c8d292..e4d3f330bac341941023a7131bb2c0e39dc86f24 100644 (file)
@@ -157,7 +157,7 @@ static int uec_mdio_probe(struct of_device *ofdev, const struct of_device_id *ma
        if (err)
                goto reg_map_fail;
 
-       new_bus->id = res.start;
+       snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", res.start);
 
        new_bus->irq = kmalloc(32 * sizeof(int), GFP_KERNEL);
 
index 1831b196c70a9fe452fb37d605f8a8142b75e42d..2cad5c67397e661766aaf10c0e77aacc7a8bac5b 100644 (file)
@@ -50,7 +50,7 @@ struct gianfar_platform_data {
        u32     device_flags;
        /* board specific information */
        u32     board_flags;
-       u32     bus_id;
+       char    bus_id[MII_BUS_ID_SIZE];
        u32     phy_id;
        u8      mac_addr[6];
        phy_interface_t interface;
index 5e43ae7514122af688dc4679c04dd927856cb58b..6509f377bb10c013c80a98df8453a3f694fed52f 100644 (file)
@@ -63,8 +63,6 @@ typedef enum {
        PHY_INTERFACE_MODE_RTBI
 } phy_interface_t;
 
-#define MII_BUS_MAX 4
-
 
 #define PHY_INIT_TIMEOUT       100000
 #define PHY_STATE_TIME         1
@@ -74,13 +72,19 @@ typedef enum {
 #define PHY_MAX_ADDR   32
 
 /* Used when trying to connect to a specific phy (mii bus id:phy device id) */
-#define PHY_ID_FMT "%x:%02x"
+#define PHY_ID_FMT "%s:%02x"
+
+/*
+ * Need to be a little smaller than phydev->dev.bus_id to leave room
+ * for the ":%02x"
+ */
+#define MII_BUS_ID_SIZE        (BUS_ID_SIZE - 3)
 
 /* The Bus class for PHYs.  Devices which provide access to
  * PHYs should register using this structure */
 struct mii_bus {
        const char *name;
-       int id;
+       char id[MII_BUS_ID_SIZE];
        void *priv;
        int (*read)(struct mii_bus *bus, int phy_id, int regnum);
        int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val);