mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 12:13:00 -04:00
usb: musb: add timeout via CONFIG_MUSB_TIMEOUT
Signed-off-by: Bryan Wu <bryan.wu@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Remy Bohmer <linux@bohmer.net>
This commit is contained in:
parent
7984967a94
commit
c3a012ce65
@ -111,6 +111,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
|
|||||||
{
|
{
|
||||||
u16 csr;
|
u16 csr;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
|
int timeout = CONFIG_MUSB_TIMEOUT;
|
||||||
|
|
||||||
while (result > 0) {
|
while (result > 0) {
|
||||||
csr = readw(&musbr->txcsr);
|
csr = readw(&musbr->txcsr);
|
||||||
@ -152,7 +153,17 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check the timeout */
|
||||||
|
if (--timeout)
|
||||||
|
udelay(1);
|
||||||
|
else {
|
||||||
|
dev->status = USB_ST_CRC_ERR;
|
||||||
|
result = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,6 +173,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
|
|||||||
static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
|
static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
|
||||||
{
|
{
|
||||||
u16 csr;
|
u16 csr;
|
||||||
|
int timeout = CONFIG_MUSB_TIMEOUT;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (check_stall(ep, 1)) {
|
if (check_stall(ep, 1)) {
|
||||||
@ -174,6 +186,15 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
|
|||||||
dev->status = USB_ST_CRC_ERR;
|
dev->status = USB_ST_CRC_ERR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check the timeout */
|
||||||
|
if (--timeout)
|
||||||
|
udelay(1);
|
||||||
|
else {
|
||||||
|
dev->status = USB_ST_CRC_ERR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
} while (csr & MUSB_TXCSR_TXPKTRDY);
|
} while (csr & MUSB_TXCSR_TXPKTRDY);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -184,6 +205,7 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
|
|||||||
static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep)
|
static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep)
|
||||||
{
|
{
|
||||||
u16 csr;
|
u16 csr;
|
||||||
|
int timeout = CONFIG_MUSB_TIMEOUT;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (check_stall(ep, 0)) {
|
if (check_stall(ep, 0)) {
|
||||||
@ -196,6 +218,15 @@ static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep)
|
|||||||
dev->status = USB_ST_CRC_ERR;
|
dev->status = USB_ST_CRC_ERR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check the timeout */
|
||||||
|
if (--timeout)
|
||||||
|
udelay(1);
|
||||||
|
else {
|
||||||
|
dev->status = USB_ST_CRC_ERR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
} while (!(csr & MUSB_RXCSR_RXPKTRDY));
|
} while (!(csr & MUSB_RXCSR_RXPKTRDY));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,10 @@
|
|||||||
extern unsigned char new[];
|
extern unsigned char new[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_MUSB_TIMEOUT
|
||||||
|
# define CONFIG_MUSB_TIMEOUT 100000
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This defines the endpoint number used for control transfers */
|
/* This defines the endpoint number used for control transfers */
|
||||||
#define MUSB_CONTROL_EP 0
|
#define MUSB_CONTROL_EP 0
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user