soc/intel/{skylake/cannonlake}: Fix bug in vr_config

The `cpu_get_power_max()` function returns the TDP in milliwatts, but
the vr_config code interprets the value in watts. Divide the value by
1000 to fix this.

This also fixes an integer overflow when `cpu_get_power_max()` returns
a value greater than 65535 (UINT16_MAX).

Change-Id: Ibe9e0db6762eee5cc363f8b371c8538eb92f6308
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/60001
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Felix Singer <felixsinger@posteo.net>
This commit is contained in:
Angel Pons 2021-12-09 12:16:39 +01:00 committed by Felix Held
parent dbd2362caa
commit 92226dc6c3
2 changed files with 2 additions and 2 deletions

View File

@ -619,7 +619,7 @@ void fill_vr_domain_config(void *params,
FSP_S_CONFIG *vr_params = (FSP_S_CONFIG *)params; FSP_S_CONFIG *vr_params = (FSP_S_CONFIG *)params;
const struct vr_config *cfg; const struct vr_config *cfg;
static uint16_t mch_id = 0, igd_id = 0; static uint16_t mch_id = 0, igd_id = 0;
const uint16_t tdp = cpu_get_power_max(); const uint16_t tdp = cpu_get_power_max() / 1000;
if (!mch_id) { if (!mch_id) {
struct device *dev = pcidev_path_on_root(SA_DEVFN_ROOT); struct device *dev = pcidev_path_on_root(SA_DEVFN_ROOT);

View File

@ -62,7 +62,7 @@ static const struct vr_config default_configs[NUM_VR_DOMAINS] = {
static uint16_t get_sku_icc_max(int domain) static uint16_t get_sku_icc_max(int domain)
{ {
const uint16_t tdp = cpu_get_power_max(); const uint16_t tdp = cpu_get_power_max() / 1000;
static uint16_t mch_id = 0, igd_id = 0; static uint16_t mch_id = 0, igd_id = 0;
if (!mch_id) { if (!mch_id) {