Message ID | 201605252359.u4PNx2IH015480@mx0a-001b2d01.pphosted.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
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@linux.vnet.ibm.com> >Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> >Tested-by: Guilherme G. Piccoli <gpiccoli@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@lists.ozlabs.org >https://lists.ozlabs.org/listinfo/linuxppc-dev
On Wed, 2016-25-05 at 23:56:07 UTC, 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") That commit was Cc'ed to stable, so this needs to be also. I've added it here. cheers
On Wed, 2016-25-05 at 23:56:07 UTC, 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@linux.vnet.ibm.com> > Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> > Tested-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com> Applied to powerpc fixes, thanks. https://git.kernel.org/powerpc/c/8a934efe94347eee843aeea65b cheers
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) */