Lean Sheng Tan has submitted this change. ( https://review.coreboot.org/c/coreboot/+/82267?usp=email )
Change subject: soc/intel/xeon_sp: Move proximity domain setting up ......................................................................
soc/intel/xeon_sp: Move proximity domain setting up
Move proximity domain setting up to ahead of attach_iio_stacks() so that proximity domain info could be ready before attach_iio_stacks()/create_xeonsp_domains().
For example in SPR, is_iio_cxl_stack_res() refers to proximity domain info, and it will be called in create_xeonsp_domains().
TEST=Build and boot on intel/archercity
No significant boot log difference except for proximity domain dump info display are moved ahead (with correct contents).
Change-Id: I594f0ec0c23e3b62c3bdd917ebf6e45be6e4069e Signed-off-by: Shuo Liu shuo.liu@intel.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/82267 Reviewed-by: Patrick Rudolph patrick.rudolph@9elements.com Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/soc/intel/xeon_sp/cpx/chip.c M src/soc/intel/xeon_sp/gnr/chip.c M src/soc/intel/xeon_sp/include/soc/numa.h M src/soc/intel/xeon_sp/numa.c M src/soc/intel/xeon_sp/skx/chip.c M src/soc/intel/xeon_sp/spr/chip.c M src/soc/intel/xeon_sp/spr/soc_util.c M src/soc/intel/xeon_sp/uncore.c 8 files changed, 21 insertions(+), 15 deletions(-)
Approvals: Patrick Rudolph: Looks good to me, approved build bot (Jenkins): Verified
diff --git a/src/soc/intel/xeon_sp/cpx/chip.c b/src/soc/intel/xeon_sp/cpx/chip.c index 8b9a673..e6b2bdb 100644 --- a/src/soc/intel/xeon_sp/cpx/chip.c +++ b/src/soc/intel/xeon_sp/cpx/chip.c @@ -12,6 +12,7 @@ #include <intelblocks/p2sb.h> #include <soc/acpi.h> #include <soc/chip_common.h> +#include <soc/numa.h> #include <soc/pch.h> #include <soc/soc_pch.h> #include <soc/ramstage.h> @@ -167,6 +168,7 @@ printk(BIOS_DEBUG, "coreboot: calling fsp_silicon_init\n"); fsp_silicon_init();
+ setup_pds(); attach_iio_stacks();
override_hpet_ioapic_bdf(); diff --git a/src/soc/intel/xeon_sp/gnr/chip.c b/src/soc/intel/xeon_sp/gnr/chip.c index 2345894..aa9b378 100644 --- a/src/soc/intel/xeon_sp/gnr/chip.c +++ b/src/soc/intel/xeon_sp/gnr/chip.c @@ -4,6 +4,7 @@ #include <intelblocks/pmclib.h> #include <soc/pm.h> #include <soc/chip_common.h> +#include <soc/numa.h> #include <soc/ramstage.h>
#include "chip.h" @@ -38,6 +39,7 @@ printk(BIOS_DEBUG, "coreboot: calling fsp_silicon_init\n"); fsp_silicon_init();
+ setup_pds(); attach_iio_stacks(); pch_enable_ioapic();
diff --git a/src/soc/intel/xeon_sp/include/soc/numa.h b/src/soc/intel/xeon_sp/include/soc/numa.h index 7bc86ae..d124517 100644 --- a/src/soc/intel/xeon_sp/include/soc/numa.h +++ b/src/soc/intel/xeon_sp/include/soc/numa.h @@ -57,9 +57,7 @@
extern struct proximity_domains pds;
-void dump_pds(void); -void fill_pds(void); -void fill_pd_distances(void); +void setup_pds(void);
/* * Return the total size of memory regions in generic initiator affinity diff --git a/src/soc/intel/xeon_sp/numa.c b/src/soc/intel/xeon_sp/numa.c index 69ca063..81331ed 100644 --- a/src/soc/intel/xeon_sp/numa.c +++ b/src/soc/intel/xeon_sp/numa.c @@ -11,7 +11,7 @@ #include <soc/util.h> #include <types.h>
-void dump_pds(void) +static void dump_pds(void) { printk(BIOS_DEBUG, "====== Proximity Domain Dump ======\n"); printk(BIOS_DEBUG, "number of proximity domains: %d\n", pds.num_pds); @@ -25,7 +25,7 @@ } }
-void fill_pds(void) +static void fill_pds(void) { uint8_t num_sockets = soc_get_num_cpus(); uint8_t num_cxlnodes = get_cxl_node_count(); @@ -151,7 +151,7 @@ #define PD_DISTANCE_MAX 0xFF #define PD_DISTANCE_IO_EXTRA 0x01
-void fill_pd_distances(void) +static void fill_pd_distances(void) { for (int i = 0; i < pds.num_pds; i++) { for (int j = 0; j < pds.num_pds; j++) { @@ -173,3 +173,10 @@ } } } + +void setup_pds(void) +{ + fill_pds(); + fill_pd_distances(); + dump_pds(); +} diff --git a/src/soc/intel/xeon_sp/skx/chip.c b/src/soc/intel/xeon_sp/skx/chip.c index 903d0cc..37535a3 100644 --- a/src/soc/intel/xeon_sp/skx/chip.c +++ b/src/soc/intel/xeon_sp/skx/chip.c @@ -7,6 +7,7 @@ #include <intelblocks/acpi.h> #include <soc/acpi.h> #include <soc/chip_common.h> +#include <soc/numa.h> #include <soc/pch.h> #include <soc/soc_pch.h> #include <soc/ramstage.h> @@ -42,6 +43,7 @@ printk(BIOS_DEBUG, "coreboot: calling fsp_silicon_init\n"); fsp_silicon_init();
+ setup_pds(); attach_iio_stacks();
override_hpet_ioapic_bdf(); diff --git a/src/soc/intel/xeon_sp/spr/chip.c b/src/soc/intel/xeon_sp/spr/chip.c index ec23940..1eab917 100644 --- a/src/soc/intel/xeon_sp/spr/chip.c +++ b/src/soc/intel/xeon_sp/spr/chip.c @@ -125,6 +125,7 @@ printk(BIOS_DEBUG, "coreboot: calling fsp_silicon_init\n"); fsp_silicon_init();
+ setup_pds(); attach_iio_stacks();
override_hpet_ioapic_bdf(); diff --git a/src/soc/intel/xeon_sp/spr/soc_util.c b/src/soc/intel/xeon_sp/spr/soc_util.c index 9ad09f4..17addfc 100644 --- a/src/soc/intel/xeon_sp/spr/soc_util.c +++ b/src/soc/intel/xeon_sp/spr/soc_util.c @@ -90,6 +90,9 @@ */ bool is_iio_cxl_stack_res(const STACK_RES *res) { + /* pds should be setup ahead of this call */ + assert(pds.num_pds); + for (uint8_t i = 0; i < pds.num_pds; i++) { if (pds.pds[i].pd_type == PD_TYPE_PROCESSOR) continue; diff --git a/src/soc/intel/xeon_sp/uncore.c b/src/soc/intel/xeon_sp/uncore.c index efa61b7..4c22685 100644 --- a/src/soc/intel/xeon_sp/uncore.c +++ b/src/soc/intel/xeon_sp/uncore.c @@ -336,15 +336,6 @@ { int index = 0;
- static bool once; - if (!once) { - /* Construct NUMA data structure. This is needed for CXL. */ - fill_pds(); - fill_pd_distances(); - dump_pds(); - once = true; - } - /* Read standard PCI resources. */ pci_dev_read_resources(dev);