Hi Prafulla, I'm using a little-endian machine. My board is freescale i.mx51, the core is arm12.
I will try to correct these two places and test it in my board. Hope it can work. Thanks~~ Yours Terry -----Original Message----- From: Prafulla Wadaskar [mailto:prafu...@marvell.com] Sent: 2009年7月30日 1:30 To: Michael Trimarchi; Remy Bohmer Cc: Lv Terry-R65388; u-boot@lists.denx.de; Ashish Karkare; Prabhanjan Sarnaik Subject: RE: [U-Boot] Is it an error in function ehci_submit_root() in ehci-hcd.c > -----Original Message----- > From: Michael Trimarchi [mailto:trimar...@gandalf.sssup.it] > Sent: Wednesday, July 29, 2009 8:41 PM > To: Remy Bohmer > Cc: Lv Terry-R65388; Prafulla Wadaskar; u-boot@lists.denx.de > Subject: Re: [U-Boot] Is it an error in function > ehci_submit_root() in ehci-hcd.c > > Remy Bohmer wrote: > > Hi, > > > > 2009/7/29 Lv Terry-R65388 <rui...@freescale.com>: > > > >> Hi All, > >> > >> I'm trying to enable ehci usb in our board and I found > that there > >> maybe two issues in funcion ehci_submit_root() in ehci-hcd.c. > >> > >> 1) > >> In ehci_submit_root(), the function will do the > following operation. > >> > >> From line 553 in ehci-hcd.c: > >> > >> typeReq = req->request << 8 | req->requesttype; > >> > >> switch (le16_to_cpu(typeReq)) { > >> case DeviceRequest | USB_REQ_GET_DESCRIPTOR: > >> ... > >> ... > >> case USB_REQ_GET_DESCRIPTOR | ((USB_DIR_IN | USB_RT_HUB) << 8): > >> ... > >> ... > >> } > >> > >> As in function usb_get_descriptor() in usb.c, > >> > >> res = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), > >> USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, > >> (type << 8) + index, 0, > >> buf, size, USB_CNTL_TIMEOUT); > >> > >> req->request will be assigned USB_REQ_GET_DESCRIPTOR, > >> req->requesttype will be assigned USB_DIR_IN. > >> The value of typeReq will be 0x680 which can't match > any value in > >> switch (le16_to_cpu(typeReq)) . > >> > > > > In current mainline this le16_to_cpu() macro has been removed. > > Does that change anything? > > > > > >> Do I miss any config here? > >> > > > > I guess not. > > > > > >> 2) > >> In funcion usb_get_descriptor() in usb.c, it will pass > index 0 to > >> usb_control_msg. setup_packet.index will be assigned 0. > >> > >> res = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), > >> USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, > >> (type << 8) + index, 0, > >> buf, size, USB_CNTL_TIMEOUT); /* The sixty > >> parameter is index */ > >> > >> Then in funcion ehci_submit_root() in ehci-hcd.c, > >> > >> status_reg = (uint32_t > *)&hcor->or_portsc[le16_to_cpu(req->index) > >> - 1]; > >> > >> (le16_to_cpu(req->index) - 1) will be -1 here. > >> > >> Is it correct? > >> > > > > Nice catch! > > Prafulla/Michael, what do you think? Hi Terry BTW: Which is your board? Is it big endian machine? I am curious about it :) Regards.. Prafulla . . . > > > That we need a patch here urgent :). > > Terry, Can you provide the proper fix? > > Michael > > Kind Regards, > > > > Remy > > > > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot