diff options
Diffstat (limited to 'src/soc/intel')
-rw-r--r-- | src/soc/intel/xeon_sp/acpi.c | 4 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/chip_common.c | 2 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/cpx/soc_util.c | 28 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/include/soc/util.h | 1 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/memmap.c | 2 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/skx/soc_util.c | 8 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/spr/soc_util.c | 5 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/util.c | 21 |
8 files changed, 27 insertions, 44 deletions
diff --git a/src/soc/intel/xeon_sp/acpi.c b/src/soc/intel/xeon_sp/acpi.c index 61d51862f5..5eaa76253a 100644 --- a/src/soc/intel/xeon_sp/acpi.c +++ b/src/soc/intel/xeon_sp/acpi.c @@ -104,9 +104,9 @@ size_t soc_get_ioapic_info(const uintptr_t *ioapic_bases[]) for (int stack = 0; stack < MAX_IIO_STACK; ++stack) { const STACK_RES *ri = &hob->PlatformData.IIO_resource[socket].StackRes[stack]; - if (!stack_needs_resource_alloc(ri)) - continue; uint32_t ioapic_base = ri->IoApicBase; + if (ioapic_base == 0 || ioapic_base == 0xFFFFFFFF) + continue; assert(index < ARRAY_SIZE(xeonsp_ioapic_bases)); xeonsp_ioapic_bases[index++] = ioapic_base; if (!CONFIG(XEON_SP_HAVE_IIO_IOAPIC)) diff --git a/src/soc/intel/xeon_sp/chip_common.c b/src/soc/intel/xeon_sp/chip_common.c index 0411a0326c..003a03f316 100644 --- a/src/soc/intel/xeon_sp/chip_common.c +++ b/src/soc/intel/xeon_sp/chip_common.c @@ -110,7 +110,7 @@ void attach_iio_stacks(struct device *dev) continue; const STACK_RES *ri = &hob->PlatformData.IIO_resource[s].StackRes[x]; - if (!stack_needs_resource_alloc(ri)) + if (ri->BusBase > ri->BusLimit) continue; if (!is_pcie_iio_stack_res(ri)) { diff --git a/src/soc/intel/xeon_sp/cpx/soc_util.c b/src/soc/intel/xeon_sp/cpx/soc_util.c index e277752e5c..7a7e295b62 100644 --- a/src/soc/intel/xeon_sp/cpx/soc_util.c +++ b/src/soc/intel/xeon_sp/cpx/soc_util.c @@ -25,14 +25,9 @@ const struct SystemMemoryMapHob *get_system_memory_map(void) return *memmap_addr; } -bool stack_needs_resource_alloc(const STACK_RES *res) -{ - return res->Personality == TYPE_UBOX_IIO; -} - bool is_pcie_iio_stack_res(const STACK_RES *res) { - return stack_needs_resource_alloc(res); + return res->Personality == TYPE_UBOX_IIO; } uint8_t get_stack_busno(const uint8_t stack) @@ -116,3 +111,24 @@ void soc_set_mrc_cold_boot_flag(bool cold_boot_required) cmos_write(new_mrc_status, CMOS_OFFSET_MRC_STATUS); } } + +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 socket = 0, iio = 0; iio < hob->PlatformData.numofIIO; ++socket) { + if (!soc_cpu_is_enabled(socket)) + continue; + iio++; + for (int x = 0; x < MAX_IIO_STACK; ++x) { + const STACK_RES *ri; + ri = &hob->PlatformData.IIO_resource[socket].StackRes[x]; + if (!is_pcie_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)); + } + } +} diff --git a/src/soc/intel/xeon_sp/include/soc/util.h b/src/soc/intel/xeon_sp/include/soc/util.h index a03c8e8404..fb9b1380b4 100644 --- a/src/soc/intel/xeon_sp/include/soc/util.h +++ b/src/soc/intel/xeon_sp/include/soc/util.h @@ -23,7 +23,6 @@ struct iiostack_resource { }; void get_iiostack_info(struct iiostack_resource *info); -bool stack_needs_resource_alloc(const STACK_RES *res); bool is_pcie_iio_stack_res(const STACK_RES *res); void bios_done_msr(void *unused); diff --git a/src/soc/intel/xeon_sp/memmap.c b/src/soc/intel/xeon_sp/memmap.c index e73143fc78..a9236a90a9 100644 --- a/src/soc/intel/xeon_sp/memmap.c +++ b/src/soc/intel/xeon_sp/memmap.c @@ -74,7 +74,7 @@ union dpr_register txt_get_chipset_dpr(void) for (int stack = 0; stack < MAX_IIO_STACK; ++stack) { const STACK_RES *ri = &hob->PlatformData.IIO_resource[socket].StackRes[stack]; - if (!stack_needs_resource_alloc(ri)) + if (ri->VtdBarAddress == 0) continue; uint8_t bus = ri->BusBase; dev = VTD_DEV(bus); diff --git a/src/soc/intel/xeon_sp/skx/soc_util.c b/src/soc/intel/xeon_sp/skx/soc_util.c index d61d07489f..a5db8fd309 100644 --- a/src/soc/intel/xeon_sp/skx/soc_util.c +++ b/src/soc/intel/xeon_sp/skx/soc_util.c @@ -54,15 +54,9 @@ const struct SystemMemoryMapHob *get_system_memory_map(void) return memmap_addr; } -bool stack_needs_resource_alloc(const STACK_RES *res) -{ - // TODO: do we have situation with only bux 0 and one stack? - return res->BusBase < res->BusLimit; -} - bool is_pcie_iio_stack_res(const STACK_RES *res) { - return stack_needs_resource_alloc(res); + return res->BusBase < res->BusLimit; } uint8_t get_stack_busno(const uint8_t stack) diff --git a/src/soc/intel/xeon_sp/spr/soc_util.c b/src/soc/intel/xeon_sp/spr/soc_util.c index 86fe803e85..9c1a691418 100644 --- a/src/soc/intel/xeon_sp/spr/soc_util.c +++ b/src/soc/intel/xeon_sp/spr/soc_util.c @@ -68,11 +68,6 @@ const struct SystemMemoryMapElement *get_system_memory_map_elment(uint8_t *num) return hob->Element; } -bool stack_needs_resource_alloc(const STACK_RES *res) -{ - return res->Personality == TYPE_UBOX_IIO || res->Personality == TYPE_DINO; -} - bool is_pcie_iio_stack_res(const STACK_RES *res) { return res->Personality == TYPE_UBOX_IIO; diff --git a/src/soc/intel/xeon_sp/util.c b/src/soc/intel/xeon_sp/util.c index c9f4c5549a..8658e01a4e 100644 --- a/src/soc/intel/xeon_sp/util.c +++ b/src/soc/intel/xeon_sp/util.c @@ -101,27 +101,6 @@ 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 socket = 0, iio = 0; iio < hob->PlatformData.numofIIO; ++socket) { - if (!soc_cpu_is_enabled(socket)) - continue; - iio++; - for (int x = 0; x < MAX_IIO_STACK; ++x) { - const STACK_RES *ri; - ri = &hob->PlatformData.IIO_resource[socket].StackRes[x]; - if (!stack_needs_resource_alloc(ri)) - continue; - assert(info->no_of_stacks < (CONFIG_MAX_SOCKET * MAX_IIO_STACK)); - memcpy(&info->res[info->no_of_stacks++], ri, sizeof(STACK_RES)); - } - } -} - /* * Returns true if the CPU in the specified socket was found * during QPI init, false otherwise. |