All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line
@ 2016-04-09 14:15 Hans de Goede
  2016-04-09 14:15 ` [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines Hans de Goede
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Hans de Goede @ 2016-04-09 14:15 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Greg, et al,

Here is a resend of my last version of the patch set to support usb
controllers which have multiple resets.

Unfortunately the shared reset controller support this depends on did
not make it into 4.6. Philipp Zabel, the reset maintainer (in the Cc)
has put these patches in a stable branch / tag here:

git://git.pengutronix.de/git/pza/linux.git tags/reset-for-4.7

Can you please merge in this tag and then these 2 patches for 4.7 ?

Changes in v2:
-Switch to now shared reset_[de]assert functions

Changes in v3:
-Adjust for changes to shared-reset reset-controller functions

Changes in v4:
-Fix Ugly continuation line
-Add Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

Changes in v5:
-No changes, resend for merging into 4.7

Thanks & Regards,

Hans

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines
  2016-04-09 14:15 [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Hans de Goede
@ 2016-04-09 14:15 ` Hans de Goede
  2016-04-09 22:44   ` kbuild test robot
  2016-04-09 14:15 ` [PATCH v5 2/2] ohci-platform: " Hans de Goede
  2016-04-11  7:34 ` [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Philipp Zabel
  2 siblings, 1 reply; 7+ messages in thread
From: Hans de Goede @ 2016-04-09 14:15 UTC (permalink / raw)
  To: linux-arm-kernel

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>
---
Changes in v2:
-Use the new reset_control_[de]assert_shared reset-controller functions
---
 Documentation/devicetree/bindings/usb/usb-ehci.txt |  2 +-
 drivers/usb/host/ehci-platform.c                   | 41 ++++++++++++----------
 2 files changed, 24 insertions(+), 19 deletions(-)

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 at e0000300 {
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index 1757ebb..f4c708f 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]);
-- 
2.7.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v5 2/2] ohci-platform: Add support for controllers with multiple reset lines
  2016-04-09 14:15 [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Hans de Goede
  2016-04-09 14:15 ` [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines Hans de Goede
@ 2016-04-09 14:15 ` Hans de Goede
  2016-04-09 22:42   ` kbuild test robot
  2016-04-11  7:34 ` [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Philipp Zabel
  2 siblings, 1 reply; 7+ messages in thread
From: Hans de Goede @ 2016-04-09 14:15 UTC (permalink / raw)
  To: linux-arm-kernel

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: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
-New patch in v2 of this patch-set, to complement the identical patch for
 the ehci-platform code
---
 Documentation/devicetree/bindings/usb/usb-ohci.txt |  2 +-
 drivers/usb/host/ohci-platform.c                   | 43 ++++++++++++----------
 2 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/usb-ohci.txt b/Documentation/devicetree/bindings/usb/usb-ohci.txt
index 19233b7..9df4569 100644
--- a/Documentation/devicetree/bindings/usb/usb-ohci.txt
+++ b/Documentation/devicetree/bindings/usb/usb-ohci.txt
@@ -14,7 +14,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:
 
diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index ae1c988..898b740 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -33,11 +33,12 @@
 
 #define DRIVER_DESC "OHCI generic platform driver"
 #define OHCI_MAX_CLKS 3
+#define OHCI_MAX_RESETS 2
 #define hcd_to_ohci_priv(h) ((struct ohci_platform_priv *)hcd_to_ohci(h)->priv)
 
 struct ohci_platform_priv {
 	struct clk *clks[OHCI_MAX_CLKS];
-	struct reset_control *rst;
+	struct reset_control *resets[OHCI_MAX_RESETS];
 	struct phy **phys;
 	int num_phys;
 };
@@ -117,7 +118,7 @@ static int ohci_platform_probe(struct platform_device *dev)
 	struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ohci_platform_priv *priv;
 	struct ohci_hcd *ohci;
-	int err, irq, phy_num, clk = 0;
+	int err, irq, phy_num, clk = 0, rst = 0;
 
 	if (usb_disabled())
 		return -ENODEV;
@@ -195,19 +196,21 @@ static int ohci_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 < OHCI_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)
@@ -265,8 +268,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]);
@@ -284,15 +287,15 @@ static int ohci_platform_remove(struct platform_device *dev)
 	struct usb_hcd *hcd = platform_get_drvdata(dev);
 	struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev);
 	struct ohci_platform_priv *priv = hcd_to_ohci_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 < OHCI_MAX_RESETS && priv->resets[rst]; rst++)
+		reset_control_assert(priv->resets[rst]);
 
 	for (clk = 0; clk < OHCI_MAX_CLKS && priv->clks[clk]; clk++)
 		clk_put(priv->clks[clk]);
-- 
2.7.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v5 2/2] ohci-platform: Add support for controllers with multiple reset lines
  2016-04-09 14:15 ` [PATCH v5 2/2] ohci-platform: " Hans de Goede
@ 2016-04-09 22:42   ` kbuild test robot
  0 siblings, 0 replies; 7+ messages in thread
From: kbuild test robot @ 2016-04-09 22:42 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Hans,

[auto build test ERROR on robh/for-next]
[also build test ERROR on v4.6-rc2 next-20160408]
[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/20160409-221746
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next
config: x86_64-randconfig-s5-04100613 (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/ohci-platform.c: In function 'ohci_platform_probe':
>> drivers/usb/host/ohci-platform.c:201: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/ohci-platform.c:200: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 +201 drivers/usb/host/ohci-platform.c

   195					priv->clks[clk] = NULL;
   196					break;
   197				}
   198			}
   199			for (rst = 0; rst < OHCI_MAX_RESETS; rst++) {
   200				priv->resets[rst] =
 > 201					devm_reset_control_get_shared_by_index(
   202									&dev->dev, rst);
   203				if (IS_ERR(priv->resets[rst])) {
   204					err = PTR_ERR(priv->resets[rst]);

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 25550 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160410/af0aa259/attachment-0001.obj>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines
  2016-04-09 14:15 ` [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines Hans de Goede
@ 2016-04-09 22:44   ` kbuild test robot
  2016-04-10  8:42     ` Hans de Goede
  0 siblings, 1 reply; 7+ messages in thread
From: kbuild test robot @ 2016-04-09 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Reinder,

[auto build test ERROR on robh/for-next]
[also build test ERROR on v4.6-rc2 next-20160408]
[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/20160409-221746
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next
config: i386-allmodconfig (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 54415 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160410/54b983f1/attachment-0001.obj>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines
  2016-04-09 22:44   ` kbuild test robot
@ 2016-04-10  8:42     ` Hans de Goede
  0 siblings, 0 replies; 7+ messages in thread
From: Hans de Goede @ 2016-04-10  8:42 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On 10-04-16 00:44, kbuild test robot wrote:
> Hi Reinder,
>
> [auto build test ERROR on robh/for-next]
> [also build test ERROR on v4.6-rc2 next-20160408]
> [if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

As mentioned in the cover letter, these 2 patches depend on this stable-tag:

git://git.pengutronix.de/git/pza/linux.git tags/reset-for-4.7

Being merged into the tree where they get applied first.

Regards,

Hans



>
> url:    https://github.com/0day-ci/linux/commits/Hans-de-Goede/hci-platform-Add-support-for-controllers-with-more-then-one-reset-line/20160409-221746
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next
> config: i386-allmodconfig (attached as .config)
> reproduce:
>          # save the attached .config to linux build tree
>          make ARCH=i386
>
> 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
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line
  2016-04-09 14:15 [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Hans de Goede
  2016-04-09 14:15 ` [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines Hans de Goede
  2016-04-09 14:15 ` [PATCH v5 2/2] ohci-platform: " Hans de Goede
@ 2016-04-11  7:34 ` Philipp Zabel
  2 siblings, 0 replies; 7+ messages in thread
From: Philipp Zabel @ 2016-04-11  7:34 UTC (permalink / raw)
  To: linux-arm-kernel

Am Samstag, den 09.04.2016, 16:15 +0200 schrieb Hans de Goede:
> Hi Greg, et al,
> 
> Here is a resend of my last version of the patch set to support usb
> controllers which have multiple resets.
> 
> Unfortunately the shared reset controller support this depends on did
> not make it into 4.6. Philipp Zabel, the reset maintainer (in the Cc)
> has put these patches in a stable branch / tag here:
> 
> git://git.pengutronix.de/git/pza/linux.git tags/reset-for-4.7
> 
> Can you please merge in this tag and then these 2 patches for 4.7 ?

Acked-by: Philipp Zabel <p.zabel@pengutronix.de>

Note that as of now, the tag is not yet merged into the arm-soc
maintainer's for-next branch. I've sent the pull request on Mar 31 and
expect it to be merged in the next round.

regards
Philipp

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-04-11  7:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-09 14:15 [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Hans de Goede
2016-04-09 14:15 ` [PATCH v5 1/2] ehci-platform: Add support for controllers with multiple reset lines Hans de Goede
2016-04-09 22:44   ` kbuild test robot
2016-04-10  8:42     ` Hans de Goede
2016-04-09 14:15 ` [PATCH v5 2/2] ohci-platform: " Hans de Goede
2016-04-09 22:42   ` kbuild test robot
2016-04-11  7:34 ` [PATCH v5 0/2] ?hci-platform: Add support for controllers with more then one reset line Philipp Zabel

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.