PERFORCE change 147391 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Thu Aug 14 15:30:54 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=147391
Change 147391 by hselasky at hselasky_laptop001 on 2008/08/14 15:30:46
Replace some DELAY() calls by "usb2_pause_mtx()".
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/musb2_otg.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.c#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/at91dci.c#8 (text+ko) ====
@@ -1427,7 +1427,7 @@
(sc->sc_clocks_on) (sc->sc_clocks_arg);
}
/* wait a little for things to stabilise */
- DELAY(1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
/* disable and clear all interrupts */
==== //depot/projects/usb/src/sys/dev/usb2/controller/at91dci_atmelarm.c#8 (text+ko) ====
@@ -174,8 +174,7 @@
at91_udp_pull_down(sc);
/* wait 10ms for pulldown to stabilise */
-
- DELAY(10000);
+ usb2_pause_mtx(NULL, 10);
sc->sc_iclk = at91_pmc_clock_ref("udc_clk");
sc->sc_fclk = at91_pmc_clock_ref("udpck");
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2.c#11 (text+ko) ====
@@ -161,7 +161,7 @@
EOWRITE4(sc, EHCI_USBCMD, 0); /* Halt controller */
for (n = 0; n != 100; n++) {
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
hcr = EOREAD4(sc, EHCI_USBSTS);
if (hcr & EHCI_STS_HCH) {
hcr = 0;
@@ -177,7 +177,7 @@
EOWRITE4(sc, EHCI_USBCMD, EHCI_CMD_HCRESET);
for (n = 0; n != 100; n++) {
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
hcr = EOREAD4(sc, EHCI_USBCMD);
if (!(hcr & EHCI_CMD_HCRESET)) {
hcr = 0;
@@ -462,7 +462,7 @@
EOWRITE4(sc, EHCI_CONFIGFLAG, EHCI_CONF_CF);
for (i = 0; i < 100; i++) {
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
hcr = EOREAD4(sc, EHCI_USBSTS) & EHCI_STS_HCH;
if (!hcr) {
break;
@@ -498,10 +498,11 @@
if (ehci_hc_reset(sc)) {
DPRINTF("reset failed!\n");
}
+ /* XXX let stray task complete */
+ usb2_pause_mtx(&sc->sc_bus.mtx, 50);
+
mtx_unlock(&sc->sc_bus.mtx);
- DELAY(1000 * 300); /* XXX let stray task complete */
-
usb2_callout_drain(&sc->sc_tmo_pcd);
return;
@@ -537,7 +538,7 @@
if (hcr == 0) {
break;
}
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
}
if (hcr != 0) {
@@ -551,7 +552,7 @@
if (hcr == EHCI_STS_HCH) {
break;
}
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
}
if (hcr != EHCI_STS_HCH) {
@@ -595,7 +596,8 @@
}
if (hcr) {
- DELAY(1000 * USB_RESUME_WAIT);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_RESUME_WAIT);
for (i = 1; i <= sc->sc_noport; i++) {
cmd = EOREAD4(sc, EHCI_PORTSC(i));
@@ -613,15 +615,16 @@
if (hcr != EHCI_STS_HCH) {
break;
}
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
}
if (hcr == EHCI_STS_HCH) {
device_printf(sc->sc_bus.bdev, "config timeout\n");
}
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_RESUME_WAIT);
+
mtx_unlock(&sc->sc_bus.mtx);
- DELAY(1000 * USB_RESUME_WAIT);
-
/* catch any lost interrupts */
ehci_do_poll(&sc->sc_bus);
@@ -3357,9 +3360,8 @@
DELAY(USB_PORT_ROOT_RESET_DELAY * 1000);
} else {
/* Wait for reset to complete. */
- l = usb2_config_td_sleep
- (&sc->sc_config_td,
- (hz * USB_PORT_ROOT_RESET_DELAY) / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_PORT_ROOT_RESET_DELAY);
}
/* Terminate reset sequence. */
@@ -3370,9 +3372,8 @@
DELAY(EHCI_PORT_RESET_COMPLETE * 1000);
} else {
/* Wait for HC to complete reset. */
- l = usb2_config_td_sleep
- (&sc->sc_config_td,
- (hz * EHCI_PORT_RESET_COMPLETE) / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ EHCI_PORT_RESET_COMPLETE);
}
v = EOREAD4(sc, port);
==== //depot/projects/usb/src/sys/dev/usb2/controller/ehci2_pci.c#8 (text+ko) ====
@@ -453,7 +453,7 @@
"to give up control\n");
pci_write_config(self, eecp +
EHCI_LEGSUP_OS_SEM, 1, 1);
- to = 5000;
+ to = 500;
while (1) {
bios_sem = pci_read_config(self, eecp +
EHCI_LEGSUP_BIOS_SEM, 1);
@@ -465,7 +465,7 @@
"timed out waiting for BIOS\n");
break;
}
- DELAY(1000);
+ usb2_pause_mtx(NULL, 10); /* wait 10ms */
}
}
return;
==== //depot/projects/usb/src/sys/dev/usb2/controller/musb2_otg.c#4 (text+ko) ====
@@ -238,11 +238,7 @@
DELAY(10000);
} else {
/* Wait for reset to complete. */
- if (usb2_config_td_sleep
- (&sc->sc_config_td,
- (hz / 100))) {
- /* ignore */
- }
+ usb2_pause_mtx(&sc->sc_bus.mtx, 10);
}
temp = MUSB2_READ_1(sc, MUSB2_REG_POWER);
@@ -1514,7 +1510,7 @@
(sc->sc_clocks_on) (sc->sc_clocks_arg);
}
/* wait a little for things to stabilise */
- DELAY(1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
/* disable and clear all interrupts */
@@ -1536,8 +1532,7 @@
musbotg_pull_common(sc, 0);
/* wait a little bit (10ms) */
-
- DELAY(10000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 10);
/* enable double packet buffering */
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#10 (text+ko) ====
@@ -173,7 +173,7 @@
DPRINTF("SMM active, request owner change\n");
OWRITE4(sc, OHCI_COMMAND_STATUS, OHCI_OCR);
for (i = 0; (i < 100) && (ctl & OHCI_IR); i++) {
- DELAY(1000 * 1);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
ctl = OREAD4(sc, OHCI_CONTROL);
}
if (ctl & OHCI_IR) {
@@ -186,7 +186,8 @@
DPRINTF("cold started\n");
reset:
/* controller was cold started */
- DELAY(1000 * USB_BUS_RESET_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_BUS_RESET_DELAY);
}
/*
@@ -195,7 +196,9 @@
*/
DPRINTF("%s: resetting\n", device_get_nameunit(sc->sc_bus.bdev));
OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET);
- DELAY(1000 * USB_BUS_RESET_DELAY);
+
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_BUS_RESET_DELAY);
/* we now own the host controller and the bus has been reset */
ival = OHCI_GET_IVAL(OREAD4(sc, OHCI_FM_INTERVAL));
@@ -257,7 +260,8 @@
desca = OREAD4(sc, OHCI_RH_DESCRIPTOR_A);
OWRITE4(sc, OHCI_RH_DESCRIPTOR_A, desca | OHCI_NOCP);
OWRITE4(sc, OHCI_RH_STATUS, OHCI_LPSC); /* Enable port power */
- DELAY(1000 * OHCI_ENABLE_POWER_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ OHCI_ENABLE_POWER_DELAY);
OWRITE4(sc, OHCI_RH_DESCRIPTOR_A, desca);
/*
@@ -266,7 +270,8 @@
*/
sc->sc_noport = 0;
for (i = 0; (i < 10) && (sc->sc_noport == 0); i++) {
- DELAY(1000 * OHCI_READ_DESC_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ OHCI_READ_DESC_DELAY);
sc->sc_noport = OHCI_GET_NDP(OREAD4(sc, OHCI_RH_DESCRIPTOR_A));
}
@@ -426,10 +431,11 @@
OWRITE4(sc, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS);
OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET);
+ /* XXX let stray task complete */
+ usb2_pause_mtx(&sc->sc_bus.mtx, 50);
+
mtx_unlock(&sc->sc_bus.mtx);
- DELAY(1000 * 50); /* XXX let stray task complete */
-
usb2_callout_drain(&sc->sc_tmo_rhsc);
return;
@@ -463,7 +469,9 @@
}
ctl |= OHCI_HCFS_SUSPEND;
OWRITE4(sc, OHCI_CONTROL, ctl);
- DELAY(1000 * USB_RESUME_WAIT);
+
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_RESUME_WAIT);
mtx_unlock(&sc->sc_bus.mtx);
return;
@@ -495,10 +503,10 @@
ctl = OREAD4(sc, OHCI_CONTROL);
ctl |= OHCI_HCFS_RESUME;
OWRITE4(sc, OHCI_CONTROL, ctl);
- DELAY(1000 * USB_RESUME_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx, USB_RESUME_DELAY);
ctl = (ctl & ~OHCI_HCFS_MASK) | OHCI_HCFS_OPERATIONAL;
OWRITE4(sc, OHCI_CONTROL, ctl);
- DELAY(1000 * USB_RESUME_RECOVERY);
+ usb2_pause_mtx(&sc->sc_bus.mtx, USB_RESUME_RECOVERY);
sc->sc_control = sc->sc_intre = 0;
mtx_unlock(&sc->sc_bus.mtx);
@@ -2448,9 +2456,8 @@
/* polling */
DELAY(USB_PORT_ROOT_RESET_DELAY * 1000);
} else {
- l = usb2_config_td_sleep
- (&sc->sc_config_td,
- (hz * USB_PORT_ROOT_RESET_DELAY) / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_PORT_ROOT_RESET_DELAY);
}
if ((OREAD4(sc, port) & UPS_RESET) == 0) {
==== //depot/projects/usb/src/sys/dev/usb2/controller/uhci2.c#8 (text+ko) ====
@@ -279,7 +279,8 @@
/* wait */
- DELAY(1000 * USB_BUS_RESET_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_BUS_RESET_DELAY);
/* terminate all transfers */
@@ -291,7 +292,7 @@
while (n--) {
/* wait one millisecond */
- DELAY(1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
if (!(UREAD2(sc, UHCI_CMD) & UHCI_CMD_HCRESET)) {
goto done_1;
@@ -307,7 +308,7 @@
while (n--) {
/* wait one millisecond */
- DELAY(1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
/* check if HC is stopped */
if (UREAD2(sc, UHCI_STS) & UHCI_STS_HCH) {
@@ -354,7 +355,7 @@
while (n--) {
/* wait one millisecond */
- DELAY(1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
/* check that controller has started */
@@ -647,7 +648,7 @@
UHCICMD(sc, UHCI_CMD_EGSM);
- DELAY(1000 * USB_RESUME_WAIT);
+ usb2_pause_mtx(&sc->sc_bus.mtx, USB_RESUME_WAIT);
mtx_unlock(&sc->sc_bus.mtx);
return;
@@ -666,7 +667,8 @@
UHCICMD(sc, UHCI_CMD_FGR);
- DELAY(1000 * USB_RESUME_DELAY);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_RESUME_DELAY);
/* and start traffic again */
@@ -2420,7 +2422,6 @@
uint16_t port;
uint16_t x;
uint8_t lim;
- uint8_t l;
if (index == 1)
port = UHCI_PORTSC1;
@@ -2436,8 +2437,8 @@
/* polling */
DELAY(USB_PORT_ROOT_RESET_DELAY * 1000);
} else {
- l = usb2_config_td_sleep(&sc->sc_config_td,
- (hz * USB_PORT_ROOT_RESET_DELAY) / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_PORT_ROOT_RESET_DELAY);
}
DPRINTFN(4, "uhci port %d reset, status0 = 0x%04x\n",
@@ -2450,8 +2451,7 @@
/* polling */
DELAY(1000);
} else {
- l = usb2_config_td_sleep(&sc->sc_config_td,
- hz / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 1);
}
DPRINTFN(4, "uhci port %d reset, status1 = 0x%04x\n",
@@ -2466,8 +2466,8 @@
/* polling */
DELAY(USB_PORT_RESET_DELAY * 1000);
} else {
- l = usb2_config_td_sleep(&sc->sc_config_td,
- (hz * USB_PORT_RESET_DELAY) / 1000);
+ usb2_pause_mtx(&sc->sc_bus.mtx,
+ USB_PORT_RESET_DELAY);
}
x = UREAD2(sc, port);
==== //depot/projects/usb/src/sys/dev/usb2/controller/uss820dci.c#7 (text+ko) ====
@@ -1386,8 +1386,7 @@
uss820dci_pull_down(sc);
/* wait 10ms for pulldown to stabilise */
-
- DELAY(10000);
+ usb2_pause_mtx(&sc->sc_bus.mtx, 10);
/* check hardware revision */
temp = USS820_READ_1(sc, USS820_REV);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.c#4 (text+ko) ====
@@ -125,9 +125,9 @@
* usb2_pause_mtx - factored out code
*
* This function will delay the code by the passed number of
- * milliseconds. The passed mutex "mtx" will be dropped while
- * waiting. The number of milliseconds per second is 1024 for sake of
- * optimisation.
+ * milliseconds. The passed mutex "mtx" will be dropped while waiting,
+ * if "mtx" is not NULL. The number of milliseconds per second is 1024
+ * for sake of optimisation.
*------------------------------------------------------------------------*/
void
usb2_pause_mtx(struct mtx *mtx, uint32_t ms)
@@ -145,12 +145,14 @@
*/
ms++;
- mtx_unlock(mtx);
+ if (mtx != NULL)
+ mtx_unlock(mtx);
if (pause("USBWAIT", ms)) {
/* ignore */
}
- mtx_lock(mtx);
+ if (mtx != NULL)
+ mtx_lock(mtx);
}
return;
}
More information about the p4-projects
mailing list