soc/amd: factor out common get_pstate_core_power implementation

Now that all get_pstate_core_power implementations in each SoC's acpi.c
file is identical, factor it out into a common implementation. This
implementation will also work for Stoneyridge which isn't using the
common P state code yet.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Iba3833024a5e3ca5a47ffb1c1afdbfd884313c96
Reviewed-on: https://review.coreboot.org/c/coreboot/+/73997
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/amd/cezanne/acpi.c b/src/soc/amd/cezanne/acpi.c
index 9c60d5e..e883009 100644
--- a/src/soc/amd/cezanne/acpi.c
+++ b/src/soc/amd/cezanne/acpi.c
@@ -132,42 +132,6 @@
 	return core_freq;
 }
 
-uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
-{
-	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
-
-	/* 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;
-
-	/* Current divisor */
-	current_divisor = pstate_reg.idd_div;
-
-	/* Power in mW */
-	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 / 1000L;
-		break;
-	case 2:
-		power_in_mw = power_in_mw / 10000L;
-		break;
-	case 3:
-		/* current_divisor is set to an undefined value.*/
-		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
-		power_in_mw = 0;
-		break;
-	}
-
-	return power_in_mw;
-}
-
 const acpi_cstate_t cstate_cfg_table[] = {
 	[0] = {
 		.ctype = 1,
diff --git a/src/soc/amd/common/block/acpi/cpu_power_state.c b/src/soc/amd/common/block/acpi/cpu_power_state.c
index 811bea0..d518ea0 100644
--- a/src/soc/amd/common/block/acpi/cpu_power_state.c
+++ b/src/soc/amd/common/block/acpi/cpu_power_state.c
@@ -10,6 +10,42 @@
 #include <soc/msr.h>
 #include <types.h>
 
+static uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
+{
+	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
+
+	/* 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;
+
+	/* Current divisor */
+	current_divisor = pstate_reg.idd_div;
+
+	/* Power in mW */
+	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 / 1000L;
+		break;
+	case 2:
+		power_in_mw = power_in_mw / 10000L;
+		break;
+	case 3:
+		/* current_divisor is set to an undefined value.*/
+		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
+		power_in_mw = 0;
+		break;
+	}
+
+	return power_in_mw;
+}
+
 /*
  * Populate structure describing enabled p-states and return count of enabled p-states.
  */
diff --git a/src/soc/amd/common/block/include/amdblocks/cpu.h b/src/soc/amd/common/block/include/amdblocks/cpu.h
index 8c868cb..18b300d 100644
--- a/src/soc/amd/common/block/include/amdblocks/cpu.h
+++ b/src/soc/amd/common/block/include/amdblocks/cpu.h
@@ -19,7 +19,6 @@
 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);
 
 #endif /* AMD_BLOCK_CPU_H */
diff --git a/src/soc/amd/glinda/acpi.c b/src/soc/amd/glinda/acpi.c
index c165937..850bc6c 100644
--- a/src/soc/amd/glinda/acpi.c
+++ b/src/soc/amd/glinda/acpi.c
@@ -109,42 +109,6 @@
 	return PSTATE_DEF_CORE_FREQ_BASE * core_freq_mul;
 }
 
-uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
-{
-	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
-
-	/* 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;
-
-	/* Current divisor */
-	current_divisor = pstate_reg.idd_div;
-
-	/* Power in mW */
-	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 / 1000L;
-		break;
-	case 2:
-		power_in_mw = power_in_mw / 10000L;
-		break;
-	case 3:
-		/* current_divisor is set to an undefined value.*/
-		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
-		power_in_mw = 0;
-		break;
-	}
-
-	return power_in_mw;
-}
-
 const acpi_cstate_t cstate_cfg_table[] = {
 	[0] = {
 		.ctype = 1,
diff --git a/src/soc/amd/mendocino/acpi.c b/src/soc/amd/mendocino/acpi.c
index 519283f..6c48bae 100644
--- a/src/soc/amd/mendocino/acpi.c
+++ b/src/soc/amd/mendocino/acpi.c
@@ -134,42 +134,6 @@
 	return core_freq;
 }
 
-uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
-{
-	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
-
-	/* 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;
-
-	/* Current divisor */
-	current_divisor = pstate_reg.idd_div;
-
-	/* Power in mW */
-	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 / 1000L;
-		break;
-	case 2:
-		power_in_mw = power_in_mw / 10000L;
-		break;
-	case 3:
-		/* current_divisor is set to an undefined value.*/
-		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
-		power_in_mw = 0;
-		break;
-	}
-
-	return power_in_mw;
-}
-
 const acpi_cstate_t cstate_cfg_table[] = {
 	[0] = {
 		.ctype = 1,
diff --git a/src/soc/amd/phoenix/acpi.c b/src/soc/amd/phoenix/acpi.c
index 6a7c560..c98ec68 100644
--- a/src/soc/amd/phoenix/acpi.c
+++ b/src/soc/amd/phoenix/acpi.c
@@ -135,42 +135,6 @@
 	return core_freq;
 }
 
-uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
-{
-	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
-
-	/* 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;
-
-	/* Current divisor */
-	current_divisor = pstate_reg.idd_div;
-
-	/* Power in mW */
-	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 / 1000L;
-		break;
-	case 2:
-		power_in_mw = power_in_mw / 10000L;
-		break;
-	case 3:
-		/* current_divisor is set to an undefined value.*/
-		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
-		power_in_mw = 0;
-		break;
-	}
-
-	return power_in_mw;
-}
-
 const acpi_cstate_t cstate_cfg_table[] = {
 	[0] = {
 		.ctype = 1,
diff --git a/src/soc/amd/picasso/acpi.c b/src/soc/amd/picasso/acpi.c
index a32c073..2379d43 100644
--- a/src/soc/amd/picasso/acpi.c
+++ b/src/soc/amd/picasso/acpi.c
@@ -136,42 +136,6 @@
 	return core_freq;
 }
 
-uint32_t get_pstate_core_power(union pstate_msr pstate_reg)
-{
-	uint32_t voltage_in_uvolts, current_value_amps, current_divisor, power_in_mw;
-
-	/* 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;
-
-	/* Current divisor */
-	current_divisor = pstate_reg.idd_div;
-
-	/* Power in mW */
-	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 / 1000L;
-		break;
-	case 2:
-		power_in_mw = power_in_mw / 10000L;
-		break;
-	case 3:
-		/* current_divisor is set to an undefined value.*/
-		printk(BIOS_WARNING, "Undefined current_divisor set for enabled P-state .\n");
-		power_in_mw = 0;
-		break;
-	}
-
-	return power_in_mw;
-}
-
 const acpi_cstate_t cstate_cfg_table[] = {
 	[0] = {
 		.ctype = 1,