i386/cpu: Add legacy_amd_cache_info cache model
Based on legacy_l1d_cachei_amd, legacy_l1i_cache_amd, legacy_l2_cache_amd and legacy_l3_cache, build a complete legacy AMD cache model, which can clarify the purpose of these trivial legacy cache models, simplify the initialization of cache info in X86CPUState, and make it easier to handle compatibility later. Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com> Tested-by: Yi Lai <yi1.lai@intel.com> Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Link: https://lore.kernel.org/r/20250711102143.1622339-13-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a9b6cca2df
commit
dcec3c18f9
1 changed files with 53 additions and 59 deletions
|
|
@ -640,60 +640,58 @@ static void encode_topo_cpuid8000001e(X86CPU *cpu, X86CPUTopoInfo *topo_info,
|
|||
* These are legacy cache values. If there is a need to change any
|
||||
* of these values please use builtin_x86_defs
|
||||
*/
|
||||
static CPUCacheInfo legacy_l1d_cache_amd = {
|
||||
.type = DATA_CACHE,
|
||||
.level = 1,
|
||||
.size = 64 * KiB,
|
||||
.self_init = 1,
|
||||
.line_size = 64,
|
||||
.associativity = 2,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.no_invd_sharing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
};
|
||||
|
||||
static CPUCacheInfo legacy_l1i_cache_amd = {
|
||||
.type = INSTRUCTION_CACHE,
|
||||
.level = 1,
|
||||
.size = 64 * KiB,
|
||||
.self_init = 1,
|
||||
.line_size = 64,
|
||||
.associativity = 2,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.no_invd_sharing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
};
|
||||
|
||||
static CPUCacheInfo legacy_l2_cache_amd = {
|
||||
.type = UNIFIED_CACHE,
|
||||
.level = 2,
|
||||
.size = 512 * KiB,
|
||||
.line_size = 64,
|
||||
.lines_per_tag = 1,
|
||||
.associativity = 16,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
};
|
||||
|
||||
/* Level 3 unified cache: */
|
||||
static CPUCacheInfo legacy_l3_cache = {
|
||||
.type = UNIFIED_CACHE,
|
||||
.level = 3,
|
||||
.size = 16 * MiB,
|
||||
.line_size = 64,
|
||||
.associativity = 16,
|
||||
.sets = 16384,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.self_init = true,
|
||||
.inclusive = true,
|
||||
.complex_indexing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_DIE,
|
||||
static const CPUCaches legacy_amd_cache_info = {
|
||||
.l1d_cache = &(CPUCacheInfo) {
|
||||
.type = DATA_CACHE,
|
||||
.level = 1,
|
||||
.size = 64 * KiB,
|
||||
.self_init = 1,
|
||||
.line_size = 64,
|
||||
.associativity = 2,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.no_invd_sharing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
},
|
||||
.l1i_cache = &(CPUCacheInfo) {
|
||||
.type = INSTRUCTION_CACHE,
|
||||
.level = 1,
|
||||
.size = 64 * KiB,
|
||||
.self_init = 1,
|
||||
.line_size = 64,
|
||||
.associativity = 2,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.no_invd_sharing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
},
|
||||
.l2_cache = &(CPUCacheInfo) {
|
||||
.type = UNIFIED_CACHE,
|
||||
.level = 2,
|
||||
.size = 512 * KiB,
|
||||
.line_size = 64,
|
||||
.lines_per_tag = 1,
|
||||
.associativity = 16,
|
||||
.sets = 512,
|
||||
.partitions = 1,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_CORE,
|
||||
},
|
||||
.l3_cache = &(CPUCacheInfo) {
|
||||
.type = UNIFIED_CACHE,
|
||||
.level = 3,
|
||||
.size = 16 * MiB,
|
||||
.line_size = 64,
|
||||
.associativity = 16,
|
||||
.sets = 16384,
|
||||
.partitions = 1,
|
||||
.lines_per_tag = 1,
|
||||
.self_init = true,
|
||||
.inclusive = true,
|
||||
.complex_indexing = true,
|
||||
.share_level = CPU_TOPOLOGY_LEVEL_DIE,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -8991,11 +8989,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||
}
|
||||
|
||||
env->cache_info_cpuid4 = legacy_intel_cache_info;
|
||||
|
||||
env->cache_info_amd.l1d_cache = &legacy_l1d_cache_amd;
|
||||
env->cache_info_amd.l1i_cache = &legacy_l1i_cache_amd;
|
||||
env->cache_info_amd.l2_cache = &legacy_l2_cache_amd;
|
||||
env->cache_info_amd.l3_cache = &legacy_l3_cache;
|
||||
env->cache_info_amd = legacy_amd_cache_info;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue