cxgb: set phy's mdio dev before the phy init sequence
authorDivy Le Ray <divy@chelsio.com>
Wed, 20 May 2009 15:56:12 +0000 (15:56 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 May 2009 03:51:59 +0000 (20:51 -0700)
mdio's dev field needs to be set before mdio ops occur.

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/chelsio/cphy.h
drivers/net/chelsio/mv88e1xxx.c
drivers/net/chelsio/mv88x201x.c
drivers/net/chelsio/my3126.c
drivers/net/chelsio/subr.c

index 8b5165a5af3fbef3323ca48d3df26ecc866875d1..1f095a9fc73993432d15cb500db7bbb6b9c4695f 100644 (file)
@@ -137,10 +137,11 @@ static inline int simple_mdio_write(struct cphy *cphy, int reg,
 }
 
 /* Convenience initializer */
-static inline void cphy_init(struct cphy *phy, adapter_t *adapter,
+static inline void cphy_init(struct cphy *phy, struct net_device *dev,
                             int phy_addr, struct cphy_ops *phy_ops,
                             const struct mdio_ops *mdio_ops)
 {
+       struct adapter *adapter = netdev_priv(dev);
        phy->adapter = adapter;
        phy->ops     = phy_ops;
        if (mdio_ops) {
@@ -150,12 +151,13 @@ static inline void cphy_init(struct cphy *phy, adapter_t *adapter,
                phy->mdio.mdio_read = mdio_ops->read;
                phy->mdio.mdio_write = mdio_ops->write;
        }
+       phy->mdio.dev = dev;
 }
 
 /* Operations of the PHY-instance factory */
 struct gphy {
        /* Construct a PHY instance with the given PHY address */
-       struct cphy *(*create)(adapter_t *adapter, int phy_addr,
+       struct cphy *(*create)(struct net_device *dev, int phy_addr,
                               const struct mdio_ops *mdio_ops);
 
        /*
index 0632be0d6494310b1b11cd87cc202cb721491216..809047a99e96a983579bc7c6cf7c28ea6326fec8 100644 (file)
@@ -353,15 +353,16 @@ static struct cphy_ops mv88e1xxx_ops = {
        .get_link_status      = mv88e1xxx_get_link_status,
 };
 
-static struct cphy *mv88e1xxx_phy_create(adapter_t *adapter, int phy_addr,
+static struct cphy *mv88e1xxx_phy_create(struct net_device *dev, int phy_addr,
                                         const struct mdio_ops *mdio_ops)
 {
+       struct adapter *adapter = netdev_priv(dev);
        struct cphy *cphy = kzalloc(sizeof(*cphy), GFP_KERNEL);
 
        if (!cphy)
                return NULL;
 
-       cphy_init(cphy, adapter, phy_addr, &mv88e1xxx_ops, mdio_ops);
+       cphy_init(cphy, dev, phy_addr, &mv88e1xxx_ops, mdio_ops);
 
        /* Configure particular PHY's to run in a different mode. */
        if ((board_info(adapter)->caps & SUPPORTED_TP) &&
index d50907bf2ebde60ac84732df730941d96c9b0057..f7136b2fd1e5c946f8ee320a087cfbc872982039 100644 (file)
@@ -209,7 +209,7 @@ static struct cphy_ops mv88x201x_ops = {
                              MDIO_DEVS_PHYXS | MDIO_DEVS_WIS),
 };
 
-static struct cphy *mv88x201x_phy_create(adapter_t *adapter, int phy_addr,
+static struct cphy *mv88x201x_phy_create(struct net_device *dev, int phy_addr,
                                         const struct mdio_ops *mdio_ops)
 {
        u32 val;
@@ -218,7 +218,7 @@ static struct cphy *mv88x201x_phy_create(adapter_t *adapter, int phy_addr,
        if (!cphy)
                return NULL;
 
-       cphy_init(cphy, adapter, phy_addr, &mv88x201x_ops, mdio_ops);
+       cphy_init(cphy, dev, phy_addr, &mv88x201x_ops, mdio_ops);
 
        /* Commands the PHY to enable XFP's clock. */
        cphy_mdio_read(cphy, MDIO_MMD_PCS, 0x8300, &val);
index 977c7e08b0e0b9f304ab2b1af55cd94747c9eb6c..4c6028512d102ef937662b60382929dacb84df4d 100644 (file)
@@ -167,7 +167,7 @@ static struct cphy_ops my3126_ops = {
                                   MDIO_DEVS_PHYXS),
 };
 
-static struct cphy *my3126_phy_create(adapter_t *adapter,
+static struct cphy *my3126_phy_create(struct net_device *dev,
                        int phy_addr, const struct mdio_ops *mdio_ops)
 {
        struct cphy *cphy = kzalloc(sizeof (*cphy), GFP_KERNEL);
@@ -175,7 +175,7 @@ static struct cphy *my3126_phy_create(adapter_t *adapter,
        if (!cphy)
                return NULL;
 
-       cphy_init(cphy, adapter, phy_addr, &my3126_ops, mdio_ops);
+       cphy_init(cphy, dev, phy_addr, &my3126_ops, mdio_ops);
        INIT_DELAYED_WORK(&cphy->phy_update, my3216_poll);
        cphy->bmsr = 0;
 
index 2564312b3056c68bdbf50216c56882ed3c2da24b..17720c6e5bfe028b8a5dbfd927f52a0af6c8929b 100644 (file)
@@ -1135,14 +1135,13 @@ int __devinit t1_init_sw_modules(adapter_t *adapter,
                struct cmac *mac;
                int phy_addr = bi->mdio_phybaseaddr + i;
 
-               adapter->port[i].phy = bi->gphy->create(adapter, phy_addr,
-                                                       bi->mdio_ops);
+               adapter->port[i].phy = bi->gphy->create(adapter->port[i].dev,
+                                                       phy_addr, bi->mdio_ops);
                if (!adapter->port[i].phy) {
                        CH_ERR("%s: PHY %d initialization failed\n",
                               adapter->name, i);
                        goto error;
                }
-               adapter->port[i].phy->mdio.dev = adapter->port[i].dev;
 
                adapter->port[i].mac = mac = bi->gmac->create(adapter, i);
                if (!mac) {