aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_defines.h6
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_mac.c37
2 files changed, 32 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
index 31a0f82cc650..aa176490ddbc 100644
--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
@@ -270,8 +270,10 @@
270#define AUTONEG_ADVERTISE_SPEED_DEFAULT E1000_ALL_SPEED_DUPLEX 270#define AUTONEG_ADVERTISE_SPEED_DEFAULT E1000_ALL_SPEED_DUPLEX
271 271
272/* LED Control */ 272/* LED Control */
273#define E1000_LEDCTL_LED0_MODE_SHIFT 0 273#define E1000_LEDCTL_LED0_MODE_SHIFT 0
274#define E1000_LEDCTL_LED0_BLINK 0x00000080 274#define E1000_LEDCTL_LED0_BLINK 0x00000080
275#define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F
276#define E1000_LEDCTL_LED0_IVRT 0x00000040
275 277
276#define E1000_LEDCTL_MODE_LED_ON 0xE 278#define E1000_LEDCTL_MODE_LED_ON 0xE
277#define E1000_LEDCTL_MODE_LED_OFF 0xF 279#define E1000_LEDCTL_MODE_LED_OFF 0xF
diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.c b/drivers/net/ethernet/intel/igb/e1000_mac.c
index 2559d70a2321..660b7addfbb0 100644
--- a/drivers/net/ethernet/intel/igb/e1000_mac.c
+++ b/drivers/net/ethernet/intel/igb/e1000_mac.c
@@ -1406,15 +1406,34 @@ s32 igb_blink_led(struct e1000_hw *hw)
1406 u32 ledctl_blink = 0; 1406 u32 ledctl_blink = 0;
1407 u32 i; 1407 u32 i;
1408 1408
1409 /* set the blink bit for each LED that's "on" (0x0E) 1409 if (hw->phy.media_type == e1000_media_type_fiber) {
1410 * in ledctl_mode2 1410 /* always blink LED0 for PCI-E fiber */
1411 */ 1411 ledctl_blink = E1000_LEDCTL_LED0_BLINK |
1412 ledctl_blink = hw->mac.ledctl_mode2; 1412 (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT);
1413 for (i = 0; i < 4; i++) 1413 } else {
1414 if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) == 1414 /* Set the blink bit for each LED that's "on" (0x0E)
1415 E1000_LEDCTL_MODE_LED_ON) 1415 * (or "off" if inverted) in ledctl_mode2. The blink
1416 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK << 1416 * logic in hardware only works when mode is set to "on"
1417 (i * 8)); 1417 * so it must be changed accordingly when the mode is
1418 * "off" and inverted.
1419 */
1420 ledctl_blink = hw->mac.ledctl_mode2;
1421 for (i = 0; i < 32; i += 8) {
1422 u32 mode = (hw->mac.ledctl_mode2 >> i) &
1423 E1000_LEDCTL_LED0_MODE_MASK;
1424 u32 led_default = hw->mac.ledctl_default >> i;
1425
1426 if ((!(led_default & E1000_LEDCTL_LED0_IVRT) &&
1427 (mode == E1000_LEDCTL_MODE_LED_ON)) ||
1428 ((led_default & E1000_LEDCTL_LED0_IVRT) &&
1429 (mode == E1000_LEDCTL_MODE_LED_OFF))) {
1430 ledctl_blink &=
1431 ~(E1000_LEDCTL_LED0_MODE_MASK << i);
1432 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK |
1433 E1000_LEDCTL_MODE_LED_ON) << i;
1434 }
1435 }
1436 }
1418 1437
1419 wr32(E1000_LEDCTL, ledctl_blink); 1438 wr32(E1000_LEDCTL, ledctl_blink);
1420 1439