diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-12-31 20:55:19 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2015-01-27 22:47:35 +0100 |
commit | 91fac61240612291f7be3362f7acad31803e8b03 (patch) | |
tree | 31c604a58e7b389b45d2f397eb7b37171c45dcc8 /src | |
parent | 3bf38548474697d11c935f23a610222c36df90c0 (diff) |
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@gmail.com>
Reviewed-on: http://review.coreboot.org/7860
Reviewed-by: Aaron Durbin <adurbin@google.com>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'src')
-rw-r--r-- | src/Kconfig | 14 | ||||
-rw-r--r-- | src/arch/arm/include/arch/early_variables.h | 1 | ||||
-rw-r--r-- | src/arch/arm64/include/arch/early_variables.h | 1 | ||||
-rw-r--r-- | src/arch/riscv/include/arch/early_variables.h | 5 | ||||
-rw-r--r-- | src/arch/x86/Kconfig | 15 | ||||
-rw-r--r-- | src/arch/x86/boot/cbmem.c | 4 | ||||
-rw-r--r-- | src/cpu/x86/car.c | 8 | ||||
-rw-r--r-- | src/lib/cbmem.c | 3 | ||||
-rw-r--r-- | src/lib/dynamic_cbmem.c | 10 |
9 files changed, 30 insertions, 31 deletions
diff --git a/src/Kconfig b/src/Kconfig index 92714d5ed1..a58e04a4da 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 cb0872e8f0..97bc0cd38e 100644 --- a/src/arch/arm/include/arch/early_variables.h +++ b/src/arch/arm/include/arch/early_variables.h @@ -27,6 +27,5 @@ static inline void *car_get_var_ptr(void *var) { return var; } #define car_get_var(var) (var) #define car_sync_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 cb0872e8f0..97bc0cd38e 100644 --- a/src/arch/arm64/include/arch/early_variables.h +++ b/src/arch/arm64/include/arch/early_variables.h @@ -27,6 +27,5 @@ static inline void *car_get_var_ptr(void *var) { return var; } #define car_get_var(var) (var) #define car_sync_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 f9516a4c19..97bc0cd38e 100644 --- a/src/arch/riscv/include/arch/early_variables.h +++ b/src/arch/riscv/include/arch/early_variables.h @@ -20,10 +20,6 @@ #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_) @@ -31,6 +27,5 @@ static inline void *car_get_var_ptr(void *var) { return var; } #define car_get_var(var) (var) #define car_sync_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 edbc67acb2..dfb91fad8e 100644 --- a/src/arch/x86/Kconfig +++ b/src/arch/x86/Kconfig @@ -51,6 +51,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 af42edd841..80588c385d 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_run_init_hooks(void) { + /* Migrate car.global_data. */ + car_migrate_variables(); + #if !defined(__PRE_RAM__) /* Relocate CBMEM console. */ cbmemc_reinit(); diff --git a/src/cpu/x86/car.c b/src/cpu/x86/car.c index e757f0912c..cca9afd694 100644 --- a/src/cpu/x86/car.c +++ b/src/cpu/x86/car.c @@ -108,7 +108,6 @@ void *car_sync_var_ptr(void *var) static void do_car_migrate_variables(void) { void *migrated_base; - car_migration_func_t *migrate_func; size_t car_data_size = &_car_data_end[0] - &_car_data_start[0]; /* Check if already migrated. */ @@ -126,7 +125,11 @@ static void do_car_migrate_variables(void) /* Mark that the data has been moved. */ car_migrated = ~0; +} +static void do_car_migrate_hooks(void) +{ + car_migration_func_t *migrate_func; /* Call all the migration functions. */ migrate_func = &_car_migrate_start; while (*migrate_func != NULL) { @@ -139,4 +142,7 @@ void car_migrate_variables(void) { if (!IS_ENABLED(CONFIG_BROKEN_CAR_MIGRATE)) do_car_migrate_variables(); + + if (!IS_ENABLED(CONFIG_BROKEN_CAR_MIGRATE)) + do_car_migrate_hooks(); } diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c index ba6560c499..d5f89a188d 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_run_init_hooks(); - car_migrate_variables(); + return !found; } diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c index a5f2fc2db6..6455217760 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_run_init_hooks(); - - /* 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_run_init_hooks(); - /* Migrate cache-as-ram variables. */ - car_migrate_variables(); - /* Recovery successful. */ return 0; } |