stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@kernel.org>
To: Peter Griffin <peter.griffin@linaro.org>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, mathias.nyman@intel.com,
	gregkh@linuxfoundation.org, lee.jones@linaro.org,
	linux-usb@vger.kernel.org, maxime.coquelin@st.com,
	patrice.chotard@st.com, stable@vger.kernel.org,
	yoshihiro.shimoda.uh@renesas.com, felipe.balbi@linux.intel.com
Subject: Re: [PATCH] usb: host: xhci-plat: Make enum xhci_plat_type start at a non zero value
Date: Sat, 26 Mar 2016 12:10:39 +0200	[thread overview]
Message-ID: <87fuvd8s80.fsf@ti.com> (raw)
In-Reply-To: <20160326091050.GA7793@griffinp-ThinkPad-X1-Carbon-2nd>

[-- Attachment #1: Type: text/plain, Size: 7404 bytes --]


Hi,

Peter Griffin <peter.griffin@linaro.org> writes:
> Hi Felipe,
>
> On Fri, 25 Mar 2016, Felipe Balbi wrote:
>
>> 
>> Hi,
>> 
>> Gregory CLEMENT <gregory.clement@free-electrons.com> writes:
>> >> Peter Griffin <peter.griffin@linaro.org> writes:
>> >>> Otherwise generic-xhci and xhci-platform which have no data get wrongly
>> >>> detected as XHCI_PLAT_TYPE_MARVELL_ARMADA by xhci_plat_type_is().
>> >>>
>> >>> This fixes a regression in v4.5 for STiH407 family SoC's which use the
>> >>> synopsis dwc3 IP, whereby the disable_clk error path gets taken due to
>> >>> wrongly being detected as XHCI_PLAT_TYPE_MARVELL_ARMADA and the hcd never
>> >>> gets added.
>> >>>
>> >>> I suspect this will also fix other dwc3 DT platforms such as Exynos,
>> >>> although I've only tested on STih410 SoC.
>> >>>
>> >>> Fixes: 4efb2f694114 ("usb: host: xhci-plat: add struct xhci_plat_priv")
>> >>> Cc: stable@vger.kernel.org
>> >>> Cc: gregory.clement@free-electrons.com
>> >>> Cc: yoshihiro.shimoda.uh@renesas.com
>> >>> Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
>> >>> ---
>> >>>  drivers/usb/host/xhci-plat.h | 2 +-
>> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> >>>
>> >>> diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h
>> >>> index 5a2e2e3..529c3c4 100644
>> >>> --- a/drivers/usb/host/xhci-plat.h
>> >>> +++ b/drivers/usb/host/xhci-plat.h
>> >>> @@ -14,7 +14,7 @@
>> >>>  #include "xhci.h"	/* for hcd_to_xhci() */
>> >>>  
>> >>>  enum xhci_plat_type {
>> >>> -	XHCI_PLAT_TYPE_MARVELL_ARMADA,
>> >>> +	XHCI_PLAT_TYPE_MARVELL_ARMADA = 1,
>> >>>  	XHCI_PLAT_TYPE_RENESAS_RCAR_GEN2,
>> >>>  	XHCI_PLAT_TYPE_RENESAS_RCAR_GEN3,
>> >>
>> >> aren't these platforms using device tree ? Why aren't these just
>> >> different compatible strings ?
>> >
>> > According to 4efb2f69411456d35051e9047c15157c9a5ba217 "usb: host:
>> > xhci-plat: add struct xhci_plat_priv" :
>> >
>> > This patch adds struct xhci_plat_priv to simplify the code to match
>> > platform specific variables. For now, this patch adds a member "type" in
>> > the structure
>> 
>> that's fine but the answer doesn't exactly match my question ;-)
>> 
>> My point is that this enum shouldn't be necessary at all. We have
>> compatible flags to make these checks instead. How about below ?
>> (untested, uncompiled, yada yada yada). Note that we DON'T need this
>> xhci_plat_type trickery, just need to be a little bit smarter about how
>> we use driver_data:
>
> Your solution certainly looks more elegant.

cool thanks. Now that I think about this more carefully, we might wanna
take $subject anyway for the -rc and get my version applied for v4.7
merge window. What do you think ?

>> diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c
>> index 1eefc988192d..1ea6c18b74f3 100644
>> --- a/drivers/usb/host/xhci-mvebu.c
>> +++ b/drivers/usb/host/xhci-mvebu.c
>> @@ -41,8 +41,9 @@ static void xhci_mvebu_mbus_config(void __iomem *base,
>>  	}
>>  }
>>  
>> -int xhci_mvebu_mbus_init_quirk(struct platform_device *pdev)
>> +int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
>>  {
>> +	struct platform_device *pdev = to_platform_device(hcd->self.controller);
>>  	struct resource	*res;
>>  	void __iomem *base;
>>  	const struct mbus_dram_target_info *dram;
>> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
>> index 5c15e9bc5f7a..adb77c60a9ae 100644
>> --- a/drivers/usb/host/xhci-plat.c
>> +++ b/drivers/usb/host/xhci-plat.c
>> @@ -47,43 +47,56 @@ static void xhci_plat_quirks(struct device *dev, struct xhci_hcd *xhci)
>>  	xhci->quirks |= XHCI_PLAT;
>>  }
>>  
>> +static void xhci_priv_plat_start(struct usb_hcd *hcd)
>> +{
>> +	struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
>> +
>> +	if (priv->plat_start)
>> +		priv->plat_start(hcd);
>> +}
>> +
>> +static int xhci_priv_init_quirk(struct usb_hcd *hcd)
>> +{
>> +	struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
>> +
>> +	if (!priv->init_quirk)
>> +		return 0;
>> +
>> +	return priv->init_quirk(hcd);
>> +}
>> +
>>  /* called during probe() after chip reset completes */
>>  static int xhci_plat_setup(struct usb_hcd *hcd)
>>  {
>>  	int ret;
>>  
>> -	if (xhci_plat_type_is(hcd, XHCI_PLAT_TYPE_RENESAS_RCAR_GEN2) ||
>> -	    xhci_plat_type_is(hcd, XHCI_PLAT_TYPE_RENESAS_RCAR_GEN3)) {
>> -		ret = xhci_rcar_init_quirk(hcd);
>> -		if (ret)
>> -			return ret;
>> -	}
>> +	ret = xhci_priv_init_quirk(hcd);
>> +	if (ret)
>> +		return ret;
>>  
>>  	return xhci_gen_setup(hcd, xhci_plat_quirks);
>>  }
>>  
>>  static int xhci_plat_start(struct usb_hcd *hcd)
>>  {
>> -	if (xhci_plat_type_is(hcd, XHCI_PLAT_TYPE_RENESAS_RCAR_GEN2) ||
>> -	    xhci_plat_type_is(hcd, XHCI_PLAT_TYPE_RENESAS_RCAR_GEN3))
>> -		xhci_rcar_start(hcd);
>> -
>> +	xhci_priv_plat_start(hcd);
>>  	return xhci_run(hcd);
>>  }
>>  
>>  #ifdef CONFIG_OF
>>  static const struct xhci_plat_priv xhci_plat_marvell_armada = {
>> -	.type = XHCI_PLAT_TYPE_MARVELL_ARMADA,
>> +	.init_quirk = xhci_mvebu_mbus_init_quirk,
>>  };
>>  
>>  static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen2 = {
>> -	.type = XHCI_PLAT_TYPE_RENESAS_RCAR_GEN2,
>>  	.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V1,
>> +	.init_quirk = xhci_rcar_init_quirk,
>>  };
>>  
>>  static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen3 = {
>> -	.type = XHCI_PLAT_TYPE_RENESAS_RCAR_GEN3,
>>  	.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V2,
>> +	.init_quirk = xhci_rcar_init_quirk,
>> +	.plat_start = xhci_rcar_start,
>>  };
>>  
>>  static const struct of_device_id usb_xhci_of_match[] = {
>> diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h
>> index 5a2e2e3936c4..c4d565980832 100644
>> --- a/drivers/usb/host/xhci-plat.h
>> +++ b/drivers/usb/host/xhci-plat.h
>> @@ -13,27 +13,13 @@
>>  
>>  #include "xhci.h"	/* for hcd_to_xhci() */
>>  
>> -enum xhci_plat_type {
>> -	XHCI_PLAT_TYPE_MARVELL_ARMADA,
>> -	XHCI_PLAT_TYPE_RENESAS_RCAR_GEN2,
>> -	XHCI_PLAT_TYPE_RENESAS_RCAR_GEN3,
>> -};
>> -
>>  struct xhci_plat_priv {
>>  	enum xhci_plat_type type;
>>  	const char *firmware_name;
>> +	void (*plat_start)(struct usb_hcd *);
>> +	int (*init_quirk)(struct usb_hcd *);
>>  };
>>  
>>  #define hcd_to_xhci_priv(h) ((struct xhci_plat_priv *)hcd_to_xhci(h)->priv)
>>  
>> -static inline bool xhci_plat_type_is(struct usb_hcd *hcd,
>> -				     enum xhci_plat_type type)
>> -{
>> -	struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
>> -
>> -	if (priv && priv->type == type)
>> -		return true;
>> -	else
>> -		return false;
>> -}
>>  #endif	/* _XHCI_PLAT_H */
>> 
>> ps: there might be bugs there, but it's a holiday and I really shouldn't
>> be spending time on this right now ;-)
>
> I'm also off on holiday now until Sunday 10th April... yay :-)

heh, cool :-)

>> Anyway, have fun testing. Let me know if it doesn't work.
>
> I only have access to STi platforms which were broken by this change.
> Not any of the platforms which rely on the functionality which
> was introduced (although I can't see any reason why your patch wouldn't work).
>
> Maybe Yoshihiro (on CC) could test this on the Renesas platforms and
> confirm?

sure, that would be great; then we avoid further regressions ;-)

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

  reply	other threads:[~2016-03-26 10:10 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-25 14:46 [PATCH] usb: host: xhci-plat: Make enum xhci_plat_type start at a non zero value Peter Griffin
2016-03-25 16:58 ` Felipe Balbi
2016-03-25 17:07   ` Gregory CLEMENT
2016-03-25 17:44     ` Felipe Balbi
2016-03-26  9:10       ` Peter Griffin
2016-03-26 10:10         ` Felipe Balbi [this message]
2016-03-29  9:04           ` Lee Jones
2016-03-28  6:55         ` Yoshihiro Shimoda
2016-03-28  8:30           ` Felipe Balbi
2016-03-28 10:01             ` Yoshihiro Shimoda
2016-04-11 15:44 ` Peter Griffin
2016-04-13 17:00   ` Mathias Nyman

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=87fuvd8s80.fsf@ti.com \
    --to=balbi@kernel.org \
    --cc=felipe.balbi@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=gregory.clement@free-electrons.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@intel.com \
    --cc=maxime.coquelin@st.com \
    --cc=patrice.chotard@st.com \
    --cc=peter.griffin@linaro.org \
    --cc=stable@vger.kernel.org \
    --cc=yoshihiro.shimoda.uh@renesas.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).