[PATCH 1/2] Unify pci/pcie initialization code

Kumar Gala galak at kernel.crashing.org
Thu Nov 24 15:50:41 EST 2011


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 at 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 <B38951 at freescale.com>
> Signed-off-by: Li Yang <leoli at 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 at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev



More information about the Linuxppc-dev mailing list