[U-Boot] [PATCH v6 2/4] usb: ehci: add weak-aliased functions to portsc & tdi

Kuo-Jung Su dantesu at gmail.com
Mon May 13 10:09:58 CEST 2013


2013/5/13 Marek Vasut <marex at denx.de>:
> Dear Kuo-Jung Su,
>
>> From: Kuo-Jung Su <dantesu at faraday-tech.com>
>>
>> There is at least one non-EHCI compliant controller (i.e. Faraday EHCI)
>> known to implement a non-standard TDI stuff.
>> Futhermore, it not only leave reserved and CONFIGFLAG registers
>> un-implemented but also has their address spaces removed.
>>
>> And thus, we need weak-aliased functions to both TDI stuff
>> and PORTSC registers for interface abstraction.
>>
>> Signed-off-by: Kuo-Jung Su <dantesu at faraday-tech.com>
>> CC: Marek Vasut <marex at denx.de>
>> ---
>> Changes for v6:
>>    - Simplify weak aliased function declaration
>>    - Drop redundant line feed
>>
>> Changes for v5:
>>    - Split up from Faraday EHCI patch
>>
>> Changes for v2 - v4:
>>    - See 'usb: ehci: add Faraday USB 2.0 EHCI support'
>>
>>  drivers/usb/host/ehci-hcd.c |   91
>> ++++++++++++++++++++++++++----------------- 1 file changed, 55
>> insertions(+), 36 deletions(-)
>>
>> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
>> index c816878..ae3f2a4 100644
>> --- a/drivers/usb/host/ehci-hcd.c
>> +++ b/drivers/usb/host/ehci-hcd.c
>> @@ -117,10 +117,44 @@ static struct descriptor {
>>  };
>>
>>  #if defined(CONFIG_EHCI_IS_TDI)
>> -#define ehci_is_TDI()        (1)
>> -#else
>> -#define ehci_is_TDI()        (0)
>> +# define ehci_is_TDI()       (1)
>
> btw you can remove those braces around (1) and (0) below. But I have one more
> question ...
>

Got it, thanks

> [...]
>
>> @@ -609,13 +644,10 @@ ehci_submit_root(struct usb_device *dev, unsigned
>> long pipe, void *buffer, uint32_t *status_reg;
>>       struct ehci_ctrl *ctrl = dev->controller;
>>
>> -     if (le16_to_cpu(req->index) > CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS) {
>> -             printf("The request port(%d) is not configured\n",
>> -                     le16_to_cpu(req->index) - 1);
>> +     status_reg = ehci_get_portsc_register(ctrl->hcor,
>> +             le16_to_cpu(req->index) - 1);
>> +     if (!status_reg)
>
> What happens here if req->index is zero ?
>
> Hint: the above code always does unsigned comparison ...
>
> I think you should make the second argument of ehci_get_portsc_register()
> unsigned short too (as is req->index in struct devrequest).
>

Sorry, but I'll prefer 'int' over 'unsigned short', since it looks to me that
the u-boot would set 'req->index' to 0 at startup, which results in
a 'port = -1' to be passed to ehci_get_portsc_register().

And I think '-1' is a better self-explain value, so I'd like to stick with 'int'

>>               return -1;
>> -     }
>> -     status_reg = (uint32_t *)&ctrl->hcor->or_portsc[
>> -                                             le16_to_cpu(req->index) - 1];
>>       srclen = 0;
>>
>>       debug("req=%u (%#x), type=%u (%#x), value=%u, index=%u\n",
>
> [...]
>
> Best regards,
> Marek Vasut



--
Best wishes,
Kuo-Jung Su


More information about the U-Boot mailing list