linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alan Stern <stern@rowland.harvard.edu>
To: Doug Anderson <dianders@chromium.org>
Cc: "Felipe Balbi" <balbi@ti.com>,
	"John Youn" <John.Youn@synopsys.com>,
	"Yunzhi Li" <lyz@rock-chips.com>,
	"Heiko Stübner" <heiko@sntech.de>,
	"open list:ARM/Rockchip SoC..."
	<linux-rockchip@lists.infradead.org>,
	"Julius Werner" <jwerner@chromium.org>,
	"Herrero, Gregory" <gregory.herrero@intel.com>,
	"Kaukab, Yousaf" <yousaf.kaukab@intel.com>,
	"Dinh Nguyen" <dinguyen@opensource.altera.com>,
	"John Youn" <johnyoun@synopsys.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>
Subject: Re: [PATCH v2 1/2] usb: dwc2: host: Fix missing device insertions
Date: Mon, 16 Nov 2015 14:31:13 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1511161425540.1938-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <CAD=FV=XOO1XsHWSgqcvEAPAqhB2Ud5zcydc13k-pJ23L0rTW0Q@mail.gmail.com>

On Mon, 16 Nov 2015, Doug Anderson wrote:

> ---
> 
> usb: dwc2: host: Fix missing device insertions
> 
> If you've got your interrupt signals bouncing a bit as you insert your
> USB device, you might end up in a state when the device is connected but
> the driver doesn't know it.
> 
> Specifically, the observed order is:
>  1. hardware sees connect
>  2. hardware sees disconnect
>  3. hardware sees connect
>  4. dwc2_port_intr() - clears connect interrupt
>  5. dwc2_handle_common_intr() - calls dwc2_hcd_disconnect()
> 
> Now you'll be stuck with the cable plugged in and no further interrupts
> coming in but the driver will think we're disconnected.
> 
> We'll fix this by checking for the missing connect interrupt and
> re-connecting after the disconnect is posted.  We don't skip the
> disconnect because if there is a transitory disconnect we really want to
> de-enumerate and re-enumerate.

Why do you need to do anything special here?  Normally a driver's
interrupt handler should query the hardware status after clearing the
interrupt source.  That way no transitions ever get missed.

In your example, at step 5 the dwc2 driver would check the port status
and see that it currently is connected.  Therefore the driver would
pass a "connect status changed" event to the USB core and set the port
status to "connected".  No extra checking is needed, and transitory
connects or disconnects get handled correctly.

Alan Stern


  parent reply	other threads:[~2015-11-16 19:31 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-03 20:30 [PATCH v2 1/2] usb: dwc2: host: Fix missing device insertions Douglas Anderson
2015-11-03 20:30 ` [PATCH v2 2/2] usb: dwc2: host: Clear interrupts before handling them Douglas Anderson
2015-11-05  3:08   ` John Youn
2015-11-16 16:28   ` Felipe Balbi
2015-11-16 17:22     ` Doug Anderson
2015-11-19  1:43       ` John Youn
2015-11-19 16:37         ` Doug Anderson
2015-11-19 18:19           ` Felipe Balbi
2015-11-19 19:09             ` John Youn
2015-11-05  2:52 ` [PATCH v2 1/2] usb: dwc2: host: Fix missing device insertions John Youn
2015-11-16 17:44 ` Felipe Balbi
2015-11-16 18:13   ` Doug Anderson
2015-11-16 18:22     ` Felipe Balbi
2015-11-16 18:44       ` Doug Anderson
2015-11-16 19:09         ` Felipe Balbi
2015-11-16 19:31         ` Alan Stern [this message]
2015-11-16 19:46           ` Doug Anderson
2015-11-16 20:26             ` Julius Werner
2015-11-16 20:38               ` Alan Stern
2015-11-16 20:31             ` Alan Stern
2015-11-16 23:14               ` Doug Anderson
2015-11-17  1:53                 ` John Youn
2015-11-17  2:37                   ` Doug Anderson
2015-11-17 15:40                 ` Alan Stern
2015-11-17 16:13                   ` Doug Anderson

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=Pine.LNX.4.44L0.1511161425540.1938-100000@iolanthe.rowland.org \
    --to=stern@rowland.harvard.edu \
    --cc=John.Youn@synopsys.com \
    --cc=balbi@ti.com \
    --cc=dianders@chromium.org \
    --cc=dinguyen@opensource.altera.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=gregory.herrero@intel.com \
    --cc=heiko@sntech.de \
    --cc=johnyoun@synopsys.com \
    --cc=jwerner@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=lyz@rock-chips.com \
    --cc=yousaf.kaukab@intel.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).