[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