summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/init/ldscript_failover.lb13
-rw-r--r--src/cpu/Kconfig6
2 files changed, 15 insertions, 4 deletions
diff --git a/src/arch/x86/init/ldscript_failover.lb b/src/arch/x86/init/ldscript_failover.lb
index 83e5eb3432..61c3d2a35b 100644
--- a/src/arch/x86/init/ldscript_failover.lb
+++ b/src/arch/x86/init/ldscript_failover.lb
@@ -29,17 +29,18 @@ MEMORY {
TARGET(binary)
SECTIONS
{
- /* Align .rom to next 4 byte boundary so no pad byte appears
- * between _rom and _start.
+ /* Symbol ap_sipi_vector must be aligned to 4kB to start AP CPUs
+ * with Startup IPI message without RAM.
*/
.bogus ROMLOC_MIN : {
- . = ALIGN(4);
+ . = ALIGN(4096);
ROMLOC = .;
} >rom = 0xff
/* This section might be better named .setup */
.rom ROMLOC : {
_rom = .;
+ ap_sipi_vector = .;
*(.rom.text);
*(.rom.data);
*(.rom.data.*);
@@ -51,7 +52,11 @@ SECTIONS
* may cause the total size of a section to change when the start
* address gets applied.
*/
- ROMLOC_MIN = 0xffffff00 - (_erom - _rom + 16);
+ ROMLOC_MIN = 0xffffff00 - (_erom - _rom + 16) - 4096;
+
+ /* Post-check proper SIPI vector. */
+ _bogus = ASSERT(((ap_sipi_vector & 0x0fff) == 0x0), "Bad SIPI vector alignment");
+ _bogus = ASSERT((ap_sipi_vector == CONFIG_AP_SIPI_VECTOR), "Address mismatch on AP_SIPI_VECTOR");
/DISCARD/ : {
*(.comment)
diff --git a/src/cpu/Kconfig b/src/cpu/Kconfig
index 6e6518618b..0bdef347f0 100644
--- a/src/cpu/Kconfig
+++ b/src/cpu/Kconfig
@@ -31,6 +31,12 @@ config SMP
This option is used to enable certain functions to make coreboot
work correctly on symmetric multi processor (SMP) systems.
+config AP_SIPI_VECTOR
+ hex
+ default 0xfffff000
+ help
+ This must equal address of ap_sipi_vector from bootblock build.
+
config MMX
bool
help