[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AANLkTilzHA_URoZONtMf6A9-IRV4wA2ncr0b8Jff1ge9@mail.gmail.com>
Date: Tue, 22 Jun 2010 23:57:56 +0900
From: Mike McCormack <mikem@...g3k.org>
To: Brandon Philips <brandon@...p.org>
Cc: Stephen Hemminger <shemminger@...ux-foundation.org>,
netdev@...r.kernel.org, davem@...emloft.net
Subject: Re: [PATCH] sky2: enable rx/tx in sky2_phy_reinit()
Tested, and verified that it fixes the bug reported.
Tested-by: Mike McCormack <mikem@...g3k.org>
On 17 June 2010 11:21, Brandon Philips <brandon@...p.org> wrote:
> 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@...e.de>
> Tested-by: Brandon Philips <bphilips@...e.de>
> Cc: stable@...nel.org
>
> ---
> 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 2111c7b..7985165 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);
>
> --
> 1.7.1
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists