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/3626
-gerrit
commit 43eaae5bbd29be73e0e49758818f7dd9426a4bc4 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Sat Jul 6 11:57:00 2013 +0300
usbdebug: Move EHCI BAR relocation code
There are other uses for EHCI debug port besides console, so move EHCI relocation code from console to lib.
Change-Id: I95cddd31be529351d9ec68f14782cc3cbe08c617 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/console/usbdebug_console.c | 59 ------------------------------------------ src/lib/usbdebug.c | 59 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 59 deletions(-)
diff --git a/src/console/usbdebug_console.c b/src/console/usbdebug_console.c index 80d7bfc..0e69f87 100644 --- a/src/console/usbdebug_console.c +++ b/src/console/usbdebug_console.c @@ -21,65 +21,6 @@ #include <string.h> #include <console/console.h> #include <usbdebug.h> -#include <device/pci.h> -#include <pc80/mc146818rtc.h> - -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) - 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->ehci_info = dbg_info; -} - -static void usbdebug_disable(void) -{ - struct ehci_debug_info *dbg_info = dbgp_ehci_info(); - dbg_info->ehci_info = NULL; -} - -static void pci_ehci_set_resources(struct device *dev) -{ - struct resource *res; - - printk(BIOS_DEBUG, "%s EHCI Debug Port hook triggered\n", dev_path(dev)); - usbdebug_disable(); - - if (ehci_drv_ops->set_resources) - ehci_drv_ops->set_resources(dev); - res = find_resource(dev, EHCI_BAR_INDEX); - 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)); -} - -void pci_ehci_read_resources(struct device *dev) -{ - if (!ehci_drv_ops) { - memcpy(&ehci_dbg_ops, dev->ops, sizeof(ehci_dbg_ops)); - ehci_drv_ops = dev->ops; - ehci_dbg_ops.set_resources = pci_ehci_set_resources; - dev->ops = &ehci_dbg_ops; - printk(BIOS_DEBUG, "%s EHCI BAR hook registered\n", dev_path(dev)); - } else { - printk(BIOS_DEBUG, "More than one caller of %s from %s\n", __func__, dev_path(dev)); - } - - pci_dev_read_resources(dev); -}
static void dbgp_init(void) { diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c index 97d083b..0fea9c6 100644 --- a/src/lib/usbdebug.c +++ b/src/lib/usbdebug.c @@ -21,6 +21,7 @@ #include <stddef.h> #include <console/console.h> #include <arch/io.h> +#include <device/pci.h> #include <arch/byteorder.h>
#include <usb_ch9.h> @@ -88,6 +89,8 @@
#if !defined(__PRE_RAM__) && !defined(__SMM__) static struct ehci_debug_info glob_dbg_info; +static struct device_operations *ehci_drv_ops; +static struct device_operations ehci_dbg_ops; #endif
static int dbgp_wait_until_complete(struct ehci_dbg_port *ehci_debug) @@ -597,6 +600,62 @@ void usbdebug_tx_flush(struct ehci_debug_info *dbg_info) } }
+#if !defined(__PRE_RAM__) && !defined(__SMM__) +static void usbdebug_re_enable(unsigned ehci_base) +{ + struct ehci_debug_info *dbg_info = dbgp_ehci_info(); + unsigned diff; + + if (!dbg_info->ehci_debug) + return; + + diff = (u32)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->ehci_info = dbg_info; +} + +static void usbdebug_disable(void) +{ + struct ehci_debug_info *dbg_info = dbgp_ehci_info(); + dbg_info->ehci_info = NULL; +} + +static void pci_ehci_set_resources(struct device *dev) +{ + struct resource *res; + + printk(BIOS_DEBUG, "%s EHCI Debug Port hook triggered\n", dev_path(dev)); + usbdebug_disable(); + + if (ehci_drv_ops->set_resources) + ehci_drv_ops->set_resources(dev); + res = find_resource(dev, EHCI_BAR_INDEX); + 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)); +} + +void pci_ehci_read_resources(struct device *dev) +{ + if (!ehci_drv_ops) { + memcpy(&ehci_dbg_ops, dev->ops, sizeof(ehci_dbg_ops)); + ehci_drv_ops = dev->ops; + ehci_dbg_ops.set_resources = pci_ehci_set_resources; + dev->ops = &ehci_dbg_ops; + printk(BIOS_DEBUG, "%s EHCI BAR hook registered\n", dev_path(dev)); + } else { + printk(BIOS_DEBUG, "More than one caller of %s from %s\n", __func__, dev_path(dev)); + } + + pci_dev_read_resources(dev); +} +#endif + struct ehci_debug_info *dbgp_ehci_info(void) { #if __PRE_RAM__