diff options
Diffstat (limited to 'drivers/net/sky2.c')
| -rw-r--r-- | drivers/net/sky2.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 2111c7bbf57..7985165e84f 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -717,11 +717,24 @@ static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port)  	sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);  } +/* Enable Rx/Tx */ +static void sky2_enable_rx_tx(struct sky2_port *sky2) +{ +	struct sky2_hw *hw = sky2->hw; +	unsigned port = sky2->port; +	u16 reg; + +	reg = gma_read16(hw, port, GM_GP_CTRL); +	reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; +	gma_write16(hw, port, GM_GP_CTRL, reg); +} +  /* Force a renegotiation */  static void sky2_phy_reinit(struct sky2_port *sky2)  {  	spin_lock_bh(&sky2->phy_lock);  	sky2_phy_init(sky2->hw, sky2->port); +	sky2_enable_rx_tx(sky2);  	spin_unlock_bh(&sky2->phy_lock);  } @@ -2040,7 +2053,6 @@ static void sky2_link_up(struct sky2_port *sky2)  {  	struct sky2_hw *hw = sky2->hw;  	unsigned port = sky2->port; -	u16 reg;  	static const char *fc_name[] = {  		[FC_NONE]	= "none",  		[FC_TX]		= "tx", @@ -2048,10 +2060,7 @@ static void sky2_link_up(struct sky2_port *sky2)  		[FC_BOTH]	= "both",  	}; -	/* enable Rx/Tx */ -	reg = gma_read16(hw, port, GM_GP_CTRL); -	reg |= GM_GPCR_RX_ENA | GM_GPCR_TX_ENA; -	gma_write16(hw, port, GM_GP_CTRL, reg); +	sky2_enable_rx_tx(sky2);  	gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);  |