• Mark Rutland's avatar
    ARM: 8129/1: errata: work around Cortex-A15 erratum 830321 using dummy strex · bbd4080b
    Mark Rutland authored
    commit 2c32c65e upstream.
    
    On revisions of Cortex-A15 prior to r3p3, a CLREX instruction at PL1 may
    falsely trigger a watchpoint exception, leading to potential data aborts
    during exception return and/or livelock.
    
    This patch resolves the issue in the following ways:
    
      - Replacing our uses of CLREX with a dummy STREX sequence instead (as
        we did for v6 CPUs).
    
      - Removing the clrex code from v7_exit_coherency_flush and derivatives,
        since this only exists as a minor performance improvement when
        non-cached exclusives are in use (Linux doesn't use these).
    
    Benchmarking on a variety of ARM cores revealed no measurable
    performance difference with this change applied, so the change is
    performed unconditionally and no new Kconfig entry is added.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    [bwh: Backported to 3.2:
     - Drop inapplicable changes to arch/arm/include/asm/cacheflush.h and
       arch/arm/mach-exynos/mcpm-exynos.c]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    bbd4080b
entry-header.S 4.48 KB