diff options
Diffstat (limited to 'src/lib/usbdebug.c')
-rw-r--r-- | src/lib/usbdebug.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c index 17a02635da..09306fdb09 100644 --- a/src/lib/usbdebug.c +++ b/src/lib/usbdebug.c @@ -86,6 +86,10 @@ #define DBGP_MAX_PACKET 8 #define DBGP_LOOPS 1000 +#if !defined(__PRE_RAM__) && !defined(__SMM__) +static struct ehci_debug_info glob_dbg_info; +#endif + static int dbgp_wait_until_complete(struct ehci_dbg_port *ehci_debug) { u32 ctrl; @@ -361,8 +365,7 @@ static int ehci_wait_for_port(struct ehci_regs *ehci_regs, int port) return -1; //-ENOTCONN; } - -int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *info) +static int usbdebug_init_(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *info) { struct ehci_caps *ehci_caps; struct ehci_regs *ehci_regs; @@ -574,22 +577,8 @@ next_debug_port: return -10; } -int early_usbdebug_init(void) -{ - struct ehci_debug_info *dbg_info = (struct ehci_debug_info *) - (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info)); - - return usbdebug_init(CONFIG_EHCI_BAR, CONFIG_EHCI_DEBUG_OFFSET, dbg_info); -} - void usbdebug_tx_byte(struct ehci_debug_info *dbg_info, unsigned char data) { - if (!dbg_info) { - /* "Find" dbg_info structure in Cache */ - dbg_info = (struct ehci_debug_info *) - (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info)); - } - if (dbgp_is_ep_active(dbg_info)) { dbg_info->buf[dbg_info->bufidx++] = data; if (dbg_info->bufidx >= 8) { @@ -601,12 +590,6 @@ void usbdebug_tx_byte(struct ehci_debug_info *dbg_info, unsigned char data) void usbdebug_tx_flush(struct ehci_debug_info *dbg_info) { - if (!dbg_info) { - /* "Find" dbg_info structure in Cache */ - dbg_info = (struct ehci_debug_info *) - (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info)); - } - if (dbgp_is_ep_active(dbg_info) && dbg_info->bufidx > 0) { dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx); dbg_info->bufidx = 0; @@ -617,3 +600,23 @@ int dbgp_ep_is_active(struct ehci_debug_info *dbg_info) { return (dbg_info->status & DBGP_EP_STATMASK) == (DBGP_EP_VALID | DBGP_EP_ENABLED); } + +struct ehci_debug_info *dbgp_ehci_info(void) +{ +#if __PRE_RAM__ + /* "Find" dbg_info structure in Cache */ + return (struct ehci_debug_info *) + (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info)); +#else + return &glob_dbg_info; +#endif +} + +int usbdebug_init(void) +{ + struct ehci_debug_info *dbg_info = dbgp_ehci_info(); +#if defined(__PRE_RAM__) || !CONFIG_EARLY_CONSOLE + enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT); +#endif + return usbdebug_init_(CONFIG_EHCI_BAR, CONFIG_EHCI_DEBUG_OFFSET, dbg_info); +} |