Felix Held has submitted this change. ( https://review.coreboot.org/c/coreboot/+/73996 )
(
3 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: soc/amd: introduce and use get_pstate_core_uvolts for SVI2 and SVI3 ......................................................................
soc/amd: introduce and use get_pstate_core_uvolts for SVI2 and SVI3
Since SVI3 has the CPU voltage ID split into two parts, a serial voltage ID version specific function is needed to get the raw core VID value. This will allow making get_pstate_core_power common for all AMD CPUs in a follow-up patch.
Signed-off-by: Felix Held felix-coreboot@felixheld.de Change-Id: I71ca88c38b307558905a26cce8be1e8ffc5fbed4 Reviewed-on: https://review.coreboot.org/c/coreboot/+/73996 Reviewed-by: Eric Lai eric_lai@quanta.corp-partner.google.com Reviewed-by: Fred Reitberger reitbergerfred@gmail.com Reviewed-by: Matt DeVillier matt.devillier@amd.corp-partner.google.com Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/soc/amd/cezanne/acpi.c M src/soc/amd/common/block/cpu/svi2.c M src/soc/amd/common/block/cpu/svi3.c M src/soc/amd/common/block/include/amdblocks/cpu.h M src/soc/amd/glinda/acpi.c M src/soc/amd/mendocino/acpi.c M src/soc/amd/phoenix/acpi.c M src/soc/amd/picasso/acpi.c 8 files changed, 48 insertions(+), 30 deletions(-)
Approvals: build bot (Jenkins): Verified Fred Reitberger: Looks good to me, approved Eric Lai: Looks good to me, approved Matt DeVillier: Looks good to me, approved
diff --git a/src/soc/amd/cezanne/acpi.c b/src/soc/amd/cezanne/acpi.c index cebdf7c5..9c60d5e 100644 --- a/src/soc/amd/cezanne/acpi.c +++ b/src/soc/amd/cezanne/acpi.c @@ -134,10 +134,10 @@
uint32_t get_pstate_core_power(union pstate_msr pstate_reg) { - uint32_t voltage_in_uvolts, core_vid, current_value_amps, current_divisor, power_in_mw; + uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
- /* Core voltage ID */ - core_vid = pstate_reg.cpu_vid_0_7; + /* Get Voltage from core voltage ID */ + voltage_in_uvolts = get_pstate_core_uvolts(pstate_reg);
/* Current value in amps */ current_value_amps = pstate_reg.idd_value; @@ -145,9 +145,6 @@ /* Current divisor */ current_divisor = pstate_reg.idd_div;
- /* Voltage */ - voltage_in_uvolts = get_uvolts_from_vid(core_vid); - /* Power in mW */ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
diff --git a/src/soc/amd/common/block/cpu/svi2.c b/src/soc/amd/common/block/cpu/svi2.c index 0a41b78..21d459f 100644 --- a/src/soc/amd/common/block/cpu/svi2.c +++ b/src/soc/amd/common/block/cpu/svi2.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/cpu.h> +#include <soc/msr.h> #include <types.h>
/* Value defined in Serial VID Interface 2.0 spec (#48022, NDA only) */ @@ -17,3 +18,8 @@ (SERIAL_VID_2_DECODE_MICROVOLTS * core_vid); } } + +uint32_t get_pstate_core_uvolts(union pstate_msr pstate_reg) +{ + return get_uvolts_from_vid(pstate_reg.cpu_vid_0_7); +} diff --git a/src/soc/amd/common/block/cpu/svi3.c b/src/soc/amd/common/block/cpu/svi3.c index 35a4a78..c2e6bed 100644 --- a/src/soc/amd/common/block/cpu/svi3.c +++ b/src/soc/amd/common/block/cpu/svi3.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/cpu.h> +#include <soc/msr.h> #include <types.h>
/* Value defined in Serial VID Interface 3.0 spec (#56413, NDA only) */ @@ -17,3 +18,8 @@ (SERIAL_VID_3_DECODE_MICROVOLTS * core_vid); } } + +uint32_t get_pstate_core_uvolts(union pstate_msr pstate_reg) +{ + return get_uvolts_from_vid(pstate_reg.cpu_vid_0_7 | pstate_reg.cpu_vid_8 << 8); +} diff --git a/src/soc/amd/common/block/include/amdblocks/cpu.h b/src/soc/amd/common/block/include/amdblocks/cpu.h index cbce028..8c868cb 100644 --- a/src/soc/amd/common/block/include/amdblocks/cpu.h +++ b/src/soc/amd/common/block/include/amdblocks/cpu.h @@ -18,6 +18,7 @@
uint32_t get_uvolts_from_vid(uint16_t core_vid); uint32_t get_pstate_core_freq(union pstate_msr pstate_reg); +uint32_t get_pstate_core_uvolts(union pstate_msr pstate_reg); uint32_t get_pstate_core_power(union pstate_msr pstate_reg); const acpi_cstate_t *get_cstate_config_data(size_t *size);
diff --git a/src/soc/amd/glinda/acpi.c b/src/soc/amd/glinda/acpi.c index b9ea0eb..c165937 100644 --- a/src/soc/amd/glinda/acpi.c +++ b/src/soc/amd/glinda/acpi.c @@ -111,10 +111,10 @@
uint32_t get_pstate_core_power(union pstate_msr pstate_reg) { - uint32_t voltage_in_uvolts, core_vid, current_value_amps, current_divisor, power_in_mw; + uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
- /* Core voltage ID */ - core_vid = pstate_reg.cpu_vid_0_7 | pstate_reg.cpu_vid_8 << 8; + /* Get Voltage from core voltage ID */ + voltage_in_uvolts = get_pstate_core_uvolts(pstate_reg);
/* Current value in amps */ current_value_amps = pstate_reg.idd_value; @@ -122,9 +122,6 @@ /* Current divisor */ current_divisor = pstate_reg.idd_div;
- /* Voltage */ - voltage_in_uvolts = get_uvolts_from_vid(core_vid); - /* Power in mW */ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
diff --git a/src/soc/amd/mendocino/acpi.c b/src/soc/amd/mendocino/acpi.c index 0574ba7..519283f 100644 --- a/src/soc/amd/mendocino/acpi.c +++ b/src/soc/amd/mendocino/acpi.c @@ -136,10 +136,10 @@
uint32_t get_pstate_core_power(union pstate_msr pstate_reg) { - uint32_t voltage_in_uvolts, core_vid, current_value_amps, current_divisor, power_in_mw; + uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
- /* Core voltage ID */ - core_vid = pstate_reg.cpu_vid_0_7 | pstate_reg.cpu_vid_8 << 8; + /* Get Voltage from core voltage ID */ + voltage_in_uvolts = get_pstate_core_uvolts(pstate_reg);
/* Current value in amps */ current_value_amps = pstate_reg.idd_value; @@ -147,9 +147,6 @@ /* Current divisor */ current_divisor = pstate_reg.idd_div;
- /* Voltage */ - voltage_in_uvolts = get_uvolts_from_vid(core_vid); - /* Power in mW */ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
diff --git a/src/soc/amd/phoenix/acpi.c b/src/soc/amd/phoenix/acpi.c index e147e88..6a7c560 100644 --- a/src/soc/amd/phoenix/acpi.c +++ b/src/soc/amd/phoenix/acpi.c @@ -137,10 +137,10 @@
uint32_t get_pstate_core_power(union pstate_msr pstate_reg) { - uint32_t voltage_in_uvolts, core_vid, current_value_amps, current_divisor, power_in_mw; + uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
- /* Core voltage ID */ - core_vid = pstate_reg.cpu_vid_0_7 | pstate_reg.cpu_vid_8 << 8; + /* Get Voltage from core voltage ID */ + voltage_in_uvolts = get_pstate_core_uvolts(pstate_reg);
/* Current value in amps */ current_value_amps = pstate_reg.idd_value; @@ -148,9 +148,6 @@ /* Current divisor */ current_divisor = pstate_reg.idd_div;
- /* Voltage */ - voltage_in_uvolts = get_uvolts_from_vid(core_vid); - /* Power in mW */ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;
diff --git a/src/soc/amd/picasso/acpi.c b/src/soc/amd/picasso/acpi.c index d1232e3..a32c073 100644 --- a/src/soc/amd/picasso/acpi.c +++ b/src/soc/amd/picasso/acpi.c @@ -138,10 +138,10 @@
uint32_t get_pstate_core_power(union pstate_msr pstate_reg) { - uint32_t voltage_in_uvolts, core_vid, current_value_amps, current_divisor, power_in_mw; + uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
- /* Core voltage ID */ - core_vid = pstate_reg.cpu_vid_0_7; + /* Get Voltage from core voltage ID */ + voltage_in_uvolts = get_pstate_core_uvolts(pstate_reg);
/* Current value in amps */ current_value_amps = pstate_reg.idd_value; @@ -149,9 +149,6 @@ /* Current divisor */ current_divisor = pstate_reg.idd_div;
- /* Voltage */ - voltage_in_uvolts = get_uvolts_from_vid(core_vid); - /* Power in mW */ power_in_mw = (voltage_in_uvolts) / 10 * current_value_amps;