From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Rob Herring <robh@kernel.org>
Cc: Felipe Balbi <balbi@kernel.org>, Linuxarm <linuxarm@huawei.com>,
mauro.chehab@huawei.com, John Stultz <john.stultz@linaro.org>,
Manivannan Sadhasivam <mani@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linux USB List <linux-usb@vger.kernel.org>,
devicetree@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] dt-bindings: document a new quirk for dwc3
Date: Fri, 18 Sep 2020 11:40:21 +0200 [thread overview]
Message-ID: <20200918114021.5c67610e@coco.lan> (raw)
In-Reply-To: <CAL_JsqLucKWwgBVAoyXpm1mCD5-OvFj2pM_q2+tcyA+K9fCnKg@mail.gmail.com>
Em Thu, 17 Sep 2020 08:47:48 -0600
Rob Herring <robh@kernel.org> escreveu:
> On Thu, Sep 17, 2020 at 1:18 AM Mauro Carvalho Chehab
> <mchehab+huawei@kernel.org> wrote:
> >
> > Em Tue, 15 Sep 2020 10:38:14 -0600
> > Rob Herring <robh@kernel.org> escreveu:
> >
> > > On Tue, Sep 08, 2020 at 09:20:57AM +0200, Mauro Carvalho Chehab wrote:
> > > > At Hikey 970, setting the SPLIT disable at the General
> > > > User Register 3 is required.
> > > >
> > > > Without that, the URBs generated by the usbhid driver
> > > > return -EPROTO errors. That causes the code at
> > > > hid-core.c to call hid_io_error(), which schedules
> > > > a reset_work, causing a call to hid_reset().
> > > >
> > > > In turn, the code there will call:
> > > >
> > > > usb_queue_reset_device(usbhid->intf);
> > > >
> > > > The net result is that the input devices won't work, and
> > > > will be reset on every 0.5 seconds:
> > > >
> > > > [ 33.122384] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0002
> > > > [ 33.378220] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > > [ 33.698394] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0000
> > > > [ 34.882365] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0002
> > > > [ 35.138217] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > > [ 35.458617] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0000
> > > > [ 36.642392] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0002
> > > > [ 36.898207] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > > [ 37.218598] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0000
> > > > [ 38.402368] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0002
> > > > [ 38.658174] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > > [ 38.978594] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0000
> > > > [ 40.162361] hub 1-1:1.0: state 7 ports 4 chg 0000 evt 0002
> > > > [ 40.418148] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > > ...
> > > > [ 397.698132] usb 1-1.1: reset low-speed USB device number 3 using xhci-hcd
> > > >
> > > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> > > > ---
> > > > Documentation/devicetree/bindings/usb/dwc3.txt | 3 +++
> > > > 1 file changed, 3 insertions(+)
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
> > > > index d03edf9d3935..1aae2b6160c1 100644
> > > > --- a/Documentation/devicetree/bindings/usb/dwc3.txt
> > > > +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
> > > > @@ -78,6 +78,9 @@ Optional properties:
> > > > park mode are disabled.
> > > > - snps,dis_metastability_quirk: when set, disable metastability workaround.
> > > > CAUTION: use only if you are absolutely sure of it.
> > > > + - snps,dis-split-quirk: when set, change the way URBs are handled by the
> > > > + driver. Needed to avoid -EPROTO errors with usbhid
> > > > + on some devices (Hikey 970).
> > >
> > > Can't this be implied by the compatible string? Yes we have quirk
> > > properties already, but the problem with them is you can't address them
> > > without a DT change.
> >
> > Short answer:
> >
> > While technically doable, I don't think that this would be a good idea.
> >
> > -
> >
> > Long answer:
> >
> > The first thing is related to the compatible namespace: should such
> > quirk be added at SoC level or at board level?
> >
> > I don't know if the need to disable split mode came from a different
> > dwc3 variant used by the Kirin 970 SoC, or if this is due to the way
> > USB is wired at the Hikey 970 board.
>
> If board specific, then I agree that a separate property makes sense.
> This doesn't really sound board specific though.
Yeah, I agree that the higher chance is that this would be SoC specific,
but I can't discard being board-specific either, as, on this board,
all the output ports are all connected via an USB GPIO hub provided
on a different chipset. Funny enough, setting this is only required
for HID. The USB ports work fine either with split mode enabled or
disabled for USB sticks. So, I guess this affects only INT (and maybe
ISOC) URB transfers. So I wouldn't doubt that such quirk would be
required due to some limitation at the USB GPIO hub.
> > 2) Because this specific device uses the dwc3-of-simple driver,
> > the actual DT binding is:
> >
> > usb3: hisi_dwc3 {
> > compatible = "hisilicon,hi3670-dwc3";
> > ...
> > dwc3: dwc3@ff100000 {
> > compatible = "snps,dwc3";
> > ...
> > };
> > };
>
> This parent child split should never have happened for the cases that
> don't have 'wrapper registers'. We should have had on node here with
> just:
>
> compatible = "hisilicon,hi3670-dwc3", "snps,dwc3";
I tried to do that, but the ARM CPU panics:
https://lore.kernel.org/linux-usb/731e13f9fbba3a81bedb39f1c1deaf41200acd0c.1599559004.git.mchehab+huawei@kernel.org/
From my tests, it sounds that this is due to some (minor) differences on
how the power clocks are enabled/suspended when using dwc3-of-simple as
the parent node.
It sounds that, if the PM clocks are not stable yet by the time
dwc3 tries to initialize, the CPU crashes.
> > For boards that use dwc3-of-simple drivers, we could add a hack
> > at the dwc3 core that would seek for the parent's device's
> > compatible string with something like (not tested):
> >
> > if (of_device_is_compatible(pdev->parent->dev.of_node,
> > "hisilicon,hi3670-dwc3"))
> > dwc->dis_split_quirk = true;
>
> This is what I'd do. You could have a match table instead as that
> would scale better.
Not sure if a match table would work here, because we need to
enforce that the parent node will be called before dwc3, as
otherwise the panic() will occur.
> > It should be noticed that both platform_data and pdev->parent
> > alternatives will only work for boards using dwc3-of-simple driver.
> > This could limit this quirk usage on future devices.
> >
> > -
> >
> > IMO, adding a new quirk is cleaner, and adopts the same solution
> > that it is currently used by other drivers with Designware IP.
>
> We already have a bunch of quirk properties. What's one more, sigh. So
> if that's what you want, fine.
Ok, thanks!
Thanks,
Mauro
next prev parent reply other threads:[~2020-09-18 9:40 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-08 7:20 [PATCH 0/2] Add a quirk for dwc3 driver, requred for Hikey 970 USB to work Mauro Carvalho Chehab
2020-09-08 7:20 ` [PATCH 2/2] dt-bindings: document a new quirk for dwc3 Mauro Carvalho Chehab
2020-09-15 16:38 ` Rob Herring
2020-09-17 7:18 ` Mauro Carvalho Chehab
2020-09-17 14:47 ` Rob Herring
2020-09-18 9:40 ` Mauro Carvalho Chehab [this message]
2020-09-29 6:09 ` Mauro Carvalho Chehab
2020-09-29 6:21 ` Felipe Balbi
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=20200918114021.5c67610e@coco.lan \
--to=mchehab+huawei@kernel.org \
--cc=balbi@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mani@kernel.org \
--cc=mauro.chehab@huawei.com \
--cc=robh@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).