Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+12 −8
Original line number Original line Diff line number Diff line
@@ -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 = {
	.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,7 +193,7 @@ 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,
	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 = {
	.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;
}
}
+12 −12
Original line number Original line Diff line number Diff line
@@ -203,7 +203,7 @@ 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]);
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 */
+10 −5
Original line number Original line Diff line number Diff line
@@ -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->phy_base_addr + j,
					     ai->mdio_ops);
					     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)
		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->phy_base_addr + j,
					     ai->mdio_ops);
					     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;
	}
	}
+3 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}