[coreboot-gerrit] New patch to review for coreboot: 2d3edb7 Static CBMEM / CAR: Flag boards with BROKEN_CAR_MIGRATE

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Sat Mar 29 13:57:11 CET 2014


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5419

-gerrit

commit 2d3edb7834ac5652f1849333b607af4f9f4a3fb7
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Fri Mar 28 23:46:45 2014 +0200

    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 at gmail.com>
---
 src/Kconfig                                | 9 +++++++++
 src/arch/x86/boot/Makefile.inc             | 2 +-
 src/arch/x86/boot/cbmem.c                  | 4 +++-
 src/cpu/x86/Makefile.inc                   | 2 +-
 src/lib/Makefile.inc                       | 2 +-
 src/mainboard/asus/dsbf/Kconfig            | 1 +
 src/mainboard/intel/cougar_canyon2/Kconfig | 1 +
 src/mainboard/iwave/iWRainbowG6/Kconfig    | 1 +
 src/mainboard/supermicro/x7db8/Kconfig     | 1 +
 9 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/Kconfig b/src/Kconfig
index 531a8c8..06d16aa 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -170,6 +170,15 @@ config EARLY_CBMEM_INIT
 	  some, for instance, execution timestamps. It needs support in
 	  romstage.c and should be enabled by the board's Kconfig.
 
+config BROKEN_CAR_MIGRATE
+	bool
+	default y if !EARLY_CBMEM_INIT && ACPI_HAVE_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
 	bool "The CBMEM space is dynamically grown."
 	default n
diff --git a/src/arch/x86/boot/Makefile.inc b/src/arch/x86/boot/Makefile.inc
index 79c6417..928fc03 100644
--- a/src/arch/x86/boot/Makefile.inc
+++ b/src/arch/x86/boot/Makefile.inc
@@ -1,5 +1,5 @@
 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 += gdt.c
diff --git a/src/arch/x86/boot/cbmem.c b/src/arch/x86/boot/cbmem.c
index c2d9a2e..8b2b6da 100644
--- a/src/arch/x86/boot/cbmem.c
+++ b/src/arch/x86/boot/cbmem.c
@@ -49,13 +49,15 @@ void set_top_of_ram(uint64_t ramtop)
 	backup_top_of_ram(ramtop);
 	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)
 {
 	printk(BIOS_WARNING, "WARNING: you need to define get_top_of_ram() for your chipset\n");
 	return 0;
 }
-#endif /* !__PRE_RAM__ */
+#endif
 
 #else
 
diff --git a/src/cpu/x86/Makefile.inc b/src/cpu/x86/Makefile.inc
index c0b50c5..514d96c 100644
--- a/src/cpu/x86/Makefile.inc
+++ b/src/cpu/x86/Makefile.inc
@@ -1,5 +1,5 @@
 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
 ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index 93babd3..f8cf3b1 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -103,7 +103,7 @@ romstage-y += dynamic_cbmem.c
 else
 ramstage-y += 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
 ramstage-y += cbmem_info.c
 
diff --git a/src/mainboard/asus/dsbf/Kconfig b/src/mainboard/asus/dsbf/Kconfig
index 5d67014..99aa56d 100644
--- a/src/mainboard/asus/dsbf/Kconfig
+++ b/src/mainboard/asus/dsbf/Kconfig
@@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select HAVE_PIRQ_TABLE
 	select DRIVERS_I2C_W83793
 	select DRIVERS_GENERIC_IOAPIC
+	select BROKEN_CAR_MIGRATE
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/intel/cougar_canyon2/Kconfig b/src/mainboard/intel/cougar_canyon2/Kconfig
index 569888d..61f1c6d 100644
--- a/src/mainboard/intel/cougar_canyon2/Kconfig
+++ b/src/mainboard/intel/cougar_canyon2/Kconfig
@@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select SUPERIO_SMSC_SIO1007
 	select ENABLE_VMX
 	select EARLY_CBMEM_INIT
+	select BROKEN_CAR_MIGRATE
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/iwave/iWRainbowG6/Kconfig b/src/mainboard/iwave/iWRainbowG6/Kconfig
index 75d4bb9..c6c15d5 100644
--- a/src/mainboard/iwave/iWRainbowG6/Kconfig
+++ b/src/mainboard/iwave/iWRainbowG6/Kconfig
@@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select HAVE_ACPI_TABLES
 	select BOARD_ROMSIZE_KB_1024
 	select GFXUMA
+	select BROKEN_CAR_MIGRATE
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/supermicro/x7db8/Kconfig b/src/mainboard/supermicro/x7db8/Kconfig
index 03f8ceb..7becacb 100644
--- a/src/mainboard/supermicro/x7db8/Kconfig
+++ b/src/mainboard/supermicro/x7db8/Kconfig
@@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
 	select HAVE_PIRQ_TABLE
 	select DRIVERS_I2C_W83793
 	select DRIVERS_GENERIC_IOAPIC
+	select BROKEN_CAR_MIGRATE
 
 config MAINBOARD_DIR
 	string



More information about the coreboot-gerrit mailing list