Commit f9328bc6 authored by Don Skidmore's avatar Don Skidmore Committed by Jeff Kirsher

ixgbe: add new bus type for intergrated I/O interface (IOSF)

With this patch we add support for a new bus type ixgbe_bus_type_internal.
X550em devices use IOSF and not PCIe bus so this new type is to accommodate
them.
Signed-off-by: default avatarDonald C Skidmore <donald.c.skidmore@intel.com>
Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 454c65dd
...@@ -246,11 +246,19 @@ static inline bool ixgbe_pcie_from_parent(struct ixgbe_hw *hw) ...@@ -246,11 +246,19 @@ static inline bool ixgbe_pcie_from_parent(struct ixgbe_hw *hw)
static void ixgbe_check_minimum_link(struct ixgbe_adapter *adapter, static void ixgbe_check_minimum_link(struct ixgbe_adapter *adapter,
int expected_gts) int expected_gts)
{ {
struct ixgbe_hw *hw = &adapter->hw;
int max_gts = 0; int max_gts = 0;
enum pci_bus_speed speed = PCI_SPEED_UNKNOWN; enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN; enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
struct pci_dev *pdev; struct pci_dev *pdev;
/* Some devices are not connected over PCIe and thus do not negotiate
* speed. These devices do not have valid bus info, and thus any report
* we generate may not be correct.
*/
if (hw->bus.type == ixgbe_bus_type_internal)
return;
/* determine whether to use the parent device */ /* determine whether to use the parent device */
if (ixgbe_pcie_from_parent(&adapter->hw)) if (ixgbe_pcie_from_parent(&adapter->hw))
pdev = adapter->pdev->bus->parent->self; pdev = adapter->pdev->bus->parent->self;
...@@ -8837,9 +8845,10 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -8837,9 +8845,10 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
hw->eeprom.ops.read(hw, 0x2d, &adapter->eeprom_verl); hw->eeprom.ops.read(hw, 0x2d, &adapter->eeprom_verl);
/* pick up the PCI bus settings for reporting later */ /* pick up the PCI bus settings for reporting later */
hw->mac.ops.get_bus_info(hw);
if (ixgbe_pcie_from_parent(hw)) if (ixgbe_pcie_from_parent(hw))
ixgbe_get_parent_bus_info(adapter); ixgbe_get_parent_bus_info(adapter);
else
hw->mac.ops.get_bus_info(hw);
/* calculate the expected PCIe bandwidth required for optimal /* calculate the expected PCIe bandwidth required for optimal
* performance. Note that some older parts will never have enough * performance. Note that some older parts will never have enough
......
...@@ -3067,6 +3067,7 @@ enum ixgbe_bus_type { ...@@ -3067,6 +3067,7 @@ enum ixgbe_bus_type {
ixgbe_bus_type_pci, ixgbe_bus_type_pci,
ixgbe_bus_type_pcix, ixgbe_bus_type_pcix,
ixgbe_bus_type_pci_express, ixgbe_bus_type_pci_express,
ixgbe_bus_type_internal,
ixgbe_bus_type_reserved ixgbe_bus_type_reserved
}; };
......
...@@ -620,6 +620,7 @@ static s32 ixgbe_update_flash_X550(struct ixgbe_hw *hw) ...@@ -620,6 +620,7 @@ static s32 ixgbe_update_flash_X550(struct ixgbe_hw *hw)
**/ **/
static s32 ixgbe_get_bus_info_X550em(struct ixgbe_hw *hw) static s32 ixgbe_get_bus_info_X550em(struct ixgbe_hw *hw)
{ {
hw->bus.type = ixgbe_bus_type_internal;
hw->bus.width = ixgbe_bus_width_unknown; hw->bus.width = ixgbe_bus_width_unknown;
hw->bus.speed = ixgbe_bus_speed_unknown; hw->bus.speed = ixgbe_bus_speed_unknown;
......
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