Static CBMEM / CAR: Flag boards with BROKEN_CAR_MIGRATE

Use of CAR_GLOBAL is not safe after CAR is torn down, unless the
board properly implements EARLY_CBMEM_INIT.

Flag vulnerable boards that only do cbmem_recovery() in romstage on S3
resume and implementation with Intel FSP that invalidates cache before
we have a chance to copy the contents.

Change-Id: Iecd10dee9b73ab3f1f66826950fa0945675ff39f
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5419
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@google.com>
This commit is contained in:
Kyösti Mälkki 2014-03-28 23:46:45 +02:00
parent 0ec3f493a3
commit deb2cb27e9
9 changed files with 19 additions and 4 deletions

View File

@ -170,6 +170,15 @@ config EARLY_CBMEM_INIT
some, for instance, execution timestamps. It needs support in some, for instance, execution timestamps. It needs support in
romstage.c and should be enabled by the board's Kconfig. romstage.c and should be enabled by the board's Kconfig.
config BROKEN_CAR_MIGRATE
bool
default y if !EARLY_CBMEM_INIT && HAVE_ACPI_RESUME
default n
help
Many boards use CAR_GLOBAL but have no EARLY_CBMEM_INIT and
manage CAR migration on S3 resume path only. Couple boards use
CAR_GLOBAL and never do CAR migration.
config DYNAMIC_CBMEM config DYNAMIC_CBMEM
bool "The CBMEM space is dynamically grown." bool "The CBMEM space is dynamically grown."
default n default n

View File

@ -1,5 +1,5 @@
romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c
romstage-$(CONFIG_HAVE_ACPI_RESUME) += cbmem.c romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += cbmem.c
ramstage-y += boot.c ramstage-y += boot.c
ramstage-y += gdt.c ramstage-y += gdt.c

View File

@ -49,13 +49,15 @@ void set_top_of_ram(uint64_t ramtop)
backup_top_of_ram(ramtop); backup_top_of_ram(ramtop);
cbmem_late_set_table(ramtop - HIGH_MEMORY_SIZE, HIGH_MEMORY_SIZE); cbmem_late_set_table(ramtop - HIGH_MEMORY_SIZE, HIGH_MEMORY_SIZE);
} }
#endif /* !__PRE_RAM__ */
#if CONFIG_BROKEN_CAR_MIGRATE || !defined(__PRE_RAM__)
unsigned long __attribute__((weak)) get_top_of_ram(void) unsigned long __attribute__((weak)) get_top_of_ram(void)
{ {
printk(BIOS_WARNING, "WARNING: you need to define get_top_of_ram() for your chipset\n"); printk(BIOS_WARNING, "WARNING: you need to define get_top_of_ram() for your chipset\n");
return 0; return 0;
} }
#endif /* !__PRE_RAM__ */ #endif
#else #else

View File

@ -1,5 +1,5 @@
romstage-$(CONFIG_EARLY_CBMEM_INIT) += car.c romstage-$(CONFIG_EARLY_CBMEM_INIT) += car.c
romstage-$(CONFIG_HAVE_ACPI_RESUME) += car.c romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += car.c
subdirs-$(CONFIG_PARALLEL_MP) += name subdirs-$(CONFIG_PARALLEL_MP) += name
ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c

View File

@ -103,7 +103,7 @@ romstage-y += dynamic_cbmem.c
else else
ramstage-y += cbmem.c ramstage-y += cbmem.c
romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c
romstage-$(CONFIG_HAVE_ACPI_RESUME) += cbmem.c romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += cbmem.c
endif # CONFIG_DYNAMIC_CBMEM endif # CONFIG_DYNAMIC_CBMEM
ramstage-y += cbmem_info.c ramstage-y += cbmem_info.c

View File

@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select HAVE_PIRQ_TABLE select HAVE_PIRQ_TABLE
select DRIVERS_I2C_W83793 select DRIVERS_I2C_W83793
select DRIVERS_GENERIC_IOAPIC select DRIVERS_GENERIC_IOAPIC
select BROKEN_CAR_MIGRATE
config MAINBOARD_DIR config MAINBOARD_DIR
string string

View File

@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select SUPERIO_SMSC_SIO1007 select SUPERIO_SMSC_SIO1007
select ENABLE_VMX select ENABLE_VMX
select EARLY_CBMEM_INIT select EARLY_CBMEM_INIT
select BROKEN_CAR_MIGRATE
config MAINBOARD_DIR config MAINBOARD_DIR
string string

View File

@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select HAVE_ACPI_TABLES select HAVE_ACPI_TABLES
select BOARD_ROMSIZE_KB_1024 select BOARD_ROMSIZE_KB_1024
select GFXUMA select GFXUMA
select BROKEN_CAR_MIGRATE
config MAINBOARD_DIR config MAINBOARD_DIR
string string

View File

@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select HAVE_PIRQ_TABLE select HAVE_PIRQ_TABLE
select DRIVERS_I2C_W83793 select DRIVERS_I2C_W83793
select DRIVERS_GENERIC_IOAPIC select DRIVERS_GENERIC_IOAPIC
select BROKEN_CAR_MIGRATE
config MAINBOARD_DIR config MAINBOARD_DIR
string string