APPLIED: [SRU][Trusty][PATCH 1/1] e1000e: Fix no connectivity when driver loaded with cable out
Luis Henriques
luis.henriques at canonical.com
Tue Jan 6 15:58:09 UTC 2015
On Wed, Dec 17, 2014 at 12:00:51PM -0500, Joseph Salisbury wrote:
> From: David Ertman <davidx.m.ertman at intel.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1400365
>
> In commit da1e2046e5, the flow for enabling/disabling an Si errata
> workaround (e1000_lv_jumbo_workaround_ich8lan) was changed to fix a problem
> with iAMT connections dropping on interface down with jumbo frames set.
> Part of this change was to move the function call disabling the workaround
> to e1000e_down() from the e1000_setup_rctl() function. The mechanic for
> disabling of this workaround involves writing several MAC and PHY registers
> back to hardware defaults.
>
> After this commit, when the driver is loaded with the cable out, the PHY
> registers are not programmed with the correct default values. This causes
> the device to be capable of transmitting packets, but is unable to recieve
> them until this workaround is called.
>
> The flow of e1000e's open code relies upon calling the above workaround to
> expicitly program these registers either with jumbo frame appropriate settings
> or h/w defaults on 82579 and newer hardware.
>
> Fix this issue by adding logic to e1000_setup_rctl() that not only calls
> e1000_lv_jumbo_workaround_ich8lan() when jumbo frames are set, to enable the
> workaround, but also calls this function to explicitly disable the workaround
> in the case that jumbo frames are not set.
>
> Signed-off-by: Dave Ertman <davidx.m.ertman at intel.com>
> Tested-by: Jeff Pieper <jeffrey.e.pieper at intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
> (cherry picked from commit b20a774495671f037e7160ea2ce8789af6b61533)
>
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
> ---
> drivers/net/ethernet/intel/e1000e/netdev.c | 20 +++++++++++++++-----
> 1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 6d14eea..a205f8d 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -2976,11 +2976,21 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
> u32 rctl, rfctl;
> u32 pages = 0;
>
> - /* Workaround Si errata on PCHx - configure jumbo frame flow */
> - if ((hw->mac.type >= e1000_pch2lan) &&
> - (adapter->netdev->mtu > ETH_DATA_LEN) &&
> - e1000_lv_jumbo_workaround_ich8lan(hw, true))
> - e_dbg("failed to enable jumbo frame workaround mode\n");
> + /* Workaround Si errata on PCHx - configure jumbo frame flow.
> + * If jumbo frames not set, program related MAC/PHY registers
> + * to h/w defaults
> + */
> + if (hw->mac.type >= e1000_pch2lan) {
> + s32 ret_val;
> +
> + if (adapter->netdev->mtu > ETH_DATA_LEN)
> + ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, true);
> + else
> + ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, false);
> +
> + if (ret_val)
> + e_dbg("failed to enable|disable jumbo frame workaround mode\n");
> + }
>
> /* Program MC offset vector base */
> rctl = er32(RCTL);
> --
> 1.7.9.5
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
Cheers,
--
Luís
More information about the kernel-team
mailing list