[PATCH] powerpc/pseries: Fix PCI config address for DDW

Gavin Shan gwshan at linux.vnet.ibm.com
Thu May 26 10:46:52 AEST 2016


On Thu, May 26, 2016 at 09:56:07AM +1000, Gavin Shan wrote:
>In commit <8445a87f7092> ("powerpc/iommu: Remove the dependency
>on EEH struct in DDW mechanism"), the PE address was replaced
>with the PCI config address in order to remove dependency on EEH.
>According to PAPR spec, firmware (pHyp or QEMU) should accept
>"xxBBSSxx" format PCI config address, not "xxxxBBSS" provided
>by the patch. Note that "BB" is PCI bus number and "SS" is the
>combination of slot and function number.
>
>This fixes the PCI address passed to DDW RTAS calls.
>
>Fixes: 8445a87f7092 ("powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism")
>Reported-by: Guilherme G. Piccoli <gpiccoli at linux.vnet.ibm.com>
>Signed-off-by: Gavin Shan <gwshan at linux.vnet.ibm.com>
>Tested-by: Guilherme G. Piccoli <gpiccoli at linux.vnet.ibm.com>
>---
> arch/powerpc/platforms/pseries/iommu.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>

There are two mails sent for same patch. I don't know how is
happening. Maybe there is something wrong in my mailbox scripts.
Please ignore this one and sorry for the noise.

Thanks,
Gavin 

>diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
>index b7dfc13..3e8865b 100644
>--- a/arch/powerpc/platforms/pseries/iommu.c
>+++ b/arch/powerpc/platforms/pseries/iommu.c
>@@ -927,7 +927,7 @@ static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
> 	dn = pci_device_to_OF_node(dev);
> 	pdn = PCI_DN(dn);
> 	buid = pdn->phb->buid;
>-	cfg_addr = (pdn->busno << 8) | pdn->devfn;
>+	cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
> 
> 	ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
> 		  cfg_addr, BUID_HI(buid), BUID_LO(buid));
>@@ -956,7 +956,7 @@ static int create_ddw(struct pci_dev *dev, const u32 *ddw_avail,
> 	dn = pci_device_to_OF_node(dev);
> 	pdn = PCI_DN(dn);
> 	buid = pdn->phb->buid;
>-	cfg_addr = (pdn->busno << 8) | pdn->devfn;
>+	cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
> 
> 	do {
> 		/* extra outputs are LIOBN and dma-addr (hi, lo) */
>-- 
>2.1.0
>
>_______________________________________________
>Linuxppc-dev mailing list
>Linuxppc-dev at lists.ozlabs.org
>https://lists.ozlabs.org/listinfo/linuxppc-dev



More information about the Linuxppc-dev mailing list