summaryrefslogtreecommitdiff
path: root/src/soc
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2020-11-12 17:33:00 +0100
committerArthur Heymans <arthur@aheymans.xyz>2020-11-13 19:27:33 +0000
commit6408ada4a20ca2811de8a158d0579b421f56d8fe (patch)
tree81180c1c040aae6dae89c98f76f122f6754f67b8 /src/soc
parent165893b67be4a116a96b242bf4ee5370ec707b43 (diff)
downloadcoreboot-6408ada4a20ca2811de8a158d0579b421f56d8fe.tar.xz
soc/intel/xeon_sp: move get_iiostack_info() to a common place
All this function does is looping over IIO stacks in the FSP HOB. The only 'SOC/FSP specific' thing is the way to detect if the stack is an IIO stack so add a callback to determine this. Change-Id: I4fa9c54d50279213a4174186a23c3cc156e21c9a Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/47522 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Marc Jones <marc@marcjonesconsulting.com>
Diffstat (limited to 'src/soc')
-rw-r--r--src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h7
-rw-r--r--src/soc/intel/xeon_sp/cpx/soc_acpi.c1
-rw-r--r--src/soc/intel/xeon_sp/cpx/soc_util.c16
-rw-r--r--src/soc/intel/xeon_sp/include/soc/util.h8
-rw-r--r--src/soc/intel/xeon_sp/skx/include/soc/soc_util.h7
-rw-r--r--src/soc/intel/xeon_sp/skx/soc_util.c18
-rw-r--r--src/soc/intel/xeon_sp/util.c17
7 files changed, 31 insertions, 43 deletions
diff --git a/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h b/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h
index e3c971d49f..5ce392863c 100644
--- a/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h
+++ b/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h
@@ -6,13 +6,6 @@
#include <hob_iiouds.h>
#include <hob_memmap.h>
-struct iiostack_resource {
- uint8_t no_of_stacks;
- STACK_RES res[MAX_SOCKET * MAX_LOGIC_IIO_STACK];
-};
-
-void get_iiostack_info(struct iiostack_resource *info);
-
const struct SystemMemoryMapHob *get_system_memory_map(void);
uint32_t get_socket_stack_busno(uint32_t socket, uint32_t stack);
diff --git a/src/soc/intel/xeon_sp/cpx/soc_acpi.c b/src/soc/intel/xeon_sp/cpx/soc_acpi.c
index c35c2482f4..599ccff03d 100644
--- a/src/soc/intel/xeon_sp/cpx/soc_acpi.c
+++ b/src/soc/intel/xeon_sp/cpx/soc_acpi.c
@@ -16,6 +16,7 @@
#include <soc/pci_devs.h>
#include <soc/pm.h>
#include <soc/soc_util.h>
+#include <soc/util.h>
/* TODO: Check if the common/acpi weak function can be used */
unsigned long acpi_fill_mcfg(unsigned long current)
diff --git a/src/soc/intel/xeon_sp/cpx/soc_util.c b/src/soc/intel/xeon_sp/cpx/soc_util.c
index 242fcfe4f2..578f67cda2 100644
--- a/src/soc/intel/xeon_sp/cpx/soc_util.c
+++ b/src/soc/intel/xeon_sp/cpx/soc_util.c
@@ -27,21 +27,9 @@ const struct SystemMemoryMapHob *get_system_memory_map(void)
return *memmap_addr;
}
-void get_iiostack_info(struct iiostack_resource *info)
+bool is_iio_stack_res(const STACK_RES *res)
{
- const IIO_UDS *hob = get_iio_uds();
-
- // copy IIO Stack info from FSP HOB
- info->no_of_stacks = 0;
- for (int s = 0; s < hob->PlatformData.numofIIO; ++s) {
- for (int x = 0; x < MAX_IIO_STACK; ++x) {
- const STACK_RES *ri = &hob->PlatformData.IIO_resource[s].StackRes[x];
- if (ri->Personality == TYPE_UBOX_IIO) {
- assert(info->no_of_stacks < ARRAY_SIZE(info->res));
- memcpy(&info->res[info->no_of_stacks++], ri, sizeof(STACK_RES));
- }
- }
- }
+ return res->Personality == TYPE_UBOX_IIO;
}
uint32_t get_socket_stack_busno(uint32_t socket, uint32_t stack)
diff --git a/src/soc/intel/xeon_sp/include/soc/util.h b/src/soc/intel/xeon_sp/include/soc/util.h
index 014b238165..fc0dee7aba 100644
--- a/src/soc/intel/xeon_sp/include/soc/util.h
+++ b/src/soc/intel/xeon_sp/include/soc/util.h
@@ -17,4 +17,12 @@ unsigned int soc_get_num_cpus(void);
void xeonsp_init_cpu_config(void);
void set_bios_init_completion(void);
+struct iiostack_resource {
+ uint8_t no_of_stacks;
+ STACK_RES res[CONFIG_MAX_SOCKET * MAX_IIO_STACK];
+};
+
+void get_iiostack_info(struct iiostack_resource *info);
+bool is_iio_stack_res(const STACK_RES *res);
+
#endif
diff --git a/src/soc/intel/xeon_sp/skx/include/soc/soc_util.h b/src/soc/intel/xeon_sp/skx/include/soc/soc_util.h
index 0f528110dd..526f5a6a3c 100644
--- a/src/soc/intel/xeon_sp/skx/include/soc/soc_util.h
+++ b/src/soc/intel/xeon_sp/skx/include/soc/soc_util.h
@@ -6,13 +6,6 @@
#include <hob_iiouds.h>
#include <hob_memmap.h>
-struct iiostack_resource {
- uint8_t no_of_stacks;
- STACK_RES res[CONFIG_MAX_SOCKET * MAX_IIO_STACK];
-};
-
-void get_iiostack_info(struct iiostack_resource *info);
-
void config_reset_cpl3_csrs(void);
const struct SystemMemoryMapHob *get_system_memory_map(void);
diff --git a/src/soc/intel/xeon_sp/skx/soc_util.c b/src/soc/intel/xeon_sp/skx/soc_util.c
index d5e1ae13f4..7d95ae8600 100644
--- a/src/soc/intel/xeon_sp/skx/soc_util.c
+++ b/src/soc/intel/xeon_sp/skx/soc_util.c
@@ -55,22 +55,10 @@ const struct SystemMemoryMapHob *get_system_memory_map(void)
return memmap_addr;
}
-void get_iiostack_info(struct iiostack_resource *info)
+bool is_iio_stack_res(const STACK_RES *res)
{
- const IIO_UDS *hob = get_iio_uds();
-
- // copy IIO Stack info from FSP HOB
- info->no_of_stacks = 0;
- for (int s = 0; s < hob->PlatformData.numofIIO; ++s) {
- for (int x = 0; x < MAX_IIO_STACK; ++x) {
- const STACK_RES *ri = &hob->PlatformData.IIO_resource[s].StackRes[x];
- // TODO: do we have situation with only bux 0 and one stack?
- if (ri->BusBase >= ri->BusLimit)
- continue;
- assert(info->no_of_stacks < (CONFIG_MAX_SOCKET * MAX_IIO_STACK));
- memcpy(&info->res[info->no_of_stacks++], ri, sizeof(STACK_RES));
- }
- }
+ // TODO: do we have situation with only bux 0 and one stack?
+ return res->BusBase < res->BusLimit;
}
uint32_t get_socket_stack_busno(uint32_t socket, uint32_t stack)
diff --git a/src/soc/intel/xeon_sp/util.c b/src/soc/intel/xeon_sp/util.c
index 310421566c..b4f7eaab3c 100644
--- a/src/soc/intel/xeon_sp/util.c
+++ b/src/soc/intel/xeon_sp/util.c
@@ -119,6 +119,23 @@ const IIO_UDS *get_iio_uds(void)
return hob;
}
+void get_iiostack_info(struct iiostack_resource *info)
+{
+ const IIO_UDS *hob = get_iio_uds();
+
+ // copy IIO Stack info from FSP HOB
+ info->no_of_stacks = 0;
+ for (int s = 0; s < hob->PlatformData.numofIIO; ++s) {
+ for (int x = 0; x < MAX_IIO_STACK; ++x) {
+ const STACK_RES *ri = &hob->PlatformData.IIO_resource[s].StackRes[x];
+ if (!is_iio_stack_res(ri))
+ continue;
+ assert(info->no_of_stacks < (CONFIG_MAX_SOCKET * MAX_IIO_STACK));
+ memcpy(&info->res[info->no_of_stacks++], ri, sizeof(STACK_RES));
+ }
+ }
+}
+
unsigned int soc_get_num_cpus(void)
{
/* The FSP IIO UDS HOB has field numCpus, it is actually socket count */