[U-Boot] Is it an error in function ehci_submit_root() in ehci-hcd.c
Lv Terry-R65388
Rui.Lv at freescale.com
Thu Jul 30 03:07:29 CEST 2009
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:prafulla at marvell.com]
Sent: 2009年7月30日 1:30
To: Michael Trimarchi; Remy Bohmer
Cc: Lv Terry-R65388; u-boot at 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:trimarchi at gandalf.sssup.it]
> Sent: Wednesday, July 29, 2009 8:41 PM
> To: Remy Bohmer
> Cc: Lv Terry-R65388; Prafulla Wadaskar; u-boot at 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.Lv at 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
> >
> >
>
>
More information about the U-Boot
mailing list