- 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)
185 lines
5.3 KiB
Diff
185 lines
5.3 KiB
Diff
From 2f5f0f03e92489bf17edd686d48a22201b5ff081 Mon Sep 17 00:00:00 2001
|
|
From: Michael Roth <michael.roth@amd.com>
|
|
Date: Thu, 4 May 2023 15:53:07 -0500
|
|
Subject: [PATCH] target/i386: Add new EPYC CPU versions with updated
|
|
cache_info
|
|
|
|
mainline inclusion
|
|
from mainline-8.1.0
|
|
commit d7c72735f618a7ee27ee109d8b1468193734606a
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/qemu/issues/IAUSKJ
|
|
Reference: https://gitlab.com/qemu-project/qemu/-/commit/d7c72735f618a7ee27ee109d8b1468193734606a
|
|
|
|
commit d7c72735f618a7ee27ee109d8b1468193734606a upstream
|
|
|
|
Introduce new EPYC cpu versions: EPYC-v4 and EPYC-Rome-v3.
|
|
The only difference vs. older models is an updated cache_info with
|
|
the 'complex_indexing' bit unset, since this bit is not currently
|
|
defined for AMD and may cause problems should it be used for
|
|
something else in the future. Setting this bit will also cause
|
|
CPUID validation failures when running SEV-SNP guests.
|
|
|
|
Signed-off-by: Michael Roth <michael.roth@amd.com>
|
|
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
|
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
|
Message-Id: <20230504205313.225073-3-babu.moger@amd.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
---
|
|
target/i386/cpu.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 118 insertions(+)
|
|
|
|
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
index 60df10c954..940aec42cf 100644
|
|
--- a/target/i386/cpu.c
|
|
+++ b/target/i386/cpu.c
|
|
@@ -1733,6 +1733,56 @@ static const CPUCaches epyc_cache_info = {
|
|
},
|
|
};
|
|
|
|
+static CPUCaches epyc_v4_cache_info = {
|
|
+ .l1d_cache = &(CPUCacheInfo) {
|
|
+ .type = DATA_CACHE,
|
|
+ .level = 1,
|
|
+ .size = 32 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 64,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = 1,
|
|
+ .no_invd_sharing = true,
|
|
+ },
|
|
+ .l1i_cache = &(CPUCacheInfo) {
|
|
+ .type = INSTRUCTION_CACHE,
|
|
+ .level = 1,
|
|
+ .size = 64 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 4,
|
|
+ .partitions = 1,
|
|
+ .sets = 256,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = 1,
|
|
+ .no_invd_sharing = true,
|
|
+ },
|
|
+ .l2_cache = &(CPUCacheInfo) {
|
|
+ .type = UNIFIED_CACHE,
|
|
+ .level = 2,
|
|
+ .size = 512 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 1024,
|
|
+ .lines_per_tag = 1,
|
|
+ },
|
|
+ .l3_cache = &(CPUCacheInfo) {
|
|
+ .type = UNIFIED_CACHE,
|
|
+ .level = 3,
|
|
+ .size = 8 * MiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 16,
|
|
+ .partitions = 1,
|
|
+ .sets = 8192,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = true,
|
|
+ .inclusive = true,
|
|
+ .complex_indexing = false,
|
|
+ },
|
|
+};
|
|
+
|
|
static const CPUCaches epyc_rome_cache_info = {
|
|
.l1d_cache = &(CPUCacheInfo) {
|
|
.type = DATA_CACHE,
|
|
@@ -1783,6 +1833,56 @@ static const CPUCaches epyc_rome_cache_info = {
|
|
},
|
|
};
|
|
|
|
+static const CPUCaches epyc_rome_v3_cache_info = {
|
|
+ .l1d_cache = &(CPUCacheInfo) {
|
|
+ .type = DATA_CACHE,
|
|
+ .level = 1,
|
|
+ .size = 32 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 64,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = 1,
|
|
+ .no_invd_sharing = true,
|
|
+ },
|
|
+ .l1i_cache = &(CPUCacheInfo) {
|
|
+ .type = INSTRUCTION_CACHE,
|
|
+ .level = 1,
|
|
+ .size = 32 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 64,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = 1,
|
|
+ .no_invd_sharing = true,
|
|
+ },
|
|
+ .l2_cache = &(CPUCacheInfo) {
|
|
+ .type = UNIFIED_CACHE,
|
|
+ .level = 2,
|
|
+ .size = 512 * KiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 1024,
|
|
+ .lines_per_tag = 1,
|
|
+ },
|
|
+ .l3_cache = &(CPUCacheInfo) {
|
|
+ .type = UNIFIED_CACHE,
|
|
+ .level = 3,
|
|
+ .size = 16 * MiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 16,
|
|
+ .partitions = 1,
|
|
+ .sets = 16384,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = true,
|
|
+ .inclusive = true,
|
|
+ .complex_indexing = false,
|
|
+ },
|
|
+};
|
|
+
|
|
static const CPUCaches epyc_milan_cache_info = {
|
|
.l1d_cache = &(CPUCacheInfo) {
|
|
.type = DATA_CACHE,
|
|
@@ -4523,6 +4623,15 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
|
{ /* end of list */ }
|
|
}
|
|
},
|
|
+ {
|
|
+ .version = 4,
|
|
+ .props = (PropValue[]) {
|
|
+ { "model-id",
|
|
+ "AMD EPYC-v4 Processor" },
|
|
+ { /* end of list */ }
|
|
+ },
|
|
+ .cache_info = &epyc_v4_cache_info
|
|
+ },
|
|
{ /* end of list */ }
|
|
}
|
|
},
|
|
@@ -4642,6 +4751,15 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
|
{ /* end of list */ }
|
|
}
|
|
},
|
|
+ {
|
|
+ .version = 3,
|
|
+ .props = (PropValue[]) {
|
|
+ { "model-id",
|
|
+ "AMD EPYC-Rome-v3 Processor" },
|
|
+ { /* end of list */ }
|
|
+ },
|
|
+ .cache_info = &epyc_rome_v3_cache_info
|
|
+ },
|
|
{ /* end of list */ }
|
|
}
|
|
},
|
|
--
|
|
2.45.1.windows.1
|
|
|