All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ferry Toth <fntoth@gmail.com>
To: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Felipe Balbi <balbi@kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] Revert "usb: dwc3: Don't switch OTG -> peripheral if extcon is present"
Date: Mon, 10 Oct 2022 13:04:53 +0200	[thread overview]
Message-ID: <4e73bbb9-eae1-6a90-d716-c721a1eeced3@gmail.com> (raw)
In-Reply-To: <CAHQ1cqGSmNSg73DzURrcP=a-cCd6KdVUtUmnonhP54vWVDmEhw@mail.gmail.com>

Hi

On 10-10-2022 07:02, Andrey Smirnov wrote:
> On Fri, Oct 7, 2022 at 6:07 AM Ferry Toth <fntoth@gmail.com> wrote:
>>
>> On 07-10-2022 04:11, Thinh Nguyen wrote:
>>> On Thu, Oct 06, 2022, Ferry Toth wrote:
>>>> Hi
>>>>
>>>> On 06-10-2022 04:12, Thinh Nguyen wrote:
>>>>> On Wed, Oct 05, 2022, Ferry Toth wrote:
>>>>>> Hi,
>>>>>>
>>>>>>        Thanks!
>>>>>>
>>>>>>        Does the failure only happen the first time host is initialized? Or can
>>>>>>        it recover after switching to device then back to host mode?
>>>>>>
>>>>>> I can switch back and forth and device mode works each time, host mode remains
>>>>>> dead.
>>>>> Ok.
>>>>>
>>>>>>        Probably the failure happens if some step(s) in dwc3_core_init() hasn't
>>>>>>        completed.
>>>>>>
>>>>>>        tusb1210 is a phy driver right? The issue is probably because we didn't
>>>>>>        initialize the phy yet. So, I suspect placing dwc3_get_extcon() after
>>>>>>        initializing the phy will probably solve the dependency problem.
>>>>>>
>>>>>>        You can try something for yourself or I can provide something to test
>>>>>>        later if you don't mind (maybe next week if it's ok).
>>>>>>
>>>>>> Yes, the code move I mentioned above "moves dwc3_get_extcon() until after
>>>>>> dwc3_core_init() but just before dwc3_core_init_mode(). AFAIU initially
>>>>>> dwc3_get_extcon() was called from within dwc3_core_init_mode() but only for
>>>>>> case USB_DR_MODE_OTG. So with this change order of events is more or less
>>>>>> unchanged" solves the issue.
>>>>>>
>>>>> I saw the experiment you did from the link you provided. We want to also
>>>>> confirm exactly which step in dwc3_core_init() was needed.
>>>> Ok. I first tried the code move suggested by Andrey (didn't work). Then
>>>> after reading the actual code I moved a bit further.
>>>>
>>>> This move was on top of -rc6 without any reverts. I did not make additional
>>>> changes to dwc3_core_init()
>>>>
>>>> So current v6.0 has: dwc3_get_extcon - dwc3_get_dr_mode - ... -
>>>> dwc3_core_init - .. - dwc3_core_init_mode (not working)
>>>>
>>>> I changed to: dwc3_get_dr_mode - dwc3_get_extcon - .. - dwc3_core_init - ..
>>>> - dwc3_core_init_mode (no change)
>>>>
>>>> Then to: dwc3_get_dr_mode - .. - dwc3_core_init - .. - dwc3_get_extcon -
>>>> dwc3_core_init_mode (works)
>>>>
>>>> .. are what I believe for this issue irrelevant calls to
>>>> dwc3_alloc_scratch_buffers, dwc3_check_params and dwc3_debugfs_init.
>>>>
>>> Right. Thanks for narrowing it down. There are still many steps in
>>> dwc3_core_init(). We have some suspicion, but we still haven't confirmed
>>> the exact cause of the failure. We can write a proper patch once we know
>>> the reason.
>> If you would like me to test your suspicion, just tell me what to do :-)
>
> OK, Ferry, I think I'm going to need clarification on specifics on
> your test setup. Can you share your kernel config, maybe your
> "/proc/config.gz", somewhere? When you say you are running vanilla
> Linux, do you mean it or do you mean vanilla tree + some patch delta?

For v6.0 I can get the exacts tonight. But earlier I had this for v5.17:

https://github.com/htot/meta-intel-edison/blob/master/meta-intel-edison-bsp/recipes-kernel/linux/linux-yocto_5.17.bb

There are 2 patches referred in #67 and #68. One is related to the 
infinite loop. The other is I believe also needed to get dwc3 to work.

All the kernel config are applied as .cfg.

Patches and cfs's here:

https://github.com/htot/meta-intel-edison/tree/master/meta-intel-edison-bsp/recipes-kernel/linux/files

> The reason I'm asking is because I'm having a hard time reproducing
> the problem on my end. In fact, when I build v6.0
> (4fe89d07dcc2804c8b562f6c7896a45643d34b2f) and then do a
>
> git revert 8bd6b8c4b100 0f0101719138 (original revert proposed by Andy)
>
> I get an infinite loop of reprobing that looks something like (some
> debug tracing, function name + line number, included):
>
> [    6.160732] tusb1210 dwc3.0.auto.ulpi: error -110 writing val 0x41
> to reg 0x80
> [    6.172299] XXXXXXXXXXX: dwc3_probe 1834
> [    6.172426] XXXXXXXXXXX: dwc3_core_init_mode 1386
> [    6.176391] XXXXXXXXXXX: dwc3_drd_init 593
> [    6.181573] dwc3 dwc3.0.auto: Driver dwc3 requests probe deferral
> [    6.191886] platform dwc3.0.auto: Added to deferred list
> [    6.197249] platform dwc3.0.auto: Retrying from deferred list
> [    6.203057] bus: 'platform': __driver_probe_device: matched device
> dwc3.0.auto with driver dwc3
> [    6.211783] bus: 'platform': really_probe: probing driver dwc3 with
> device dwc3.0.auto
> [    6.219935] XXXXXXXXXXX: dwc3_probe 1822
> [    6.219952] XXXXXXXXXXX: dwc3_core_init 1092
> [    6.223903] XXXXXXXXXXX: dwc3_core_init 1095
> [    6.234839] bus: 'ulpi': __driver_probe_device: matched device
> dwc3.0.auto.ulpi with driver tusb1210
> [    6.248335] bus: 'ulpi': really_probe: probing driver tusb1210 with
> device dwc3.0.auto.ulpi
> [    6.257039] driver: 'tusb1210': driver_bound: bound to device
> 'dwc3.0.auto.ulpi'
> [    6.264501] bus: 'ulpi': really_probe: bound device
> dwc3.0.auto.ulpi to driver tusb1210
> [    6.272553] debugfs: Directory 'dwc3.0.auto' with parent 'ulpi'
> already present!
> [    6.279978] XXXXXXXXXXX: dwc3_core_init 1099
> [    6.279991] XXXXXXXXXXX: dwc3_core_init 1103
> [    6.345769] tusb1210 dwc3.0.auto.ulpi: error -110 writing val 0x41
> to reg 0x80
> [    6.357316] XXXXXXXXXXX: dwc3_probe 1834
> [    6.357447] XXXXXXXXXXX: dwc3_core_init_mode 1386
> [    6.361402] XXXXXXXXXXX: dwc3_drd_init 593
> [    6.366589] dwc3 dwc3.0.auto: Driver dwc3 requests probe deferral
> [    6.376901] platform dwc3.0.auto: Added to deferred list
>
> which renders the system completely unusable, but USB host is
> definitely going to be broken too. Now, ironically, with my patch
> in-place, an attempt to probe extcon that ends up deferring the probe
> happens before the ULPI driver failure (which wasn't failing driver
> probe prior to https://lore.kernel.org/all/20220213130524.18748-7-hdegoede@redhat.com/),
> there no "driver binding" event that re-triggers deferred probe
> causing the loop, so the system progresses to a point where extcon is
> available and dwc3 driver eventually loads.
>
> After that, and I don't know if I'm doing the same test, USB host
> seems to work as expected. lsusb works, my USB stick enumerates as
> expected. Switching the USB mux to micro-USB and back shuts the host
> functionality down and brings it up as expected. Now I didn't try to
> load any gadgets to make sure USB gadget works 100%, but since you
> were saying it was USB host that was broken, I wasn't concerned with
> that. Am I doing the right test?
>
> For the reference what I test with is:
>   - vanilla kernel, no patch delta (sans minor debug tracing) + initrd
> built with Buildroot 2022.08.1
>   - Initrd is using systemd (don't think that really matters, but who knows)
>   - U-Boot 2022.04 (built with Buildroot as well)
>   - kernel config is x86_64_defconfig + whatever I gathered from *.cfg
> files in https://github.com/edison-fw/meta-intel-edison/tree/master/meta-intel-edison-bsp/recipes-kernel/linux/files

  parent reply	other threads:[~2022-10-10 11:04 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 15:53 [PATCH v2 0/2] usb: dwc3: revert OTG changes for Intel Merrifield Andy Shevchenko
2022-09-27 15:53 ` [PATCH v2 1/2] Revert "USB: fixup for merge issue with "usb: dwc3: Don't switch OTG -> peripheral if extcon is present"" Andy Shevchenko
2022-09-27 15:53 ` [PATCH v2 2/2] Revert "usb: dwc3: Don't switch OTG -> peripheral if extcon is present" Andy Shevchenko
2022-09-29  3:01   ` Andrey Smirnov
2022-09-29  8:47     ` Sven Peter
2022-10-03 21:57   ` Thinh Nguyen
2022-10-04  8:28     ` Andy Shevchenko
2022-10-04 19:14       ` Ferry Toth
2022-10-05  2:12         ` Thinh Nguyen
2022-10-05  2:39           ` Andrey Smirnov
     [not found]             ` <25bc7dbe-f530-298f-f826-087606cf9491@gmail.com>
2022-10-05  8:44               ` Andy Shevchenko
2022-10-05  8:45             ` Ferry Toth
2022-10-06  2:00             ` Thinh Nguyen
     [not found]           ` <2886b82d-a1f6-d288-e8d1-edae54046b4f@gmail.com>
2022-10-06  2:12             ` Thinh Nguyen
2022-10-06 12:28               ` Ferry Toth
2022-10-07  2:11                 ` Thinh Nguyen
2022-10-07 13:07                   ` Ferry Toth
2022-10-10  5:02                     ` Andrey Smirnov
2022-10-10  7:10                       ` Andy Shevchenko
2022-10-10 21:40                         ` Andrey Smirnov
2022-10-11  9:21                           ` Andy Shevchenko
2022-10-11  9:36                             ` Ferry Toth
2022-10-11 20:17                             ` Andrey Smirnov
2022-10-12 10:32                               ` Andy Shevchenko
2022-10-12 22:13                                 ` Andrey Smirnov
2022-10-10 11:04                       ` Ferry Toth [this message]
2022-10-10 20:52                         ` Ferry Toth
2022-10-10 21:35                           ` Andrey Smirnov
2022-10-11 18:38                             ` Ferry Toth
2022-10-11 20:50                               ` Andrey Smirnov
2022-10-12  9:30                                 ` Ferry Toth
2022-10-12 20:34                                   ` Ferry Toth
2022-10-12 21:43                                   ` Andrey Smirnov
2022-10-13 19:35                                     ` Ferry Toth
2022-10-15 19:54                                       ` Andrey Smirnov
2022-10-16 20:59                                         ` Ferry Toth
2022-10-17 19:44                                           ` Steev Klimaszewski
2022-10-17 21:20                                           ` Andrey Smirnov
2022-10-18 20:47                                             ` Ferry Toth
2022-10-20 19:55                                               ` Ferry Toth
2022-10-17 21:29 ` [PATCH v2 0/2] usb: dwc3: revert OTG changes for Intel Merrifield Andrey Smirnov
2022-10-17 22:20   ` [PATCH v2 2/2] Revert "usb: dwc3: Don't switch OTG -> peripheral if extcon is present" Steev Klimaszewski
2022-10-17 22:22   ` [PATCH v2 0/2] usb: dwc3: revert OTG changes for Intel Merrifield Thinh Nguyen
2022-10-17 23:12     ` Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4e73bbb9-eae1-6a90-d716-c721a1eeced3@gmail.com \
    --to=fntoth@gmail.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=andrew.smirnov@gmail.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.