Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3625
-gerrit
commit f0278edfde21bd854327a5342acfe66d655092ba Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Sat Jul 6 11:56:49 2013 +0300
usbdebug: Move ehci_debug_info allocation
Move ehci_debug_info allocation from console to lib, as console code was only built for ramstage.
Implement dbgp_ehci_info() to return the EHCI context. Alread alias this as dbgp_console_input() and _output() to return the console stream context later on.
Change-Id: Id6cc07d62953f0466df61eeb159e22b0e3287d4e Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/arch/x86/lib/romstage_console.c | 4 +-- src/console/console.c | 3 +- src/console/usbdebug_console.c | 32 +++++++++----------- src/include/usbdebug.h | 6 ++-- src/lib/usbdebug.c | 47 +++++++++++++++-------------- src/northbridge/intel/sandybridge/raminit.c | 2 +- 6 files changed, 48 insertions(+), 46 deletions(-)
diff --git a/src/arch/x86/lib/romstage_console.c b/src/arch/x86/lib/romstage_console.c index 2013bb7..2e743ad 100644 --- a/src/arch/x86/lib/romstage_console.c +++ b/src/arch/x86/lib/romstage_console.c @@ -48,7 +48,7 @@ void console_tx_byte(unsigned char byte) uart8250_tx_byte(CONFIG_TTYS0_BASE, byte); #endif #if CONFIG_USBDEBUG - usbdebug_tx_byte(0, byte); + usbdebug_tx_byte(dbgp_console_output(), byte); #endif #if CONFIG_CONSOLE_NE2K ne2k_append_data(&byte, 1, CONFIG_CONSOLE_NE2K_IO_PORT); @@ -73,7 +73,7 @@ void console_tx_flush(void) ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT); #endif #if CONFIG_USBDEBUG - usbdebug_tx_flush(0); + usbdebug_tx_flush(dbgp_console_output()); #endif }
diff --git a/src/console/console.c b/src/console/console.c index 2f7de02..a24336b 100644 --- a/src/console/console.c +++ b/src/console/console.c @@ -104,8 +104,7 @@ void console_init(void) #if CONFIG_EARLY_CONSOLE
#if CONFIG_USBDEBUG - enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT); - early_usbdebug_init(); + usbdebug_init(); #endif #if CONFIG_CONSOLE_SERIAL uart_init(); diff --git a/src/console/usbdebug_console.c b/src/console/usbdebug_console.c index d674779..7b5dcc0 100644 --- a/src/console/usbdebug_console.c +++ b/src/console/usbdebug_console.c @@ -24,27 +24,28 @@ #include <device/pci.h> #include <pc80/mc146818rtc.h>
-static struct ehci_debug_info dbg_info; static struct device_operations *ehci_drv_ops; static struct device_operations ehci_dbg_ops;
static void usbdebug_re_enable(unsigned ehci_base) { + struct ehci_debug_info *dbg_info = dbgp_ehci_info(); unsigned diff;
- if (!dbg_info.ehci_debug) + if (!dbg_info->ehci_debug) return;
- diff = (unsigned)dbg_info.ehci_caps - ehci_base; - dbg_info.ehci_regs -= diff; - dbg_info.ehci_debug -= diff; - dbg_info.ehci_caps = (void*)ehci_base; - dbg_info.status |= DBGP_EP_ENABLED; + diff = (unsigned)dbg_info->ehci_caps - ehci_base; + dbg_info->ehci_regs -= diff; + dbg_info->ehci_debug -= diff; + dbg_info->ehci_caps = (void*)ehci_base; + dbg_info->status |= DBGP_EP_ENABLED; }
static void usbdebug_disable(void) { - dbg_info.status &= ~DBGP_EP_ENABLED; + struct ehci_debug_info *dbg_info = dbgp_ehci_info(); + dbg_info->status &= ~DBGP_EP_ENABLED; }
static void pci_ehci_set_resources(struct device *dev) @@ -82,35 +83,32 @@ void pci_ehci_read_resources(struct device *dev)
static void dbgp_init(void) { -#if !CONFIG_EARLY_CONSOLE - enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT); -#endif - usbdebug_init(CONFIG_EHCI_BAR, CONFIG_EHCI_DEBUG_OFFSET, &dbg_info); + usbdebug_init(); }
static void dbgp_tx_byte(unsigned char data) { - usbdebug_tx_byte(&dbg_info, data); + usbdebug_tx_byte(dbgp_console_output(), data); }
static unsigned char dbgp_rx_byte(void) { unsigned char data = 0xff;
- if (dbgp_ep_is_active(&dbg_info)) - dbgp_bulk_read_x(&dbg_info, &data, 1); + if (dbgp_ep_is_active(dbgp_console_input())) + dbgp_bulk_read_x(dbgp_console_input(), &data, 1);
return data; }
static void dbgp_tx_flush(void) { - usbdebug_tx_flush(&dbg_info); + usbdebug_tx_flush(dbgp_console_output()); }
static int dbgp_tst_byte(void) { - return dbgp_ep_is_active(&dbgp_info); + return dbgp_ep_is_active(dbgp_console_input()); }
static const struct console_driver usbdebug_direct_console __console = { diff --git a/src/include/usbdebug.h b/src/include/usbdebug.h index fe4ef32..e32410e 100644 --- a/src/include/usbdebug.h +++ b/src/include/usbdebug.h @@ -60,10 +60,12 @@ void enable_usbdebug(unsigned int port); int dbgp_bulk_write_x(struct ehci_debug_info *dbg_info, const char *bytes, int size); int dbgp_bulk_read_x(struct ehci_debug_info *dbg_info, void *data, int size); void set_debug_port(unsigned port); -int early_usbdebug_init(void);
+int usbdebug_init(void); +struct ehci_debug_info *dbgp_ehci_info(void); +#define dbgp_console_output dbgp_ehci_info +#define dbgp_console_input dbgp_ehci_info int dbgp_ep_is_active(struct ehci_debug_info *dbg_info); void usbdebug_tx_byte(struct ehci_debug_info *info, unsigned char data); void usbdebug_tx_flush(struct ehci_debug_info *info); -int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *info); #endif diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c index 129493c..6143d4b 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); +} diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c index 78eedb8..3eb2fb3 100644 --- a/src/northbridge/intel/sandybridge/raminit.c +++ b/src/northbridge/intel/sandybridge/raminit.c @@ -278,7 +278,7 @@ void sdram_initialize(struct pei_data *pei_data)
#if CONFIG_USBDEBUG /* mrc.bin reconfigures USB, so reinit it to have debug */ - early_usbdebug_init(); + usbdebug_init(); #endif
/* For reference print the System Agent version