From: John Youn <John.Youn@synopsys.com>
To: Michael Niewoehner <linux@mniewoehner.de>,
John Youn <John.Youn@synopsys.com>
Cc: "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
Doug Anderson <dianders@chromium.org>,
Stefan Wahren <stefan.wahren@i2se.com>,
Tao Huang <huangtao@rock-chips.com>,
Julius Werner <jwerner@chromium.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Caesar Wang <caesar.upstream@gmail.com>,
Heiko Stuebner <heiko@sntech.de>, Felipe Balbi <balbi@kernel.org>,
"Remi Pommarel" <repk@triplefau.lt>,
Kever Yang <kever.yang@rock-chips.com>,
"Przemek Rudy" <prudy1@o2.pl>
Subject: Re: [RFT PATCH 0/4] usb: dwc2: Fix core reset and force mode delay problems
Date: Thu, 7 Apr 2016 15:12:31 -0700 [thread overview]
Message-ID: <5706DB4F.9040903@synopsys.com> (raw)
In-Reply-To: <0D083742-37A2-4239-B318-66EFD3B50F65@mniewoehner.de>
On 4/7/2016 1:36 PM, Michael Niewoehner wrote:
>
> Am 07.04.2016 um 20:41 schrieb John Youn <John.Youn@synopsys.com>:
>
>> On 3/31/2016 2:44 PM, Michael Niewoehner wrote:
>>> Hi John,
>>>
>>> Am 29.03.2016 um 04:36 schrieb John Youn <johnyoun@synopsys.com>:
>>>
>>>> Hi,
>>>>
>>>> The following patch series addresses the core reset and force mode
>>>> delay problems we have been seeing on dwc2 for some platforms.
>>>>
>>>> I think I have identified the source of the inconsistencies between
>>>> platforms and this series attempts to address them.
>>>>
>>>> Basically everything stems from the IDDIG debounce filter delay, which
>>>> is a function of the PHY clock speed and can range from 5-50 ms if
>>>> enabled. This delay must be taken into account on core reset and force
>>>> modes. A full explanation is provided in the patch commit log and code
>>>> comments.
>>>>
>>>> The first two patches are prerequisites to the force mode fixes,
>>>> including one patch that was sent separately by Przemek Rudy. I have
>>>> resubmitted it with this series for convenience.
>>>>
>>>> Please help by reviewing and testing on your platforms.
>>>>
>>>> Patches were tested on:
>>>> * Synopsys HAPS platform IP 3.20a OTG, dr_mode=OTG,HOST,PERIPHERAL
>>>>
>>>> Regards,
>>>> John
>>>>
>>>> John Youn (3):
>>>> usb: dwc2: gadget: Only initialize device if in device mode
>>>> usb: dwc2: Add delay to core soft reset
>>>> usb: dwc2: Properly account for the force mode delays
>>>>
>>>> Przemek Rudy (1):
>>>> usb: dwc2: do not override forced dr_mode in gadget setup
>>>>
>>>> drivers/usb/dwc2/core.c | 195 ++++++++++++++++++++++++++++----------------
>>>> drivers/usb/dwc2/core.h | 2 +-
>>>> drivers/usb/dwc2/gadget.c | 30 +++++--
>>>> drivers/usb/dwc2/hcd.c | 6 +-
>>>> drivers/usb/dwc2/hw.h | 1 +
>>>> drivers/usb/dwc2/platform.c | 9 +-
>>>> 6 files changed, 161 insertions(+), 82 deletions(-)
>>>>
>>>> --
>>>> 2.7.4
>>>>
>>>
>>> after applying your patch series on v4.6-rc1 usb keeps being broken on rk3188.
>>> Besides that I get "dwc2 10180000.usb: dwc2_wait_for_mode: Couldn't set host mode“ repeatedly.
>>>
>>> Currently this works for me:
>>> - Revert "usb: dwc2: Fix probe problem on bcm2835“
>>> - Apply "usb: dwc2: Add a 10 ms delay to dwc2_core_reset()"
>>>
>>>
>>> Best regards
>>> Michael
>>>
>>
>> Thanks Michael.
>>
>> I won't be able to look at this again until next week. In the meantime
>> could you provide a driver log? In particular I want to see the values
>> of your GHWCFG registers, and where you are seeing the
>> dwc2_wait_for_mode() failure.
>>
>> Regards,
>> John
>
> Looks like the problem is gone on -rc2… on -rc1 the errors came up shortly after "dwc2 10180000.usb“ messages.
> USB keeps being broken, though. The USB hub is detected but nothing that is attached to it.
>
> Here are the logs and register values for each test with Doug’s and your patches.
>
> Michael
>
>
> good usb, Doug's patches
>
> [ 0.420125] usbcore: registered new interface driver usbfs
> [ 0.426246] usbcore: registered new interface driver hub
> [ 0.432296] usbcore: registered new device driver usb
> [...]
> [ 0.853769] 10180000.usb supply vusb_d not found, using dummy regulator
> [ 0.860560] 10180000.usb supply vusb_a not found, using dummy regulator
> [ 0.867365] dwc2 10180000.usb: Configuration mismatch. dr_mode forced to host
> [ 0.977737] dwc2 10180000.usb: 128 invalid for host_nperio_tx_fifo_size. Check H.
> [ 0.986562] dwc2 10180000.usb: 256 invalid for host_perio_tx_fifo_size. Check HW.
> [ 1.047959] dwc2 10180000.usb: DWC OTG Controller
> [ 1.052732] dwc2 10180000.usb: new USB bus registered, assigned bus number 1
> [ 1.059868] dwc2 10180000.usb: irq 24, io mem 0x00000000
> [ 1.065586] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
> [ 1.072430] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
> [ 1.079706] usb usb1: Product: DWC OTG Controller
> [ 1.084432] usb usb1: Manufacturer: Linux 4.6.0-rc2+ dwc2_hsotg
> [ 1.090390] usb usb1: SerialNumber: 10180000.usb
> [ 1.096000] hub 1-0:1.0: USB hub found
> [ 1.099884] hub 1-0:1.0: 1 port detected
> [ 1.104668] 101c0000.usb supply vusb_d not found, using dummy regulator
> [ 1.111428] 101c0000.usb supply vusb_a not found, using dummy regulator
> [ 1.247968] dwc2 101c0000.usb: DWC OTG Controller
> [ 1.252743] dwc2 101c0000.usb: new USB bus registered, assigned bus number 2
> [ 1.259879] dwc2 101c0000.usb: irq 25, io mem 0x00000000
> [ 1.265604] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
> [ 1.272447] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
> [ 1.279721] usb usb2: Product: DWC OTG Controller
> [ 1.284448] usb usb2: Manufacturer: Linux 4.6.0-rc2+ dwc2_hsotg
> [ 1.290404] usb usb2: SerialNumber: 101c0000.usb
> [ 1.295951] hub 2-0:1.0: USB hub found
> [ 1.299830] hub 2-0:1.0: 1 port detected
> [ 1.305694] usbcore: registered new interface driver usb-storage
>
>
> root@c0rock:~# cat debug/10180000.usb/regdump | grep GHWCFG
> [ 1770.718938] dwc2 10180000.usb: Mode Mismatch Interrupt: currently in Host mode
> [ 1770.729974] dwc2 10180000.usb: Mode Mismatch Interrupt: currently in Host mode
> GHWCFG1 = 0x00006664
> GHWCFG2 = 0x22aa2450
> GHWCFG3 = 0x03cc00e8
> GHWCFG4 = 0xdbf04060
> root@c0rock:~# cat debug/101c0000.usb/regdump | grep GHWCFG
> GHWCFG1 = 0x00000000
> GHWCFG2 = 0x22a7c856
> GHWCFG3 = 0x03380068
> GHWCFG4 = 0x09f04060
>
>
> ==========================
>
>
> bad usb, your patches
>
> [ 0.420098] usbcore: registered new interface driver usbfs
> [ 0.426218] usbcore: registered new interface driver hub
> [ 0.432221] usbcore: registered new device driver usb
> [...]
> [ 0.854505] 10180000.usb supply vusb_d not found, using dummy regulator
> [ 0.861295] 10180000.usb supply vusb_a not found, using dummy regulator
> [ 0.868126] dwc2 10180000.usb: Configuration mismatch. dr_mode forced to host
> [ 0.917648] dwc2 10180000.usb: dwc2_wait_for_mode: Couldn't set host mode
> [ 0.924472] dwc2 10180000.usb: 128 invalid for host_nperio_tx_fifo_size. Check H.
> [ 0.933314] dwc2 10180000.usb: 256 invalid for host_perio_tx_fifo_size. Check HW.
> [ 0.977914] dwc2 10180000.usb: DWC OTG Controller
> [ 0.982687] dwc2 10180000.usb: new USB bus registered, assigned bus number 1
> [ 0.989827] dwc2 10180000.usb: irq 24, io mem 0x00000000
> [ 0.995543] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
> [ 1.002390] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
> [ 1.009666] usb usb1: Product: DWC OTG Controller
> [ 1.014391] usb usb1: Manufacturer: Linux 4.6.0-rc2+ dwc2_hsotg
> [ 1.020347] usb usb1: SerialNumber: 10180000.usb
> [ 1.025937] hub 1-0:1.0: USB hub found
> [ 1.029819] hub 1-0:1.0: 1 port detected
> [ 1.034605] 101c0000.usb supply vusb_d not found, using dummy regulator
> [ 1.041367] 101c0000.usb supply vusb_a not found, using dummy regulator
> [ 1.048480] dwc2 101c0000.usb: DWC OTG Controller
> [ 1.053251] dwc2 101c0000.usb: new USB bus registered, assigned bus number 2
> [ 1.060389] dwc2 101c0000.usb: irq 25, io mem 0x00000000
> [ 1.066121] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
> [ 1.072972] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
> [ 1.080251] usb usb2: Product: DWC OTG Controller
> [ 1.084978] usb usb2: Manufacturer: Linux 4.6.0-rc2+ dwc2_hsotg
> [ 1.090935] usb usb2: SerialNumber: 101c0000.usb
> [ 1.096504] hub 2-0:1.0: USB hub found
> [ 1.100387] hub 2-0:1.0: 1 port detected
> [ 1.106271] usbcore: registered new interface driver usb-storage
>
>
> root@c0rock:~# cat debug/10180000.usb/regdump | grep GHWCFG
> [ 224.592330] dwc2 10180000.usb: Mode Mismatch Interrupt: currently in Host mode
> [ 224.603277] dwc2 10180000.usb: Mode Mismatch Interrupt: currently in Host mode
> GHWCFG1 = 0x00006664
> GHWCFG2 = 0x22aa2450
> GHWCFG3 = 0x03cc00e8
> GHWCFG4 = 0xdbf04060
This controller is OTG with the IDDIG filter. So it will default to
device on every reset and there will be a delay before it goes into
host mode.
Could you try to increase the timeout to see if it helps anything?
Patch is below.
> root@c0rock:~# cat debug/101c0000.usb/regdump | grep GHWCFG
> GHWCFG1 = 0x00000000
> GHWCFG2 = 0x22a7c856
> GHWCFG3 = 0x03380068
> GHWCFG4 = 0x09f04060
Looks like this one is a host-only controller so it should work fine,
correct?
Regards,
John
---->8----
diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
index ab25620..c72f4e5 100644
--- a/drivers/usb/dwc2/core.c
+++ b/drivers/usb/dwc2/core.c
@@ -262,15 +262,15 @@ static void dwc2_wait_for_mode(struct dwc2_hsotg *hsotg,
{
ktime_t start;
ktime_t end;
+ s64 ms = 0;
dev_vdbg(hsotg->dev, "Waiting for %s mode\n",
host_mode ? "host" : "device");
start = ktime_get();
+ timeout = 300;
while (1) {
- s64 ms;
-
if (dwc2_is_host_mode(hsotg) == host_mode) {
dev_vdbg(hsotg->dev, "%s mode set\n",
host_mode ? "Host" : "Device");
@@ -288,6 +288,9 @@ static void dwc2_wait_for_mode(struct dwc2_hsotg *hsotg,
usleep_range(1000, 2000);
}
+
+ dev_info(hsotg->dev, "%s: mode=%d, time=%lld ms\n", __func__,
+ dwc2_is_host_mode(hsotg), ms);
}
next prev parent reply other threads:[~2016-04-07 22:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-29 2:36 [RFT PATCH 0/4] usb: dwc2: Fix core reset and force mode delay problems John Youn
2016-03-29 2:36 ` [RFT PATCH 1/4] usb: dwc2: do not override forced dr_mode in gadget setup John Youn
2016-03-29 2:36 ` [RFT PATCH 2/4] usb: dwc2: gadget: Only initialize device if in device mode John Youn
2016-03-29 2:36 ` [RFT PATCH 3/4] usb: dwc2: Add delay to core soft reset John Youn
2016-03-29 2:36 ` [RFT PATCH 4/4] usb: dwc2: Properly account for the force mode delays John Youn
2016-03-31 8:52 ` [RFT PATCH 0/4] usb: dwc2: Fix core reset and force mode delay problems Stefan Wahren
2016-03-31 20:45 ` Michael Niewoehner
2016-03-31 21:43 ` Michael Niewoehner
2016-04-07 18:41 ` John Youn
2016-04-07 20:36 ` Michael Niewoehner
2016-04-07 22:12 ` John Youn [this message]
2016-04-08 10:25 ` Michael Niewoehner
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=5706DB4F.9040903@synopsys.com \
--to=john.youn@synopsys.com \
--cc=balbi@kernel.org \
--cc=caesar.upstream@gmail.com \
--cc=dianders@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=heiko@sntech.de \
--cc=huangtao@rock-chips.com \
--cc=jwerner@chromium.org \
--cc=kever.yang@rock-chips.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@mniewoehner.de \
--cc=prudy1@o2.pl \
--cc=repk@triplefau.lt \
--cc=stefan.wahren@i2se.com \
/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).