Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933249Ab3FRSAG (ORCPT ); Tue, 18 Jun 2013 14:00:06 -0400 Received: from mail-pb0-f50.google.com ([209.85.160.50]:37849 "EHLO mail-pb0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933157Ab3FRSAD (ORCPT ); Tue, 18 Jun 2013 14:00:03 -0400 Message-ID: <51C0A01E.5020206@samsung.com> Date: Wed, 19 Jun 2013 02:59:58 +0900 From: Kukjin Kim User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.16 MIME-Version: 1.0 To: Tomasz Figa CC: Tomasz Figa , linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kukjin Kim , Russell King - ARM Linux , Jingoo Han , Jonghwan Choi , Abhilash Kesavan , linux-kernel@vger.kernel.org, stable@vger.kernel.org, Kyungmin Park , arnd@arndb.de, olof@lixom.net Subject: Re: [PATCH] ARM: EXYNOS: Fix incorrect usage of S5P_ARM_CORE1_* registers References: <1371569191-2364-1-git-send-email-t.figa@samsung.com> <4951987.HiKYku7923@flatron> In-Reply-To: <4951987.HiKYku7923@flatron> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5004 Lines: 132 On 06/19/13 02:45, Tomasz Figa wrote: > Ccing Arnd and Olof, because I forgot to add them to git send-email... > > Sorry for the noise. > > On Tuesday 18 of June 2013 17:26:31 Tomasz Figa wrote: >> S5P_ARM_CORE1_* registers affect only core 1. To control further cores >> properly another registers must be used. >> >> This patch replaces S5P_ARM_CORE1_* register definitions with >> S5P_ARM_CORE_*(x) macro which return addresses of registers for >> specified core. >> >> This fixes CPU hotplug on quad core Exynos SoCs on which currently >> offlining CPUs 2 or 3 caused CPU 1 to be turned off. > > Obviously this doesn't happen currently because of the if (cpu == 1), but Yes, not happened...and just note exynos5440 doesn't support hotplug :) so this is available on exynos4412 and added 5420. > if logical cpu1 turned out not to be physical cpu1, then it would crash. > > Best regards, > Tomasz > >> In addition, >> bring-up of CPU 2 and 3 is fixed on boards where bootloader powers off >> secondary cores by default. >> I need to test on board about above... >> Cc: stable@vger.kernel.org >> Signed-off-by: Tomasz Figa >> Signed-off-by: Kyungmin Park >> --- >> arch/arm/mach-exynos/hotplug.c | 9 +++++---- >> arch/arm/mach-exynos/include/mach/regs-pmu.h | 10 +++++++--- >> arch/arm/mach-exynos/platsmp.c | 9 +++++---- >> 3 files changed, 17 insertions(+), 11 deletions(-) >> >> diff --git a/arch/arm/mach-exynos/hotplug.c >> b/arch/arm/mach-exynos/hotplug.c index af90cfa..c089943 100644 >> --- a/arch/arm/mach-exynos/hotplug.c >> +++ b/arch/arm/mach-exynos/hotplug.c >> @@ -93,10 +93,11 @@ static inline void cpu_leave_lowpower(void) >> static inline void platform_do_lowpower(unsigned int cpu, int >> *spurious) { >> for (;;) { >> + void __iomem *reg_base; >> + unsigned int phys_cpu = cpu_logical_map(cpu); >> >> - /* make cpu1 to be turned off at next WFI command */ >> - if (cpu == 1) >> - __raw_writel(0, S5P_ARM_CORE1_CONFIGURATION); >> + reg_base = S5P_ARM_CORE_CONFIGURATION(phys_cpu); >> + __raw_writel(0, reg_base); >> >> /* >> * here's the WFI >> @@ -106,7 +107,7 @@ static inline void platform_do_lowpower(unsigned int >> cpu, int *spurious) >> : "memory", "cc"); >> >> - if (pen_release == cpu_logical_map(cpu)) { >> + if (pen_release == phys_cpu) { >> /* >> * OK, proper wakeup, we're done >> */ >> diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h >> b/arch/arm/mach-exynos/include/mach/regs-pmu.h index 57344b7..cf40b86 >> 100644 >> --- a/arch/arm/mach-exynos/include/mach/regs-pmu.h >> +++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h >> @@ -125,10 +125,14 @@ >> #define S5P_GPS_ALIVE_LOWPWR S5P_PMUREG(0x13A0) >> >> #define S5P_ARM_CORE0_CONFIGURATION S5P_PMUREG(0x2000) >> +#define S5P_ARM_CORE0_STATUS S5P_PMUREG(0x2004) >> #define S5P_ARM_CORE0_OPTION S5P_PMUREG(0x2008) >> -#define S5P_ARM_CORE1_CONFIGURATION S5P_PMUREG(0x2080) >> -#define S5P_ARM_CORE1_STATUS S5P_PMUREG(0x2084) >> -#define S5P_ARM_CORE1_OPTION S5P_PMUREG(0x2088) >> +#define S5P_ARM_CORE_CONFIGURATION(_nr) \ >> + (S5P_ARM_CORE0_CONFIGURATION + ((_nr) * 0x80)) >> +#define S5P_ARM_CORE_STATUS(_nr) \ >> + (S5P_ARM_CORE0_STATUS + ((_nr) * 0x80)) >> +#define S5P_ARM_CORE_OPTION(_nr) \ >> + (S5P_ARM_CORE0_OPTION + ((_nr) * 0x80)) >> >> #define S5P_ARM_COMMON_OPTION S5P_PMUREG(0x2408) >> #define S5P_TOP_PWR_OPTION S5P_PMUREG(0x2C48) >> diff --git a/arch/arm/mach-exynos/platsmp.c >> b/arch/arm/mach-exynos/platsmp.c index d9c6d0a..2cbabc8 100644 >> --- a/arch/arm/mach-exynos/platsmp.c >> +++ b/arch/arm/mach-exynos/platsmp.c >> @@ -109,14 +109,15 @@ static int __cpuinit >> exynos_boot_secondary(unsigned int cpu, struct task_struct */ >> write_pen_release(phys_cpu); >> >> - if (!(__raw_readl(S5P_ARM_CORE1_STATUS)& S5P_CORE_LOCAL_PWR_EN)) > { >> + if (!(__raw_readl(S5P_ARM_CORE_STATUS(phys_cpu)) >> + & S5P_CORE_LOCAL_PWR_EN)) { >> __raw_writel(S5P_CORE_LOCAL_PWR_EN, >> - S5P_ARM_CORE1_CONFIGURATION); >> + S5P_ARM_CORE_CONFIGURATION(phys_cpu)); >> >> timeout = 10; >> >> /* wait max 10 ms until cpu1 is on */ >> - while ((__raw_readl(S5P_ARM_CORE1_STATUS) >> + while ((__raw_readl(S5P_ARM_CORE_STATUS(phys_cpu)) >> & S5P_CORE_LOCAL_PWR_EN) != S5P_CORE_LOCAL_PWR_EN) > { >> if (timeout-- == 0) >> break; >> @@ -125,7 +126,7 @@ static int __cpuinit exynos_boot_secondary(unsigned >> int cpu, struct task_struct } >> >> if (timeout == 0) { >> - printk(KERN_ERR "cpu1 power enable failed"); >> + printk(KERN_ERR "cpu%u power enable failed", cpu); >> spin_unlock(&boot_lock); >> return -ETIMEDOUT; >> } > -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/