Commit 052da31d authored by Oliver O'Halloran's avatar Oliver O'Halloran Committed by Michael Ellerman

powerpc/powernv/sriov: De-indent setup and teardown

Remove the IODA2 PHB checks. We already assume IODA2 in several places so
there's not much point in wrapping most of the setup and teardown process
in an if block.
Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200722065715.1432738-12-oohall@gmail.com
parent d29a2488
...@@ -606,16 +606,18 @@ static void pnv_pci_sriov_disable(struct pci_dev *pdev) ...@@ -606,16 +606,18 @@ static void pnv_pci_sriov_disable(struct pci_dev *pdev)
num_vfs = iov->num_vfs; num_vfs = iov->num_vfs;
base_pe = iov->vf_pe_arr[0].pe_number; base_pe = iov->vf_pe_arr[0].pe_number;
if (WARN_ON(!iov))
return;
/* Release VF PEs */ /* Release VF PEs */
pnv_ioda_release_vf_PE(pdev); pnv_ioda_release_vf_PE(pdev);
if (phb->type == PNV_PHB_IODA2) { /* Un-shift the IOV BAR resources */
if (!iov->m64_single_mode) if (!iov->m64_single_mode)
pnv_pci_vf_resource_shift(pdev, -base_pe); pnv_pci_vf_resource_shift(pdev, -base_pe);
/* Release M64 windows */ /* Release M64 windows */
pnv_pci_vf_release_m64(pdev, num_vfs); pnv_pci_vf_release_m64(pdev, num_vfs);
}
} }
static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs) static void pnv_ioda_setup_vf_PE(struct pci_dev *pdev, u16 num_vfs)
...@@ -689,41 +691,50 @@ static int pnv_pci_sriov_enable(struct pci_dev *pdev, u16 num_vfs) ...@@ -689,41 +691,50 @@ static int pnv_pci_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
phb = pci_bus_to_pnvhb(pdev->bus); phb = pci_bus_to_pnvhb(pdev->bus);
iov = pnv_iov_get(pdev); iov = pnv_iov_get(pdev);
if (phb->type == PNV_PHB_IODA2) { /*
if (!iov->vfs_expanded) { * There's a calls to IODA2 PE setup code littered throughout. We could
dev_info(&pdev->dev, * probably fix that, but we'd still have problems due to the
"don't support this SRIOV device with non 64bit-prefetchable IOV BAR\n"); * restriction inherent on IODA1 PHBs.
return -ENOSPC; *
} * NB: We class IODA3 as IODA2 since they're very similar.
*/
if (phb->type != PNV_PHB_IODA2) {
pci_err(pdev, "SR-IOV is not supported on this PHB\n");
return -ENXIO;
}
/* allocate a contigious block of PEs for our VFs */ if (!iov->vfs_expanded) {
base_pe = pnv_ioda_alloc_pe(phb, num_vfs); dev_info(&pdev->dev, "don't support this SRIOV device with non 64bit-prefetchable IOV BAR\n");
if (!base_pe) { return -ENOSPC;
pci_err(pdev, "Unable to allocate PEs for %d VFs\n", num_vfs); }
return -EBUSY;
}
iov->vf_pe_arr = base_pe; /* allocate a contigious block of PEs for our VFs */
iov->num_vfs = num_vfs; base_pe = pnv_ioda_alloc_pe(phb, num_vfs);
if (!base_pe) {
pci_err(pdev, "Unable to allocate PEs for %d VFs\n", num_vfs);
return -EBUSY;
}
/* Assign M64 window accordingly */ iov->vf_pe_arr = base_pe;
ret = pnv_pci_vf_assign_m64(pdev, num_vfs); iov->num_vfs = num_vfs;
if (ret) {
dev_info(&pdev->dev, "Not enough M64 window resources\n");
goto m64_failed;
}
/* /* Assign M64 window accordingly */
* When using one M64 BAR to map one IOV BAR, we need to shift ret = pnv_pci_vf_assign_m64(pdev, num_vfs);
* the IOV BAR according to the PE# allocated to the VFs. if (ret) {
* Otherwise, the PE# for the VF will conflict with others. dev_info(&pdev->dev, "Not enough M64 window resources\n");
*/ goto m64_failed;
if (!iov->m64_single_mode) { }
ret = pnv_pci_vf_resource_shift(pdev,
base_pe->pe_number); /*
if (ret) * When using one M64 BAR to map one IOV BAR, we need to shift
goto shift_failed; * the IOV BAR according to the PE# allocated to the VFs.
} * Otherwise, the PE# for the VF will conflict with others.
*/
if (!iov->m64_single_mode) {
ret = pnv_pci_vf_resource_shift(pdev,
base_pe->pe_number);
if (ret)
goto shift_failed;
} }
/* Setup VF PEs */ /* Setup VF PEs */
......
...@@ -240,10 +240,7 @@ struct pnv_iov_data { ...@@ -240,10 +240,7 @@ struct pnv_iov_data {
/* number of VFs enabled */ /* number of VFs enabled */
u16 num_vfs; u16 num_vfs;
/* /* pointer to the array of VF PEs. num_vfs long*/
* Pointer to the IODA PE state of each VF. Note that this is a pointer
* into the PHB's PE array (phb->ioda.pe_array).
*/
struct pnv_ioda_pe *vf_pe_arr; struct pnv_ioda_pe *vf_pe_arr;
/* Did we map the VF BARs with single-PE IODA BARs? */ /* Did we map the VF BARs with single-PE IODA BARs? */
......
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