diff options
author | Jesse Brandeburg <jesse.brandeburg@intel.com> | 2008-09-11 22:56:41 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-09-24 18:54:52 -0400 |
commit | 98c00a1c5de23295aebe7e46a61d85e05ee82855 (patch) | |
tree | b9af2219c46e79a8c520d0e636fc4419946d0a2c /drivers/net/ixgbe/ixgbe_ethtool.c | |
parent | 42c783c5b1b755ae2ab2dec720ad58ffc2257a60 (diff) |
ixgbe: fix ethtool register dump
1) reading some of the registers in our hardware causes them to clear,
so don't read ICR in the ethtool register dump function.
2) several register iterators were not iterating
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_ethtool.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 8f0e3f93e6b1..64460b4c50ca 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
@@ -315,7 +315,9 @@ static void ixgbe_get_regs(struct net_device *netdev, | |||
315 | regs_buff[17] = IXGBE_READ_REG(hw, IXGBE_GRC); | 315 | regs_buff[17] = IXGBE_READ_REG(hw, IXGBE_GRC); |
316 | 316 | ||
317 | /* Interrupt */ | 317 | /* Interrupt */ |
318 | regs_buff[18] = IXGBE_READ_REG(hw, IXGBE_EICR); | 318 | /* don't read EICR because it can clear interrupt causes, instead |
319 | * read EICS which is a shadow but doesn't clear EICR */ | ||
320 | regs_buff[18] = IXGBE_READ_REG(hw, IXGBE_EICS); | ||
319 | regs_buff[19] = IXGBE_READ_REG(hw, IXGBE_EICS); | 321 | regs_buff[19] = IXGBE_READ_REG(hw, IXGBE_EICS); |
320 | regs_buff[20] = IXGBE_READ_REG(hw, IXGBE_EIMS); | 322 | regs_buff[20] = IXGBE_READ_REG(hw, IXGBE_EIMS); |
321 | regs_buff[21] = IXGBE_READ_REG(hw, IXGBE_EIMC); | 323 | regs_buff[21] = IXGBE_READ_REG(hw, IXGBE_EIMC); |
@@ -419,7 +421,6 @@ static void ixgbe_get_regs(struct net_device *netdev, | |||
419 | regs_buff[827] = IXGBE_READ_REG(hw, IXGBE_WUPM); | 421 | regs_buff[827] = IXGBE_READ_REG(hw, IXGBE_WUPM); |
420 | regs_buff[828] = IXGBE_READ_REG(hw, IXGBE_FHFT); | 422 | regs_buff[828] = IXGBE_READ_REG(hw, IXGBE_FHFT); |
421 | 423 | ||
422 | /* DCE */ | ||
423 | regs_buff[829] = IXGBE_READ_REG(hw, IXGBE_RMCS); | 424 | regs_buff[829] = IXGBE_READ_REG(hw, IXGBE_RMCS); |
424 | regs_buff[830] = IXGBE_READ_REG(hw, IXGBE_DPMCS); | 425 | regs_buff[830] = IXGBE_READ_REG(hw, IXGBE_DPMCS); |
425 | regs_buff[831] = IXGBE_READ_REG(hw, IXGBE_PDPMCS); | 426 | regs_buff[831] = IXGBE_READ_REG(hw, IXGBE_PDPMCS); |
@@ -539,21 +540,17 @@ static void ixgbe_get_regs(struct net_device *netdev, | |||
539 | /* Diagnostic */ | 540 | /* Diagnostic */ |
540 | regs_buff[1071] = IXGBE_READ_REG(hw, IXGBE_RDSTATCTL); | 541 | regs_buff[1071] = IXGBE_READ_REG(hw, IXGBE_RDSTATCTL); |
541 | for (i = 0; i < 8; i++) | 542 | for (i = 0; i < 8; i++) |
542 | regs_buff[1072] = IXGBE_READ_REG(hw, IXGBE_RDSTAT(i)); | 543 | regs_buff[1072 + i] = IXGBE_READ_REG(hw, IXGBE_RDSTAT(i)); |
543 | regs_buff[1080] = IXGBE_READ_REG(hw, IXGBE_RDHMPN); | 544 | regs_buff[1080] = IXGBE_READ_REG(hw, IXGBE_RDHMPN); |
544 | regs_buff[1081] = IXGBE_READ_REG(hw, IXGBE_RIC_DW0); | 545 | for (i = 0; i < 4; i++) |
545 | regs_buff[1082] = IXGBE_READ_REG(hw, IXGBE_RIC_DW1); | 546 | regs_buff[1081 + i] = IXGBE_READ_REG(hw, IXGBE_RIC_DW(i)); |
546 | regs_buff[1083] = IXGBE_READ_REG(hw, IXGBE_RIC_DW2); | ||
547 | regs_buff[1084] = IXGBE_READ_REG(hw, IXGBE_RIC_DW3); | ||
548 | regs_buff[1085] = IXGBE_READ_REG(hw, IXGBE_RDPROBE); | 547 | regs_buff[1085] = IXGBE_READ_REG(hw, IXGBE_RDPROBE); |
549 | regs_buff[1086] = IXGBE_READ_REG(hw, IXGBE_TDSTATCTL); | 548 | regs_buff[1086] = IXGBE_READ_REG(hw, IXGBE_TDSTATCTL); |
550 | for (i = 0; i < 8; i++) | 549 | for (i = 0; i < 8; i++) |
551 | regs_buff[1087] = IXGBE_READ_REG(hw, IXGBE_TDSTAT(i)); | 550 | regs_buff[1087 + i] = IXGBE_READ_REG(hw, IXGBE_TDSTAT(i)); |
552 | regs_buff[1095] = IXGBE_READ_REG(hw, IXGBE_TDHMPN); | 551 | regs_buff[1095] = IXGBE_READ_REG(hw, IXGBE_TDHMPN); |
553 | regs_buff[1096] = IXGBE_READ_REG(hw, IXGBE_TIC_DW0); | 552 | for (i = 0; i < 4; i++) |
554 | regs_buff[1097] = IXGBE_READ_REG(hw, IXGBE_TIC_DW1); | 553 | regs_buff[1096 + i] = IXGBE_READ_REG(hw, IXGBE_TIC_DW(i)); |
555 | regs_buff[1098] = IXGBE_READ_REG(hw, IXGBE_TIC_DW2); | ||
556 | regs_buff[1099] = IXGBE_READ_REG(hw, IXGBE_TIC_DW3); | ||
557 | regs_buff[1100] = IXGBE_READ_REG(hw, IXGBE_TDPROBE); | 554 | regs_buff[1100] = IXGBE_READ_REG(hw, IXGBE_TDPROBE); |
558 | regs_buff[1101] = IXGBE_READ_REG(hw, IXGBE_TXBUFCTRL); | 555 | regs_buff[1101] = IXGBE_READ_REG(hw, IXGBE_TXBUFCTRL); |
559 | regs_buff[1102] = IXGBE_READ_REG(hw, IXGBE_TXBUFDATA0); | 556 | regs_buff[1102] = IXGBE_READ_REG(hw, IXGBE_TXBUFDATA0); |
@@ -566,7 +563,7 @@ static void ixgbe_get_regs(struct net_device *netdev, | |||
566 | regs_buff[1109] = IXGBE_READ_REG(hw, IXGBE_RXBUFDATA2); | 563 | regs_buff[1109] = IXGBE_READ_REG(hw, IXGBE_RXBUFDATA2); |
567 | regs_buff[1110] = IXGBE_READ_REG(hw, IXGBE_RXBUFDATA3); | 564 | regs_buff[1110] = IXGBE_READ_REG(hw, IXGBE_RXBUFDATA3); |
568 | for (i = 0; i < 8; i++) | 565 | for (i = 0; i < 8; i++) |
569 | regs_buff[1111] = IXGBE_READ_REG(hw, IXGBE_PCIE_DIAG(i)); | 566 | regs_buff[1111 + i] = IXGBE_READ_REG(hw, IXGBE_PCIE_DIAG(i)); |
570 | regs_buff[1119] = IXGBE_READ_REG(hw, IXGBE_RFVAL); | 567 | regs_buff[1119] = IXGBE_READ_REG(hw, IXGBE_RFVAL); |
571 | regs_buff[1120] = IXGBE_READ_REG(hw, IXGBE_MDFTC1); | 568 | regs_buff[1120] = IXGBE_READ_REG(hw, IXGBE_MDFTC1); |
572 | regs_buff[1121] = IXGBE_READ_REG(hw, IXGBE_MDFTC2); | 569 | regs_buff[1121] = IXGBE_READ_REG(hw, IXGBE_MDFTC2); |