diff mbox

[precise,sru] UBUNTU: SAUCE: add eeprom_bad_csum_allow module parameter

Message ID 50C8F2B8.9020007@canonical.com
State New
Headers show

Commit Message

Chris J Arges Dec. 12, 2012, 9:10 p.m. UTC
BugLink: http://bugs.launchpad.net/bugs/1070182

This patch adds the eeprom_bad_csum_allow module parameter for the
e1000 and e1000e drivers. This allows users of affected hardware
to bypass EEPROM/NVM checksum validation.
Based on a patch by Ben Collins <bcollins@ubuntu.com>

This parameter was already present in the e100 driver already, this
SAUCE patch just adds this functionality for the e1000 and e1000e
drivers. This fixes cases where NVM checksum validation fails, yet the
hardware still functions correctly if we skip this. This patch has
already been verified in the bug.

Comments

Leann Ogasawara Dec. 12, 2012, 9:31 p.m. UTC | #1
Acked-by: Leann Ogasawara <leann.ogasawara@canonical.com>

On 12/12/2012 01:10 PM, Chris J Arges wrote:
> BugLink: http://bugs.launchpad.net/bugs/1070182
>
> This patch adds the eeprom_bad_csum_allow module parameter for the
> e1000 and e1000e drivers. This allows users of affected hardware
> to bypass EEPROM/NVM checksum validation.
> Based on a patch by Ben Collins <bcollins@ubuntu.com>
>
> This parameter was already present in the e100 driver already, this
> SAUCE patch just adds this functionality for the e1000 and e1000e
> drivers. This fixes cases where NVM checksum validation fails, yet the
> hardware still functions correctly if we skip this. This patch has
> already been verified in the bug.
>
>
>
Brad Figg Dec. 12, 2012, 9:40 p.m. UTC | #2
On 12/12/2012 01:10 PM, Chris J Arges wrote:
> BugLink: http://bugs.launchpad.net/bugs/1070182
> 
> This patch adds the eeprom_bad_csum_allow module parameter for the
> e1000 and e1000e drivers. This allows users of affected hardware
> to bypass EEPROM/NVM checksum validation.
> Based on a patch by Ben Collins <bcollins@ubuntu.com>
> 
> This parameter was already present in the e100 driver already, this
> SAUCE patch just adds this functionality for the e1000 and e1000e
> drivers. This fixes cases where NVM checksum validation fails, yet the
> hardware still functions correctly if we skip this. This patch has
> already been verified in the bug.
> 
> 
>
Leann Ogasawara Dec. 13, 2012, 2:11 p.m. UTC | #3
Applied to Precise master-next.

Thanks,
Leann

On 12/12/2012 01:10 PM, Chris J Arges wrote:
> BugLink: http://bugs.launchpad.net/bugs/1070182
>
> This patch adds the eeprom_bad_csum_allow module parameter for the
> e1000 and e1000e drivers. This allows users of affected hardware
> to bypass EEPROM/NVM checksum validation.
> Based on a patch by Ben Collins <bcollins@ubuntu.com>
>
> This parameter was already present in the e100 driver already, this
> SAUCE patch just adds this functionality for the e1000 and e1000e
> drivers. This fixes cases where NVM checksum validation fails, yet the
> hardware still functions correctly if we skip this. This patch has
> already been verified in the bug.
>
>
>
diff mbox

Patch

From 8a6088b679baf89f94039df648d1fdfc6a068206 Mon Sep 17 00:00:00 2001
From: Chris J Arges <chris.j.arges@canonical.com>
Date: Fri, 30 Nov 2012 13:29:01 -0600
Subject: [PATCH] UBUNTU: SAUCE: add eeprom_bad_csum_allow module parameter

BugLink: http://bugs.launchpad.net/bugs/1070182

This patch adds the eeprom_bad_csum_allow module parameter for the
e1000 and e1000e drivers. This allows users of affected hardware
to bypass EEPROM/NVM checksum validation.
Based on a patch by Ben Collins <bcollins@ubuntu.com>

Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
---
 drivers/net/ethernet/intel/e1000/e1000_main.c |    8 ++++++--
 drivers/net/ethernet/intel/e1000e/netdev.c    |   14 ++++++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 6546191..6e088d1 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -191,6 +191,10 @@  module_param(copybreak, uint, 0644);
 MODULE_PARM_DESC(copybreak,
 	"Maximum size of packet that is copied to a new buffer on receive");
 
+static int eeprom_bad_csum_allow __read_mostly = 0;
+module_param(eeprom_bad_csum_allow, int, 0);
+MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad EEPROM checksums");
+
 static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
                      pci_channel_state_t state);
 static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev);
@@ -1104,8 +1108,8 @@  static int __devinit e1000_probe(struct pci_dev *pdev,
 
 	e1000_reset_hw(hw);
 
-	/* make sure the EEPROM is good */
-	if (e1000_validate_eeprom_checksum(hw) < 0) {
+	/* make sure the EEPROM is good, skip if eeprom_bad_csum_allow is 1 */
+	if ((e1000_validate_eeprom_checksum(hw) < 0) && (!eeprom_bad_csum_allow)) {
 		e_err(probe, "The EEPROM Checksum Is Not Valid\n");
 		e1000_dump_eeprom(adapter);
 		/*
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 0182649..9555c84 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -60,6 +60,10 @@ 
 char e1000e_driver_name[] = "e1000e";
 const char e1000e_driver_version[] = DRV_VERSION;
 
+static int eeprom_bad_csum_allow __read_mostly = 0;
+module_param(eeprom_bad_csum_allow, int, 0);
+MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad EEPROM checksums");
+
 static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state);
 
 static const struct e1000_info *e1000_info_tbl[] = {
@@ -6105,8 +6109,14 @@  static int __devinit e1000_probe(struct pci_dev *pdev,
 			break;
 		if (i == 2) {
 			e_err("The NVM Checksum Is Not Valid\n");
-			err = -EIO;
-			goto err_eeprom;
+
+			/* if we allow bad checksums, just break */
+			if (eeprom_bad_csum_allow) {
+				break;
+			} else {
+				err = -EIO;
+				goto err_eeprom;
+			}
 		}
 	}
 
-- 
1.7.9.5