Problems booting exynos5420 with >1 CPU
Doug Anderson
dianders at google.com
Fri Jun 6 14:12:50 PDT 2014
Hi,
On Fri, Jun 6, 2014 at 2:01 PM, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Fri, Jun 06, 2014 at 01:49:11PM -0700, Doug Anderson wrote:
>> This works and IMHO is much cleaner because it totally removes the
>> U-Boot dependency. I'll cleanup to not be so insane and post:
>>
>> diff --git a/arch/arm/mach-exynos/mcpm-exynos.c
>> b/arch/arm/mach-exynos/mcpm-exynos.c
>> index 0498d0b..9c5df7b 100644
>> --- a/arch/arm/mach-exynos/mcpm-exynos.c
>> +++ b/arch/arm/mach-exynos/mcpm-exynos.c
>> @@ -290,6 +290,14 @@ static void __naked
>> exynos_pm_power_up_setup(unsigned int affinity_level)
>> "b cci_enable_port_for_self");
>> }
>>
>> +static void __naked exynos_mcpm_secondary_cpu_start(void)
>> +{
>> + asm volatile ("\n"
>> + "ldr r0, [pc, #0]\n"
>> + "bx r0\n"
>> + ".word 0" );
>> +}
>> +
>
> So does it matter whether the above code gets assembled as thumb or
> ARM? How does your caller know which ISA mode to enter this fragment
> in?
I'm going to take Olof's suggestion and just hardcode the instructions like:
__raw_writel(0xe59f0000, ns_sram_base_addr); /* ldr r0, [pc, #0] */
__raw_writel(0xe12fff10, ns_sram_base_addr + 4); /* bx r0 */
__raw_writel(virt_to_phys(mcpm_entry_point), ns_sram_base_addr + 8);
The caller always jumps to this code with "bx" but always jumps into
ARM mode. Specifically U-Boot will have:
branch_bx(CONFIG_EXYNOS_RELOCATE_CODE_BASE);
-Doug
More information about the linux-arm-kernel
mailing list