summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/car.ld9
-rw-r--r--src/arch/x86/include/arch/symbols.h2
-rw-r--r--src/drivers/usb/ehci_debug.c5
3 files changed, 13 insertions, 3 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld
index 2f0ce50e3c..7b10f4313b 100644
--- a/src/arch/x86/car.ld
+++ b/src/arch/x86/car.ld
@@ -40,9 +40,9 @@
_car_stack_end = .;
#endif
/* The pre-ram cbmem console as well as the timestamp region are fixed
- * in size. Therefore place them at the beginning .car.data section
- * so that multiple stages (romstage and verstage) have a consistent
- * link address of these shared objects. */
+ * in size. Therefore place them above the car global section so that
+ * multiple stages (romstage and verstage) have a consistent
+ * link address of these shared objects. */
PRERAM_CBMEM_CONSOLE(., CONFIG_PRERAM_CBMEM_CONSOLE_SIZE)
#if IS_ENABLED(CONFIG_PAGING_IN_CACHE_AS_RAM)
. = ALIGN(32);
@@ -66,6 +66,9 @@
. += 256;
_car_drivers_storage_end = .;
#endif
+ _car_ehci_dbg_info_start = .;
+ . += 64;
+ _car_ehci_dbg_info_end = .;
/* _car_global_start and _car_global_end provide symbols to per-stage
* variables that are not shared like the timestamp and the pre-ram
* cbmem console. This is useful for clearing this area on a per-stage
diff --git a/src/arch/x86/include/arch/symbols.h b/src/arch/x86/include/arch/symbols.h
index 704e3bbdc3..9ef6a3b89e 100644
--- a/src/arch/x86/include/arch/symbols.h
+++ b/src/arch/x86/include/arch/symbols.h
@@ -34,6 +34,8 @@ extern char _car_stack_start[];
extern char _car_stack_end[];
#define _car_stack_size (_car_stack_end - _car_stack_start)
+extern char _car_ehci_dbg_info_start[];
+
/*
* The _car_relocatable_data_[start|end] symbols cover CAR data which is
* relocatable once memory comes online. Variables with CAR_GLOBAL decoration
diff --git a/src/drivers/usb/ehci_debug.c b/src/drivers/usb/ehci_debug.c
index 2020888189..4987523f78 100644
--- a/src/drivers/usb/ehci_debug.c
+++ b/src/drivers/usb/ehci_debug.c
@@ -18,6 +18,7 @@
#include <console/console.h>
#include <console/usb.h>
#include <arch/io.h>
+#include <arch/symbols.h>
#include <arch/early_variables.h>
#include <string.h>
#include <cbmem.h>
@@ -61,6 +62,10 @@ static struct ehci_debug_info * glob_dbg_info_p CAR_GLOBAL;
static inline struct ehci_debug_info *dbgp_ehci_info(void)
{
+ if (IS_ENABLED(CONFIG_USBDEBUG_IN_PRE_RAM)
+ && (ENV_ROMSTAGE || ENV_BOOTBLOCK || ENV_VERSTAGE))
+ glob_dbg_info_p =
+ (struct ehci_debug_info *)_car_ehci_dbg_info_start;
if (car_get_var(glob_dbg_info_p) == NULL)
car_set_var(glob_dbg_info_p, &glob_dbg_info);