Subject: [RFC] Fix omap3 booting with thumb2 compiled kernel

From: [email-masked] (Kevin Hilman)
Date: Wed, 27 May 2015 16:19:23 -0700

Tony Lindgren <[email-masked]> writes:

> * Kevin Hilman <[email-masked]> [150527 15:20]:
>> [ fix email for Dave Martin, +Tyler ]
>> 
>> Tony Lindgren <[email-masked]> writes:
>> 
>> > The power management related assembly needs to interact with
>> > ARM mode bootrom code, so we need to keep most of the related
>> > assembly in ARM mode.
>> >
>> > Currently we are entering into and ARM mode assembly function
>> > from thumb2 mode, so we need to make sure we switch to ARM
>> > mode. And we need to do that again after the cache flush.
>> >
>> > ---
>> >
>> > Kevin told me about this earlier today.. 
>> 
>> 
>> And for full boot log/panics, see the kernelci.org thumb2 kernel boots
>> that fail: http://kernelci.org/boot/?THUMB2_KERNEL&fail
>> 
>> > Anybody got better ideas for a fix here?
>> 
>> FWIW, a quick test of this patch makes my omap3-beagle-xm pass a simple
>> boot test, but it fails with off idle.
>
> Thanks to Stephen Boyd's suggestion of checking the missing ENDPROC,
> here's a better fix :) Now off idle works too.
>
> Regards,
>
> Tony
>
> 8 <----------------------
> From: Tony Lindgren <[email-masked]>
> Date: Wed, 27 May 2015 15:33:57 -0700
> Subject: [PATCH] ARM: OMAP3: Fix booting with thumb2 kernel
>
> We get a NULL pointer dereference on omap3 for thumb2 compiled kernels:
>
> Internal error: Oops: 80000005 [#1] SMP THUMB2
> ...
> [<c046497b>] (_raw_spin_unlock_irqrestore) from [<c0024375>]
> (omap3_enter_idle_bm+0xc5/0x178)
> [<c0024375>] (omap3_enter_idle_bm) from [<c0374e63>]
> (cpuidle_enter_state+0x77/0x27c)
> [<c0374e63>] (cpuidle_enter_state) from [<c00627f1>]
> (cpu_startup_entry+0x155/0x23c)
> [<c00627f1>] (cpu_startup_entry) from [<c06b9a47>]
> (start_kernel+0x32f/0x338)
> [<c06b9a47>] (start_kernel) from [<8000807f>] (0x8000807f)
>
> The power management related assembly on moaps needs to interact with
> ARM mode bootrom code, so we need to keep most of the related assembly
> in ARM mode.
>
> Turns out this error is because of missing ENDPROC for assembly code
> as suggested by Stephen Boyd <[email-masked]>. Let's add the
> missing ENDPROC in two places to sleep34xx.S, and also remove the
> earlier mystery code that was probably also caused by missing ENDPROC
> for earlier kernels.
>
> Reported-by: Kevin Hilman <[email-masked]>
> Signed-off-by: Tony Lindgren <[email-masked]>

Yup, boot test is now passing for me on omap3-beagle, omap3-beagle-xm,
omap3-n900, omap3-overo-tobi, omap3-overo-storm-tobi.

Tested-by: Kevin Hilman <[email-masked]>

Thanks for the quick fix.

Next step is to look at the exynos4412-odroidu3 failure which probably
has a similar cause.

Kevin