[PATCH] powerpc/powernv: Remove powernv RTAS support

Benjamin Herrenschmidt benh at kernel.crashing.org
Wed Mar 25 16:25:27 AEDT 2015


On Thu, 2015-03-12 at 17:27 +1100, Michael Ellerman wrote:
> The powernv code has some conditional support for running on bare metal
> machines that have no OPAL firmware, but provide RTAS.
> 
> No released machines ever supported that, and even in the lab it was
> just a transitional hack in the days when OPAL was still being
> developed.
> 
> So remove the code.
> 
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>

Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>

> ---
>  arch/powerpc/platforms/powernv/Kconfig |  7 ---
>  arch/powerpc/platforms/powernv/pci.c   | 98 +++++++---------------------------
>  arch/powerpc/platforms/powernv/setup.c | 19 -------
>  arch/powerpc/platforms/powernv/smp.c   | 13 -----
>  4 files changed, 19 insertions(+), 118 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/powernv/Kconfig b/arch/powerpc/platforms/powernv/Kconfig
> index 45a8ed0585cd..4b044d8cb49a 100644
> --- a/arch/powerpc/platforms/powernv/Kconfig
> +++ b/arch/powerpc/platforms/powernv/Kconfig
> @@ -19,10 +19,3 @@ config PPC_POWERNV
>  	select CPU_FREQ_GOV_CONSERVATIVE
>  	select PPC_DOORBELL
>  	default y
> -
> -config PPC_POWERNV_RTAS
> -	depends on PPC_POWERNV
> -	bool "Support for RTAS based PowerNV platforms such as BML"
> -	default y
> -	select PPC_ICS_RTAS
> -	select PPC_RTAS
> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
> index 54323d6b5166..c8939ad221f9 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -679,66 +679,13 @@ void pnv_pci_setup_iommu_table(struct iommu_table *tbl,
>  	tbl->it_type = TCE_PCI;
>  }
>  
> -static struct iommu_table *pnv_pci_setup_bml_iommu(struct pci_controller *hose)
> -{
> -	struct iommu_table *tbl;
> -	const __be64 *basep, *swinvp;
> -	const __be32 *sizep;
> -
> -	basep = of_get_property(hose->dn, "linux,tce-base", NULL);
> -	sizep = of_get_property(hose->dn, "linux,tce-size", NULL);
> -	if (basep == NULL || sizep == NULL) {
> -		pr_err("PCI: %s has missing tce entries !\n",
> -		       hose->dn->full_name);
> -		return NULL;
> -	}
> -	tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, hose->node);
> -	if (WARN_ON(!tbl))
> -		return NULL;
> -	pnv_pci_setup_iommu_table(tbl, __va(be64_to_cpup(basep)),
> -				  be32_to_cpup(sizep), 0, IOMMU_PAGE_SHIFT_4K);
> -	iommu_init_table(tbl, hose->node);
> -	iommu_register_group(tbl, pci_domain_nr(hose->bus), 0);
> -
> -	/* Deal with SW invalidated TCEs when needed (BML way) */
> -	swinvp = of_get_property(hose->dn, "linux,tce-sw-invalidate-info",
> -				 NULL);
> -	if (swinvp) {
> -		tbl->it_busno = be64_to_cpu(swinvp[1]);
> -		tbl->it_index = (unsigned long)ioremap(be64_to_cpup(swinvp), 8);
> -		tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE;
> -	}
> -	return tbl;
> -}
> -
> -static void pnv_pci_dma_fallback_setup(struct pci_controller *hose,
> -				       struct pci_dev *pdev)
> -{
> -	struct device_node *np = pci_bus_to_OF_node(hose->bus);
> -	struct pci_dn *pdn;
> -
> -	if (np == NULL)
> -		return;
> -	pdn = PCI_DN(np);
> -	if (!pdn->iommu_table)
> -		pdn->iommu_table = pnv_pci_setup_bml_iommu(hose);
> -	if (!pdn->iommu_table)
> -		return;
> -	set_iommu_table_base_and_group(&pdev->dev, pdn->iommu_table);
> -}
> -
>  static void pnv_pci_dma_dev_setup(struct pci_dev *pdev)
>  {
>  	struct pci_controller *hose = pci_bus_to_host(pdev->bus);
>  	struct pnv_phb *phb = hose->private_data;
>  
> -	/* If we have no phb structure, try to setup a fallback based on
> -	 * the device-tree (RTAS PCI for example)
> -	 */
>  	if (phb && phb->dma_dev_setup)
>  		phb->dma_dev_setup(phb, pdev);
> -	else
> -		pnv_pci_dma_fallback_setup(hose, pdev);
>  }
>  
>  int pnv_pci_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
> @@ -784,38 +731,31 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_IBM, 0x3b9, pnv_p7ioc_rc_quirk);
>  void __init pnv_pci_init(void)
>  {
>  	struct device_node *np;
> +	bool found_ioda = false;
>  
>  	pci_add_flags(PCI_CAN_SKIP_ISA_ALIGN);
>  
> -	/* OPAL absent, try POPAL first then RTAS detection of PHBs */
> -	if (!firmware_has_feature(FW_FEATURE_OPAL)) {
> -#ifdef CONFIG_PPC_POWERNV_RTAS
> -		init_pci_config_tokens();
> -		find_and_init_phbs();
> -#endif /* CONFIG_PPC_POWERNV_RTAS */
> -	}
> -	/* OPAL is here, do our normal stuff */
> -	else {
> -		int found_ioda = 0;
> +	/* If we don't have OPAL, eg. in sim, just skip PCI probe */
> +	if (!firmware_has_feature(FW_FEATURE_OPAL))
> +		return;
>  
> -		/* Look for IODA IO-Hubs. We don't support mixing IODA
> -		 * and p5ioc2 due to the need to change some global
> -		 * probing flags
> -		 */
> -		for_each_compatible_node(np, NULL, "ibm,ioda-hub") {
> -			pnv_pci_init_ioda_hub(np);
> -			found_ioda = 1;
> -		}
> +	/* Look for IODA IO-Hubs. We don't support mixing IODA
> +	 * and p5ioc2 due to the need to change some global
> +	 * probing flags
> +	 */
> +	for_each_compatible_node(np, NULL, "ibm,ioda-hub") {
> +		pnv_pci_init_ioda_hub(np);
> +		found_ioda = true;
> +	}
>  
> -		/* Look for p5ioc2 IO-Hubs */
> -		if (!found_ioda)
> -			for_each_compatible_node(np, NULL, "ibm,p5ioc2")
> -				pnv_pci_init_p5ioc2_hub(np);
> +	/* Look for p5ioc2 IO-Hubs */
> +	if (!found_ioda)
> +		for_each_compatible_node(np, NULL, "ibm,p5ioc2")
> +			pnv_pci_init_p5ioc2_hub(np);
>  
> -		/* Look for ioda2 built-in PHB3's */
> -		for_each_compatible_node(np, NULL, "ibm,ioda2-phb")
> -			pnv_pci_init_ioda2_phb(np);
> -	}
> +	/* Look for ioda2 built-in PHB3's */
> +	for_each_compatible_node(np, NULL, "ibm,ioda2-phb")
> +		pnv_pci_init_ioda2_phb(np);
>  
>  	/* Setup the linkage between OF nodes and PHBs */
>  	pci_devs_phb_init();
> diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
> index d2de7d5d7574..499ddc0dcf66 100644
> --- a/arch/powerpc/platforms/powernv/setup.c
> +++ b/arch/powerpc/platforms/powernv/setup.c
> @@ -32,7 +32,6 @@
>  #include <asm/machdep.h>
>  #include <asm/firmware.h>
>  #include <asm/xics.h>
> -#include <asm/rtas.h>
>  #include <asm/opal.h>
>  #include <asm/kexec.h>
>  #include <asm/smp.h>
> @@ -278,20 +277,6 @@ static void __init pnv_setup_machdep_opal(void)
>  	ppc_md.handle_hmi_exception = opal_handle_hmi_exception;
>  }
>  
> -#ifdef CONFIG_PPC_POWERNV_RTAS
> -static void __init pnv_setup_machdep_rtas(void)
> -{
> -	if (rtas_token("get-time-of-day") != RTAS_UNKNOWN_SERVICE) {
> -		ppc_md.get_boot_time = rtas_get_boot_time;
> -		ppc_md.get_rtc_time = rtas_get_rtc_time;
> -		ppc_md.set_rtc_time = rtas_set_rtc_time;
> -	}
> -	ppc_md.restart = rtas_restart;
> -	pm_power_off = rtas_power_off;
> -	ppc_md.halt = rtas_halt;
> -}
> -#endif /* CONFIG_PPC_POWERNV_RTAS */
> -
>  static u32 supported_cpuidle_states;
>  
>  int pnv_save_sprs_for_winkle(void)
> @@ -465,10 +450,6 @@ static int __init pnv_probe(void)
>  
>  	if (firmware_has_feature(FW_FEATURE_OPAL))
>  		pnv_setup_machdep_opal();
> -#ifdef CONFIG_PPC_POWERNV_RTAS
> -	else if (rtas.base)
> -		pnv_setup_machdep_rtas();
> -#endif /* CONFIG_PPC_POWERNV_RTAS */
>  
>  	pr_debug("PowerNV detected !\n");
>  
> diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c
> index fc34025ef822..273d7b46f72a 100644
> --- a/arch/powerpc/platforms/powernv/smp.c
> +++ b/arch/powerpc/platforms/powernv/smp.c
> @@ -25,7 +25,6 @@
>  #include <asm/machdep.h>
>  #include <asm/cputable.h>
>  #include <asm/firmware.h>
> -#include <asm/rtas.h>
>  #include <asm/vdso_datapage.h>
>  #include <asm/cputhreads.h>
>  #include <asm/xics.h>
> @@ -241,18 +240,6 @@ void __init pnv_smp_init(void)
>  {
>  	smp_ops = &pnv_smp_ops;
>  
> -	/* XXX We don't yet have a proper entry point from HAL, for
> -	 * now we rely on kexec-style entry from BML
> -	 */
> -
> -#ifdef CONFIG_PPC_RTAS
> -	/* Non-lpar has additional take/give timebase */
> -	if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) {
> -		smp_ops->give_timebase = rtas_give_timebase;
> -		smp_ops->take_timebase = rtas_take_timebase;
> -	}
> -#endif /* CONFIG_PPC_RTAS */
> -
>  #ifdef CONFIG_HOTPLUG_CPU
>  	ppc_md.cpu_die	= pnv_smp_cpu_kill_self;
>  #endif




More information about the Linuxppc-dev mailing list