mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-05 22:31:36 +00:00
Merge git://git.denx.de/u-boot-usb
This commit is contained in:
commit
6e9b109aa9
33 changed files with 112 additions and 51 deletions
|
@ -98,19 +98,9 @@ struct us_data {
|
||||||
struct scsi_cmd *srb; /* current srb */
|
struct scsi_cmd *srb; /* current srb */
|
||||||
trans_reset transport_reset; /* reset routine */
|
trans_reset transport_reset; /* reset routine */
|
||||||
trans_cmnd transport; /* transport routine */
|
trans_cmnd transport; /* transport routine */
|
||||||
|
unsigned short max_xfer_blk; /* maximum transfer blocks */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_USB_EHCI_HCD
|
|
||||||
/*
|
|
||||||
* The U-Boot EHCI driver can handle any transfer length as long as there is
|
|
||||||
* enough free heap space left, but the SCSI READ(10) and WRITE(10) commands are
|
|
||||||
* limited to 65535 blocks.
|
|
||||||
*/
|
|
||||||
#define USB_MAX_XFER_BLK 65535
|
|
||||||
#else
|
|
||||||
#define USB_MAX_XFER_BLK 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_BLK
|
#ifndef CONFIG_BLK
|
||||||
static struct us_data usb_stor[USB_MAX_STOR_DEV];
|
static struct us_data usb_stor[USB_MAX_STOR_DEV];
|
||||||
#endif
|
#endif
|
||||||
|
@ -949,6 +939,38 @@ do_retry:
|
||||||
return USB_STOR_TRANSPORT_FAILED;
|
return USB_STOR_TRANSPORT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void usb_stor_set_max_xfer_blk(struct usb_device *udev,
|
||||||
|
struct us_data *us)
|
||||||
|
{
|
||||||
|
unsigned short blk;
|
||||||
|
size_t __maybe_unused size;
|
||||||
|
int __maybe_unused ret;
|
||||||
|
|
||||||
|
#ifndef CONFIG_DM_USB
|
||||||
|
#ifdef CONFIG_USB_EHCI_HCD
|
||||||
|
/*
|
||||||
|
* The U-Boot EHCI driver can handle any transfer length as long as
|
||||||
|
* there is enough free heap space left, but the SCSI READ(10) and
|
||||||
|
* WRITE(10) commands are limited to 65535 blocks.
|
||||||
|
*/
|
||||||
|
blk = USHRT_MAX;
|
||||||
|
#else
|
||||||
|
blk = 20;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
ret = usb_get_max_xfer_size(udev, (size_t *)&size);
|
||||||
|
if (ret < 0) {
|
||||||
|
/* unimplemented, let's use default 20 */
|
||||||
|
blk = 20;
|
||||||
|
} else {
|
||||||
|
if (size > USHRT_MAX * 512)
|
||||||
|
blk = USHRT_MAX;
|
||||||
|
blk = size / 512;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
us->max_xfer_blk = blk;
|
||||||
|
}
|
||||||
|
|
||||||
static int usb_inquiry(struct scsi_cmd *srb, struct us_data *ss)
|
static int usb_inquiry(struct scsi_cmd *srb, struct us_data *ss)
|
||||||
{
|
{
|
||||||
|
@ -1150,12 +1172,12 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
|
||||||
/* XXX need some comment here */
|
/* XXX need some comment here */
|
||||||
retry = 2;
|
retry = 2;
|
||||||
srb->pdata = (unsigned char *)buf_addr;
|
srb->pdata = (unsigned char *)buf_addr;
|
||||||
if (blks > USB_MAX_XFER_BLK)
|
if (blks > ss->max_xfer_blk)
|
||||||
smallblks = USB_MAX_XFER_BLK;
|
smallblks = ss->max_xfer_blk;
|
||||||
else
|
else
|
||||||
smallblks = (unsigned short) blks;
|
smallblks = (unsigned short) blks;
|
||||||
retry_it:
|
retry_it:
|
||||||
if (smallblks == USB_MAX_XFER_BLK)
|
if (smallblks == ss->max_xfer_blk)
|
||||||
usb_show_progress();
|
usb_show_progress();
|
||||||
srb->datalen = block_dev->blksz * smallblks;
|
srb->datalen = block_dev->blksz * smallblks;
|
||||||
srb->pdata = (unsigned char *)buf_addr;
|
srb->pdata = (unsigned char *)buf_addr;
|
||||||
|
@ -1178,7 +1200,7 @@ retry_it:
|
||||||
start, smallblks, buf_addr);
|
start, smallblks, buf_addr);
|
||||||
|
|
||||||
usb_disable_asynch(0); /* asynch transfer allowed */
|
usb_disable_asynch(0); /* asynch transfer allowed */
|
||||||
if (blkcnt >= USB_MAX_XFER_BLK)
|
if (blkcnt >= ss->max_xfer_blk)
|
||||||
debug("\n");
|
debug("\n");
|
||||||
return blkcnt;
|
return blkcnt;
|
||||||
}
|
}
|
||||||
|
@ -1236,12 +1258,12 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
|
||||||
*/
|
*/
|
||||||
retry = 2;
|
retry = 2;
|
||||||
srb->pdata = (unsigned char *)buf_addr;
|
srb->pdata = (unsigned char *)buf_addr;
|
||||||
if (blks > USB_MAX_XFER_BLK)
|
if (blks > ss->max_xfer_blk)
|
||||||
smallblks = USB_MAX_XFER_BLK;
|
smallblks = ss->max_xfer_blk;
|
||||||
else
|
else
|
||||||
smallblks = (unsigned short) blks;
|
smallblks = (unsigned short) blks;
|
||||||
retry_it:
|
retry_it:
|
||||||
if (smallblks == USB_MAX_XFER_BLK)
|
if (smallblks == ss->max_xfer_blk)
|
||||||
usb_show_progress();
|
usb_show_progress();
|
||||||
srb->datalen = block_dev->blksz * smallblks;
|
srb->datalen = block_dev->blksz * smallblks;
|
||||||
srb->pdata = (unsigned char *)buf_addr;
|
srb->pdata = (unsigned char *)buf_addr;
|
||||||
|
@ -1263,7 +1285,7 @@ retry_it:
|
||||||
PRIxPTR "\n", start, smallblks, buf_addr);
|
PRIxPTR "\n", start, smallblks, buf_addr);
|
||||||
|
|
||||||
usb_disable_asynch(0); /* asynch transfer allowed */
|
usb_disable_asynch(0); /* asynch transfer allowed */
|
||||||
if (blkcnt >= USB_MAX_XFER_BLK)
|
if (blkcnt >= ss->max_xfer_blk)
|
||||||
debug("\n");
|
debug("\n");
|
||||||
return blkcnt;
|
return blkcnt;
|
||||||
|
|
||||||
|
@ -1384,6 +1406,10 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
|
||||||
ss->irqmaxp = usb_maxpacket(dev, ss->irqpipe);
|
ss->irqmaxp = usb_maxpacket(dev, ss->irqpipe);
|
||||||
dev->irq_handle = usb_stor_irq;
|
dev->irq_handle = usb_stor_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the maximum transfer size per host controller setting */
|
||||||
|
usb_stor_set_max_xfer_blk(dev, ss);
|
||||||
|
|
||||||
dev->privptr = (void *)ss;
|
dev->privptr = (void *)ss;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,5 +34,4 @@ CONFIG_FSL_ESPI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -34,5 +34,4 @@ CONFIG_FSL_ESPI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -22,5 +22,4 @@ CONFIG_SCSI=y
|
||||||
CONFIG_SYS_NS16550=y
|
CONFIG_SYS_NS16550=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -21,5 +21,4 @@ CONFIG_PHYLIB=y
|
||||||
CONFIG_SYS_NS16550=y
|
CONFIG_SYS_NS16550=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -21,5 +21,4 @@ CONFIG_PHYLIB=y
|
||||||
CONFIG_SYS_NS16550=y
|
CONFIG_SYS_NS16550=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -54,7 +54,6 @@ CONFIG_NETDEVICES=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -43,7 +43,6 @@ CONFIG_NETDEVICES=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -43,7 +43,6 @@ CONFIG_NETDEVICES=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -52,7 +52,6 @@ CONFIG_PHY_MICREL=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -41,7 +41,6 @@ CONFIG_PHY_MICREL=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -73,7 +73,6 @@ CONFIG_USB=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_GADGET_DWC2_OTG=y
|
CONFIG_USB_GADGET_DWC2_OTG=y
|
||||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||||
|
|
|
@ -34,6 +34,5 @@ CONFIG_DM_THERMAL=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
# CONFIG_VIDEO_SW_CURSOR is not set
|
# CONFIG_VIDEO_SW_CURSOR is not set
|
||||||
CONFIG_OF_LIBFDT=y
|
CONFIG_OF_LIBFDT=y
|
||||||
|
|
|
@ -26,7 +26,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_SMSC95XX=y
|
CONFIG_USB_ETHER_SMSC95XX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -28,7 +28,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_SMSC95XX=y
|
CONFIG_USB_ETHER_SMSC95XX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -28,7 +28,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_SMSC95XX=y
|
CONFIG_USB_ETHER_SMSC95XX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -26,7 +26,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_SMSC95XX=y
|
CONFIG_USB_ETHER_SMSC95XX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -175,7 +175,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_EMUL=y
|
CONFIG_USB_EMUL=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
CONFIG_CONSOLE_ROTATION=y
|
CONFIG_CONSOLE_ROTATION=y
|
||||||
CONFIG_CONSOLE_TRUETYPE=y
|
CONFIG_CONSOLE_TRUETYPE=y
|
||||||
|
|
|
@ -160,7 +160,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_EMUL=y
|
CONFIG_USB_EMUL=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
CONFIG_CONSOLE_ROTATION=y
|
CONFIG_CONSOLE_ROTATION=y
|
||||||
CONFIG_CONSOLE_TRUETYPE=y
|
CONFIG_CONSOLE_TRUETYPE=y
|
||||||
|
|
|
@ -168,7 +168,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_EMUL=y
|
CONFIG_USB_EMUL=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
CONFIG_CONSOLE_ROTATION=y
|
CONFIG_CONSOLE_ROTATION=y
|
||||||
CONFIG_CONSOLE_TRUETYPE=y
|
CONFIG_CONSOLE_TRUETYPE=y
|
||||||
|
|
|
@ -178,7 +178,6 @@ CONFIG_DM_USB=y
|
||||||
CONFIG_USB_EMUL=y
|
CONFIG_USB_EMUL=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
CONFIG_CONSOLE_ROTATION=y
|
CONFIG_CONSOLE_ROTATION=y
|
||||||
CONFIG_CONSOLE_TRUETYPE=y
|
CONFIG_CONSOLE_TRUETYPE=y
|
||||||
|
|
|
@ -36,7 +36,6 @@ CONFIG_USB_ULPI_VIEWPORT=y
|
||||||
CONFIG_USB_ULPI=y
|
CONFIG_USB_ULPI=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_ASIX=y
|
CONFIG_USB_ETHER_ASIX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -34,7 +34,6 @@ CONFIG_USB_ULPI_VIEWPORT=y
|
||||||
CONFIG_USB_ULPI=y
|
CONFIG_USB_ULPI=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_KEYBOARD=y
|
CONFIG_USB_KEYBOARD=y
|
||||||
CONFIG_SYS_USB_EVENT_POLL=y
|
|
||||||
CONFIG_USB_HOST_ETHER=y
|
CONFIG_USB_HOST_ETHER=y
|
||||||
CONFIG_USB_ETHER_ASIX=y
|
CONFIG_USB_ETHER_ASIX=y
|
||||||
CONFIG_DM_VIDEO=y
|
CONFIG_DM_VIDEO=y
|
||||||
|
|
|
@ -75,7 +75,7 @@ if USB_KEYBOARD
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "USB keyboard polling"
|
prompt "USB keyboard polling"
|
||||||
optional
|
default SYS_USB_EVENT_POLL
|
||||||
---help---
|
---help---
|
||||||
Enable a polling mechanism for USB keyboard.
|
Enable a polling mechanism for USB keyboard.
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,8 @@ static int setdma_rx(struct dwc2_ep *ep, struct dwc2_request *req)
|
||||||
ctrl = readl(®->out_endp[ep_num].doepctl);
|
ctrl = readl(®->out_endp[ep_num].doepctl);
|
||||||
|
|
||||||
invalidate_dcache_range((unsigned long) ep->dma_buf,
|
invalidate_dcache_range((unsigned long) ep->dma_buf,
|
||||||
(unsigned long) ep->dma_buf + ep->len);
|
(unsigned long) ep->dma_buf +
|
||||||
|
ROUND(ep->len, CONFIG_SYS_CACHELINE_SIZE));
|
||||||
|
|
||||||
writel((unsigned int) ep->dma_buf, ®->out_endp[ep_num].doepdma);
|
writel((unsigned int) ep->dma_buf, ®->out_endp[ep_num].doepdma);
|
||||||
writel(DOEPT_SIZ_PKT_CNT(pktcnt) | DOEPT_SIZ_XFER_SIZE(length),
|
writel(DOEPT_SIZ_PKT_CNT(pktcnt) | DOEPT_SIZ_XFER_SIZE(length),
|
||||||
|
|
|
@ -1245,7 +1245,7 @@ static int dwc2_usb_ofdata_to_platdata(struct udevice *dev)
|
||||||
struct dwc2_priv *priv = dev_get_priv(dev);
|
struct dwc2_priv *priv = dev_get_priv(dev);
|
||||||
fdt_addr_t addr;
|
fdt_addr_t addr;
|
||||||
|
|
||||||
addr = devfdt_get_addr(dev);
|
addr = dev_read_addr(dev);
|
||||||
if (addr == FDT_ADDR_T_NONE)
|
if (addr == FDT_ADDR_T_NONE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
priv->regs = (struct dwc2_core_regs *)addr;
|
priv->regs = (struct dwc2_core_regs *)addr;
|
||||||
|
|
|
@ -108,7 +108,7 @@ static int ehci_usb_probe(struct udevice *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hccr = map_physmem(devfdt_get_addr(dev), 0x100, MAP_NOCACHE);
|
hccr = map_physmem(dev_read_addr(dev), 0x100, MAP_NOCACHE);
|
||||||
hcor = (struct ehci_hcor *)((uintptr_t)hccr +
|
hcor = (struct ehci_hcor *)((uintptr_t)hccr +
|
||||||
HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
|
HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
|
||||||
|
|
||||||
|
|
|
@ -1596,6 +1596,17 @@ static int ehci_destroy_int_queue(struct udevice *dev, struct usb_device *udev,
|
||||||
return _ehci_destroy_int_queue(udev, queue);
|
return _ehci_destroy_int_queue(udev, queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ehci_get_max_xfer_size(struct udevice *dev, size_t *size)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* EHCD can handle any transfer length as long as there is enough
|
||||||
|
* free heap space left, hence set the theoretical max number here.
|
||||||
|
*/
|
||||||
|
*size = SIZE_MAX;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ehci_register(struct udevice *dev, struct ehci_hccr *hccr,
|
int ehci_register(struct udevice *dev, struct ehci_hccr *hccr,
|
||||||
struct ehci_hcor *hcor, const struct ehci_ops *ops,
|
struct ehci_hcor *hcor, const struct ehci_ops *ops,
|
||||||
uint tweaks, enum usb_init_type init)
|
uint tweaks, enum usb_init_type init)
|
||||||
|
@ -1658,6 +1669,7 @@ struct dm_usb_ops ehci_usb_ops = {
|
||||||
.create_int_queue = ehci_create_int_queue,
|
.create_int_queue = ehci_create_int_queue,
|
||||||
.poll_int_queue = ehci_poll_int_queue,
|
.poll_int_queue = ehci_poll_int_queue,
|
||||||
.destroy_int_queue = ehci_destroy_int_queue,
|
.destroy_int_queue = ehci_destroy_int_queue,
|
||||||
|
.get_max_xfer_size = ehci_get_max_xfer_size,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -150,6 +150,17 @@ int usb_update_hub_device(struct usb_device *udev)
|
||||||
return ops->update_hub_device(bus, udev);
|
return ops->update_hub_device(bus, udev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int usb_get_max_xfer_size(struct usb_device *udev, size_t *size)
|
||||||
|
{
|
||||||
|
struct udevice *bus = udev->controller_dev;
|
||||||
|
struct dm_usb_ops *ops = usb_get_ops(bus);
|
||||||
|
|
||||||
|
if (!ops->get_max_xfer_size)
|
||||||
|
return -ENOSYS;
|
||||||
|
|
||||||
|
return ops->get_max_xfer_size(bus, size);
|
||||||
|
}
|
||||||
|
|
||||||
int usb_stop(void)
|
int usb_stop(void)
|
||||||
{
|
{
|
||||||
struct udevice *bus;
|
struct udevice *bus;
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
*/
|
*/
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <fdtdec.h>
|
|
||||||
#include <libfdt.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
|
@ -46,7 +44,7 @@ static int xhci_usb_ofdata_to_platdata(struct udevice *dev)
|
||||||
/*
|
/*
|
||||||
* Get the base address for XHCI controller from the device node
|
* Get the base address for XHCI controller from the device node
|
||||||
*/
|
*/
|
||||||
plat->hcd_base = devfdt_get_addr(dev);
|
plat->hcd_base = dev_read_addr(dev);
|
||||||
if (plat->hcd_base == FDT_ADDR_T_NONE) {
|
if (plat->hcd_base == FDT_ADDR_T_NONE) {
|
||||||
error("Can't get the XHCI register base address\n");
|
error("Can't get the XHCI register base address\n");
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
|
@ -1228,6 +1228,20 @@ static int xhci_update_hub_device(struct udevice *dev, struct usb_device *udev)
|
||||||
return xhci_configure_endpoints(udev, false);
|
return xhci_configure_endpoints(udev, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int xhci_get_max_xfer_size(struct udevice *dev, size_t *size)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* xHCD allocates one segment which includes 64 TRBs for each endpoint
|
||||||
|
* and the last TRB in this segment is configured as a link TRB to form
|
||||||
|
* a TRB ring. Each TRB can transfer up to 64K bytes, however data
|
||||||
|
* buffers referenced by transfer TRBs shall not span 64KB boundaries.
|
||||||
|
* Hence the maximum number of TRBs we can use in one transfer is 62.
|
||||||
|
*/
|
||||||
|
*size = (TRBS_PER_SEGMENT - 2) * TRB_MAX_BUFF_SIZE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int xhci_register(struct udevice *dev, struct xhci_hccr *hccr,
|
int xhci_register(struct udevice *dev, struct xhci_hccr *hccr,
|
||||||
struct xhci_hcor *hcor)
|
struct xhci_hcor *hcor)
|
||||||
{
|
{
|
||||||
|
@ -1281,6 +1295,7 @@ struct dm_usb_ops xhci_usb_ops = {
|
||||||
.interrupt = xhci_submit_int_msg,
|
.interrupt = xhci_submit_int_msg,
|
||||||
.alloc_device = xhci_alloc_device,
|
.alloc_device = xhci_alloc_device,
|
||||||
.update_hub_device = xhci_update_hub_device,
|
.update_hub_device = xhci_update_hub_device,
|
||||||
|
.get_max_xfer_size = xhci_get_max_xfer_size,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1045,9 +1045,9 @@ struct xhci_scratchpad {
|
||||||
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
|
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
|
||||||
* meaning 64 ring segments.
|
* meaning 64 ring segments.
|
||||||
* Initial allocated size of the ERST, in number of entries */
|
* Initial allocated size of the ERST, in number of entries */
|
||||||
#define ERST_NUM_SEGS 3
|
#define ERST_NUM_SEGS 1
|
||||||
/* Initial number of event segment rings allocated */
|
/* Initial number of event segment rings allocated */
|
||||||
#define ERST_ENTRIES 3
|
#define ERST_ENTRIES 1
|
||||||
/* Initial allocated size of the ERST, in number of entries */
|
/* Initial allocated size of the ERST, in number of entries */
|
||||||
#define ERST_SIZE 64
|
#define ERST_SIZE 64
|
||||||
/* Poll every 60 seconds */
|
/* Poll every 60 seconds */
|
||||||
|
|
|
@ -766,6 +766,14 @@ struct dm_usb_ops {
|
||||||
* representation of this hub can be updated (xHCI)
|
* representation of this hub can be updated (xHCI)
|
||||||
*/
|
*/
|
||||||
int (*update_hub_device)(struct udevice *bus, struct usb_device *udev);
|
int (*update_hub_device)(struct udevice *bus, struct usb_device *udev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get_max_xfer_size() - Get HCD's maximum transfer bytes
|
||||||
|
*
|
||||||
|
* The HCD may have limitation on the maximum bytes to be transferred
|
||||||
|
* in a USB transfer. USB class driver needs to be aware of this.
|
||||||
|
*/
|
||||||
|
int (*get_max_xfer_size)(struct udevice *bus, size_t *size);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define usb_get_ops(dev) ((struct dm_usb_ops *)(dev)->driver->ops)
|
#define usb_get_ops(dev) ((struct dm_usb_ops *)(dev)->driver->ops)
|
||||||
|
@ -939,7 +947,7 @@ int usb_new_device(struct usb_device *dev);
|
||||||
int usb_alloc_device(struct usb_device *dev);
|
int usb_alloc_device(struct usb_device *dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update_hub_device() - Update HCD's internal representation of hub
|
* usb_update_hub_device() - Update HCD's internal representation of hub
|
||||||
*
|
*
|
||||||
* After a hub descriptor is fetched, notify HCD so that its internal
|
* After a hub descriptor is fetched, notify HCD so that its internal
|
||||||
* representation of this hub can be updated.
|
* representation of this hub can be updated.
|
||||||
|
@ -949,6 +957,18 @@ int usb_alloc_device(struct usb_device *dev);
|
||||||
*/
|
*/
|
||||||
int usb_update_hub_device(struct usb_device *dev);
|
int usb_update_hub_device(struct usb_device *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* usb_get_max_xfer_size() - Get HCD's maximum transfer bytes
|
||||||
|
*
|
||||||
|
* The HCD may have limitation on the maximum bytes to be transferred
|
||||||
|
* in a USB transfer. USB class driver needs to be aware of this.
|
||||||
|
*
|
||||||
|
* @dev: USB device
|
||||||
|
* @size: maximum transfer bytes
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int usb_get_max_xfer_size(struct usb_device *dev, size_t *size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* usb_emul_setup_device() - Set up a new USB device emulation
|
* usb_emul_setup_device() - Set up a new USB device emulation
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue