[PATCH] ehci-hcd.c: handle EHCI_HAS_TT in ehci_reset() during startup

Antony Pavlov antonynpavlov at gmail.com
Tue Sep 13 08:14:48 EDT 2011


On 13 September 2011 11:34, Sascha Hauer <s.hauer at pengutronix.de> wrote:
> On Mon, Sep 12, 2011 at 02:26:00PM +0400, Antony Pavlov wrote:
>> Signed-off-by: Antony Pavlov <antonynpavlov at gmail.com>
>> ---
>>  drivers/usb/host/ehci-hcd.c |    9 ++-------
>>  1 files changed, 2 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
>> index 60fc181..883dc07 100644
>> --- a/drivers/usb/host/ehci-hcd.c
>> +++ b/drivers/usb/host/ehci-hcd.c
>> @@ -921,15 +921,10 @@ static int ehci_probe(struct device_d *dev)
>>       host->submit_control_msg = submit_control_msg;
>>       host->submit_bulk_msg = submit_bulk_msg;
>>
>> -     if (ehci->flags & EHCI_HAS_TT) {
>> -             /* Set to host mode */
>> -             reg = ehci_readl(ehci->hcor + USBMODE);
>> -             reg |= USBMODE_CM_HC;
>> -             writel(reg, ehci->hcor + USBMODE);
>> -     }
>> -
>>       usb_register_host(host);
>>
>> +     ehci_reset(ehci);
>> +
>
> ehci_reset is called from ehci_init. Isn't that enough or do we have to
> call it explicitely here?

I suppose it's preferable reset the controller after changing "host
controller mode" bit (USBMODE_CM_HC). Let's check the file
drivers/usb/host/ehci-hcd.c from linux kernel sources, in ehci_reset()
we have:

    if (ehci_is_TDI(ehci))
                    tdi_reset (ehci);

On my Tegra board I found the problem: board hangs up on the first
ehci_readl() after setting USBMODE_CM_HC bit.

>>       reg = HC_VERSION(ehci_readl(&ehci->hccr->cr_capbase));
>>       dev_info(dev, "USB EHCI %x.%02x\n", reg >> 8, reg & 0xff);
>>
>> --
>> 1.7.5.4
>>

-- 
Best regards,
  Antony Pavlov



More information about the barebox mailing list