powerpc: fsl_pci, swiotlb: Move controller ops from ppc_md to controller_ops

Move the installation of DMA operations out of swiotlb's subsys
initcall, and into the generic PCI controller operations struct.

These ops are installed conditionally, based on the ppc_swiotlb_enable
global. The global can be set in two places:
 - swiotlb_detect_4g, which is always called at the arch initcall level
 - setup_pci_atmu, which is called as part of the fsl_add_bridge and
fsl_pci_syscore_do_resume.

fsl_pci_syscore_do_resume is called late enough that any changes as a
result of that call will have no effect.

As such, if we test the global and set the operations as part of
fsl_add_bridge, after the call to setup_pci_atmu, we can be confident
that it will cover all the PCI implementations affected by the changes
to dma-swiotlb.c.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Acked-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Daniel Axtens
2015-04-10 13:15:47 +10:00
committed by Michael Ellerman
parent 19124d6dee
commit 97884e00e2
2 changed files with 19 additions and 7 deletions

View File

@@ -116,16 +116,13 @@ void __init swiotlb_detect_4g(void)
}
}
static int __init swiotlb_late_init(void)
static int __init check_swiotlb_enabled(void)
{
if (ppc_swiotlb_enable) {
if (ppc_swiotlb_enable)
swiotlb_print_info();
set_pci_dma_ops(&swiotlb_dma_ops);
ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
} else {
else
swiotlb_free();
}
return 0;
}
subsys_initcall(swiotlb_late_init);
subsys_initcall(check_swiotlb_enabled);