aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarolyn Wyborny <carolyn.wyborny@intel.com>2012-10-10 22:15:45 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-12-01 05:41:39 -0500
commit1720ee3e4054eff175743820ceba16ecfe97943a (patch)
tree95348eb5ffc20846aa6bd5cc65087e404ba332f1
parent3288d735781f8873775e5d2e5d33507119f79cca (diff)
igb: Updates to read nvm function for i211 device
The i211 has an integrated secure space to store configuration information that is usually stored in an EEPROM or flash type device. This patch updates the read functions to return values or appropriate error codes to prevent unnecessary init failures on some configuration schemes. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_i210.c32
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_i210.h6
2 files changed, 34 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/igb/e1000_i210.c b/drivers/net/ethernet/intel/igb/e1000_i210.c
index 41474298d365..239650e5e545 100644
--- a/drivers/net/ethernet/intel/igb/e1000_i210.c
+++ b/drivers/net/ethernet/intel/igb/e1000_i210.c
@@ -350,16 +350,40 @@ s32 igb_read_nvm_i211(struct e1000_hw *hw, u16 offset, u16 words,
350 if (ret_val != E1000_SUCCESS) 350 if (ret_val != E1000_SUCCESS)
351 hw_dbg("MAC Addr not found in iNVM\n"); 351 hw_dbg("MAC Addr not found in iNVM\n");
352 break; 352 break;
353 case NVM_ID_LED_SETTINGS:
354 case NVM_INIT_CTRL_2: 353 case NVM_INIT_CTRL_2:
354 ret_val = igb_read_invm_i211(hw, (u8)offset, data);
355 if (ret_val != E1000_SUCCESS) {
356 *data = NVM_INIT_CTRL_2_DEFAULT_I211;
357 ret_val = E1000_SUCCESS;
358 }
359 break;
355 case NVM_INIT_CTRL_4: 360 case NVM_INIT_CTRL_4:
361 ret_val = igb_read_invm_i211(hw, (u8)offset, data);
362 if (ret_val != E1000_SUCCESS) {
363 *data = NVM_INIT_CTRL_4_DEFAULT_I211;
364 ret_val = E1000_SUCCESS;
365 }
366 break;
356 case NVM_LED_1_CFG: 367 case NVM_LED_1_CFG:
368 ret_val = igb_read_invm_i211(hw, (u8)offset, data);
369 if (ret_val != E1000_SUCCESS) {
370 *data = NVM_LED_1_CFG_DEFAULT_I211;
371 ret_val = E1000_SUCCESS;
372 }
373 break;
357 case NVM_LED_0_2_CFG: 374 case NVM_LED_0_2_CFG:
358 igb_read_invm_i211(hw, offset, data); 375 igb_read_invm_i211(hw, offset, data);
376 if (ret_val != E1000_SUCCESS) {
377 *data = NVM_LED_0_2_CFG_DEFAULT_I211;
378 ret_val = E1000_SUCCESS;
379 }
359 break; 380 break;
360 case NVM_COMPAT: 381 case NVM_ID_LED_SETTINGS:
361 *data = ID_LED_DEFAULT_I210; 382 ret_val = igb_read_invm_i211(hw, (u8)offset, data);
362 break; 383 if (ret_val != E1000_SUCCESS) {
384 *data = ID_LED_RESERVED_FFFF;
385 ret_val = E1000_SUCCESS;
386 }
363 case NVM_SUB_DEV_ID: 387 case NVM_SUB_DEV_ID:
364 *data = hw->subsystem_device_id; 388 *data = hw->subsystem_device_id;
365 break; 389 break;
diff --git a/drivers/net/ethernet/intel/igb/e1000_i210.h b/drivers/net/ethernet/intel/igb/e1000_i210.h
index 974d23584d70..1c89358a99ab 100644
--- a/drivers/net/ethernet/intel/igb/e1000_i210.h
+++ b/drivers/net/ethernet/intel/igb/e1000_i210.h
@@ -84,4 +84,10 @@ enum E1000_INVM_STRUCTURE_TYPE {
84 (ID_LED_DEF1_DEF2 << 4) | \ 84 (ID_LED_DEF1_DEF2 << 4) | \
85 (ID_LED_DEF1_DEF2)) 85 (ID_LED_DEF1_DEF2))
86 86
87/* NVM offset defaults for i211 device */
88#define NVM_INIT_CTRL_2_DEFAULT_I211 0X7243
89#define NVM_INIT_CTRL_4_DEFAULT_I211 0x00C1
90#define NVM_LED_1_CFG_DEFAULT_I211 0x0184
91#define NVM_LED_0_2_CFG_DEFAULT_I211 0x200C
92
87#endif 93#endif