diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-02-25 20:11:52 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-11-23 20:35:03 +0100 |
commit | 83fe6d7fd270aeca7b703dbd0f7e23902144840b (patch) | |
tree | 96153d08b2f28f3abbcf60c314e75cc760dad41c /src/drivers/usb/ehci_debug.c | |
parent | 7bb4f86d07934373fa427af3dad17ae59bc89bc9 (diff) |
usbdebug: Move initialisation of the optional hub
Add new file for device-specific initialisation transactions.
Change-Id: I339df400a41675f178c7af613f03b2b44c826189
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/7208
Reviewed-by: Nico Huber <nico.h@gmx.de>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/drivers/usb/ehci_debug.c')
-rw-r--r-- | src/drivers/usb/ehci_debug.c | 107 |
1 files changed, 4 insertions, 103 deletions
diff --git a/src/drivers/usb/ehci_debug.c b/src/drivers/usb/ehci_debug.c index 1ab6688a3c..cb6b23ecd5 100644 --- a/src/drivers/usb/ehci_debug.c +++ b/src/drivers/usb/ehci_debug.c @@ -53,8 +53,6 @@ static int dbgp_enabled(void); # define dprintk(LEVEL, args...) do {} while(0) #endif -#define USB_DEBUG_DEVNUM 127 - #define DBGP_LEN_UPDATE(x, len) (((x) & ~0x0f) | ((len) & 0x0f)) /* * USB Packet IDs (PIDs) @@ -319,7 +317,7 @@ int dbgp_bulk_read_x(struct dbgp_pipe *pipe, void *data, int size) return dbgp_bulk_read(dbg_info->ehci_debug, pipe, data, size); } -static void dbgp_mdelay(int ms) +void dbgp_mdelay(int ms) { int i; @@ -329,7 +327,7 @@ static void dbgp_mdelay(int ms) } } -static int dbgp_control_msg(struct ehci_dbg_port *ehci_debug, unsigned devnum, int requesttype, +int dbgp_control_msg(struct ehci_dbg_port *ehci_debug, unsigned devnum, int requesttype, int request, int value, int index, void *data, int size) { struct ehci_debug_info *info = dbgp_ehci_info(); @@ -460,101 +458,6 @@ static int ehci_wait_for_port(struct ehci_regs *ehci_regs, int port) return -1; //-ENOTCONN; } -#define USB_HUB_PORT_CONNECTION 0 -#define USB_HUB_PORT_ENABLED 1 -#define USB_HUB_PORT_RESET 4 -#define USB_HUB_PORT_POWER 8 -#define USB_HUB_C_PORT_CONNECTION 16 -#define USB_HUB_C_PORT_RESET 20 - -#if CONFIG_USBDEBUG_OPTIONAL_HUB_PORT - -static int hub_port_status(const char * buf, int feature) -{ - return !!(buf[feature>>3] & (1<<(feature&0x7))); -} - -static int dbgp_hub_enable(struct ehci_dbg_port *ehci_debug, unsigned int port) -{ - const u8 hub_addr = USB_DEBUG_DEVNUM-1; - char status[8]; - int ret, loop; - - /* Move hub to address 126. */ - ret = dbgp_control_msg(ehci_debug, 0, - USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE, - USB_REQ_SET_ADDRESS, hub_addr, 0, NULL, 0); - if (ret < 0) - goto err; - - /* Enter configured state on hub. */ - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE, - USB_REQ_SET_CONFIGURATION, 1, 0, NULL, 0); - if (ret < 0) - goto err; - - /* Set PORT_POWER, poll for PORT_CONNECTION. */ - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_SET_FEATURE, USB_HUB_PORT_POWER, port, NULL, 0); - if (ret < 0) - goto err; - - loop = 100; - do { - dbgp_mdelay(10); - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_GET_STATUS, 0, port, status, 4); - if (ret < 0) - goto err; - if (hub_port_status(status, USB_HUB_PORT_CONNECTION)) - break; - } while (--loop); - if (! loop) - goto err; - - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_CLEAR_FEATURE, USB_HUB_C_PORT_CONNECTION, port, NULL, 0); - if (ret < 0) - goto err; - - - /* Set PORT_RESET, poll for C_PORT_RESET. */ - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_SET_FEATURE, USB_HUB_PORT_RESET, port, NULL, 0); - if (ret < 0) - goto err; - - loop = 100; - do { - dbgp_mdelay(10); - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_GET_STATUS, 0, port, status, 4); - if (ret < 0) - goto err; - if (hub_port_status(status, USB_HUB_C_PORT_RESET)) - break; - } while (--loop); - if (! loop) - goto err; - - ret = dbgp_control_msg(ehci_debug, hub_addr, - USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_OTHER, - USB_REQ_CLEAR_FEATURE, USB_HUB_C_PORT_RESET, port, NULL, 0); - if (ret < 0) - goto err; - - if (hub_port_status(status, USB_HUB_PORT_ENABLED)) - return 0; -err: - return -1; -} -#endif /* CONFIG_USBDEBUG_OPTIONAL_HUB_PORT */ static int usbdebug_init_(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *info) @@ -705,14 +608,12 @@ try_next_port: dbgp_mdelay(100); -#if CONFIG_USBDEBUG_OPTIONAL_HUB_PORT - ret = dbgp_hub_enable(ehci_debug, CONFIG_USBDEBUG_OPTIONAL_HUB_PORT); + ret = dbgp_probe_gadget(info->ehci_debug, &info->ep_pipe[0]); if (ret < 0) { - dprintk(BIOS_INFO, "Could not enable USB hub on debug port.\n"); + dprintk(BIOS_INFO, "Could not probe gadget on debug port.\n"); ret = -6; goto err; } -#endif /* Find the debug device and make it device number 127 */ devnum = 0; |