diff options
author | CyrIng <labs@cyring.fr> | 2024-03-25 13:15:07 +0100 |
---|---|---|
committer | CyrIng <labs@cyring.fr> | 2024-03-25 13:15:07 +0100 |
commit | 3778ece916d702fe3811f387bc77b469b0552733 (patch) | |
tree | fb69b61ef4fe077dbd698b88cf23007db8218cab | |
parent | 3056554170ccb8fd490bd6b298338b39f5f5e09c (diff) |
[AMD][Zen] Don't process APU' topology as CPU Complex
-rw-r--r-- | x86_64/corefreq-cli.c | 31 | ||||
-rw-r--r-- | x86_64/corefreqk.c | 29 |
2 files changed, 38 insertions, 22 deletions
diff --git a/x86_64/corefreq-cli.c b/x86_64/corefreq-cli.c index 06e8995..8881f9e 100644 --- a/x86_64/corefreq-cli.c +++ b/x86_64/corefreq-cli.c @@ -7359,33 +7359,40 @@ void Topology(Window *win, CELL_FUNC OutFunc, unsigned int *cellPadding) TopologySubHeader[1] = TopologyAltSubHeader[1]; TopologyUpdate = Topology_CMP_Update; break; - case AMD_Family_17h: - case Hygon_Family_18h: - case AMD_Family_19h: - case AMD_Zen: + /* Zen APU */ case AMD_Zen_APU: - case AMD_ZenPlus: case AMD_ZenPlus_APU: case AMD_Zen_Dali: - case AMD_EPYC_Rome_CPK: case AMD_Zen2_Renoir: case AMD_Zen2_LCN: - case AMD_Zen2_MTS: case AMD_Zen2_Ariel: case AMD_Zen2_Jupiter: case AMD_Zen2_Galileo: case AMD_Zen2_MDN: - case AMD_Zen3_VMR: case AMD_Zen3_CZN: + case AMD_Zen3Plus_RMB: + case AMD_Zen4_PHX: + case AMD_Zen4_HWK: + case AMD_Zen4_PHX2: + TopologyFunc = Topology_SMT; + OffLineItem = RSC(TOPOLOGY_OFF_0).CODE(); + TopologySubHeader[1] = TopologyAltSubHeader[0]; + TopologyUpdate = Topology_SMT_Update; + break; + /* Zen CPU Complex */ + case AMD_Family_17h: + case Hygon_Family_18h: + case AMD_Family_19h: + case AMD_Zen: + case AMD_ZenPlus: + case AMD_EPYC_Rome_CPK: + case AMD_Zen2_MTS: + case AMD_Zen3_VMR: case AMD_EPYC_Milan: case AMD_Zen3_Chagall: case AMD_Zen3_Badami: - case AMD_Zen3Plus_RMB: case AMD_Zen4_Genoa: case AMD_Zen4_RPL: - case AMD_Zen4_PHX: - case AMD_Zen4_HWK: - case AMD_Zen4_PHX2: case AMD_Zen4_Bergamo: case AMD_Zen4_STP: TopologyFunc = Topology_CCD; diff --git a/x86_64/corefreqk.c b/x86_64/corefreqk.c index 3d9afa1..fc4feb7 100644 --- a/x86_64/corefreqk.c +++ b/x86_64/corefreqk.c @@ -2032,6 +2032,8 @@ static void Map_AMD_Topology(void *arg) .EAX = {0}, .EBX = {0}, .ECX = {0}, .EDX = {0} }; + bool CPU_Complex = true; + Cache_Topology(Core); RDMSR(Core->T.Base, MSR_IA32_APICBASE); @@ -2153,30 +2155,34 @@ static void Map_AMD_Topology(void *arg) Core->T.Cluster.CMP = leaf8000001e.EBX.CompUnitId; } break; - case AMD_Zen: + /* Zen APU */ case AMD_Zen_APU: - case AMD_ZenPlus: case AMD_ZenPlus_APU: case AMD_Zen_Dali: - case AMD_EPYC_Rome_CPK: case AMD_Zen2_Renoir: case AMD_Zen2_LCN: - case AMD_Zen2_MTS: case AMD_Zen2_Ariel: case AMD_Zen2_Jupiter: case AMD_Zen2_Galileo: case AMD_Zen2_MDN: - case AMD_Zen3_VMR: case AMD_Zen3_CZN: + case AMD_Zen3Plus_RMB: + case AMD_Zen4_PHX: + case AMD_Zen4_HWK: + case AMD_Zen4_PHX2: + CPU_Complex = false; + fallthrough; + /* Zen CPU Complex */ + case AMD_Zen: + case AMD_ZenPlus: + case AMD_EPYC_Rome_CPK: + case AMD_Zen2_MTS: + case AMD_Zen3_VMR: case AMD_EPYC_Milan: case AMD_Zen3_Chagall: case AMD_Zen3_Badami: - case AMD_Zen3Plus_RMB: case AMD_Zen4_Genoa: case AMD_Zen4_RPL: - case AMD_Zen4_PHX: - case AMD_Zen4_HWK: - case AMD_Zen4_PHX2: case AMD_Zen4_Bergamo: case AMD_Zen4_STP: case AMD_Family_17h: @@ -2307,9 +2313,12 @@ static void Map_AMD_Topology(void *arg) /* CCD has to remain within range values from 0 to 7 */ factor = factor & (Core->T.CoreID < 32); - Core->T.Cluster.Node=leaf8000001e.ECX.NodeId; + Core->T.Cluster.Node = leaf8000001e.ECX.NodeId; + + if (CPU_Complex == true ) { Core->T.Cluster.CCD = (Core->T.CoreID >> 3) << factor; Core->T.Cluster.CCX = Core->T.CoreID >> 2; + } } else { /* Fallback algorithm. */ Core->T.ApicID = leaf1_ebx.Init_APIC_ID; Core->T.PackageID = leaf1_ebx.Init_APIC_ID |