> -----Original Message----- > From: Kumar Gala [mailto:ga...@kernel.crashing.org] > Sent: Thursday, August 02, 2012 8:55 PM > To: Jia Hongtao-B38951 > Cc: linuxppc-dev@lists.ozlabs.org; Wood Scott-B07421; Li Yang-R58472 > Subject: Re: [PATCH V4 2/3] powerpc/swiotlb: Enable at early stage and > disable if not necessary > > > On Aug 2, 2012, at 6:42 AM, Jia Hongtao wrote: > > > Remove the dependency on PCI initialization for SWIOTLB initialization. > > So that PCI can be initialized at proper time. > > > > SWIOTLB is partly determined by PCI inbound/outbound map which is > assigned > > in PCI initialization. But swiotlb_init() should be done at the stage > of > > mem_init() which is much earlier than PCI initialization. So we reserve > the > > memory for SWIOTLB first and free it if not necessary. > > > > All boards are converted to fit this change. > > > > Signed-off-by: Jia Hongtao <b38...@freescale.com> > > Signed-off-by: Li Yang <le...@freescale.com> > > --- > > This doesn't seem like it addresses our issue w/regards to not being able > to map all of memory from PCI.
PCI init will determine ppc_swiotlb_enable due to PCI map. swiotlb_late_init will handle all swiotlb things depend on the result of pci init. > > > > arch/powerpc/include/asm/swiotlb.h | 6 ++++++ > > arch/powerpc/kernel/dma-swiotlb.c | 20 ++++++++++++++++++++ > > arch/powerpc/mm/mem.c | 3 +-- > > arch/powerpc/platforms/44x/currituck.c | 10 ++-------- > > arch/powerpc/platforms/85xx/mpc85xx_ds.c | 1 + > > arch/powerpc/platforms/85xx/qemu_e500.c | 2 +- > > arch/powerpc/sysdev/fsl_pci.c | 5 +---- > > 7 files changed, 32 insertions(+), 15 deletions(-) > > Don't we also want to update all these: > > arch/powerpc/platforms/85xx/corenet_ds.c: > ppc_swiotlb_enable = 1; > arch/powerpc/platforms/85xx/ge_imp3a.c: ppc_swiotlb_enable = 1; > arch/powerpc/platforms/85xx/mpc8536_ds.c: > ppc_swiotlb_enable = 1; > arch/powerpc/platforms/85xx/mpc85xx_mds.c: > ppc_swiotlb_enable = 1; > arch/powerpc/platforms/85xx/p1022_ds.c: ppc_swiotlb_enable = 1; > arch/powerpc/platforms/86xx/mpc86xx_hpcn.c: > ppc_swiotlb_enable = 1; > They are works fine at this point. I will update all these boards after [PATCH 3/3] Unify pci/pcie initialization code > > > > > diff --git a/arch/powerpc/include/asm/swiotlb.h > b/arch/powerpc/include/asm/swiotlb.h > > index 8979d4c..de99d6e 100644 > > --- a/arch/powerpc/include/asm/swiotlb.h > > +++ b/arch/powerpc/include/asm/swiotlb.h > > @@ -22,4 +22,10 @@ int __init swiotlb_setup_bus_notifier(void); > > > > extern void pci_dma_dev_setup_swiotlb(struct pci_dev *pdev); > > > > +#ifdef CONFIG_SWIOTLB > > +void swiotlb_detect_4g(void); > > +#else > > +static inline void swiotlb_detect_4g(void) {} > > +#endif > > + > > #endif /* __ASM_SWIOTLB_H */ > > diff --git a/arch/powerpc/kernel/dma-swiotlb.c > b/arch/powerpc/kernel/dma-swiotlb.c > > index 4ab88da..aa85550 100644 > > --- a/arch/powerpc/kernel/dma-swiotlb.c > > +++ b/arch/powerpc/kernel/dma-swiotlb.c > > @@ -104,3 +104,23 @@ int __init swiotlb_setup_bus_notifier(void) > > &ppc_swiotlb_plat_bus_notifier); > > return 0; > > } > > + > > +void swiotlb_detect_4g(void) > > +{ > > + if ((memblock_end_of_DRAM() - 1) > 0xffffffff) > > + ppc_swiotlb_enable = 1; > > +} > > + > > +static int __init swiotlb_late_init(void) > > +{ > > + 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 { > > + swiotlb_free(); > > + } > > + > > + return 0; > > +} > > +subsys_initcall(swiotlb_late_init); > > diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c > > index baaafde..f23c4e0 100644 > > --- a/arch/powerpc/mm/mem.c > > +++ b/arch/powerpc/mm/mem.c > > @@ -300,8 +300,7 @@ void __init mem_init(void) > > unsigned long reservedpages = 0, codesize, initsize, datasize, > bsssize; > > > > #ifdef CONFIG_SWIOTLB > > - if (ppc_swiotlb_enable) > > - swiotlb_init(1); > > + swiotlb_init(0); > > #endif > > > > num_physpages = memblock_phys_mem_size() >> PAGE_SHIFT; > > diff --git a/arch/powerpc/platforms/44x/currituck.c > b/arch/powerpc/platforms/44x/currituck.c > > index 9f6c33d..6bd89a0 100644 > > --- a/arch/powerpc/platforms/44x/currituck.c > > +++ b/arch/powerpc/platforms/44x/currituck.c > > @@ -21,7 +21,6 @@ > > */ > > > > #include <linux/init.h> > > -#include <linux/memblock.h> > > #include <linux/of.h> > > #include <linux/of_platform.h> > > #include <linux/rtc.h> > > @@ -159,13 +158,8 @@ static void __init ppc47x_setup_arch(void) > > > > /* No need to check the DMA config as we /know/ our windows are all > of > > * RAM. Lets hope that doesn't change */ > > -#ifdef CONFIG_SWIOTLB > > - if ((memblock_end_of_DRAM() - 1) > 0xffffffff) { > > - ppc_swiotlb_enable = 1; > > - set_pci_dma_ops(&swiotlb_dma_ops); > > - ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; > > - } > > -#endif > > + swiotlb_detect_4g(); > > + > > ppc47x_smp_init(); > > } > > > > diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c > b/arch/powerpc/platforms/85xx/mpc85xx_ds.c > > index 6d3265f..56f8c8f 100644 > > --- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c > > +++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c > > @@ -159,6 +159,7 @@ static void __init mpc85xx_ds_setup_arch(void) > > if (ppc_md.progress) > > ppc_md.progress("mpc85xx_ds_setup_arch()", 0); > > > > + swiotlb_detect_4g(); > > mpc85xx_ds_pci_init(); > > mpc85xx_smp_init(); > > > > diff --git a/arch/powerpc/platforms/85xx/qemu_e500.c > b/arch/powerpc/platforms/85xx/qemu_e500.c > > index 95a2e53..04260cd 100644 > > --- a/arch/powerpc/platforms/85xx/qemu_e500.c > > +++ b/arch/powerpc/platforms/85xx/qemu_e500.c > > @@ -41,7 +41,7 @@ static void __init qemu_e500_setup_arch(void) > > { > > ppc_md.progress("qemu_e500_setup_arch()", 0); > > > > - fsl_pci_init(); > > + swiotlb_detect_4g(); > > removing fsl_pci_init() seems wrong. You are right. I will fix this. Thanks. -Hongtao. > > > mpc85xx_smp_init(); > > } > > > > diff --git a/arch/powerpc/sysdev/fsl_pci.c > b/arch/powerpc/sysdev/fsl_pci.c > > index 6938792..da7a3d7 100644 > > --- a/arch/powerpc/sysdev/fsl_pci.c > > +++ b/arch/powerpc/sysdev/fsl_pci.c > > @@ -872,11 +872,8 @@ void __devinit fsl_pci_init(void) > > * we need SWIOTLB to handle buffers located outside of > > * dma capable memory region > > */ > > - if (memblock_end_of_DRAM() - 1 > max) { > > + if (memblock_end_of_DRAM() - 1 > max) > > ppc_swiotlb_enable = 1; > > - set_pci_dma_ops(&swiotlb_dma_ops); > > - ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; > > - } > > #endif > > } > > #endif > > -- > > 1.7.5.1 > > > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev