Skip to content

Commit 85b1e62

Browse files
committed
[AMD][VMR/RPL/GNR] Voltage Curve Optimizer HWM CHIPSET=AMD VCO
1 parent 4948b33 commit 85b1e62

File tree

5 files changed

+96
-31
lines changed

5 files changed

+96
-31
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ help:
351351
"| where <freq> is at least 4850000000 Hz |\n"\
352352
"| |\n"\
353353
"| HWM_CHIPSET=<chipset> |\n"\
354-
"| where <chipset> is W83627 or IT8720 or COMPATIBLE |\n"\
354+
"| where <chipset> is W83627; IT8720; AMD_VCO or COMPATIBLE |\n"\
355355
"| |\n"\
356356
"| Performance Counters: |\n"\
357357
"| ------------------------------------------------------- |\n"\

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ o---------------------------------------------------------------o
542542
| where <freq> is at least 4850000000 Hz |
543543
| |
544544
| HWM_CHIPSET=<chipset> |
545-
| where <chipset> is W83627 or IT8720 or COMPATIBLE |
545+
| where <chipset> is W83627; IT8720; AMD_VCO or COMPATIBLE |
546546
| |
547547
| Performance Counters: |
548548
| ------------------------------------------------------- |

x86_64/corefreqd.c

+60-25
Original file line numberDiff line numberDiff line change
@@ -784,48 +784,48 @@ static void (*ComputeVoltage_AMD_RMB_Matrix[4])(struct FLIP_FLOP*,
784784
[FORMULA_SCOPE_PKG ] = ComputeVoltage_AMD_RMB_PerPkg
785785
};
786786

787-
static void ComputeVoltage_AMD_19_61h( struct FLIP_FLOP *CFlip,
788-
RO(SHM_STRUCT) *RO(Shm),
789-
unsigned int cpu )
787+
static void ComputeVoltage_AMD_VCO( struct FLIP_FLOP *CFlip,
788+
RO(SHM_STRUCT) *RO(Shm),
789+
unsigned int cpu )
790790
{
791-
COMPUTE_VOLTAGE(AMD_19_61h,
791+
COMPUTE_VOLTAGE(AMD_VCO,
792792
CFlip->Voltage.Vcore,
793793
CFlip->Voltage.VID);
794794

795795
Core_ComputeVoltageLimits(&RO(Shm)->Cpu[cpu], CFlip);
796796
}
797797

798-
#define ComputeVoltage_AMD_19_61h_PerSMT ComputeVoltage_AMD_19_61h
798+
#define ComputeVoltage_AMD_VCO_PerSMT ComputeVoltage_AMD_VCO
799799

800-
static void ComputeVoltage_AMD_19_61h_PerCore( struct FLIP_FLOP *CFlip,
801-
RO(SHM_STRUCT) *RO(Shm),
802-
unsigned int cpu )
800+
static void ComputeVoltage_AMD_VCO_PerCore( struct FLIP_FLOP *CFlip,
801+
RO(SHM_STRUCT) *RO(Shm),
802+
unsigned int cpu )
803803
{
804804
if ((RO(Shm)->Cpu[cpu].Topology.ThreadID == 0)
805805
|| (RO(Shm)->Cpu[cpu].Topology.ThreadID == -1))
806806
{
807-
ComputeVoltage_AMD_19_61h(CFlip, RO(Shm), cpu);
807+
ComputeVoltage_AMD_VCO(CFlip, RO(Shm), cpu);
808808
}
809809
}
810810

811-
static void ComputeVoltage_AMD_19_61h_PerPkg( struct FLIP_FLOP *CFlip,
812-
RO(SHM_STRUCT) *RO(Shm),
813-
unsigned int cpu )
811+
static void ComputeVoltage_AMD_VCO_PerPkg( struct FLIP_FLOP *CFlip,
812+
RO(SHM_STRUCT) *RO(Shm),
813+
unsigned int cpu )
814814
{
815815
if (cpu == RO(Shm)->Proc.Service.Core)
816816
{
817-
ComputeVoltage_AMD_19_61h(CFlip, RO(Shm), cpu);
817+
ComputeVoltage_AMD_VCO(CFlip, RO(Shm), cpu);
818818
}
819819
}
820820

821-
static void (*ComputeVoltage_AMD_19_61h_Matrix[4])(struct FLIP_FLOP*,
821+
static void (*ComputeVoltage_AMD_VCO_Matrix[4])(struct FLIP_FLOP*,
822822
RO(SHM_STRUCT)*,
823823
unsigned int) = \
824824
{
825825
[FORMULA_SCOPE_NONE] = ComputeVoltage_None,
826-
[FORMULA_SCOPE_SMT ] = ComputeVoltage_AMD_19_61h_PerSMT,
827-
[FORMULA_SCOPE_CORE] = ComputeVoltage_AMD_19_61h_PerCore,
828-
[FORMULA_SCOPE_PKG ] = ComputeVoltage_AMD_19_61h_PerPkg
826+
[FORMULA_SCOPE_SMT ] = ComputeVoltage_AMD_VCO_PerSMT,
827+
[FORMULA_SCOPE_CORE] = ComputeVoltage_AMD_VCO_PerCore,
828+
[FORMULA_SCOPE_PKG ] = ComputeVoltage_AMD_VCO_PerPkg
829829
};
830830

831831
static void ComputeVoltage_Winbond_IO( struct FLIP_FLOP *CFlip,
@@ -1102,8 +1102,14 @@ static void *Core_Cycle(void *arg)
11021102
case VOLTAGE_KIND_AMD_RMB:
11031103
ComputeVoltageFormula = ComputeVoltage_AMD_RMB_Matrix;
11041104
break;
1105-
case VOLTAGE_KIND_AMD_19_61h:
1106-
ComputeVoltageFormula = ComputeVoltage_AMD_19_61h_Matrix;
1105+
case VOLTAGE_KIND_ZEN3_VCO:
1106+
ComputeVoltageFormula = ComputeVoltage_AMD_VCO_Matrix;
1107+
break;
1108+
case VOLTAGE_KIND_ZEN4_VCO:
1109+
ComputeVoltageFormula = ComputeVoltage_AMD_VCO_Matrix;
1110+
break;
1111+
case VOLTAGE_KIND_ZEN5_VCO:
1112+
ComputeVoltageFormula = ComputeVoltage_AMD_VCO_Matrix;
11071113
break;
11081114
case VOLTAGE_KIND_WINBOND_IO:
11091115
ComputeVoltageFormula = ComputeVoltage_Winbond_IO_Matrix;
@@ -8784,13 +8790,36 @@ static void Pkg_ComputeVoltage_AMD_RMB(struct PKG_FLIP_FLOP *PFlip)
87848790
PFlip->Voltage.VID.SOC);
87858791
}
87868792

8787-
static void Pkg_ComputeVoltage_AMD_19_61h(struct PKG_FLIP_FLOP *PFlip)
8793+
static void Pkg_ComputeVoltage_ZEN3_VCO(struct PKG_FLIP_FLOP *PFlip)
87888794
{
8789-
COMPUTE_VOLTAGE(AMD_19_61h,
8795+
COMPUTE_VOLTAGE(AMD_VCO,
87908796
PFlip->Voltage.CPU,
87918797
PFlip->Voltage.VID.CPU);
8792-
/*TODO
8793-
COMPUTE_VOLTAGE(AMD_19_61h,
8798+
8799+
COMPUTE_VOLTAGE(AMD_17h,
8800+
PFlip->Voltage.SOC,
8801+
PFlip->Voltage.VID.SOC);
8802+
}
8803+
8804+
static void Pkg_ComputeVoltage_ZEN4_VCO(struct PKG_FLIP_FLOP *PFlip)
8805+
{
8806+
COMPUTE_VOLTAGE(AMD_VCO,
8807+
PFlip->Voltage.CPU,
8808+
PFlip->Voltage.VID.CPU);
8809+
8810+
COMPUTE_VOLTAGE(AMD_RMB,
8811+
PFlip->Voltage.SOC,
8812+
PFlip->Voltage.VID.SOC);
8813+
}
8814+
8815+
static void Pkg_ComputeVoltage_ZEN5_VCO(struct PKG_FLIP_FLOP *PFlip)
8816+
{
8817+
COMPUTE_VOLTAGE(AMD_VCO,
8818+
PFlip->Voltage.CPU,
8819+
PFlip->Voltage.VID.CPU);
8820+
8821+
/*TODO(Unknown SOC voltage register)
8822+
COMPUTE_VOLTAGE(AMD_VCO,
87948823
PFlip->Voltage.SOC,
87958824
PFlip->Voltage.VID.SOC); */
87968825
}
@@ -8951,8 +8980,14 @@ REASON_CODE Core_Manager(REF *Ref)
89518980
case VOLTAGE_KIND_AMD_RMB:
89528981
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_AMD_RMB;
89538982
break;
8954-
case VOLTAGE_KIND_AMD_19_61h:
8955-
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_AMD_19_61h;
8983+
case VOLTAGE_KIND_ZEN3_VCO:
8984+
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_ZEN3_VCO;
8985+
break;
8986+
case VOLTAGE_KIND_ZEN4_VCO:
8987+
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_ZEN4_VCO;
8988+
break;
8989+
case VOLTAGE_KIND_ZEN5_VCO:
8990+
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_ZEN5_VCO;
89568991
break;
89578992
case VOLTAGE_KIND_WINBOND_IO:
89588993
Pkg_ComputeVoltageFormula = Pkg_ComputeVoltage_Winbond_IO;

x86_64/corefreqk.h

+27-1
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,8 @@ ASM_COUNTERx7(r10, r11, r12, r13, r14, r15,r9,r8,ASM_RDTSCP,mem_tsc,__VA_ARGS__)
628628
#define COMPATIBLE 0xffff
629629
#define W83627 0x5ca3
630630
#define IT8720 0x8720
631+
/* Voltage Curve Optimizer */
632+
#define AMD_VCO 0xfacc
631633

632634
/*
633635
* --- Core_AMD_SMN_Read and Core_AMD_SMN_Write ---
@@ -12222,7 +12224,15 @@ static ARCH Arch[ARCHITECTURES] = {
1222212224
.ClockMod = ClockMod_AMD_Zen,
1222312225
.TurboClock = TurboClock_AMD_Zen,
1222412226
.thermalFormula = THERMAL_FORMULA_AMD_ZEN3,
12227+
#if defined(HWM_CHIPSET)
12228+
#if (HWM_CHIPSET == AMD_VCO)
12229+
.voltageFormula = VOLTAGE_FORMULA_ZEN3_VCO,
12230+
#else
12231+
.voltageFormula = VOLTAGE_FORMULA_AMD_19h,
12232+
#endif
12233+
#else
1222512234
.voltageFormula = VOLTAGE_FORMULA_AMD_19h,
12235+
#endif
1222612236
.powerFormula = POWER_FORMULA_AMD_19h,
1222712237
.PCI_ids = PCI_AMD_19h_ids,
1222812238
.Uncore = {
@@ -12390,7 +12400,15 @@ static ARCH Arch[ARCHITECTURES] = {
1239012400
.ClockMod = ClockMod_AMD_Zen,
1239112401
.TurboClock = TurboClock_AMD_Zen,
1239212402
.thermalFormula = THERMAL_FORMULA_AMD_ZEN4,
12393-
.voltageFormula = VOLTAGE_FORMULA_AMD_19_61h,
12403+
#if defined(HWM_CHIPSET)
12404+
#if (HWM_CHIPSET == AMD_VCO)
12405+
.voltageFormula = VOLTAGE_FORMULA_ZEN4_VCO,
12406+
#else
12407+
.voltageFormula = VOLTAGE_FORMULA_AMD_ZEN4,
12408+
#endif
12409+
#else
12410+
.voltageFormula = VOLTAGE_FORMULA_AMD_ZEN4,
12411+
#endif
1239412412
.powerFormula = POWER_FORMULA_AMD_19h,
1239512413
.PCI_ids = PCI_AMD_19h_ids,
1239612414
.Uncore = {
@@ -12582,7 +12600,15 @@ static ARCH Arch[ARCHITECTURES] = {
1258212600
.ClockMod = ClockMod_AMD_Zen,
1258312601
.TurboClock = TurboClock_AMD_Zen,
1258412602
.thermalFormula = THERMAL_FORMULA_AMD_1Ah,
12603+
#if defined(HWM_CHIPSET)
12604+
#if (HWM_CHIPSET == AMD_VCO)
12605+
.voltageFormula = VOLTAGE_FORMULA_ZEN5_VCO,
12606+
#else
1258512607
.voltageFormula = VOLTAGE_FORMULA_AMD_1Ah,
12608+
#endif
12609+
#else
12610+
.voltageFormula = VOLTAGE_FORMULA_AMD_1Ah,
12611+
#endif
1258612612
.powerFormula = POWER_FORMULA_AMD_1Ah,
1258712613
.PCI_ids = PCI_AMD_1Ah_ids,
1258812614
.Uncore = {

x86_64/coretypes.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,9 @@ enum VOLTAGE_KIND {
582582
VOLTAGE_KIND_AMD_15h = 0b000001000001000000000000,
583583
VOLTAGE_KIND_AMD_17h = 0b000100000001000000000000,
584584
VOLTAGE_KIND_AMD_RMB = 0b000010000001000000000000,
585-
VOLTAGE_KIND_AMD_19_61h = 0b000000100001000000000000,
585+
VOLTAGE_KIND_ZEN3_VCO = 0b000000100001000000000000,
586+
VOLTAGE_KIND_ZEN4_VCO = 0b000000010001000000000000,
587+
VOLTAGE_KIND_ZEN5_VCO = 0b000000001001000000000000,
586588
VOLTAGE_KIND_WINBOND_IO = 0b001000000000000000000000,
587589
VOLTAGE_KIND_ITETECH_IO = 0b010000000000000000000000
588590
};
@@ -602,7 +604,9 @@ VOLTAGE_FORMULA_AMD_15h =(VOLTAGE_KIND_AMD_15h << 8) | FORMULA_SCOPE_SMT,
602604
VOLTAGE_FORMULA_AMD_17h =(VOLTAGE_KIND_AMD_17h << 8) | FORMULA_SCOPE_SMT,
603605
VOLTAGE_FORMULA_AMD_RMB =(VOLTAGE_KIND_AMD_RMB << 8) | FORMULA_SCOPE_PKG,
604606
VOLTAGE_FORMULA_AMD_ZEN4 =(VOLTAGE_KIND_AMD_RMB << 8) | FORMULA_SCOPE_SMT,
605-
VOLTAGE_FORMULA_AMD_19_61h =(VOLTAGE_KIND_AMD_19_61h << 8) | FORMULA_SCOPE_SMT,
607+
VOLTAGE_FORMULA_ZEN3_VCO =(VOLTAGE_KIND_ZEN3_VCO << 8) | FORMULA_SCOPE_SMT,
608+
VOLTAGE_FORMULA_ZEN4_VCO =(VOLTAGE_KIND_ZEN4_VCO << 8) | FORMULA_SCOPE_SMT,
609+
VOLTAGE_FORMULA_ZEN5_VCO =(VOLTAGE_KIND_ZEN5_VCO << 8) | FORMULA_SCOPE_SMT,
606610
VOLTAGE_FORMULA_WINBOND_IO =(VOLTAGE_KIND_WINBOND_IO << 8) | FORMULA_SCOPE_PKG,
607611
VOLTAGE_FORMULA_ITETECH_IO =(VOLTAGE_KIND_ITETECH_IO << 8) | FORMULA_SCOPE_PKG
608612
};
@@ -781,7 +785,7 @@ POWER_FORMULA_AMD_17h =(POWER_KIND_AMD_17h << 8) | FORMULA_SCOPE_CORE
781785
#define COMPUTE_VOLTAGE_AMD_RMB(Vcore, VID) \
782786
(Vcore = 0.00625 * (double) (VID))
783787

784-
#define COMPUTE_VOLTAGE_AMD_19_61h(Vcore, VID) \
788+
#define COMPUTE_VOLTAGE_AMD_VCO(Vcore, VID) \
785789
( Vcore = 2.09 - ((0.005 * (double) (VID)) + 0.245) )
786790

787791
#define COMPUTE_VOLTAGE_WINBOND_IO(Vcore, VID) \

0 commit comments

Comments
 (0)