From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from e23smtp06.au.ibm.com ([202.81.31.148]:34408 "EHLO e23smtp06.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751180AbaFWGJx (ORCPT ); Mon, 23 Jun 2014 02:09:53 -0400 Received: from /spool/local by e23smtp06.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Jun 2014 16:09:51 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 1A4232BB0040 for ; Mon, 23 Jun 2014 16:09:48 +1000 (EST) Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id s5N5lWBv62128336 for ; Mon, 23 Jun 2014 15:47:32 +1000 Received: from d23av02.au.ibm.com (localhost [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s5N69kQB015987 for ; Mon, 23 Jun 2014 16:09:47 +1000 Date: Mon, 23 Jun 2014 16:09:47 +1000 From: Gavin Shan To: Wei Yang Cc: benh@au1.ibm.com, linuxppc-dev@lists.ozlabs.org, bhelgaas@google.com, linux-pci@vger.kernel.org, gwshan@linux.vnet.ibm.com, yan@linux.vnet.ibm.com, qiudayu@linux.vnet.ibm.com Subject: Re: [RFC PATCH V3 12/17] powerpc/powernv: implement pcibios_sriov_resource_alignment on powernv Message-ID: <20140623060947.GB12055@shangw> Reply-To: Gavin Shan References: <1402365399-5121-1-git-send-email-weiyang@linux.vnet.ibm.com> <1402365399-5121-13-git-send-email-weiyang@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <1402365399-5121-13-git-send-email-weiyang@linux.vnet.ibm.com> Sender: linux-pci-owner@vger.kernel.org List-ID: On Tue, Jun 10, 2014 at 09:56:34AM +0800, Wei Yang wrote: >This patch implements the pcibios_sriov_resource_alignment() on powernv >platform. > >Signed-off-by: Wei Yang >--- > 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 :) >+{ >+ 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