From 82704c63b98202fe2a24032697369cd190202d3f Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Thu, 26 Jul 2012 14:31:40 +0200 Subject: USBDEBUG: buffer up to 8 bytes EHCI debug allows to send message with 8 bytes length, but we're only sending one byte in each transaction. Buffer up to 8 bytes to speed up debug output. Change-Id: I9dbb406833c4966c3afbd610e1b13a8fa3d62f39 Signed-off-by: Sven Schnelle Reviewed-on: http://review.coreboot.org/1357 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- src/lib/usbdebug.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'src/lib') diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c index 800ee52ae3..fd234260c2 100644 --- a/src/lib/usbdebug.c +++ b/src/lib/usbdebug.c @@ -377,7 +377,7 @@ int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *in HC_LENGTH(read32((unsigned long)&ehci_caps->hc_capbase))); ehci_debug = (struct ehci_dbg_port *)(ehci_bar + offset); info->ehci_debug = (void *)0; - + info->bufidx = 0; try_next_time: port_map_tried = 0; @@ -573,15 +573,34 @@ int early_usbdebug_init(void) return usbdebug_init(CONFIG_EHCI_BAR, CONFIG_EHCI_DEBUG_OFFSET, dbg_info); } -void usbdebug_tx_byte(unsigned char data) +void usbdebug_tx_byte(struct ehci_debug_info *dbg_info, unsigned char data) { - struct ehci_debug_info *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 (!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 (dbg_info->ehci_debug) { - dbgp_bulk_write_x(dbg_info, (char*)&data, 1); + dbg_info->buf[dbg_info->bufidx++] = data; + if (dbg_info->bufidx >= 8) { + dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx); + dbg_info->bufidx = 0; + } + } +} + +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 (dbg_info->ehci_debug && dbg_info->bufidx > 0) { + dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx); + dbg_info->bufidx = 0; } } -- cgit v1.2.3