• Mark Rutland's avatar
    arm64: fix hyp mode mismatch detection · 424a3838
    Mark Rutland authored
    Commit 828e9834 ("arm64: head: create a new function for setting
    the boot_cpu_mode flag") added BOOT_CPU_MODE_EL1, a nonzero value
    replacing uses of zero. However it failed to update __boot_cpu_mode
    appropriately.
    
    A CPU booted at EL2 writes BOOT_CPU_MODE_EL2 to __boot_cpu_mode[0], and
    a CPU booted at EL1 writes BOOT_CPU_MODE_EL1 to __boot_cpu_mode[1].
    Later is_hyp_mode_mismatched() determines there to be a mismatch if
    __boot_cpu_mode[0] != __boot_cpu_mode[1].
    
    If all CPUs are booted at EL1, __boot_cpu_mode[0] will be set to
    BOOT_CPU_MODE_EL1, but __boot_cpu_mode[1] will retain its initial value
    of zero, and is_hyp_mode_mismatched will erroneously determine that the
    boot modes are mismatched. This hasn't been a problem so far, but later
    patches which will make use of is_hyp_mode_mismatched() expect it to
    work correctly.
    
    This patch initialises __boot_cpu_mode[1] to BOOT_CPU_MODE_EL1, fixing
    the erroneous mismatch detection when all CPUs are booted at EL1.
    
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Tested-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    424a3838
head.S 20.2 KB