[RFC v2 2/3] WIP: usb: ehci-hcd: use non-interruptible version of mdelay()
Peter Mamonov
pmamonov at gmail.com
Fri Sep 11 10:27:55 PDT 2015
Signed-off-by: Peter Mamonov <pmamonov at gmail.com>
---
drivers/usb/host/ehci-hcd.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index c9bf703..3d89ec5 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -133,6 +133,14 @@ static struct descriptor {
},
};
+static inline void mdelay_ni(unsigned long msecs)
+{
+ uint64_t start = get_time_ns();
+
+ while (!is_timeout_non_interruptible(start, msecs * MSECOND))
+ ;
+}
+
#define ehci_is_TDI() (ehci->flags & EHCI_HAS_TT)
static int handshake(uint32_t *ptr, uint32_t mask, uint32_t done, int usec)
@@ -673,7 +681,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
* root
*/
ehci_powerup_fixup(ehci);
- mdelay(50);
+ mdelay_ni(50);
ehci->portreset |= 1 << port;
/* terminate the reset */
ehci_writel(status_reg, reg & ~EHCI_PS_PR);
@@ -736,7 +744,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
goto unknown;
}
- mdelay(1);
+ mdelay_ni(1);
len = min3(srclen, (int)le16_to_cpu(req->length), length);
if (srcptr != NULL && len > 0)
memcpy(buffer, srcptr, len);
--
2.1.4
More information about the barebox
mailing list