Skip to content

Commit a17c54f

Browse files
committed
[AMD] Add Family 1Ah Model 01h support with SMU-based per-CCD thermal mapping
1 parent 7754c3d commit a17c54f

6 files changed

Lines changed: 96 additions & 8 deletions

File tree

x86_64/amd_reg.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,23 @@
202202
#define SMU_AMD_THM_TCTL_REGISTER_F15H 0xd8200ca4
203203
#define SMU_AMD_THM_TCTL_REGISTER_F17H 0x00059800
204204

205-
/* Sources: PPR for AMD Family 19h Model 51h A1 : REGx59800...x59B14 */
206-
#define SMU_AMD_THM_TCTL_CCD_REGISTER_F17H 0x00059954
205+
/* Sources:
206+
* PPR for AMD Family 19h Model 51h A1 : REGx59800...x59B14
207+
* AMD Family 8Fh Model 71h : 0x00059954
208+
* AMD Family 1Ah Model 01h : 0x000599f0
209+
*/
210+
#define SMU_AMD_THM_TCTL_CCD_REGISTER_F17H \
211+
(SMU_AMD_THM_TCTL_REGISTER_F17H + 0x154)
207212

208213
#define SMU_AMD_THM_TCTL_CCD_REGISTER_F19H_11H \
209214
(SMU_AMD_THM_TCTL_REGISTER_F17H + 0x300)
210215

211216
#define SMU_AMD_THM_TCTL_CCD_REGISTER_F19H_61H \
212217
(SMU_AMD_THM_TCTL_REGISTER_F17H + 0x308)
213218

219+
#define SMU_AMD_THM_TCTL_CCD_REGISTER_F1AH_01H \
220+
(SMU_AMD_THM_TCTL_REGISTER_F17H + 0x1F0)
221+
214222
#define SMU_AMD_F17H_ZEN2_MCM_PWR 0x0005d2b4
215223
#define SMU_AMD_F17H_ZEN2_MCM_TDP 0x0005d2b8
216224
#define SMU_AMD_F17H_ZEN2_MCM_EDC 0x0005d2bc

x86_64/corefreq-cli.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7876,6 +7876,7 @@ void Topology(Window *win, CELL_FUNC OutFunc, unsigned int *cellPadding)
78767876
case AMD_Zen5_Eldora:
78777877
case AMD_Zen5_Turin:
78787878
case AMD_Zen5_Turin_Dense:
7879+
case AMD_Family_1Ah_01h:
78797880
case AMD_Zen5_SHP:
78807881
TopologyFunc = Topology_CCD;
78817882
OffLineItem = RSC(TOPOLOGY_OFF_2).CODE();

x86_64/corefreqd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7995,6 +7995,7 @@ void Topology(RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), RO(CORE) **RO(Core),
79957995
case AMD_Zen5_Eldora:
79967996
case AMD_Zen5_Turin:
79977997
case AMD_Zen5_Turin_Dense:
7998+
case AMD_Family_1Ah_01h:
79987999
case AMD_Zen5_KRK:
79998000
case AMD_Zen5_STXH:
80008001
case AMD_Zen5_SHP:

x86_64/corefreqk.c

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,6 +2225,7 @@ static void Map_AMD_Topology(void *arg)
22252225
case AMD_Zen5_Eldora:
22262226
case AMD_Zen5_Turin:
22272227
case AMD_Zen5_Turin_Dense:
2228+
case AMD_Family_1Ah_01h:
22282229
case AMD_Zen5_SHP:
22292230
case AMD_Family_17h:
22302231
case Hygon_Family_18h:
@@ -8360,6 +8361,7 @@ static bool Compute_AMD_Zen_Boost(unsigned int cpu)
83608361
case AMD_Zen5_KRK:
83618362
case AMD_Zen5_STX:
83628363
case AMD_Zen4_Genoa:
8364+
case AMD_Family_1Ah_01h:
83638365
break;
83648366
}
83658367
if (XtraCOF.value != 0)
@@ -9379,7 +9381,11 @@ static void Query_AMD_F1Ah_PerCluster(unsigned int cpu)
93799381
{
93809382
Query_AMD_Family_17h(cpu);
93819383

9382-
Core_AMD_Family_17h_Temp = CCD_AMD_Family_1Ah_Temp;
9384+
if (PUBLIC(RO(Proc))->ArchID == AMD_Family_1Ah_01h) {
9385+
Core_AMD_Family_17h_Temp = CCD_AMD_Family_1Ah_01h_Temp;
9386+
} else {
9387+
Core_AMD_Family_17h_Temp = CCD_AMD_Family_1Ah_Temp;
9388+
}
93839389
Pkg_AMD_Family_17h_Temp = Pkg_AMD_Family_1Ah_Temp;
93849390

93859391
if (cpu == PUBLIC(RO(Proc))->Service.Core) {
@@ -16723,7 +16729,7 @@ static void CCD_AMD_Family_1Ah_Temp(CORE_RO *Core)
1672316729
TCCD_REGISTER TccdSensor = {.value = 0};
1672416730

1672516731
Core_AMD_SMN_Read( TccdSensor,
16726-
(SMU_AMD_THM_TCTL_CCD_REGISTER_F19H_61H
16732+
/*TODO(Reverse)*/ (SMU_AMD_THM_TCTL_CCD_REGISTER_F19H_61H
1672716733
+ (Core->T.Cluster.CCD << 2)) );
1672816734

1672916735
Core_AMD_Zen_Filter_Temp( Core, TccdSensor.CurTmp,
@@ -16732,6 +16738,49 @@ static void CCD_AMD_Family_1Ah_Temp(CORE_RO *Core)
1673216738
Core_AMD_Family_17h_ThermTrip(Core);
1673316739
}
1673416740

16741+
static void CCD_AMD_Family_1Ah_01h_Thermal_Monitor(CORE_RO *Core,
16742+
const unsigned short TM_Remap[16])
16743+
{
16744+
TCCD_REGISTER TccdSensor = {.value = 0};
16745+
const unsigned short TM = TM_Remap[Core->T.Cluster.CCD & 0b1111];
16746+
16747+
Core_AMD_SMN_Read( TccdSensor,
16748+
(SMU_AMD_THM_TCTL_CCD_REGISTER_F1AH_01H
16749+
+ (TM << 2)) );
16750+
16751+
Core_AMD_Zen_Filter_Temp( Core, TccdSensor.CurTmp,
16752+
(TccdSensor.CurTempRangeSel == 1) );
16753+
16754+
Core_AMD_Family_17h_ThermTrip(Core);
16755+
}
16756+
16757+
static void CCD_AMD_Family_1Ah_01h_Temp(CORE_RO *Core)
16758+
{
16759+
CCD_AMD_Family_1Ah_01h_Thermal_Monitor(Core,
16760+
(const unsigned short[16])
16761+
{ /* THM0 */
16762+
[ 0] = 0,
16763+
[ 1] = 1,
16764+
[ 2] = 2,
16765+
[ 3] = 3,
16766+
/* THM1 */
16767+
[ 4] = 8,
16768+
[ 5] = 9,
16769+
[ 6] = 10,
16770+
[ 7] = 11,
16771+
/* THM2 */
16772+
[ 8] = 16,
16773+
[ 9] = 17,
16774+
[10] = 18,
16775+
[11] = 19,
16776+
/* THM3 */
16777+
[12] = 24,
16778+
[13] = 25,
16779+
[14] = 26,
16780+
[15] = 27
16781+
} );
16782+
}
16783+
1673516784

1673616785
static enum hrtimer_restart Cycle_VirtualMachine(struct hrtimer *pTimer)
1673716786
{

x86_64/corefreqk.h

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,7 @@ static void InitTimer_AMD_Zen4_Genoa(unsigned int cpu) ;
16111611

16121612
static void CTL_AMD_Family_1Ah_Temp(CORE_RO *Core) ;
16131613
static void CCD_AMD_Family_1Ah_Temp(CORE_RO *Core) ;
1614+
static void CCD_AMD_Family_1Ah_01h_Temp(CORE_RO *Core) ;
16141615
static void Pkg_AMD_Family_1Ah_Temp(PROC_RO *Pkg, CORE_RO* Core) ;
16151616

16161617
#define Exit_AMD_F1Ah Exit_AMD_F19h
@@ -1989,6 +1990,9 @@ static void InitTimer_AMD_Zen5_STX(unsigned int cpu) ;
19891990
#define _AMD_Zen4_STP {.ExtFamily=0xA, .Family=0xF, .ExtModel=0x1, .Model=0x8}
19901991

19911992
#define _AMD_Family_1Ah {.ExtFamily=0xB, .Family=0xF, .ExtModel=0x0, .Model=0x0}
1993+
#define _AMD_Family_1Ah_01h \
1994+
{.ExtFamily=0xB, .Family=0xF, .ExtModel=0x0, .Model=0x1}
1995+
19921996
#define _AMD_Zen5_STX {.ExtFamily=0xB, .Family=0xF, .ExtModel=0x2, .Model=0x4}
19931997
#define _AMD_Zen5_Eldora \
19941998
{.ExtFamily=0xB, .Family=0xF, .ExtModel=0x4, .Model=0x4}
@@ -14342,7 +14346,31 @@ static ARCH Arch[ARCHITECTURES] = {
1434214346
.SystemDriver = AMD_Zen_Driver,
1434314347
.Architecture = Arch_AMD_Zen5_Turin_Dense
1434414348
},
14345-
[AMD_Zen5_KRK] = { /*132*/
14349+
[AMD_Family_1Ah_01h] = { /*132*/
14350+
.Signature = _AMD_Family_1Ah_01h,
14351+
.Query = Query_AMD_F1Ah_PerCluster,
14352+
.Update = PerCore_AMD_Family_1Ah_Query,
14353+
.Start = Start_AMD_Family_1Ah,
14354+
.Stop = Stop_AMD_Family_1Ah,
14355+
.Exit = Exit_AMD_F1Ah,
14356+
.Timer = InitTimer_AMD_Family_1Ah,
14357+
.BaseClock = BaseClock_AMD_Family_1Ah,
14358+
.ClockMod = ClockMod_AMD_Zen,
14359+
.TurboClock = TurboClock_AMD_Zen,
14360+
.thermalFormula = THERMAL_FORMULA_AMD_ZEN5,
14361+
.voltageFormula = VOLTAGE_FORMULA_AMD_1Ah,
14362+
.powerFormula = POWER_FORMULA_AMD_1Ah,
14363+
.PCI_ids = PCI_AMD_1Ah_ids,
14364+
.Uncore = {
14365+
.Start = Start_Uncore_AMD_Family_1Ah,
14366+
.Stop = Stop_Uncore_AMD_Family_1Ah,
14367+
.ClockMod = NULL
14368+
},
14369+
.Specific = AMD_Zen5_F1Ah_Specific,
14370+
.SystemDriver = VOID_Driver,
14371+
.Architecture = Arch_AMD_Family_1Ah
14372+
},
14373+
[AMD_Zen5_KRK] = { /*133*/
1434614374
.Signature = _AMD_Zen5_KRK,
1434714375
.Query = Query_AMD_F1Ah_24h_60h_70h_PerSocket,
1434814376
.Update = PerCore_AMD_Family_1Ah_Query,
@@ -14366,7 +14394,7 @@ static ARCH Arch[ARCHITECTURES] = {
1436614394
.SystemDriver = AMD_Zen_Driver,
1436714395
.Architecture = Arch_AMD_Zen5_KRK
1436814396
},
14369-
[AMD_Zen5_STXH] = { /*133*/
14397+
[AMD_Zen5_STXH] = { /*134*/
1437014398
.Signature = _AMD_Zen5_STXH,
1437114399
.Query = Query_AMD_F1Ah_24h_60h_70h_PerSocket,
1437214400
.Update = PerCore_AMD_Family_1Ah_Query,
@@ -14390,7 +14418,7 @@ static ARCH Arch[ARCHITECTURES] = {
1439014418
.SystemDriver = AMD_Zen_Driver,
1439114419
.Architecture = Arch_AMD_Zen5_STXH
1439214420
},
14393-
[AMD_Zen5_SHP] = { /*134*/
14421+
[AMD_Zen5_SHP] = { /*135*/
1439414422
.Signature = _AMD_Zen5_SHP,
1439514423
.Query = Query_AMD_F1Ah_PerCluster,
1439614424
.Update = PerCore_AMD_Family_1Ah_Query,
@@ -14414,7 +14442,7 @@ static ARCH Arch[ARCHITECTURES] = {
1441414442
.SystemDriver = AMD_Zen_Driver,
1441514443
.Architecture = Arch_AMD_Zen5_SHP
1441614444
},
14417-
[AMD_Zen5_GRP] = { /*135*/
14445+
[AMD_Zen5_GRP] = { /*136*/
1441814446
.Signature = _AMD_Zen5_GRP,
1441914447
.Query = Query_AMD_F1Ah_24h_60h_70h_PerSocket,
1442014448
.Update = PerCore_AMD_Family_1Ah_Query,

x86_64/coretypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ enum { GenuineArch = 0,
155155
AMD_Zen5_Eldora,
156156
AMD_Zen5_Turin,
157157
AMD_Zen5_Turin_Dense,
158+
AMD_Family_1Ah_01h,
158159
AMD_Zen5_KRK,
159160
AMD_Zen5_STXH,
160161
AMD_Zen5_SHP,

0 commit comments

Comments
 (0)