diff mbox

[v4,1/2] ehci-platform: Add support for controllers with multiple reset lines

Message ID 1456592339-31767-2-git-send-email-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Hans de Goede Feb. 27, 2016, 4:58 p.m. UTC
From: Reinder de Haan <patchesrdh@mveas.com>

At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
reset lines, the controller will not initialize while the reset for
its companion is still asserted, which means we need to de-assert
2 resets for the controller to work.

Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
---
Changes in v2:
-Use the new reset_control_[de]assert_shared reset-controller functions
Changes in v3:
-Adjust for changes to shared-reset reset-controller functions
Changes in v4:
-Fix Ugly continuation line
---
 Documentation/devicetree/bindings/usb/usb-ehci.txt |  2 +-
 drivers/usb/host/ehci-platform.c                   | 41 ++++++++++++----------
 2 files changed, 24 insertions(+), 19 deletions(-)

Comments

Rob Herring March 3, 2016, 10:13 p.m. UTC | #1
On Sat, Feb 27, 2016 at 05:58:58PM +0100, Hans de Goede wrote:
> From: Reinder de Haan <patchesrdh@mveas.com>
> 
> At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
> reset lines, the controller will not initialize while the reset for
> its companion is still asserted, which means we need to de-assert
> 2 resets for the controller to work.
> 
> Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> Acked-by: Alan Stern <stern@rowland.harvard.edu>
> ---
> Changes in v2:
> -Use the new reset_control_[de]assert_shared reset-controller functions
> Changes in v3:
> -Adjust for changes to shared-reset reset-controller functions
> Changes in v4:
> -Fix Ugly continuation line
> ---
>  Documentation/devicetree/bindings/usb/usb-ehci.txt |  2 +-

Acked-by: Rob Herring <robh@kernel.org>

>  drivers/usb/host/ehci-platform.c                   | 41 ++++++++++++----------
>  2 files changed, 24 insertions(+), 19 deletions(-)
Greg Kroah-Hartman March 4, 2016, 4:35 a.m. UTC | #2
On Sat, Feb 27, 2016 at 05:58:58PM +0100, Hans de Goede wrote:
> From: Reinder de Haan <patchesrdh@mveas.com>
> 
> At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
> reset lines, the controller will not initialize while the reset for
> its companion is still asserted, which means we need to de-assert
> 2 resets for the controller to work.
> 
> Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> Acked-by: Alan Stern <stern@rowland.harvard.edu>
> Acked-by: Rob Herring <robh@kernel.org>
> ---
> Changes in v2:
> -Use the new reset_control_[de]assert_shared reset-controller functions
> Changes in v3:
> -Adjust for changes to shared-reset reset-controller functions
> Changes in v4:
> -Fix Ugly continuation line

This breaks the build horribly :(

As does patch 2/2, ugh.
Hans de Goede March 4, 2016, 7:27 a.m. UTC | #3
Hi,

On 04-03-16 05:35, Greg Kroah-Hartman wrote:
> On Sat, Feb 27, 2016 at 05:58:58PM +0100, Hans de Goede wrote:
>> From: Reinder de Haan <patchesrdh@mveas.com>
>>
>> At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
>> reset lines, the controller will not initialize while the reset for
>> its companion is still asserted, which means we need to de-assert
>> 2 resets for the controller to work.
>>
>> Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
>> Acked-by: Rob Herring <robh@kernel.org>
>> ---
>> Changes in v2:
>> -Use the new reset_control_[de]assert_shared reset-controller functions
>> Changes in v3:
>> -Adjust for changes to shared-reset reset-controller functions
>> Changes in v4:
>> -Fix Ugly continuation line
>
> This breaks the build horribly :(
>
> As does patch 2/2, ugh.

As said in the cover letter:

"These patches apply on top of the related
reset-controller patches which have just been merged here:

git://git.pengutronix.de/git/pza/linux.git reset/next"

I guess I should have done s/apply on top of/depend on/
in the above bit. These patches apply fine without those
changes, but indeed they will not build.

You may want to ask Philipp Zabel (added to the To: list)
to create a topic branch for this which you can merge into
your tree.

Regards,

Hans
Greg Kroah-Hartman March 5, 2016, 8:02 p.m. UTC | #4
On Fri, Mar 04, 2016 at 08:27:26AM +0100, Hans de Goede wrote:
> Hi,
> 
> On 04-03-16 05:35, Greg Kroah-Hartman wrote:
> >On Sat, Feb 27, 2016 at 05:58:58PM +0100, Hans de Goede wrote:
> >>From: Reinder de Haan <patchesrdh@mveas.com>
> >>
> >>At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
> >>reset lines, the controller will not initialize while the reset for
> >>its companion is still asserted, which means we need to de-assert
> >>2 resets for the controller to work.
> >>
> >>Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
> >>Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> >>Acked-by: Alan Stern <stern@rowland.harvard.edu>
> >>Acked-by: Rob Herring <robh@kernel.org>
> >>---
> >>Changes in v2:
> >>-Use the new reset_control_[de]assert_shared reset-controller functions
> >>Changes in v3:
> >>-Adjust for changes to shared-reset reset-controller functions
> >>Changes in v4:
> >>-Fix Ugly continuation line
> >
> >This breaks the build horribly :(
> >
> >As does patch 2/2, ugh.
> 
> As said in the cover letter:
> 
> "These patches apply on top of the related
> reset-controller patches which have just been merged here:
> 
> git://git.pengutronix.de/git/pza/linux.git reset/next"
> 
> I guess I should have done s/apply on top of/depend on/
> in the above bit. These patches apply fine without those
> changes, but indeed they will not build.

Then I can't take them, you know this :(

> You may want to ask Philipp Zabel (added to the To: list)
> to create a topic branch for this which you can merge into
> your tree.

If you all want me to do that, fine, otherwise just resend them after
4.6-rc1 is out and the build will not break at that time.

thanks,

greg k-h
kernel test robot March 5, 2016, 10:45 p.m. UTC | #5
Hi Reinder,

[auto build test ERROR on robh/for-next]
[also build test ERROR on v4.5-rc6 next-20160304]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Hans-de-Goede/hci-platform-Add-support-for-controllers-with-more-then-one-reset-line/20160228-010130
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next
config: x86_64-randconfig-s5-03060621 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers/usb/host/ehci-platform.c: In function 'ehci_platform_probe':
>> drivers/usb/host/ehci-platform.c:239:5: error: implicit declaration of function 'devm_reset_control_get_shared_by_index' [-Werror=implicit-function-declaration]
        devm_reset_control_get_shared_by_index(
        ^
   drivers/usb/host/ehci-platform.c:238:22: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
       priv->resets[rst] =
                         ^
   cc1: some warnings being treated as errors

vim +/devm_reset_control_get_shared_by_index +239 drivers/usb/host/ehci-platform.c

   233					break;
   234				}
   235			}
   236	
   237			for (rst = 0; rst < EHCI_MAX_RESETS; rst++) {
   238				priv->resets[rst] =
 > 239					devm_reset_control_get_shared_by_index(
   240							&dev->dev, rst);
   241				if (IS_ERR(priv->resets[rst])) {
   242					err = PTR_ERR(priv->resets[rst]);

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Hans de Goede March 8, 2016, 10:53 a.m. UTC | #6
Hi,

On 05-03-16 21:02, Greg Kroah-Hartman wrote:
> On Fri, Mar 04, 2016 at 08:27:26AM +0100, Hans de Goede wrote:
>> Hi,
>>
>> On 04-03-16 05:35, Greg Kroah-Hartman wrote:
>>> On Sat, Feb 27, 2016 at 05:58:58PM +0100, Hans de Goede wrote:
>>>> From: Reinder de Haan <patchesrdh@mveas.com>
>>>>
>>>> At least the EHCI/OHCI found on the Allwinnner H3 SoC needs multiple
>>>> reset lines, the controller will not initialize while the reset for
>>>> its companion is still asserted, which means we need to de-assert
>>>> 2 resets for the controller to work.
>>>>
>>>> Signed-off-by: Reinder de Haan <patchesrdh@mveas.com>
>>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
>>>> Acked-by: Rob Herring <robh@kernel.org>
>>>> ---
>>>> Changes in v2:
>>>> -Use the new reset_control_[de]assert_shared reset-controller functions
>>>> Changes in v3:
>>>> -Adjust for changes to shared-reset reset-controller functions
>>>> Changes in v4:
>>>> -Fix Ugly continuation line
>>>
>>> This breaks the build horribly :(
>>>
>>> As does patch 2/2, ugh.
>>
>> As said in the cover letter:
>>
>> "These patches apply on top of the related
>> reset-controller patches which have just been merged here:
>>
>> git://git.pengutronix.de/git/pza/linux.git reset/next"
>>
>> I guess I should have done s/apply on top of/depend on/
>> in the above bit. These patches apply fine without those
>> changes, but indeed they will not build.
>
> Then I can't take them, you know this :(
>
>> You may want to ask Philipp Zabel (added to the To: list)
>> to create a topic branch for this which you can merge into
>> your tree.
>
> If you all want me to do that, fine, otherwise just resend them after
> 4.6-rc1 is out and the build will not break at that time.

Ok I will resend these after 4.6-rc1

Regards,

Hans
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/usb/usb-ehci.txt b/Documentation/devicetree/bindings/usb/usb-ehci.txt
index a12d601..0701812 100644
--- a/Documentation/devicetree/bindings/usb/usb-ehci.txt
+++ b/Documentation/devicetree/bindings/usb/usb-ehci.txt
@@ -18,7 +18,7 @@  Optional properties:
  - clocks : a list of phandle + clock specifier pairs
  - phys : phandle + phy specifier pair
  - phy-names : "usb"
- - resets : phandle + reset specifier pair
+ - resets : a list of phandle + reset specifier pairs
 
 Example (Sequoia 440EPx):
     ehci@e0000300 {
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index bd7082f2..5ca749c 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -39,11 +39,12 @@ 
 
 #define DRIVER_DESC "EHCI generic platform driver"
 #define EHCI_MAX_CLKS 3
+#define EHCI_MAX_RESETS 2
 #define hcd_to_ehci_priv(h) ((struct ehci_platform_priv *)hcd_to_ehci(h)->priv)
 
 struct ehci_platform_priv {
 	struct clk *clks[EHCI_MAX_CLKS];
-	struct reset_control *rst;
+	struct reset_control *resets[EHCI_MAX_RESETS];
 	struct phy **phys;
 	int num_phys;
 	bool reset_on_resume;
@@ -149,7 +150,7 @@  static int ehci_platform_probe(struct platform_device *dev)
 	struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ehci_platform_priv *priv;
 	struct ehci_hcd *ehci;
-	int err, irq, phy_num, clk = 0;
+	int err, irq, phy_num, clk = 0, rst = 0;
 
 	if (usb_disabled())
 		return -ENODEV;
@@ -232,18 +233,22 @@  static int ehci_platform_probe(struct platform_device *dev)
 				break;
 			}
 		}
-	}
 
-	priv->rst = devm_reset_control_get_optional(&dev->dev, NULL);
-	if (IS_ERR(priv->rst)) {
-		err = PTR_ERR(priv->rst);
-		if (err == -EPROBE_DEFER)
-			goto err_put_clks;
-		priv->rst = NULL;
-	} else {
-		err = reset_control_deassert(priv->rst);
-		if (err)
-			goto err_put_clks;
+		for (rst = 0; rst < EHCI_MAX_RESETS; rst++) {
+			priv->resets[rst] =
+				devm_reset_control_get_shared_by_index(
+						&dev->dev, rst);
+			if (IS_ERR(priv->resets[rst])) {
+				err = PTR_ERR(priv->resets[rst]);
+				if (err == -EPROBE_DEFER)
+					goto err_reset;
+				priv->resets[rst] = NULL;
+				break;
+			}
+			err = reset_control_deassert(priv->resets[rst]);
+			if (err)
+				goto err_reset;
+		}
 	}
 
 	if (pdata->big_endian_desc)
@@ -300,8 +305,8 @@  err_power:
 	if (pdata->power_off)
 		pdata->power_off(dev);
 err_reset:
-	if (priv->rst)
-		reset_control_assert(priv->rst);
+	while (--rst >= 0)
+		reset_control_assert(priv->resets[rst]);
 err_put_clks:
 	while (--clk >= 0)
 		clk_put(priv->clks[clk]);
@@ -319,15 +324,15 @@  static int ehci_platform_remove(struct platform_device *dev)
 	struct usb_hcd *hcd = platform_get_drvdata(dev);
 	struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd);
-	int clk;
+	int clk, rst;
 
 	usb_remove_hcd(hcd);
 
 	if (pdata->power_off)
 		pdata->power_off(dev);
 
-	if (priv->rst)
-		reset_control_assert(priv->rst);
+	for (rst = 0; rst < EHCI_MAX_RESETS && priv->resets[rst]; rst++)
+		reset_control_assert(priv->resets[rst]);
 
 	for (clk = 0; clk < EHCI_MAX_CLKS && priv->clks[clk]; clk++)
 		clk_put(priv->clks[clk]);