Commit 5dbc9011 authored by Sivakumar Subramani's avatar Sivakumar Subramani Committed by David S. Miller

vxge: Enable SRIOV support in the driver.

- Enabled SRIOV support in the driver.
- Call __vxge_hw_verify_pci_e_info() for the PF only. This function
  verifies the negotiated link width and current link speed in the
  Link Status Register (offset 12h) which are reserved fields for VFs
  as per the SRIOV specification, section 3.5.8.
- Implemented David Miller's comment to remove the #ifdef CONFIG_PCI_IOV as
  these intefaces have NOP versions declared when the defintion is not set.
Signed-off-by: default avatarSivakumar Subramani <sivakumar.subramani@neterion.com>
Signed-off-by: default avatarRastapur Santosh <santosh.rastapur@neterion.com>
Signed-off-by: default avatarRamkrishna Vepa <ram.vepa@neterion.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a42fc8f6
...@@ -454,7 +454,7 @@ __vxge_hw_verify_pci_e_info(struct __vxge_hw_device *hldev) ...@@ -454,7 +454,7 @@ __vxge_hw_verify_pci_e_info(struct __vxge_hw_device *hldev)
return VXGE_HW_OK; return VXGE_HW_OK;
} }
static enum vxge_hw_status enum vxge_hw_status
__vxge_hw_device_is_privilaged(struct __vxge_hw_device *hldev) __vxge_hw_device_is_privilaged(struct __vxge_hw_device *hldev)
{ {
if ((hldev->host_type == VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION || if ((hldev->host_type == VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION ||
...@@ -676,10 +676,12 @@ enum vxge_hw_status __vxge_hw_device_initialize(struct __vxge_hw_device *hldev) ...@@ -676,10 +676,12 @@ enum vxge_hw_status __vxge_hw_device_initialize(struct __vxge_hw_device *hldev)
{ {
enum vxge_hw_status status = VXGE_HW_OK; enum vxge_hw_status status = VXGE_HW_OK;
/* Validate the pci-e link width and speed */ if (VXGE_HW_OK == __vxge_hw_device_is_privilaged(hldev)) {
status = __vxge_hw_verify_pci_e_info(hldev); /* Validate the pci-e link width and speed */
if (status != VXGE_HW_OK) status = __vxge_hw_verify_pci_e_info(hldev);
goto exit; if (status != VXGE_HW_OK)
goto exit;
}
vxge_hw_wrr_rebalance(hldev); vxge_hw_wrr_rebalance(hldev);
exit: exit:
......
...@@ -4203,6 +4203,16 @@ vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre) ...@@ -4203,6 +4203,16 @@ vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre)
max_vpath_supported++; max_vpath_supported++;
} }
/* Enable SRIOV mode, if firmware has SRIOV support and if it is a PF */
if ((VXGE_HW_FUNCTION_MODE_SRIOV ==
ll_config.device_hw_info.function_mode) &&
(max_config_dev > 1) && (pdev->is_physfn)) {
ret = pci_enable_sriov(pdev, max_config_dev - 1);
if (ret)
vxge_debug_ll_config(VXGE_ERR,
"Failed to enable SRIOV: %d \n", ret);
}
/* /*
* Configure vpaths and get driver configured number of vpaths * Configure vpaths and get driver configured number of vpaths
* which is less than or equal to the maximum vpaths per function. * which is less than or equal to the maximum vpaths per function.
...@@ -4366,6 +4376,7 @@ _exit6: ...@@ -4366,6 +4376,7 @@ _exit6:
vxge_device_unregister(hldev); vxge_device_unregister(hldev);
_exit5: _exit5:
pci_disable_sriov(pdev);
vxge_hw_device_terminate(hldev); vxge_hw_device_terminate(hldev);
_exit4: _exit4:
iounmap(attr.bar1); iounmap(attr.bar1);
...@@ -4429,6 +4440,8 @@ vxge_remove(struct pci_dev *pdev) ...@@ -4429,6 +4440,8 @@ vxge_remove(struct pci_dev *pdev)
iounmap(vdev->bar0); iounmap(vdev->bar0);
iounmap(vdev->bar1); iounmap(vdev->bar1);
pci_disable_sriov(pdev);
/* we are safe to free it now */ /* we are safe to free it now */
free_netdev(dev); free_netdev(dev);
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#define VXGE_VERSION_MAJOR "2" #define VXGE_VERSION_MAJOR "2"
#define VXGE_VERSION_MINOR "0" #define VXGE_VERSION_MINOR "0"
#define VXGE_VERSION_FIX "1" #define VXGE_VERSION_FIX "4"
#define VXGE_VERSION_BUILD "17129" #define VXGE_VERSION_BUILD "17795"
#define VXGE_VERSION_FOR "k" #define VXGE_VERSION_FOR "k"
#endif #endif
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