summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/cbmem_info.c1
-rw-r--r--src/lib/usbdebug.c37
2 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/cbmem_info.c b/src/lib/cbmem_info.c
index 65be67c17a..a60761f7b0 100644
--- a/src/lib/cbmem_info.c
+++ b/src/lib/cbmem_info.c
@@ -48,6 +48,7 @@ static struct cbmem_id_to_name {
{ CBMEM_ID_VBOOT_HANDOFF, "VBOOT " },
{ CBMEM_ID_CAR_GLOBALS, "CAR GLOBALS" },
{ CBMEM_ID_AGESA_RUNTIME, "AGESA RSVD " },
+ { CBMEM_ID_EHCI_DEBUG, "USBDEBUG " },
};
void cbmem_print_entry(int n, u32 id, u64 base, u64 size)
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index 3dc35f1088..7a8402dfa3 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -26,6 +26,7 @@
#include <arch/byteorder.h>
#include <cpu/x86/car.h>
#include <string.h>
+#include <cbmem.h>
#include <usb_ch9.h>
#include <ehci.h>
@@ -868,6 +869,38 @@ void pci_ehci_read_resources(struct device *dev)
}
#endif
+#if CONFIG_CAR_MIGRATION
+#if !defined(__PRE_RAM__) && !defined(__SMM__)
+static int get_usbdebug_from_cbmem(struct ehci_debug_info *info)
+{
+ struct ehci_debug_info *dbg_info_cbmem;
+
+ dbg_info_cbmem = cbmem_find(CBMEM_ID_EHCI_DEBUG);
+ if (dbg_info_cbmem == NULL)
+ return -1;
+
+ memcpy(info, dbg_info_cbmem, sizeof (*info));
+ printk(BIOS_DEBUG, "EHCI debug port found in CBMEM.\n");
+
+ return 0;
+}
+
+#elif defined(__PRE_RAM__)
+static void migrate_ehci_debug(void)
+{
+ struct ehci_debug_info *dbg_info = dbgp_ehci_info();
+ struct ehci_debug_info *dbg_info_cbmem;
+
+ dbg_info_cbmem = cbmem_add(CBMEM_ID_EHCI_DEBUG, sizeof(*dbg_info));
+ if (dbg_info_cbmem == NULL)
+ return;
+
+ memcpy(dbg_info_cbmem, dbg_info, sizeof(*dbg_info));
+}
+CAR_MIGRATE(migrate_ehci_debug);
+#endif
+#endif /* CONFIG_CAR_MIGRATION */
+
unsigned long pci_ehci_base_regs(pci_devfn_t sdev)
{
#ifdef __SIMPLE_DEVICE__
@@ -898,6 +931,10 @@ int usbdebug_init(void)
{
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
+#if CONFIG_CAR_MIGRATION && !defined(__PRE_RAM__) && !defined(__SMM__)
+ if (!get_usbdebug_from_cbmem(dbg_info))
+ return 0;
+#endif
#if defined(__PRE_RAM__) || !CONFIG_EARLY_CONSOLE
enable_usbdebug();
#endif