Thread (53 messages) flat view 53 messages, 7 authors, 2014-07-14

Re: [RFC PATCH V3 12/17] powerpc/powernv: implement pcibios_sriov_resource_alignment on powernv

From: Wei Yang <hidden>
Date: 2014-06-23 08:21:47
Also in: linux-pci

On Mon, Jun 23, 2014 at 04:09:47PM +1000, Gavin Shan wrote:
On Tue, Jun 10, 2014 at 09:56:34AM +0800, Wei Yang wrote:
quoted
This patch implements the pcibios_sriov_resource_alignment() on powernv
platform.

Signed-off-by: Wei Yang <redacted>
---
arch/powerpc/include/asm/machdep.h        |    1 +
arch/powerpc/kernel/pci-common.c          |    8 ++++++++
arch/powerpc/platforms/powernv/pci-ioda.c |   17 +++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 2f2e770..3bbc55f 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -242,6 +242,7 @@ struct machdep_calls {
	resource_size_t (*pcibios_window_alignment)(struct pci_bus *, unsigned long type);
#ifdef CONFIG_PCI_IOV
	resource_size_t (*__pci_sriov_resource_size)(struct pci_dev *, int resno);
+	resource_size_t (*__pci_sriov_resource_alignment)(struct pci_dev *, int resno, resource_size_t align);
#endif /* CONFIG_PCI_IOV */

	/* Called to shutdown machine specific hardware not already controlled
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index c4e2e92..35345ac 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -128,6 +128,14 @@ resource_size_t pcibios_sriov_resource_size(struct pci_dev *pdev, int resno)
	return 0;
}
+
+resource_size_t pcibios_sriov_resource_alignment(struct pci_dev *pdev, int resno, resource_size_t align)
+{
+	if (ppc_md.__pci_sriov_resource_alignment)
+		return ppc_md.__pci_sriov_resource_alignment(pdev, resno, align);
+
+	return 0;
+}
#endif /* CONFIG_PCI_IOV */

static resource_size_t pcibios_io_size(const struct pci_controller *hose)
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 7dfad6a..b0ac851 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1573,6 +1573,22 @@ static resource_size_t __pnv_pci_sriov_resource_size(struct pci_dev *pdev, int r
	return size;
}
+
+static resource_size_t __pnv_pci_sriov_resource_alignment(struct pci_dev *pdev, int resno,
+		resource_size_t align)
The function could be "pcibios_sriov_resource_alignment()", but it's not a big deal.
If you prefer the original one, then keep it :)
I guess you want to name it to pnv_pcibios_sriov_resource_alignment()?
pcibios_sriov_resource_alignment() is the general name for this function.

If yes, this is changed.
quoted
+{
+	struct pci_dn *pdn = pci_get_pdn(pdev);
+	resource_size_t iov_align;
+
+	iov_align = resource_size(&pdev->resource[resno]);
+	if (iov_align)
+		return iov_align;
+
+	if (pdn->vfs)
+		return pdn->vfs * align;
+
+	return align;
+}
#endif /* CONFIG_PCI_IOV */

/* Prevent enabling devices for which we couldn't properly
@@ -1777,6 +1793,7 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np,
	ppc_md.pcibios_window_alignment = pnv_pci_window_alignment;
#ifdef CONFIG_PCI_IOV
	ppc_md.__pci_sriov_resource_size = __pnv_pci_sriov_resource_size;
+	ppc_md.__pci_sriov_resource_alignment = __pnv_pci_sriov_resource_alignment;
#endif /* CONFIG_PCI_IOV */
	pci_add_flags(PCI_REASSIGN_ALL_RSRC);
Thanks,
Gavin
-- 
Richard Yang
Help you, Help me
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help