Patchwork [v3,1/2] e1000e: Only disable ASPM on 82573L devices

login
register
mail settings
Submitter Matthew Garrett
Date Feb. 11, 2010, 6:14 p.m.
Message ID <1265912094-4705-1-git-send-email-mjg@redhat.com>
Download mbox | patch
Permalink /patch/45141/
State Awaiting Upstream
Delegated to: David Miller
Headers show

Comments

Matthew Garrett - Feb. 11, 2010, 6:14 p.m.
The 82537 errata and comment in e1000e_disable_l1aspm both agree that
only 82537L devices are affected. Limit the L1 disable to them.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
---
 drivers/net/e1000e/netdev.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
Allan, Bruce W - Feb. 19, 2010, 9:53 p.m.
On Thursday, February 11, 2010 10:15 AM, Matthew Garrett wrote:
> The 82537 errata and comment in e1000e_disable_l1aspm both agree that
> only 82537L devices are affected. Limit the L1 disable to them.
> 
> Signed-off-by: Matthew Garrett <mjg@redhat.com>
> ---
>  drivers/net/e1000e/netdev.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
> index 57f149b..27eed81 100644
> --- a/drivers/net/e1000e/netdev.c
> +++ b/drivers/net/e1000e/netdev.c
> @@ -4642,6 +4642,10 @@ static void e1000e_disable_l1aspm(struct
> pci_dev *pdev) 
>  	 * Unfortunately this feature saves about 1W power consumption when
>  	 * active.
>  	 */
> +
> +	if (pdev->device != E1000_DEV_ID_82573L)
> +		return;
> +
>  	pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
>  	pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &val);
>  	if (val & 0x2) {

Hi Matthew,

Exactly which erratum are you referring to?  Erratum 17 in the 82573 Specification Update?  If that is the case, I see the possibility of another interpretation of the erratum which suggests the possibility of the same issue on other variants of the 82573 when using standard frame sizes and ASPM enabled.  Not to mention, I believe there may be other parts (82574 perhaps) that will have issues with L1 ASPM enabled.  I will follow-up with the folks who did the investigation that resulted in the erratum in order to get a clearer picture of all this, and take a look into other parts that may likewise be affected.

Thanks,
Bruce.--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Matthew Garrett - Feb. 19, 2010, 10:03 p.m.
On Fri, Feb 19, 2010 at 01:53:01PM -0800, Allan, Bruce W wrote:

> Exactly which erratum are you referring to?  Erratum 17 in the 82573 
> Specification Update?  If that is the case, I see the possibility of 
> another interpretation of the erratum which suggests the possibility 
> of the same issue on other variants of the 82573 when using standard 
> frame sizes and ASPM enabled.  Not to mention, I believe there may be 
> other parts (82574 perhaps) that will have issues with L1 ASPM 
> enabled.  I will follow-up with the folks who did the investigation 
> that resulted in the erratum in order to get a clearer picture of all 
> this, and take a look into other parts that may likewise be affected.

Ah, yes - I see that it could be interpreted that way. The description 
seems to suggest that it's only relevant if ERT is enabled, which is 
required for jumbo frames. I'm not entirely clear on whether ERT is 
enabled in other circumstances? If not, we ought to be able to limit 
this to the L device - if not, it should be done on E and V as well.

The 82574 specification update doesn't mention any ASPM errata, but if 
you're able to check then that would be great. My main aim here is to 
try to get it turned back on on hardware where this works, since it's a 
measurable power saving.

Patch

diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 57f149b..27eed81 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -4642,6 +4642,10 @@  static void e1000e_disable_l1aspm(struct pci_dev *pdev)
 	 * Unfortunately this feature saves about 1W power consumption when
 	 * active.
 	 */
+
+	if (pdev->device != E1000_DEV_ID_82573L)
+		return;
+
 	pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
 	pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &val);
 	if (val & 0x2) {