summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2024-02-18 11:45:30 +0100
committerNico Huber <nico.h@gmx.de>2024-03-05 21:26:39 +0000
commit0201d989f20b3157d52fb9dca01256ebe6550126 (patch)
treeb7747a88f5aa0706037b49716247d8ef4896bb63 /src/arch
parent67166a7eb231dcb3cff5c5b8b407cebcfe6f753f (diff)
drivers/intel/fsp: Work around multi-socket Xeon-SP pipe init bug
Starting with Intel CPX there is a bug in the reference code during the Pipe init. This code synchronises the CAR between sockets in FSP-M. This code implicitly assumes that the FSP heap is right above the RC heap, where both of them are located at the bottom part of CAR. Work around this issue by making that implicit assumption done in FSP explicit in the coreboot linker script and allocation. TEST=intel/archercity CRB Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Signed-off-by: Shuo Liu <shuo.liu@intel.com> Change-Id: I38a4f4b7470556e528a1672044c31f8bd92887d4 Reviewed-on: https://review.coreboot.org/c/coreboot/+/80579 Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Shuo Liu <shuo.liu@intel.com>
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/car.ld6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld
index 17e6eea06d..8e1af15df3 100644
--- a/src/arch/x86/car.ld
+++ b/src/arch/x86/car.ld
@@ -9,6 +9,10 @@
.car.data . (NOLOAD) : {
_car_region_start = . ;
. += CONFIG_FSP_M_RC_HEAP_SIZE;
+#if CONFIG(FSP_SPEC_VIOLATION_XEON_SP_HEAP_WORKAROUND)
+ REGION(fspm_heap, ., CONFIG_FSP_TEMP_RAM_SIZE, 16)
+#endif
+
#if CONFIG(PAGING_IN_CACHE_AS_RAM)
/* Page table pre-allocation. CONFIG_DCACHE_RAM_BASE should be 4KiB
* aligned when using this option. */
@@ -107,7 +111,7 @@ _car_region_end = . + CONFIG_DCACHE_RAM_SIZE - (. - _car_region_start)
. = _car_region_start;
.car.fspm_rc_heap . (NOLOAD) : {
-. += CONFIG_FSP_M_RC_HEAP_SIZE;
+ . += CONFIG_FSP_M_RC_HEAP_SIZE;
}
. = _car_region_end;