igb: add support for reporting 5GT/s during probe on PCIe Gen2
Subsystems (3)
PATCH 1/1 igb: add support for reporting 5GT/s during probe on PCIe Gen2
From: Alexander Duyck <[email protected]>
This change corrects the fact that we were not reporting Gen2 link speeds when we were in fact connected at Gen2 rates.
Signed-off-by Alexander Duyck <[email protected]>
Signed-off-by Jeff Kirsher <[email protected]>
---
drivers/net/igb/e1000_defines.h | 4 ---- drivers/net/igb/e1000_mac.c | 27 ++++++++++++++++++++------- drivers/net/igb/igb_main.c | 1 + include/linux/pci_regs.h | 3 +++ 4 files changed, 24 insertions(+), 11 deletions(-)
drivers/net/igb/e1000_defines.h +0 -4
@@ -610,11 +610,7 @@#define IGP_LED3_MODE 0x07000000/* PCI/PCI-X/PCI-EX Config space */ -#define PCIE_LINK_STATUS 0x12#define PCIE_DEVICE_CONTROL2 0x28 - -#define PCIE_LINK_WIDTH_MASK 0x3F0 -#define PCIE_LINK_WIDTH_SHIFT 4#define PCIE_DEVICE_CONTROL2_16ms 0x0005#define PHY_REVISION_MASK 0xFFFFFFF0
drivers/net/igb/e1000_mac.c +20 -7
@@ -53,17 +53,30 @@ s32 igb_get_bus_info_pcie(struct e1000_hw *hw)u16 pcie_link_status; bus->type = e1000_bus_type_pci_express; - bus->speed = e1000_bus_speed_2500; ret_val =igb_read_pcie_cap_reg (hw, -PCIE_LINK_STATUS , - &pcie_link_status); -if (ret_val) +PCI_EXP_LNKSTA , + &pcie_link_status); +if (ret_val) { bus->width = e1000_bus_width_unknown; -else + bus->speed = e1000_bus_speed_unknown; + }else { +switch (pcie_link_status &PCI_EXP_LNKSTA_CLS ) { +case PCI_EXP_LNKSTA_CLS_2_5GB : + bus->speed = e1000_bus_speed_2500; +break ; +case PCI_EXP_LNKSTA_CLS_5_0GB : + bus->speed = e1000_bus_speed_5000; +break ; +default : + bus->speed = e1000_bus_speed_unknown; +break ; + } + bus->width = (enum e1000_bus_width )((pcie_link_status & -PCIE_LINK_WIDTH_MASK ) >> -PCIE_LINK_WIDTH_SHIFT ); +PCI_EXP_LNKSTA_NLW ) >> +PCI_EXP_LNKSTA_NLW_SHIFT ); + } reg =rd32 (E1000_STATUS ); bus->func = (reg &E1000_STATUS_FUNC_MASK ) >>E1000_STATUS_FUNC_SHIFT ;
drivers/net/igb/igb_main.c +1 -0
@@ -1638,6 +1638,7 @@ static int __devinit igb_probe(struct pci_dev *pdev, dev_info(&pdev->dev, "%s: (PCIe:%s:%s) %pM\n", netdev->name, ((hw->bus.speed == e1000_bus_speed_2500) ? "2.5Gb/s" : + (hw->bus.speed == e1000_bus_speed_5000) ? "5.0Gb/s" : "unknown"), ((hw->bus.width == e1000_bus_width_pcie_x4) ? "Width x4" : (hw->bus.width == e1000_bus_width_pcie_x2) ? "Width x2" :
include/linux/pci_regs.h +3 -0
@@ -442,7 +442,10 @@#define PCI_EXP_LNKCTL_LABIE 0x0800/* Lnk Autonomous Bandwidth Interrupt Enable */ #define PCI_EXP_LNKSTA 18/* Link Status */ #define PCI_EXP_LNKSTA_CLS 0x000f/* Current Link Speed */ +#define PCI_EXP_LNKSTA_CLS_2_5GB 0x01/* Current Link Speed 2.5GT/s */ +#define PCI_EXP_LNKSTA_CLS_5_0GB 0x02/* Current Link Speed 5.0GT/s */ #define PCI_EXP_LNKSTA_NLW 0x03f0/* Nogotiated Link Width */ +#define PCI_EXP_LNKSTA_NLW_SHIFT 4/* start of NLW mask in link status */ #define PCI_EXP_LNKSTA_LT 0x0800/* Link Training */ #define PCI_EXP_LNKSTA_SLC 0x1000/* Slot Clock Configuration */ #define PCI_EXP_LNKSTA_DLLLA 0x2000/* Data Link Layer Link Active */
From: Jeff Kirsher <[email protected]>
Date: Tue, 27 Apr 2010 04:02:40 -0700
Quoted 7 lines
From: Alexander Duyck <[email protected]>
This change corrects the fact that we were not reporting Gen2 link speeds when we were in fact connected at Gen2 rates.
Signed-off-by Alexander Duyck <[email protected]>Signed-off-by Jeff Kirsher <[email protected]>
Applied.