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. CQ-DEPEND=CL:169541 BUG=chrome-os-partner:21969 TEST=Manual Change-Id: Ic21d2016a4ef92c67fa420bdc0f0d8a6508b69e5 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/169454 Reviewed-by: Stefan Reinauer <reinauer@google.com>
This commit is contained in:
parent
1fa9964063
commit
b6e95c39dd
15 changed files with 28 additions and 61 deletions
|
|
@ -374,30 +374,11 @@ config USB_MSC
|
|||
Say Y here unless you know exactly what you are doing.
|
||||
|
||||
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
|
||||
|
||||
config USB_GEN_HUB
|
||||
bool
|
||||
default n if (!USB_HUB && !USB_XHCI)
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -53,9 +53,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
# CONFIG_LP_USB_PCI is not set
|
||||
CONFIG_LP_USB_MEMORY=y
|
||||
CONFIG_LP_USB_OHCI_BASE_ADDRESS=0x12120000
|
||||
CONFIG_LP_USB_EHCI_BASE_ADDRESS=0x12110000
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -47,15 +47,12 @@ CONFIG_LP_COREBOOT_VIDEO_CONSOLE=y
|
|||
# CONFIG_LP_STORAGE is not set
|
||||
CONFIG_LP_USB=y
|
||||
# CONFIG_LP_USB_OHCI is not set
|
||||
CONFIG_LP_USB_EHCI=y
|
||||
# CONFIG_LP_USB_XHCI is not set
|
||||
# CONFIG_LP_USB_EHCI is not set
|
||||
CONFIG_LP_USB_XHCI=y
|
||||
CONFIG_LP_USB_HID=y
|
||||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
# CONFIG_LP_USB_PCI is not set
|
||||
CONFIG_LP_USB_MEMORY=y
|
||||
CONFIG_LP_USB_OHCI_BASE_ADDRESS=0x12120000
|
||||
CONFIG_LP_USB_EHCI_BASE_ADDRESS=0x12110000
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -47,15 +47,12 @@ CONFIG_LP_COREBOOT_VIDEO_CONSOLE=y
|
|||
# CONFIG_LP_STORAGE is not set
|
||||
CONFIG_LP_USB=y
|
||||
# CONFIG_LP_USB_OHCI is not set
|
||||
CONFIG_LP_USB_EHCI=y
|
||||
# CONFIG_LP_USB_XHCI is not set
|
||||
# CONFIG_LP_USB_EHCI is not set
|
||||
CONFIG_LP_USB_XHCI=y
|
||||
CONFIG_LP_USB_HID=y
|
||||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
# CONFIG_LP_USB_PCI is not set
|
||||
CONFIG_LP_USB_MEMORY=y
|
||||
CONFIG_LP_USB_OHCI_BASE_ADDRESS=0x12120000
|
||||
CONFIG_LP_USB_EHCI_BASE_ADDRESS=0x12110000
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ CONFIG_LP_USB_HID=y
|
|||
CONFIG_LP_USB_HUB=y
|
||||
CONFIG_LP_USB_MSC=y
|
||||
CONFIG_LP_USB_PCI=y
|
||||
# CONFIG_LP_USB_MEMORY is not set
|
||||
CONFIG_LP_USB_GEN_HUB=y
|
||||
# CONFIG_LP_BIG_ENDIAN is not set
|
||||
CONFIG_LP_LITTLE_ENDIAN=y
|
||||
|
|
|
|||
|
|
@ -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((void *)(unsigned long)CONFIG_LP_USB_XHCI_BASE_ADDRESS);
|
||||
#endif
|
||||
#ifdef CONFIG_LP_USB_EHCI
|
||||
ehci_init((void *)(unsigned long)CONFIG_LP_USB_EHCI_BASE_ADDRESS);
|
||||
#endif
|
||||
#ifdef CONFIG_LP_USB_OHCI
|
||||
ohci_init((void *)(unsigned long)CONFIG_LP_USB_OHCI_BASE_ADDRESS);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Initialize all USB controllers attached to PCI.
|
||||
*/
|
||||
|
|
@ -178,9 +163,27 @@ 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -239,6 +239,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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue