summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/xeon_sp/include/soc/util.h1
-rw-r--r--src/soc/intel/xeon_sp/spr/soc_acpi.c2
-rw-r--r--src/soc/intel/xeon_sp/util.c12
3 files changed, 14 insertions, 1 deletions
diff --git a/src/soc/intel/xeon_sp/include/soc/util.h b/src/soc/intel/xeon_sp/include/soc/util.h
index a828ffce96..8e80c64d14 100644
--- a/src/soc/intel/xeon_sp/include/soc/util.h
+++ b/src/soc/intel/xeon_sp/include/soc/util.h
@@ -13,6 +13,7 @@ msr_t read_msr_ppin(void);
int get_platform_thread_count(void);
const IIO_UDS *get_iio_uds(void);
unsigned int soc_get_num_cpus(void);
+bool soc_cpu_is_enabled(const size_t idx);
void set_bios_init_completion(void);
uint8_t soc_get_iio_ioapicid(int socket, int stack);
diff --git a/src/soc/intel/xeon_sp/spr/soc_acpi.c b/src/soc/intel/xeon_sp/spr/soc_acpi.c
index 5340b7bd74..2e77de28f3 100644
--- a/src/soc/intel/xeon_sp/spr/soc_acpi.c
+++ b/src/soc/intel/xeon_sp/spr/soc_acpi.c
@@ -394,7 +394,7 @@ void uncore_inject_dsdt(const struct device *device)
const STACK_RES *ri =
&hob->PlatformData.IIO_resource[socket].StackRes[stack];
- stack_enabled = hob->PlatformData.IIO_resource[socket].Valid &&
+ stack_enabled = soc_cpu_is_enabled(socket) &&
ri->Personality < TYPE_RESERVED;
printk(BIOS_DEBUG, "%s processing socket: %d, stack: %d, type: %d\n",
diff --git a/src/soc/intel/xeon_sp/util.c b/src/soc/intel/xeon_sp/util.c
index e0bf9bc5a4..be30923ac7 100644
--- a/src/soc/intel/xeon_sp/util.c
+++ b/src/soc/intel/xeon_sp/util.c
@@ -118,6 +118,18 @@ void get_iiostack_info(struct iiostack_resource *info)
}
}
+/*
+ * Returns true if the CPU in the specified socket was found
+ * during QPI init, false otherwise.
+ */
+bool soc_cpu_is_enabled(const size_t idx)
+{
+ const IIO_UDS *hob = get_iio_uds();
+ assert(idx < CONFIG_MAX_SOCKET);
+
+ return hob->PlatformData.IIO_resource[idx].Valid;
+}
+
unsigned int soc_get_num_cpus(void)
{
/* The FSP IIO UDS HOB has field numCpus, it is actually socket count */