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>