Fix support for RAM-less multi-processor init

Fix regression after commit:
  7dfe32c540

Only align 16-bit entry on platforms that really require it,
indicated by selecting SIPI_VECTOR_IN_ROM in CPU Kconfig.
Disable assertion test of AP_SIPI_VECTOR for platforms not
depending on this feature.

Build of romstage should be fixed to get the vector address from
bootblock build automatically.

Change-Id: Ide470833c0254df1a9ff708369ab1c095ccfb98d
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/875
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Kyösti Mälkki 2012-04-06 04:03:50 +03:00 committed by Stefan Reinauer
parent 334532eeff
commit f8c7c2396e
3 changed files with 17 additions and 5 deletions

View File

@ -8,6 +8,13 @@ config AP_IN_SIPI_WAIT
default n default n
depends on ARCH_X86 depends on ARCH_X86
# Aligns 16bit entry code in bootblock so that hyper-threading CPUs
# can boot AP CPUs to enable their shared caches.
config SIPI_VECTOR_IN_ROM
bool
default n
depends on ARCH_X86
config RAMBASE config RAMBASE
hex hex
default 0x100000 default 0x100000

View File

@ -30,10 +30,11 @@ TARGET(binary)
SECTIONS SECTIONS
{ {
/* Symbol ap_sipi_vector must be aligned to 4kB to start AP CPUs /* Symbol ap_sipi_vector must be aligned to 4kB to start AP CPUs
* with Startup IPI message without RAM. * with Startup IPI message without RAM. Align .rom to next 4 byte
* boundary anyway, so no pad byte appears between _rom and _start.
*/ */
.bogus ROMLOC_MIN : { .bogus ROMLOC_MIN : {
. = ALIGN(4096); . = CONFIG_SIPI_VECTOR_IN_ROM ? ALIGN(4096) : ALIGN(4);
ROMLOC = .; ROMLOC = .;
} >rom = 0xff } >rom = 0xff
@ -52,11 +53,14 @@ SECTIONS
* may cause the total size of a section to change when the start * may cause the total size of a section to change when the start
* address gets applied. * address gets applied.
*/ */
ROMLOC_MIN = 0xffffff00 - (_erom - _rom + 16) - 4096; ROMLOC_MIN = 0xffffff00 - (_erom - _rom + 16) -
(CONFIG_SIPI_VECTOR_IN_ROM ? 4096 : 0);
/* Post-check proper SIPI vector. */ /* Post-check proper SIPI vector. */
_bogus = ASSERT(((ap_sipi_vector & 0x0fff) == 0x0), "Bad SIPI vector alignment"); _bogus = ASSERT(!CONFIG_SIPI_VECTOR_IN_ROM || ((ap_sipi_vector & 0x0fff) == 0x0),
_bogus = ASSERT((ap_sipi_vector == CONFIG_AP_SIPI_VECTOR), "Address mismatch on AP_SIPI_VECTOR"); "Bad SIPI vector alignment");
_bogus = ASSERT(!CONFIG_SIPI_VECTOR_IN_ROM || (ap_sipi_vector == CONFIG_AP_SIPI_VECTOR),
"Address mismatch on AP_SIPI_VECTOR");
/DISCARD/ : { /DISCARD/ : {
*(.comment) *(.comment)

View File

@ -11,6 +11,7 @@ config SOCKET_SPECIFIC_OPTIONS # dummy
select MMX select MMX
select SSE select SSE
select UDELAY_TSC select UDELAY_TSC
select SIPI_VECTOR_IN_ROM
# mPGA604 are usually Intel Netburst CPUs which should have SSE2 # mPGA604 are usually Intel Netburst CPUs which should have SSE2
# but the ramtest.c code on the Dell S1850 seems to choke on # but the ramtest.c code on the Dell S1850 seems to choke on