RE: RESEND: About VBUS glitch happen on DWC3 host mode enabling process.

From: Felipe Balbi
Date: Fri Nov 23 2018 - 03:38:06 EST



Hi Ran,

Ran Wang <ran.wang_1@xxxxxxx> writes:
>> > Then, DWC3 core driver continued to call function
>> > dwc3_host_init()->platform_device_add(xhci)â
>> > xhci_plat_probe()->usb_add_hcd()->xhci_plat_setup()->xhci_gen_setup->
>> > xhci_reset(), which would reset xHCI controller. At this point, the
>> > VBUS EN pin (USB_DRVVBUS) was pulled low for about 15us, causing the
>>
>> why is that pin pulled low? XHCI reset shouldn't be a global reset. Did your
>> HW engineer tie all reset lines together? If so, there's nothing I can do to
>> help.
>
> That's the point I also want to make clear: do you mean that the VBUS control
> signal come from DWC3 IP should not be pulled down when xHCI controller
> conduct reset?
> And sorry that I am not quite sure about the 'global reset' you mentioned. Do
> you mean to a DWC3 global reset or SoC reset?
>
> My understanding is that since VBUS control signal only be meaningful in USB
> host mode (xHCI), so it might be in the scope/control of xHCI controller, meaning
> that xHCI reset trigger VBUS/USB_DRVVBUS(EN) pulled low might make sense,
> am I right? And the information come from DWC3 IP design has confirmed that
> PORTSC[PP] will be de-asserted during HCRST, it seems this is native behavior on
> DWC3 IP.

okay, so the thing is about PP being dropped. Right, that should happen
indeed. However, this still shouldn't cause any problems, since
peripheral side shouldn't connect its pull-ups until VBUS is above
session valid threshold.

For how long is VBUS dropped in this case?

>> > VBUS did the same drop too, then back to normal voltage when HW reset
>> > complete. We have confirmed this whole process according to scope
>> > waveform with test code on DWC3 driver. Impact is that VBUS glitch has
>> > let some USB drives (such as Transcend 4GB USB2.0 (jetflash) and
>> > Kingston 16GB USB2.0 DTGE9) malfunction during enumeration
>> > (particularly happen when drive is connected to root-hub port prior to
>> > Linux boot).
>>
>> okay
>>
>> > Per my understanding, VBUS need to keep +5V once enabled without any
>> > drop/unstable. And above glitch looks like caused by the gap between
>> > DWC3 design and driver init procedure.
>>
>> why are you blaming the driver here? We don't know of any such platform
>> that has problems with this. Do you mean to say that because your HW
>> engineer made a choice of tying host reset to global reset, you end up having
>> an issue? That's something else entirely that SW can't help you with.
>
> I didn't mean to blame driver alone, just found the time interval between host
> mode enabling and host reset causing a observable VBUS control signal glitch
> happen we didn't expected. And experiments proved that VBUS on between host
> mode enabling and host reset might not be necessary and can avoid this potential risk.
>
>> I have no idea about anything nxp has done, no access to documentation,
>> nothing at all. I need you to do a better job at explaining the situation
>> starting with kernel version you're using, if platform is supported upstream,
>> etc.
>
> Please see my above answer.
> These Layerscape platforms are support upstream, I can run them with pure upstream
> build directly.

that's good, then we can debug this. Can you collect xhci tracepoints of
when the problem happens?

>> > One of probably workaround come to my mind is to program all root-hub
>> > portsâ PORTSC[PP] to 0b immediately after enabling host mode (calling
>> > dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST)), so VBUS will keep 0V
>> > till xhci is reset by xhci driver like above. I have test this and it
>> > works.
>>
>> dwc3 will _not_ touch xHCI registers, sorry. If you need something like that,
>> you need to do it as a quirk in xhci-plat.c
>
> Thanks for pointing out a direction for me. If we do it as a quirk in xhci-plat.c, how
> can we control it by some kind of DTS property in board level config?

If, indeed, there is a quirk here, then a quirk can be passed from dwc3
to xhci-plat, yes.

cheers

ps: Mathias, did you see any behavior like this? A drop in VBUS voltage
causing issues during enumeration?

--
balbi

Attachment: signature.asc
Description: PGP signature