[coreboot-gerrit] Patch set updated for coreboot: 650bb50 CBMEM: Implement cbmem_arch_init() with cbmemc_relocate()

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

-gerrit

commit 650bb50d56aad5dd8b7d60bd68d98243e950a9e4
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Thu Dec 18 18:30:29 2014 +0200

    CBMEM: Implement cbmem_arch_init() with cbmemc_relocate()
    
    This replaces need for separate cbmemc_reinit() calls made
    via CAR_MIGRATE() that is not implemented for ARM.
    
    Change-Id: If7b4d855c75df58b173f26ef3c90a4a7563166d3
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/arch/arm/Makefile.inc                      |  2 ++
 src/arch/arm/cbmem.c                           | 28 ++++++++++++++++++++++++++
 src/arch/arm/tables.c                          |  8 --------
 src/arch/arm64/Makefile.inc                    |  2 ++
 src/arch/arm64/cbmem.c                         | 10 +++++++++
 src/arch/arm64/tables.c                        |  4 ----
 src/arch/riscv/Makefile.inc                    |  2 ++
 src/arch/riscv/cbmem.c                         | 28 ++++++++++++++++++++++++++
 src/arch/riscv/tables.c                        |  8 --------
 src/arch/x86/boot/cbmem.c                      | 19 +++++++++++------
 src/arch/x86/boot/tables.c                     |  8 --------
 src/include/cbmem.h                            |  8 +++-----
 src/include/console/cbmem_console.h            |  8 ++++----
 src/lib/cbmem.c                                |  4 +---
 src/lib/cbmem_console.c                        | 10 +--------
 src/lib/dynamic_cbmem.c                        | 10 ++++-----
 src/mainboard/google/nyan/romstage.c           |  5 -----
 src/mainboard/google/nyan_big/romstage.c       |  5 -----
 src/mainboard/google/nyan_blaze/romstage.c     |  5 -----
 src/mainboard/via/epia-m850/romstage.c         |  1 -
 src/soc/intel/fsp_baytrail/romstage/romstage.c |  1 -
 21 files changed, 98 insertions(+), 78 deletions(-)

diff --git a/src/arch/arm/Makefile.inc b/src/arch/arm/Makefile.inc
index 5698f38..fefaeb1 100644
--- a/src/arch/arm/Makefile.inc
+++ b/src/arch/arm/Makefile.inc
@@ -76,6 +76,7 @@ ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM),y)
 romstage-y += stages.c
 romstage-y += div0.c
 romstage-y += eabi_compat.c
+romstage-y += cbmem.c
 romstage-y += memset.S
 romstage-y += memcpy.S
 romstage-y += memmove.S
@@ -100,6 +101,7 @@ ramstage-y += cpu.c
 ramstage-y += eabi_compat.c
 ramstage-y += boot.c
 ramstage-y += tables.c
+ramstage-y += cbmem.c
 ramstage-y += memset.S
 ramstage-y += memcpy.S
 ramstage-y += memmove.S
diff --git a/src/arch/arm/cbmem.c b/src/arch/arm/cbmem.c
new file mode 100644
index 0000000..18bdec7
--- /dev/null
+++ b/src/arch/arm/cbmem.c
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
+ */
+
+#include <cbmem.h>
+#include <console/cbmem_console.h>
+
+void cbmem_arch_init(void)
+{
+	__cbmemc_relocate();
+}
+
+void cbmem_fail_resume(void)
+{
+}
diff --git a/src/arch/arm/tables.c b/src/arch/arm/tables.c
index 20c5a9f..cdeeb36 100644
--- a/src/arch/arm/tables.c
+++ b/src/arch/arm/tables.c
@@ -38,14 +38,6 @@ void __attribute__((weak)) get_cbmem_table(uint64_t *base, uint64_t *size)
 }
 #endif
 
-void cbmem_arch_init(void)
-{
-}
-
-void cbmem_fail_resume(void)
-{
-}
-
 void write_tables(void)
 {
 	unsigned long table_pointer, new_table_pointer;
diff --git a/src/arch/arm64/Makefile.inc b/src/arch/arm64/Makefile.inc
index 5bf72b2..b4df4aa 100644
--- a/src/arch/arm64/Makefile.inc
+++ b/src/arch/arm64/Makefile.inc
@@ -74,6 +74,7 @@ romstage-y += stages.c
 romstage-y += div0.c
 romstage-y += early_console.c
 romstage-y += eabi_compat.c
+romstage-y += cbmem.c
 romstage-y += memset.S
 romstage-y += memcpy.S
 romstage-y += memmove.S
@@ -99,6 +100,7 @@ ramstage-y += cpu.c
 ramstage-y += eabi_compat.c
 ramstage-y += boot.c
 ramstage-y += tables.c
+ramstage-y += cbmem.c
 ramstage-y += memset.S
 ramstage-y += memcpy.S
 ramstage-y += memmove.S
diff --git a/src/arch/arm64/cbmem.c b/src/arch/arm64/cbmem.c
index b33e9b8..69b60a2 100644
--- a/src/arch/arm64/cbmem.c
+++ b/src/arch/arm64/cbmem.c
@@ -16,6 +16,7 @@
  */
 
 #include <cbmem.h>
+#include <console/cbmem_console.h>
 
 unsigned long get_top_of_ram(void);
 
@@ -28,3 +29,12 @@ void *cbmem_top(void)
 {
         return (void *)get_top_of_ram();
 }
+
+void cbmem_arch_init(void)
+{
+	__cbmemc_relocate();
+}
+
+void cbmem_fail_resume(void)
+{
+}
diff --git a/src/arch/arm64/tables.c b/src/arch/arm64/tables.c
index 49fab9f..825d7a2 100644
--- a/src/arch/arm64/tables.c
+++ b/src/arch/arm64/tables.c
@@ -38,10 +38,6 @@ uint64_t high_tables_base = 0;
 uint64_t high_tables_size;
 #endif
 
-void cbmem_arch_init(void)
-{
-}
-
 struct lb_memory *write_tables(void)
 {
 	unsigned long table_pointer, new_table_pointer;
diff --git a/src/arch/riscv/Makefile.inc b/src/arch/riscv/Makefile.inc
index 242fd40..ab4ecbd 100644
--- a/src/arch/riscv/Makefile.inc
+++ b/src/arch/riscv/Makefile.inc
@@ -54,6 +54,7 @@ ifeq ($(CONFIG_ARCH_ROMSTAGE_RISCV),y)
 
 romstage-y += stages.c
 romstage-y += rom_media.c
+romstage-y += cbmem.c
 romstage-y += \
 	$(top)/src/lib/memchr.c \
 	$(top)/src/lib/memcmp.c \
@@ -87,6 +88,7 @@ ramstage-y += rom_media.c
 ramstage-y += stages.c
 ramstage-y += misc.c
 ramstage-y += boot.c
+ramstage-y += cbmem.c
 ramstage-y += tables.c
 ramstage-y += \
 	$(top)/src/lib/memchr.c \
diff --git a/src/arch/riscv/cbmem.c b/src/arch/riscv/cbmem.c
new file mode 100644
index 0000000..18bdec7
--- /dev/null
+++ b/src/arch/riscv/cbmem.c
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
+ */
+
+#include <cbmem.h>
+#include <console/cbmem_console.h>
+
+void cbmem_arch_init(void)
+{
+	__cbmemc_relocate();
+}
+
+void cbmem_fail_resume(void)
+{
+}
diff --git a/src/arch/riscv/tables.c b/src/arch/riscv/tables.c
index 6300f7b..124a659 100644
--- a/src/arch/riscv/tables.c
+++ b/src/arch/riscv/tables.c
@@ -29,10 +29,6 @@
 
 #define MAX_COREBOOT_TABLE_SIZE (8 * 1024)
 
-void cbmem_arch_init(void)
-{
-}
-
 // WTF. this does not agre with the prototype!
 static struct lb_memory *wtf_write_tables(void)
 {
@@ -70,7 +66,3 @@ void write_tables(void)
 {
 	wtf_write_tables();
 }
-
-void cbmem_fail_resume(void)
-{
-}
diff --git a/src/arch/x86/boot/cbmem.c b/src/arch/x86/boot/cbmem.c
index 8b2b6da..c0297d0 100644
--- a/src/arch/x86/boot/cbmem.c
+++ b/src/arch/x86/boot/cbmem.c
@@ -17,6 +17,8 @@
 
 #include <stdlib.h>
 #include <console/console.h>
+#include <console/cbmem_console.h>
+#include <cpu/x86/gdt.h>
 #include <cbmem.h>
 #include <arch/acpi.h>
 
@@ -69,16 +71,21 @@ void *cbmem_top(void)
 
 #endif /* DYNAMIC_CBMEM */
 
+void cbmem_arch_init(void)
+{
+	__cbmemc_relocate();
+
 #if !defined(__PRE_RAM__)
+	move_gdt();
+#endif
+}
 
-/* ACPI resume needs to be cleared in the fail-to-recover case, but that
- * condition is only handled during ramstage. */
+/* Something went wrong, our high memory area got wiped */
 void cbmem_fail_resume(void)
 {
-#if CONFIG_HAVE_ACPI_RESUME
-	/* Something went wrong, our high memory area got wiped */
+#if !defined(__PRE_RAM__) && IS_ENABLED(CONFIG_HAVE_ACPI_RESUME)
+	/* ACPI resume needs to be cleared in the fail-to-recover case, but that
+	 * condition is only handled during ramstage. */
 	acpi_fail_wakeup();
 #endif
 }
-
-#endif /* !__PRE_RAM__ */
diff --git a/src/arch/x86/boot/tables.c b/src/arch/x86/boot/tables.c
index 8685ed4..c2265ea 100644
--- a/src/arch/x86/boot/tables.c
+++ b/src/arch/x86/boot/tables.c
@@ -21,7 +21,6 @@
 
 #include <console/console.h>
 #include <cpu/cpu.h>
-#include <cpu/x86/gdt.h>
 #include <boot/tables.h>
 #include <boot/coreboot_tables.h>
 #include <arch/pirq_routing.h>
@@ -31,13 +30,6 @@
 #include <cbmem.h>
 #include <smbios.h>
 
-
-void cbmem_arch_init(void)
-{
-	/* defined in gdt.c */
-	move_gdt();
-}
-
 void write_tables(void)
 {
 	unsigned long low_table_start, low_table_end;
diff --git a/src/include/cbmem.h b/src/include/cbmem.h
index 0b2eba7..b34cb18 100644
--- a/src/include/cbmem.h
+++ b/src/include/cbmem.h
@@ -176,17 +176,15 @@ void *cbmem_add(u32 id, u64 size);
 /* Find a cbmem entry of a given id. These return NULL on failure. */
 void *cbmem_find(u32 id);
 
+void cbmem_arch_init(void);
+void cbmem_fail_resume(void);
+
 #ifndef __PRE_RAM__
 /* Ramstage only functions. */
 /* Add the cbmem memory used to the memory map at boot. */
 void cbmem_add_bootmem(void);
 void cbmem_list(void);
-void cbmem_arch_init(void);
 void cbmem_print_entry(int n, u32 id, u64 start, u64 size);
-void cbmem_fail_resume(void);
-#else
-static inline void cbmem_arch_init(void) {}
-static inline void cbmem_fail_resume(void) {}
 #endif /* __PRE_RAM__ */
 
 #endif /* __ASSEMBLER__ */
diff --git a/src/include/console/cbmem_console.h b/src/include/console/cbmem_console.h
index 36d132c..0cadf8e 100644
--- a/src/include/console/cbmem_console.h
+++ b/src/include/console/cbmem_console.h
@@ -23,22 +23,22 @@
 #include <stdint.h>
 
 void cbmemc_init(void);
+void cbmemc_relocate(void);
 void cbmemc_tx_byte(unsigned char data);
 
-#if CONFIG_CONSOLE_CBMEM
-void cbmemc_reinit(void);
-#else
+/* OBSOLETE */
 static inline void cbmemc_reinit(void) {}
-#endif
 
 #define __CBMEM_CONSOLE_ENABLE__	CONFIG_CONSOLE_CBMEM && \
 	((ENV_ROMSTAGE && !CONFIG_BROKEN_CAR_MIGRATE) || ENV_RAMSTAGE)
 
 #if __CBMEM_CONSOLE_ENABLE__
 static inline void __cbmemc_init(void)	{ cbmemc_init(); }
+static inline void __cbmemc_relocate(void)	{ cbmemc_relocate(); }
 static inline void __cbmemc_tx_byte(u8 data)	{ cbmemc_tx_byte(data); }
 #else
 static inline void __cbmemc_init(void)	{}
+static inline void __cbmemc_relocate(void)	{}
 static inline void __cbmemc_tx_byte(u8 data)	{}
 #endif
 
diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c
index 0b24ad2..11d5cab 100644
--- a/src/lib/cbmem.c
+++ b/src/lib/cbmem.c
@@ -23,7 +23,6 @@
 #include <bootstate.h>
 #include <cbmem.h>
 #include <console/console.h>
-#include <console/cbmem_console.h>
 #include <arch/early_variables.h>
 #if CONFIG_HAVE_ACPI_RESUME && !defined(__PRE_RAM__)
 #include <arch/acpi.h>
@@ -243,8 +242,8 @@ int cbmem_recovery(int is_wakeup)
 		cbmem_fail_resume();
 	}
 
-	cbmem_arch_init();
 	car_migrate_variables();
+	cbmem_arch_init();
 	return !found;
 }
 
@@ -256,7 +255,6 @@ static void init_cbmem_post_device(void *unused)
 #else
 	cbmem_recovery(0);
 #endif
-	cbmemc_reinit();
 }
 
 BOOT_STATE_INIT_ENTRIES(cbmem_bscb) = {
diff --git a/src/lib/cbmem_console.c b/src/lib/cbmem_console.c
index 997bb7d..16609e9 100644
--- a/src/lib/cbmem_console.c
+++ b/src/lib/cbmem_console.c
@@ -184,15 +184,10 @@ static void copy_console_buffer(struct cbmem_console *new_cons_p)
 	new_cons_p->buffer_cursor = cursor;
 }
 
-void cbmemc_reinit(void)
+void cbmemc_relocate(int wipe)
 {
 	struct cbmem_console *cbm_cons_p = NULL;
 
-#ifdef __PRE_RAM__
-	if (IS_ENABLED(CONFIG_BROKEN_CAR_MIGRATE))
-		return;
-#endif
-
 #ifndef __PRE_RAM__
 	cbm_cons_p = cbmem_find(CBMEM_ID_CONSOLE);
 #endif
@@ -216,6 +211,3 @@ void cbmemc_reinit(void)
 
 	current_console_set(cbm_cons_p);
 }
-
-/* Call cbmemc_reinit() at CAR migration time. */
-CAR_MIGRATE(cbmemc_reinit)
diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c
index 5eddbca..3fe7c4d 100644
--- a/src/lib/dynamic_cbmem.c
+++ b/src/lib/dynamic_cbmem.c
@@ -21,7 +21,6 @@
 #include <bootmem.h>
 #include <console/console.h>
 #include <cbmem.h>
-#include <console/cbmem_console.h>
 #include <string.h>
 #include <stdlib.h>
 #include <arch/early_variables.h>
@@ -171,10 +170,11 @@ void cbmem_initialize_empty(void)
 	printk(BIOS_DEBUG, "CBMEM: root @ %p %d entries.\n",
 	       root, root->max_entries);
 
-	cbmem_arch_init();
-
 	/* Migrate cache-as-ram variables. */
 	car_migrate_variables();
+
+	cbmem_arch_init();
+
 }
 
 static inline int cbmem_fail_recovery(void)
@@ -249,10 +249,9 @@ int cbmem_initialize(void)
 	root->locked = 1;
 #endif
 
-	cbmem_arch_init();
-
 	/* Migrate cache-as-ram variables. */
 	car_migrate_variables();
+	cbmem_arch_init();
 
 	/* Recovery successful. */
 	return 0;
@@ -426,7 +425,6 @@ void *cbmem_entry_start(const struct cbmem_entry *entry)
 static void init_cbmem_pre_device(void *unused)
 {
 	cbmem_initialize();
-	cbmemc_reinit();
 }
 
 BOOT_STATE_INIT_ENTRIES(cbmem_bscb) = {
diff --git a/src/mainboard/google/nyan/romstage.c b/src/mainboard/google/nyan/romstage.c
index b4e2733..8090d67 100644
--- a/src/mainboard/google/nyan/romstage.c
+++ b/src/mainboard/google/nyan/romstage.c
@@ -25,7 +25,6 @@
 #include <device/device.h>
 #include <cbfs.h>
 #include <cbmem.h>
-#include <console/cbmem_console.h>
 #include <console/console.h>
 #include <romstage_handoff.h>
 #include <vendorcode/google/chromeos/chromeos.h>
@@ -213,10 +212,6 @@ static void __attribute__((noinline)) romstage(void)
 	configure_ec_spi_bus();
 	configure_tpm_i2c_bus();
 
-#if CONFIG_CONSOLE_CBMEM
-	cbmemc_reinit();
-#endif
-
 	vboot_verify_firmware(romstage_handoff_find_or_add());
 
 	timestamp_add(TS_START_COPYRAM, timestamp_get());
diff --git a/src/mainboard/google/nyan_big/romstage.c b/src/mainboard/google/nyan_big/romstage.c
index b4e2733..8090d67 100644
--- a/src/mainboard/google/nyan_big/romstage.c
+++ b/src/mainboard/google/nyan_big/romstage.c
@@ -25,7 +25,6 @@
 #include <device/device.h>
 #include <cbfs.h>
 #include <cbmem.h>
-#include <console/cbmem_console.h>
 #include <console/console.h>
 #include <romstage_handoff.h>
 #include <vendorcode/google/chromeos/chromeos.h>
@@ -213,10 +212,6 @@ static void __attribute__((noinline)) romstage(void)
 	configure_ec_spi_bus();
 	configure_tpm_i2c_bus();
 
-#if CONFIG_CONSOLE_CBMEM
-	cbmemc_reinit();
-#endif
-
 	vboot_verify_firmware(romstage_handoff_find_or_add());
 
 	timestamp_add(TS_START_COPYRAM, timestamp_get());
diff --git a/src/mainboard/google/nyan_blaze/romstage.c b/src/mainboard/google/nyan_blaze/romstage.c
index b4e2733..8090d67 100644
--- a/src/mainboard/google/nyan_blaze/romstage.c
+++ b/src/mainboard/google/nyan_blaze/romstage.c
@@ -25,7 +25,6 @@
 #include <device/device.h>
 #include <cbfs.h>
 #include <cbmem.h>
-#include <console/cbmem_console.h>
 #include <console/console.h>
 #include <romstage_handoff.h>
 #include <vendorcode/google/chromeos/chromeos.h>
@@ -213,10 +212,6 @@ static void __attribute__((noinline)) romstage(void)
 	configure_ec_spi_bus();
 	configure_tpm_i2c_bus();
 
-#if CONFIG_CONSOLE_CBMEM
-	cbmemc_reinit();
-#endif
-
 	vboot_verify_firmware(romstage_handoff_find_or_add());
 
 	timestamp_add(TS_START_COPYRAM, timestamp_get());
diff --git a/src/mainboard/via/epia-m850/romstage.c b/src/mainboard/via/epia-m850/romstage.c
index 899c5a6..7eb8d60 100644
--- a/src/mainboard/via/epia-m850/romstage.c
+++ b/src/mainboard/via/epia-m850/romstage.c
@@ -31,7 +31,6 @@
 #include <cpu/x86/bist.h>
 #include <string.h>
 #include <timestamp.h>
-#include <console/cbmem_console.h>
 
 #include "northbridge/via/vx900/early_vx900.h"
 #include "northbridge/via/vx900/raminit.h"
diff --git a/src/soc/intel/fsp_baytrail/romstage/romstage.c b/src/soc/intel/fsp_baytrail/romstage/romstage.c
index 2619c96..f4442ac 100644
--- a/src/soc/intel/fsp_baytrail/romstage/romstage.c
+++ b/src/soc/intel/fsp_baytrail/romstage/romstage.c
@@ -43,7 +43,6 @@
 #include <version.h>
 #include <pc80/mc146818rtc.h>
 #include <device/pci_def.h>
-#include <console/cbmem_console.h>
 
 /* Return 0, 3, 4 or 5 to indicate the previous sleep state. */
 uint32_t chipset_prev_sleep_state(uint32_t clear)



More information about the coreboot-gerrit mailing list