aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/dwc3/dwc3-meson-g12a.c18
-rw-r--r--drivers/usb/dwc3/dwc3-meson-gxl.c18
-rw-r--r--drivers/usb/gadget/Makefile1
-rw-r--r--drivers/usb/gadget/fotg210.c964
-rw-r--r--drivers/usb/gadget/gadget_chips.h8
-rw-r--r--drivers/usb/host/Makefile5
-rw-r--r--drivers/usb/host/ehci-armada100.c48
-rw-r--r--drivers/usb/host/ehci-faraday.c144
-rw-r--r--drivers/usb/host/ehci-hcd.c5
-rw-r--r--drivers/usb/host/ehci-mx6.c4
-rw-r--r--drivers/usb/host/ehci-rmobile.c129
-rw-r--r--drivers/usb/host/ehci-tegra.c46
-rw-r--r--drivers/usb/host/ehci-vct.c44
-rw-r--r--drivers/usb/host/sl811-hcd.c714
-rw-r--r--drivers/usb/host/sl811.h104
-rw-r--r--drivers/usb/host/utmi-armada100.c80
-rw-r--r--drivers/usb/musb-new/omap2430.c2
17 files changed, 76 insertions, 2258 deletions
diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c
index 90418ddc1d..c62e42de73 100644
--- a/drivers/usb/dwc3/dwc3-meson-g12a.c
+++ b/drivers/usb/dwc3/dwc3-meson-g12a.c
@@ -455,6 +455,22 @@ static int dwc3_meson_g12a_remove(struct udevice *dev)
return dm_scan_fdt_dev(dev);
}
+static int dwc3_meson_g12a_child_pre_probe(struct udevice *dev)
+{
+ if (ofnode_device_is_compatible(dev_ofnode(dev), "amlogic,meson-g12a-usb"))
+ return dwc3_meson_g12a_force_mode(dev->parent, USB_DR_MODE_PERIPHERAL);
+
+ return 0;
+}
+
+static int dwc3_meson_g12a_child_post_remove(struct udevice *dev)
+{
+ if (ofnode_device_is_compatible(dev_ofnode(dev), "amlogic,meson-g12a-usb"))
+ return dwc3_meson_g12a_force_mode(dev->parent, USB_DR_MODE_HOST);
+
+ return 0;
+}
+
static const struct udevice_id dwc3_meson_g12a_ids[] = {
{ .compatible = "amlogic,meson-g12a-usb-ctrl" },
{ }
@@ -466,6 +482,8 @@ U_BOOT_DRIVER(dwc3_generic_wrapper) = {
.of_match = dwc3_meson_g12a_ids,
.probe = dwc3_meson_g12a_probe,
.remove = dwc3_meson_g12a_remove,
+ .child_pre_probe = dwc3_meson_g12a_child_pre_probe,
+ .child_post_remove = dwc3_meson_g12a_child_post_remove,
.plat_auto = sizeof(struct dwc3_meson_g12a),
};
diff --git a/drivers/usb/dwc3/dwc3-meson-gxl.c b/drivers/usb/dwc3/dwc3-meson-gxl.c
index 6c6d463203..d56f2747b6 100644
--- a/drivers/usb/dwc3/dwc3-meson-gxl.c
+++ b/drivers/usb/dwc3/dwc3-meson-gxl.c
@@ -408,6 +408,22 @@ static int dwc3_meson_gxl_remove(struct udevice *dev)
return dm_scan_fdt_dev(dev);
}
+static int dwc3_meson_gxl_child_pre_probe(struct udevice *dev)
+{
+ if (ofnode_device_is_compatible(dev_ofnode(dev), "amlogic,meson-g12a-usb"))
+ return dwc3_meson_gxl_force_mode(dev->parent, USB_DR_MODE_PERIPHERAL);
+
+ return 0;
+}
+
+static int dwc3_meson_gxl_child_post_remove(struct udevice *dev)
+{
+ if (ofnode_device_is_compatible(dev_ofnode(dev), "amlogic,meson-g12a-usb"))
+ return dwc3_meson_gxl_force_mode(dev->parent, USB_DR_MODE_HOST);
+
+ return 0;
+}
+
static const struct udevice_id dwc3_meson_gxl_ids[] = {
{ .compatible = "amlogic,meson-axg-usb-ctrl" },
{ .compatible = "amlogic,meson-gxl-usb-ctrl" },
@@ -421,6 +437,8 @@ U_BOOT_DRIVER(dwc3_generic_wrapper) = {
.of_match = dwc3_meson_gxl_ids,
.probe = dwc3_meson_gxl_probe,
.remove = dwc3_meson_gxl_remove,
+ .child_pre_probe = dwc3_meson_gxl_child_pre_probe,
+ .child_post_remove = dwc3_meson_gxl_child_post_remove,
.plat_auto = sizeof(struct dwc3_meson_gxl),
};
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index 9c04403da3..6cfe0f3a04 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -19,7 +19,6 @@ obj-$(CONFIG_USB_GADGET_ATMEL_USBA) += atmel_usba_udc.o
obj-$(CONFIG_USB_GADGET_BCM_UDC_OTG_PHY) += bcm_udc_otg_phy.o
obj-$(CONFIG_USB_GADGET_DWC2_OTG) += dwc2_udc_otg.o
obj-$(CONFIG_USB_GADGET_DWC2_OTG_PHY) += dwc2_udc_otg_phy.o
-obj-$(CONFIG_USB_GADGET_FOTG210) += fotg210.o
obj-$(CONFIG_USB_GADGET_MAX3420) += max3420_udc.o
ifndef CONFIG_SPL_BUILD
obj-$(CONFIG_USB_GADGET_DOWNLOAD) += g_dnl.o
diff --git a/drivers/usb/gadget/fotg210.c b/drivers/usb/gadget/fotg210.c
deleted file mode 100644
index af43433d88..0000000000
--- a/drivers/usb/gadget/fotg210.c
+++ /dev/null
@@ -1,964 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Faraday USB 2.0 OTG Controller
- *
- * (C) Copyright 2010 Faraday Technology
- * Dante Su <dantesu@faraday-tech.com>
- */
-
-#include <common.h>
-#include <command.h>
-#include <config.h>
-#include <cpu_func.h>
-#include <log.h>
-#include <net.h>
-#include <malloc.h>
-#include <asm/io.h>
-#include <linux/delay.h>
-#include <linux/errno.h>
-#include <linux/types.h>
-#include <linux/usb/ch9.h>
-#include <linux/usb/gadget.h>
-
-#include <usb/fotg210.h>
-
-#define CFG_NUM_ENDPOINTS 4
-#define CFG_EP0_MAX_PACKET_SIZE 64
-#define CFG_EPX_MAX_PACKET_SIZE 512
-
-#define CFG_CMD_TIMEOUT (CONFIG_SYS_HZ >> 2) /* 250 ms */
-
-struct fotg210_chip;
-
-struct fotg210_ep {
- struct usb_ep ep;
-
- uint maxpacket;
- uint id;
- uint stopped;
-
- struct list_head queue;
- struct fotg210_chip *chip;
- const struct usb_endpoint_descriptor *desc;
-};
-
-struct fotg210_request {
- struct usb_request req;
- struct list_head queue;
- struct fotg210_ep *ep;
-};
-
-struct fotg210_chip {
- struct usb_gadget gadget;
- struct usb_gadget_driver *driver;
- struct fotg210_regs *regs;
- uint8_t irq;
- uint16_t addr;
- int pullup;
- enum usb_device_state state;
- struct fotg210_ep ep[1 + CFG_NUM_ENDPOINTS];
-};
-
-static struct usb_endpoint_descriptor ep0_desc = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DT_ENDPOINT,
- .bEndpointAddress = USB_DIR_IN,
- .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
-};
-
-static inline int fifo_to_ep(struct fotg210_chip *chip, int id, int in)
-{
- return (id < 0) ? 0 : ((id & 0x03) + 1);
-}
-
-static inline int ep_to_fifo(struct fotg210_chip *chip, int id)
-{
- return (id <= 0) ? -1 : ((id - 1) & 0x03);
-}
-
-static inline int ep_reset(struct fotg210_chip *chip, uint8_t ep_addr)
-{
- int ep = ep_addr & USB_ENDPOINT_NUMBER_MASK;
- struct fotg210_regs *regs = chip->regs;
-
- if (ep_addr & USB_DIR_IN) {
- /* reset endpoint */
- setbits_le32(&regs->iep[ep - 1], IEP_RESET);
- mdelay(1);
- clrbits_le32(&regs->iep[ep - 1], IEP_RESET);
- /* clear endpoint stall */
- clrbits_le32(&regs->iep[ep - 1], IEP_STALL);
- } else {
- /* reset endpoint */
- setbits_le32(&regs->oep[ep - 1], OEP_RESET);
- mdelay(1);
- clrbits_le32(&regs->oep[ep - 1], OEP_RESET);
- /* clear endpoint stall */
- clrbits_le32(&regs->oep[ep - 1], OEP_STALL);
- }
-
- return 0;
-}
-
-static int fotg210_reset(struct fotg210_chip *chip)
-{
- struct fotg210_regs *regs = chip->regs;
- uint32_t i;
-
- chip->state = USB_STATE_POWERED;
-
- /* chip enable */
- writel(DEVCTRL_EN, &regs->dev_ctrl);
-
- /* device address reset */
- chip->addr = 0;
- writel(0, &regs->dev_addr);
-
- /* set idle counter to 7ms */
- writel(7, &regs->idle);
-
- /* disable all interrupts */
- writel(IMR_MASK, &regs->imr);
- writel(GIMR_MASK, &regs->gimr);
- writel(GIMR0_MASK, &regs->gimr0);
- writel(GIMR1_MASK, &regs->gimr1);
- writel(GIMR2_MASK, &regs->gimr2);
-
- /* clear interrupts */
- writel(ISR_MASK, &regs->isr);
- writel(0, &regs->gisr);
- writel(0, &regs->gisr0);
- writel(0, &regs->gisr1);
- writel(0, &regs->gisr2);
-
- /* chip reset */
- setbits_le32(&regs->dev_ctrl, DEVCTRL_RESET);
- mdelay(10);
- if (readl(&regs->dev_ctrl) & DEVCTRL_RESET) {
- printf("fotg210: chip reset failed\n");
- return -1;
- }
-
- /* CX FIFO reset */
- setbits_le32(&regs->cxfifo, CXFIFO_CXFIFOCLR);
- mdelay(10);
- if (readl(&regs->cxfifo) & CXFIFO_CXFIFOCLR) {
- printf("fotg210: ep0 fifo reset failed\n");
- return -1;
- }
-
- /* create static ep-fifo map (EP1 <-> FIFO0, EP2 <-> FIFO1 ...) */
- writel(EPMAP14_DEFAULT, &regs->epmap14);
- writel(EPMAP58_DEFAULT, &regs->epmap58);
- writel(FIFOMAP_DEFAULT, &regs->fifomap);
- writel(0, &regs->fifocfg);
- for (i = 0; i < 8; ++i) {
- writel(CFG_EPX_MAX_PACKET_SIZE, &regs->iep[i]);
- writel(CFG_EPX_MAX_PACKET_SIZE, &regs->oep[i]);
- }
-
- /* FIFO reset */
- for (i = 0; i < 4; ++i) {
- writel(FIFOCSR_RESET, &regs->fifocsr[i]);
- mdelay(10);
- if (readl(&regs->fifocsr[i]) & FIFOCSR_RESET) {
- printf("fotg210: fifo%d reset failed\n", i);
- return -1;
- }
- }
-
- /* enable only device interrupt and triggered at level-high */
- writel(IMR_IRQLH | IMR_HOST | IMR_OTG, &regs->imr);
- writel(ISR_MASK, &regs->isr);
- /* disable EP0 IN/OUT interrupt */
- writel(GIMR0_CXOUT | GIMR0_CXIN, &regs->gimr0);
- /* disable EPX IN+SPK+OUT interrupts */
- writel(GIMR1_MASK, &regs->gimr1);
- /* disable wakeup+idle+dma+zlp interrupts */
- writel(GIMR2_WAKEUP | GIMR2_IDLE | GIMR2_DMAERR | GIMR2_DMAFIN
- | GIMR2_ZLPRX | GIMR2_ZLPTX, &regs->gimr2);
- /* enable all group interrupt */
- writel(0, &regs->gimr);
-
- /* suspend delay = 3 ms */
- writel(3, &regs->idle);
-
- /* turn-on device interrupts */
- setbits_le32(&regs->dev_ctrl, DEVCTRL_GIRQ_EN);
-
- return 0;
-}
-
-static inline int fotg210_cxwait(struct fotg210_chip *chip, uint32_t mask)
-{
- struct fotg210_regs *regs = chip->regs;
- int ret = -1;
- ulong ts;
-
- for (ts = get_timer(0); get_timer(ts) < CFG_CMD_TIMEOUT; ) {
- if ((readl(&regs->cxfifo) & mask) != mask)
- continue;
- ret = 0;
- break;
- }
-
- if (ret)
- printf("fotg210: cx/ep0 timeout\n");
-
- return ret;
-}
-
-static int fotg210_dma(struct fotg210_ep *ep, struct fotg210_request *req)
-{
- struct fotg210_chip *chip = ep->chip;
- struct fotg210_regs *regs = chip->regs;
- uint32_t tmp, ts;
- uint8_t *buf = req->req.buf + req->req.actual;
- uint32_t len = req->req.length - req->req.actual;
- int fifo = ep_to_fifo(chip, ep->id);
- int ret = -EBUSY;
-
- /* 1. init dma buffer */
- if (len > ep->maxpacket)
- len = ep->maxpacket;
-
- /* 2. wait for dma ready (hardware) */
- for (ts = get_timer(0); get_timer(ts) < CFG_CMD_TIMEOUT; ) {
- if (!(readl(&regs->dma_ctrl) & DMACTRL_START)) {
- ret = 0;
- break;
- }
- }
- if (ret) {
- printf("fotg210: dma busy\n");
- req->req.status = ret;
- return ret;
- }
-
- /* 3. DMA target setup */
- if (ep->desc->bEndpointAddress & USB_DIR_IN)
- flush_dcache_range((ulong)buf, (ulong)buf + len);
- else
- invalidate_dcache_range((ulong)buf, (ulong)buf + len);
-
- writel(virt_to_phys(buf), &regs->dma_addr);
-
- if (ep->desc->bEndpointAddress & USB_DIR_IN) {
- if (ep->id == 0) {
- /* Wait until cx/ep0 fifo empty */
- fotg210_cxwait(chip, CXFIFO_CXFIFOE);
- udelay(1);
- writel(DMAFIFO_CX, &regs->dma_fifo);
- } else {
- /* Wait until epx fifo empty */
- fotg210_cxwait(chip, CXFIFO_FIFOE(fifo));
- writel(DMAFIFO_FIFO(fifo), &regs->dma_fifo);
- }
- writel(DMACTRL_LEN(len) | DMACTRL_MEM2FIFO, &regs->dma_ctrl);
- } else {
- uint32_t blen;
-
- if (ep->id == 0) {
- writel(DMAFIFO_CX, &regs->dma_fifo);
- do {
- blen = CXFIFO_BYTES(readl(&regs->cxfifo));
- } while (blen < len);
- } else {
- writel(DMAFIFO_FIFO(fifo), &regs->dma_fifo);
- blen = FIFOCSR_BYTES(readl(&regs->fifocsr[fifo]));
- }
- len = (len < blen) ? len : blen;
- writel(DMACTRL_LEN(len) | DMACTRL_FIFO2MEM, &regs->dma_ctrl);
- }
-
- /* 4. DMA start */
- setbits_le32(&regs->dma_ctrl, DMACTRL_START);
-
- /* 5. DMA wait */
- ret = -EBUSY;
- for (ts = get_timer(0); get_timer(ts) < CFG_CMD_TIMEOUT; ) {
- tmp = readl(&regs->gisr2);
- /* DMA complete */
- if (tmp & GISR2_DMAFIN) {
- ret = 0;
- break;
- }
- /* DMA error */
- if (tmp & GISR2_DMAERR) {
- printf("fotg210: dma error\n");
- break;
- }
- /* resume, suspend, reset */
- if (tmp & (GISR2_RESUME | GISR2_SUSPEND | GISR2_RESET)) {
- printf("fotg210: dma reset by host\n");
- break;
- }
- }
-
- /* 7. DMA target reset */
- if (ret)
- writel(DMACTRL_ABORT | DMACTRL_CLRFF, &regs->dma_ctrl);
-
- writel(0, &regs->gisr2);
- writel(0, &regs->dma_fifo);
-
- req->req.status = ret;
- if (!ret)
- req->req.actual += len;
- else
- printf("fotg210: ep%d dma error(code=%d)\n", ep->id, ret);
-
- return len;
-}
-
-/*
- * result of setup packet
- */
-#define CX_IDLE 0
-#define CX_FINISH 1
-#define CX_STALL 2
-
-static void fotg210_setup(struct fotg210_chip *chip)
-{
- int id, ret = CX_IDLE;
- uint32_t tmp[2];
- struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)tmp;
- struct fotg210_regs *regs = chip->regs;
-
- /*
- * If this is the first Cx 8 byte command,
- * we can now query USB mode (high/full speed; USB 2.0/USB 1.0)
- */
- if (chip->state == USB_STATE_POWERED) {
- chip->state = USB_STATE_DEFAULT;
- if (readl(&regs->otgcsr) & OTGCSR_DEV_B) {
- /* Mini-B */
- if (readl(&regs->dev_ctrl) & DEVCTRL_HS) {
- puts("fotg210: HS\n");
- chip->gadget.speed = USB_SPEED_HIGH;
- /* SOF mask timer = 1100 ticks */
- writel(SOFMTR_TMR(1100), &regs->sof_mtr);
- } else {
- puts("fotg210: FS\n");
- chip->gadget.speed = USB_SPEED_FULL;
- /* SOF mask timer = 10000 ticks */
- writel(SOFMTR_TMR(10000), &regs->sof_mtr);
- }
- } else {
- printf("fotg210: mini-A?\n");
- }
- }
-
- /* switch data port to ep0 */
- writel(DMAFIFO_CX, &regs->dma_fifo);
- /* fetch 8 bytes setup packet */
- tmp[0] = readl(&regs->ep0_data);
- tmp[1] = readl(&regs->ep0_data);
- /* release data port */
- writel(0, &regs->dma_fifo);
-
- if (req->bRequestType & USB_DIR_IN)
- ep0_desc.bEndpointAddress = USB_DIR_IN;
- else
- ep0_desc.bEndpointAddress = USB_DIR_OUT;
-
- ret = CX_IDLE;
-
- if ((req->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
- switch (req->bRequest) {
- case USB_REQ_SET_CONFIGURATION:
- debug("fotg210: set_cfg(%d)\n", req->wValue & 0x00FF);
- if (!(req->wValue & 0x00FF)) {
- chip->state = USB_STATE_ADDRESS;
- writel(chip->addr, &regs->dev_addr);
- } else {
- chip->state = USB_STATE_CONFIGURED;
- writel(chip->addr | DEVADDR_CONF,
- &regs->dev_addr);
- }
- ret = CX_IDLE;
- break;
-
- case USB_REQ_SET_ADDRESS:
- debug("fotg210: set_addr(0x%04X)\n", req->wValue);
- chip->state = USB_STATE_ADDRESS;
- chip->addr = req->wValue & DEVADDR_ADDR_MASK;
- ret = CX_FINISH;
- writel(chip->addr, &regs->dev_addr);
- break;
-
- case USB_REQ_CLEAR_FEATURE:
- debug("fotg210: clr_feature(%d, %d)\n",
- req->bRequestType & 0x03, req->wValue);
- switch (req->wValue) {
- case 0: /* [Endpoint] halt */
- ep_reset(chip, req->wIndex);
- ret = CX_FINISH;
- break;
- case 1: /* [Device] remote wake-up */
- case 2: /* [Device] test mode */
- default:
- ret = CX_STALL;
- break;
- }
- break;
-
- case USB_REQ_SET_FEATURE:
- debug("fotg210: set_feature(%d, %d)\n",
- req->wValue, req->wIndex & 0xf);
- switch (req->wValue) {
- case 0: /* Endpoint Halt */
- id = req->wIndex & 0xf;
- setbits_le32(&regs->iep[id - 1], IEP_STALL);
- setbits_le32(&regs->oep[id - 1], OEP_STALL);
- ret = CX_FINISH;
- break;
- case 1: /* Remote Wakeup */
- case 2: /* Test Mode */
- default:
- ret = CX_STALL;
- break;
- }
- break;
-
- case USB_REQ_GET_STATUS:
- debug("fotg210: get_status\n");
- ret = CX_STALL;
- break;
-
- case USB_REQ_SET_DESCRIPTOR:
- debug("fotg210: set_descriptor\n");
- ret = CX_STALL;
- break;
-
- case USB_REQ_SYNCH_FRAME:
- debug("fotg210: sync frame\n");
- ret = CX_STALL;
- break;
- }
- } /* if ((req->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) */
-
- if (ret == CX_IDLE && chip->driver->setup) {
- if (chip->driver->setup(&chip->gadget, req) < 0)
- ret = CX_STALL;
- else
- ret = CX_FINISH;
- }
-
- switch (ret) {
- case CX_FINISH:
- setbits_le32(&regs->cxfifo, CXFIFO_CXFIN);
- break;
-
- case CX_STALL:
- setbits_le32(&regs->cxfifo, CXFIFO_CXSTALL | CXFIFO_CXFIN);
- printf("fotg210: cx_stall!\n");
- break;
-
- case CX_IDLE:
- debug("fotg210: cx_idle?\n");
- default:
- break;
- }
-}
-
-/*
- * fifo - FIFO id
- * zlp - zero length packet
- */
-static void fotg210_recv(struct fotg210_chip *chip, int ep_id)
-{
- struct fotg210_regs *regs = chip->regs;
- struct fotg210_ep *ep = chip->ep + ep_id;
- struct fotg210_request *req;
- int len;
-
- if (ep->stopped || (ep->desc->bEndpointAddress & USB_DIR_IN)) {
- printf("fotg210: ep%d recv, invalid!\n", ep->id);
- return;
- }
-
- if (list_empty(&ep->queue)) {
- printf("fotg210: ep%d recv, drop!\n", ep->id);
- return;
- }
-
- req = list_first_entry(&ep->queue, struct fotg210_request, queue);
- len = fotg210_dma(ep, req);
- if (len < ep->ep.maxpacket || req->req.length <= req->req.actual) {
- list_del_init(&req->queue);
- if (req->req.complete)
- req->req.complete(&ep->ep, &req->req);
- }
-
- if (ep->id > 0 && list_empty(&ep->queue)) {
- setbits_le32(&regs->gimr1,
- GIMR1_FIFO_RX(ep_to_fifo(chip, ep->id)));
- }
-}
-
-/*
- * USB Gadget Layer
- */
-static int fotg210_ep_enable(
- struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
-{
- struct fotg210_ep *ep = container_of(_ep, struct fotg210_ep, ep);
- struct fotg210_chip *chip = ep->chip;
- struct fotg210_regs *regs = chip->regs;
- int id = ep_to_fifo(chip, ep->id);
- int in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0;
-
- if (!_ep || !desc
- || desc->bDescriptorType != USB_DT_ENDPOINT
- || le16_to_cpu(desc->wMaxPacketSize) == 0) {
- printf("fotg210: bad ep or descriptor\n");
- return -EINVAL;
- }
-
- ep->desc = desc;
- ep->stopped = 0;
-
- if (in)
- setbits_le32(&regs->fifomap, FIFOMAP(id, FIFOMAP_IN));
-
- switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
- case USB_ENDPOINT_XFER_CONTROL:
- return -EINVAL;
-
- case USB_ENDPOINT_XFER_ISOC:
- setbits_le32(&regs->fifocfg,
- FIFOCFG(id, FIFOCFG_EN | FIFOCFG_ISOC));
- break;
-
- case USB_ENDPOINT_XFER_BULK:
- setbits_le32(&regs->fifocfg,
- FIFOCFG(id, FIFOCFG_EN | FIFOCFG_BULK));
- break;
-
- case USB_ENDPOINT_XFER_INT:
- setbits_le32(&regs->fifocfg,
- FIFOCFG(id, FIFOCFG_EN | FIFOCFG_INTR));
- break;
- }
-
- return 0;
-}
-
-static int fotg210_ep_disable(struct usb_ep *_ep)
-{
- struct fotg210_ep *ep = container_of(_ep, struct fotg210_ep, ep);
- struct fotg210_chip *chip = ep->chip;
- struct fotg210_regs *regs = chip->regs;
- int id = ep_to_fifo(chip, ep->id);
-
- ep->desc = NULL;
- ep->stopped = 1;
-
- clrbits_le32(&regs->fifocfg, FIFOCFG(id, FIFOCFG_CFG_MASK));
- clrbits_le32(&regs->fifomap, FIFOMAP(id, FIFOMAP_DIR_MASK));
-
- return 0;
-}
-
-static struct usb_request *fotg210_ep_alloc_request(
- struct usb_ep *_ep, gfp_t gfp_flags)
-{
- struct fotg210_request *req = malloc(sizeof(*req));
-
- if (req) {
- memset(req, 0, sizeof(*req));
- INIT_LIST_HEAD(&req->queue);
- }
- return &req->req;
-}
-
-static void fotg210_ep_free_request(
- struct usb_ep *_ep, struct usb_request *_req)
-{
- struct fotg210_request *req;
-
- req = container_of(_req, struct fotg210_request, req);
- free(req);
-}
-
-static int fotg210_ep_queue(
- struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
-{
- struct fotg210_ep *ep = container_of(_ep, struct fotg210_ep, ep);
- struct fotg210_chip *chip = ep->chip;
- struct fotg210_regs *regs = chip->regs;
- struct fotg210_request *req;
-
- req = container_of(_req, struct fotg210_request, req);
- if (!_req || !_req->complete || !_req->buf
- || !list_empty(&req->queue)) {
- printf("fotg210: invalid request to ep%d\n", ep->id);
- return -EINVAL;
- }
-
- if (!chip || chip->state == USB_STATE_SUSPENDED) {
- printf("fotg210: request while chip suspended\n");
- return -EINVAL;
- }
-
- req->req.actual = 0;
- req->req.status = -EINPROGRESS;
-
- if (req->req.length == 0) {
- req->req.status = 0;
- if (req->req.complete)
- req->req.complete(&ep->ep, &req->req);
- return 0;
- }
-
- if (ep->id == 0) {
- do {
- int len = fotg210_dma(ep, req);
- if (len < ep->ep.maxpacket)
- break;
- if (ep->desc->bEndpointAddress & USB_DIR_IN)
- udelay(100);
- } while (req->req.length > req->req.actual);
- } else {
- if (ep->desc->bEndpointAddress & USB_DIR_IN) {
- do {
- int len = fotg210_dma(ep, req);
- if (len < ep->ep.maxpacket)
- break;
- } while (req->req.length > req->req.actual);
- } else {
- list_add_tail(&req->queue, &ep->queue);
- clrbits_le32(&regs->gimr1,
- GIMR1_FIFO_RX(ep_to_fifo(chip, ep->id)));
- }
- }
-
- if (ep->id == 0 || (ep->desc->bEndpointAddress & USB_DIR_IN)) {
- if (req->req.complete)
- req->req.complete(&ep->ep, &req->req);
- }
-
- return 0;
-}
-
-static int fotg210_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
-{
- struct fotg210_ep *ep = container_of(_ep, struct fotg210_ep, ep);
- struct fotg210_request *req;
-
- /* make sure it's actually queued on this endpoint */
- list_for_each_entry(req, &ep->queue, queue) {
- if (&req->req == _req)
- break;
- }
- if (&req->req != _req)
- return -EINVAL;
-
- /* remove the request */
- list_del_init(&req->queue);
-
- /* update status & invoke complete callback */
- if (req->req.status == -EINPROGRESS) {
- req->req.status = -ECONNRESET;
- if (req->req.complete)
- req->req.complete(_ep, &req->req);
- }
-
- return 0;
-}
-
-static int fotg210_ep_halt(struct usb_ep *_ep, int halt)
-{
- struct fotg210_ep *ep = container_of(_ep, struct fotg210_ep, ep);
- struct fotg210_chip *chip = ep->chip;
- struct fotg210_regs *regs = chip->regs;
- int ret = -1;
-
- debug("fotg210: ep%d halt=%d\n", ep->id, halt);
-
- /* Endpoint STALL */
- if (ep->id > 0 && ep->id <= CFG_NUM_ENDPOINTS) {
- if (halt) {
- /* wait until all ep fifo empty */
- fotg210_cxwait(chip, 0xf00);
- /* stall */
- if (ep->desc->bEndpointAddress & USB_DIR_IN) {
- setbits_le32(&regs->iep[ep->id - 1],
- IEP_STALL);
- } else {
- setbits_le32(&regs->oep[ep->id - 1],
- OEP_STALL);
- }
- } else {
- if (ep->desc->bEndpointAddress & USB_DIR_IN) {
- clrbits_le32(&regs->iep[ep->id - 1],
- IEP_STALL);
- } else {
- clrbits_le32(&regs->oep[ep->id - 1],
- OEP_STALL);
- }
- }
- ret = 0;
- }
-
- return ret;
-}
-
-/*
- * activate/deactivate link with host.
- */
-static void pullup(struct fotg210_chip *chip, int is_on)
-{
- struct fotg210_regs *regs = chip->regs;
-
- if (is_on) {
- if (!chip->pullup) {
- chip->state = USB_STATE_POWERED;
- chip->pullup = 1;
- /* enable the chip */
- setbits_le32(&regs->dev_ctrl, DEVCTRL_EN);
- /* clear unplug bit (BIT0) */
- clrbits_le32(&regs->phy_tmsr, PHYTMSR_UNPLUG);
- }
- } else {
- chip->state = USB_STATE_NOTATTACHED;
- chip->pullup = 0;
- chip->addr = 0;
- writel(chip->addr, &regs->dev_addr);
- /* set unplug bit (BIT0) */
- setbits_le32(&regs->phy_tmsr, PHYTMSR_UNPLUG);
- /* disable the chip */
- clrbits_le32(&regs->dev_ctrl, DEVCTRL_EN);
- }
-}
-
-static int fotg210_pullup(struct usb_gadget *_gadget, int is_on)
-{
- struct fotg210_chip *chip;
-
- chip = container_of(_gadget, struct fotg210_chip, gadget);
-
- debug("fotg210: pullup=%d\n", is_on);
-
- pullup(chip, is_on);
-
- return 0;
-}
-
-static int fotg210_get_frame(struct usb_gadget *_gadget)
-{
- struct fotg210_chip *chip;
- struct fotg210_regs *regs;
-
- chip = container_of(_gadget, struct fotg210_chip, gadget);
- regs = chip->regs;
-
- return SOFFNR_FNR(readl(&regs->sof_fnr));
-}
-
-static struct usb_gadget_ops fotg210_gadget_ops = {
- .get_frame = fotg210_get_frame,
- .pullup = fotg210_pullup,
-};
-
-static struct usb_ep_ops fotg210_ep_ops = {
- .enable = fotg210_ep_enable,
- .disable = fotg210_ep_disable,
- .queue = fotg210_ep_queue,
- .dequeue = fotg210_ep_dequeue,
- .set_halt = fotg210_ep_halt,
- .alloc_request = fotg210_ep_alloc_request,
- .free_request = fotg210_ep_free_request,
-};
-
-static struct fotg210_chip controller = {
- .regs = (void __iomem *)CONFIG_FOTG210_BASE,
- .gadget = {
- .name = "fotg210_udc",
- .ops = &fotg210_gadget_ops,
- .ep0 = &controller.ep[0].ep,
- .speed = USB_SPEED_UNKNOWN,
- .is_dualspeed = 1,
- .is_otg = 0,
- .is_a_peripheral = 0,
- .b_hnp_enable = 0,
- .a_hnp_support = 0,
- .a_alt_hnp_support = 0,
- },
- .ep[0] = {
- .id = 0,
- .ep = {
- .name = "ep0",
- .ops = &fotg210_ep_ops,
- },
- .desc = &ep0_desc,
- .chip = &controller,
- .maxpacket = CFG_EP0_MAX_PACKET_SIZE,
- },
- .ep[1] = {
- .id = 1,
- .ep = {
- .name = "ep1",
- .ops = &fotg210_ep_ops,
- },
- .chip = &controller,
- .maxpacket = CFG_EPX_MAX_PACKET_SIZE,
- },
- .ep[2] = {
- .id = 2,
- .ep = {
- .name = "ep2",
- .ops = &fotg210_ep_ops,
- },
- .chip = &controller,
- .maxpacket = CFG_EPX_MAX_PACKET_SIZE,
- },
- .ep[3] = {
- .id = 3,
- .ep = {
- .name = "ep3",
- .ops = &fotg210_ep_ops,
- },
- .chip = &controller,
- .maxpacket = CFG_EPX_MAX_PACKET_SIZE,
- },
- .ep[4] = {
- .id = 4,
- .ep = {
- .name = "ep4",
- .ops = &fotg210_ep_ops,
- },
- .chip = &controller,
- .maxpacket = CFG_EPX_MAX_PACKET_SIZE,
- },
-};
-
-int usb_gadget_handle_interrupts(int index)
-{
- struct fotg210_chip *chip = &controller;
- struct fotg210_regs *regs = chip->regs;
- uint32_t id, st, isr, gisr;
-
- isr = readl(&regs->isr) & (~readl(&regs->imr));
- gisr = readl(&regs->gisr) & (~readl(&regs->gimr));
- if (!(isr & ISR_DEV) || !gisr)
- return 0;
-
- writel(ISR_DEV, &regs->isr);
-
- /* CX interrupts */
- if (gisr & GISR_GRP0) {
- st = readl(&regs->gisr0);
- /*
- * Write 1 and then 0 works for both W1C & RW.
- *
- * HW v1.11.0+: It's a W1C register (write 1 clear)
- * HW v1.10.0-: It's a R/W register (write 0 clear)
- */
- writel(st & GISR0_CXABORT, &regs->gisr0);
- writel(0, &regs->gisr0);
-
- if (st & GISR0_CXERR)
- printf("fotg210: cmd error\n");
-
- if (st & GISR0_CXABORT)
- printf("fotg210: cmd abort\n");
-
- if (st & GISR0_CXSETUP) /* setup */
- fotg210_setup(chip);
- else if (st & GISR0_CXEND) /* command finish */
- setbits_le32(&regs->cxfifo, CXFIFO_CXFIN);
- }
-
- /* FIFO interrupts */
- if (gisr & GISR_GRP1) {
- st = readl(&regs->gisr1);
- for (id = 0; id < 4; ++id) {
- if (st & GISR1_RX_FIFO(id))
- fotg210_recv(chip, fifo_to_ep(chip, id, 0));
- }
- }
-
- /* Device Status Interrupts */
- if (gisr & GISR_GRP2) {
- st = readl(&regs->gisr2);
- /*
- * Write 1 and then 0 works for both W1C & RW.
- *
- * HW v1.11.0+: It's a W1C register (write 1 clear)
- * HW v1.10.0-: It's a R/W register (write 0 clear)
- */
- writel(st, &regs->gisr2);
- writel(0, &regs->gisr2);
-
- if (st & GISR2_RESET)
- printf("fotg210: reset by host\n");
- else if (st & GISR2_SUSPEND)
- printf("fotg210: suspend/removed\n");
- else if (st & GISR2_RESUME)
- printf("fotg210: resume\n");
-
- /* Errors */
- if (st & GISR2_ISOCERR)
- printf("fotg210: iso error\n");
- if (st & GISR2_ISOCABT)
- printf("fotg210: iso abort\n");
- if (st & GISR2_DMAERR)
- printf("fotg210: dma error\n");
- }
-
- return 0;
-}
-
-int usb_gadget_register_driver(struct usb_gadget_driver *driver)
-{
- int i, ret = 0;
- struct fotg210_chip *chip = &controller;
-
- if (!driver || !driver->bind || !driver->setup) {
- puts("fotg210: bad parameter.\n");
- return -EINVAL;
- }
-
- INIT_LIST_HEAD(&chip->gadget.ep_list);
- for (i = 0; i < CFG_NUM_ENDPOINTS + 1; ++i) {
- struct fotg210_ep *ep = chip->ep + i;
-
- ep->ep.maxpacket = ep->maxpacket;
- INIT_LIST_HEAD(&ep->queue);
-
- if (ep->id == 0) {
- ep->stopped = 0;
- } else {
- ep->stopped = 1;
- list_add_tail(&ep->ep.ep_list, &chip->gadget.ep_list);
- }
- }
-
- if (fotg210_reset(chip)) {
- puts("fotg210: reset failed.\n");
- return -EINVAL;
- }
-
- ret = driver->bind(&chip->gadget);
- if (ret) {
- debug("fotg210: driver->bind() returned %d\n", ret);
- return ret;
- }
- chip->driver = driver;
-
- return ret;
-}
-
-int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
-{
- struct fotg210_chip *chip = &controller;
-
- driver->unbind(&chip->gadget);
- chip->driver = NULL;
-
- pullup(chip, 0);
-
- return 0;
-}
diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
index abc6dc7f89..98156c312d 100644
--- a/drivers/usb/gadget/gadget_chips.h
+++ b/drivers/usb/gadget/gadget_chips.h
@@ -117,12 +117,6 @@
#define gadget_is_ci(g) 0
#endif
-#ifdef CONFIG_USB_GADGET_FOTG210
-#define gadget_is_fotg210(g) (!strcmp("fotg210_udc", (g)->name))
-#else
-#define gadget_is_fotg210(g) 0
-#endif
-
#ifdef CONFIG_USB_DWC3_GADGET
#define gadget_is_dwc3(g) (!strcmp("dwc3-gadget", (g)->name))
#else
@@ -202,8 +196,6 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
return 0x20;
else if (gadget_is_ci(gadget))
return 0x21;
- else if (gadget_is_fotg210(gadget))
- return 0x22;
else if (gadget_is_dwc3(gadget))
return 0x23;
else if (gadget_is_cdns3(gadget))
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index ddc3663206..8dad36f936 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -17,7 +17,6 @@ obj-$(CONFIG_USB_OHCI_NEW) += ohci-hcd.o
obj-$(CONFIG_USB_ATMEL) += ohci-at91.o
obj-$(CONFIG_USB_OHCI_DA8XX) += ohci-da8xx.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
-obj-$(CONFIG_USB_SL811HS) += sl811-hcd.o
obj-$(CONFIG_USB_OHCI_LPC32XX) += ohci-lpc32xx.o
obj-$(CONFIG_USB_OHCI_PCI) += ohci-pci.o
obj-$(CONFIG_USB_OHCI_GENERIC) += ohci-generic.o
@@ -25,10 +24,8 @@ obj-$(CONFIG_USB_OHCI_NPCM) += ohci-npcm.o
# echi
obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o
-obj-$(CONFIG_USB_EHCI_ARMADA100) += ehci-armada100.o utmi-armada100.o
obj-$(CONFIG_USB_EHCI_ATMEL) += ehci-atmel.o
obj-$(CONFIG_USB_EHCI_FSL) += ehci-fsl.o
-obj-$(CONFIG_USB_EHCI_FARADAY) += ehci-faraday.o
obj-$(CONFIG_USB_EHCI_GENERIC) += ehci-generic.o
obj-$(CONFIG_USB_EHCI_EXYNOS) += ehci-exynos.o
obj-$(CONFIG_USB_EHCI_MXS) += ehci-mxs.o
@@ -41,9 +38,7 @@ obj-$(CONFIG_USB_EHCI_MARVELL) += ehci-marvell.o
obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o
obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
obj-$(CONFIG_USB_EHCI_TEGRA) += ehci-tegra.o
-obj-$(CONFIG_USB_EHCI_VCT) += ehci-vct.o
obj-$(CONFIG_USB_EHCI_VF) += ehci-vf.o
-obj-$(CONFIG_USB_EHCI_RMOBILE) += ehci-rmobile.o
obj-$(CONFIG_USB_EHCI_ZYNQ) += ehci-zynq.o
# xhci
diff --git a/drivers/usb/host/ehci-armada100.c b/drivers/usb/host/ehci-armada100.c
deleted file mode 100644
index 2ce9f27b86..0000000000
--- a/drivers/usb/host/ehci-armada100.c
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2012
- * eInfochips Ltd. <www.einfochips.com>
- * Written-by: Ajay Bhargav <contact@8051projects.net>
- *
- * This driver is based on Kirkwood echi driver
- * (C) Copyright 2009
- * Marvell Semiconductor <www.marvell.com>
- * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
- */
-
-#include <common.h>
-#include <log.h>
-#include <asm/io.h>
-#include <usb.h>
-#include "ehci.h"
-#include <asm/arch/cpu.h>
-#include <asm/arch/armada100.h>
-#include <asm/arch/utmi-armada100.h>
-
-/*
- * EHCI host controller init
- */
-int ehci_hcd_init(int index, enum usb_init_type init,
- struct ehci_hccr **hccr, struct ehci_hcor **hcor)
-{
- if (utmi_init() < 0)
- return -1;
-
- *hccr = (struct ehci_hccr *)(ARMD1_USB_HOST_BASE + 0x100);
- *hcor = (struct ehci_hcor *)((uint32_t) *hccr
- + HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase)));
-
- debug("armada100-ehci: init hccr %x and hcor %x hc_length %d\n",
- (uint32_t)*hccr, (uint32_t)*hcor,
- (uint32_t)HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase)));
-
- return 0;
-}
-
-/*
- * EHCI host controller stop
- */
-int ehci_hcd_stop(int index)
-{
- return 0;
-}
diff --git a/drivers/usb/host/ehci-faraday.c b/drivers/usb/host/ehci-faraday.c
deleted file mode 100644
index 85a3526960..0000000000
--- a/drivers/usb/host/ehci-faraday.c
+++ /dev/null
@@ -1,144 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Faraday USB 2.0 EHCI Controller
- *
- * (C) Copyright 2010 Faraday Technology
- * Dante Su <dantesu@faraday-tech.com>
- */
-
-#include <common.h>
-#include <log.h>
-#include <asm/io.h>
-#include <usb.h>
-#include <linux/delay.h>
-#include <usb/fusbh200.h>
-#include <usb/fotg210.h>
-
-#include "ehci.h"
-
-#ifndef CFG_USB_EHCI_BASE_LIST
-#define CFG_USB_EHCI_BASE_LIST { CONFIG_USB_EHCI_BASE }
-#endif
-
-union ehci_faraday_regs {
- struct fusbh200_regs usb;
- struct fotg210_regs otg;
-};
-
-static inline int ehci_is_fotg2xx(union ehci_faraday_regs *regs)
-{
- return !readl(&regs->usb.easstr);
-}
-
-void faraday_ehci_set_usbmode(struct ehci_ctrl *ctrl)
-{
- /* nothing needs to be done */
-}
-
-int faraday_ehci_get_port_speed(struct ehci_ctrl *ctrl, uint32_t reg)
-{
- int spd, ret = PORTSC_PSPD_HS;
- union ehci_faraday_regs *regs;
-
- ret = (void __iomem *)((ulong)ctrl->hcor - 0x10);
- if (ehci_is_fotg2xx(regs))
- spd = OTGCSR_SPD(readl(&regs->otg.otgcsr));
- else
- spd = BMCSR_SPD(readl(&regs->usb.bmcsr));
-
- switch (spd) {
- case 0: /* full speed */
- ret = PORTSC_PSPD_FS;
- break;
- case 1: /* low speed */
- ret = PORTSC_PSPD_LS;
- break;
- case 2: /* high speed */
- ret = PORTSC_PSPD_HS;
- break;
- default:
- printf("ehci-faraday: invalid device speed\n");
- break;
- }
-
- return ret;
-}
-
-uint32_t *faraday_ehci_get_portsc_register(struct ehci_ctrl *ctrl, int port)
-{
- /* Faraday EHCI has one and only one portsc register */
- if (port) {
- /* Printing the message would cause a scan failure! */
- debug("The request port(%d) is not configured\n", port);
- return NULL;
- }
-
- /* Faraday EHCI PORTSC register offset is 0x20 from hcor */
- return (uint32_t *)((uint8_t *)ctrl->hcor + 0x20);
-}
-
-static const struct ehci_ops faraday_ehci_ops = {
- .set_usb_mode = faraday_ehci_set_usbmode,
- .get_port_speed = faraday_ehci_get_port_speed,
- .get_portsc_register = faraday_ehci_get_portsc_register,
-};
-
-/*
- * Create the appropriate control structures to manage
- * a new EHCI host controller.
- */
-int ehci_hcd_init(int index, enum usb_init_type init,
- struct ehci_hccr **ret_hccr, struct ehci_hcor **ret_hcor)
-{
- struct ehci_hccr *hccr;
- struct ehci_hcor *hcor;
- union ehci_faraday_regs *regs;
- uint32_t base_list[] = CFG_USB_EHCI_BASE_LIST;
-
- if (index < 0 || index >= ARRAY_SIZE(base_list))
- return -1;
- ehci_set_controller_priv(index, NULL, &faraday_ehci_ops);
- regs = (void __iomem *)base_list[index];
- hccr = (struct ehci_hccr *)&regs->usb.hccr;
- hcor = (struct ehci_hcor *)&regs->usb.hcor;
-
- if (ehci_is_fotg2xx(regs)) {
- /* A-device bus reset */
- /* ... Power off A-device */
- setbits_le32(&regs->otg.otgcsr, OTGCSR_A_BUSDROP);
- /* ... Drop vbus and bus traffic */
- clrbits_le32(&regs->otg.otgcsr, OTGCSR_A_BUSREQ);
- mdelay(1);
- /* ... Power on A-device */
- clrbits_le32(&regs->otg.otgcsr, OTGCSR_A_BUSDROP);
- /* ... Drive vbus and bus traffic */
- setbits_le32(&regs->otg.otgcsr, OTGCSR_A_BUSREQ);
- mdelay(1);
- /* Disable OTG & DEV interrupts, triggered at level-high */
- writel(IMR_IRQLH | IMR_OTG | IMR_DEV, &regs->otg.imr);
- /* Clear all interrupt status */
- writel(ISR_HOST | ISR_OTG | ISR_DEV, &regs->otg.isr);
- } else {
- /* Interrupt=level-high */
- setbits_le32(&regs->usb.bmcsr, BMCSR_IRQLH);
- /* VBUS on */
- clrbits_le32(&regs->usb.bmcsr, BMCSR_VBUS_OFF);
- /* Disable all interrupts */
- writel(0x00, &regs->usb.bmier);
- writel(0x1f, &regs->usb.bmisr);
- }
-
- *ret_hccr = hccr;
- *ret_hcor = hcor;
-
- return 0;
-}
-
-/*
- * Destroy the appropriate control structures corresponding
- * the the EHCI host controller.
- */
-int ehci_hcd_stop(int index)
-{
- return 0;
-}
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 9139d61dd0..9839aa1749 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -705,12 +705,10 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
dev->act_len = length - QT_TOKEN_GET_TOTALBYTES(qhtoken);
} else {
dev->act_len = 0;
-#ifndef CONFIG_USB_EHCI_FARADAY
debug("dev=%u, usbsts=%#x, p[1]=%#x, p[2]=%#x\n",
dev->devnum, ehci_readl(&ctrl->hcor->or_usbsts),
ehci_readl(&ctrl->hcor->or_portsc[0]),
ehci_readl(&ctrl->hcor->or_portsc[1]));
-#endif
}
free(qtd);
@@ -1190,9 +1188,6 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
if (rc)
return rc;
#endif
-#ifdef CONFIG_USB_EHCI_FARADAY
- tweaks |= EHCI_TWEAK_NO_INIT_CF;
-#endif
rc = ehci_common_init(ctrl, tweaks);
if (rc)
return rc;
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c
index 0a12db614f..91633f013a 100644
--- a/drivers/usb/host/ehci-mx6.c
+++ b/drivers/usb/host/ehci-mx6.c
@@ -360,7 +360,7 @@ int ehci_hcd_init(int index, enum usb_init_type init,
if (index > 3)
return -EINVAL;
- if (CONFIG_IS_ENABLED(IMX_MODULE_FUSE)) {
+ if (IS_ENABLED(CONFIG_IMX_MODULE_FUSE)) {
if (usb_fused((ulong)ehci)) {
printf("SoC fuse indicates USB@0x%lx is unavailable.\n",
(ulong)ehci);
@@ -641,7 +641,7 @@ static int ehci_usb_probe(struct udevice *dev)
struct ehci_hcor *hcor;
int ret;
- if (CONFIG_IS_ENABLED(IMX_MODULE_FUSE)) {
+ if (IS_ENABLED(CONFIG_IMX_MODULE_FUSE)) {
if (usb_fused((ulong)ehci)) {
printf("SoC fuse indicates USB@0x%lx is unavailable.\n",
(ulong)ehci);
diff --git a/drivers/usb/host/ehci-rmobile.c b/drivers/usb/host/ehci-rmobile.c
deleted file mode 100644
index 60525f2286..0000000000
--- a/drivers/usb/host/ehci-rmobile.c
+++ /dev/null
@@ -1,129 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * EHCI HCD (Host Controller Driver) for USB.
- *
- * Copyright (C) 2013,2014 Renesas Electronics Corporation
- * Copyright (C) 2014 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <asm/arch/ehci-rmobile.h>
-#include <linux/delay.h>
-#include "ehci.h"
-
-#if defined(CONFIG_R8A7740)
-static u32 usb_base_address[] = {
- 0xC6700000
-};
-#elif defined(CONFIG_R8A7790)
-static u32 usb_base_address[] = {
- 0xEE080000, /* USB0 (EHCI) */
- 0xEE0A0000, /* USB1 */
- 0xEE0C0000, /* USB2 */
-};
-#elif defined(CONFIG_R8A7791) || defined(CONFIG_R8A7793) || \
- defined(CONFIG_R8A7794)
-static u32 usb_base_address[] = {
- 0xEE080000, /* USB0 (EHCI) */
- 0xEE0C0000, /* USB1 */
-};
-#else
-#error rmobile EHCI USB driver not supported on this platform
-#endif
-
-int ehci_hcd_stop(int index)
-{
- int i;
- u32 base;
- struct ahbcom_pci_bridge *ahbcom_pci;
-
- base = usb_base_address[index];
- ahbcom_pci = (struct ahbcom_pci_bridge *)(base + AHBPCI_OFFSET);
- writel(0, &ahbcom_pci->ahb_bus_ctr);
-
- /* reset ehci */
- setbits_le32(base + EHCI_USBCMD, CMD_RESET);
- for (i = 100; i > 0; i--) {
- if (!(readl(base + EHCI_USBCMD) & CMD_RESET))
- break;
- udelay(100);
- }
-
- if (!i)
- printf("error : ehci(%d) reset failed.\n", index);
-
- if (index == (ARRAY_SIZE(usb_base_address) - 1))
- setbits_le32(SMSTPCR7, SMSTPCR703);
-
- return 0;
-}
-
-int ehci_hcd_init(int index, enum usb_init_type init,
- struct ehci_hccr **hccr, struct ehci_hcor **hcor)
-{
- u32 base;
- u32 phys_base;
- struct rmobile_ehci_reg *rehci;
- struct ahbcom_pci_bridge *ahbcom_pci;
- struct ahbconf_pci_bridge *ahbconf_pci;
- struct ahb_pciconf *ahb_pciconf_ohci;
- struct ahb_pciconf *ahb_pciconf_ehci;
- uint32_t cap_base;
-
- base = usb_base_address[index];
- phys_base = base;
- if (index == 0)
- clrbits_le32(SMSTPCR7, SMSTPCR703);
-
- rehci = (struct rmobile_ehci_reg *)(base + EHCI_OFFSET);
- ahbcom_pci = (struct ahbcom_pci_bridge *)(base + AHBPCI_OFFSET);
- ahbconf_pci =
- (struct ahbconf_pci_bridge *)(base + PCI_CONF_AHBPCI_OFFSET);
- ahb_pciconf_ohci = (struct ahb_pciconf *)(base + PCI_CONF_OHCI_OFFSET);
- ahb_pciconf_ehci = (struct ahb_pciconf *)(base + PCI_CONF_EHCI_OFFSET);
-
- /* Clock & Reset & Direct Power Down */
- clrsetbits_le32(&ahbcom_pci->usbctr,
- (DIRPD | PCICLK_MASK | USBH_RST), USBCTR_WIN_SIZE_1GB);
- clrbits_le32(&ahbcom_pci->usbctr, PLL_RST);
-
- /* AHB-PCI Bridge Communication Registers */
- writel(AHB_BUS_CTR_INIT, &ahbcom_pci->ahb_bus_ctr);
- writel((CFG_SYS_SDRAM_BASE & 0xf0000000) | PCIAHB_WIN_PREFETCH,
- &ahbcom_pci->pciahb_win1_ctr);
- writel(0xf0000000 | PCIAHB_WIN_PREFETCH,
- &ahbcom_pci->pciahb_win2_ctr);
- writel(phys_base | PCIWIN2_PCICMD, &ahbcom_pci->ahbpci_win2_ctr);
-
- setbits_le32(&ahbcom_pci->pci_arbiter_ctr,
- PCIBP_MODE | PCIREQ1 | PCIREQ0);
-
- /* PCI Configuration Registers for AHBPCI */
- writel(PCIWIN1_PCICMD | AHB_CFG_AHBPCI,
- &ahbcom_pci->ahbpci_win1_ctr);
- writel(phys_base + AHBPCI_OFFSET, &ahbconf_pci->basead);
- writel(CFG_SYS_SDRAM_BASE & 0xf0000000, &ahbconf_pci->win1_basead);
- writel(0xf0000000, &ahbconf_pci->win2_basead);
- writel(SERREN | PERREN | MASTEREN | MEMEN,
- &ahbconf_pci->cmnd_sts);
-
- /* PCI Configuration Registers for EHCI */
- writel(PCIWIN1_PCICMD | AHB_CFG_HOST, &ahbcom_pci->ahbpci_win1_ctr);
- writel(phys_base + OHCI_OFFSET, &ahb_pciconf_ohci->basead);
- writel(phys_base + EHCI_OFFSET, &ahb_pciconf_ehci->basead);
- writel(SERREN | PERREN | MASTEREN | MEMEN,
- &ahb_pciconf_ohci->cmnd_sts);
- writel(SERREN | PERREN | MASTEREN | MEMEN,
- &ahb_pciconf_ehci->cmnd_sts);
-
- /* Enable PCI interrupt */
- setbits_le32(&ahbcom_pci->pci_int_enable,
- USBH_PMEEN | USBH_INTBEN | USBH_INTAEN);
-
- *hccr = (struct ehci_hccr *)((uint32_t)&rehci->hciversion);
- cap_base = ehci_readl(&(*hccr)->cr_capbase);
- *hcor = (struct ehci_hcor *)((uint32_t)*hccr + HC_LENGTH(cap_base));
-
- return 0;
-}
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index 11d776747c..76562bd749 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -127,42 +127,70 @@ struct fdt_usb {
static const unsigned T20_usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
/* DivN, DivM, DivP, CPCON, LFCON, Delays Debounce, Bias */
{ 0x3C0, 0x0D, 0x00, 0xC, 0, 0x02, 0x33, 0x05, 0x7F, 0x7EF4, 5 },
+ { 0x3C0, 0x0D, 0x00, 0xC, 0, 0x02, 0x33, 0x05, 0x7F, 0x7EF4, 5 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x0C8, 0x04, 0x00, 0x3, 0, 0x03, 0x4B, 0x06, 0xBB, 0xBB80, 7 },
{ 0x0C8, 0x04, 0x00, 0x3, 0, 0x03, 0x4B, 0x06, 0xBB, 0xBB80, 7 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x3C0, 0x0C, 0x00, 0xC, 0, 0x02, 0x2F, 0x04, 0x76, 0x7530, 5 },
{ 0x3C0, 0x0C, 0x00, 0xC, 0, 0x02, 0x2F, 0x04, 0x76, 0x7530, 5 },
- { 0x3C0, 0x1A, 0x00, 0xC, 0, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 },
{ 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
- { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 }
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x3C0, 0x1A, 0x00, 0xC, 0, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 }
};
static const unsigned T30_usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
/* DivN, DivM, DivP, CPCON, LFCON, Delays Debounce, Bias */
{ 0x3C0, 0x0D, 0x00, 0xC, 1, 0x02, 0x33, 0x09, 0x7F, 0x7EF4, 5 },
+ { 0x3C0, 0x0D, 0x00, 0xC, 1, 0x02, 0x33, 0x09, 0x7F, 0x7EF4, 5 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
{ 0x0C8, 0x04, 0x00, 0x3, 0, 0x03, 0x4B, 0x0C, 0xBB, 0xBB80, 7 },
+ { 0x0C8, 0x04, 0x00, 0x3, 0, 0x03, 0x4B, 0x0C, 0xBB, 0xBB80, 7 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
{ 0x3C0, 0x0C, 0x00, 0xC, 1, 0x02, 0x2F, 0x08, 0x76, 0x7530, 5 },
- { 0x3C0, 0x1A, 0x00, 0xC, 1, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 },
+ { 0x3C0, 0x0C, 0x00, 0xC, 1, 0x02, 0x2F, 0x08, 0x76, 0x7530, 5 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
{ 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
- { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 }
+ { 0x3C0, 0x1A, 0x00, 0xC, 1, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 9 }
};
static const unsigned T114_usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
/* DivN, DivM, DivP, CPCON, LFCON, Delays Debounce, Bias */
{ 0x3C0, 0x0D, 0x00, 0xC, 2, 0x02, 0x33, 0x09, 0x7F, 0x7EF4, 6 },
+ { 0x3C0, 0x0D, 0x00, 0xC, 2, 0x02, 0x33, 0x09, 0x7F, 0x7EF4, 6 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x0C8, 0x04, 0x00, 0x3, 2, 0x03, 0x4B, 0x0C, 0xBB, 0xBB80, 8 },
{ 0x0C8, 0x04, 0x00, 0x3, 2, 0x03, 0x4B, 0x0C, 0xBB, 0xBB80, 8 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x3C0, 0x0C, 0x00, 0xC, 2, 0x02, 0x2F, 0x08, 0x76, 0x7530, 5 },
{ 0x3C0, 0x0C, 0x00, 0xC, 2, 0x02, 0x2F, 0x08, 0x76, 0x7530, 5 },
- { 0x3C0, 0x1A, 0x00, 0xC, 2, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 11 },
{ 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
- { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 }
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0x0000, 0 },
+ { 0x3C0, 0x1A, 0x00, 0xC, 2, 0x04, 0x66, 0x09, 0xFE, 0xFDE8, 11 }
};
/* NOTE: 13/26MHz settings are N/A for T210, so dupe 12MHz settings for now */
static const unsigned T210_usb_pll[CLOCK_OSC_FREQ_COUNT][PARAM_COUNT] = {
/* DivN, DivM, DivP, KCP, KVCO, Delays Debounce, Bias */
{ 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 32500, 5 },
+ { 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 32500, 5 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
{ 0x019, 0x01, 0x01, 0x0, 0, 0x03, 0x4B, 0x0C, 0xBB, 48000, 8 },
- { 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 30000, 5 },
- { 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 65000, 5 },
{ 0x019, 0x02, 0x01, 0x0, 0, 0x05, 0x96, 0x18, 0x177, 96000, 15 },
- { 0x028, 0x04, 0x01, 0x0, 0, 0x04, 0x66, 0x09, 0xFE, 120000, 20 }
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
+ { 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 30000, 5 },
+ { 0x028, 0x04, 0x01, 0x0, 0, 0x04, 0x66, 0x09, 0xFE, 120000, 20 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
+ { 0x000, 0x00, 0x00, 0x0, 0, 0x00, 0x00, 0x00, 0x00, 0, 0 },
+ { 0x028, 0x01, 0x01, 0x0, 0, 0x02, 0x2F, 0x08, 0x76, 65000, 5 }
};
/* UTMIP Idle Wait Delay */
diff --git a/drivers/usb/host/ehci-vct.c b/drivers/usb/host/ehci-vct.c
deleted file mode 100644
index 7167f82b48..0000000000
--- a/drivers/usb/host/ehci-vct.c
+++ /dev/null
@@ -1,44 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2009 Stefan Roese <sr@denx.de>, DENX Software Engineering
- */
-
-#include <common.h>
-#include <usb.h>
-
-#include "ehci.h"
-
-int vct_ehci_hcd_init(u32 *hccr, u32 *hcor);
-
-/*
- * Create the appropriate control structures to manage
- * a new EHCI host controller.
- */
-int ehci_hcd_init(int index, enum usb_init_type init,
- struct ehci_hccr **hccr, struct ehci_hcor **hcor)
-{
- int ret;
- u32 vct_hccr;
- u32 vct_hcor;
-
- /*
- * Init VCT specific stuff
- */
- ret = vct_ehci_hcd_init(&vct_hccr, &vct_hcor);
- if (ret)
- return ret;
-
- *hccr = (struct ehci_hccr *)vct_hccr;
- *hcor = (struct ehci_hcor *)vct_hcor;
-
- return 0;
-}
-
-/*
- * Destroy the appropriate control structures corresponding
- * the the EHCI host controller.
- */
-int ehci_hcd_stop(int index)
-{
- return 0;
-}
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
deleted file mode 100644
index 7c823f241a..0000000000
--- a/drivers/usb/host/sl811-hcd.c
+++ /dev/null
@@ -1,714 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * This code is based on linux driver for sl811hs chip, source at
- * drivers/usb/host/sl811.c:
- *
- * SL811 Host Controller Interface driver for USB.
- *
- * Copyright (c) 2003/06, Courage Co., Ltd.
- *
- * Based on:
- * 1.uhci.c by Linus Torvalds, Johannes Erdfelt, Randy Dunlap,
- * Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber,
- * Adam Richter, Gregory P. Smith;
- * 2.Original SL811 driver (hc_sl811.o) by Pei Liu <pbl@cypress.com>
- * 3.Rewrited as sl811.o by Yin Aihua <yinah:couragetech.com.cn>
- */
-
-#include <common.h>
-#include <mpc8xx.h>
-#include <usb.h>
-#include <linux/delay.h>
-#include "sl811.h"
-
-#include "../../../board/kup/common/kup.h"
-
-#ifdef __PPC__
-# define EIEIO __asm__ volatile ("eieio")
-#else
-# define EIEIO /* nothing */
-#endif
-
-#define SL811_ADR (0x50000000)
-#define SL811_DAT (0x50000001)
-
-#ifdef SL811_DEBUG
-static int debug = 9;
-#endif
-
-static int root_hub_devnum = 0;
-static struct usb_port_status rh_status = { 0 };/* root hub port status */
-
-static int sl811_rh_submit_urb(struct usb_device *usb_dev, unsigned long pipe,
- void *data, int buf_len, struct devrequest *cmd);
-
-static void sl811_write (__u8 index, __u8 data)
-{
- *(volatile unsigned char *) (SL811_ADR) = index;
- EIEIO;
- *(volatile unsigned char *) (SL811_DAT) = data;
- EIEIO;
-}
-
-static __u8 sl811_read (__u8 index)
-{
- __u8 data;
-
- *(volatile unsigned char *) (SL811_ADR) = index;
- EIEIO;
- data = *(volatile unsigned char *) (SL811_DAT);
- EIEIO;
- return (data);
-}
-
-/*
- * Read consecutive bytes of data from the SL811H/SL11H buffer
- */
-static void inline sl811_read_buf(__u8 offset, __u8 *buf, __u8 size)
-{
- *(volatile unsigned char *) (SL811_ADR) = offset;
- EIEIO;
- while (size--) {
- *buf++ = *(volatile unsigned char *) (SL811_DAT);
- EIEIO;
- }
-}
-
-/*
- * Write consecutive bytes of data to the SL811H/SL11H buffer
- */
-static void inline sl811_write_buf(__u8 offset, __u8 *buf, __u8 size)
-{
- *(volatile unsigned char *) (SL811_ADR) = offset;
- EIEIO;
- while (size--) {
- *(volatile unsigned char *) (SL811_DAT) = *buf++;
- EIEIO;
- }
-}
-
-int usb_init_kup4x (void)
-{
- volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
- volatile memctl8xx_t *memctl = &immap->im_memctl;
- int i;
- unsigned char tmp;
-
- memctl = &immap->im_memctl;
- memctl->memc_or7 = 0xFFFF8726;
- memctl->memc_br7 = 0x50000401; /* start at 0x50000000 */
- /* BP 14 low = USB ON */
- immap->im_cpm.cp_pbdat &= ~(BP_USB_VCC);
- /* PB 14 nomal port */
- immap->im_cpm.cp_pbpar &= ~(BP_USB_VCC);
- /* output */
- immap->im_cpm.cp_pbdir |= (BP_USB_VCC);
-
- puts ("USB: ");
-
- for (i = 0x10; i < 0xff; i++) {
- sl811_write(i, i);
- tmp = (sl811_read(i));
- if (tmp != i) {
- printf ("SL811 compare error index=0x%02x read=0x%02x\n", i, tmp);
- return (-1);
- }
- }
- printf ("SL811 ready\n");
- return (0);
-}
-
-/*
- * This function resets SL811HS controller and detects the speed of
- * the connecting device
- *
- * Return: 0 = no device attached; 1 = USB device attached
- */
-static int sl811_hc_reset(void)
-{
- int status ;
-
- sl811_write(SL811_CTRL2, SL811_CTL2_HOST | SL811_12M_HI);
- sl811_write(SL811_CTRL1, SL811_CTRL1_RESET);
-
- mdelay(20);
-
- /* Disable hardware SOF generation, clear all irq status. */
- sl811_write(SL811_CTRL1, 0);
- mdelay(2);
- sl811_write(SL811_INTRSTS, 0xff);
- status = sl811_read(SL811_INTRSTS);
-
- if (status & SL811_INTR_NOTPRESENT) {
- /* Device is not present */
- PDEBUG(0, "Device not present\n");
- rh_status.wPortStatus &= ~(USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE);
- rh_status.wPortChange |= USB_PORT_STAT_C_CONNECTION;
- sl811_write(SL811_INTR, SL811_INTR_INSRMV);
- return 0;
- }
-
- /* Send SOF to address 0, endpoint 0. */
- sl811_write(SL811_LEN_B, 0);
- sl811_write(SL811_PIDEP_B, PIDEP(USB_PID_SOF, 0));
- sl811_write(SL811_DEV_B, 0x00);
- sl811_write(SL811_SOFLOW, SL811_12M_LOW);
-
- if (status & SL811_INTR_SPEED_FULL) {
- /* full speed device connect directly to root hub */
- PDEBUG (0, "Full speed Device attached\n");
-
- sl811_write(SL811_CTRL1, SL811_CTRL1_RESET);
- mdelay(20);
- sl811_write(SL811_CTRL2, SL811_CTL2_HOST | SL811_12M_HI);
- sl811_write(SL811_CTRL1, SL811_CTRL1_SOF);
-
- /* start the SOF or EOP */
- sl811_write(SL811_CTRL_B, SL811_USB_CTRL_ARM);
- rh_status.wPortStatus |= USB_PORT_STAT_CONNECTION;
- rh_status.wPortStatus &= ~USB_PORT_STAT_LOW_SPEED;
- mdelay(2);
- sl811_write(SL811_INTRSTS, 0xff);
- } else {
- /* slow speed device connect directly to root-hub */
- PDEBUG(0, "Low speed Device attached\n");
-
- sl811_write(SL811_CTRL1, SL811_CTRL1_RESET);
- mdelay(20);
- sl811_write(SL811_CTRL2, SL811_CTL2_HOST | SL811_CTL2_DSWAP | SL811_12M_HI);
- sl811_write(SL811_CTRL1, SL811_CTRL1_SPEED_LOW | SL811_CTRL1_SOF);
-
- /* start the SOF or EOP */
- sl811_write(SL811_CTRL_B, SL811_USB_CTRL_ARM);
- rh_status.wPortStatus |= USB_PORT_STAT_CONNECTION | USB_PORT_STAT_LOW_SPEED;
- mdelay(2);
- sl811_write(SL811_INTRSTS, 0xff);
- }
-
- rh_status.wPortChange |= USB_PORT_STAT_C_CONNECTION;
- sl811_write(SL811_INTR, /*SL811_INTR_INSRMV*/SL811_INTR_DONE_A);
-
- return 1;
-}
-
-int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
-{
- root_hub_devnum = 0;
- sl811_hc_reset();
- return 0;
-}
-
-int usb_lowlevel_stop(int index)
-{
- sl811_hc_reset();
- return 0;
-}
-
-static int calc_needed_buswidth(int bytes, int need_preamble)
-{
- return !need_preamble ? bytes * 8 + 256 : 8 * 8 * bytes + 2048;
-}
-
-static int sl811_send_packet(struct usb_device *dev, unsigned long pipe, __u8 *buffer, int len)
-{
- __u8 ctrl = SL811_USB_CTRL_ARM | SL811_USB_CTRL_ENABLE;
- __u16 status = 0;
- int err = 0, time_start = get_timer(0);
- int need_preamble = !(rh_status.wPortStatus & USB_PORT_STAT_LOW_SPEED) &&
- (dev->speed == USB_SPEED_LOW);
-
- if (len > 239)
- return -1;
-
- if (usb_pipeout(pipe))
- ctrl |= SL811_USB_CTRL_DIR_OUT;
- if (usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe)))
- ctrl |= SL811_USB_CTRL_TOGGLE_1;
- if (need_preamble)
- ctrl |= SL811_USB_CTRL_PREAMBLE;
-
- sl811_write(SL811_INTRSTS, 0xff);
-
- while (err < 3) {
- sl811_write(SL811_ADDR_A, 0x10);
- sl811_write(SL811_LEN_A, len);
- if (usb_pipeout(pipe) && len)
- sl811_write_buf(0x10, buffer, len);
-
- if (!(rh_status.wPortStatus & USB_PORT_STAT_LOW_SPEED) &&
- sl811_read(SL811_SOFCNTDIV)*64 < calc_needed_buswidth(len, need_preamble))
- ctrl |= SL811_USB_CTRL_SOF;
- else
- ctrl &= ~SL811_USB_CTRL_SOF;
-
- sl811_write(SL811_CTRL_A, ctrl);
- while (!(sl811_read(SL811_INTRSTS) & SL811_INTR_DONE_A)) {
- if (5*CONFIG_SYS_HZ < get_timer(time_start)) {
- printf("USB transmit timed out\n");
- return -USB_ST_CRC_ERR;
- }
- }
-
- sl811_write(SL811_INTRSTS, 0xff);
- status = sl811_read(SL811_STS_A);
-
- if (status & SL811_USB_STS_ACK) {
- int remainder = sl811_read(SL811_CNT_A);
- if (remainder) {
- PDEBUG(0, "usb transfer remainder = %d\n", remainder);
- len -= remainder;
- }
- if (usb_pipein(pipe) && len)
- sl811_read_buf(0x10, buffer, len);
- return len;
- }
-
- if ((status & SL811_USB_STS_NAK) == SL811_USB_STS_NAK)
- continue;
-
- PDEBUG(0, "usb transfer error %#x\n", (int)status);
- err++;
- }
-
- err = 0;
-
- if (status & SL811_USB_STS_ERROR)
- err |= USB_ST_BUF_ERR;
- if (status & SL811_USB_STS_TIMEOUT)
- err |= USB_ST_CRC_ERR;
- if (status & SL811_USB_STS_STALL)
- err |= USB_ST_STALLED;
-
- return -err;
-}
-
-int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
- int len)
-{
- int dir_out = usb_pipeout(pipe);
- int ep = usb_pipeendpoint(pipe);
- int max = usb_maxpacket(dev, pipe);
- int done = 0;
-
- PDEBUG(7, "dev = %ld pipe = %ld buf = %p size = %d dir_out = %d\n",
- usb_pipedevice(pipe), usb_pipeendpoint(pipe), buffer, len, dir_out);
-
- dev->status = 0;
-
- sl811_write(SL811_DEV_A, usb_pipedevice(pipe));
- sl811_write(SL811_PIDEP_A, PIDEP(!dir_out ? USB_PID_IN : USB_PID_OUT, ep));
- while (done < len) {
- int res = sl811_send_packet(dev, pipe, (__u8*)buffer+done,
- max > len - done ? len - done : max);
- if (res < 0) {
- dev->status = -res;
- return res;
- }
-
- if (!dir_out && res < max) /* short packet */
- break;
-
- done += res;
- usb_dotoggle(dev, ep, dir_out);
- }
-
- dev->act_len = done;
-
- return 0;
-}
-
-int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
- int len,struct devrequest *setup)
-{
- int done = 0;
- int devnum = usb_pipedevice(pipe);
- int ep = usb_pipeendpoint(pipe);
-
- dev->status = 0;
-
- if (devnum == root_hub_devnum)
- return sl811_rh_submit_urb(dev, pipe, buffer, len, setup);
-
- PDEBUG(7, "dev = %d pipe = %ld buf = %p size = %d rt = %#x req = %#x bus = %i\n",
- devnum, ep, buffer, len, (int)setup->requesttype,
- (int)setup->request, sl811_read(SL811_SOFCNTDIV)*64);
-
- sl811_write(SL811_DEV_A, devnum);
- sl811_write(SL811_PIDEP_A, PIDEP(USB_PID_SETUP, ep));
- /* setup phase */
- usb_settoggle(dev, ep, 1, 0);
- if (sl811_send_packet(dev, usb_sndctrlpipe(dev, ep),
- (__u8*)setup, sizeof(*setup)) == sizeof(*setup)) {
- int dir_in = usb_pipein(pipe);
- int max = usb_maxpacket(dev, pipe);
-
- /* data phase */
- sl811_write(SL811_PIDEP_A,
- PIDEP(dir_in ? USB_PID_IN : USB_PID_OUT, ep));
- usb_settoggle(dev, ep, usb_pipeout(pipe), 1);
- while (done < len) {
- int res = sl811_send_packet(dev, pipe, (__u8*)buffer+done,
- max > len - done ? len - done : max);
- if (res < 0) {
- PDEBUG(0, "status data failed!\n");
- dev->status = -res;
- return 0;
- }
- done += res;
- usb_dotoggle(dev, ep, usb_pipeout(pipe));
- if (dir_in && res < max) /* short packet */
- break;
- }
-
- /* status phase */
- sl811_write(SL811_PIDEP_A,
- PIDEP(!dir_in ? USB_PID_IN : USB_PID_OUT, ep));
- usb_settoggle(dev, ep, !usb_pipeout(pipe), 1);
- if (sl811_send_packet(dev,
- !dir_in ? usb_rcvctrlpipe(dev, ep) :
- usb_sndctrlpipe(dev, ep),
- 0, 0) < 0) {
- PDEBUG(0, "status phase failed!\n");
- dev->status = -1;
- }
- } else {
- PDEBUG(0, "setup phase failed!\n");
- dev->status = -1;
- }
-
- dev->act_len = done;
-
- return done;
-}
-
-int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
- int len, int interval, bool nonblock)
-{
- PDEBUG(0, "dev = %p pipe = %#lx buf = %p size = %d int = %d\n", dev, pipe,
- buffer, len, interval);
- return -1;
-}
-
-/*
- * SL811 Virtual Root Hub
- */
-
-/* Device descriptor */
-static __u8 sl811_rh_dev_des[] =
-{
- 0x12, /* __u8 bLength; */
- 0x01, /* __u8 bDescriptorType; Device */
- 0x10, /* __u16 bcdUSB; v1.1 */
- 0x01,
- 0x09, /* __u8 bDeviceClass; HUB_CLASSCODE */
- 0x00, /* __u8 bDeviceSubClass; */
- 0x00, /* __u8 bDeviceProtocol; */
- 0x08, /* __u8 bMaxPacketSize0; 8 Bytes */
- 0x00, /* __u16 idVendor; */
- 0x00,
- 0x00, /* __u16 idProduct; */
- 0x00,
- 0x00, /* __u16 bcdDevice; */
- 0x00,
- 0x00, /* __u8 iManufacturer; */
- 0x02, /* __u8 iProduct; */
- 0x01, /* __u8 iSerialNumber; */
- 0x01 /* __u8 bNumConfigurations; */
-};
-
-/* Configuration descriptor */
-static __u8 sl811_rh_config_des[] =
-{
- 0x09, /* __u8 bLength; */
- 0x02, /* __u8 bDescriptorType; Configuration */
- 0x19, /* __u16 wTotalLength; */
- 0x00,
- 0x01, /* __u8 bNumInterfaces; */
- 0x01, /* __u8 bConfigurationValue; */
- 0x00, /* __u8 iConfiguration; */
- 0x40, /* __u8 bmAttributes;
- Bit 7: Bus-powered, 6: Self-powered, 5 Remote-wakwup,
- 4..0: resvd */
- 0x00, /* __u8 MaxPower; */
-
- /* interface */
- 0x09, /* __u8 if_bLength; */
- 0x04, /* __u8 if_bDescriptorType; Interface */
- 0x00, /* __u8 if_bInterfaceNumber; */
- 0x00, /* __u8 if_bAlternateSetting; */
- 0x01, /* __u8 if_bNumEndpoints; */
- 0x09, /* __u8 if_bInterfaceClass; HUB_CLASSCODE */
- 0x00, /* __u8 if_bInterfaceSubClass; */
- 0x00, /* __u8 if_bInterfaceProtocol; */
- 0x00, /* __u8 if_iInterface; */
-
- /* endpoint */
- 0x07, /* __u8 ep_bLength; */
- 0x05, /* __u8 ep_bDescriptorType; Endpoint */
- 0x81, /* __u8 ep_bEndpointAddress; IN Endpoint 1 */
- 0x03, /* __u8 ep_bmAttributes; Interrupt */
- 0x08, /* __u16 ep_wMaxPacketSize; */
- 0x00,
- 0xff /* __u8 ep_bInterval; 255 ms */
-};
-
-/* root hub class descriptor*/
-static __u8 sl811_rh_hub_des[] =
-{
- 0x09, /* __u8 bLength; */
- 0x29, /* __u8 bDescriptorType; Hub-descriptor */
- 0x01, /* __u8 bNbrPorts; */
- 0x00, /* __u16 wHubCharacteristics; */
- 0x00,
- 0x50, /* __u8 bPwrOn2pwrGood; 2ms */
- 0x00, /* __u8 bHubContrCurrent; 0 mA */
- 0xfc, /* __u8 DeviceRemovable; *** 7 Ports max *** */
- 0xff /* __u8 PortPwrCtrlMask; *** 7 ports max *** */
-};
-
-/*
- * helper routine for returning string descriptors in UTF-16LE
- * input can actually be ISO-8859-1; ASCII is its 7-bit subset
- */
-static int ascii2utf (char *s, u8 *utf, int utfmax)
-{
- int retval;
-
- for (retval = 0; *s && utfmax > 1; utfmax -= 2, retval += 2) {
- *utf++ = *s++;
- *utf++ = 0;
- }
- return retval;
-}
-
-/*
- * root_hub_string is used by each host controller's root hub code,
- * so that they're identified consistently throughout the system.
- */
-static int usb_root_hub_string (int id, int serial, char *type, __u8 *data, int len)
-{
- char buf [30];
-
- /* assert (len > (2 * (sizeof (buf) + 1)));
- assert (strlen (type) <= 8);*/
-
- /* language ids */
- if (id == 0) {
- *data++ = 4; *data++ = 3; /* 4 bytes data */
- *data++ = 0; *data++ = 0; /* some language id */
- return 4;
-
- /* serial number */
- } else if (id == 1) {
- sprintf (buf, "%#x", serial);
-
- /* product description */
- } else if (id == 2) {
- sprintf (buf, "USB %s Root Hub", type);
-
- /* id 3 == vendor description */
-
- /* unsupported IDs --> "stall" */
- } else
- return 0;
-
- ascii2utf (buf, data + 2, len - 2);
- data [0] = 2 + strlen(buf) * 2;
- data [1] = 3;
- return data [0];
-}
-
-/* helper macro */
-#define OK(x) len = (x); break
-
-/*
- * This function handles all USB request to the the virtual root hub
- */
-static int sl811_rh_submit_urb(struct usb_device *usb_dev, unsigned long pipe,
- void *data, int buf_len, struct devrequest *cmd)
-{
- __u8 data_buf[16];
- __u8 *bufp = data_buf;
- int len = 0;
- int status = 0;
- __u16 bmRType_bReq;
- __u16 wValue = le16_to_cpu (cmd->value);
- __u16 wLength = le16_to_cpu (cmd->length);
-#ifdef SL811_DEBUG
- __u16 wIndex = le16_to_cpu (cmd->index);
-#endif
-
- if (usb_pipeint(pipe)) {
- PDEBUG(0, "interrupt transfer unimplemented!\n");
- return 0;
- }
-
- bmRType_bReq = cmd->requesttype | (cmd->request << 8);
-
- PDEBUG(5, "submit rh urb, req = %d(%x) val = %#x index = %#x len=%d\n",
- bmRType_bReq, bmRType_bReq, wValue, wIndex, wLength);
-
- /* Request Destination:
- without flags: Device,
- USB_RECIP_INTERFACE: interface,
- USB_RECIP_ENDPOINT: endpoint,
- USB_TYPE_CLASS means HUB here,
- USB_RECIP_OTHER | USB_TYPE_CLASS almost ever means HUB_PORT here
- */
- switch (bmRType_bReq) {
- case RH_GET_STATUS:
- *(__u16 *)bufp = cpu_to_le16(1);
- OK(2);
-
- case RH_GET_STATUS | USB_RECIP_INTERFACE:
- *(__u16 *)bufp = cpu_to_le16(0);
- OK(2);
-
- case RH_GET_STATUS | USB_RECIP_ENDPOINT:
- *(__u16 *)bufp = cpu_to_le16(0);
- OK(2);
-
- case RH_GET_STATUS | USB_TYPE_CLASS:
- *(__u32 *)bufp = cpu_to_le32(0);
- OK(4);
-
- case RH_GET_STATUS | USB_RECIP_OTHER | USB_TYPE_CLASS:
- *(__u32 *)bufp = cpu_to_le32(rh_status.wPortChange<<16 | rh_status.wPortStatus);
- OK(4);
-
- case RH_CLEAR_FEATURE | USB_RECIP_ENDPOINT:
- switch (wValue) {
- case 1:
- OK(0);
- }
- break;
-
- case RH_CLEAR_FEATURE | USB_TYPE_CLASS:
- switch (wValue) {
- case C_HUB_LOCAL_POWER:
- OK(0);
-
- case C_HUB_OVER_CURRENT:
- OK(0);
- }
- break;
-
- case RH_CLEAR_FEATURE | USB_RECIP_OTHER | USB_TYPE_CLASS:
- switch (wValue) {
- case USB_PORT_FEAT_ENABLE:
- rh_status.wPortStatus &= ~USB_PORT_STAT_ENABLE;
- OK(0);
-
- case USB_PORT_FEAT_SUSPEND:
- rh_status.wPortStatus &= ~USB_PORT_STAT_SUSPEND;
- OK(0);
-
- case USB_PORT_FEAT_POWER:
- rh_status.wPortStatus &= ~USB_PORT_STAT_POWER;
- OK(0);
-
- case USB_PORT_FEAT_C_CONNECTION:
- rh_status.wPortChange &= ~USB_PORT_STAT_C_CONNECTION;
- OK(0);
-
- case USB_PORT_FEAT_C_ENABLE:
- rh_status.wPortChange &= ~USB_PORT_STAT_C_ENABLE;
- OK(0);
-
- case USB_PORT_FEAT_C_SUSPEND:
- rh_status.wPortChange &= ~USB_PORT_STAT_C_SUSPEND;
- OK(0);
-
- case USB_PORT_FEAT_C_OVER_CURRENT:
- rh_status.wPortChange &= ~USB_PORT_STAT_C_OVERCURRENT;
- OK(0);
-
- case USB_PORT_FEAT_C_RESET:
- rh_status.wPortChange &= ~USB_PORT_STAT_C_RESET;
- OK(0);
- }
- break;
-
- case RH_SET_FEATURE | USB_RECIP_OTHER | USB_TYPE_CLASS:
- switch (wValue) {
- case USB_PORT_FEAT_SUSPEND:
- rh_status.wPortStatus |= USB_PORT_STAT_SUSPEND;
- OK(0);
-
- case USB_PORT_FEAT_RESET:
- rh_status.wPortStatus |= USB_PORT_STAT_RESET;
- rh_status.wPortChange = 0;
- rh_status.wPortChange |= USB_PORT_STAT_C_RESET;
- rh_status.wPortStatus &= ~USB_PORT_STAT_RESET;
- rh_status.wPortStatus |= USB_PORT_STAT_ENABLE;
- OK(0);
-
- case USB_PORT_FEAT_POWER:
- rh_status.wPortStatus |= USB_PORT_STAT_POWER;
- OK(0);
-
- case USB_PORT_FEAT_ENABLE:
- rh_status.wPortStatus |= USB_PORT_STAT_ENABLE;
- OK(0);
- }
- break;
-
- case RH_SET_ADDRESS:
- root_hub_devnum = wValue;
- OK(0);
-
- case RH_GET_DESCRIPTOR:
- switch ((wValue & 0xff00) >> 8) {
- case USB_DT_DEVICE:
- len = sizeof(sl811_rh_dev_des);
- bufp = sl811_rh_dev_des;
- OK(len);
-
- case USB_DT_CONFIG:
- len = sizeof(sl811_rh_config_des);
- bufp = sl811_rh_config_des;
- OK(len);
-
- case USB_DT_STRING:
- len = usb_root_hub_string(wValue & 0xff, (int)(long)0, "SL811HS", data, wLength);
- if (len > 0) {
- bufp = data;
- OK(len);
- }
-
- default:
- status = -32;
- }
- break;
-
- case RH_GET_DESCRIPTOR | USB_TYPE_CLASS:
- len = sizeof(sl811_rh_hub_des);
- bufp = sl811_rh_hub_des;
- OK(len);
-
- case RH_GET_CONFIGURATION:
- bufp[0] = 0x01;
- OK(1);
-
- case RH_SET_CONFIGURATION:
- OK(0);
-
- default:
- PDEBUG(1, "unsupported root hub command\n");
- status = -32;
- }
-
- len = min(len, buf_len);
- if (data != bufp)
- memcpy(data, bufp, len);
-
- PDEBUG(5, "len = %d, status = %d\n", len, status);
-
- usb_dev->status = status;
- usb_dev->act_len = len;
-
- return status == 0 ? len : status;
-}
diff --git a/drivers/usb/host/sl811.h b/drivers/usb/host/sl811.h
deleted file mode 100644
index c1f9f013bd..0000000000
--- a/drivers/usb/host/sl811.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef __UBOOT_SL811_H
-#define __UBOOT_SL811_H
-
-#undef SL811_DEBUG
-
-#ifdef SL811_DEBUG
- #define PDEBUG(level, fmt, args...) \
- if (debug >= (level)) printf("[%s:%d] " fmt, \
- __PRETTY_FUNCTION__, __LINE__ , ## args)
-#else
- #define PDEBUG(level, fmt, args...) do {} while(0)
-#endif
-
-/* Sl811 host control register */
-#define SL811_CTRL_A 0x00
-#define SL811_ADDR_A 0x01
-#define SL811_LEN_A 0x02
-#define SL811_STS_A 0x03 /* read */
-#define SL811_PIDEP_A 0x03 /* write */
-#define SL811_CNT_A 0x04 /* read */
-#define SL811_DEV_A 0x04 /* write */
-#define SL811_CTRL1 0x05
-#define SL811_INTR 0x06
-#define SL811_CTRL_B 0x08
-#define SL811_ADDR_B 0x09
-#define SL811_LEN_B 0x0A
-#define SL811_STS_B 0x0B /* read */
-#define SL811_PIDEP_B 0x0B /* write */
-#define SL811_CNT_B 0x0C /* read */
-#define SL811_DEV_B 0x0C /* write */
-#define SL811_INTRSTS 0x0D /* write clears bitwise */
-#define SL811_HWREV 0x0E /* read */
-#define SL811_SOFLOW 0x0E /* write */
-#define SL811_SOFCNTDIV 0x0F /* read */
-#define SL811_CTRL2 0x0F /* write */
-
-/* USB control register bits (addr 0x00 and addr 0x08) */
-#define SL811_USB_CTRL_ARM 0x01
-#define SL811_USB_CTRL_ENABLE 0x02
-#define SL811_USB_CTRL_DIR_OUT 0x04
-#define SL811_USB_CTRL_ISO 0x10
-#define SL811_USB_CTRL_SOF 0x20
-#define SL811_USB_CTRL_TOGGLE_1 0x40
-#define SL811_USB_CTRL_PREAMBLE 0x80
-
-/* USB status register bits (addr 0x03 and addr 0x0B) */
-#define SL811_USB_STS_ACK 0x01
-#define SL811_USB_STS_ERROR 0x02
-#define SL811_USB_STS_TIMEOUT 0x04
-#define SL811_USB_STS_TOGGLE_1 0x08
-#define SL811_USB_STS_SETUP 0x10
-#define SL811_USB_STS_OVERFLOW 0x20
-#define SL811_USB_STS_NAK 0x40
-#define SL811_USB_STS_STALL 0x80
-
-/* Control register 1 bits (addr 0x05) */
-#define SL811_CTRL1_SOF 0x01
-#define SL811_CTRL1_RESET 0x08
-#define SL811_CTRL1_JKSTATE 0x10
-#define SL811_CTRL1_SPEED_LOW 0x20
-#define SL811_CTRL1_SUSPEND 0x40
-
-/* Interrut enable (addr 0x06) and interrupt status register bits (addr 0x0D) */
-#define SL811_INTR_DONE_A 0x01
-#define SL811_INTR_DONE_B 0x02
-#define SL811_INTR_SOF 0x10
-#define SL811_INTR_INSRMV 0x20
-#define SL811_INTR_DETECT 0x40
-#define SL811_INTR_NOTPRESENT 0x40
-#define SL811_INTR_SPEED_FULL 0x80 /* only in status reg */
-
-/* HW rev and SOF lo register bits (addr 0x0E) */
-#define SL811_HWR_HWREV 0xF0
-
-/* SOF counter and control reg 2 (addr 0x0F) */
-#define SL811_CTL2_SOFHI 0x3F
-#define SL811_CTL2_DSWAP 0x40
-#define SL811_CTL2_HOST 0x80
-
-/* Set up for 1-ms SOF time. */
-#define SL811_12M_LOW 0xE0
-#define SL811_12M_HI 0x2E
-
-#define SL811_DATA_START 0x10
-#define SL811_DATA_LIMIT 240
-
-/* Requests: bRequest << 8 | bmRequestType */
-#define RH_GET_STATUS 0x0080
-#define RH_CLEAR_FEATURE 0x0100
-#define RH_SET_FEATURE 0x0300
-#define RH_SET_ADDRESS 0x0500
-#define RH_GET_DESCRIPTOR 0x0680
-#define RH_SET_DESCRIPTOR 0x0700
-#define RH_GET_CONFIGURATION 0x0880
-#define RH_SET_CONFIGURATION 0x0900
-#define RH_GET_STATE 0x0280
-#define RH_GET_INTERFACE 0x0A80
-#define RH_SET_INTERFACE 0x0B00
-#define RH_SYNC_FRAME 0x0C80
-
-
-#define PIDEP(pid, ep) (((pid) & 0x0f) << 4 | (ep))
-
-#endif /* __UBOOT_SL811_H */
diff --git a/drivers/usb/host/utmi-armada100.c b/drivers/usb/host/utmi-armada100.c
deleted file mode 100644
index 5d66e5881f..0000000000
--- a/drivers/usb/host/utmi-armada100.c
+++ /dev/null
@@ -1,80 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2012
- * eInfochips Ltd. <www.einfochips.com>
- * Written-by: Ajay Bhargav <contact@8051projects.net>
- *
- * (C) Copyright 2009
- * Marvell Semiconductor <www.marvell.com>
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <usb.h>
-#include <asm/arch/cpu.h>
-#include <asm/arch/armada100.h>
-#include <asm/arch/utmi-armada100.h>
-#include <linux/delay.h>
-
-static int utmi_phy_init(void)
-{
- struct armd1usb_phy_reg *phy_regs =
- (struct armd1usb_phy_reg *)UTMI_PHY_BASE;
- int timeout;
-
- setbits_le32(&phy_regs->utmi_ctrl, INPKT_DELAY_SOF | PLL_PWR_UP);
- udelay(1000);
- setbits_le32(&phy_regs->utmi_ctrl, PHY_PWR_UP);
-
- clrbits_le32(&phy_regs->utmi_pll, PLL_FBDIV_MASK | PLL_REFDIV_MASK);
- setbits_le32(&phy_regs->utmi_pll, N_DIVIDER << PLL_FBDIV | M_DIVIDER);
-
- setbits_le32(&phy_regs->utmi_tx, PHSEL_VAL << CK60_PHSEL);
-
- /* Calibrate pll */
- timeout = 10000;
- while (--timeout && ((readl(&phy_regs->utmi_pll) & PLL_READY) == 0))
- ;
- if (!timeout)
- return -1;
-
- udelay(200);
- setbits_le32(&phy_regs->utmi_pll, VCOCAL_START);
- udelay(400);
- clrbits_le32(&phy_regs->utmi_pll, VCOCAL_START);
-
- udelay(200);
- setbits_le32(&phy_regs->utmi_tx, RCAL_START);
- udelay(400);
- clrbits_le32(&phy_regs->utmi_tx, RCAL_START);
-
- timeout = 10000;
- while (--timeout && ((readl(&phy_regs->utmi_pll) & PLL_READY) == 0))
- ;
- if (!timeout)
- return -1;
-
- return 0;
-}
-
-/*
- * Initialize USB host controller's UTMI Physical interface
- */
-int utmi_init(void)
-{
- struct armd1mpmu_registers *mpmu_regs =
- (struct armd1mpmu_registers *)ARMD1_MPMU_BASE;
-
- struct armd1apmu_registers *apmu_regs =
- (struct armd1apmu_registers *)ARMD1_APMU_BASE;
-
- /* Turn on 26Mhz ref clock for UTMI PLL */
- setbits_le32(&mpmu_regs->acgr, APB2_26M_EN | AP_26M);
-
- /* USB Clock reset */
- writel(USB_SPH_AXICLK_EN, &apmu_regs->usbcrc);
- writel(USB_SPH_AXICLK_EN | USB_SPH_AXI_RST, &apmu_regs->usbcrc);
-
- /* Initialize UTMI transceiver */
- return utmi_phy_init();
-}
diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index 42e7abddbc..482dfdc6be 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -231,7 +231,7 @@ static int omap2430_musb_probe(struct udevice *dev)
otg_board_data = &plat->otg_board_data;
- if (CONFIG_IS_ENABLED(USB_MUSB_HOST)) {
+ if (IS_ENABLED(CONFIG_USB_MUSB_HOST)) {
struct musb_host_data *host = dev_get_priv(dev);
struct usb_bus_priv *priv = dev_get_uclass_priv(dev);