drm/tests: hdmi: Fix memory leaks in drm_display_mode_from_cea_vic()
[drm/drm-misc.git] / Documentation / hwmon / fam15h_power.rst
blobfdde632c93a3838cc5ce2735d879eac9b118fcc2
1 Kernel driver fam15h_power
2 ==========================
4 Supported chips:
6 * AMD Family 15h Processors
8 * AMD Family 16h Processors
10   Prefix: 'fam15h_power'
12   Addresses scanned: PCI space
14   Datasheets:
16   - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors
17   - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 16h Processors
18   - AMD64 Architecture Programmer's Manual Volume 2: System Programming
20 Author: Andreas Herrmann <herrmann.der.user@googlemail.com>
22 Description
23 -----------
25 1) Processor TDP (Thermal design power)
27 Given a fixed frequency and voltage, the power consumption of a
28 processor varies based on the workload being executed. Derated power
29 is the power consumed when running a specific application. Thermal
30 design power (TDP) is an example of derated power.
32 This driver permits reading of registers providing power information
33 of AMD Family 15h and 16h processors via TDP algorithm.
35 For AMD Family 15h and 16h processors the following power values can
36 be calculated using different processor northbridge function
37 registers:
39 * BasePwrWatts:
40     Specifies in watts the maximum amount of power
41     consumed by the processor for NB and logic external to the core.
43 * ProcessorPwrWatts:
44     Specifies in watts the maximum amount of power
45     the processor can support.
46 * CurrPwrWatts:
47     Specifies in watts the current amount of power being
48     consumed by the processor.
50 This driver provides ProcessorPwrWatts and CurrPwrWatts:
52 * power1_crit (ProcessorPwrWatts)
53 * power1_input (CurrPwrWatts)
55 On multi-node processors the calculated value is for the entire
56 package and not for a single node. Thus the driver creates sysfs
57 attributes only for internal node0 of a multi-node processor.
59 2) Accumulated Power Mechanism
61 This driver also introduces an algorithm that should be used to
62 calculate the average power consumed by a processor during a
63 measurement interval Tm. The feature of accumulated power mechanism is
64 indicated by CPUID Fn8000_0007_EDX[12].
66 * Tsample:
67         compute unit power accumulator sample period
69 * Tref:
70         the PTSC counter period
72 * PTSC:
73         performance timestamp counter
75 * N:
76         the ratio of compute unit power accumulator sample period to the
77         PTSC period
79 * Jmax:
80         max compute unit accumulated power which is indicated by
81         MaxCpuSwPwrAcc MSR C001007b
83 * Jx/Jy:
84         compute unit accumulated power which is indicated by
85         CpuSwPwrAcc MSR C001007a
86 * Tx/Ty:
87         the value of performance timestamp counter which is indicated
88         by CU_PTSC MSR C0010280
90 * PwrCPUave:
91         CPU average power
93 i. Determine the ratio of Tsample to Tref by executing CPUID Fn8000_0007.
95         N = value of CPUID Fn8000_0007_ECX[CpuPwrSampleTimeRatio[15:0]].
97 ii. Read the full range of the cumulative energy value from the new
98     MSR MaxCpuSwPwrAcc.
100         Jmax = value returned.
102 iii. At time x, SW reads CpuSwPwrAcc MSR and samples the PTSC.
104         Jx = value read from CpuSwPwrAcc and Tx = value read from PTSC.
106 iv. At time y, SW reads CpuSwPwrAcc MSR and samples the PTSC.
108         Jy = value read from CpuSwPwrAcc and Ty = value read from PTSC.
110 v. Calculate the average power consumption for a compute unit over
111    time period (y-x). Unit of result is uWatt::
113         if (Jy < Jx) // Rollover has occurred
114                 Jdelta = (Jy + Jmax) - Jx
115         else
116                 Jdelta = Jy - Jx
117         PwrCPUave = N * Jdelta * 1000 / (Ty - Tx)
119 This driver provides PwrCPUave and interval(default is 10 millisecond
120 and maximum is 1 second):
122 * power1_average (PwrCPUave)
123 * power1_average_interval (Interval)
125 The power1_average_interval can be updated at /etc/sensors3.conf file
126 as below:
128 chip `fam15h_power-*`
129         set power1_average_interval 0.01
131 Then save it with "sensors -s".