aboutsummaryrefslogtreecommitdiff
path: root/src/lib/usbdebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/usbdebug.c')
-rw-r--r--src/lib/usbdebug.c47
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);
+}