Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Aug 2008 15:30:53 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 147391 for review
Message-ID:  <200808141530.m7EFUr82097041@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=147391

Change 147391 by hselasky@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;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200808141530.m7EFUr82097041>