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)
This commit is contained in:
parent
3bf3854847
commit
91fac61240
14
src/Kconfig
14
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue