summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/intel/common/acpi.h41
-rw-r--r--src/soc/intel/common/acpi/acpi.c61
-rw-r--r--src/soc/intel/common/block/cpu/cpulib.c58
-rw-r--r--src/soc/intel/common/block/include/intelblocks/cpulib.h35
4 files changed, 93 insertions, 102 deletions
diff --git a/src/soc/intel/common/acpi.h b/src/soc/intel/common/acpi.h
index 845e0f0ae4..19ab92666b 100644
--- a/src/soc/intel/common/acpi.h
+++ b/src/soc/intel/common/acpi.h
@@ -32,47 +32,6 @@ int soc_fill_acpi_wake(uint32_t *pm1, uint32_t **gpe0);
#if IS_ENABLED(CONFIG_SOC_INTEL_COMMON_ACPI)
/*
- * cpu_get_bus_clock returns the bus clock frequency in KHz.
- * This is the value the clock ratio is multiplied with.
- */
-uint32_t cpu_get_bus_clock(void);
-
-/*
- * cpu_get_coord_type returns coordination type (SW_ANY or SW_ALL or HW_ALL)
- * which is used to populate _PSD object.
- */
-int cpu_get_coord_type(void);
-
-/*
- * cpu_config_tdp_levels returns the number of TDP levels supported
- * by this processor
- */
-int cpu_config_tdp_levels(void);
-
-/*
- * cpu_get_min_ratio returns the minimum frequency ratio that is supported
- * by this processor
- */
-uint32_t cpu_get_min_ratio(void);
-
-/*
- * cpu_get_max_ratio returns the nominal TDP ratio if available or the
- * maximum non turbo frequency ratio for this processor
- */
-uint32_t cpu_get_max_ratio(void);
-
-/*
- * cpu_get_power_max calculates CPU TDP in mW
- */
-uint32_t cpu_get_power_max(void);
-
-/*
- * cpu_get_max_turbo_ratio returns the maximum turbo ratio limit for the
- * processor
- */
-uint32_t cpu_get_max_turbo_ratio(void);
-
-/*
* get_cstate_map returns a table of processor specific acpi_cstate_t entries
* and number of entries in the table
*/
diff --git a/src/soc/intel/common/acpi/acpi.c b/src/soc/intel/common/acpi/acpi.c
index 458b95fd54..0934dbd2ae 100644
--- a/src/soc/intel/common/acpi/acpi.c
+++ b/src/soc/intel/common/acpi/acpi.c
@@ -18,6 +18,7 @@
#include <arch/cpu.h>
#include <cpu/intel/turbo.h>
#include <cpu/x86/msr.h>
+#include <intelblocks/cpulib.h>
#include <soc/intel/common/acpi.h>
#include <soc/pm.h>
@@ -34,66 +35,6 @@
#define PSS_LATENCY_BUSMASTER 10
-__attribute__((weak)) int cpu_get_coord_type(void)
-{
- return HW_ALL;
-}
-
-__attribute__((weak)) int cpu_config_tdp_levels(void)
-{
- return 0;
-}
-
-__attribute__((weak)) uint32_t cpu_get_min_ratio(void)
-{
- msr_t msr;
- /* Get bus ratio limits and calculate clock speeds */
- msr = rdmsr(MSR_PLATFORM_INFO);
- return ((msr.hi >> 8) & 0xff); /* Max Efficiency Ratio */
-}
-
-__attribute__((weak)) uint32_t cpu_get_max_ratio(void)
-{
- msr_t msr;
- uint32_t ratio_max;
- if (cpu_config_tdp_levels()) {
- /* Set max ratio to nominal TDP ratio */
- msr = rdmsr(MSR_CONFIG_TDP_NOMINAL);
- ratio_max = msr.lo & 0xff;
- } else {
- msr = rdmsr(MSR_PLATFORM_INFO);
- /* Max Non-Turbo Ratio */
- ratio_max = (msr.lo >> 8) & 0xff;
- }
- return ratio_max;
-}
-
-__attribute__((weak)) uint32_t cpu_get_bus_clock(void)
-{
- /* CPU bus clock is set by default here to 100MHz.
- * This function returns the bus clock in KHz.
- */
- return 100 * KHz;
-}
-
-__attribute__((weak)) uint32_t cpu_get_power_max(void)
-{
- msr_t msr;
- int power_unit;
-
- msr = rdmsr(MSR_RAPL_POWER_UNIT);
- power_unit = 2 << ((msr.lo & 0xf) - 1);
- msr = rdmsr(MSR_PKG_POWER_INFO);
- return ((msr.lo & 0x7fff) / power_unit) * 1000;
-}
-
-__attribute__((weak)) uint32_t cpu_get_max_turbo_ratio(void)
-{
- msr_t msr;
- msr = rdmsr(MSR_TURBO_RATIO_LIMIT);
- return msr.lo & 0xff;
-}
-
__attribute__((weak)) acpi_cstate_t *soc_get_cstate_map(int *entries)
{
*entries = 0;
diff --git a/src/soc/intel/common/block/cpu/cpulib.c b/src/soc/intel/common/block/cpu/cpulib.c
index 5920512cd4..2272e69edb 100644
--- a/src/soc/intel/common/block/cpu/cpulib.c
+++ b/src/soc/intel/common/block/cpu/cpulib.c
@@ -14,6 +14,7 @@
* GNU General Public License for more details.
*/
+#include <arch/acpigen.h>
#include <arch/io.h>
#include <console/console.h>
#include <cpu/intel/turbo.h>
@@ -238,5 +239,60 @@ int cpu_read_topology(unsigned int *num_phys, unsigned int *num_virt)
msr = rdmsr(MSR_CORE_THREAD_COUNT);
*num_virt = (msr.lo >> 0) & 0xffff;
*num_phys = (msr.lo >> 16) & 0xffff;
- return (*num_virt == *num_phys);
+ return (*num_virt == *num_phys);
+}
+
+int cpu_get_coord_type(void)
+{
+ return HW_ALL;
+}
+
+uint32_t cpu_get_min_ratio(void)
+{
+ msr_t msr;
+ /* Get bus ratio limits and calculate clock speeds */
+ msr = rdmsr(MSR_PLATFORM_INFO);
+ return ((msr.hi >> 8) & 0xff); /* Max Efficiency Ratio */
+}
+
+uint32_t cpu_get_max_ratio(void)
+{
+ msr_t msr;
+ uint32_t ratio_max;
+ if (cpu_config_tdp_levels()) {
+ /* Set max ratio to nominal TDP ratio */
+ msr = rdmsr(MSR_CONFIG_TDP_NOMINAL);
+ ratio_max = msr.lo & 0xff;
+ } else {
+ msr = rdmsr(MSR_PLATFORM_INFO);
+ /* Max Non-Turbo Ratio */
+ ratio_max = (msr.lo >> 8) & 0xff;
+ }
+ return ratio_max;
+}
+
+uint32_t cpu_get_bus_clock(void)
+{
+ /* CPU bus clock is set by default here to 100MHz.
+ * This function returns the bus clock in KHz.
+ */
+ return CONFIG_CPU_BCLK_MHZ * KHz;
+}
+
+uint32_t cpu_get_power_max(void)
+{
+ msr_t msr;
+ int power_unit;
+
+ msr = rdmsr(MSR_PKG_POWER_SKU_UNIT);
+ power_unit = 2 << ((msr.lo & 0xf) - 1);
+ msr = rdmsr(MSR_PKG_POWER_SKU);
+ return ((msr.lo & 0x7fff) / power_unit) * 1000;
+}
+
+uint32_t cpu_get_max_turbo_ratio(void)
+{
+ msr_t msr;
+ msr = rdmsr(MSR_TURBO_RATIO_LIMIT);
+ return msr.lo & 0xff;
}
diff --git a/src/soc/intel/common/block/include/intelblocks/cpulib.h b/src/soc/intel/common/block/include/intelblocks/cpulib.h
index f4145219b5..3d40a920c6 100644
--- a/src/soc/intel/common/block/include/intelblocks/cpulib.h
+++ b/src/soc/intel/common/block/include/intelblocks/cpulib.h
@@ -121,4 +121,39 @@ void cpu_enable_untrusted_mode(void);
*/
int cpu_read_topology(unsigned int *num_phys, unsigned int *num_virt);
+/*
+ * cpu_get_bus_clock returns the bus clock frequency in KHz.
+ * This is the value the clock ratio is multiplied with.
+ */
+uint32_t cpu_get_bus_clock(void);
+
+/*
+ * cpu_get_coord_type returns coordination type (SW_ANY or SW_ALL or HW_ALL)
+ * which is used to populate _PSD object.
+ */
+int cpu_get_coord_type(void);
+
+/*
+ * cpu_get_min_ratio returns the minimum frequency ratio that is supported
+ * by this processor
+ */
+uint32_t cpu_get_min_ratio(void);
+
+/*
+ * cpu_get_max_ratio returns the nominal TDP ratio if available or the
+ * maximum non turbo frequency ratio for this processor
+ */
+uint32_t cpu_get_max_ratio(void);
+
+/*
+ * cpu_get_power_max calculates CPU TDP in mW
+ */
+uint32_t cpu_get_power_max(void);
+
+/*
+ * cpu_get_max_turbo_ratio returns the maximum turbo ratio limit for the
+ * processor
+ */
+uint32_t cpu_get_max_turbo_ratio(void);
+
#endif /* SOC_INTEL_COMMON_BLOCK_CPULIB_H */