[PATCH] ARM: mm: cache-l2x0: Add support for re-enabling l2x0

Colin Cross ccross at android.com
Mon Jun 13 14:20:34 EDT 2011


On Mon, Jun 13, 2011 at 3:19 AM, Lorenzo Pieralisi
<lorenzo.pieralisi at arm.com> wrote:
> On Mon, Jun 13, 2011 at 01:46:58AM +0100, Colin Cross wrote:
>> Remove __init annotation from l2x0_init so it can be used to
>> reinitialize the l2x0 after it has been reset during suspend.
>>
>> Only print the init messages the first time l2x0_init is called.
>>
>> Add l2x0_enable to re-enable the l2x0 after l2x0_disable if
>> the l2x0 was not reset.
>>
>> l2x0_disable cannot use writel, as writel calls wmb(), and wmb()
>> may call outer_cache_sync, which takes the same spinlock as
>> l2x0_disable.
>>
>> Signed-off-by: Colin Cross <ccross at android.com>
>> ---
>>  arch/arm/include/asm/hardware/cache-l2x0.h |    3 ++-
>>  arch/arm/mm/cache-l2x0.c                   |   18 ++++++++++++++----
>>  2 files changed, 16 insertions(+), 5 deletions(-)
>>
>
> [...]
>
>> +/* enables l2x0 after l2x0_disable, does not invalidate */
>> +void l2x0_enable(void)
>> +{
>> +     unsigned long flags;
>> +
>> +     spin_lock_irqsave(&l2x0_lock, flags);
>> +     writel_relaxed(1, l2x0_base + L2X0_CTRL);
>> +     spin_unlock_irqrestore(&l2x0_lock, flags);
>> +}
>> +
>>  static void l2x0_disable(void)
>>  {
>>       unsigned long flags;
>>
>>       spin_lock_irqsave(&l2x0_lock, flags);
>> -     writel(0, l2x0_base + L2X0_CTRL);
>> +     writel_relaxed(0, l2x0_base + L2X0_CTRL);
>>       spin_unlock_irqrestore(&l2x0_lock, flags);
>>  }
>
> This function is still dodgy to use, since we are disabling L2
> possibly with current function stack lines allocated, which might wreak havoc.



More information about the linux-arm-kernel mailing list