Re: [linux-sunxi] [PATCH v3 1/2] ehci-platform: Add support for controllers with multiple reset lines

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On 24/02/16 14:42, Hans de Goede wrote:
> Hi,
> 
> On 24-02-16 15:30, Andre Przywara wrote:
>> Hi Hans,
>>
>> On 24/02/16 14:07, Hans de Goede wrote:
>>> Hi,
>>>
>>> On 24-02-16 14:59, Andre Przywara wrote:
>>>> Hi,
>>>>
>>>> (dropping some lists and people)
>>>>
>>>> On 24/02/16 11:15, Hans de Goede wrote:
>>>>> From: Reinder de Haan <patchesrdh@xxxxxxxxx>
>>>>>
>>>>> At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
>>>>> reset lines, the controller will not initialize while the reset for
>>>>> its companion is still asserted, which means we need to de-assert
>>>>> 2 resets for the controller to work.
>>>>
>>>> Interesting, is that documented somewhere or has this been found out by
>>>> try-and-error?
>>>
>>> Found out by try-and-error.
>>
>> I was afraid so ;-)
>>
>>>> I was experimenting with USB on the Pine64 yesterday and stumbled upon
>>>> the failing OHCI reset (because it now needs bits 16 _and_ 17 to be set
>>>> for the OHCI PHY to reset), but couldn't get the EHCI controller to
>>>> work
>>>> properly also.
>>>
>>> Then it likely is something different, the problem on the H3 causes
>>> the ohci / ehci driver to not load at all, since the registers read
>>> all 00 (or was it FF ?), which causes the reset-control and wait for
>>> ack code in the generic bits of the drivers to fail (IIRC).
>>
>> Too bad, I was hoping that this would fix it for me ;-)
>>
>>>> How would this behaviour manifest? I don't see failure messages with my
>>>> new DT (the driver seems to happily initialize), but it doesn't show
>>>> anything other than the root hub even when plugging in devices.
>>>
>>> This may be a phy init problem (specifically missing something
>>> similar to
>>> sun4i_usb_phy_passby() in drivers/phy/phy-sun4i-usb.c for the A64),
>>
>> Ah, that sounds more likely. I was wondering what "pmu" meant in this
>> regard.
>> Where was this "pmu1" address in the DT gathered from? I just subtracted
>> the 4K offset that make the difference between the A64 and A33 (which
>> seems to be the closest in terms of USB), but the memory map does not
>> show where this magic register should be. There seems to be "nothing" at
>> 0x01c18000 for the A33 (according to the manual), but the A64 has the
>> OTG control registers in the respective region.
>>
>> A33: OTG HCI: 0x01c19000, EHCI0 HCI: 0x01c1a000, pmu1: 0x01c1a800
>> A64: OTG HCI: 0x01c1a000, EHCI0 HCI: 0x01c1b000, pmu???
>>
>> Do you have any clue here about the pmu1 register whereabouts on the A64?
> 
> With Allwinners BSP kernels for older boards you can typically find all
> the right phy init magic in:
> 
> https://github.com/allwinner-zh/linux-3.4-sunxi/blob/master/drivers/usb/host/sunxi_hci.c
> 
> 
> And for the passby / pmu stuff specifically in usb_passby(), in the above
> version of the code that uses:
> 
> reg_value = USBC_Readl(sunxi_hci->usb_vbase + SUNXI_USB_PMU_IRQ_ENABLE);
> 
> Whereby vbase gets set in init_sunxi_hci() as:
> 
> sunxi_hci->usb_vbase = (void __iomem *)usbc_base[sunxi_hci->usbc_no];
> 
> With usbc_base being:
> 
> static u32 usbc_base[4] = {(u32 __force)SUNXI_USB_HCI0_VBASE, (u32
> __force)SUNXI_USB_HCI1_VBASE, (u32 __force)SUNXI_USB_HCI2_VBASE, (u32
> __force)SUNXI_USB_HCI3_VBASE};
> 
> For the H3 at-least,  this is all wrapped in model specific #ifdef
> blocks ...
> 
> But it is all contained in that one file, for the SUNXI_USB_HCI0_VBASE
> defines do a grep in the mach include dir.

Wow, thanks a lot for the pointers, that should give me enough clues to
tackle this later today.

> So assuming you've some A64 BSP kernel sources, that is where I would
> start looking / digging (this has not failed me yet to get the usb
> hosts running). This file will typically also contain hints on which
> clocks you need to enable.

Yeah, I took a brief look in there yesterday, but was disguste^Wconfused
quickly. Will take a deep breath before doing that again tonight.

>>> maybe you've not enabled the 5V power to the host USB ports ?
>>>
>>> My first step would be to check the 5v plug something with a powerled
>>> or some such into the usb port and if the led does not light up
>>> you need to drive some gpio high (typically) or enable some regulator
>>> somewhere.
>>
>> So the USB pendrive I insert lights up, that's why I suspect the
>> regulator is working.
> 
> Yeah, then it likely is not a 5v problem, although I've seen cases where
> there was some semi-high value resistor shortening a FET to switch the 5V
> on/off, so it would seem if there is 5V there, but it is not really usable
> (cannot deliver much if any current) until you actually drive the FET.

I was wondering about that possibility also. I can try to use some self
powered USB device to rule this out.

Thanks!
Andre.

> That is likely not the case here, but I've seen this on at least one
> board ...
> 
> Regards,
> 
> Hans
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux