Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -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);