All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Roger Quadros <rogerq@ti.com>
Cc: Peter Chen <peter.chen@nxp.com>,
	"pawell@cadence.com" <pawell@cadence.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"balbi@kernel.org" <balbi@kernel.org>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Revert "usb: cdns3: core: quit if it uses role switch class"
Date: Tue, 24 Nov 2020 13:00:20 +0200	[thread overview]
Message-ID: <20201124110020.GA1008337@kuha.fi.intel.com> (raw)
In-Reply-To: <bdb2b4cb-686e-9283-bc66-78808b92c349@ti.com>

On Tue, Nov 24, 2020 at 12:33:34PM +0200, Roger Quadros wrote:
> +Heikki
> 
> Peter,
> 
> On 24/11/2020 11:57, Peter Chen wrote:
> > 
> > 
> > 
> > Best regards,
> > Peter Chen
> > 
> > > -----Original Message-----
> > > From: Roger Quadros <rogerq@ti.com>
> > > Sent: 2020年11月24日 17:39
> > > To: Peter Chen <peter.chen@nxp.com>
> > > Cc: pawell@cadence.com; gregkh@linuxfoundation.org; balbi@kernel.org;
> > > linux-usb@vger.kernel.org; linux-kernel@vger.kernel.org
> > > Subject: Re: [PATCH] Revert "usb: cdns3: core: quit if it uses role switch class"
> > > 
> > > Peter,
> > > 
> > > On 24/11/2020 08:43, Peter Chen wrote:
> > > > On 20-11-23 13:50:51, Roger Quadros wrote:
> > > > > This reverts commit 50642709f6590fe40afa6d22c32f23f5b842aed5.
> > > > > 
> > > > > This commit breaks hardware based role switching on TI platforms.
> > > > > cdns->role_sw is always going to be non-zero as it is a pointer
> > > > > to the usb_role_switch instance. Some other means needs to be used if
> > > > > hardware based role switching is not required by the platform.
> > > > > 
> > > > > Signed-off-by: Roger Quadros <rogerq@ti.com>
> > > > > ---
> > > > >    drivers/usb/cdns3/core.c | 4 ----
> > > > >    1 file changed, 4 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
> > > > > index a0f73d4711ae..4c1445cf2ad0 100644
> > > > > --- a/drivers/usb/cdns3/core.c
> > > > > +++ b/drivers/usb/cdns3/core.c
> > > > > @@ -280,10 +280,6 @@ int cdns3_hw_role_switch(struct cdns3 *cdns)
> > > > >    	enum usb_role real_role, current_role;
> > > > >    	int ret = 0;
> > > > > 
> > > > > -	/* Depends on role switch class */
> > > > > -	if (cdns->role_sw)
> > > > > -		return 0;
> > > > > -
> > > > >    	pm_runtime_get_sync(cdns->dev);
> > > > > 
> > > > >    	current_role = cdns->role;
> > > > > --
> > > > 
> > > > Hi Roger,
> > > > 
> > > > I am sorry about that. Do you use role switch /sys entry, if you have
> > > > used, I prefer using "usb-role-switch" property at dts to judge if SoC
> > > > OTG signals or external signals for role switch. If you have not used
> > > > it, I prefer only setting cdns->role_sw for role switch use cases.
> > > > 
> > > 
> > > We use both hardware role switch and /sys entries for manually forcing a
> > > certain role.
> > > 
> > > We do not set any "usb-role-switch" property at DTS.
> > > 
> > > Currently cdns->role_sw is being always set by driver irrespective of any DT
> > > property, so this patch is clearly wrong and needs to be reverted.
> > > 
> > > What do you think?
> > > 
> > 
> > Could you accept below fix?
> > 
> > diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
> > index 2e469139769f..fdd52e87a7b2 100644
> > --- a/drivers/usb/cdns3/core.c
> > +++ b/drivers/usb/cdns3/core.c
> > @@ -280,8 +280,8 @@ int cdns3_hw_role_switch(struct cdns3 *cdns)
> >          enum usb_role real_role, current_role;
> >          int ret = 0;
> > 
> > -       /* Depends on role switch class */
> > -       if (cdns->role_sw)
> > +       /* quit if switch role through external signals */
> > +       if (device_property_read_bool(cdns->dev, "usb-role-switch"))
> >                  return 0;
> > 
> >          pm_runtime_get_sync(cdns->dev);
> 
> Although this will fix the issue I don't think this is making the driver to behave
> as expected with usb-role-switch property.
> 
> Now, even if usb-role-switch property is not present the driver will still register
> the role switch driver.
> 
> I think we need to register the role switch driver only if usb-role-switch property
> is present. We would also need to set the default role if role-switch-default-mode is present.
> 
> How about the following? It still doesn't handle role-switch-default-mode property though.
> 
> 
> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
> index 4c1445cf2ad0..986b56a9940c 100644
> --- a/drivers/usb/cdns3/core.c
> +++ b/drivers/usb/cdns3/core.c
> @@ -532,11 +532,13 @@ static int cdns3_probe(struct platform_device *pdev)
>  	if (device_property_read_bool(dev, "usb-role-switch"))
>  		sw_desc.fwnode = dev->fwnode;
> -	cdns->role_sw = usb_role_switch_register(dev, &sw_desc);
> -	if (IS_ERR(cdns->role_sw)) {
> -		ret = PTR_ERR(cdns->role_sw);
> -		dev_warn(dev, "Unable to register Role Switch\n");
> -		goto err3;
> +	if (device_property_read_bool(cdns->dev, "usb-role-switch")) {
> +		cdns->role_sw = usb_role_switch_register(dev, &sw_desc);
> +		if (IS_ERR(cdns->role_sw)) {
> +			ret = PTR_ERR(cdns->role_sw);
> +			dev_warn(dev, "Unable to register Role Switch\n");
> +			goto err3;
> +		}
>  	}
>  	if (cdns->wakeup_irq) {

Makes sense to me. FWIW:

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

thanks,

-- 
heikki

  reply	other threads:[~2020-11-24 11:00 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-23 11:50 [PATCH] Revert "usb: cdns3: core: quit if it uses role switch class" Roger Quadros
2020-11-24  6:43 ` Peter Chen
2020-11-24  9:39   ` Roger Quadros
2020-11-24  9:57     ` Peter Chen
2020-11-24 10:33       ` Roger Quadros
2020-11-24 11:00         ` Heikki Krogerus [this message]
2020-11-24 11:47         ` Peter Chen
2020-11-24 12:22           ` Roger Quadros
2020-11-25  0:36             ` Peter Chen
2020-11-25  9:52               ` Roger Quadros
2020-11-25 10:14                 ` Pawel Laszczak

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=20201124110020.GA1008337@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=pawell@cadence.com \
    --cc=peter.chen@nxp.com \
    --cc=rogerq@ti.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.