From: Lukasz Majewski <l.majewski@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [u-boot 03/40] usb: gadget: udc: add udc-core from linux kernel to u-boot
Date: Mon, 16 Feb 2015 11:11:13 +0100 [thread overview]
Message-ID: <20150216111113.35c07110@amdc2363> (raw)
In-Reply-To: <1423212497-11970-4-git-send-email-kishon@ti.com>
Hi Kishon,
> Added udc-core.c from linux kernel 3.19-rc1 (97bf6af1f9) to u-boot.
> This will be adapted to work with u-boot in the
> following patches.
> Adding support for udc will help to seamlessly port dwc3 driver from
> linux kernel to u-boot (since dwc3 uses udc-core) and it'll also help
> to add support for multiple gadget controllers to be functional at the
> same time.
> All other gadget drivers can also be adapted to use udc-core.
>
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> ---
> drivers/usb/gadget/udc/Makefile | 4 +
> drivers/usb/gadget/udc/udc-core.c | 637
> +++++++++++++++++++++++++++++++++++++ 2 files changed, 641
> insertions(+) create mode 100644 drivers/usb/gadget/udc/Makefile
> create mode 100644 drivers/usb/gadget/udc/udc-core.c
>
> diff --git a/drivers/usb/gadget/udc/Makefile
> b/drivers/usb/gadget/udc/Makefile new file mode 100644
> index 0000000..be265aa
> --- /dev/null
> +++ b/drivers/usb/gadget/udc/Makefile
> @@ -0,0 +1,4 @@
> +#
> +# USB peripheral controller drivers
> +#
> +obj-$(CONFIG_USB_GADGET) += udc-core.o
> diff --git a/drivers/usb/gadget/udc/udc-core.c
> b/drivers/usb/gadget/udc/udc-core.c new file mode 100644
> index 0000000..e31d574
> --- /dev/null
> +++ b/drivers/usb/gadget/udc/udc-core.c
> @@ -0,0 +1,637 @@
> +/**
> + * udc.c - Core UDC Framework
> + *
> + * Copyright (C) 2010 Texas Instruments
> + * Author: Felipe Balbi <balbi@ti.com>
> + *
> + * This program is free software: you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License version 2 of
> + * the License as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program. If not, see
> <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/device.h>
> +#include <linux/list.h>
> +#include <linux/err.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/workqueue.h>
> +
> +#include <linux/usb/ch9.h>
> +#include <linux/usb/gadget.h>
> +#include <linux/usb.h>
> +
> +/**
> + * struct usb_udc - describes one usb device controller
> + * @driver - the gadget driver pointer. For use by the class code
> + * @dev - the child device to the actual controller
> + * @gadget - the gadget. For use by the class code
> + * @list - for use by the udc class driver
> + *
> + * This represents the internal data structure which is used by the
> UDC-class
> + * to hold information about udc driver and gadget together.
> + */
> +struct usb_udc {
> + struct usb_gadget_driver *driver;
> + struct usb_gadget *gadget;
> + struct device dev;
> + struct list_head list;
> +};
> +
> +static struct class *udc_class;
> +static LIST_HEAD(udc_list);
> +static DEFINE_MUTEX(udc_lock);
> +
> +/*
> -------------------------------------------------------------------------
> */ + +#ifdef CONFIG_HAS_DMA
> +
> +int usb_gadget_map_request(struct usb_gadget *gadget,
> + struct usb_request *req, int is_in)
> +{
> + if (req->length == 0)
> + return 0;
> +
> + if (req->num_sgs) {
> + int mapped;
> +
> + mapped = dma_map_sg(&gadget->dev, req->sg,
> req->num_sgs,
> + is_in ? DMA_TO_DEVICE :
> DMA_FROM_DEVICE);
> + if (mapped == 0) {
> + dev_err(&gadget->dev, "failed to map SGs\n");
> + return -EFAULT;
> + }
> +
> + req->num_mapped_sgs = mapped;
> + } else {
> + req->dma = dma_map_single(&gadget->dev, req->buf,
> req->length,
> + is_in ? DMA_TO_DEVICE :
> DMA_FROM_DEVICE); +
> + if (dma_mapping_error(&gadget->dev, req->dma)) {
> + dev_err(&gadget->dev, "failed to map
> buffer\n");
> + return -EFAULT;
> + }
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_map_request);
> +
> +void usb_gadget_unmap_request(struct usb_gadget *gadget,
> + struct usb_request *req, int is_in)
> +{
> + if (req->length == 0)
> + return;
> +
> + if (req->num_mapped_sgs) {
> + dma_unmap_sg(&gadget->dev, req->sg,
> req->num_mapped_sgs,
> + is_in ? DMA_TO_DEVICE :
> DMA_FROM_DEVICE); +
> + req->num_mapped_sgs = 0;
> + } else {
> + dma_unmap_single(&gadget->dev, req->dma, req->length,
> + is_in ? DMA_TO_DEVICE :
> DMA_FROM_DEVICE);
> + }
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);
> +
> +#endif /* CONFIG_HAS_DMA */
> +
> +/*
> -------------------------------------------------------------------------
> */ + +/**
> + * usb_gadget_giveback_request - give the request back to the gadget
> layer
> + * Context: in_interrupt()
> + *
> + * This is called by device controller drivers in order to return the
> + * completed request back to the gadget layer.
> + */
> +void usb_gadget_giveback_request(struct usb_ep *ep,
> + struct usb_request *req)
> +{
> + if (likely(req->status == 0))
> + usb_led_activity(USB_LED_EVENT_GADGET);
> +
> + req->complete(ep, req);
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_giveback_request);
> +
> +/*
> -------------------------------------------------------------------------
> */ + +static void usb_gadget_state_work(struct work_struct *work)
> +{
> + struct usb_gadget *gadget = work_to_gadget(work);
> + struct usb_udc *udc = NULL;
> +
> + mutex_lock(&udc_lock);
> + list_for_each_entry(udc, &udc_list, list)
> + if (udc->gadget == gadget)
> + goto found;
> + mutex_unlock(&udc_lock);
> +
> + return;
> +
> +found:
> + mutex_unlock(&udc_lock);
> +
> + sysfs_notify(&udc->dev.kobj, NULL, "state");
> +}
> +
> +void usb_gadget_set_state(struct usb_gadget *gadget,
> + enum usb_device_state state)
> +{
> + gadget->state = state;
> + schedule_work(&gadget->work);
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_set_state);
> +
> +/*
> -------------------------------------------------------------------------
> */ + +/**
> + * usb_gadget_udc_reset - notifies the udc core that bus reset occurs
> + * @gadget: The gadget which bus reset occurs
> + * @driver: The gadget driver we want to notify
> + *
> + * If the udc driver has bus reset handler, it needs to call this
> when the bus
> + * reset occurs, it notifies the gadget driver that the bus reset
> occurs as
> + * well as updates gadget state.
> + */
> +void usb_gadget_udc_reset(struct usb_gadget *gadget,
> + struct usb_gadget_driver *driver)
> +{
> + driver->reset(gadget);
> + usb_gadget_set_state(gadget, USB_STATE_DEFAULT);
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_udc_reset);
> +
> +/**
> + * usb_gadget_udc_start - tells usb device controller to start up
> + * @udc: The UDC to be started
> + *
> + * This call is issued by the UDC Class driver when it's about
> + * to register a gadget driver to the device controller, before
> + * calling gadget driver's bind() method.
> + *
> + * It allows the controller to be powered off until strictly
> + * necessary to have it powered on.
> + *
> + * Returns zero on success, else negative errno.
> + */
> +static inline int usb_gadget_udc_start(struct usb_udc *udc)
> +{
> + return udc->gadget->ops->udc_start(udc->gadget, udc->driver);
> +}
> +
> +/**
> + * usb_gadget_udc_stop - tells usb device controller we don't need
> it anymore
> + * @gadget: The device we want to stop activity
> + * @driver: The driver to unbind from @gadget
> + *
> + * This call is issued by the UDC Class driver after calling
> + * gadget driver's unbind() method.
> + *
> + * The details are implementation specific, but it can go as
> + * far as powering off UDC completely and disable its data
> + * line pullups.
> + */
> +static inline void usb_gadget_udc_stop(struct usb_udc *udc)
> +{
> + udc->gadget->ops->udc_stop(udc->gadget);
> +}
> +
> +/**
> + * usb_udc_release - release the usb_udc struct
> + * @dev: the dev member within usb_udc
> + *
> + * This is called by driver's core in order to free memory once the
> last
> + * reference is released.
> + */
> +static void usb_udc_release(struct device *dev)
> +{
> + struct usb_udc *udc;
> +
> + udc = container_of(dev, struct usb_udc, dev);
> + dev_dbg(dev, "releasing '%s'\n", dev_name(dev));
> + kfree(udc);
> +}
> +
> +static const struct attribute_group *usb_udc_attr_groups[];
> +
> +static void usb_udc_nop_release(struct device *dev)
> +{
> + dev_vdbg(dev, "%s\n", __func__);
> +}
> +
> +/**
> + * usb_add_gadget_udc_release - adds a new gadget to the udc class
> driver list
> + * @parent: the parent device to this udc. Usually the controller
> driver's
> + * device.
> + * @gadget: the gadget to be added to the list.
> + * @release: a gadget release function.
> + *
> + * Returns zero on success, negative errno otherwise.
> + */
> +int usb_add_gadget_udc_release(struct device *parent, struct
> usb_gadget *gadget,
> + void (*release)(struct device *dev))
> +{
> + struct usb_udc *udc;
> + int ret = -ENOMEM;
> +
> + udc = kzalloc(sizeof(*udc), GFP_KERNEL);
> + if (!udc)
> + goto err1;
> +
> + dev_set_name(&gadget->dev, "gadget");
> + INIT_WORK(&gadget->work, usb_gadget_state_work);
> + gadget->dev.parent = parent;
> +
> +#ifdef CONFIG_HAS_DMA
> + dma_set_coherent_mask(&gadget->dev,
> parent->coherent_dma_mask);
> + gadget->dev.dma_parms = parent->dma_parms;
> + gadget->dev.dma_mask = parent->dma_mask;
> +#endif
> +
> + if (release)
> + gadget->dev.release = release;
> + else
> + gadget->dev.release = usb_udc_nop_release;
> +
> + ret = device_register(&gadget->dev);
> + if (ret)
> + goto err2;
> +
> + device_initialize(&udc->dev);
> + udc->dev.release = usb_udc_release;
> + udc->dev.class = udc_class;
> + udc->dev.groups = usb_udc_attr_groups;
> + udc->dev.parent = parent;
> + ret = dev_set_name(&udc->dev, "%s",
> kobject_name(&parent->kobj));
> + if (ret)
> + goto err3;
> +
> + udc->gadget = gadget;
> +
> + mutex_lock(&udc_lock);
> + list_add_tail(&udc->list, &udc_list);
> +
> + ret = device_add(&udc->dev);
> + if (ret)
> + goto err4;
> +
> + usb_gadget_set_state(gadget, USB_STATE_NOTATTACHED);
> +
> + mutex_unlock(&udc_lock);
> +
> + return 0;
> +
> +err4:
> + list_del(&udc->list);
> + mutex_unlock(&udc_lock);
> +
> +err3:
> + put_device(&udc->dev);
> +
> +err2:
> + put_device(&gadget->dev);
> + kfree(udc);
> +
> +err1:
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(usb_add_gadget_udc_release);
> +
> +/**
> + * usb_add_gadget_udc - adds a new gadget to the udc class driver
> list
> + * @parent: the parent device to this udc. Usually the controller
> + * driver's device.
> + * @gadget: the gadget to be added to the list
> + *
> + * Returns zero on success, negative errno otherwise.
> + */
> +int usb_add_gadget_udc(struct device *parent, struct usb_gadget
> *gadget) +{
> + return usb_add_gadget_udc_release(parent, gadget, NULL);
> +}
> +EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
> +
> +static void usb_gadget_remove_driver(struct usb_udc *udc)
> +{
> + dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n",
> + udc->driver->function);
> +
> + kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
> +
> + usb_gadget_disconnect(udc->gadget);
> + udc->driver->disconnect(udc->gadget);
> + udc->driver->unbind(udc->gadget);
> + usb_gadget_udc_stop(udc);
> +
> + udc->driver = NULL;
> + udc->dev.driver = NULL;
> + udc->gadget->dev.driver = NULL;
> +}
> +
> +/**
> + * usb_del_gadget_udc - deletes @udc from udc_list
> + * @gadget: the gadget to be removed.
> + *
> + * This, will call usb_gadget_unregister_driver() if
> + * the @udc is still busy.
> + */
> +void usb_del_gadget_udc(struct usb_gadget *gadget)
> +{
> + struct usb_udc *udc = NULL;
> +
> + mutex_lock(&udc_lock);
> + list_for_each_entry(udc, &udc_list, list)
> + if (udc->gadget == gadget)
> + goto found;
> +
> + dev_err(gadget->dev.parent, "gadget not registered.\n");
> + mutex_unlock(&udc_lock);
> +
> + return;
> +
> +found:
> + dev_vdbg(gadget->dev.parent, "unregistering gadget\n");
> +
> + list_del(&udc->list);
> + mutex_unlock(&udc_lock);
> +
> + if (udc->driver)
> + usb_gadget_remove_driver(udc);
> +
> + kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE);
> + flush_work(&gadget->work);
> + device_unregister(&udc->dev);
> + device_unregister(&gadget->dev);
> +}
> +EXPORT_SYMBOL_GPL(usb_del_gadget_udc);
> +
> +/*
> -------------------------------------------------------------------------
> */ + +static int udc_bind_to_driver(struct usb_udc *udc, struct
> usb_gadget_driver *driver) +{
> + int ret;
> +
> + dev_dbg(&udc->dev, "registering UDC driver [%s]\n",
> + driver->function);
> +
> + udc->driver = driver;
> + udc->dev.driver = &driver->driver;
> + udc->gadget->dev.driver = &driver->driver;
> +
> + ret = driver->bind(udc->gadget, driver);
> + if (ret)
> + goto err1;
> + ret = usb_gadget_udc_start(udc);
> + if (ret) {
> + driver->unbind(udc->gadget);
> + goto err1;
> + }
> + usb_gadget_connect(udc->gadget);
> +
> + kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
> + return 0;
> +err1:
> + if (ret != -EISNAM)
> + dev_err(&udc->dev, "failed to start %s: %d\n",
> + udc->driver->function, ret);
> + udc->driver = NULL;
> + udc->dev.driver = NULL;
> + udc->gadget->dev.driver = NULL;
> + return ret;
> +}
> +
> +int usb_udc_attach_driver(const char *name, struct usb_gadget_driver
> *driver) +{
> + struct usb_udc *udc = NULL;
> + int ret = -ENODEV;
> +
> + mutex_lock(&udc_lock);
> + list_for_each_entry(udc, &udc_list, list) {
> + ret = strcmp(name, dev_name(&udc->dev));
> + if (!ret)
> + break;
> + }
> + if (ret) {
> + ret = -ENODEV;
> + goto out;
> + }
> + if (udc->driver) {
> + ret = -EBUSY;
> + goto out;
> + }
> + ret = udc_bind_to_driver(udc, driver);
> +out:
> + mutex_unlock(&udc_lock);
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(usb_udc_attach_driver);
> +
> +int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
> +{
> + struct usb_udc *udc = NULL;
> + int ret;
> +
> + if (!driver || !driver->bind || !driver->setup)
> + return -EINVAL;
> +
> + mutex_lock(&udc_lock);
> + list_for_each_entry(udc, &udc_list, list) {
> + /* For now we take the first one */
> + if (!udc->driver)
> + goto found;
> + }
> +
> + pr_debug("couldn't find an available UDC\n");
> + mutex_unlock(&udc_lock);
> + return -ENODEV;
> +found:
> + ret = udc_bind_to_driver(udc, driver);
> + mutex_unlock(&udc_lock);
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_probe_driver);
> +
> +int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
> +{
> + struct usb_udc *udc = NULL;
> + int ret = -ENODEV;
> +
> + if (!driver || !driver->unbind)
> + return -EINVAL;
> +
> + mutex_lock(&udc_lock);
> + list_for_each_entry(udc, &udc_list, list)
> + if (udc->driver == driver) {
> + usb_gadget_remove_driver(udc);
> + usb_gadget_set_state(udc->gadget,
> + USB_STATE_NOTATTACHED);
> + ret = 0;
> + break;
> + }
> +
> + mutex_unlock(&udc_lock);
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(usb_gadget_unregister_driver);
> +
> +/*
> -------------------------------------------------------------------------
> */ + +static ssize_t usb_udc_srp_store(struct device *dev,
> + struct device_attribute *attr, const char *buf,
> size_t n) +{
> + struct usb_udc *udc = container_of(dev,
> struct usb_udc, dev); +
> + if (sysfs_streq(buf, "1"))
> + usb_gadget_wakeup(udc->gadget);
> +
> + return n;
> +}
> +static DEVICE_ATTR(srp, S_IWUSR, NULL, usb_udc_srp_store);
> +
> +static ssize_t usb_udc_softconn_store(struct device *dev,
> + struct device_attribute *attr, const char *buf,
> size_t n) +{
> + struct usb_udc *udc = container_of(dev,
> struct usb_udc, dev); +
> + if (!udc->driver) {
> + dev_err(dev, "soft-connect without a gadget
> driver\n");
> + return -EOPNOTSUPP;
> + }
> +
> + if (sysfs_streq(buf, "connect")) {
> + usb_gadget_udc_start(udc);
> + usb_gadget_connect(udc->gadget);
> + } else if (sysfs_streq(buf, "disconnect")) {
> + usb_gadget_disconnect(udc->gadget);
> + udc->driver->disconnect(udc->gadget);
> + usb_gadget_udc_stop(udc);
> + } else {
> + dev_err(dev, "unsupported command '%s'\n", buf);
> + return -EINVAL;
> + }
> +
> + return n;
> +}
> +static DEVICE_ATTR(soft_connect, S_IWUSR, NULL,
> usb_udc_softconn_store); +
> +static ssize_t state_show(struct device *dev, struct
> device_attribute *attr,
> + char *buf)
> +{
> + struct usb_udc *udc = container_of(dev,
> struct usb_udc, dev);
> + struct usb_gadget *gadget = udc->gadget;
> +
> + return sprintf(buf, "%s\n", usb_state_string(gadget->state));
> +}
> +static DEVICE_ATTR_RO(state);
> +
> +#define USB_UDC_SPEED_ATTR(name,
> param) \ +ssize_t
> name##_show(struct device
> *dev, \
> + struct device_attribute *attr, char
> *buf) \
> +{
> \
> + struct usb_udc *udc = container_of(dev, struct usb_udc,
> dev); \
> + return snprintf(buf, PAGE_SIZE,
> "%s\n", \
> +
> usb_speed_string(udc->gadget->param)); \
> +}
> \ +static DEVICE_ATTR_RO(name) +
> +static USB_UDC_SPEED_ATTR(current_speed, speed);
> +static USB_UDC_SPEED_ATTR(maximum_speed, max_speed);
> +
> +#define USB_UDC_ATTR(name) \
> +ssize_t name##_show(struct device
> *dev, \
> + struct device_attribute *attr, char *buf) \
> +{ \
> + struct usb_udc *udc = container_of(dev,
> struct usb_udc, dev); \
> + struct usb_gadget *gadget =
> udc->gadget; \
> + \
> + return snprintf(buf, PAGE_SIZE, "%d\n",
> gadget->name); \
> +} \
> +static DEVICE_ATTR_RO(name) +
> +static USB_UDC_ATTR(is_otg);
> +static USB_UDC_ATTR(is_a_peripheral);
> +static USB_UDC_ATTR(b_hnp_enable);
> +static USB_UDC_ATTR(a_hnp_support);
> +static USB_UDC_ATTR(a_alt_hnp_support);
> +
> +static struct attribute *usb_udc_attrs[] = {
> + &dev_attr_srp.attr,
> + &dev_attr_soft_connect.attr,
> + &dev_attr_state.attr,
> + &dev_attr_current_speed.attr,
> + &dev_attr_maximum_speed.attr,
> +
> + &dev_attr_is_otg.attr,
> + &dev_attr_is_a_peripheral.attr,
> + &dev_attr_b_hnp_enable.attr,
> + &dev_attr_a_hnp_support.attr,
> + &dev_attr_a_alt_hnp_support.attr,
> + NULL,
> +};
> +
> +static const struct attribute_group usb_udc_attr_group = {
> + .attrs = usb_udc_attrs,
> +};
> +
> +static const struct attribute_group *usb_udc_attr_groups[] = {
> + &usb_udc_attr_group,
> + NULL,
> +};
> +
> +static int usb_udc_uevent(struct device *dev, struct kobj_uevent_env
> *env) +{
> + struct usb_udc *udc = container_of(dev,
> struct usb_udc, dev);
> + int ret;
> +
> + ret = add_uevent_var(env, "USB_UDC_NAME=%s",
> udc->gadget->name);
> + if (ret) {
> + dev_err(dev, "failed to add uevent USB_UDC_NAME\n");
> + return ret;
> + }
> +
> + if (udc->driver) {
> + ret = add_uevent_var(env, "USB_UDC_DRIVER=%s",
> + udc->driver->function);
> + if (ret) {
> + dev_err(dev, "failed to add uevent
> USB_UDC_DRIVER\n");
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> +static int __init usb_udc_init(void)
> +{
> + udc_class = class_create(THIS_MODULE, "udc");
> + if (IS_ERR(udc_class)) {
> + pr_err("failed to create udc class --> %ld\n",
> + PTR_ERR(udc_class));
> + return PTR_ERR(udc_class);
> + }
> +
> + udc_class->dev_uevent = usb_udc_uevent;
> + return 0;
> +}
> +subsys_initcall(usb_udc_init);
> +
> +static void __exit usb_udc_exit(void)
> +{
> + class_destroy(udc_class);
> +}
> +module_exit(usb_udc_exit);
> +
> +MODULE_DESCRIPTION("UDC Framework");
> +MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
> +MODULE_LICENSE("GPL v2");
Since this code was taken from a linux kernel I don't have any comments
:-)
However, I will thest this series to asses if it works with Odroid-XU3,
since it also uses DWC3.
--
Best regards,
Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
next prev parent reply other threads:[~2015-02-16 10:11 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-06 8:47 [U-Boot] [u-boot 00/40] dra7xx: am43xx: add dwc3 gadget driver support and enable dfu Kishon Vijay Abraham I
2015-02-06 8:47 ` [U-Boot] [u-boot 01/40] ARM: DRA7: Enable clocks for USB OTGSS and USB PHY Kishon Vijay Abraham I
2015-02-16 10:04 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 02/40] ARM: AM43xx: " Kishon Vijay Abraham I
2015-02-16 10:07 ` Lukasz Majewski
2015-02-16 13:29 ` Marek Vasut
2015-02-20 9:30 ` Kishon Vijay Abraham I
2015-02-20 10:48 ` Marek Vasut
2015-02-06 8:47 ` [U-Boot] [u-boot 03/40] usb: gadget: udc: add udc-core from linux kernel to u-boot Kishon Vijay Abraham I
2015-02-07 13:27 ` Marek Vasut
2015-02-16 9:58 ` Lukasz Majewski
2015-02-16 13:29 ` Marek Vasut
2015-02-16 10:11 ` Lukasz Majewski [this message]
2015-02-06 8:47 ` [U-Boot] [u-boot 04/40] include: usb: modify gadget.h to include udc support Kishon Vijay Abraham I
2015-02-16 10:12 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 05/40] usb: gadget: udc: make udc-core compile in u-boot build Kishon Vijay Abraham I
2015-02-16 10:18 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 06/40] include: asm: dma-mapping: get rid of the compilation warning in udc-core Kishon Vijay Abraham I
2015-02-16 10:19 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 07/40] usb: dwc3: add dwc3 folder from linux kernel to u-boot Kishon Vijay Abraham I
2015-02-16 10:20 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 08/40] usb: dwc3: remove un-used files from dwc3 folder Kishon Vijay Abraham I
2015-02-16 10:21 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 09/40] usb: dwc3: Modify the file headers to u-boot format Kishon Vijay Abraham I
2015-02-16 10:21 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 10/40] usb: dwc3: remove trace_* APIs from dwc3 driver Kishon Vijay Abraham I
2015-02-16 10:24 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 11/40] usb: dwc3: fix dwc3 header files Kishon Vijay Abraham I
2015-02-16 10:25 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 12/40] usb: dwc3: remove pm related operations from dwc3 driver Kishon Vijay Abraham I
2015-02-16 10:26 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 13/40] arm: asm: dma-mapping: added dma_free_coherent API Kishon Vijay Abraham I
2015-02-16 10:26 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 14/40] usb: dwc3: linux-compat: Add header for dwc3 linux compatibiltiy Kishon Vijay Abraham I
2015-02-16 10:32 ` Lukasz Majewski
2015-02-23 6:19 ` Kishon Vijay Abraham I
2015-02-23 14:59 ` Marek Vasut
2015-02-24 13:21 ` Kishon Vijay Abraham I
2015-02-24 17:42 ` Marek Vasut
2015-02-25 8:17 ` Lukasz Majewski
2015-02-25 12:16 ` Marek Vasut
2015-02-25 13:04 ` Lukasz Majewski
2015-02-27 9:43 ` Marek Vasut
2015-02-27 11:28 ` Lukasz Majewski
2015-03-02 9:51 ` Marek Vasut
2015-03-02 12:56 ` Lukasz Majewski
2015-03-02 14:30 ` Marek Vasut
2015-02-06 8:47 ` [U-Boot] [u-boot 15/40] usb: dwc3: gadget: make dwc3 gadget build in uboot Kishon Vijay Abraham I
2015-02-16 10:52 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 16/40] include: asm: types: add resource_size_t type Kishon Vijay Abraham I
2015-02-16 10:53 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 17/40] usb: dwc3: ep0: make dwc3 ep0 build in uboot Kishon Vijay Abraham I
2015-02-16 10:54 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 18/40] include: usb: composite: add USB_GADGET_DELAYED_STATUS to avoid compilation error Kishon Vijay Abraham I
2015-02-16 10:55 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 19/40] usb: dwc3: core: make dwc3 core build in uboot Kishon Vijay Abraham I
2015-02-16 10:57 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 20/40] include: dwc3-uboot: add a structure for populating platform data Kishon Vijay Abraham I
2015-02-16 10:58 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 21/40] dwc3: core: change probe and remove to uboot init and uboot exit code Kishon Vijay Abraham I
2015-02-16 10:59 ` Lukasz Majewski
2015-02-06 8:47 ` [U-Boot] [u-boot 22/40] dwc3: core: add support for multiple dwc3 controllers Kishon Vijay Abraham I
2015-02-16 11:00 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 23/40] dwc3: core: added an API to invoke irq handlers Kishon Vijay Abraham I
2015-02-16 11:01 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 24/40] usb: dwc3: dwc3-omap: make dwc3-omap build in uboot Kishon Vijay Abraham I
2015-02-16 11:02 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 25/40] include: dwc3-omap-uboot: add a structure for populating dwc3-omap platform data Kishon Vijay Abraham I
2015-02-16 11:03 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 26/40] usb: dwc3: dwc3-omap: change probe and remove to uboot init and uboot exit code Kishon Vijay Abraham I
2015-02-16 11:04 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 27/40] dwc3: dwc3-omap: add support for multiple dwc3-omap controllers Kishon Vijay Abraham I
2015-02-16 11:06 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 28/40] usb: dwc3: dwc3-omap: add interrupt status API to check for interrupts Kishon Vijay Abraham I
2015-02-16 11:07 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 29/40] usb: dwc3: TI PHY: PHY driver for dwc3 in TI platforms Kishon Vijay Abraham I
2015-02-16 11:13 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 30/40] dwc3: flush the buffers before using it Kishon Vijay Abraham I
2015-02-16 11:39 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 31/40] usb: dwc3: ep0: preparation for implementing chained TRB Kishon Vijay Abraham I
2015-02-16 11:40 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 32/40] usb: dwc3: Add chained TRB support for ep0 Kishon Vijay Abraham I
2015-02-16 11:42 ` Lukasz Majewski
2015-02-16 12:01 ` Kishon Vijay Abraham I
2015-02-16 13:04 ` Lukasz Majewski
2015-02-16 13:06 ` Kishon Vijay Abraham I
2015-02-06 8:48 ` [U-Boot] [u-boot 33/40] usb: dwc3: Makefile: Make dwc3 driver compile in u-boot Kishon Vijay Abraham I
2015-02-16 11:43 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 34/40] usb: gadget: defer setting maxpacket till ->setup() Kishon Vijay Abraham I
2015-02-16 11:44 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 35/40] common: cmd_dfu: invoke board_usb_cleanup() for cleaning up Kishon Vijay Abraham I
2015-02-16 11:47 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 36/40] board: ti: DRA7: added USB initializtion code Kishon Vijay Abraham I
2015-02-16 11:49 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 37/40] include: configs: Enable DWC3 and DFU in DRA7xx Kishon Vijay Abraham I
2015-02-16 11:50 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 38/40] board: ti: AM43xx: added USB initializtion code Kishon Vijay Abraham I
2015-02-16 11:50 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 39/40] include: configs: Enable DWC3 and DFU in AM43xx Kishon Vijay Abraham I
2015-02-16 11:53 ` Lukasz Majewski
2015-02-06 8:48 ` [U-Boot] [u-boot 40/40] usb: modify usb_gadget_handle_interrupts to take controller index Kishon Vijay Abraham I
2015-02-16 11:56 ` Lukasz Majewski
2015-02-07 13:32 ` [U-Boot] [u-boot 00/40] dra7xx: am43xx: add dwc3 gadget driver support and enable dfu Marek Vasut
2015-02-11 11:33 ` Kishon Vijay Abraham I
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=20150216111113.35c07110@amdc2363 \
--to=l.majewski@samsung.com \
--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.