Commit 78e4689e authored by Divy Le Ray's avatar Divy Le Ray Committed by David S. Miller

cxgb3: allow for PHY reset status

First step towards overall PHY layering re-organization.
Allow a status return when a PHY is reset.
Signed-off-by: default avatarDivy Le Ray <divy@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8c263761
...@@ -119,11 +119,12 @@ static struct cphy_ops ael1002_ops = { ...@@ -119,11 +119,12 @@ static struct cphy_ops ael1002_ops = {
.power_down = ael1002_power_down, .power_down = ael1002_power_down,
}; };
void t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops) int phy_addr, const struct mdio_ops *mdio_ops)
{ {
cphy_init(phy, adapter, phy_addr, &ael1002_ops, mdio_ops); cphy_init(phy, adapter, phy_addr, &ael1002_ops, mdio_ops);
ael100x_txon(phy); ael100x_txon(phy);
return 0;
} }
static int ael1006_reset(struct cphy *phy, int wait) static int ael1006_reset(struct cphy *phy, int wait)
...@@ -174,11 +175,12 @@ static struct cphy_ops ael1006_ops = { ...@@ -174,11 +175,12 @@ static struct cphy_ops ael1006_ops = {
.power_down = ael1006_power_down, .power_down = ael1006_power_down,
}; };
void t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops) int phy_addr, const struct mdio_ops *mdio_ops)
{ {
cphy_init(phy, adapter, phy_addr, &ael1006_ops, mdio_ops); cphy_init(phy, adapter, phy_addr, &ael1006_ops, mdio_ops);
ael100x_txon(phy); ael100x_txon(phy);
return 0;
} }
static struct cphy_ops qt2045_ops = { static struct cphy_ops qt2045_ops = {
...@@ -191,8 +193,8 @@ static struct cphy_ops qt2045_ops = { ...@@ -191,8 +193,8 @@ static struct cphy_ops qt2045_ops = {
.power_down = ael1006_power_down, .power_down = ael1006_power_down,
}; };
void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops) int phy_addr, const struct mdio_ops *mdio_ops)
{ {
unsigned int stat; unsigned int stat;
...@@ -205,6 +207,7 @@ void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, ...@@ -205,6 +207,7 @@ void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter,
if (!phy_addr && !mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMSR, &stat) && if (!phy_addr && !mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMSR, &stat) &&
stat == 0xffff) stat == 0xffff)
phy->addr = 1; phy->addr = 1;
return 0;
} }
static int xaui_direct_reset(struct cphy *phy, int wait) static int xaui_direct_reset(struct cphy *phy, int wait)
...@@ -250,8 +253,9 @@ static struct cphy_ops xaui_direct_ops = { ...@@ -250,8 +253,9 @@ static struct cphy_ops xaui_direct_ops = {
.power_down = xaui_direct_power_down, .power_down = xaui_direct_power_down,
}; };
void t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops) int phy_addr, const struct mdio_ops *mdio_ops)
{ {
cphy_init(phy, adapter, phy_addr, &xaui_direct_ops, mdio_ops); cphy_init(phy, adapter, phy_addr, &xaui_direct_ops, mdio_ops);
return 0;
} }
...@@ -203,8 +203,8 @@ struct adapter_info { ...@@ -203,8 +203,8 @@ struct adapter_info {
}; };
struct port_type_info { struct port_type_info {
void (*phy_prep)(struct cphy *phy, struct adapter *adapter, int (*phy_prep)(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *ops); int phy_addr, const struct mdio_ops *ops);
unsigned int caps; unsigned int caps;
const char *desc; const char *desc;
}; };
...@@ -776,14 +776,14 @@ int t3_sge_read_rspq(struct adapter *adapter, unsigned int id, u32 data[4]); ...@@ -776,14 +776,14 @@ int t3_sge_read_rspq(struct adapter *adapter, unsigned int id, u32 data[4]);
int t3_sge_cqcntxt_op(struct adapter *adapter, unsigned int id, unsigned int op, int t3_sge_cqcntxt_op(struct adapter *adapter, unsigned int id, unsigned int op,
unsigned int credits); unsigned int credits);
void t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops); int phy_addr, const struct mdio_ops *mdio_ops);
void t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops); int phy_addr, const struct mdio_ops *mdio_ops);
void t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops); int phy_addr, const struct mdio_ops *mdio_ops);
void t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr, int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr,
const struct mdio_ops *mdio_ops); const struct mdio_ops *mdio_ops);
void t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops); int phy_addr, const struct mdio_ops *mdio_ops);
#endif /* __CHELSIO_COMMON_H */ #endif /* __CHELSIO_COMMON_H */
...@@ -3626,8 +3626,11 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, ...@@ -3626,8 +3626,11 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai,
++j; ++j;
p->port_type = &port_types[adapter->params.vpd.port_type[j]]; p->port_type = &port_types[adapter->params.vpd.port_type[j]];
p->port_type->phy_prep(&p->phy, adapter, ai->phy_base_addr + j, ret = p->port_type->phy_prep(&p->phy, adapter,
ai->mdio_ops); ai->phy_base_addr + j,
ai->mdio_ops);
if (ret)
return ret;
mac_prep(&p->mac, adapter, j); mac_prep(&p->mac, adapter, j);
++j; ++j;
...@@ -3674,9 +3677,11 @@ int t3_replay_prep_adapter(struct adapter *adapter) ...@@ -3674,9 +3677,11 @@ int t3_replay_prep_adapter(struct adapter *adapter)
while (!adapter->params.vpd.port_type[j]) while (!adapter->params.vpd.port_type[j])
++j; ++j;
p->port_type->phy_prep(&p->phy, adapter, ai->phy_base_addr + j, ret = p->port_type->phy_prep(&p->phy, adapter,
ai->mdio_ops); ai->phy_base_addr + j,
ai->mdio_ops);
if (ret)
return ret;
p->phy.ops->power_down(&p->phy, 1); p->phy.ops->power_down(&p->phy, 1);
++j; ++j;
} }
......
...@@ -221,8 +221,9 @@ static struct cphy_ops vsc8211_ops = { ...@@ -221,8 +221,9 @@ static struct cphy_ops vsc8211_ops = {
.power_down = vsc8211_power_down, .power_down = vsc8211_power_down,
}; };
void t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter, int t3_vsc8211_phy_prep(struct cphy *phy, struct adapter *adapter,
int phy_addr, const struct mdio_ops *mdio_ops) int phy_addr, const struct mdio_ops *mdio_ops)
{ {
cphy_init(phy, adapter, phy_addr, &vsc8211_ops, mdio_ops); cphy_init(phy, adapter, phy_addr, &vsc8211_ops, mdio_ops);
return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment