[coreboot-gerrit] New patch to review for coreboot: 815972e libpayload: usb: Allow direct instantiation of MMIO host controllers

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Wed Aug 13 01:51:29 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6644

-gerrit

commit 815972e09af29ff423d95c1e16931eaeb516f782
Author: Julius Werner <jwerner at chromium.org>
Date:   Wed Sep 4 17:20:32 2013 -0700

    libpayload: usb: Allow direct instantiation of MMIO host controllers
    
    The existing USB_MEMORY mechanism to instantiate non-PCI host
    controllers is clunky and inflexible... most importantly, it doesn't
    allow multiple host controllers of the same kind. This patch replaces it
    with a function that allows payloads to directly instantiate as many
    host controllers of whatever type they need.
    
    Change-Id: Ic21d2016a4ef92c67fa420bdc0f0d8a6508b69e5
    Signed-off-by: Julius Werner <jwerner at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/169454
    Reviewed-by: Stefan Reinauer <reinauer at google.com>
    (cherry picked from commit b6e95c39dd91f654f0a345f17b3196f56adf4891)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 payloads/libpayload/Config.in             | 23 ++----------------
 payloads/libpayload/configs/defconfig     |  1 -
 payloads/libpayload/drivers/usb/usbinit.c | 39 +++++++++++++++++--------------
 payloads/libpayload/include/usb/usb.h     |  1 +
 4 files changed, 24 insertions(+), 40 deletions(-)

diff --git a/payloads/libpayload/Config.in b/payloads/libpayload/Config.in
index ae90285..f28f9b8 100644
--- a/payloads/libpayload/Config.in
+++ b/payloads/libpayload/Config.in
@@ -378,30 +378,11 @@ config USB_GEN_HUB
 	default n if (!USB_HUB && !USB_XHCI)
 	default y if (USB_HUB || USB_XHCI)
 config USB_PCI
-	bool
+	bool "Auto-scan PCI bus for USB host controllers"
+	depends on USB
 	default y if ARCH_X86
 	default n
 
-config USB_MEMORY
-	bool
-	default y if ARCH_ARMV7
-	default n
-
-config USB_OHCI_BASE_ADDRESS
-	hex
-	depends on USB_MEMORY && USB_OHCI
-	default 0x12120000
-
-config USB_EHCI_BASE_ADDRESS
-	hex
-	depends on USB_MEMORY && USB_EHCI
-	default 0x12110000
-
-config USB_XHCI_BASE_ADDRESS
-	hex
-	depends on USB_MEMORY && USB_XHCI
-	default 0x12000000
-
 endmenu
 
 menu "Debugging"
diff --git a/payloads/libpayload/configs/defconfig b/payloads/libpayload/configs/defconfig
index c4e0d15..5804ed8 100644
--- a/payloads/libpayload/configs/defconfig
+++ b/payloads/libpayload/configs/defconfig
@@ -71,7 +71,6 @@ CONFIG_LP_USB_HUB=y
 CONFIG_LP_USB_MSC=y
 CONFIG_LP_USB_GEN_HUB=y
 CONFIG_LP_USB_PCI=y
-# CONFIG_LP_USB_MEMORY is not set
 # CONFIG_LP_BIG_ENDIAN is not set
 CONFIG_LP_LITTLE_ENDIAN=y
 CONFIG_LP_IO_ADDRESS_SPACE=y
diff --git a/payloads/libpayload/drivers/usb/usbinit.c b/payloads/libpayload/drivers/usb/usbinit.c
index 90c31d7..1710760 100644
--- a/payloads/libpayload/drivers/usb/usbinit.c
+++ b/payloads/libpayload/drivers/usb/usbinit.c
@@ -156,21 +156,6 @@ static void usb_scan_pci_bus(int bus)
 }
 #endif
 
-#ifdef CONFIG_LP_USB_MEMORY
-static void usb_scan_memory(void)
-{
-#ifdef CONFIG_LP_USB_XHCI
-	xhci_init(CONFIG_LP_USB_XHCI_BASE_ADDRESS);
-#endif
-#ifdef CONFIG_LP_USB_EHCI
-	ehci_init(CONFIG_LP_USB_EHCI_BASE_ADDRESS);
-#endif
-#ifdef CONFIG_LP_USB_OHCI
-	ohci_init(CONFIG_LP_USB_OHCI_BASE_ADDRESS);
-#endif
-}
-#endif
-
 /**
  * Initialize all USB controllers attached to PCI.
  */
@@ -179,8 +164,26 @@ int usb_initialize(void)
 #ifdef CONFIG_LP_USB_PCI
 	usb_scan_pci_bus(0);
 #endif
-#ifdef CONFIG_LP_USB_MEMORY
-	usb_scan_memory();
-#endif
 	return 0;
 }
+
+hci_t *usb_add_mmio_hc(hc_type type, void *bar)
+{
+	switch (type) {
+#ifdef CONFIG_LP_USB_OHCI
+	case OHCI:
+		return ohci_init(bar);
+#endif
+#ifdef CONFIG_LP_USB_EHCI
+	case EHCI:
+		return ehci_init(bar);
+#endif
+#ifdef CONFIG_LP_USB_XHCI
+	case XHCI:
+		return xhci_init(bar);
+#endif
+	default:
+		usb_debug("HC type %d (at %p) is not supported!\n", type, bar);
+		return NULL;
+	}
+}
diff --git a/payloads/libpayload/include/usb/usb.h b/payloads/libpayload/include/usb/usb.h
index 0bfbc20..2bf1993 100644
--- a/payloads/libpayload/include/usb/usb.h
+++ b/payloads/libpayload/include/usb/usb.h
@@ -240,6 +240,7 @@ typedef struct {
 	unsigned short wReportDescriptorLength;
 } __attribute__ ((packed)) hid_descriptor_t;
 
+hci_t *usb_add_mmio_hc(hc_type type, void *bar);
 hci_t *new_controller (void);
 void detach_controller (hci_t *controller);
 void usb_poll (void);



More information about the coreboot-gerrit mailing list