[coreboot-gerrit] Patch set updated for coreboot: 1263abd CBMEM: Tidy up CAR migration

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Thu Dec 18 20:54:33 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/7860

-gerrit

commit 1263abd8e4e50c7b72de7bc5cdf59e8887f113df
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Wed Dec 17 23:05:13 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/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/boot/Makefile.inc                |  3 +--
 src/arch/x86/boot/cbmem.c                     |  9 +++++++++
 src/arch/x86/include/arch/early_variables.h   |  1 -
 src/cpu/x86/Makefile.inc                      |  3 +--
 src/lib/Makefile.inc                          |  3 +--
 src/lib/cbmem.c                               |  3 ++-
 src/lib/dynamic_cbmem.c                       | 10 ++--------
 10 files changed, 16 insertions(+), 27 deletions(-)

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/boot/Makefile.inc b/src/arch/x86/boot/Makefile.inc
index 9a68d81..9f06b4f 100644
--- a/src/arch/x86/boot/Makefile.inc
+++ b/src/arch/x86/boot/Makefile.inc
@@ -1,8 +1,7 @@
 
 ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
 
-romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c
-romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += cbmem.c
+romstage-y += cbmem.c
 
 endif # CONFIG_ARCH_ROMSTAGE_X86_32
 
diff --git a/src/arch/x86/boot/cbmem.c b/src/arch/x86/boot/cbmem.c
index c0297d0..9f00e26 100644
--- a/src/arch/x86/boot/cbmem.c
+++ b/src/arch/x86/boot/cbmem.c
@@ -21,6 +21,7 @@
 #include <cpu/x86/gdt.h>
 #include <cbmem.h>
 #include <arch/acpi.h>
+#include <arch/early_variables.h>
 
 #if !CONFIG_DYNAMIC_CBMEM
 void get_cbmem_table(uint64_t *base, uint64_t *size)
@@ -73,6 +74,14 @@ void *cbmem_top(void)
 
 void cbmem_arch_init(void)
 {
+#if defined(__PRE_RAM__)
+#if IS_ENABLED(CONFIG_CACHE_AS_RAM) && !IS_ENABLED(CONFIG_BROKEN_CAR_MIGRATE)
+	/* Migrate car.global_data. */
+	car_migrate_variables();
+#endif
+#endif
+
+	/* Migrate preram_cbmem_console. */
 	__cbmemc_relocate();
 
 #if !defined(__PRE_RAM__)
diff --git a/src/arch/x86/include/arch/early_variables.h b/src/arch/x86/include/arch/early_variables.h
index c850a84..e913626 100644
--- a/src/arch/x86/include/arch/early_variables.h
+++ b/src/arch/x86/include/arch/early_variables.h
@@ -53,7 +53,6 @@ void car_migrate_variables(void);
 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/cpu/x86/Makefile.inc b/src/cpu/x86/Makefile.inc
index 418b5d7..2347f88 100644
--- a/src/cpu/x86/Makefile.inc
+++ b/src/cpu/x86/Makefile.inc
@@ -1,6 +1,5 @@
 ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
-romstage-$(CONFIG_EARLY_CBMEM_INIT) += car.c
-romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += car.c
+romstage-$(CONFIG_CACHE_AS_RAM) += car.c
 endif
 
 subdirs-$(CONFIG_PARALLEL_MP) += name
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index b7daea1..2b5c203 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -75,8 +75,7 @@ ramstage-y += dynamic_cbmem.c
 romstage-y += dynamic_cbmem.c
 else
 ramstage-y += cbmem.c
-romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c
-romstage-$(CONFIG_BROKEN_CAR_MIGRATE) += cbmem.c
+romstage-y += cbmem.c
 endif # CONFIG_DYNAMIC_CBMEM
 ramstage-y += cbmem_info.c
 
diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c
index 11d5cab..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();
 	}
 
-	car_migrate_variables();
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
+
 	return !found;
 }
 
diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c
index 3fe7c4d..fbd6148 100644
--- a/src/lib/dynamic_cbmem.c
+++ b/src/lib/dynamic_cbmem.c
@@ -170,19 +170,14 @@ void cbmem_initialize_empty(void)
 	printk(BIOS_DEBUG, "CBMEM: root @ %p %d entries.\n",
 	       root, root->max_entries);
 
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
-
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
-
 }
 
 static inline int cbmem_fail_recovery(void)
 {
 	cbmem_initialize_empty();
 	cbmem_fail_resume();
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
 	return 1;
 }
 
@@ -249,8 +244,7 @@ int cbmem_initialize(void)
 	root->locked = 1;
 #endif
 
-	/* Migrate cache-as-ram variables. */
-	car_migrate_variables();
+	/* Complete migration to CBMEM. */
 	cbmem_arch_init();
 
 	/* Recovery successful. */



More information about the coreboot-gerrit mailing list