Arthur Heymans has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
arch/*/*/early_variables.h: drop unused files
Kill off NO_GLOBAL_MIGRATION finaly!
Change-Id: Ieb7d9f5590b3a7dd1fd5c0ce2e51337332434dbd Signed-off-by: Arthur Heymans arthur@aheymans.xyz --- D src/arch/arm/include/arch/early_variables.h D src/arch/arm64/include/arch/early_variables.h D src/arch/ppc64/include/arch/early_variables.h D src/arch/riscv/include/arch/early_variables.h D src/arch/x86/include/arch/early_variables.h D src/cpu/x86/car.c 6 files changed, 0 insertions(+), 347 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/54/37054/1
diff --git a/src/arch/arm/include/arch/early_variables.h b/src/arch/arm/include/arch/early_variables.h deleted file mode 100644 index 7002a88..0000000 --- a/src/arch/arm/include/arch/early_variables.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#define CAR_GLOBAL - -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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/arm64/include/arch/early_variables.h b/src/arch/arm64/include/arch/early_variables.h deleted file mode 100644 index 7002a88..0000000 --- a/src/arch/arm64/include/arch/early_variables.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#define CAR_GLOBAL - -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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/ppc64/include/arch/early_variables.h b/src/arch/ppc64/include/arch/early_variables.h deleted file mode 100644 index 05b8bc7..0000000 --- a/src/arch/ppc64/include/arch/early_variables.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/riscv/include/arch/early_variables.h b/src/arch/riscv/include/arch/early_variables.h deleted file mode 100644 index a2da5f8..0000000 --- a/src/arch/riscv/include/arch/early_variables.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2011 The ChromiumOS Authors. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/x86/include/arch/early_variables.h b/src/arch/x86/include/arch/early_variables.h deleted file mode 100644 index b88495c..0000000 --- a/src/arch/x86/include/arch/early_variables.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#include <arch/symbols.h> -#include <commonlib/helpers.h> -#include <stdlib.h> - -#if ENV_ROMSTAGE && CONFIG(CAR_GLOBAL_MIGRATION) - -/* - * The _car_global_[start|end]symbols cover CAR data which is relocatable - * once memory comes online. Variables with CAR_GLOBAL decoration - * reside within this region. - */ -extern char _car_global_start[]; -extern char _car_global_end[]; -#define _car_global_size (_car_global_end - _car_global_start) - -asm(".section .car.global_data,"w",@nobits"); -asm(".previous"); -#ifdef __clang__ -#define CAR_GLOBAL __attribute__((used, section(".car.global_data"))) -#else -#define CAR_GLOBAL __attribute__((used, section(".car.global_data#"))) -#endif /* __clang__ */ - -/* Get the correct pointer for the CAR global variable. */ -void *car_get_var_ptr(void *var); - -/* Return 1 when currently running with globals in Cache-as-RAM, 0 otherwise. */ -int car_active(void); - -/* Get and set a primitive type global variable. */ -#define car_get_var(var) \ - (*(typeof(var) *)car_get_var_ptr(&(var))) -#define car_set_var(var, val) car_get_var(var) = (val) - -/* Get and set a CAR_GLOBAL pointing elsewhere inside CAR. */ -#if !CONFIG(PLATFORM_USES_FSP1_0) -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var -#else -void *car_get_reloc_ptr(void *var); -void car_set_reloc_ptr(void *var, void *val); -#define car_get_ptr(var) car_get_reloc_ptr(&(var)) -#define car_set_ptr(var, val) car_set_reloc_ptr(&(var), (val)) -#endif - -static inline size_t car_data_size(void) -{ - size_t car_size = _car_global_size; - return ALIGN(car_size, 64); -} - -static inline size_t car_object_offset(void *ptr) -{ - return (char *)ptr - &_car_global_start[0]; -} - -#else - -/* - * For all stages other than romstage, all CAR_GLOBAL variables are accessed - * unconditionally as there is no migration of symbols. - */ - -#define CAR_GLOBAL -#define car_get_var(var) (var) -#define car_set_var(var, val) (var) = (val) -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -static inline void *car_get_var_ptr(void *var) -{ - return var; -} - -static inline int car_active(void) -{ - return ENV_CACHE_AS_RAM; -} - -#endif - -#endif /* ARCH_EARLY_VARIABLES_H */ diff --git a/src/cpu/x86/car.c b/src/cpu/x86/car.c deleted file mode 100644 index d8767ae..0000000 --- a/src/cpu/x86/car.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <string.h> -#include <stddef.h> -#include <console/console.h> -#include <cbmem.h> -#include <arch/early_variables.h> -#include <symbols.h> - -#if CONFIG(PLATFORM_USES_FSP1_0) -#include <drivers/intel/fsp1_0/fsp_util.h> -#endif -typedef void (* const car_migration_func_t)(void); - -extern car_migration_func_t _car_migrate_start; - -/* - * The car_migrated global variable determines if the cache-as-ram space has - * been migrated to real RAM. It does this by assuming the following things: - * 1. cache-as-ram space is zero'd out once it is set up. - * 2. Either the cache-as-ram space is memory-backed after getting torn down - * or the space returns 0xff's for each byte read. - * Based on these 2 attributes there is the ability to tell when the - * cache-as-ram region has been migrated. - */ -static int car_migrated CAR_GLOBAL; - -/** @brief returns pointer to a CAR variable, before or after migration. - * - * @param var pointer to the CAR variable - */ -void *car_get_var_ptr(void *var) -{ - char *migrated_base = NULL; - int offset; - void *_car_start = _car_global_start; - void *_car_end = _car_global_end; - - /* If the cache-as-ram has not been migrated return the pointer - * passed in. */ - if (!car_migrated) - return var; - - if (var < _car_start || var >= _car_end) { - printk(BIOS_ERR, - "Requesting CAR variable outside of CAR region: %p\n", - var); - return var; - } - -#if CONFIG(PLATFORM_USES_FSP1_0) - migrated_base = (char *)find_saved_temp_mem( - *(void **)CBMEM_FSP_HOB_PTR); - /* FSP 1.0 migrates the entire DCACHE RAM */ - offset = (char *)var - (char *)CONFIG_DCACHE_RAM_BASE; -#else - migrated_base = cbmem_find(CBMEM_ID_CAR_GLOBALS); - offset = (char *)var - (char *)_car_start; -#endif - - if (migrated_base == NULL) - die("CAR: Could not find migration base!\n"); - - return &migrated_base[offset]; -} - -#if CONFIG(PLATFORM_USES_FSP1_0) -/* - * When a CAR_GLOBAL points to target object inside CAR, use relative - * addressing. Such CAR_GLOBAL has to be expicitly accessed using - * car_set_reloc_ptr() and car_get_reloc_ptr() as the stored value is now - * an offset instead of the absolute address (pointer) of the target. - * - * This way discovery of objects that are not CAR_GLOBALs themselves, - * remain discoverable after CAR migration has implicitly happened. - */ -void car_set_reloc_ptr(void *var, void *val) -{ - uintptr_t *offset = car_get_var_ptr(var); - *offset = 0; - - if (val) - *offset = (uintptr_t)offset - (uintptr_t)val; -} - -void *car_get_reloc_ptr(void *var) -{ - uintptr_t *offset = car_get_var_ptr(var); - void *val = NULL; - - if (*offset) - val = (void *)((uintptr_t)offset - *offset); - - return val; -} -#endif - -int car_active(void) -{ - return !car_migrated; -} - -static void do_car_migrate_variables(void) -{ - void *migrated_base; - size_t car_size = car_data_size(); - - /* Check if already migrated. */ - if (car_migrated) - return; - - migrated_base = cbmem_add(CBMEM_ID_CAR_GLOBALS, car_size); - - if (migrated_base == NULL) { - printk(BIOS_ERR, "Could not migrate CAR data!\n"); - return; - } - - memcpy(migrated_base, _car_global_start, car_size); - - /* Mark that the data has been moved. */ - car_migrated = ~0; -} - -static void car_migrate_variables(int is_recovery) -{ - if (!CONFIG(PLATFORM_USES_FSP1_0)) - do_car_migrate_variables(); -} -ROMSTAGE_CBMEM_INIT_HOOK(car_migrate_variables)
Hello ron minnich, Julius Werner, build bot (Jenkins), Philipp Hug,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/37054
to look at the new patch set (#6).
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
arch/*/*/early_variables.h: drop unused files
Kill off NO_GLOBAL_MIGRATION finaly!
Change-Id: Ieb7d9f5590b3a7dd1fd5c0ce2e51337332434dbd Signed-off-by: Arthur Heymans arthur@aheymans.xyz --- D src/arch/arm/include/arch/early_variables.h D src/arch/arm64/include/arch/early_variables.h D src/arch/ppc64/include/arch/early_variables.h D src/arch/riscv/include/arch/early_variables.h D src/arch/x86/include/arch/early_variables.h D src/cpu/x86/car.c 6 files changed, 0 insertions(+), 298 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/54/37054/6
Paul Menzel has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 6:
(1 comment)
https://review.coreboot.org/c/coreboot/+/37054/6//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/37054/6//COMMIT_MSG@9 PS6, Line 9: Kill off NO_GLOBAL_MIGRATION finaly! finally
Hello ron minnich, Julius Werner, build bot (Jenkins), Philipp Hug,
I'd like you to reexamine a change. Please visit
https://review.coreboot.org/c/coreboot/+/37054
to look at the new patch set (#7).
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
arch/*/*/early_variables.h: drop unused files
Kill off NO_GLOBAL_MIGRATION finaly!
Change-Id: Ieb7d9f5590b3a7dd1fd5c0ce2e51337332434dbd Signed-off-by: Arthur Heymans arthur@aheymans.xyz --- D src/arch/arm/include/arch/early_variables.h D src/arch/arm64/include/arch/early_variables.h D src/arch/ppc64/include/arch/early_variables.h D src/arch/riscv/include/arch/early_variables.h D src/arch/x86/include/arch/early_variables.h M src/commonlib/include/commonlib/cbmem_id.h M src/cpu/x86/Makefile.inc D src/cpu/x86/car.c 8 files changed, 0 insertions(+), 302 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/54/37054/7
HAOUAS Elyes has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 7: Code-Review+1
Patrick Georgi has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 7:
(1 comment)
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... File src/commonlib/include/commonlib/cbmem_id.h:
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... PS7, Line 23: #define CBMEM_ID_CAR_GLOBALS 0xcac4e6a3 I think the data here (and the table below) are used by the cbmem utility. Do we want it to know about the CAR globals for longer? (Scenario: cbmem from master used on an old coreboot)
Angel Pons has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 7: Code-Review+1
(1 comment)
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... File src/commonlib/include/commonlib/cbmem_id.h:
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... PS7, Line 23: #define CBMEM_ID_CAR_GLOBALS 0xcac4e6a3
I think the data here (and the table below) are used by the cbmem utility. […]
Agreed.
Kyösti Mälkki has uploaded a new patch set (#9) to the change originally created by Arthur Heymans. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
arch/*/*/early_variables.h: drop unused files
Kill off NO_GLOBAL_MIGRATION finally!
Change-Id: Ieb7d9f5590b3a7dd1fd5c0ce2e51337332434dbd Signed-off-by: Arthur Heymans arthur@aheymans.xyz --- D src/arch/arm/include/arch/early_variables.h D src/arch/arm64/include/arch/early_variables.h D src/arch/ppc64/include/arch/early_variables.h D src/arch/riscv/include/arch/early_variables.h D src/arch/x86/include/arch/early_variables.h M src/cpu/x86/Makefile.inc D src/cpu/x86/car.c 7 files changed, 0 insertions(+), 287 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/54/37054/9
Kyösti Mälkki has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 9: Code-Review+2
(2 comments)
https://review.coreboot.org/c/coreboot/+/37054/6//COMMIT_MSG Commit Message:
https://review.coreboot.org/c/coreboot/+/37054/6//COMMIT_MSG@9 PS6, Line 9: Kill off NO_GLOBAL_MIGRATION finaly!
finally
Done
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... File src/commonlib/include/commonlib/cbmem_id.h:
https://review.coreboot.org/c/coreboot/+/37054/7/src/commonlib/include/commo... PS7, Line 23: #define CBMEM_ID_CAR_GLOBALS 0xcac4e6a3
Agreed.
Done
Patrick Georgi has posted comments on this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
Patch Set 9: Code-Review+2
Patrick Georgi has submitted this change. ( https://review.coreboot.org/c/coreboot/+/37054 )
Change subject: arch/*/*/early_variables.h: drop unused files ......................................................................
arch/*/*/early_variables.h: drop unused files
Kill off NO_GLOBAL_MIGRATION finally!
Change-Id: Ieb7d9f5590b3a7dd1fd5c0ce2e51337332434dbd Signed-off-by: Arthur Heymans arthur@aheymans.xyz Reviewed-on: https://review.coreboot.org/c/coreboot/+/37054 Reviewed-by: Kyösti Mälkki kyosti.malkki@gmail.com Reviewed-by: Patrick Georgi pgeorgi@google.com Tested-by: build bot (Jenkins) no-reply@coreboot.org --- D src/arch/arm/include/arch/early_variables.h D src/arch/arm64/include/arch/early_variables.h D src/arch/ppc64/include/arch/early_variables.h D src/arch/riscv/include/arch/early_variables.h D src/arch/x86/include/arch/early_variables.h M src/cpu/x86/Makefile.inc D src/cpu/x86/car.c 7 files changed, 0 insertions(+), 287 deletions(-)
Approvals: build bot (Jenkins): Verified Patrick Georgi: Looks good to me, approved Kyösti Mälkki: Looks good to me, approved
diff --git a/src/arch/arm/include/arch/early_variables.h b/src/arch/arm/include/arch/early_variables.h deleted file mode 100644 index 7002a88..0000000 --- a/src/arch/arm/include/arch/early_variables.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#define CAR_GLOBAL - -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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/arm64/include/arch/early_variables.h b/src/arch/arm64/include/arch/early_variables.h deleted file mode 100644 index 7002a88..0000000 --- a/src/arch/arm64/include/arch/early_variables.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#define CAR_GLOBAL - -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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/ppc64/include/arch/early_variables.h b/src/arch/ppc64/include/arch/early_variables.h deleted file mode 100644 index 05b8bc7..0000000 --- a/src/arch/ppc64/include/arch/early_variables.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/riscv/include/arch/early_variables.h b/src/arch/riscv/include/arch/early_variables.h deleted file mode 100644 index a2da5f8..0000000 --- a/src/arch/riscv/include/arch/early_variables.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2011 The ChromiumOS Authors. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#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) - -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -#endif diff --git a/src/arch/x86/include/arch/early_variables.h b/src/arch/x86/include/arch/early_variables.h deleted file mode 100644 index 0c4c37b..0000000 --- a/src/arch/x86/include/arch/early_variables.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef ARCH_EARLY_VARIABLES_H -#define ARCH_EARLY_VARIABLES_H - -#include <arch/symbols.h> -#include <commonlib/helpers.h> -#include <stdlib.h> - -#if ENV_ROMSTAGE && CONFIG(CAR_GLOBAL_MIGRATION) - -/* - * The _car_global_[start|end]symbols cover CAR data which is relocatable - * once memory comes online. Variables with CAR_GLOBAL decoration - * reside within this region. - */ -extern char _car_global_start[]; -extern char _car_global_end[]; -#define _car_global_size (_car_global_end - _car_global_start) - -asm(".section .car.global_data,"w",@nobits"); -asm(".previous"); -#ifdef __clang__ -#define CAR_GLOBAL __attribute__((used, section(".car.global_data"))) -#else -#define CAR_GLOBAL __attribute__((used, section(".car.global_data#"))) -#endif /* __clang__ */ - -/* Get the correct pointer for the CAR global variable. */ -void *car_get_var_ptr(void *var); - -/* Get and set a primitive type global variable. */ -#define car_get_var(var) \ - (*(typeof(var) *)car_get_var_ptr(&(var))) -#define car_set_var(var, val) car_get_var(var) = (val) - -/* Get and set a CAR_GLOBAL pointing elsewhere inside CAR. */ -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -static inline size_t car_data_size(void) -{ - size_t car_size = _car_global_size; - return ALIGN(car_size, 64); -} - -static inline size_t car_object_offset(void *ptr) -{ - return (char *)ptr - &_car_global_start[0]; -} - -#else - -/* - * For all stages other than romstage, all CAR_GLOBAL variables are accessed - * unconditionally as there is no migration of symbols. - */ - -#define CAR_GLOBAL -#define car_get_var(var) (var) -#define car_set_var(var, val) (var) = (val) -#define car_get_ptr car_get_var -#define car_set_ptr car_set_var - -static inline void *car_get_var_ptr(void *var) -{ - return var; -} - -#endif - -#endif /* ARCH_EARLY_VARIABLES_H */ diff --git a/src/cpu/x86/Makefile.inc b/src/cpu/x86/Makefile.inc index 55d1fad..1191069 100644 --- a/src/cpu/x86/Makefile.inc +++ b/src/cpu/x86/Makefile.inc @@ -1,5 +1,3 @@ -romstage-$(CONFIG_CAR_GLOBAL_MIGRATION) += car.c - subdirs-y += pae subdirs-$(CONFIG_PARALLEL_MP) += name ramstage-$(CONFIG_PARALLEL_MP) += mp_init.c diff --git a/src/cpu/x86/car.c b/src/cpu/x86/car.c deleted file mode 100644 index ef645fc..0000000 --- a/src/cpu/x86/car.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <string.h> -#include <stddef.h> -#include <console/console.h> -#include <cbmem.h> -#include <arch/early_variables.h> -#include <symbols.h> - -typedef void (* const car_migration_func_t)(void); - -extern car_migration_func_t _car_migrate_start; - -/* - * The car_migrated global variable determines if the cache-as-ram space has - * been migrated to real RAM. It does this by assuming the following things: - * 1. cache-as-ram space is zero'd out once it is set up. - * 2. Either the cache-as-ram space is memory-backed after getting torn down - * or the space returns 0xff's for each byte read. - * Based on these 2 attributes there is the ability to tell when the - * cache-as-ram region has been migrated. - */ -static int car_migrated CAR_GLOBAL; - -/** @brief returns pointer to a CAR variable, before or after migration. - * - * @param var pointer to the CAR variable - */ -void *car_get_var_ptr(void *var) -{ - char *migrated_base = NULL; - int offset; - void *_car_start = _car_global_start; - void *_car_end = _car_global_end; - - /* If the cache-as-ram has not been migrated return the pointer - * passed in. */ - if (!car_migrated) - return var; - - if (var < _car_start || var >= _car_end) { - printk(BIOS_ERR, - "Requesting CAR variable outside of CAR region: %p\n", - var); - return var; - } - - migrated_base = cbmem_find(CBMEM_ID_CAR_GLOBALS); - offset = (char *)var - (char *)_car_start; - - if (migrated_base == NULL) - die("CAR: Could not find migration base!\n"); - - return &migrated_base[offset]; -} - -static void do_car_migrate_variables(void) -{ - void *migrated_base; - size_t car_size = car_data_size(); - - /* Check if already migrated. */ - if (car_migrated) - return; - - migrated_base = cbmem_add(CBMEM_ID_CAR_GLOBALS, car_size); - - if (migrated_base == NULL) { - printk(BIOS_ERR, "Could not migrate CAR data!\n"); - return; - } - - memcpy(migrated_base, _car_global_start, car_size); - - /* Mark that the data has been moved. */ - car_migrated = ~0; -} - -static void car_migrate_variables(int is_recovery) -{ - do_car_migrate_variables(); -} -ROMSTAGE_CBMEM_INIT_HOOK(car_migrate_variables)