On Nov 22, 2011, at 12:20 AM, Jia Hongtao-B38951 wrote: > Hi Kumar, > We want more comments on this series of patches ([1/2] & [2/2]) to speed up > the pushing-to-kernel progress. > Thanks.
I think the code is fine, but you need to update it for all the boards include the 86xx ones. - k > > -----Original Message----- > From: Jia Hongtao-B38951 > Sent: Monday, October 31, 2011 1:55 PM > To: linuxppc-dev@lists.ozlabs.org > Cc: Li Yang-R58472; Gala Kumar-B11780; Jia Hongtao-B38951 > Subject: [PATCH 1/2] Unify pci/pcie initialization code > > In previous version pci/pcie initialization is in platform code which > Initialize PCI bridge base on EP/RC or host/agent settings. > We unified pci/pcie initialization as common APIs named fsl_pci_setup which > can be called by platform code. > > Signed-off-by: Jia Hongtao <b38...@freescale.com> > Signed-off-by: Li Yang <le...@freescale.com> > --- > arch/powerpc/platforms/85xx/mpc85xx_ds.c | 30 ++----------------- > arch/powerpc/sysdev/fsl_pci.c | 48 ++++++++++++++++++++++++++++++ > arch/powerpc/sysdev/fsl_pci.h | 5 +++ > 3 files changed, 56 insertions(+), 27 deletions(-) > > diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ds.c > b/arch/powerpc/platforms/85xx/mpc85xx_ds.c > index 10e7db0..7188c0b 100644 > --- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c > +++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c > @@ -157,33 +157,12 @@ extern void __init mpc85xx_smp_init(void); #endif > static void __init mpc85xx_ds_setup_arch(void) { -#ifdef CONFIG_PCI > - struct device_node *np; > - struct pci_controller *hose; > -#endif > - dma_addr_t max = 0xffffffff; > - > if (ppc_md.progress) > ppc_md.progress("mpc85xx_ds_setup_arch()", 0); > > -#ifdef CONFIG_PCI > - for_each_node_by_type(np, "pci") { > - if (of_device_is_compatible(np, "fsl,mpc8540-pci") || > - of_device_is_compatible(np, "fsl,mpc8548-pcie") || > - of_device_is_compatible(np, "fsl,p2020-pcie")) { > - struct resource rsrc; > - of_address_to_resource(np, 0, &rsrc); > - if ((rsrc.start & 0xfffff) == primary_phb_addr) > - fsl_add_bridge(np, 1); > - else > - fsl_add_bridge(np, 0); > - > - hose = pci_find_hose_for_OF_device(np); > - max = min(max, hose->dma_window_base_cur + > - hose->dma_window_size); > - } > - } > + fsl_pci_setup(primary_phb_addr); > > +#ifdef CONFIG_PCI > ppc_md.pci_exclude_device = mpc85xx_exclude_device; #endif > > @@ -192,11 +171,8 @@ static void __init mpc85xx_ds_setup_arch(void) #endif > > #ifdef CONFIG_SWIOTLB > - if (memblock_end_of_DRAM() > max) { > + if (memblock_end_of_DRAM() > 0xffffffff) > ppc_swiotlb_enable = 1; > - set_pci_dma_ops(&swiotlb_dma_ops); > - ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; > - } > #endif > > printk("MPC85xx DS board from Freescale Semiconductor\n"); diff --git > a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index > 80b8b7a..4d4536f 100644 > --- a/arch/powerpc/sysdev/fsl_pci.c > +++ b/arch/powerpc/sysdev/fsl_pci.c > @@ -402,6 +402,54 @@ int __init fsl_add_bridge(struct device_node *dev, int > is_primary) } #endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */ > > +static struct of_device_id pci_ids[] = { > + { .compatible = "fsl,mpc8540-pci", }, > + { .compatible = "fsl,mpc8548-pcie", }, > + {}, > +}; > + > +/** > + * fsl_pci_setup - Initialization for PCI > + * @primary_phb_addr: primary bus address > + * > + * Add bridge if pci controller is a host */ void fsl_pci_setup(int > +primary_phb_addr) { > + struct device_node *np; > + struct pci_controller *hose; > + dma_addr_t min_dma_addr = 0xffffffff; > + > + for_each_node_by_type(np, "pci") { > + if (of_match_node(pci_ids, np)) { > + struct resource rsrc; > + of_address_to_resource(np, 0, &rsrc); > + if ((rsrc.start & 0xfffff) == primary_phb_addr) > + fsl_add_bridge(np, 1); > + else > + fsl_add_bridge(np, 0); > + > + hose = pci_find_hose_for_OF_device(np); > + min_dma_addr = min(min_dma_addr, > + hose->dma_window_base_cur > + + hose->dma_window_size); > + > + } > + } > + > +#ifdef CONFIG_SWIOTLB > + /* > + * if we couldn't map all of DRAM via the dma windows we need SWIOTLB > + * to handle buffers located outside of dma capable memory region > + */ > + if (memblock_end_of_DRAM() > min_dma_addr) { > + ppc_swiotlb_enable = 1; > + set_pci_dma_ops(&swiotlb_dma_ops); > + ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb; > + } > +#endif > +} > + > DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, > quirk_fsl_pcie_header); > > #if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x) diff --git > a/arch/powerpc/sysdev/fsl_pci.h b/arch/powerpc/sysdev/fsl_pci.h index > a39ed5c..775ea21 100644 > --- a/arch/powerpc/sysdev/fsl_pci.h > +++ b/arch/powerpc/sysdev/fsl_pci.h > @@ -89,6 +89,11 @@ struct ccsr_pci { > }; > > extern int fsl_add_bridge(struct device_node *dev, int is_primary); > +#ifndef CONFIG_PCI > +#define fsl_pci_setup(p) > +#else > +extern void fsl_pci_setup(int primary_phb_addr); #endif > extern void fsl_pcibios_fixup_bus(struct pci_bus *bus); extern int > mpc83xx_add_bridge(struct device_node *dev); > u64 fsl_pci_immrbar_base(struct pci_controller *hose); > -- > 1.7.5.1 > > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev