204 lines
8.2 KiB
Diff
204 lines
8.2 KiB
Diff
From 03011d00cfb5862edb7394a9b79b269198af5c89 Mon Sep 17 00:00:00 2001
|
|
From: Bandan Das <bsd@redhat.com>
|
|
Date: Wed, 9 Aug 2023 12:48:34 -0400
|
|
Subject: [PATCH 7/7] target/i386: Add EPYC-Genoa model to support Zen 4
|
|
processor series
|
|
|
|
RH-Author: Bandan Das <None>
|
|
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
|
RH-Bugzilla: 2094913
|
|
RH-Acked-by: Wei Huang <None>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Commit: [7/7] 158091c691169a5d30c7c8005371ee7a0d9fc4ce (bdas1/qemu-kvm)
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
|
|
|
commit 166b1741884dd4fd7090b753cd7333868457a29b
|
|
Author: Babu Moger <babu.moger@amd.com>
|
|
Date: Thu May 4 15:53:12 2023 -0500
|
|
|
|
target/i386: Add EPYC-Genoa model to support Zen 4 processor series
|
|
|
|
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>
|
|
|
|
Signed-off-by: Bandan Das <bsd@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 f1baefe775..b27db050a2 100644
|
|
--- a/target/i386/cpu.c
|
|
+++ b/target/i386/cpu.c
|
|
@@ -1973,6 +1973,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:
|
|
*
|
|
@@ -4493,6 +4543,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.39.3
|
|
|