All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 52/80] dm: usb: sandbox: Add an emulator for USB hub emulation
Date: Wed, 25 Mar 2015 12:22:40 -0600	[thread overview]
Message-ID: <1427307788-7496-53-git-send-email-sjg@chromium.org> (raw)
In-Reply-To: <1427307788-7496-1-git-send-email-sjg@chromium.org>

All USB controllers need a root hub. Add a sandbox emulation for this so
that we can add USB devices to sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2: None

 drivers/usb/emul/Makefile      |   1 +
 drivers/usb/emul/sandbox_hub.c | 303 +++++++++++++++++++++++++++++++++++++++++
 include/usb_defs.h             |   3 +
 3 files changed, 307 insertions(+)
 create mode 100644 drivers/usb/emul/sandbox_hub.c

diff --git a/drivers/usb/emul/Makefile b/drivers/usb/emul/Makefile
index 1d5acce..8fd83d5 100644
--- a/drivers/usb/emul/Makefile
+++ b/drivers/usb/emul/Makefile
@@ -6,4 +6,5 @@
 #
 
 obj-$(CONFIG_USB_EMUL) += sandbox_flash.o
+obj-$(CONFIG_USB_EMUL) += sandbox_hub.o
 obj-$(CONFIG_USB_EMUL) += usb-emul-uclass.o
diff --git a/drivers/usb/emul/sandbox_hub.c b/drivers/usb/emul/sandbox_hub.c
new file mode 100644
index 0000000..280c708
--- /dev/null
+++ b/drivers/usb/emul/sandbox_hub.c
@@ -0,0 +1,303 @@
+/*
+ * (C) Copyright 2015 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <usb.h>
+#include <dm/device-internal.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* We only support up to 8 */
+#define SANDBOX_NUM_PORTS	2
+
+struct sandbox_hub_platdata {
+	struct usb_dev_platdata plat;
+	int port;	/* Port number (numbered from 0) */
+};
+
+enum {
+	STRING_MANUFACTURER = 1,
+	STRING_PRODUCT,
+	STRING_SERIAL,
+
+	STRING_count,
+};
+
+static struct usb_string hub_strings[] = {
+	{STRING_MANUFACTURER,	"sandbox"},
+	{STRING_PRODUCT,	"hub"},
+	{STRING_SERIAL,		"2345"},
+};
+
+static struct usb_device_descriptor hub_device_desc = {
+	.bLength =		sizeof(hub_device_desc),
+	.bDescriptorType =	USB_DT_DEVICE,
+
+	.bcdUSB =		__constant_cpu_to_le16(0x0200),
+
+	.bDeviceClass =		USB_CLASS_HUB,
+	.bDeviceSubClass =	0,
+	.bDeviceProtocol =	0,
+
+	.idVendor =		__constant_cpu_to_le16(0x1234),
+	.idProduct =		__constant_cpu_to_le16(0x5678),
+	.iManufacturer =	STRING_MANUFACTURER,
+	.iProduct =		STRING_PRODUCT,
+	.iSerialNumber =	STRING_SERIAL,
+	.bNumConfigurations =	1,
+};
+
+static struct usb_config_descriptor hub_config1 = {
+	.bLength		= sizeof(hub_config1),
+	.bDescriptorType	= USB_DT_CONFIG,
+
+	/* wTotalLength is set up by usb-emul-uclass */
+	.bNumInterfaces		= 1,
+	.bConfigurationValue	= 0,
+	.iConfiguration		= 0,
+	.bmAttributes		= 1 << 7,
+	.bMaxPower		= 50,
+};
+
+static struct usb_interface_descriptor hub_interface0 = {
+	.bLength		= sizeof(hub_interface0),
+	.bDescriptorType	= USB_DT_INTERFACE,
+
+	.bInterfaceNumber	= 0,
+	.bAlternateSetting	= 0,
+	.bNumEndpoints		= 1,
+	.bInterfaceClass	= USB_CLASS_HUB,
+	.bInterfaceSubClass	= 0,
+	.bInterfaceProtocol	= US_PR_CB,
+	.iInterface		= 0,
+};
+
+static struct usb_endpoint_descriptor hub_endpoint0_in = {
+	.bLength		= USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType	= USB_DT_ENDPOINT,
+
+	.bEndpointAddress	= 1 | USB_DIR_IN,
+	.bmAttributes		= USB_ENDPOINT_XFER_INT,
+	.wMaxPacketSize		= __constant_cpu_to_le16(1024),
+	.bInterval		= 0,
+};
+
+static struct usb_hub_descriptor hub_desc = {
+	.bLength		= sizeof(hub_desc),
+	.bDescriptorType	= USB_DT_HUB,
+	.bNbrPorts		= SANDBOX_NUM_PORTS,
+	.wHubCharacteristics	= __constant_cpu_to_le16(1 << 0 | 1 << 3 |
+								1 << 7),
+	.bPwrOn2PwrGood		= 2,
+	.bHubContrCurrent	= 5,
+	.DeviceRemovable	= {0, 0xff}, /* all ports removeable */
+#if SANDBOX_NUM_PORTS > 8
+#error "This code sets up an incorrect mask"
+#endif
+};
+
+static void *hub_desc_list[] = {
+	&hub_device_desc,
+	&hub_config1,
+	&hub_interface0,
+	&hub_endpoint0_in,
+	&hub_desc,
+	NULL,
+};
+
+struct sandbox_hub_priv {
+	int status[SANDBOX_NUM_PORTS];
+	int change[SANDBOX_NUM_PORTS];
+};
+
+static struct udevice *hub_find_device(struct udevice *hub, int port)
+{
+	struct udevice *dev;
+
+	for (device_find_first_child(hub, &dev);
+	     dev;
+	     device_find_next_child(&dev)) {
+		struct sandbox_hub_platdata *plat;
+
+		plat = dev_get_parent_platdata(dev);
+		if (plat->port == port)
+			return dev;
+	}
+
+	return NULL;
+}
+
+static int clrset_post_state(struct udevice *hub, int port, int clear, int set)
+{
+	struct sandbox_hub_priv *priv = dev_get_priv(hub);
+	int *status = &priv->status[port];
+	int *change = &priv->change[port];
+	int ret = 0;
+
+	if ((clear | set) & USB_PORT_STAT_POWER) {
+		struct udevice *dev = hub_find_device(hub, port);
+
+		if (dev) {
+			if (set & USB_PORT_STAT_POWER) {
+				ret = device_probe(dev);
+				debug("%s: %s: power on, probed, ret=%d\n",
+				      __func__, dev->name, ret);
+				if (!ret) {
+					set |= USB_PORT_STAT_CONNECTION |
+						USB_PORT_STAT_ENABLE;
+				}
+
+			} else if (clear & USB_PORT_STAT_POWER) {
+				debug("%s: %s: power off, removed, ret=%d\n",
+				      __func__, dev->name, ret);
+				ret = device_remove(dev);
+				clear |= USB_PORT_STAT_CONNECTION;
+			}
+		}
+	}
+	*change |= *status & clear;
+	*change |= ~*status & set;
+	*change &= 0x1f;
+	*status = (*status & ~clear) | set;
+
+	return ret;
+}
+
+static int sandbox_hub_submit_control_msg(struct udevice *bus,
+					  struct usb_device *udev,
+					  unsigned long pipe,
+					  void *buffer, int length,
+					  struct devrequest *setup)
+{
+	struct sandbox_hub_priv *priv = dev_get_priv(bus);
+	int ret = 0;
+
+	if (pipe == usb_rcvctrlpipe(udev, 0)) {
+		switch (setup->requesttype) {
+		case USB_RT_HUB | USB_DIR_IN:
+			switch (setup->request) {
+			case USB_REQ_GET_STATUS: {
+				struct usb_hub_status *hubsts = buffer;
+
+				hubsts->wHubStatus = 0;
+				hubsts->wHubChange = 0;
+				udev->status = 0;
+				udev->act_len = sizeof(*hubsts);
+				return 0;
+			}
+			default:
+				debug("%s: rx ctl requesttype=%x, request=%x\n",
+				      __func__, setup->requesttype,
+				      setup->request);
+				break;
+			}
+		case USB_RT_PORT | USB_DIR_IN:
+			switch (setup->request) {
+			case USB_REQ_GET_STATUS: {
+				struct usb_port_status *portsts = buffer;
+				int port;
+
+				port = (setup->index & USB_HUB_PORT_MASK) - 1;
+				portsts->wPortStatus = priv->status[port];
+				portsts->wPortChange = priv->change[port];
+				udev->status = 0;
+				udev->act_len = sizeof(*portsts);
+				return 0;
+			}
+			}
+		default:
+			debug("%s: rx ctl requesttype=%x, request=%x\n",
+			      __func__, setup->requesttype, setup->request);
+			break;
+		}
+	} else if (pipe == usb_sndctrlpipe(udev, 0)) {
+		switch (setup->requesttype) {
+		case USB_RT_PORT:
+			switch (setup->request) {
+			case USB_REQ_SET_FEATURE: {
+				int port;
+
+				port = (setup->index & USB_HUB_PORT_MASK) - 1;
+				debug("set feature port=%x, feature=%x\n",
+				      port, setup->value);
+				if (setup->value < USB_PORT_FEAT_C_CONNECTION) {
+					ret = clrset_post_state(bus, port, 0,
+							1 << setup->value);
+				} else {
+					debug("  ** Invalid feature\n");
+				}
+				return ret;
+			}
+			case USB_REQ_CLEAR_FEATURE: {
+				int port;
+
+				port = (setup->index & USB_HUB_PORT_MASK) - 1;
+				debug("clear feature port=%x, feature=%x\n",
+				      port, setup->value);
+				if (setup->value < USB_PORT_FEAT_C_CONNECTION) {
+					ret = clrset_post_state(bus, port,
+							1 << setup->value, 0);
+				} else {
+					priv->change[port] &= 1 <<
+						(setup->value - 16);
+				}
+				udev->status = 0;
+				return 0;
+			}
+			default:
+				debug("%s: tx ctl requesttype=%x, request=%x\n",
+				      __func__, setup->requesttype,
+				      setup->request);
+				break;
+			}
+		default:
+			debug("%s: tx ctl requesttype=%x, request=%x\n",
+			      __func__, setup->requesttype, setup->request);
+			break;
+		}
+	}
+	debug("pipe=%lx\n", pipe);
+
+	return -EIO;
+}
+
+static int sandbox_hub_bind(struct udevice *dev)
+{
+	return usb_emul_setup_device(dev, PACKET_SIZE_64, hub_strings,
+				     hub_desc_list);
+}
+
+static int sandbox_child_post_bind(struct udevice *dev)
+{
+	struct sandbox_hub_platdata *plat = dev_get_parent_platdata(dev);
+
+	plat->port = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "reg", -1);
+
+	return 0;
+}
+
+static const struct dm_usb_ops sandbox_usb_hub_ops = {
+	.control	= sandbox_hub_submit_control_msg,
+};
+
+static const struct udevice_id sandbox_usb_hub_ids[] = {
+	{ .compatible = "sandbox,usb-hub" },
+	{ }
+};
+
+U_BOOT_DRIVER(usb_sandbox_hub) = {
+	.name	= "usb_sandbox_hub",
+	.id	= UCLASS_USB_EMUL,
+	.of_match = sandbox_usb_hub_ids,
+	.bind	= sandbox_hub_bind,
+	.ops	= &sandbox_usb_hub_ops,
+	.priv_auto_alloc_size = sizeof(struct sandbox_hub_priv),
+	.per_child_platdata_auto_alloc_size =
+			sizeof(struct sandbox_hub_platdata),
+	.child_post_bind = sandbox_child_post_bind,
+};
diff --git a/include/usb_defs.h b/include/usb_defs.h
index d7f7465..27ddc47 100644
--- a/include/usb_defs.h
+++ b/include/usb_defs.h
@@ -286,6 +286,9 @@
 #define HUB_CHANGE_LOCAL_POWER	0x0001
 #define HUB_CHANGE_OVERCURRENT	0x0002
 
+/* Mask for wIndex in get/set port feature */
+#define USB_HUB_PORT_MASK	0xf
+
 /*
  * CBI style
  */
-- 
2.2.0.rc0.207.ga3a616c

  parent reply	other threads:[~2015-03-25 18:22 UTC|newest]

Thread overview: 178+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-25 18:21 [U-Boot] [PATCH v2 0/80] dm: Add USB support Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 01/80] linker_lists: Add a function to access a linker list entry Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 02/80] sandbox: Fix comment for os_open() Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 03/80] dm: test: bus: Use a local variable to simplify code Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 04/80] dm: exynos: snow: Move the keyboard to I2C Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 05/80] dm: core: Support allocating driver-private data for DMA Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 06/80] dm: core: Convert driver_bind() to use const Simon Glass
2015-04-07 18:39   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 07/80] dm: core: Rename driver data function to dev_get_driver_data() Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 08/80] dm: core: Mark device as active before calling uclass probe() methods Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 09/80] dm: core: Add device children and sibling functions Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 10/80] dm: gpio: Add an implementation for gpio_get_number() Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:21 ` [U-Boot] [PATCH v2 11/80] dm: usb: Add a uclass for USB controllers Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 12/80] dm: usb: Adjust usb command to prepare for driver model Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 13/80] dm: usb: Adjust usb_alloc_new_device() to return an error Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 14/80] dm: usb: Convert 'usb' command to support driver model Simon Glass
2015-04-07 18:40   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 15/80] dm: usb: Drop the legacy USB init sequence Simon Glass
2015-03-26 18:22   ` Marek Vasut
2015-04-07 18:41     ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 16/80] dm: usb: Refactor port resets Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 17/80] dm: usb: Move descriptor setup code into its own function Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 18/80] dm: usb: Split out more code from usb_new_device() Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 19/80] dm: usb: Complete the splitting up of usb_new_device() Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 20/80] dm: usb: Convert core usb.c file to support driver model Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 21/80] dm: usb: Split hub detection into its own function Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 22/80] dm: usb: Add driver model support for hubs Simon Glass
2015-04-07 18:41   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 23/80] dm: usb: Move USB storage definitions to usb_defs.h Simon Glass
2015-04-07 18:42   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 24/80] dm: usb: Fix type problems in usb_stor_get_info() Simon Glass
2015-04-07 18:42   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 25/80] dm: usb: Simply device finding code in usb_storage Simon Glass
2015-04-07 18:42   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 26/80] dm: usb: Adjust usb_storage to work with sandbox Simon Glass
2015-04-07 18:42   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 27/80] dm: usb: Move storage device scanning into its own function Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 28/80] dm: usb: Convert usb_storage to driver model Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 29/80] dm: usb: Move all the EHCI weak functions together and declare them Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 30/80] dm: usb: Pass EHCI controller pointer to ehci_get_port_speed() Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 31/80] dm: usb: Allow ECHI to hold private data for the controller Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 32/80] dm: usb: tegra: Store the controller type explicitly Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 33/80] dm: usb: Pass EHCI controller pointer to ehci_powerup_fixup() Simon Glass
2015-04-07 18:43   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 34/80] dm: usb: tegra: Drop use of global controller variable Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 35/80] dm: usb: Pass EHCI controller pointer to ehci_set_usbmode() Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 36/80] dm: usb: Pass EHCI controller pointer to ehci_get_portsc_register() Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 37/80] dm: usb: ehci: Use a function to find the controller from struct udevice Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 38/80] dm: usb: Refactor EHCI init Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 39/80] dm: usb: Drop the EHCI weak functions Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 40/80] dm: usb: Change ehci_reset() to use a pointer Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 41/80] dm: usb: Add driver model support to EHCI Simon Glass
2015-04-07 18:44   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 42/80] dm: usb: Allow USB drivers to be declared and auto-probed Simon Glass
2015-04-07 18:45   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 43/80] dm: usb: Bind generic USB devices when there is no driver Simon Glass
2015-04-07 18:45   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 44/80] dm: usb: Allow setting up a USB controller as a device/gadget Simon Glass
2015-04-07 18:45   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 45/80] dm: usb: Split out the keyboard probe into its own function Simon Glass
2015-04-07 18:45   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 46/80] dm: usb: Support driver model with USB keyboards Simon Glass
2015-04-07 18:45   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 47/80] dm: usb: tegra: Add vbus GPIOs for nyan Simon Glass
2015-04-07 19:09   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 48/80] dm: usb: Move struct usb_string to a common place Simon Glass
2015-04-07 19:09   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 49/80] dm: usb: sandbox: Add a uclass for USB device emulation Simon Glass
2015-04-07 19:09   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 50/80] dm: usb: sandbox: Reset emulation devices in usb stop() Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 51/80] dm: usb: sandbox: Add an emulator for USB flash devices Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` Simon Glass [this message]
2015-04-07 19:10   ` [U-Boot] [PATCH v2 52/80] dm: usb: sandbox: Add an emulator for USB hub emulation Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 53/80] dm: usb: sandbox: Add a driver for sandbox Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 54/80] dm: usb: dts: sandbox: Add some sample USB devices to sandbox Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 55/80] dm: usb: Add support for USB ethernet devices with driver model Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 56/80] dm: usb: exynos: Add driver model support to exynos EHCI Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 57/80] dm: usb: tegra: Remove the port_addr_clear_csc variable Simon Glass
2015-03-26  3:38   ` Jim Lin
2015-03-26  9:01     ` Jim Lin
2015-04-07 19:10       ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 58/80] dm: usb: tegra: Tidy up error handling and a static function Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 59/80] dm: usb: tegra: Move most of init/uninit into a function Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 60/80] dm: usb: tegra: Add driver model support to tegra EHCI Simon Glass
2015-04-07 19:10   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 61/80] dm: usb: xhci: Use a function to get xhci_ctrl Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 62/80] dm: usb: xhci: Use explicit parameters for xhci_alloc_virt_device() Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 63/80] dm: usb: xhci: Use explicit parameters for xhci_setup_addressable_virt_dev() Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 64/80] dm: usb: xhci: Factor out common init/uninit Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 65/80] dm: usb: Support driver model in XHCI Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 66/80] dm: usb: Rename the XHCI HCD to U-Boot Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 67/80] dm: usb: exynos: Adjust XHCI driver to support driver model Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 68/80] dm: usb: exynos: Use driver model for USB Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 69/80] dm: usb: exynos: Enable both USB ports on snow Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 70/80] dm: usb: exynos: Enable both EHCI and XHCI " Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:22 ` [U-Boot] [PATCH v2 71/80] dm: usb: tegra: Move to driver model for USB Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 72/80] dm: usb: Add a generic descriptor struct Simon Glass
2015-04-07 19:11   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 73/80] dm: usb: Tidy up pipe value decoding Simon Glass
2015-04-07 19:12   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 74/80] dm: usb: sandbox: Enable USB Simon Glass
2015-04-07 19:12   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 75/80] dm: test: Correct printf() output nit in 'dm uclass' Simon Glass
2015-04-07 19:12   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 76/80] dm: test: Allow 'dm test' to select a particular test to run Simon Glass
2015-04-07 19:12   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 77/80] dm: usb: Add tests for the USB uclass Simon Glass
2015-04-07 19:12   ` Simon Glass
2015-04-21  5:24   ` Joe Hershberger
2015-04-21 13:14     ` Simon Glass
2015-04-21 16:05       ` Joe Hershberger
2015-04-21 16:19         ` Simon Glass
2015-04-21 16:57           ` Joe Hershberger
2015-04-21 17:00             ` Simon Glass
2015-04-21 20:10               ` Joe Hershberger
2015-04-21 20:14                 ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 78/80] dm: usb: tegra: Drop legacy USB code Simon Glass
2015-06-11 20:19   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 79/80] dm: usb: exynos: " Simon Glass
2015-05-06 21:44   ` Simon Glass
2015-03-25 18:23 ` [U-Boot] [PATCH v2 80/80] dm: usb: Add a README for driver model Simon Glass
2015-04-07  3:24   ` Jim Lin
2015-04-08  1:40     ` Simon Glass
2015-03-26 19:40 ` [U-Boot] [PATCH v2 0/80] dm: Add USB support Marek Vasut
2015-04-05 23:38   ` Simon Glass
2015-04-06 13:13     ` Marek Vasut
2015-04-06 22:38       ` Simon Glass
2015-04-07 13:52         ` Marek Vasut

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1427307788-7496-53-git-send-email-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.