diff options
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 67 | ||||
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_type.h | 8 |
2 files changed, 74 insertions, 1 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index b9923047ce11..522c03bc1dad 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
| @@ -50,6 +50,51 @@ static s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset, | |||
| 50 | u8 *eeprom_data); | 50 | u8 *eeprom_data); |
| 51 | 51 | ||
| 52 | /** | 52 | /** |
| 53 | * ixgbe_set_pcie_completion_timeout - set pci-e completion timeout | ||
| 54 | * @hw: pointer to the HW structure | ||
| 55 | * | ||
| 56 | * The defaults for 82598 should be in the range of 50us to 50ms, | ||
| 57 | * however the hardware default for these parts is 500us to 1ms which is less | ||
| 58 | * than the 10ms recommended by the pci-e spec. To address this we need to | ||
| 59 | * increase the value to either 10ms to 250ms for capability version 1 config, | ||
| 60 | * or 16ms to 55ms for version 2. | ||
| 61 | **/ | ||
| 62 | void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw) | ||
| 63 | { | ||
| 64 | struct ixgbe_adapter *adapter = hw->back; | ||
| 65 | u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR); | ||
| 66 | u16 pcie_devctl2; | ||
| 67 | |||
| 68 | /* only take action if timeout value is defaulted to 0 */ | ||
| 69 | if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK) | ||
| 70 | goto out; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * if capababilities version is type 1 we can write the | ||
| 74 | * timeout of 10ms to 250ms through the GCR register | ||
| 75 | */ | ||
| 76 | if (!(gcr & IXGBE_GCR_CAP_VER2)) { | ||
| 77 | gcr |= IXGBE_GCR_CMPL_TMOUT_10ms; | ||
| 78 | goto out; | ||
| 79 | } | ||
| 80 | |||
| 81 | /* | ||
| 82 | * for version 2 capabilities we need to write the config space | ||
| 83 | * directly in order to set the completion timeout value for | ||
| 84 | * 16ms to 55ms | ||
| 85 | */ | ||
| 86 | pci_read_config_word(adapter->pdev, | ||
| 87 | IXGBE_PCI_DEVICE_CONTROL2, &pcie_devctl2); | ||
| 88 | pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms; | ||
| 89 | pci_write_config_word(adapter->pdev, | ||
| 90 | IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2); | ||
| 91 | out: | ||
| 92 | /* disable completion timeout resend */ | ||
| 93 | gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND; | ||
| 94 | IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr); | ||
| 95 | } | ||
| 96 | |||
| 97 | /** | ||
| 53 | * ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count | 98 | * ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count |
| 54 | * @hw: pointer to hardware structure | 99 | * @hw: pointer to hardware structure |
| 55 | * | 100 | * |
| @@ -153,6 +198,26 @@ out: | |||
| 153 | } | 198 | } |
| 154 | 199 | ||
| 155 | /** | 200 | /** |
| 201 | * ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx | ||
| 202 | * @hw: pointer to hardware structure | ||
| 203 | * | ||
| 204 | * Starts the hardware using the generic start_hw function. | ||
| 205 | * Then set pcie completion timeout | ||
| 206 | **/ | ||
| 207 | s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw) | ||
| 208 | { | ||
| 209 | s32 ret_val = 0; | ||
| 210 | |||
| 211 | ret_val = ixgbe_start_hw_generic(hw); | ||
| 212 | |||
| 213 | /* set the completion timeout for interface */ | ||
| 214 | if (ret_val == 0) | ||
| 215 | ixgbe_set_pcie_completion_timeout(hw); | ||
| 216 | |||
| 217 | return ret_val; | ||
| 218 | } | ||
| 219 | |||
| 220 | /** | ||
| 156 | * ixgbe_get_link_capabilities_82598 - Determines link capabilities | 221 | * ixgbe_get_link_capabilities_82598 - Determines link capabilities |
| 157 | * @hw: pointer to hardware structure | 222 | * @hw: pointer to hardware structure |
| 158 | * @speed: pointer to link speed | 223 | * @speed: pointer to link speed |
| @@ -1085,7 +1150,7 @@ out: | |||
| 1085 | static struct ixgbe_mac_operations mac_ops_82598 = { | 1150 | static struct ixgbe_mac_operations mac_ops_82598 = { |
| 1086 | .init_hw = &ixgbe_init_hw_generic, | 1151 | .init_hw = &ixgbe_init_hw_generic, |
| 1087 | .reset_hw = &ixgbe_reset_hw_82598, | 1152 | .reset_hw = &ixgbe_reset_hw_82598, |
| 1088 | .start_hw = &ixgbe_start_hw_generic, | 1153 | .start_hw = &ixgbe_start_hw_82598, |
| 1089 | .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic, | 1154 | .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic, |
| 1090 | .get_media_type = &ixgbe_get_media_type_82598, | 1155 | .get_media_type = &ixgbe_get_media_type_82598, |
| 1091 | .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82598, | 1156 | .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82598, |
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/ixgbe/ixgbe_type.h index fa87309dc087..be90eb4575f6 100644 --- a/drivers/net/ixgbe/ixgbe_type.h +++ b/drivers/net/ixgbe/ixgbe_type.h | |||
| @@ -718,6 +718,12 @@ | |||
| 718 | #define IXGBE_ECC_STATUS_82599 0x110E0 | 718 | #define IXGBE_ECC_STATUS_82599 0x110E0 |
| 719 | #define IXGBE_BAR_CTRL_82599 0x110F4 | 719 | #define IXGBE_BAR_CTRL_82599 0x110F4 |
| 720 | 720 | ||
| 721 | /* PCI Express Control */ | ||
| 722 | #define IXGBE_GCR_CMPL_TMOUT_MASK 0x0000F000 | ||
| 723 | #define IXGBE_GCR_CMPL_TMOUT_10ms 0x00001000 | ||
| 724 | #define IXGBE_GCR_CMPL_TMOUT_RESEND 0x00010000 | ||
| 725 | #define IXGBE_GCR_CAP_VER2 0x00040000 | ||
| 726 | |||
| 721 | /* Time Sync Registers */ | 727 | /* Time Sync Registers */ |
| 722 | #define IXGBE_TSYNCRXCTL 0x05188 /* Rx Time Sync Control register - RW */ | 728 | #define IXGBE_TSYNCRXCTL 0x05188 /* Rx Time Sync Control register - RW */ |
| 723 | #define IXGBE_TSYNCTXCTL 0x08C00 /* Tx Time Sync Control register - RW */ | 729 | #define IXGBE_TSYNCTXCTL 0x08C00 /* Tx Time Sync Control register - RW */ |
| @@ -1521,6 +1527,7 @@ | |||
| 1521 | 1527 | ||
| 1522 | /* PCI Bus Info */ | 1528 | /* PCI Bus Info */ |
| 1523 | #define IXGBE_PCI_LINK_STATUS 0xB2 | 1529 | #define IXGBE_PCI_LINK_STATUS 0xB2 |
| 1530 | #define IXGBE_PCI_DEVICE_CONTROL2 0xC8 | ||
| 1524 | #define IXGBE_PCI_LINK_WIDTH 0x3F0 | 1531 | #define IXGBE_PCI_LINK_WIDTH 0x3F0 |
| 1525 | #define IXGBE_PCI_LINK_WIDTH_1 0x10 | 1532 | #define IXGBE_PCI_LINK_WIDTH_1 0x10 |
| 1526 | #define IXGBE_PCI_LINK_WIDTH_2 0x20 | 1533 | #define IXGBE_PCI_LINK_WIDTH_2 0x20 |
| @@ -1531,6 +1538,7 @@ | |||
| 1531 | #define IXGBE_PCI_LINK_SPEED_5000 0x2 | 1538 | #define IXGBE_PCI_LINK_SPEED_5000 0x2 |
| 1532 | #define IXGBE_PCI_HEADER_TYPE_REGISTER 0x0E | 1539 | #define IXGBE_PCI_HEADER_TYPE_REGISTER 0x0E |
| 1533 | #define IXGBE_PCI_HEADER_TYPE_MULTIFUNC 0x80 | 1540 | #define IXGBE_PCI_HEADER_TYPE_MULTIFUNC 0x80 |
| 1541 | #define IXGBE_PCI_DEVICE_CONTROL2_16ms 0x0005 | ||
| 1534 | 1542 | ||
| 1535 | /* Number of 100 microseconds we wait for PCI Express master disable */ | 1543 | /* Number of 100 microseconds we wait for PCI Express master disable */ |
| 1536 | #define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 | 1544 | #define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 |
