• Catalin Marinas's avatar
    Merge branch 'for-next/neoverse-n1-stale-instr' into for-next/core · 6a036afb
    Catalin Marinas authored
    Neoverse-N1 cores with the 'COHERENT_ICACHE' feature may fetch stale
    instructions when software depends on prefetch-speculation-protection
    instead of explicit synchronization. [0]
    
    The workaround is to trap I-Cache maintenance and issue an
    inner-shareable TLBI. The affected cores have a Coherent I-Cache, so the
    I-Cache maintenance isn't necessary. The core tells user-space it can
    skip it with CTR_EL0.DIC. We also have to trap this register to hide the
    bit forcing DIC-aware user-space to perform the maintenance.
    
    To avoid trapping all cache-maintenance, this workaround depends on
    a firmware component that only traps I-cache maintenance from EL0 and
    performs the workaround.
    
    For user-space, the kernel's work is to trap CTR_EL0 to hide DIC, and
    produce a fake IminLine. EL3 traps the now-necessary I-Cache maintenance
    and performs the inner-shareable-TLBI that makes everything better.
    
    [0] https://developer.arm.com/docs/sden885747/latest/arm-neoverse-n1-mp050-software-developer-errata-notice
    
    * for-next/neoverse-n1-stale-instr:
      arm64: Silence clang warning on mismatched value/register sizes
      arm64: compat: Workaround Neoverse-N1 #1542419 for compat user-space
      arm64: Fake the IminLine size on systems affected by Neoverse-N1 #1542419
      arm64: errata: Hide CTR_EL0.DIC on systems affected by Neoverse-N1 #1542419
    6a036afb
cpucaps.h 1.91 KB