summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86')
-rw-r--r--src/arch/x86/cpu_common.c16
-rw-r--r--src/arch/x86/include/arch/cpu.h9
2 files changed, 25 insertions, 0 deletions
diff --git a/src/arch/x86/cpu_common.c b/src/arch/x86/cpu_common.c
index c4d30a2c06..ee0721412b 100644
--- a/src/arch/x86/cpu_common.c
+++ b/src/arch/x86/cpu_common.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <commonlib/helpers.h>
#include <cpu/cpu.h>
#include <types.h>
@@ -234,3 +235,18 @@ bool fill_cpu_cache_info(uint8_t level, struct cpu_cache_info *info)
return true;
}
+
+bool is_cache_sets_power_of_two(void)
+{
+ struct cpu_cache_info info;
+
+ if (!fill_cpu_cache_info(CACHE_L3, &info))
+ return false;
+
+ size_t cache_sets = cpu_get_cache_sets(&info);
+
+ if (IS_POWER_OF_2(cache_sets))
+ return true;
+
+ return false;
+}
diff --git a/src/arch/x86/include/arch/cpu.h b/src/arch/x86/include/arch/cpu.h
index 0c4decfc1b..fa0d5f4678 100644
--- a/src/arch/x86/include/arch/cpu.h
+++ b/src/arch/x86/include/arch/cpu.h
@@ -329,6 +329,15 @@ uint8_t cpu_get_c_substate_support(const int state);
*/
bool fill_cpu_cache_info(uint8_t level, struct cpu_cache_info *info);
+/*
+ * Determines whether the number of cache sets is a power of two.
+ *
+ * Cache designs often favor power-of-two set counts for efficient indexing
+ * and addressing. This function checks if the provided cache configuration
+ * adheres to this practice.
+ */
+bool is_cache_sets_power_of_two(void);
+
#if CONFIG(RESERVED_PHYSICAL_ADDRESS_BITS_SUPPORT)
unsigned int get_reserved_phys_addr_bits(void);
#else