Skip to content

Commit

Permalink
cxgb: set phy's mdio dev before the phy init sequence
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Divy Le Ray authored and David S. Miller committed May 21, 2009
1 parent 86c890a commit 703ceba
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 11 deletions.
6 changes: 4 additions & 2 deletions drivers/net/chelsio/cphy.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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);

/*
Expand Down
5 changes: 3 additions & 2 deletions drivers/net/chelsio/mv88e1xxx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) &&
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/chelsio/mv88x201x.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/chelsio/my3126.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,15 +167,15 @@ 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);

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;

Expand Down
5 changes: 2 additions & 3 deletions drivers/net/chelsio/subr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 703ceba

Please sign in to comment.