summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCyrIng <labs@cyring.fr>2024-03-25 13:15:07 +0100
committerCyrIng <labs@cyring.fr>2024-03-25 13:15:07 +0100
commit3778ece916d702fe3811f387bc77b469b0552733 (patch)
treefb69b61ef4fe077dbd698b88cf23007db8218cab
parent3056554170ccb8fd490bd6b298338b39f5f5e09c (diff)
[AMD][Zen] Don't process APU' topology as CPU Complex
-rw-r--r--x86_64/corefreq-cli.c31
-rw-r--r--x86_64/corefreqk.c29
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