reboot not working on linux-2.6.37 for ARMv7

viresh kumar viresh.linux at gmail.com
Sat Feb 12 11:15:45 EST 2011


On 2/11/11, Russell King - ARM Linux <linux at arm.linux.org.uk> wrote:
> On Fri, Feb 11, 2011 at 05:01:06PM +0530, shiraz hashim wrote:
>> I am using linux-2.6.37 on our ARM Cortex A9 (dual core) SMP platform
>> with PL310 as Level 2 cache. We observe that on reboot the control
>> is not able to reach to the arch_reset.
>>
>> The problem happens when L1 cache is disabled in
>> arm_machine_restart, through cpu_proc_fin() and L2 cache is flushed.
>
> Where's the L2 cache flush?  The sequence is:
>
>         /* Clean and invalidate caches */
>         flush_cache_all();
>         /* Turn off caching */
>         cpu_proc_fin();
>         /* Push out any further dirty data, and ensure cache is empty */
>         flush_cache_all();
>
> and flush_cache_all() calls v7_flush_kern_cache_all() in
> arch/arm/mm/cache-v7.S.
>
> I do hope you're not modifying flush_cache_all() to also call the L2
> cache functions because that's wrong.
>

Russell,

We are not modifying flush_cache_all. L2 cache is not flushed from there.
Actually as soon as L1 Cache is flushed and disabled, spin_lock is taken from
some other thread. This creates problem for our platform, as we do not have
monitors support at L2 thus failing strex instruction.

If we disable L2 then reboot works fine, as expected.

--
viresh



More information about the linux-arm-kernel mailing list