]> git.proxmox.com Git - mirror_edk2.git/commit
ArmVirtPkg/ArmVirtQemu: Avoid early ID map on ThunderX
authorArd Biesheuvel <ardb@kernel.org>
Wed, 4 Jan 2023 15:51:35 +0000 (16:51 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 10 Jan 2023 17:37:39 +0000 (17:37 +0000)
commitec54ce1f1ab41b92782b37ae59e752fff0ef9c41
treea492453bac971fc30d9865e3f70cb730bb663de8
parent5ee17c5418bd4e0b26686bff14b71b3d83438a30
ArmVirtPkg/ArmVirtQemu: Avoid early ID map on ThunderX

The early ID map used by ArmVirtQemu uses ASID scoped non-global
mappings, as this allows us to switch to the permanent ID map seamlessly
without the need for explicit TLB maintenance.

However, this triggers a known erratum on ThunderX, which does not
tolerate non-global mappings that are executable at EL1, as this appears
to result in I-cache corruption. (Linux disables the KPTI based Meltdown
mitigation on ThunderX for the same reason)

So work around this, by detecting the CPU implementor and part number,
and proceeding without the early ID map if a ThunderX CPU is detected.

Note that this requires the C code to be built with strict alignment
again, as we may end up executing it with the MMU and caches off.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: dann frazier <dann.frazier@canonical.com>
ArmVirtPkg/ArmVirtQemu.dsc
ArmVirtPkg/Library/ArmPlatformLibQemu/AArch64/ArmPlatformHelper.S