- 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)
196 lines
7.8 KiB
Diff
196 lines
7.8 KiB
Diff
From 85e2eee5a5f8b8146203c05f43caf1d988bc0d7d Mon Sep 17 00:00:00 2001
|
|
From: Babu Moger <babu.moger@amd.com>
|
|
Date: Thu, 4 May 2023 15:53:12 -0500
|
|
Subject: [PATCH] target/i386: Add EPYC-Genoa model to support Zen 4 processor
|
|
series
|
|
|
|
mainline inclusion
|
|
from mainline-8.1.0
|
|
commit 166b1741884dd4fd7090b753cd7333868457a29b
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/qemu/issues/IAUSKJ
|
|
Reference: https://gitlab.com/qemu-project/qemu/-/commit/166b1741884dd4fd7090b753cd7333868457a29b
|
|
|
|
commit 166b1741884dd4fd7090b753cd7333868457a29b upstream
|
|
|
|
Adds the support for AMD EPYC Genoa generation processors. The model
|
|
display for the new processor will be EPYC-Genoa.
|
|
|
|
Adds the following new feature bits on top of the feature bits from
|
|
the previous generation EPYC models.
|
|
|
|
avx512f : AVX-512 Foundation instruction
|
|
avx512dq : AVX-512 Doubleword & Quadword Instruction
|
|
avx512ifma : AVX-512 Integer Fused Multiply Add instruction
|
|
avx512cd : AVX-512 Conflict Detection instruction
|
|
avx512bw : AVX-512 Byte and Word Instructions
|
|
avx512vl : AVX-512 Vector Length Extension Instructions
|
|
avx512vbmi : AVX-512 Vector Byte Manipulation Instruction
|
|
avx512_vbmi2 : AVX-512 Additional Vector Byte Manipulation Instruction
|
|
gfni : AVX-512 Galois Field New Instructions
|
|
avx512_vnni : AVX-512 Vector Neural Network Instructions
|
|
avx512_bitalg : AVX-512 Bit Algorithms, add bit algorithms Instructions
|
|
avx512_vpopcntdq: AVX-512 AVX-512 Vector Population Count Doubleword and
|
|
Quadword Instructions
|
|
avx512_bf16 : AVX-512 BFLOAT16 instructions
|
|
la57 : 57-bit virtual address support (5-level Page Tables)
|
|
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.
|
|
auto-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.
|
|
|
|
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
|
Message-Id: <20230504205313.225073-8-babu.moger@amd.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
---
|
|
target/i386/cpu.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 122 insertions(+)
|
|
|
|
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
index 59b585b0d0..016a62a809 100644
|
|
--- a/target/i386/cpu.c
|
|
+++ b/target/i386/cpu.c
|
|
@@ -1999,6 +1999,56 @@ static const CPUCaches epyc_milan_v2_cache_info = {
|
|
},
|
|
};
|
|
|
|
+static const CPUCaches epyc_genoa_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 = 1 * MiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 8,
|
|
+ .partitions = 1,
|
|
+ .sets = 2048,
|
|
+ .lines_per_tag = 1,
|
|
+ },
|
|
+ .l3_cache = &(CPUCacheInfo) {
|
|
+ .type = UNIFIED_CACHE,
|
|
+ .level = 3,
|
|
+ .size = 32 * MiB,
|
|
+ .line_size = 64,
|
|
+ .associativity = 16,
|
|
+ .partitions = 1,
|
|
+ .sets = 32768,
|
|
+ .lines_per_tag = 1,
|
|
+ .self_init = true,
|
|
+ .inclusive = true,
|
|
+ .complex_indexing = false,
|
|
+ },
|
|
+};
|
|
+
|
|
/* The following VMX features are not supported by KVM and are left out in the
|
|
* CPU definitions:
|
|
*
|
|
@@ -4904,6 +4954,78 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
|
{ /* end of list */ }
|
|
}
|
|
},
|
|
+ {
|
|
+ .name = "EPYC-Genoa",
|
|
+ .level = 0xd,
|
|
+ .vendor = CPUID_VENDOR_AMD,
|
|
+ .family = 25,
|
|
+ .model = 17,
|
|
+ .stepping = 0,
|
|
+ .features[FEAT_1_EDX] =
|
|
+ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | CPUID_CLFLUSH |
|
|
+ CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | CPUID_PGE |
|
|
+ CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | CPUID_MCE |
|
|
+ CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | CPUID_DE |
|
|
+ CPUID_VME | CPUID_FP87,
|
|
+ .features[FEAT_1_ECX] =
|
|
+ CPUID_EXT_RDRAND | CPUID_EXT_F16C | CPUID_EXT_AVX |
|
|
+ CPUID_EXT_XSAVE | CPUID_EXT_AES | CPUID_EXT_POPCNT |
|
|
+ CPUID_EXT_MOVBE | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
|
|
+ CPUID_EXT_PCID | CPUID_EXT_CX16 | CPUID_EXT_FMA |
|
|
+ CPUID_EXT_SSSE3 | CPUID_EXT_MONITOR | CPUID_EXT_PCLMULQDQ |
|
|
+ CPUID_EXT_SSE3,
|
|
+ .features[FEAT_8000_0001_EDX] =
|
|
+ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_PDPE1GB |
|
|
+ CPUID_EXT2_FFXSR | CPUID_EXT2_MMXEXT | CPUID_EXT2_NX |
|
|
+ CPUID_EXT2_SYSCALL,
|
|
+ .features[FEAT_8000_0001_ECX] =
|
|
+ CPUID_EXT3_OSVW | CPUID_EXT3_3DNOWPREFETCH |
|
|
+ CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A | CPUID_EXT3_ABM |
|
|
+ CPUID_EXT3_CR8LEG | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM |
|
|
+ CPUID_EXT3_TOPOEXT | CPUID_EXT3_PERFCORE,
|
|
+ .features[FEAT_8000_0008_EBX] =
|
|
+ CPUID_8000_0008_EBX_CLZERO | CPUID_8000_0008_EBX_XSAVEERPTR |
|
|
+ CPUID_8000_0008_EBX_WBNOINVD | CPUID_8000_0008_EBX_IBPB |
|
|
+ CPUID_8000_0008_EBX_IBRS | CPUID_8000_0008_EBX_STIBP |
|
|
+ CPUID_8000_0008_EBX_STIBP_ALWAYS_ON |
|
|
+ CPUID_8000_0008_EBX_AMD_SSBD | CPUID_8000_0008_EBX_AMD_PSFD,
|
|
+ .features[FEAT_8000_0021_EAX] =
|
|
+ CPUID_8000_0021_EAX_No_NESTED_DATA_BP |
|
|
+ CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING |
|
|
+ CPUID_8000_0021_EAX_NULL_SEL_CLR_BASE |
|
|
+ CPUID_8000_0021_EAX_AUTO_IBRS,
|
|
+ .features[FEAT_7_0_EBX] =
|
|
+ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 |
|
|
+ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS |
|
|
+ CPUID_7_0_EBX_INVPCID | CPUID_7_0_EBX_AVX512F |
|
|
+ CPUID_7_0_EBX_AVX512DQ | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
|
|
+ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_AVX512IFMA |
|
|
+ CPUID_7_0_EBX_CLFLUSHOPT | CPUID_7_0_EBX_CLWB |
|
|
+ CPUID_7_0_EBX_AVX512CD | CPUID_7_0_EBX_SHA_NI |
|
|
+ CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512VL,
|
|
+ .features[FEAT_7_0_ECX] =
|
|
+ CPUID_7_0_ECX_AVX512_VBMI | CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU |
|
|
+ CPUID_7_0_ECX_AVX512_VBMI2 | CPUID_7_0_ECX_GFNI |
|
|
+ CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ |
|
|
+ CPUID_7_0_ECX_AVX512VNNI | CPUID_7_0_ECX_AVX512BITALG |
|
|
+ CPUID_7_0_ECX_AVX512_VPOPCNTDQ | CPUID_7_0_ECX_LA57 |
|
|
+ CPUID_7_0_ECX_RDPID,
|
|
+ .features[FEAT_7_0_EDX] =
|
|
+ CPUID_7_0_EDX_FSRM,
|
|
+ .features[FEAT_7_1_EAX] =
|
|
+ CPUID_7_1_EAX_AVX512_BF16,
|
|
+ .features[FEAT_XSAVE] =
|
|
+ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
|
|
+ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES,
|
|
+ .features[FEAT_6_EAX] =
|
|
+ CPUID_6_EAX_ARAT,
|
|
+ .features[FEAT_SVM] =
|
|
+ CPUID_SVM_NPT | CPUID_SVM_NRIPSAVE | CPUID_SVM_VNMI |
|
|
+ CPUID_SVM_SVME_ADDR_CHK,
|
|
+ .xlevel = 0x80000022,
|
|
+ .model_id = "AMD EPYC-Genoa Processor",
|
|
+ .cache_info = &epyc_genoa_cache_info,
|
|
+ },
|
|
};
|
|
|
|
/*
|
|
--
|
|
2.45.1.windows.1
|
|
|