summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZheng Bao <fishbaozi@gmail.com>2022-08-25 17:11:38 +0800
committerFelix Held <felix-coreboot@felixheld.de>2022-09-14 20:24:00 +0000
commit62cd5e86031415843b8a0429ec05cca11b528902 (patch)
tree311c3156eeb93225504e6e0033cab5e9bb655539 /src
parent41a8043bdf394e3420f79dd421486f137d899d55 (diff)
soc/amd: Recalculate the field power in PSS table entry
Being divided by 1000 causes data loss and the loss is expand by muliplication. So we just set a lower divisor before muliplication. BUG=b:185922528 Change-Id: Ib43103cc62c18debea3fd2c23d9c30fb0ecd781b Signed-off-by: Zheng Bao <fishbaozi@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/67050 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com> Reviewed-by: Raul Rangel <rrangel@chromium.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src')
-rw-r--r--src/soc/amd/cezanne/acpi.c7
-rw-r--r--src/soc/amd/mendocino/acpi.c7
-rw-r--r--src/soc/amd/picasso/acpi.c7
3 files changed, 12 insertions, 9 deletions
diff --git a/src/soc/amd/cezanne/acpi.c b/src/soc/amd/cezanne/acpi.c
index 6ce041b850..e9123456d5 100644
--- a/src/soc/amd/cezanne/acpi.c
+++ b/src/soc/amd/cezanne/acpi.c
@@ -195,16 +195,17 @@ static uint32_t get_pstate_core_power(msr_t pstate_def)
}
/* Power in mW */
- power_in_mw = (voltage_in_uvolts) / 1000 * current_value_amps;
+ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
switch (current_divisor) {
case 0:
+ power_in_mw = power_in_mw / 100L;
break;
case 1:
- power_in_mw = power_in_mw / 10L;
+ power_in_mw = power_in_mw / 1000L;
break;
case 2:
- power_in_mw = power_in_mw / 100L;
+ power_in_mw = power_in_mw / 10000L;
break;
case 3:
/* current_divisor is set to an undefined value.*/
diff --git a/src/soc/amd/mendocino/acpi.c b/src/soc/amd/mendocino/acpi.c
index 75dcf82efc..3005920aff 100644
--- a/src/soc/amd/mendocino/acpi.c
+++ b/src/soc/amd/mendocino/acpi.c
@@ -197,16 +197,17 @@ static uint32_t get_pstate_core_power(msr_t pstate_def)
}
/* Power in mW */
- power_in_mw = (voltage_in_uvolts) / 1000 * current_value_amps;
+ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
switch (current_divisor) {
case 0:
+ power_in_mw = power_in_mw / 100L;
break;
case 1:
- power_in_mw = power_in_mw / 10L;
+ power_in_mw = power_in_mw / 1000L;
break;
case 2:
- power_in_mw = power_in_mw / 100L;
+ power_in_mw = power_in_mw / 10000L;
break;
case 3:
/* current_divisor is set to an undefined value.*/
diff --git a/src/soc/amd/picasso/acpi.c b/src/soc/amd/picasso/acpi.c
index 9c798caffd..d075e052be 100644
--- a/src/soc/amd/picasso/acpi.c
+++ b/src/soc/amd/picasso/acpi.c
@@ -203,16 +203,17 @@ static uint32_t get_pstate_core_power(msr_t pstate_def)
}
/* Power in mW */
- power_in_mw = (voltage_in_uvolts) / 1000 * current_value_amps;
+ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
switch (current_divisor) {
case 0:
+ power_in_mw = power_in_mw / 100L;
break;
case 1:
- power_in_mw = power_in_mw / 10L;
+ power_in_mw = power_in_mw / 1000L;
break;
case 2:
- power_in_mw = power_in_mw / 100L;
+ power_in_mw = power_in_mw / 10000L;
break;
case 3:
/* current_divisor is set to an undefined value.*/