[PATCH v3] arm: tcm: Don't crash when TCM banks are protected by TrustZone

Michael van der Westhuizen michael at smart-africa.com
Thu Jun 4 04:35:00 PDT 2015


Hi,

> On 04 Jun 2015, at 12:40 PM, Dave Martin <Dave.Martin at arm.com> wrote:
> 
> On Tue, Jun 02, 2015 at 05:10:03PM +0200, Michael van der Westhuizen wrote:
>> Fixes the TCM initialisation code to handle TCM banks that are
>> present but inaccessible due to TrustZone configuration.  This is
>> the default case when enabling the non-secure world.  It may also
>> be the case that that the user decided to use TCM for TrustZone.
>> 
>> This change has exposed a bug in handling of TCM where no TCM bank
>> was usable (the 0 size TCM case).  This change addresses the
>> resulting hang.
> 
> [...]
> 
>> + *
>> + * Encoding this as per A8.8.107 of DDI0406C, Encoding T1/A1, yields:
>> + *  1111 1111 1111 1111 0000 1111 1101 1111 Required Mask
>> + *  1110 1110 0001 1001 ???? 1111 0001 0001 mrc p15, 0, XX, c9, c1, 0
>> + *  1110 1110 0001 1001 ???? 1111 0011 0001 mrc p15, 0, XX, c9, c1, 1
>> + *  [  ] [  ] [ ]| [  ] [  ] [  ] [ ]| +--- CRm
>> + *    |    |   | |   |    |    |   | +----- SBO
>> + *    |    |   | |   |    |    |   +------- opc2
>> + *    |    |   | |   |    |    +----------- coproc
>> + *    |    |   | |   |    +---------------- Rt
>> + *    |    |   | |   +--------------------- CRn
>> + *    |    |   | +------------------------- SBO
>> + *    |    |   +--------------------------- opc1
>> + *    |    +------------------------------- instruction
>> + *    +------------------------------------ condition
>> + */
>> +#define TCM_REGION_READ_MASK		0xffff0fdf
>> +#define TCM_REGION_READ_INSTR		0xee190f11
>> +#define DEST_REG_SHIFT			12
>> +#define DEST_REG_MASK			0xf
> 
> What happens in a Thumb-2 kernel?
> 
> I think it is safe, since Thumb-2 kernel implies v7, and v7 mandates the
> TCMTR.  Even if we did get an Undef, the code in traps.c rearranges the
> bits of the offending insn into the "correct" order, and it so happens
> that this also makes the encoding for MRC/MCR instructions identical
> between ARM and Thumb.
> 
> For some other random instruction these assumptions may not hold, so
> it is worth adding brief comment in case people blindly use this code
> as a template for something else.

In this particular case, the T1 and A1 encodings are identical.

I’ll make that clear, and also make it clear that this is not necessarily a general case.

Michael




More information about the linux-arm-kernel mailing list