dptf: Add support for IDSP
\_SB.DPTF.IDSP adverties to the DPTF daemon which policies the implementation supports. Added a new acpigen function to figure out which policies are used, and fills out IDSP appropriately. Change-Id: Idf67a23bf38de4481c02f98ffb27afb8ca2d1b7b Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/42081 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
This commit is contained in:
parent
e4d8ebcef7
commit
03465f4b0f
|
@ -9,6 +9,11 @@
|
||||||
/* Defaults */
|
/* Defaults */
|
||||||
#define DEFAULT_RAW_UNIT "ma"
|
#define DEFAULT_RAW_UNIT "ma"
|
||||||
|
|
||||||
|
/* DPTF-specific UUIDs */
|
||||||
|
#define DPTF_PASSIVE_POLICY_1_0_UUID "42A441D6-AE6A-462B-A84B-4A8CE79027D3"
|
||||||
|
#define DPTF_CRITICAL_POLICY_UUID "97C68AE7-15FA-499c-B8C9-5DA81D606E0A"
|
||||||
|
#define DPTF_ACTIVE_POLICY_UUID "3A95C389-E4B8-4629-A526-C52C88626BAE"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ART_REVISION = 0,
|
ART_REVISION = 0,
|
||||||
DEFAULT_PRIORITY = 100,
|
DEFAULT_PRIORITY = 100,
|
||||||
|
@ -432,3 +437,40 @@ void dptf_write_tsr_hysteresis(uint8_t hysteresis)
|
||||||
|
|
||||||
acpigen_write_name_integer("GTSH", hysteresis);
|
acpigen_write_name_integer("GTSH", hysteresis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dptf_write_enabled_policies(const struct dptf_active_policy *active_policies,
|
||||||
|
int active_count,
|
||||||
|
const struct dptf_passive_policy *passive_policies,
|
||||||
|
int passive_count,
|
||||||
|
const struct dptf_critical_policy *critical_policies,
|
||||||
|
int critical_count)
|
||||||
|
{
|
||||||
|
bool is_active_used;
|
||||||
|
bool is_passive_used;
|
||||||
|
bool is_critical_used;
|
||||||
|
int pkg_count;
|
||||||
|
|
||||||
|
is_active_used = (active_count && active_policies[0].target != DPTF_NONE);
|
||||||
|
is_passive_used = (passive_count && passive_policies[0].target != DPTF_NONE);
|
||||||
|
is_critical_used = (critical_count && critical_policies[0].source != DPTF_NONE);
|
||||||
|
pkg_count = is_active_used + is_passive_used + is_critical_used;
|
||||||
|
|
||||||
|
if (!pkg_count)
|
||||||
|
return;
|
||||||
|
|
||||||
|
acpigen_write_scope(TOPLEVEL_DPTF_SCOPE);
|
||||||
|
acpigen_write_name("IDSP");
|
||||||
|
acpigen_write_package(pkg_count);
|
||||||
|
|
||||||
|
if (is_active_used)
|
||||||
|
acpigen_write_uuid(DPTF_ACTIVE_POLICY_UUID);
|
||||||
|
|
||||||
|
if (is_passive_used)
|
||||||
|
acpigen_write_uuid(DPTF_PASSIVE_POLICY_1_0_UUID);
|
||||||
|
|
||||||
|
if (is_critical_used)
|
||||||
|
acpigen_write_uuid(DPTF_CRITICAL_POLICY_UUID);
|
||||||
|
|
||||||
|
acpigen_pop_len(); /* Package */
|
||||||
|
acpigen_pop_len(); /* Scope */
|
||||||
|
}
|
||||||
|
|
|
@ -69,6 +69,11 @@ static void dptf_fill_ssdt(const struct device *dev)
|
||||||
for (p = DPTF_TEMP_SENSOR_0, i = 0; p <= DPTF_TEMP_SENSOR_3; ++p, ++i)
|
for (p = DPTF_TEMP_SENSOR_0, i = 0; p <= DPTF_TEMP_SENSOR_3; ++p, ++i)
|
||||||
tsr_en[i] = is_participant_used(config, p);
|
tsr_en[i] = is_participant_used(config, p);
|
||||||
|
|
||||||
|
/* Policies */
|
||||||
|
dptf_write_enabled_policies(config->policies.active, DPTF_MAX_ACTIVE_POLICIES,
|
||||||
|
config->policies.passive, DPTF_MAX_PASSIVE_POLICIES,
|
||||||
|
config->policies.critical, DPTF_MAX_CRITICAL_POLICIES);
|
||||||
|
|
||||||
dptf_write_active_policies(config->policies.active,
|
dptf_write_active_policies(config->policies.active,
|
||||||
DPTF_MAX_ACTIVE_POLICIES);
|
DPTF_MAX_ACTIVE_POLICIES);
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,17 @@ struct dptf_power_limits {
|
||||||
struct dptf_power_limit_config pl2;
|
struct dptf_power_limit_config pl2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function writes out \_SB.DPTF.IDSP, which describes the different DPTF policies that
|
||||||
|
* this implementation is using.
|
||||||
|
*/
|
||||||
|
void dptf_write_enabled_policies(const struct dptf_active_policy *active_policies,
|
||||||
|
int active_count,
|
||||||
|
const struct dptf_passive_policy *passive_policies,
|
||||||
|
int passive_count,
|
||||||
|
const struct dptf_critical_policy *critical_policies,
|
||||||
|
int critical_count);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function provides tables of temperature and corresponding fan or percent. When the
|
* This function provides tables of temperature and corresponding fan or percent. When the
|
||||||
* temperature thresholds are met (_AC0 - _AC9), the fan is driven to corresponding percentage
|
* temperature thresholds are met (_AC0 - _AC9), the fan is driven to corresponding percentage
|
||||||
|
|
Loading…
Reference in New Issue