Commit fe59de38 authored by Alexander Duyck's avatar Alexander Duyck Committed by Jeff Garzik

igb: ethtool -d reads EICR which is incorrect as it is read on clear

Ethtool -d is reading the EICR and ICR registers which is currently
clearing these registers and masking off interrupts.  To prevent this we
read the EICS and ICS equivilents as they can be read without clearing or
masking.
Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 7a6ea550
...@@ -373,13 +373,17 @@ static void igb_get_regs(struct net_device *netdev, ...@@ -373,13 +373,17 @@ static void igb_get_regs(struct net_device *netdev,
regs_buff[12] = rd32(E1000_EECD); regs_buff[12] = rd32(E1000_EECD);
/* Interrupt */ /* Interrupt */
regs_buff[13] = rd32(E1000_EICR); /* Reading EICS for EICR because they read the
* same but EICS does not clear on read */
regs_buff[13] = rd32(E1000_EICS);
regs_buff[14] = rd32(E1000_EICS); regs_buff[14] = rd32(E1000_EICS);
regs_buff[15] = rd32(E1000_EIMS); regs_buff[15] = rd32(E1000_EIMS);
regs_buff[16] = rd32(E1000_EIMC); regs_buff[16] = rd32(E1000_EIMC);
regs_buff[17] = rd32(E1000_EIAC); regs_buff[17] = rd32(E1000_EIAC);
regs_buff[18] = rd32(E1000_EIAM); regs_buff[18] = rd32(E1000_EIAM);
regs_buff[19] = rd32(E1000_ICR); /* Reading ICS for ICR because they read the
* same but ICS does not clear on read */
regs_buff[19] = rd32(E1000_ICS);
regs_buff[20] = rd32(E1000_ICS); regs_buff[20] = rd32(E1000_ICS);
regs_buff[21] = rd32(E1000_IMS); regs_buff[21] = rd32(E1000_IMS);
regs_buff[22] = rd32(E1000_IMC); regs_buff[22] = rd32(E1000_IMC);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment