Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/pseries: Move MSI-related ops to pci_controller_ops

Move the pseries platform to use the pci_controller_ops structure
rather than ppc_md for MSI related PCI controller operations

We need to iterate all PHBs because the MSI setup happens later than
find_and_init_phbs() - mpe.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

authored by

Daniel Axtens and committed by
Michael Ellerman
1d14b875 7e3d6c5a

+13 -3
+13 -3
arch/powerpc/platforms/pseries/msi.c
··· 18 18 #include <asm/ppc-pci.h> 19 19 #include <asm/machdep.h> 20 20 21 + #include "pseries.h" 22 + 21 23 static int query_token, change_token; 22 24 23 25 #define RTAS_QUERY_FN 0 ··· 507 505 508 506 static int rtas_msi_init(void) 509 507 { 508 + struct pci_controller *phb; 509 + 510 510 query_token = rtas_token("ibm,query-interrupt-source-number"); 511 511 change_token = rtas_token("ibm,change-msi"); 512 512 ··· 520 516 521 517 pr_debug("rtas_msi: Registering RTAS MSI callbacks.\n"); 522 518 523 - WARN_ON(ppc_md.setup_msi_irqs); 524 - ppc_md.setup_msi_irqs = rtas_setup_msi_irqs; 525 - ppc_md.teardown_msi_irqs = rtas_teardown_msi_irqs; 519 + WARN_ON(pseries_pci_controller_ops.setup_msi_irqs); 520 + pseries_pci_controller_ops.setup_msi_irqs = rtas_setup_msi_irqs; 521 + pseries_pci_controller_ops.teardown_msi_irqs = rtas_teardown_msi_irqs; 522 + 523 + list_for_each_entry(phb, &hose_list, list_node) { 524 + WARN_ON(phb->controller_ops.setup_msi_irqs); 525 + phb->controller_ops.setup_msi_irqs = rtas_setup_msi_irqs; 526 + phb->controller_ops.teardown_msi_irqs = rtas_teardown_msi_irqs; 527 + } 526 528 527 529 WARN_ON(ppc_md.pci_irq_fixup); 528 530 ppc_md.pci_irq_fixup = rtas_msi_pci_irq_fixup;