Re: ci_hdrc_tegra hard locks kernel when set to dr_mode = "otg"

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

 



30.09.2019 01:15, Peter Geis пишет:
> Good Afternoon,
> 
> So I have dug a bit further into it.
> The tegra-udc driver defaults to host mode when set to otg.
> If the tegra-udc driver is in host mode while plugged into another
> host, the kernel will hard lock.
> If the tegra-udc driver is in host mode with a device attached the
> device enumerates correctly.
> In this state, if you change the state to gadget, the driver goes into
> a broken state.
> The gadget side is in gadget mode, but the host does not enumerate the device.
> 
> As it stands the code path for the tegra-udc driver is broken in OTG mode.
> Without proper extcon support we can't support dynamic switching
> correctly anyways.
> My hack around method of retaining the phy in peripheral mode and
> switching drivers to change modes only works because both code paths
> are incomplete as well, and should not be relied upon.
> 
> I think for the time being, the tegra-udc driver should check for
> host, peripheral, or otg mode.
> If it detects the device is set to otg mode, it should print an error
> message describing the current situation and fail out.
> 
> If I had a device to test against with an extcon capable port, I'd try
> some more experimenting with the chipidea drivers to see if I can get
> it to work.
> 
> What do you think?
> 
> Dmitry,
> Do you have any devices to experiment with this?

Hello Peter,

I had Nexus 7 v2013 that supported OTG (IIRC), unfortunately it broke
about a year ago. I also have Nexus 7 v2012, but it doesn't support OTG
(AFAIK). So no, I don't have hardware to test OTG.

> On Sat, Sep 28, 2019 at 11:36 PM Peter Chen <peter.chen@xxxxxxx> wrote:
>>
>>
>>>
>>> I've encountered an odd situation where the CI Dual Role driver hard locks the
>>> kernel on the Ouya (Tegra 3).
>>> I was attempting to set up manual mode switching in the kernel, as the Ouya lacks
>>> hardware support for the ID pin and no voltage output on that port.
>>> I found that the kernel was hard locking whenever I had the dr_mode = "otg" set in
>>> the devicetree.
>>
>> It seems Tegra doesn't support host mode using chipidea driver. The ci_hdrc_tegra.c
>> only supports device mode. Thierry, could you confirm that?
>>
>> Peter
>>
>>> No further output was seen on the console, and sysreq does not respond.
>>> It occurs both in module and builtin mode.
>>>
>>> I have however found a workaround.
>>> By setting the dual role usb device to:
>>> compatible = "nvidia,tegra30-ehci", "nvidia,tegra30-udc"; and setting the assigned
>>> phy to:
>>> dr_mode = "peripheral";
>>> I can achieve rudimentary live switching of roles.
>>> The device defaults to host mode, as the ehci driver enumerates first.
>>> By unbinding the tegra-ehci driver and binding the tegra-udc driver, I can switch to
>>> gadget mode.
>>> The reverse also works.
>>> The PHY driver does not appear to care if it is always in peripheral mode.
>>>
>>> Thank you for your time,
>>> Peter Geis




[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux