|
@@ -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);
|
|
|
|