|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen: arm: correctly configure NSACR.
On 07/15/2013 12:22 PM, Stefano Stabellini wrote:
> On Mon, 15 Jul 2013, Ian Campbell wrote:
>> From: Ian Campbell <ian.campbell@xxxxxxxxxx>
>>
>> Previously we were setting it up twice, the second time neglecting to set the
>> NS_SMP bit.
>>
>> NSACR.NS_SMP is a processor specific bit which on Cortex-A7 and -A15
>> regulates
>> access to the (also processor specific) ACTLR.SMP bit. Not setting
>> NSACR.NS_SMP
>> meant that Xen's attempts to set ACTLR.SMP was silently ignored. Setting this
>> bit is required in order to cause the processor to take part in cache and TLB
>> coherency protocols. Failure to set this bit leads to random memory
>> corruption
>> in guests (although nothing like as catestrophic as you might expect!).
^
catastrophic
>>
>> An alternative fix would have been to set ACTLR.SMP when in Secure World,
>> however Linux expects to set ACTLR.SMP itself in NS mode, so it's a good bet
>> that bootloaders will set NSACR.NS_SMP instead.
>>
>> While here switch to a read-modify-write of NSACR to preserve any existing
>> bits
>> -- seems safer.
>>
>> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
>> ---
>> v2: Modify rather than overwrite NSACR.
>
> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Except the minor typo:
Acked-by: Julien Grall <julien.grall@xxxxxxxxxx>
>
>> xen/arch/arm/arm32/mode_switch.S | 9 +++++----
>> 1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/xen/arch/arm/arm32/mode_switch.S
>> b/xen/arch/arm/arm32/mode_switch.S
>> index c92a1cf..3500eb0 100644
>> --- a/xen/arch/arm/arm32/mode_switch.S
>> +++ b/xen/arch/arm/arm32/mode_switch.S
>> @@ -104,7 +104,11 @@ enter_hyp_mode:
>> * memory-mapped control registers live, we can't find out the
>> * right frequency. */
>> mcr CP32(r0, CNTFRQ)
>> - ldr r0, =0x40c00 /* SMP, c11, c10 in non-secure mode */
>> +
>> + mrc CP32(r0,NSACR)
>> + ldr r4, =0x3fff /* Allow access to all co-processors
>> in NS mode */
>> + orr r0, r0, r4
>> + orr r0, r0, #(1<<18) /* CA7/CA15: Allow access to ACTLR.SMP
>> in NS mode */
>> mcr CP32(r0, NSACR)
>>
>> add r0, r1, #GIC_DR_OFFSET
>> @@ -143,9 +147,6 @@ skip_spis:
>> mov r0, #0
>> mcr CP32(r0, FCSEIDR)
>> mcr CP32(r0, CONTEXTIDR)
>> - /* Allow non-secure access to coprocessors, FIQs, VFP and NEON */
>> - ldr r1, =0x3fff /* 14 CP bits set, all others clear */
>> - mcr CP32(r1, NSACR)
>>
>> mrs r0, cpsr /* Copy the CPSR */
>> add r0, r0, #0x4 /* 0x16 (Monitor) -> 0x1a (Hyp) */
>> --
>> 1.8.3.2
>>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |