- target/i386: Add EPYC-Genoa model to support Zen 4 processor series - target/i386: Add VNMI and automatic IBRS feature bits - target/i386: Add missing feature bits in EPYC-Milan model - target/i386: Add feature bits for CPUID_Fn80000021_EAX - target/i386: Add a couple of feature bits in 8000_0008_EBX - target/i386: Add new EPYC CPU versions with updated cache_info - target/i386: allow versioned CPUs to specify new cache_info Signed-off-by: AlexChen <alex.chen@huawei.com> (cherry picked from commit 941be8259b4a01d66f0c9c9d16c7acf8933688eb)
99 lines
4.0 KiB
Diff
99 lines
4.0 KiB
Diff
From bb5ec050bb8144c464cfe1b0954230ea2d5b4803 Mon Sep 17 00:00:00 2001
|
||
From: Babu Moger <babu.moger@amd.com>
|
||
Date: Thu, 4 May 2023 15:53:11 -0500
|
||
Subject: [PATCH] target/i386: Add VNMI and automatic IBRS feature bits
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
mainline inclusion
|
||
from mainline-8.1.0
|
||
commit 62a798d4bc2c3e767d94670776c77a7df274d7c5
|
||
category: feature
|
||
bugzilla: https://gitee.com/openeuler/qemu/issues/IAUSKJ
|
||
Reference: https://gitlab.com/qemu-project/qemu/-/commit/62a798d4bc2c3e767d94670776c77a7df274d7c5
|
||
|
||
commit 62a798d4bc2c3e767d94670776c77a7df274d7c5 upstream
|
||
|
||
Add the following featute bits.
|
||
|
||
vnmi: Virtual NMI (VNMI) allows the hypervisor to inject the NMI into the
|
||
guest without using Event Injection mechanism meaning not required to
|
||
track the guest NMI and intercepting the IRET.
|
||
The presence of this feature is indicated via the CPUID function
|
||
0x8000000A_EDX[25].
|
||
|
||
automatic-ibrs :
|
||
The AMD Zen4 core supports a new feature called Automatic IBRS.
|
||
It is a "set-and-forget" feature that means that, unlike e.g.,
|
||
s/w-toggled SPEC_CTRL.IBRS, h/w manages its IBRS mitigation
|
||
resources automatically across CPL transitions.
|
||
The presence of this feature is indicated via the CPUID function
|
||
0x80000021_EAX[8].
|
||
|
||
The documention for the features are available in the links below.
|
||
a. Processor Programming Reference (PPR) for AMD Family 19h Model 01h,
|
||
Revision B1 Processors
|
||
b. AMD64 Architecture Programmer’s Manual Volumes 1–5 Publication No. Revision
|
||
40332 4.05 Date October 2022
|
||
|
||
Signed-off-by: Santosh Shukla <santosh.shukla@amd.com>
|
||
Signed-off-by: Kim Phillips <kim.phillips@amd.com>
|
||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||
Link: https://www.amd.com/system/files/TechDocs/55898_B1_pub_0.50.zip
|
||
Link: https://www.amd.com/system/files/TechDocs/40332_4.05.pdf
|
||
Message-Id: <20230504205313.225073-7-babu.moger@amd.com>
|
||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
(cherry picked from commit 62a798d4bc2c3e767d94670776c77a7df274d7c5)
|
||
---
|
||
target/i386/cpu.c | 4 ++--
|
||
target/i386/cpu.h | 3 +++
|
||
2 files changed, 5 insertions(+), 2 deletions(-)
|
||
|
||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||
index 4d7f948eb1..59b585b0d0 100644
|
||
--- a/target/i386/cpu.c
|
||
+++ b/target/i386/cpu.c
|
||
@@ -806,7 +806,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||
"pfthreshold", "avic", NULL, "v-vmsave-vmload",
|
||
"vgif", NULL, NULL, NULL,
|
||
NULL, NULL, NULL, NULL,
|
||
- NULL, NULL, NULL, NULL,
|
||
+ NULL, "vnmi", NULL, NULL,
|
||
"svme-addr-chk", NULL, NULL, NULL,
|
||
},
|
||
.cpuid = { .eax = 0x8000000A, .reg = R_EDX, },
|
||
@@ -963,7 +963,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||
.feat_names = {
|
||
"no-nested-data-bp", NULL, "lfence-always-serializing", NULL,
|
||
NULL, NULL, "null-sel-clr-base", NULL,
|
||
- NULL, NULL, NULL, NULL,
|
||
+ "auto-ibrs", NULL, NULL, NULL,
|
||
NULL, NULL, NULL, NULL,
|
||
NULL, NULL, NULL, NULL,
|
||
NULL, NULL, NULL, NULL,
|
||
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
||
index 7b1190c3f2..84910db8bb 100644
|
||
--- a/target/i386/cpu.h
|
||
+++ b/target/i386/cpu.h
|
||
@@ -760,6 +760,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||
#define CPUID_SVM_AVIC (1U << 13)
|
||
#define CPUID_SVM_V_VMSAVE_VMLOAD (1U << 15)
|
||
#define CPUID_SVM_VGIF (1U << 16)
|
||
+#define CPUID_SVM_VNMI (1U << 25)
|
||
#define CPUID_SVM_SVME_ADDR_CHK (1U << 28)
|
||
|
||
/* Support RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE */
|
||
@@ -948,6 +949,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||
#define CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING (1U << 2)
|
||
/* Null Selector Clears Base */
|
||
#define CPUID_8000_0021_EAX_NULL_SEL_CLR_BASE (1U << 6)
|
||
+/* Automatic IBRS */
|
||
+#define CPUID_8000_0021_EAX_AUTO_IBRS (1U << 8)
|
||
|
||
#define CPUID_XSAVE_XSAVEOPT (1U << 0)
|
||
#define CPUID_XSAVE_XSAVEC (1U << 1)
|
||
--
|
||
2.45.1.windows.1
|
||
|