linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: saranya.gopal@intel.com, linux-usb@vger.kernel.org,
	sathyanarayanan.kuppuswamy@intel.com, abhilash.k.v@intel.com,
	M Balaji <m.balaji@intel.com>
Subject: [V6] roles: Fix USB 3.0 OTG issue on Intel platform
Date: Mon, 10 Sep 2018 13:32:33 +0300	[thread overview]
Message-ID: <20180910103233.GO25121@kuha.fi.intel.com> (raw)

On Mon, Sep 10, 2018 at 12:17:56PM +0200, Hans de Goede wrote:
> Hi,
> 
> On 10-09-18 12:13, Heikki Krogerus wrote:
> > On Sun, Sep 09, 2018 at 01:18:45PM +0200, Hans de Goede wrote:
> > > Hi Saranya, Heikki,
> > > 
> > > On 07-09-18 10:18, Heikki Krogerus wrote:
> > > > +Hans
> > > > 
> > > > On Fri, Sep 07, 2018 at 12:32:01PM +0530, saranya.gopal@intel.com wrote:
> > > > > From: Saranya Gopal <saranya.gopal@intel.com>
> > > > > 
> > > > > This patch adds static DRD mode for host/device
> > > > > mode switch. This fixes the issue where device
> > > > > mode was not working after DUT switches to host
> > > > > mode with 3.0 OTG connector.
> > > 
> > > What is the DUT?
> > > 
> > > Anyways this patch cannot go upstream as is, it will break
> > > DRD switching on many Cherry Trail devices, on Cherry Trail
> > > devices the role is often controlled through firmware using
> > > these 2 ACPI methods called from an edge triggered _AEI
> > > handler:
> > > 
> > >          Scope (PCI0)
> > >          {
> > >              OperationRegion (XOP1, SystemMemory, BR0X, 0x80F8)
> > >              Field (XOP1, DWordAcc, NoLock, Preserve)
> > >              {
> > >                  Offset (0x80D4),
> > >                      ,   11,
> > >                  BT11,   1,
> > >                      ,   8,
> > >                  BT20,   1,
> > >                  BT21,   1,
> > >                  Offset (0x80D7),
> > >                  BT24,   1
> > >              }
> > > 
> > >              Method (CDRH, 1, Serialized)
> > >              {
> > >                  If (DAMT == Zero)
> > >                  {
> > >                      BT20 = Zero
> > >                      If (Arg0 == Zero)
> > >                      {
> > >                          BT24 = Zero
> > >                      }
> > >                      Else
> > >                      {
> > >                          BT24 = One
> > >                      }
> > > 
> > >                      BT11 = One
> > >                      BT21 = One
> > >                  }
> > >                  Else
> > > 		{
> > > 		    // same thing through IOSF side bus
> > > 		}
> > > 	    }
> > > 
> > >              Method (CDRD, 1, Serialized)
> > >              {
> > >                  If (DAMT == Zero)
> > >                  {
> > >                      BT11 = One
> > >                      BT20 = One
> > >                      BT21 = One
> > >                      If (Arg0 == Zero)
> > >                      {
> > >                          BT24 = Zero
> > >                      }
> > >                      Else
> > >                      {
> > >                          BT24 = One
> > >                      }
> > >                  }
> > >                  Else
> > >                  {
> > > 		    // same thing through IOSF side bus
> > > 		}
> > > 	    }
> > > 
> > > 
> > > Note that these only control the SW_IDPIN (bit 20) to
> > > change the role and rely on SW_SWITCH_ENABLE (bit 16)
> > > and DRD_CONFIG (bit 0:1) to be all 0.
> > > 
> > > This patch as suggested breaks these ACPI methods.
> > > 
> > > Note that even though the mux is changed by firmware the
> > > intel_xhci_usb_set_role() may (and typically will) still
> > > run on these devices, there are 2 ways this can happen:
> > > 
> > > 1) On many devices the firmware only switches between
> > > the host and none roles (it does not set the SW_VBUS_VALID
> > > bit), because it is targeting Windows.
> > > 
> > > This means that device mode cannot work because the
> > > designware dwc3 controller will not operate as a device
> > > without the SW_VBUS_VALID bit set.
> > > 
> > > To fix this the axp288_extcon code monitors vbus changes
> > > and when the vbus becomes present it checks if the firmware
> > > put the role-switch in the none role and if it did it changes
> > > the role to device, calling intel_xhci_usb_set_role()
> > > 
> > > 2) The user may manually change the role through sysfs, to
> > > deal with otg-charging hubs (ACA devices) which this hardware
> > > typically cannot detect.
> > > 
> > > If the proposed change is necessary to fix things on some non
> > > Cherry Trail hardware, you could do a new version of this
> > > patch which only does this on affected hardware.
> > 
> > It seems that the current driver does not work on several Intel
> > platforms. I think many of these platforms do have ACPI methods that
> > program the mux, but in most cases they are only executed if a _DSM is
> > called (for example Joule). The Cherry trail boards that execute those
> > methods as a result of a GPE seem to be the exception.
> > 
> > I think we've made a mistake with the driver. It now basically assumes
> > that there is always something like firmware or AML that also
> > configures the mux, and it really can not work like that. By default
> > the driver must work so that it is the only entity that programs the
> > mux, and it is in complete control over it. Platforms where this is
> > not the case, like the Cherry trails, must be handled as exceptions.
> > 
> > I actually think that the driver should be made like that even if
> > solutions that were used on Cherry trails were more common (which they
> > aren't) because of the fact that we simply should never be competing
> > over a resource with the firmware. If the firmware has control over
> > the mux, we do not touch it in OS. If the OS is in control of it, the
> > firmware does not touch it. Any other scenario is an exception, and
> > should be handled as such for example by using quirks.
> 
> Either way the patch as proposed will break CHT platforms, so the
> setting of the new bits controlled by the patch needs to be made
> conditional. I'm fine with making the new behavior the default and doing
> it everywhere except on CHT.

Yes, I agree that we can not use this patch as it is. We need
a solution that does not break CHT for upstream.


Thanks,

             reply	other threads:[~2018-09-10 10:32 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-10 10:32 Heikki Krogerus [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-09-10 10:17 [V6] roles: Fix USB 3.0 OTG issue on Intel platform Hans de Goede
2018-09-10 10:13 Heikki Krogerus
2018-09-09 11:18 Hans de Goede
2018-09-07  8:37 Greg Kroah-Hartman
2018-09-07  8:33 Felipe Balbi
2018-09-07  8:18 Heikki Krogerus
2018-09-07  8:12 saranya.gopal
2018-09-07  7:18 Greg Kroah-Hartman
2018-09-07  7:02 saranya.gopal

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=20180910103233.GO25121@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=abhilash.k.v@intel.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=m.balaji@intel.com \
    --cc=saranya.gopal@intel.com \
    --cc=sathyanarayanan.kuppuswamy@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).