[coreboot-gerrit] New patch to review for coreboot: 80dd6d3 usbdebug: Refactor disable logic
Kyösti Mälkki (kyosti.malkki@gmail.com)
gerrit at coreboot.org
Mon Jul 8 08:47:05 CEST 2013
Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3624
-gerrit
commit 80dd6d36df199e365022dca4c2cc28377d05b645
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date: Fri Jul 5 21:38:54 2013 +0300
usbdebug: Refactor disable logic
Output to usbdebug console needs to be disabled until hardware is
initialized and while EHCI BAR is relocated. Add separate field
ehci_info to point to back to EHCI context when hardware is ready
to transfer data.
The field ehci_info is later used when EHHI controller context
is separated from communication pipe.
Change-Id: If7d441b561819ab8ae23ed9f3f320f7742ed231e
Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
src/console/usbdebug_console.c | 30 +++++++++++-------------------
src/include/usbdebug.h | 5 ++---
src/lib/usbdebug.c | 11 +++++------
3 files changed, 18 insertions(+), 28 deletions(-)
diff --git a/src/console/usbdebug_console.c b/src/console/usbdebug_console.c
index 9cfb454..3db8444 100644
--- a/src/console/usbdebug_console.c
+++ b/src/console/usbdebug_console.c
@@ -28,7 +28,7 @@ static struct ehci_debug_info dbg_info;
static struct device_operations *ehci_drv_ops;
static struct device_operations ehci_dbg_ops;
-void set_ehci_base(unsigned ehci_base)
+static void usbdebug_re_enable(unsigned ehci_base)
{
unsigned diff;
@@ -39,36 +39,28 @@ void set_ehci_base(unsigned ehci_base)
dbg_info.ehci_regs -= diff;
dbg_info.ehci_debug -= diff;
dbg_info.ehci_caps = (void*)ehci_base;
+ dbg_info.ehci_info = &dbg_info;
}
-void set_ehci_debug(unsigned ehci_debug)
+static void usbdebug_disable(void)
{
- dbg_info.ehci_debug = (void*)ehci_debug;
-}
-
-unsigned get_ehci_debug(void)
-{
- return (unsigned)dbg_info.ehci_debug;
+ dbg_info.ehci_info = NULL;
}
static void pci_ehci_set_resources(struct device *dev)
{
struct resource *res;
- u32 base;
- u32 usb_debug;
printk(BIOS_DEBUG, "%s EHCI Debug Port hook triggered\n", dev_path(dev));
- usb_debug = get_ehci_debug();
- set_ehci_debug(0);
+ usbdebug_disable();
if (ehci_drv_ops->set_resources)
ehci_drv_ops->set_resources(dev);
-
res = find_resource(dev, EHCI_BAR_INDEX);
- set_ehci_debug(usb_debug);
- if (!res) return;
- base = res->base;
- set_ehci_base(base);
+ if (!res)
+ return;
+
+ usbdebug_re_enable((u32)res->base);
report_resource_stored(dev, res, "");
printk(BIOS_DEBUG, "%s EHCI Debug Port relocated\n", dev_path(dev));
}
@@ -105,7 +97,7 @@ static unsigned char dbgp_rx_byte(void)
{
unsigned char data = 0xff;
- if (dbg_info.ehci_debug)
+ if (dbg_info.ehci_info)
dbgp_bulk_read_x(&dbg_info, &data, 1);
return data;
@@ -118,7 +110,7 @@ static void dbgp_tx_flush(void)
static int dbgp_tst_byte(void)
{
- return (int)dbg_info.ehci_debug;
+ return (int)dbg_info.ehci_info;
}
static const struct console_driver usbdebug_direct_console __console = {
diff --git a/src/include/usbdebug.h b/src/include/usbdebug.h
index 990312a..9ffaf51 100644
--- a/src/include/usbdebug.h
+++ b/src/include/usbdebug.h
@@ -44,6 +44,8 @@ struct ehci_debug_info {
void *ehci_caps;
void *ehci_regs;
void *ehci_debug;
+
+ void *ehci_info;
u32 devnum;
u32 endpoint_out;
u32 endpoint_in;
@@ -54,9 +56,6 @@ struct ehci_debug_info {
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_ehci_base(unsigned ehci_base);
-void set_ehci_debug(unsigned ehci_debug);
-unsigned get_ehci_debug(void);
void set_debug_port(unsigned port);
int early_usbdebug_init(void);
void usbdebug_tx_byte(struct ehci_debug_info *info, unsigned char data);
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index 200121f..a0d3387 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -384,6 +384,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->ehci_info = (void *)0;
info->bufidx = 0;
try_next_time:
port_map_tried = 0;
@@ -544,9 +545,11 @@ try_next_port:
info->ehci_caps = ehci_caps;
info->ehci_regs = ehci_regs;
info->ehci_debug = ehci_debug;
+
info->devnum = devnum;
info->endpoint_out = dbgp_endpoint_out;
info->endpoint_in = dbgp_endpoint_in;
+ info->ehci_info = info;
return 0;
err:
@@ -582,35 +585,31 @@ int early_usbdebug_init(void)
void usbdebug_tx_byte(struct ehci_debug_info *dbg_info, unsigned char data)
{
-#if DBGP_DEBUG == 0
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) {
+ if (dbg_info->ehci_info) {
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;
}
}
-#endif
}
void usbdebug_tx_flush(struct ehci_debug_info *dbg_info)
{
-#if DBGP_DEBUG == 0
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) {
+ if (dbg_info->ehci_info && dbg_info->bufidx > 0) {
dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx);
dbg_info->bufidx = 0;
}
-#endif
}
More information about the coreboot-gerrit
mailing list