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