[PATCH 14/25] OMAP4: PM: Add CPUX OFF mode support
Shilimkar, Santosh
santosh.shilimkar at ti.com
Fri Sep 9 23:39:38 EDT 2011
On Sat, Sep 10, 2011 at 12:04 AM, Kevin Hilman <khilman at ti.com> wrote:
> Santosh <santosh.shilimkar at ti.com> writes:
>
>> On Friday 09 September 2011 08:57 PM, Shawn Guo wrote:
>>> On Fri, Sep 09, 2011 at 07:41:08PM +0530, Shilimkar, Santosh wrote:
>>>> On Fri, Sep 9, 2011 at 7:43 PM, Shawn Guo<shawn.guo at freescale.com> wrote:
>>>>> On Fri, Sep 09, 2011 at 01:39:51PM +0530, Santosh wrote:
>>>>>> On Friday 09 September 2011 01:34 PM, Shawn Guo wrote:
>>>>>>> Hi Santosh,
>>
>> [...]
>>
>>>> #ifdef CONFIG_CACHE_L2X0
>>>> /*
>>>> * Clean and invalidate the L2 cache.
>>>> * Common cache-l2x0.c functions can't be used here since it
>>>> * uses spinlocks. We are out of coherency here with data cache
>>>> * disabled. The spinlock implementation uses exclusive load/store
>>>> * instruction which can fail without data cache being enabled.
>>>> * OMAP4 hardware doesn't support exclusive monitor which can
>>>> * overcome exclusive access issue. Because of this, CPU can
>>>> * lead to deadlock.
>>>> */
>>>> l2x_clean_inv:
>>>> bl omap4_get_sar_ram_base
>>>> mov r8, r0
>>>> mrc p15, 0, r5, c0, c0, 5 @ Read MPIDR
>>>> ands r5, r5, #0x0f
>>>> ldreq r0, [r8, #L2X0_SAVE_OFFSET0]
>>>> ldrne r0, [r8, #L2X0_SAVE_OFFSET1]
>>>> cmp r0, #3
>>>> bne do_WFI
>>>
>>> It looks like you are bypassing L2 clean and invalidate for cases
>>> "1" and "2" here. But I really do not understand how you get r0
>>> back here.
>>>
>> The value which is passed in R0 is also stored in scratch patch memory
>> and retrieved using L2X0_SAVE_OFFSET0.
>> Simple :)
>
> Sounds like some in-code documentation needs to be added to make this a
> bit more understandable.
>
Will add a comment
More information about the linux-arm-kernel
mailing list