path: root/Documentation/hwmon
diff options
authorGuenter Roeck <>2021-04-20 04:08:30 -0700
committerGuenter Roeck <>2021-04-20 06:52:08 -0700
commit9049572fb145746725b198a19e27fa2671b80448 (patch)
tree99766d2429bc786376499ae57b4183e61aea1dd3 /Documentation/hwmon
parente1576396a7a0c1657326ec20ca50599bdc4def0d (diff)
hwmon: Remove amd_energy driver
Commit 60268b0e8258 ("hwmon: (amd_energy) modify the visibility of the counters") restricted visibility of AMD energy counters to work around a side-channel attack using energy data to determine which instructions are executed. The attack is described in 'PLATYPUS: Software-based Power Side-Channel Attacks on x86'. It relies on quick and accurate energy readings. This change made the counters provided by the amd_energy driver effectively unusable for non-provileged users. However, unprivileged read access is the whole point of hardware monitoring attributes. An attempt to remedy the situation by limiting and randomizing access to chip registers was rejected by AMD. Since the driver is for all practical purposes unusable, remove it. Cc: Naveen Krishna Chatradhi <> Cc: Greg Kroah-Hartman <> Acked-by: Greg Kroah-Hartman <> Signed-off-by: Guenter Roeck <>
Diffstat (limited to 'Documentation/hwmon')
2 files changed, 0 insertions, 120 deletions
diff --git a/Documentation/hwmon/amd_energy.rst b/Documentation/hwmon/amd_energy.rst
deleted file mode 100644
index 9d58cd5ee3da..000000000000
--- a/Documentation/hwmon/amd_energy.rst
+++ /dev/null
@@ -1,119 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0
-Kernel driver amd_energy
-Supported chips:
-* AMD Family 17h Processors: Model 30h
-* AMD Family 19h Processors: Model 01h
- Prefix: 'amd_energy'
- Addresses used: RAPL MSRs
- Datasheets:
- - Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors
- - Preliminary Processor Programming Reference (PPR) for AMD Family 17h Model 31h, Revision B0 Processors
-Author: Naveen Krishna Chatradhi <>
-The Energy driver exposes the energy counters that are
-reported via the Running Average Power Limit (RAPL)
-Model-specific Registers (MSRs) via the hardware monitor
-(HWMON) sysfs interface.
-1. Power, Energy and Time Units
- shared with all cores in the socket
-2. Energy consumed by each Core
- 32-bitRO, Accumulator, core-level power reporting
-3. Energy consumed by Socket
- 32-bitRO, Accumulator, socket-level power reporting,
- shared with all cores in socket
-These registers are updated every 1ms and cleared on
-reset of the system.
-Note: If SMT is enabled, Linux enumerates all threads as cpus.
-Since, the energy status registers are accessed at core level,
-reading those registers from the sibling threads would result
-in duplicate values. Hence, energy counter entries are not
-populated for the siblings.
-Energy Caluclation
-Energy information (in Joules) is based on the multiplier,
-1/2^ESU; where ESU is an unsigned integer read from
-MSR_RAPL_POWER_UNIT register. Default value is 10000b,
-indicating energy status unit is 15.3 micro-Joules increment.
-Reported values are scaled as per the formula
-scaled value = ((1/2^ESU) * (Raw value) * 1000000UL) in uJoules
-Users calculate power for a given domain by calculating
- dEnergy/dTime for that domain.
-Energy accumulation
-Current, Socket energy status register is 32bit, assuming a 240W
-2P system, the register would wrap around in
- 2^32*15.3 e-6/240 * 2 = 547.60833024 secs to wrap(~9 mins)
-The Core energy register may wrap around after several days.
-To improve the wrap around time, a kernel thread is implemented
-to accumulate the socket energy counters and one core energy counter
-per run to a respective 64-bit counter. The kernel thread starts
-running during probe, wakes up every 100secs and stops running
-when driver is removed.
-Frequency of the accumulator thread is set during the probe
-based on the chosen energy unit resolution. For example
-A. fine grain (1.625 micro J)
-B. course grain (0.125 milli J)
-A socket and core energy read would return the current register
-value added to the respective energy accumulator.
-Sysfs attributes
-=============== ======== =====================================
-Attribute Label Description
-=============== ======== =====================================
-* For index N between [1] and [nr_cpus]
-=============== ======== ======================================
-energy[N]_input EcoreX Core Energy X = [0] to [nr_cpus - 1]
- Measured input core energy
-=============== ======== ======================================
-* For N between [nr_cpus] and [nr_cpus + nr_socks]
-=============== ======== ======================================
-energy[N]_input EsocketX Socket Energy X = [0] to [nr_socks -1]
- Measured input socket energy
-=============== ======== ======================================
-Note: To address CVE-2020-12912, the visibility of the energy[N]_input
-attributes is restricted to owner and groups only.
diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst
index 6bc696fa0ed5..9ed60fa84cbe 100644
--- a/Documentation/hwmon/index.rst
+++ b/Documentation/hwmon/index.rst
@@ -39,7 +39,6 @@ Hardware Monitoring Kernel Drivers
- amd_energy