[v2] ARM: exynos: Set MCPM as mandatory for Exynos542x/5800 SoCs

Message ID 20190320081943.11800-1-m.szyprowski@samsung.com
State New
Headers show
Series
  • [v2] ARM: exynos: Set MCPM as mandatory for Exynos542x/5800 SoCs
Related show

Commit Message

Marek Szyprowski March 20, 2019, 8:19 a.m.
Support for Exynos5420/5422/5800 SoCs requires MCPM to properly boot all
CPU cores on all currectly supported platforms: Peach Pit (Exynos5420),
Odroid XU3/XU3lite/XU4/HC1 (Exynos5422) and Peach Pi (Exynos5800).
Without it some CPU cores fail to come online. Remove then the ability to
disable MCPM and make it mandatory when Exynos542x/5800 support is
enabled.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

---
v2: rebased on top of the current exynos-next
---
 arch/arm/mach-exynos/Kconfig   | 12 +++---------
 arch/arm/mach-exynos/Makefile  |  2 +-
 arch/arm/mach-exynos/suspend.c | 12 ++++--------
 3 files changed, 8 insertions(+), 18 deletions(-)

-- 
2.17.1

Comments

Krzysztof Kozlowski March 20, 2019, 7:01 p.m. | #1
On Wed, Mar 20, 2019 at 09:19:43AM +0100, Marek Szyprowski wrote:
> Support for Exynos5420/5422/5800 SoCs requires MCPM to properly boot all

> CPU cores on all currectly supported platforms: Peach Pit (Exynos5420),

> Odroid XU3/XU3lite/XU4/HC1 (Exynos5422) and Peach Pi (Exynos5800).

> Without it some CPU cores fail to come online. Remove then the ability to

> disable MCPM and make it mandatory when Exynos542x/5800 support is

> enabled.

> 

> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

> ---

> v2: rebased on top of the current exynos-next

> ---

>  arch/arm/mach-exynos/Kconfig   | 12 +++---------

>  arch/arm/mach-exynos/Makefile  |  2 +-

>  arch/arm/mach-exynos/suspend.c | 12 ++++--------

>  3 files changed, 8 insertions(+), 18 deletions(-)

> 

> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig

> index b40963cf91c7..62b734a8092b 100644

> --- a/arch/arm/mach-exynos/Kconfig

> +++ b/arch/arm/mach-exynos/Kconfig

> @@ -106,21 +106,15 @@ config SOC_EXYNOS5420

>  	bool "SAMSUNG EXYNOS5420"

>  	default y

>  	depends on ARCH_EXYNOS5

> +	select MCPM

> +	select ARM_CCI400_PORT_CTRL

> +	select ARM_CPU_SUSPEND

>  

>  config SOC_EXYNOS5800

>  	bool "SAMSUNG EXYNOS5800"

>  	default y

>  	depends on SOC_EXYNOS5420

>  

> -config EXYNOS5420_MCPM


While applying I noticed that it still leaves CONFIG_EXYNOS5420_MCPM in
defconfigs.  Please clean them as well in this patch.

Best regards,
Krzysztof


> -	bool "Exynos5420 Multi-Cluster PM support"

> -	depends on MCPM && SOC_EXYNOS5420

> -	select ARM_CCI400_PORT_CTRL

> -	select ARM_CPU_SUSPEND

> -	help

> -	  This is needed to provide CPU and cluster power management

> -	  on Exynos5420 implementing big.LITTLE.

> -

>  config EXYNOS_CPU_SUSPEND

>  	bool

>  	select ARM_CPU_SUSPEND

> diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile

> index cd00c82a1add..fb381d69f8d1 100644

> --- a/arch/arm/mach-exynos/Makefile

> +++ b/arch/arm/mach-exynos/Makefile

> @@ -18,5 +18,5 @@ plus_sec := $(call as-instr,.arch_extension sec,+sec)

>  AFLAGS_exynos-smc.o		:=-Wa,-march=armv7-a$(plus_sec)

>  AFLAGS_sleep.o			:=-Wa,-march=armv7-a$(plus_sec)

>  

> -obj-$(CONFIG_EXYNOS5420_MCPM)	+= mcpm-exynos.o

> +obj-$(CONFIG_SOC_EXYNOS5420)	+= mcpm-exynos.o

>  CFLAGS_mcpm-exynos.o		+= -march=armv7-a

> diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c

> index 6975feeae2be..63996b3b5014 100644

> --- a/arch/arm/mach-exynos/suspend.c

> +++ b/arch/arm/mach-exynos/suspend.c

> @@ -269,10 +269,8 @@ static int exynos5420_cpu_suspend(unsigned long arg)

>  	unsigned int cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);

>  	unsigned int cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);

>  

> -	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM)) {

> -		mcpm_set_entry_vector(cpu, cluster, exynos_cpu_resume);

> -		mcpm_cpu_suspend();

> -	}

> +	mcpm_set_entry_vector(cpu, cluster, exynos_cpu_resume);

> +	mcpm_cpu_suspend();

>  

>  	pr_info("Failed to suspend the system\n");

>  

> @@ -352,8 +350,7 @@ static void exynos5420_pm_prepare(void)

>  	exynos_pm_enter_sleep_mode();

>  

>  	/* ensure at least INFORM0 has the resume address */

> -	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM))

> -		pmu_raw_writel(__pa_symbol(mcpm_entry_point), S5P_INFORM0);

> +	pmu_raw_writel(__pa_symbol(mcpm_entry_point), S5P_INFORM0);

>  

>  	tmp = pmu_raw_readl(EXYNOS_L2_OPTION(0));

>  	tmp &= ~EXYNOS_L2_USE_RETENTION;

> @@ -456,8 +453,7 @@ static void exynos5420_prepare_pm_resume(void)

>  	mpidr = read_cpuid_mpidr();

>  	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);

>  

> -	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM))

> -		WARN_ON(mcpm_cpu_powered_up());

> +	WARN_ON(mcpm_cpu_powered_up());

>  

>  	if (IS_ENABLED(CONFIG_HW_PERF_EVENTS) && cluster != 0) {

>  		/*

> -- 

> 2.17.1

>

Patch

diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
index b40963cf91c7..62b734a8092b 100644
--- a/arch/arm/mach-exynos/Kconfig
+++ b/arch/arm/mach-exynos/Kconfig
@@ -106,21 +106,15 @@  config SOC_EXYNOS5420
 	bool "SAMSUNG EXYNOS5420"
 	default y
 	depends on ARCH_EXYNOS5
+	select MCPM
+	select ARM_CCI400_PORT_CTRL
+	select ARM_CPU_SUSPEND
 
 config SOC_EXYNOS5800
 	bool "SAMSUNG EXYNOS5800"
 	default y
 	depends on SOC_EXYNOS5420
 
-config EXYNOS5420_MCPM
-	bool "Exynos5420 Multi-Cluster PM support"
-	depends on MCPM && SOC_EXYNOS5420
-	select ARM_CCI400_PORT_CTRL
-	select ARM_CPU_SUSPEND
-	help
-	  This is needed to provide CPU and cluster power management
-	  on Exynos5420 implementing big.LITTLE.
-
 config EXYNOS_CPU_SUSPEND
 	bool
 	select ARM_CPU_SUSPEND
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
index cd00c82a1add..fb381d69f8d1 100644
--- a/arch/arm/mach-exynos/Makefile
+++ b/arch/arm/mach-exynos/Makefile
@@ -18,5 +18,5 @@  plus_sec := $(call as-instr,.arch_extension sec,+sec)
 AFLAGS_exynos-smc.o		:=-Wa,-march=armv7-a$(plus_sec)
 AFLAGS_sleep.o			:=-Wa,-march=armv7-a$(plus_sec)
 
-obj-$(CONFIG_EXYNOS5420_MCPM)	+= mcpm-exynos.o
+obj-$(CONFIG_SOC_EXYNOS5420)	+= mcpm-exynos.o
 CFLAGS_mcpm-exynos.o		+= -march=armv7-a
diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c
index 6975feeae2be..63996b3b5014 100644
--- a/arch/arm/mach-exynos/suspend.c
+++ b/arch/arm/mach-exynos/suspend.c
@@ -269,10 +269,8 @@  static int exynos5420_cpu_suspend(unsigned long arg)
 	unsigned int cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 	unsigned int cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 
-	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM)) {
-		mcpm_set_entry_vector(cpu, cluster, exynos_cpu_resume);
-		mcpm_cpu_suspend();
-	}
+	mcpm_set_entry_vector(cpu, cluster, exynos_cpu_resume);
+	mcpm_cpu_suspend();
 
 	pr_info("Failed to suspend the system\n");
 
@@ -352,8 +350,7 @@  static void exynos5420_pm_prepare(void)
 	exynos_pm_enter_sleep_mode();
 
 	/* ensure at least INFORM0 has the resume address */
-	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM))
-		pmu_raw_writel(__pa_symbol(mcpm_entry_point), S5P_INFORM0);
+	pmu_raw_writel(__pa_symbol(mcpm_entry_point), S5P_INFORM0);
 
 	tmp = pmu_raw_readl(EXYNOS_L2_OPTION(0));
 	tmp &= ~EXYNOS_L2_USE_RETENTION;
@@ -456,8 +453,7 @@  static void exynos5420_prepare_pm_resume(void)
 	mpidr = read_cpuid_mpidr();
 	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 
-	if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM))
-		WARN_ON(mcpm_cpu_powered_up());
+	WARN_ON(mcpm_cpu_powered_up());
 
 	if (IS_ENABLED(CONFIG_HW_PERF_EVENTS) && cluster != 0) {
 		/*