mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
sky2: enable rx/tx in sky2_phy_reinit()
commit 38000a94a9 upstream.
sky2_phy_reinit is called by the ethtool helpers sky2_set_settings,
sky2_nway_reset and sky2_set_pauseparam when netif_running.
However, at the end of sky2_phy_init GM_GP_CTRL has GM_GPCR_RX_ENA and
GM_GPCR_TX_ENA cleared. So, doing these commands causes the device to
stop working:
$ ethtool -r eth0
$ ethtool -A eth0 autoneg off
Fix this issue by enabling Rx/Tx after running sky2_phy_init in
sky2_phy_reinit.
Signed-off-by: Brandon Philips <bphilips@suse.de>
Tested-by: Brandon Philips <bphilips@suse.de>
Cc: stable@kernel.org
Tested-by: Mike McCormack <mikem@ring3k.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
19a7aff8e0
commit
da07bf0fcc
|
|
@ -704,11 +704,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);
|
||||
}
|
||||
|
||||
|
|
@ -1929,7 +1942,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",
|
||||
|
|
@ -1937,10 +1949,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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user