for (i = 0; i < POWER_SOURCE_MAX; i++) for (j = 0; j < POWER_MODE_V2_MAX; j++)
config_store_v2.sps_idx.power_states[i][j] =
output.sps_idx.power_states[i][j];
amd_pmf_dump_sps_defaults_v2(&config_store_v2);
}
staticvoid amd_pmf_load_defaults_sps(struct amd_pmf_dev *dev)
{ struct apmf_static_slider_granular_output output; int i, j, idx = 0;
int amd_pmf_get_pprof_modes(struct amd_pmf_dev *pmf)
{ int mode;
switch (pmf->current_profile) { case PLATFORM_PROFILE_PERFORMANCE: case PLATFORM_PROFILE_BALANCED_PERFORMANCE:
mode = POWER_MODE_PERFORMANCE; break; case PLATFORM_PROFILE_BALANCED:
mode = POWER_MODE_BALANCED_POWER; break; case PLATFORM_PROFILE_LOW_POWER: case PLATFORM_PROFILE_QUIET:
mode = POWER_MODE_POWER_SAVER; break; default:
dev_err(pmf->dev, "Unknown Platform Profile.\n"); return -EOPNOTSUPP;
}
return mode;
}
int amd_pmf_power_slider_update_event(struct amd_pmf_dev *dev)
{
u8 flag = 0; int mode; int src;
mode = amd_pmf_get_pprof_modes(dev); if (mode < 0) return mode;
src = amd_pmf_get_power_source();
if (src == POWER_SOURCE_AC) { switch (mode) { case POWER_MODE_PERFORMANCE:
flag |= BIT(AC_BEST_PERF); break; case POWER_MODE_BALANCED_POWER:
flag |= BIT(AC_BETTER_PERF); break; case POWER_MODE_POWER_SAVER:
flag |= BIT(AC_BETTER_BATTERY); break; default:
dev_err(dev->dev, "unsupported platform profile\n"); return -EOPNOTSUPP;
}
} elseif (src == POWER_SOURCE_DC) { switch (mode) { case POWER_MODE_PERFORMANCE:
flag |= BIT(DC_BEST_PERF); break; case POWER_MODE_BALANCED_POWER:
flag |= BIT(DC_BETTER_PERF); break; case POWER_MODE_POWER_SAVER:
flag |= BIT(DC_BATTERY_SAVER); break; default:
dev_err(dev->dev, "unsupported platform profile\n"); return -EOPNOTSUPP;
}
}
apmf_os_power_slider_update(dev, flag);
return 0;
}
staticint amd_pmf_profile_set(struct device *dev, enum platform_profile_option profile)
{ struct amd_pmf_dev *pmf = dev_get_drvdata(dev); int ret = 0;
pmf->current_profile = profile;
/* Notify EC about the slider position change */ if (is_apmf_func_supported(pmf, APMF_FUNC_OS_POWER_SLIDER_UPDATE)) {
ret = amd_pmf_power_slider_update_event(pmf); if (ret) return ret;
}
if (is_apmf_func_supported(pmf, APMF_FUNC_STATIC_SLIDER_GRANULAR)) {
ret = amd_pmf_set_sps_power_limits(pmf); if (ret) return ret;
}
int amd_pmf_init_sps(struct amd_pmf_dev *dev)
{
dev->current_profile = PLATFORM_PROFILE_BALANCED;
if (is_apmf_func_supported(dev, APMF_FUNC_STATIC_SLIDER_GRANULAR)) { if (dev->pmf_if_version == PMF_IF_V2) {
amd_pmf_load_defaults_sps_v2(dev);
amd_pmf_load_apts_defaults_sps_v2(dev);
} else {
amd_pmf_load_defaults_sps(dev);
}
/* update SPS balanced power mode thermals */
amd_pmf_set_sps_power_limits(dev);
}
/* Create platform_profile structure and register */
dev->ppdev = devm_platform_profile_register(dev->dev, "amd-pmf", dev,
&amd_pmf_profile_ops); if (IS_ERR(dev->ppdev))
dev_err(dev->dev, "Failed to register SPS support, this is most likely an SBIOS bug: %ld\n",
PTR_ERR(dev->ppdev));
return PTR_ERR_OR_ZERO(dev->ppdev);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.