[coreboot-gerrit] Patch set updated for coreboot: b947ecc usbdebug: Initialize EHCI Debug Port just once
Kyösti Mälkki (kyosti.malkki@gmail.com)
gerrit at coreboot.org
Tue Jun 18 21:22:03 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/3476
-gerrit
commit b947eccf8b8275c30c8ffe67dc6c5d6896739e98
Author: Aaron Durbin <adurbin at chromium.org>
Date: Sat Jun 15 14:56:20 2013 +0300
usbdebug: Initialize EHCI Debug Port just once
If we already initialized EHCI in romstage, locate current configuration
from salvaged CAR_GLOBAL and avoid doing initialization second time.
The initialization sequence resets USB link and has been witnessed
to cause troubles/disconnects when used with kernel USB gadget
G_DBGP_SERIAL as the receiving party.
Change-Id: I7cb3a359488b25abc9de49c96c0197f6563a4a2c
Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
src/lib/usbdebug.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index 64d6943..f09b15b 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -366,6 +366,33 @@ static int ehci_wait_for_port(struct ehci_regs *ehci_regs, int port)
return -1; //-ENOTCONN;
}
+#if !defined(__PRE_RAM__) && !defined(__SMM__)
+static int get_usbdebug_from_cbmem(struct ehci_debug_info *info)
+{
+ struct ehci_debug_info *dbg_info_cbmem;
+
+ dbg_info_cbmem = cbmem_find(CBMEM_ID_EHCI_DEBUG);
+
+ if (dbg_info_cbmem == NULL)
+ return -1;
+
+ printk(BIOS_DEBUG, "EHCI debug port found in cbmem.\n");
+
+ info->ehci_caps = dbg_info_cbmem->ehci_caps;
+ info->ehci_regs = dbg_info_cbmem->ehci_regs;
+ info->ehci_debug = dbg_info_cbmem->ehci_debug;
+ info->devnum = dbg_info_cbmem->devnum;
+ info->endpoint_out = dbg_info_cbmem->endpoint_out;
+ info->endpoint_in = dbg_info_cbmem->endpoint_in;
+
+ return 0;
+}
+#else
+static int get_usbdebug_from_cbmem(struct ehci_debug_info *info)
+{
+ return -1;
+}
+#endif
int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *info)
{
@@ -384,6 +411,9 @@ int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *in
int port_map_tried;
int playtimes = 3;
+ if (!get_usbdebug_from_cbmem(info))
+ return 0;
+
ehci_caps = (struct ehci_caps *)ehci_bar;
ehci_regs = (struct ehci_regs *)(ehci_bar +
HC_LENGTH(read32((unsigned long)&ehci_caps->hc_capbase)));
More information about the coreboot-gerrit
mailing list