summaryrefslogtreecommitdiff
path: root/src/cpu/intel/model_206ax
diff options
context:
space:
mode:
authorAnastasios Koutian <akoutian2@gmail.com>2024-06-29 09:12:08 +0100
committerNico Huber <nico.h@gmx.de>2024-07-15 16:34:11 +0000
commit3dbf0c5c5f9a44a346ad6c1c0af69dca7d84ef97 (patch)
treeb9bed73ba9d0210c31ecacae316f2ab694824359 /src/cpu/intel/model_206ax
parenta5705f701d5ee5318a8f6c75f3499ae0362ec4aa (diff)
cpu/intel/model_206ax: Allow package power limit clamping
Setting the clamp bit allows the CPU to operate below the highest non-turbo frequency in order to obey the power limit. Tested on ThinkPad T420 with the i7-3940XM. Change-Id: Id0c0aedc29aca121d0fd1d8f8826089e13a026be Signed-off-by: Anastasios Koutian <akoutian2@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/83270 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
Diffstat (limited to 'src/cpu/intel/model_206ax')
-rw-r--r--src/cpu/intel/model_206ax/chip.h4
-rw-r--r--src/cpu/intel/model_206ax/model_206ax_init.c8
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cpu/intel/model_206ax/chip.h b/src/cpu/intel/model_206ax/chip.h
index f26fa61eca..1102cfeb9c 100644
--- a/src/cpu/intel/model_206ax/chip.h
+++ b/src/cpu/intel/model_206ax/chip.h
@@ -3,6 +3,8 @@
#ifndef __CPU_INTEL_MODEL_206AX_CHIP_H__
#define __CPU_INTEL_MODEL_206AX_CHIP_H__
+#include "stdbool.h"
+
/* Keep this in sync with acpi.c */
enum cpu_acpi_level {
CPU_ACPI_DISABLED = 0,
@@ -44,7 +46,9 @@ struct cpu_intel_model_206ax_config {
int tcc_offset; /* TCC Activation Offset */
unsigned int pl1_mw; /* Long-term power limit in milliwatts */
+ bool pl1_clamp; /* Long-term power limit clamping limitation */
unsigned int pl2_mw; /* Short-term power limit in milliwatts */
+ bool pl2_clamp; /* Short-term power limit clamping limitation */
int pp0_current_limit; /* Primary Plane Current Limit (Icc) in Amps */
int pp1_current_limit; /* Secondary Plane Current Limit (IAXG) in Amps */
diff --git a/src/cpu/intel/model_206ax/model_206ax_init.c b/src/cpu/intel/model_206ax/model_206ax_init.c
index aafb4dcbad..0d0e3f749a 100644
--- a/src/cpu/intel/model_206ax/model_206ax_init.c
+++ b/src/cpu/intel/model_206ax/model_206ax_init.c
@@ -141,6 +141,10 @@ void set_power_limits(u8 power_limit_1_time)
/* Set long term power limit to TDP */
limit.lo |= tdp & PKG_POWER_LIMIT_MASK;
}
+ if (conf->pl2_clamp) {
+ printk(BIOS_DEBUG, "Enabling PL1 clamping limitation\n");
+ limit.lo |= PKG_POWER_LIMIT_CLAMP;
+ }
limit.lo |= PKG_POWER_LIMIT_EN;
limit.lo |= (power_limit_1_val & PKG_POWER_LIMIT_TIME_MASK) <<
PKG_POWER_LIMIT_TIME_SHIFT;
@@ -153,6 +157,10 @@ void set_power_limits(u8 power_limit_1_time)
/* Set short term power limit to 1.25 * TDP */
limit.hi |= ((tdp * 125) / 100) & PKG_POWER_LIMIT_MASK;
}
+ if (conf->pl2_clamp) {
+ printk(BIOS_DEBUG, "Enabling PL2 clamping limitation\n");
+ limit.hi |= PKG_POWER_LIMIT_CLAMP;
+ }
limit.hi |= PKG_POWER_LIMIT_EN;
/* Power limit 2 time is only programmable on SNB EP/EX */