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

Reply via email to