xref: /openbmc/linux/Documentation/hwmon/fam15h_power.rst (revision c39f2d9db0fd81ea20bb5cce9b3f082ca63753e2)
1*7ebd8b66SMauro Carvalho ChehabKernel driver fam15h_power
2*7ebd8b66SMauro Carvalho Chehab==========================
3*7ebd8b66SMauro Carvalho Chehab
4*7ebd8b66SMauro Carvalho ChehabSupported chips:
5*7ebd8b66SMauro Carvalho Chehab
6*7ebd8b66SMauro Carvalho Chehab* AMD Family 15h Processors
7*7ebd8b66SMauro Carvalho Chehab
8*7ebd8b66SMauro Carvalho Chehab* AMD Family 16h Processors
9*7ebd8b66SMauro Carvalho Chehab
10*7ebd8b66SMauro Carvalho Chehab  Prefix: 'fam15h_power'
11*7ebd8b66SMauro Carvalho Chehab
12*7ebd8b66SMauro Carvalho Chehab  Addresses scanned: PCI space
13*7ebd8b66SMauro Carvalho Chehab
14*7ebd8b66SMauro Carvalho Chehab  Datasheets:
15*7ebd8b66SMauro Carvalho Chehab
16*7ebd8b66SMauro Carvalho Chehab  - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors
17*7ebd8b66SMauro Carvalho Chehab  - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 16h Processors
18*7ebd8b66SMauro Carvalho Chehab  - AMD64 Architecture Programmer's Manual Volume 2: System Programming
19*7ebd8b66SMauro Carvalho Chehab
20*7ebd8b66SMauro Carvalho ChehabAuthor: Andreas Herrmann <herrmann.der.user@googlemail.com>
21*7ebd8b66SMauro Carvalho Chehab
22*7ebd8b66SMauro Carvalho ChehabDescription
23*7ebd8b66SMauro Carvalho Chehab-----------
24*7ebd8b66SMauro Carvalho Chehab
25*7ebd8b66SMauro Carvalho Chehab1) Processor TDP (Thermal design power)
26*7ebd8b66SMauro Carvalho Chehab
27*7ebd8b66SMauro Carvalho ChehabGiven a fixed frequency and voltage, the power consumption of a
28*7ebd8b66SMauro Carvalho Chehabprocessor varies based on the workload being executed. Derated power
29*7ebd8b66SMauro Carvalho Chehabis the power consumed when running a specific application. Thermal
30*7ebd8b66SMauro Carvalho Chehabdesign power (TDP) is an example of derated power.
31*7ebd8b66SMauro Carvalho Chehab
32*7ebd8b66SMauro Carvalho ChehabThis driver permits reading of registers providing power information
33*7ebd8b66SMauro Carvalho Chehabof AMD Family 15h and 16h processors via TDP algorithm.
34*7ebd8b66SMauro Carvalho Chehab
35*7ebd8b66SMauro Carvalho ChehabFor AMD Family 15h and 16h processors the following power values can
36*7ebd8b66SMauro Carvalho Chehabbe calculated using different processor northbridge function
37*7ebd8b66SMauro Carvalho Chehabregisters:
38*7ebd8b66SMauro Carvalho Chehab
39*7ebd8b66SMauro Carvalho Chehab* BasePwrWatts:
40*7ebd8b66SMauro Carvalho Chehab    Specifies in watts the maximum amount of power
41*7ebd8b66SMauro Carvalho Chehab    consumed by the processor for NB and logic external to the core.
42*7ebd8b66SMauro Carvalho Chehab
43*7ebd8b66SMauro Carvalho Chehab* ProcessorPwrWatts:
44*7ebd8b66SMauro Carvalho Chehab    Specifies in watts the maximum amount of power
45*7ebd8b66SMauro Carvalho Chehab    the processor can support.
46*7ebd8b66SMauro Carvalho Chehab* CurrPwrWatts:
47*7ebd8b66SMauro Carvalho Chehab    Specifies in watts the current amount of power being
48*7ebd8b66SMauro Carvalho Chehab    consumed by the processor.
49*7ebd8b66SMauro Carvalho Chehab
50*7ebd8b66SMauro Carvalho ChehabThis driver provides ProcessorPwrWatts and CurrPwrWatts:
51*7ebd8b66SMauro Carvalho Chehab
52*7ebd8b66SMauro Carvalho Chehab* power1_crit (ProcessorPwrWatts)
53*7ebd8b66SMauro Carvalho Chehab* power1_input (CurrPwrWatts)
54*7ebd8b66SMauro Carvalho Chehab
55*7ebd8b66SMauro Carvalho ChehabOn multi-node processors the calculated value is for the entire
56*7ebd8b66SMauro Carvalho Chehabpackage and not for a single node. Thus the driver creates sysfs
57*7ebd8b66SMauro Carvalho Chehabattributes only for internal node0 of a multi-node processor.
58*7ebd8b66SMauro Carvalho Chehab
59*7ebd8b66SMauro Carvalho Chehab2) Accumulated Power Mechanism
60*7ebd8b66SMauro Carvalho Chehab
61*7ebd8b66SMauro Carvalho ChehabThis driver also introduces an algorithm that should be used to
62*7ebd8b66SMauro Carvalho Chehabcalculate the average power consumed by a processor during a
63*7ebd8b66SMauro Carvalho Chehabmeasurement interval Tm. The feature of accumulated power mechanism is
64*7ebd8b66SMauro Carvalho Chehabindicated by CPUID Fn8000_0007_EDX[12].
65*7ebd8b66SMauro Carvalho Chehab
66*7ebd8b66SMauro Carvalho Chehab* Tsample:
67*7ebd8b66SMauro Carvalho Chehab	compute unit power accumulator sample period
68*7ebd8b66SMauro Carvalho Chehab
69*7ebd8b66SMauro Carvalho Chehab* Tref:
70*7ebd8b66SMauro Carvalho Chehab	the PTSC counter period
71*7ebd8b66SMauro Carvalho Chehab
72*7ebd8b66SMauro Carvalho Chehab* PTSC:
73*7ebd8b66SMauro Carvalho Chehab	performance timestamp counter
74*7ebd8b66SMauro Carvalho Chehab
75*7ebd8b66SMauro Carvalho Chehab* N:
76*7ebd8b66SMauro Carvalho Chehab	the ratio of compute unit power accumulator sample period to the
77*7ebd8b66SMauro Carvalho Chehab	PTSC period
78*7ebd8b66SMauro Carvalho Chehab
79*7ebd8b66SMauro Carvalho Chehab* Jmax:
80*7ebd8b66SMauro Carvalho Chehab	max compute unit accumulated power which is indicated by
81*7ebd8b66SMauro Carvalho Chehab	MaxCpuSwPwrAcc MSR C001007b
82*7ebd8b66SMauro Carvalho Chehab
83*7ebd8b66SMauro Carvalho Chehab* Jx/Jy:
84*7ebd8b66SMauro Carvalho Chehab	compute unit accumulated power which is indicated by
85*7ebd8b66SMauro Carvalho Chehab	CpuSwPwrAcc MSR C001007a
86*7ebd8b66SMauro Carvalho Chehab* Tx/Ty:
87*7ebd8b66SMauro Carvalho Chehab	the value of performance timestamp counter which is indicated
88*7ebd8b66SMauro Carvalho Chehab	by CU_PTSC MSR C0010280
89*7ebd8b66SMauro Carvalho Chehab
90*7ebd8b66SMauro Carvalho Chehab* PwrCPUave:
91*7ebd8b66SMauro Carvalho Chehab	CPU average power
92*7ebd8b66SMauro Carvalho Chehab
93*7ebd8b66SMauro Carvalho Chehabi. Determine the ratio of Tsample to Tref by executing CPUID Fn8000_0007.
94*7ebd8b66SMauro Carvalho Chehab
95*7ebd8b66SMauro Carvalho Chehab	N = value of CPUID Fn8000_0007_ECX[CpuPwrSampleTimeRatio[15:0]].
96*7ebd8b66SMauro Carvalho Chehab
97*7ebd8b66SMauro Carvalho Chehabii. Read the full range of the cumulative energy value from the new
98*7ebd8b66SMauro Carvalho Chehab    MSR MaxCpuSwPwrAcc.
99*7ebd8b66SMauro Carvalho Chehab
100*7ebd8b66SMauro Carvalho Chehab	Jmax = value returned.
101*7ebd8b66SMauro Carvalho Chehab
102*7ebd8b66SMauro Carvalho Chehabiii. At time x, SW reads CpuSwPwrAcc MSR and samples the PTSC.
103*7ebd8b66SMauro Carvalho Chehab
104*7ebd8b66SMauro Carvalho Chehab	Jx = value read from CpuSwPwrAcc and Tx = value read from PTSC.
105*7ebd8b66SMauro Carvalho Chehab
106*7ebd8b66SMauro Carvalho Chehabiv. At time y, SW reads CpuSwPwrAcc MSR and samples the PTSC.
107*7ebd8b66SMauro Carvalho Chehab
108*7ebd8b66SMauro Carvalho Chehab	Jy = value read from CpuSwPwrAcc and Ty = value read from PTSC.
109*7ebd8b66SMauro Carvalho Chehab
110*7ebd8b66SMauro Carvalho Chehabv. Calculate the average power consumption for a compute unit over
111*7ebd8b66SMauro Carvalho Chehab   time period (y-x). Unit of result is uWatt::
112*7ebd8b66SMauro Carvalho Chehab
113*7ebd8b66SMauro Carvalho Chehab	if (Jy < Jx) // Rollover has occurred
114*7ebd8b66SMauro Carvalho Chehab		Jdelta = (Jy + Jmax) - Jx
115*7ebd8b66SMauro Carvalho Chehab	else
116*7ebd8b66SMauro Carvalho Chehab		Jdelta = Jy - Jx
117*7ebd8b66SMauro Carvalho Chehab	PwrCPUave = N * Jdelta * 1000 / (Ty - Tx)
118*7ebd8b66SMauro Carvalho Chehab
119*7ebd8b66SMauro Carvalho ChehabThis driver provides PwrCPUave and interval(default is 10 millisecond
120*7ebd8b66SMauro Carvalho Chehaband maximum is 1 second):
121*7ebd8b66SMauro Carvalho Chehab
122*7ebd8b66SMauro Carvalho Chehab* power1_average (PwrCPUave)
123*7ebd8b66SMauro Carvalho Chehab* power1_average_interval (Interval)
124*7ebd8b66SMauro Carvalho Chehab
125*7ebd8b66SMauro Carvalho ChehabThe power1_average_interval can be updated at /etc/sensors3.conf file
126*7ebd8b66SMauro Carvalho Chehabas below:
127*7ebd8b66SMauro Carvalho Chehab
128*7ebd8b66SMauro Carvalho Chehabchip `fam15h_power-*`
129*7ebd8b66SMauro Carvalho Chehab	set power1_average_interval 0.01
130*7ebd8b66SMauro Carvalho Chehab
131*7ebd8b66SMauro Carvalho ChehabThen save it with "sensors -s".
132