|
@@ -2740,13 +2740,19 @@ out:
|
|
|
static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
|
|
|
u16 *san_mac_offset)
|
|
|
{
|
|
|
+ s32 ret_val;
|
|
|
+
|
|
|
/*
|
|
|
* First read the EEPROM pointer to see if the MAC addresses are
|
|
|
* available.
|
|
|
*/
|
|
|
- hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR, san_mac_offset);
|
|
|
+ ret_val = hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR,
|
|
|
+ san_mac_offset);
|
|
|
+ if (ret_val)
|
|
|
+ hw_err(hw, "eeprom read at offset %d failed\n",
|
|
|
+ IXGBE_SAN_MAC_ADDR_PTR);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret_val;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2763,23 +2769,16 @@ s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
|
|
|
{
|
|
|
u16 san_mac_data, san_mac_offset;
|
|
|
u8 i;
|
|
|
+ s32 ret_val;
|
|
|
|
|
|
/*
|
|
|
* First read the EEPROM pointer to see if the MAC addresses are
|
|
|
* available. If they're not, no point in calling set_lan_id() here.
|
|
|
*/
|
|
|
- ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
|
|
|
+ ret_val = ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
|
|
|
+ if (ret_val || san_mac_offset == 0 || san_mac_offset == 0xFFFF)
|
|
|
|
|
|
- if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
|
|
|
- /*
|
|
|
- * No addresses available in this EEPROM. It's not an
|
|
|
- * error though, so just wipe the local address and return.
|
|
|
- */
|
|
|
- for (i = 0; i < 6; i++)
|
|
|
- san_mac_addr[i] = 0xFF;
|
|
|
-
|
|
|
- goto san_mac_addr_out;
|
|
|
- }
|
|
|
+ goto san_mac_addr_clr;
|
|
|
|
|
|
/* make sure we know which port we need to program */
|
|
|
hw->mac.ops.set_lan_id(hw);
|
|
@@ -2787,14 +2786,26 @@ s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
|
|
|
(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
|
|
|
(san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
- hw->eeprom.ops.read(hw, san_mac_offset, &san_mac_data);
|
|
|
+ ret_val = hw->eeprom.ops.read(hw, san_mac_offset,
|
|
|
+ &san_mac_data);
|
|
|
+ if (ret_val) {
|
|
|
+ hw_err(hw, "eeprom read at offset %d failed\n",
|
|
|
+ san_mac_offset);
|
|
|
+ goto san_mac_addr_clr;
|
|
|
+ }
|
|
|
san_mac_addr[i * 2] = (u8)(san_mac_data);
|
|
|
san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
|
|
|
san_mac_offset++;
|
|
|
}
|
|
|
-
|
|
|
-san_mac_addr_out:
|
|
|
return 0;
|
|
|
+
|
|
|
+san_mac_addr_clr:
|
|
|
+ /* No addresses available in this EEPROM. It's not necessarily an
|
|
|
+ * error though, so just wipe the local address and return.
|
|
|
+ */
|
|
|
+ for (i = 0; i < 6; i++)
|
|
|
+ san_mac_addr[i] = 0xFF;
|
|
|
+ return ret_val;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -3243,8 +3254,9 @@ s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
|
|
*wwpn_prefix = 0xFFFF;
|
|
|
|
|
|
/* check if alternative SAN MAC is supported */
|
|
|
- hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
|
|
|
- &alt_san_mac_blk_offset);
|
|
|
+ offset = IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR;
|
|
|
+ if (hw->eeprom.ops.read(hw, offset, &alt_san_mac_blk_offset))
|
|
|
+ goto wwn_prefix_err;
|
|
|
|
|
|
if ((alt_san_mac_blk_offset == 0) ||
|
|
|
(alt_san_mac_blk_offset == 0xFFFF))
|
|
@@ -3252,19 +3264,26 @@ s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
|
|
|
|
|
|
/* check capability in alternative san mac address block */
|
|
|
offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
|
|
|
- hw->eeprom.ops.read(hw, offset, &caps);
|
|
|
+ if (hw->eeprom.ops.read(hw, offset, &caps))
|
|
|
+ goto wwn_prefix_err;
|
|
|
if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
|
|
|
goto wwn_prefix_out;
|
|
|
|
|
|
/* get the corresponding prefix for WWNN/WWPN */
|
|
|
offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
|
|
|
- hw->eeprom.ops.read(hw, offset, wwnn_prefix);
|
|
|
+ if (hw->eeprom.ops.read(hw, offset, wwnn_prefix))
|
|
|
+ hw_err(hw, "eeprom read at offset %d failed\n", offset);
|
|
|
|
|
|
offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
|
|
|
- hw->eeprom.ops.read(hw, offset, wwpn_prefix);
|
|
|
+ if (hw->eeprom.ops.read(hw, offset, wwpn_prefix))
|
|
|
+ goto wwn_prefix_err;
|
|
|
|
|
|
wwn_prefix_out:
|
|
|
return 0;
|
|
|
+
|
|
|
+wwn_prefix_err:
|
|
|
+ hw_err(hw, "eeprom read at offset %d failed\n", offset);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -3778,7 +3797,11 @@ s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw)
|
|
|
u8 sensor_index;
|
|
|
u8 sensor_location;
|
|
|
|
|
|
- hw->eeprom.ops.read(hw, (ets_offset + 1 + i), &ets_sensor);
|
|
|
+ if (hw->eeprom.ops.read(hw, ets_offset + 1 + i, &ets_sensor)) {
|
|
|
+ hw_err(hw, "eeprom read at offset %d failed\n",
|
|
|
+ ets_offset + 1 + i);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
sensor_index = ((ets_sensor & IXGBE_ETS_DATA_INDEX_MASK) >>
|
|
|
IXGBE_ETS_DATA_INDEX_SHIFT);
|
|
|
sensor_location = ((ets_sensor & IXGBE_ETS_DATA_LOC_MASK) >>
|