• Antonio Nino Diaz's avatar
    Set TCR_EL1.EPD1 bit to 1 · 3388b38d
    Antonio Nino Diaz authored
    
    
    In the S-EL1&0 translation regime we aren't using the higher VA range,
    whose translation table base address is held in TTBR1_EL1. The bit
    TCR_EL1.EPD1 can be used to disable translations using TTBR1_EL1, but
    the code wasn't setting it to 1. Additionally, other fields in TCR1_EL1
    associated with the higher VA range (TBI1, TG1, SH1, ORGN1, IRGN1 and
    A1) weren't set correctly as they were left as 0. In particular, 0 is a
    reserved value for TG1. Also, TBBR1_EL1 was not explicitly set and its
    reset value is UNKNOWN.
    
    Therefore memory accesses to the higher VA range would result in
    unpredictable behaviour as a translation table walk would be attempted
    using an UNKNOWN value in TTBR1_EL1.
    
    On the FVP and Juno platforms accessing the higher VA range resulted in
    a translation fault, but this may not always be the case on all
    platforms.
    
    This patch sets the bit TCR_EL1.EPD1 to 1 so that any kind of
    unpredictable behaviour is prevented.
    
    This bug only affects the AArch64 version of the code, the AArch32
    version sets this bit to 1 as expected.
    
    Change-Id: I481c000deda5bc33a475631301767b9e0474a303
    Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
    3388b38d
arch.h 17.1 KB