usbdebug: Use CAR migration
If we already initialized EHCI controller and USB device in romstage, locate active configuration from salvaged CAR_GLOBAL and avoid doing the hardware initialisation again. Change-Id: I7cb3a359488b25abc9de49c96c0197f6563a4a2c Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: http://review.coreboot.org/3476 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@google.com>
This commit is contained in:
parent
e53cece07b
commit
690bf2f333
|
@ -70,6 +70,7 @@
|
||||||
#define CBMEM_ID_ROOT 0xff4007ff
|
#define CBMEM_ID_ROOT 0xff4007ff
|
||||||
#define CBMEM_ID_VBOOT_HANDOFF 0x780074f0
|
#define CBMEM_ID_VBOOT_HANDOFF 0x780074f0
|
||||||
#define CBMEM_ID_CAR_GLOBALS 0xcac4e6a3
|
#define CBMEM_ID_CAR_GLOBALS 0xcac4e6a3
|
||||||
|
#define CBMEM_ID_EHCI_DEBUG 0xe4c1deb9
|
||||||
#define CBMEM_ID_NONE 0x00000000
|
#define CBMEM_ID_NONE 0x00000000
|
||||||
#define CBMEM_ID_AGESA_RUNTIME 0x41474553
|
#define CBMEM_ID_AGESA_RUNTIME 0x41474553
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ static struct cbmem_id_to_name {
|
||||||
{ CBMEM_ID_VBOOT_HANDOFF, "VBOOT " },
|
{ CBMEM_ID_VBOOT_HANDOFF, "VBOOT " },
|
||||||
{ CBMEM_ID_CAR_GLOBALS, "CAR GLOBALS" },
|
{ CBMEM_ID_CAR_GLOBALS, "CAR GLOBALS" },
|
||||||
{ CBMEM_ID_AGESA_RUNTIME, "AGESA RSVD " },
|
{ CBMEM_ID_AGESA_RUNTIME, "AGESA RSVD " },
|
||||||
|
{ CBMEM_ID_EHCI_DEBUG, "USBDEBUG " },
|
||||||
};
|
};
|
||||||
|
|
||||||
void cbmem_print_entry(int n, u32 id, u64 base, u64 size)
|
void cbmem_print_entry(int n, u32 id, u64 base, u64 size)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <arch/byteorder.h>
|
#include <arch/byteorder.h>
|
||||||
#include <cpu/x86/car.h>
|
#include <cpu/x86/car.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <cbmem.h>
|
||||||
|
|
||||||
#include <usb_ch9.h>
|
#include <usb_ch9.h>
|
||||||
#include <ehci.h>
|
#include <ehci.h>
|
||||||
|
@ -868,6 +869,38 @@ void pci_ehci_read_resources(struct device *dev)
|
||||||
}
|
}
|
||||||
#endif
|
#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)
|
unsigned long pci_ehci_base_regs(pci_devfn_t sdev)
|
||||||
{
|
{
|
||||||
#ifdef __SIMPLE_DEVICE__
|
#ifdef __SIMPLE_DEVICE__
|
||||||
|
@ -898,6 +931,10 @@ int usbdebug_init(void)
|
||||||
{
|
{
|
||||||
struct ehci_debug_info *dbg_info = dbgp_ehci_info();
|
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
|
#if defined(__PRE_RAM__) || !CONFIG_EARLY_CONSOLE
|
||||||
enable_usbdebug();
|
enable_usbdebug();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue