UefiCpuPkg: PiSmmCpuDxeSmm skip MSR_IA32_MISC_ENABLE manipulation on AMD
AMD does not support MSR_IA32_MISC_ENABLE. Accessing that register causes and exception on AMD processors. If Execution Disable is supported, but if the processor is an AMD processor, skip manipulating MSR_IA32_MISC_ENABLE[34] XD Disable bit. Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Garrett Kirkendall <garrett.kirkendall@amd.com> Message-Id: <20200622131825.1352-5-Garrett.Kirkendall@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
df667535ed
commit
bdafda8c45
@@ -1,5 +1,6 @@
|
||||
;------------------------------------------------------------------------------ ;
|
||||
; Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2020, AMD Incorporated. All rights reserved.<BR>
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
; Module Name:
|
||||
@@ -67,6 +68,7 @@ extern ASM_PFX(CpuSmmDebugExit)
|
||||
global ASM_PFX(gPatchSmbase)
|
||||
extern ASM_PFX(mXdSupported)
|
||||
global ASM_PFX(gPatchXdSupported)
|
||||
global ASM_PFX(gPatchMsrIa32MiscEnableSupported)
|
||||
global ASM_PFX(gPatchSmiStack)
|
||||
global ASM_PFX(gPatchSmiCr3)
|
||||
global ASM_PFX(gPatch5LevelPagingNeeded)
|
||||
@@ -152,18 +154,32 @@ SkipEnable5LevelPaging:
|
||||
ASM_PFX(gPatchXdSupported):
|
||||
cmp al, 0
|
||||
jz @SkipXd
|
||||
|
||||
; If MSR_IA32_MISC_ENABLE is supported, clear XD Disable bit
|
||||
mov al, strict byte 1 ; source operand may be patched
|
||||
ASM_PFX(gPatchMsrIa32MiscEnableSupported):
|
||||
cmp al, 1
|
||||
jz MsrIa32MiscEnableSupported
|
||||
|
||||
; MSR_IA32_MISC_ENABLE not supported
|
||||
sub esp, 4
|
||||
xor rdx, rdx
|
||||
push rdx ; don't try to restore the XD Disable bit just before RSM
|
||||
jmp EnableNxe
|
||||
|
||||
;
|
||||
; Check XD disable bit
|
||||
;
|
||||
MsrIa32MiscEnableSupported:
|
||||
mov ecx, MSR_IA32_MISC_ENABLE
|
||||
rdmsr
|
||||
sub esp, 4
|
||||
push rdx ; save MSR_IA32_MISC_ENABLE[63-32]
|
||||
test edx, BIT2 ; MSR_IA32_MISC_ENABLE[34]
|
||||
jz .0
|
||||
jz EnableNxe
|
||||
and dx, 0xFFFB ; clear XD Disable bit if it is set
|
||||
wrmsr
|
||||
.0:
|
||||
EnableNxe:
|
||||
mov ecx, MSR_EFER
|
||||
rdmsr
|
||||
or ax, MSR_EFER_XD ; enable NXE
|
||||
|
Reference in New Issue
Block a user