[U-Boot] Is it an error in function ehci_submit_root() in ehci-hcd.c
Remy Bohmer
linux at bohmer.net
Wed Jul 29 16:59:13 CEST 2009
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?
Kind Regards,
Remy
More information about the U-Boot
mailing list