summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorSumeet Pawnikar <sumeet.r.pawnikar@intel.com>2022-06-08 17:43:36 +0530
committerFelix Held <felix-coreboot@felixheld.de>2023-04-12 14:11:45 +0000
commit2f7fa5543308e83787b7cef6e83e20e1e3f379d9 (patch)
tree94a4d6dbe8092e729392ae1459b150f060fc4109 /src/include
parent0c06dbb1a4aaf6506b769fb36e8a694e91ab411b (diff)
Reland "drivers/intel/dptf: Add multiple fan support under dptf"
This reverts commit 4dba71fd25c91a9e610287c61238a8fe24452e4e. Add multiple fan support for dptf policies. This also fixes the Google Meet resolution drop issue as per b:246535768 comment#12. When system starts Google Meet video call, it uses the hardware accelerated encoder as expected. But, as soon as another system connects to the call, an immediate fallback is observed from hardware to software encoder. Due to this, Google Meet resolution dropped from 720p to 180p. This issue is observed on Alder Lake-N SoC based fanless platforms. This same issue was not seen on fan based systems. With the fix in dptf driver where fan configures appropriate setting for only fan participant, not for other device participants, able to see consistent 720p resolution. BUG=b:246535768,b:235254828 BRANCH=None TEST=Built and tested on Alder Lake-P Redrix system for two fans support and on Alder Lake-N fanless systems. With this code change Google Meet resolution drop not observed. Signed-off-by: Sumeet Pawnikar <sumeet.r.pawnikar@intel.com> Change-Id: Id07d279ff962253c22be9d395ed7be0d732aeaa7 Reviewed-on: https://review.coreboot.org/c/coreboot/+/73249 Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Reviewed-by: Paul Menzel <paulepanter@mailbox.org> Reviewed-by: Reka Norman <rekanorman@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/acpi/acpigen_dptf.h31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/include/acpi/acpigen_dptf.h b/src/include/acpi/acpigen_dptf.h
index 6ef87a4ee6..31164bfa91 100644
--- a/src/include/acpi/acpigen_dptf.h
+++ b/src/include/acpi/acpigen_dptf.h
@@ -14,12 +14,15 @@
#define DPTF_DEVICE_PATH "\\_SB.DPTF"
#define TCPU_SCOPE "\\_SB.PCI0"
+#define DPTF_MAX_FAN_PARTICIPANTS 2
+
/* List of available participants (i.e., they can participate in policies) */
enum dptf_participant {
DPTF_NONE,
DPTF_CPU,
DPTF_CHARGER,
DPTF_FAN,
+ DPTF_FAN_2,
DPTF_TEMP_SENSOR_0,
DPTF_TEMP_SENSOR_1,
DPTF_TEMP_SENSOR_2,
@@ -52,6 +55,8 @@ enum {
/* Active Policy */
struct dptf_active_policy {
+ /* The device that can be throttled */
+ enum dptf_participant source;
/* Device capable of being affected by the fan */
enum dptf_participant target;
/* Source's contribution to the Target's cooling capability as a percentage */
@@ -115,6 +120,18 @@ struct dptf_fan_perf {
uint16_t power;
};
+/* Different levels of fan activity, chosen by active policies */
+struct dptf_multifan_perf {
+ /* Fan percentage level */
+ uint8_t percent;
+ /* Fan speed, in RPM */
+ uint16_t speed;
+ /* Noise level, in 0.1 dBs */
+ uint16_t noise_level;
+ /* Power in mA */
+ uint16_t power;
+};
+
/* Running Average Power Limits (RAPL) */
struct dptf_power_limit_config {
/* Minimum level of power limit, in mW */
@@ -151,7 +168,8 @@ void dptf_write_enabled_policies(const struct dptf_active_policy *active_policie
* temperature thresholds are met (_AC0 - _AC9), the fan is driven to corresponding percentage
* of full speed.
*/
-void dptf_write_active_policies(const struct dptf_active_policy *policies, int max_count);
+void dptf_write_active_policies(const struct dptf_active_policy *policies, int max_count,
+ bool dptf_multifan_support);
/*
* This function uses the definition of the passive policies to write out _PSV Methods on all
@@ -183,7 +201,16 @@ void dptf_write_charger_perf(const struct dptf_charger_perf *perf, int max_count
* 4) The corresponding active cooling trip point (from _ART) (typically left as
* DPTF_FIELD_UNUSED).
*/
-void dptf_write_fan_perf(const struct dptf_fan_perf *perf, int max_count);
+void dptf_write_fan_perf(const struct dptf_fan_perf *perf, int max_count,
+ enum dptf_participant participant);
+
+void dptf_write_multifan_perf(
+ const struct dptf_multifan_perf
+ states[DPTF_MAX_FAN_PARTICIPANTS][DPTF_MAX_FAN_PERF_STATES],
+ int max_count, enum dptf_participant participant, int fan_num);
+
+int dptf_write_fan_perf_fps(uint8_t percent, uint16_t power, uint16_t speed,
+ uint16_t noise_level);
/*
* This function writes out a PPCC table, which indicates power ranges that different Intel