Skip to content

Commit

Permalink
powerpc/fsl: Support unique MSI addresses per PCIe Root Complex
Browse files Browse the repository at this point in the history
Its feasible based on how the PCI address map is setup that the region
of PCI address space used for MSIs differs for each PHB on the same SoC.

Instead of assuming that the address mappes to CCSRBAR 1:1 we read
PEXCSRBAR (BAR0) for the PHB that the given pci_dev is on.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Kumar Gala committed May 19, 2009
1 parent 12ac426 commit 3da34aa
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions arch/powerpc/sysdev/fsl_msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,13 @@ static void fsl_compose_msi_msg(struct pci_dev *pdev, int hwirq,
struct msi_msg *msg)
{
struct fsl_msi *msi_data = fsl_msi;
struct pci_controller *hose = pci_bus_to_host(pdev->bus);
u32 base = 0;

msg->address_lo = msi_data->msi_addr_lo;
pci_bus_read_config_dword(hose->bus,
PCI_DEVFN(0, 0), PCI_BASE_ADDRESS_0, &base);

msg->address_lo = msi_data->msi_addr_lo + base;
msg->address_hi = msi_data->msi_addr_hi;
msg->data = hwirq;

Expand Down Expand Up @@ -271,7 +276,7 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev,
msi->irqhost->host_data = msi;

msi->msi_addr_hi = 0x0;
msi->msi_addr_lo = res.start + features->msiir_offset;
msi->msi_addr_lo = features->msiir_offset + (res.start & 0xfffff);

rc = fsl_msi_init_allocator(msi);
if (rc) {
Expand Down

0 comments on commit 3da34aa

Please sign in to comment.