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,
