• Antonio Nino Diaz's avatar
    Invalidate TLB entries during warm boot · 26441030
    Antonio Nino Diaz authored
    
    
    During the warm boot sequence:
    
    1. The MMU is enabled with the data cache disabled. The MMU table walker
       is set up to access the translation tables as in cacheable memory,
       but its accesses are non-cacheable because SCTLR_EL3.C controls them
       as well.
    2. The interconnect is set up and the CPU enters coherency with the
       rest of the system.
    3. The data cache is enabled.
    
    If the support for dynamic translation tables is enabled and another CPU
    makes changes to a region, the changes may only be present in the data
    cache, not in RAM. The CPU that is booting isn't in coherency with the
    rest of the system, so the table walker of that CPU isn't either. This
    means that it may read old entries from RAM and it may have invalid TLB
    entries corresponding to the dynamic mappings.
    
    This is not a problem for the boot code because the mapping is 1:1 and
    the regions are static. However, the code that runs after the boot
    sequence may need to access the dynamically mapped regions.
    
    This patch invalidates all TLBs during warm boot when the dynamic
    translation tables support is enabled to prevent this problem.
    
    Change-Id: I80264802dc0aa1cb3edd77d0b66b91db6961af3d
    Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
    26441030
psci_helpers.S 5 KB