Skip to content

Commit

Permalink
powerpc/pseries: Fix PCI config address for DDW
Browse files Browse the repository at this point in the history
In commit 8445a87 "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: 8445a87 ("powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism")
Cc: [email protected] # v3.4+
Reported-by: Guilherme G. Piccoli <[email protected]>
Signed-off-by: Gavin Shan <[email protected]>
Tested-by: Guilherme G. Piccoli <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
  • Loading branch information
Gavin Shan authored and mpe committed Jun 6, 2016
1 parent 1e407ee commit 8a934ef
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions arch/powerpc/platforms/pseries/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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) */
Expand Down

0 comments on commit 8a934ef

Please sign in to comment.