From mboxrd@z Thu Jan 1 00:00:00 1970 From: michael Date: Wed, 17 Dec 2008 17:23:53 +0100 Subject: [U-Boot] [USB EHCI PATCH 1/2] USB ehci remove infinite loop and use handshake function In-Reply-To: <200812171716.23806.sr@denx.de> References: <20081217154743.GA13568@gandalf.sssup.it> <200812171716.23806.sr@denx.de> Message-ID: <49492799.9050306@gandalf.sssup.it> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Stefan Roese wrote: > On Wednesday 17 December 2008, Michael Trimarchi wrote: > >> USB ehci code cleanup. Use handshake instead of infinite while loop >> to check the STD_ASS status >> >> Signed-off-by: Michael Trimarchi >> >> --- >> drivers/usb/usb_ehci_core.c | 53 >> ++++++++++++++++++++++--------------------- 1 files changed, 27 >> insertions(+), 26 deletions(-) >> >> diff --git a/drivers/usb/usb_ehci_core.c b/drivers/usb/usb_ehci_core.c >> index 07e9a6b..21fd7d0 100644 >> --- a/drivers/usb/usb_ehci_core.c >> +++ b/drivers/usb/usb_ehci_core.c >> @@ -28,7 +28,7 @@ >> #include "usb_ehci.h" >> >> int rootdev; >> -struct ehci_hccr *hccr; /* R/O registers, not need for volatile */ >> +struct ehci_hccr *hccr; /* R/O registers, not need for volatile */ >> volatile struct ehci_hcor *hcor; >> >> static uint16_t portreset; >> @@ -106,20 +106,19 @@ static struct descriptor { >> #define ehci_is_TDI() (0) >> #endif >> >> -static int handshake(uint32_t *ptr, uint32_t mask, uint32_t done, int >> msec) +static int handshake(uint32_t *ptr, uint32_t mask, uint32_t done, >> int usec) { >> uint32_t result; >> do { >> result = ehci_readl(ptr); >> - debug("handshake read reg(%x)=%x\n", (uint32_t)ptr, result); >> if (result == ~(uint32_t)0) >> return -1; >> result &= mask; >> if (result == done) >> return 0; >> - wait_ms(1); >> - msec--; >> - } while (msec > 0); >> + udelay(1); >> + usec--; >> + } while (usec > 0); >> return -1; >> } >> >> @@ -138,21 +137,21 @@ static int ehci_reset(void) >> cmd = ehci_readl(&hcor->or_usbcmd); >> cmd |= CMD_RESET; >> ehci_writel(&hcor->or_usbcmd, cmd); >> - ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250); >> + ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250 * 1000); >> if (ret < 0) { >> printf("EHCI fail to reset\n"); >> goto out; >> } >> >> -#if defined(CONFIG_EHCI_IS_TDI) >> - reg_ptr = (uint32_t *)((u8 *)hcor + USBMODE); >> - tmp = ehci_readl(reg_ptr); >> - tmp |= USBMODE_CM_HC; >> -#if defined(CONFIG_EHCI_MMIO_BIG_ENDIAN) >> - tmp |= USBMODE_BE; >> -#endif >> - ehci_writel(reg_ptr, tmp); >> -#endif >> + if (ehci_is_TDI()) { >> + reg_ptr = (uint32_t *)((u8 *)hcor + USBMODE); >> + tmp = ehci_readl(reg_ptr); >> + tmp |= USBMODE_CM_HC; >> + #if defined(CONFIG_EHCI_MMIO_BIG_ENDIAN) >> > > I prefer that the "#if" stays in column 0. > Yes, thanks. > >> + tmp |= USBMODE_BE; >> > > Indentation problem. > > Best regards, > Stefan > > ===================================================================== > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de > ===================================================================== > > Regards Michael