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

Submitted by Matthew Garrett on Feb. 11, 2010, 6:14 p.m.

Details

Message ID 1265912094-4705-1-git-send-email-mjg@redhat.com
State Awaiting Upstream
Delegated to: David Miller
Headers show

Commit Message

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(-)

Comments

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 hide | download patch | download mbox

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) {