summaryrefslogtreecommitdiff
path: root/src/soc
diff options
context:
space:
mode:
authorSubrata Banik <subratabanik@google.com>2024-07-16 12:56:38 +0000
committerSubrata Banik <subratabanik@google.com>2024-07-18 06:00:51 +0000
commit4c5c68588251d6cee630ae809ef737498f2bd05f (patch)
tree470af7f5acc19c4500daf0f3c30f631a08298bf3 /src/soc
parent59093890573acb11ef8d2aff506bdc412704d9de (diff)
soc/intel/cmn/cpu: Introduce common CAR APIs
This patch adds `car_lib.c` to the IA common code to consolidate SoC-agnostic CAR APIs. Initially, it includes `car_report_cache_info()` to provide a unified way to read cache information, reducing the need for SoC-specific implementations. TEST=Builds successfully for google/rex. Change-Id: I2ff84b27736057d19d4ec68c9afcb9b22e778f55 Signed-off-by: Subrata Banik <subratabanik@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/83480 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Eric Lai <ericllai@google.com>
Diffstat (limited to 'src/soc')
-rw-r--r--src/soc/intel/common/block/cpu/Makefile.mk2
-rw-r--r--src/soc/intel/common/block/cpu/car/car_lib.c33
-rw-r--r--src/soc/intel/common/block/include/intelblocks/car_lib.h11
3 files changed, 46 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/cpu/Makefile.mk b/src/soc/intel/common/block/cpu/Makefile.mk
index 8dd6796d59..d4c2a6c9b9 100644
--- a/src/soc/intel/common/block/cpu/Makefile.mk
+++ b/src/soc/intel/common/block/cpu/Makefile.mk
@@ -12,6 +12,8 @@ bootblock-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CAR) += ../../../../../cpu/x86/early_r
postcar-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CAR) += car/exit_car.S
endif
+bootblock-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CAR) += car/car_lib.c
+
bootblock-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CPU) += cpulib.c
romstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CPU) += cpulib.c
ramstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CPU) += cpulib.c
diff --git a/src/soc/intel/common/block/cpu/car/car_lib.c b/src/soc/intel/common/block/cpu/car/car_lib.c
new file mode 100644
index 0000000000..a3c0d801f7
--- /dev/null
+++ b/src/soc/intel/common/block/cpu/car/car_lib.c
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <arch/cpu.h>
+#include <console/console.h>
+#include <intelblocks/car_lib.h>
+
+/*
+ * Gathers and prints information about the CPU's L3 cache.
+ *
+ * This function does the following:
+ * 1. Sets the cache level of interest to L3.
+ * 2. Prints the following cache details to the console:
+ * - Cache level
+ * - Associativity (number of ways)
+ * - Number of physical partitions
+ * - Line size (in bytes)
+ * - Number of sets
+ * - Total cache size (in MiB), calculated using the 'get_cache_size' function.
+ */
+void car_report_cache_info(void)
+{
+ int cache_level = CACHE_L3;
+ struct cpu_cache_info info;
+
+ if (!fill_cpu_cache_info(cache_level, &info))
+ return;
+
+ printk(BIOS_INFO, "Cache: Level %d: ", cache_level);
+ printk(BIOS_INFO, "Associativity = %zd Partitions = %zd Line Size = %zd Sets = %zd\n",
+ info.num_ways, info.physical_partitions, info.line_size, info.num_sets);
+
+ printk(BIOS_INFO, "Cache size = %zu MiB\n", get_cache_size(&info)/MiB);
+}
diff --git a/src/soc/intel/common/block/include/intelblocks/car_lib.h b/src/soc/intel/common/block/include/intelblocks/car_lib.h
new file mode 100644
index 0000000000..f106874c9c
--- /dev/null
+++ b/src/soc/intel/common/block/include/intelblocks/car_lib.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef SOC_INTEL_COMMON_BLOCK_CAR_LIB_H
+#define SOC_INTEL_COMMON_BLOCK_CAR_LIB_H
+
+#include <types.h>
+
+/* Gathers and prints information about the CPU's L3 cache */
+void car_report_cache_info(void);
+
+#endif /* SOC_INTEL_COMMON_BLOCK_CAR_LIB_H */