[coreboot-gerrit] Patch set updated for coreboot: 6aec025 CBMEM: Tidy up CAR migration

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Thu Jan 1 13:44:55 CET 2015


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/7860

-gerrit

commit 6aec0251e4207da4bbb1c6bf55c896f90eb9cedc
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Wed Dec 31 20:55:19 2014 +0200

    CBMEM: Tidy up CAR migration
    
    Move the  CAR migration call to arch -specific part of CBMEM init,
    it is truly a x86 specific thing.
    
    Change-Id: I715417e54f197b8745e0670d6b900a5660178141
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/Kconfig                                   | 14 --------------
 src/arch/arm/include/arch/early_variables.h   |  1 -
 src/arch/arm64/include/arch/early_variables.h |  5 -----
 src/arch/riscv/include/arch/early_variables.h |  5 -----
 src/arch/x86/Kconfig                          | 15 +++++++++++++++
 src/arch/x86/boot/cbmem.c                     |  4 ++++
 src/lib/cbmem.c                               |  3 ++-
 src/lib/dynamic_cbmem.c                       | 10 ++--------
 8 files changed, 23 insertions(+), 34 deletions(-)

diff --git a/src/Kconfig b/src/Kconfig
index c9a04a4..cf66598 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -159,20 +159,6 @@ config INCLUDE_CONFIG_FILE
 config EARLY_CBMEM_INIT
 	def_bool !LATE_CBMEM_INIT
 
-config LATE_CBMEM_INIT
-	def_bool n
-	help
-	  Enable this in chipset's Kconfig if northbridge does not implement
-	  early get_top_of_ram() call for romstage. CBMEM tables will be
-	  allocated late in ramstage, after PCI devices resources are known.
-
-config BROKEN_CAR_MIGRATE
-	def_bool LATE_CBMEM_INIT
-	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
 	default n
diff --git a/src/arch/arm/include/arch/early_variables.h b/src/arch/arm/include/arch/early_variables.h
index 5b58baa..539b572 100644
--- a/src/arch/arm/include/arch/early_variables.h
+++ b/src/arch/arm/include/arch/early_variables.h
@@ -26,6 +26,5 @@
 static inline void *car_get_var_ptr(void *var) { return var; }
 #define car_get_var(var) (var)
 #define car_set_var(var, val) do { (var) = (val); } while (0)
-static inline void car_migrate_variables(void) { }
 
 #endif
diff --git a/src/arch/arm64/include/arch/early_variables.h b/src/arch/arm64/include/arch/early_variables.h
index 3d9fa26..539b572 100644
--- a/src/arch/arm64/include/arch/early_variables.h
+++ b/src/arch/arm64/include/arch/early_variables.h
@@ -20,16 +20,11 @@
 #ifndef ARCH_EARLY_VARIABLES_H
 #define ARCH_EARLY_VARIABLES_H
 
-#if CONFIG_CAR_MIGRATION
-	#error "This is ARM, silly... we don't have CAR here."
-#endif
-
 #define CAR_GLOBAL
 
 #define CAR_MIGRATE(migrate_fn_)
 static inline void *car_get_var_ptr(void *var) { return var; }
 #define car_get_var(var) (var)
 #define car_set_var(var, val) do { (var) = (val); } while (0)
-static inline void car_migrate_variables(void) { }
 
 #endif
diff --git a/src/arch/riscv/include/arch/early_variables.h b/src/arch/riscv/include/arch/early_variables.h
index 3a1f20d..539b572 100644
--- a/src/arch/riscv/include/arch/early_variables.h
+++ b/src/arch/riscv/include/arch/early_variables.h
@@ -20,16 +20,11 @@
 #ifndef ARCH_EARLY_VARIABLES_H
 #define ARCH_EARLY_VARIABLES_H
 
-#if defined(CONFIG_CAR_MIGRATION) && CONFIG_CAR_MIGRATION
-	#error "This is RISCV, silly... we don't have CAR here."
-#endif
-
 #define CAR_GLOBAL
 
 #define CAR_MIGRATE(migrate_fn_)
 static inline void *car_get_var_ptr(void *var) { return var; }
 #define car_get_var(var) (var)
 #define car_set_var(var, val) do { (var) = (val); } while (0)
-static inline void car_migrate_variables(void) { }
 
 #endif
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 56d8f88..b6791ed 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -47,6 +47,21 @@ config ROMCC
 	bool
 	default n
 
+config BROKEN_CAR_MIGRATE
+	def_bool 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 LATE_CBMEM_INIT
+	def_bool n
+	select BROKEN_CAR_MIGRATE
+	help
+	  Enable this in chipset's Kconfig if northbridge does not implement
+	  early get_top_of_ram() call for romstage. CBMEM tables will be
+	  allocated late in ramstage, after PCI devices resources are known.
+
 config PC80_SYSTEM
 	bool
 	default y if ARCH_X86
diff --git a/src/arch/x86/boot/cbmem.c b/src/arch/x86/boot/cbmem.c
index 79cf46c..750e8b2 100644
--- a/src/arch/x86/boot/cbmem.c
+++ b/src/arch/x86/boot/cbmem.c
@@ -21,6 +21,7 @@
 #include <arch/acpi.h>
 
 /* FIXME: Remove after CBMEM_INIT_HOOKS. */
+#include <arch/early_variables.h>
 #include <cpu/x86/gdt.h>
 #include <console/cbmem_console.h>
 #include <timestamp.h>
@@ -76,6 +77,9 @@ void *cbmem_top(void)
 
 void cbmem_arch_init(void)
 {
+	/* Migrate car.global_data. */
+	car_migrate_variables();
+
 #if !defined(__PRE_RAM__)
 	/* Relocate CBMEM console. */
 	cbmemc_reinit();
diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c
index f8077b6..5ea8d88 100644
--- a/src/lib/cbmem.c
+++ b/src/lib/cbmem.c
@@ -242,8 +242,9 @@ int cbmem_recovery(int is_wakeup)
 		cbmem_fail_resume();
 	}
 
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
-	car_migrate_variables();
+
 	return !found;
 }
 
diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c
index dd3e9f2..fbd6148 100644
--- a/src/lib/dynamic_cbmem.c
+++ b/src/lib/dynamic_cbmem.c
@@ -170,18 +170,14 @@ void cbmem_initialize_empty(void)
 	printk(BIOS_DEBUG, "CBMEM: root @ %p %d entries.\n",
 	       root, root->max_entries);
 
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
-
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
 }
 
 static inline int cbmem_fail_recovery(void)
 {
 	cbmem_initialize_empty();
 	cbmem_fail_resume();
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
 	return 1;
 }
 
@@ -248,11 +244,9 @@ int cbmem_initialize(void)
 	root->locked = 1;
 #endif
 
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
 
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
-
 	/* Recovery successful. */
 	return 0;
 }



More information about the coreboot-gerrit mailing list