Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-07-02 Thread Munegowda, Keshava
On Fri, Jun 29, 2012 at 9:03 PM, Alan Stern st...@rowland.harvard.edu wrote:
 On Wed, 27 Jun 2012, Russ Dill wrote:

 From: Russ Dill russ.d...@gmail.com

 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.

 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.

 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.

 Tested on Beagleboard xM.

 Looking at the result of this patch, there seem to be a few mistakes
 remaining in the probe routine.

 If the regulator_get() call fails, the failure is logged but ignored.
 Is that really the right thing to do?

 The pm_runtime_get_sync() call occurs before the probe is finished.
 This means that ehci-hcd's resume routine will try to power-up the
 device before its data structures have been initialized.  That can't be
 right.

 The get clocks section occurs after the call to usb_add_hcd().  This
 means the controller will start running before the clock references are
 acquired -- so the clocks might still be turned off.  That can't be
 right either.

 If the clk_get(dev, utmi_p1_gfclk) call fails, the error path never
 calls usb_remove_hcd().

 The err_add_hcd pathway never calls usb_put_hcd().

 I'm going to resubmit my most recent patch based the current
 ehci-omap.c, but you or someone else will still have to fix these
 problems.

 Alan Stern


Hi Rus Dill,
once Alan post his changes on ehci-omap.c, please re-base this
patch on top of it.
so that, I will rebase UHH-TLL split series on top your patch.

regards
keshava
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-07-02 Thread Samuel Ortiz
Hi Russ,

On Thu, Jun 14, 2012 at 09:24:21AM -0700, Russ Dill wrote:
 From: Russ Dill russ.d...@gmail.com
 
 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.
 
 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.
 
 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.
 
 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.
 
 I've tested this on Beagleboard xM, I'd really like to get an ack from
 the 3430 sdp and OMAP5 guys before getting this merged.
 
 v3 - Brown paper bag its too early in the morning actually run
  git commit amend fix
 v2 - Put cansleep gpiolib call outside of spinlock
 
 Signed-off-by: Russ Dill russ.d...@gmail.com
 ---
  drivers/mfd/omap-usb-host.c  |   48 
 +-
  drivers/usb/host/ehci-omap.c |   18 +++-
  2 files changed, 55 insertions(+), 11 deletions(-)
I applied this one to my for-linus branch, it will be part of my next 3.5 pull
request to Linus.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-07-02 Thread Munegowda, Keshava
On Mon, Jul 2, 2012 at 4:52 PM, Samuel Ortiz sa...@linux.intel.com wrote:
 Hi Russ,

 On Thu, Jun 14, 2012 at 09:24:21AM -0700, Russ Dill wrote:
 From: Russ Dill russ.d...@gmail.com

 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.

 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.

 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.

 I've tested this on Beagleboard xM, I'd really like to get an ack from
 the 3430 sdp and OMAP5 guys before getting this merged.

 v3 - Brown paper bag its too early in the morning actually run
  git commit amend fix
 v2 - Put cansleep gpiolib call outside of spinlock

 Signed-off-by: Russ Dill russ.d...@gmail.com
 ---
  drivers/mfd/omap-usb-host.c  |   48 
 +-
  drivers/usb/host/ehci-omap.c |   18 +++-
  2 files changed, 55 insertions(+), 11 deletions(-)
 I applied this one to my for-linus branch, it will be part of my next 3.5 pull
 request to Linus.

 Cheers,
 Samuel.


Hi Samuel
   please drop this patch for now , since Alan stern has mentioned
improvements for this patch and we
need to wait for Alan's new patch on ehci-omap.c and then Rus dill
patch and my usbhs tll
patch series need to be rebased.


regards
keshava
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-07-02 Thread Alan Stern
On Mon, 2 Jul 2012, Munegowda, Keshava wrote:

 Hi Samuel
please drop this patch for now , since Alan stern has mentioned
 improvements for this patch and we
 need to wait for Alan's new patch on ehci-omap.c and then Rus dill
 patch and my usbhs tll
 patch series need to be rebased.

No, that's okay.  I rebased my patch on top of Russ's; see

http://marc.info/?l=linux-usbm=134098478928668w=2

so Russ's patch should be kept.  My patch needed other changes also, so
this wasn't a big deal.

The extra problems I mentioned in an earlier email will still need to
be fixed after both Russ's patch and my own are merged.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-07-02 Thread Munegowda, Keshava
On Mon, Jul 2, 2012 at 7:35 PM, Alan Stern st...@rowland.harvard.edu wrote:
 On Mon, 2 Jul 2012, Munegowda, Keshava wrote:

 Hi Samuel
please drop this patch for now , since Alan stern has mentioned
 improvements for this patch and we
 need to wait for Alan's new patch on ehci-omap.c and then Rus dill
 patch and my usbhs tll
 patch series need to be rebased.

 No, that's okay.  I rebased my patch on top of Russ's; see

 http://marc.info/?l=linux-usbm=134098478928668w=2

 so Russ's patch should be kept.  My patch needed other changes also, so
 this wasn't a big deal.

 The extra problems I mentioned in an earlier email will still need to
 be fixed after both Russ's patch and my own are merged.

 Alan Stern

Thanks Alan,
Ok, then I will rebase my TLL driver patch series on top
of this patch.

regards
keshava
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-29 Thread Alan Stern
On Wed, 27 Jun 2012, Russ Dill wrote:

 From: Russ Dill russ.d...@gmail.com
 
 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.
 
 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.
 
 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.
 
 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.
 
 Tested on Beagleboard xM.

Looking at the result of this patch, there seem to be a few mistakes 
remaining in the probe routine.

If the regulator_get() call fails, the failure is logged but ignored.  
Is that really the right thing to do?

The pm_runtime_get_sync() call occurs before the probe is finished.  
This means that ehci-hcd's resume routine will try to power-up the 
device before its data structures have been initialized.  That can't be 
right.

The get clocks section occurs after the call to usb_add_hcd().  This
means the controller will start running before the clock references are
acquired -- so the clocks might still be turned off.  That can't be
right either.

If the clk_get(dev, utmi_p1_gfclk) call fails, the error path never 
calls usb_remove_hcd().

The err_add_hcd pathway never calls usb_put_hcd().

I'm going to resubmit my most recent patch based the current 
ehci-omap.c, but you or someone else will still have to fix these 
problems.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-28 Thread Sarashetti, Mantesh
'Acked-by: mant...@ti.com'
'Tested-by: mant...@ti.com'

Regards,
Mantesh

-Original Message-
From: Russ Dill [mailto:russ.d...@gmail.com] On Behalf Of Dill, Russ
Sent: Wednesday, June 27, 2012 9:00 PM
To: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org; 
linux-...@vger.kernel.org
Cc: Balbi, Felipe; Munegowda, Keshava; Partha Basak; Igor Grinberg; Samuel 
Ortiz; Sarashetti, Mantesh; Setty, Sapna; Russ Dill
Subject: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

From: Russ Dill russ.d...@gmail.com

'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
an issue where the ULPI PHYs were not held in reset while initializing
the EHCI controller. However, it also changes behavior in
omap-usb-host.c omap_usbhs_init by releasing reset while the
configuration in that function was done.

This change caused a regression on BB-xM where USB would not function
if 'usb start' had been run from u-boot before booting. A change was
made to release reset a little bit earlier which fixed the issue on
BB-xM and did not cause any regressions on 3430 sdp, the board for
which the fix was originally made.

This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

The original fix to hold the EHCI controller in reset during
initialization was correct, however it appears that changing
omap_usbhs_init to not hold the PHYs in reset during it's
configuration was incorrect. This patch first reverts both fixes, and
then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
reset as the original patch had done. It also is sure to incorporate
the _cansleep change that has been made in the meantime.

Tested on Beagleboard xM.

v3 - Don't double free gpio
v2 - Put cansleep gpiolib call outside of spinlock

Signed-off-by: Russ Dill russ.d...@gmail.com
---
 drivers/mfd/omap-usb-host.c  |   48 +-
 drivers/usb/host/ehci-omap.c |   26 +++
 2 files changed, 55 insertions(+), 19 deletions(-)

diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 7e96bb2..41088ec 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -25,6 +25,7 @@
 #include linux/clk.h
 #include linux/dma-mapping.h
 #include linux/spinlock.h
+#include linux/gpio.h
 #include plat/cpu.h
 #include plat/usb.h
 #include linux/pm_runtime.h
@@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
dev_dbg(dev, starting TI HSUSB Controller\n);
 
pm_runtime_get_sync(dev);
-   spin_lock_irqsave(omap-lock, flags);
 
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
+GPIOF_OUT_INIT_LOW, USB1 PHY reset);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
+GPIOF_OUT_INIT_LOW, USB2 PHY reset);
+
+   /* Hold the PHY in RESET for enough time till DIR is high */
+   udelay(10);
+   }
+
+   spin_lock_irqsave(omap-lock, flags);
omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);
 
@@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
}
 
spin_unlock_irqrestore(omap-lock, flags);
+
+   if (pdata-ehci_data-phy_reset) {
+   /* Hold the PHY in RESET for enough time till
+* PHY is settled and ready
+*/
+   udelay(10);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[0], 1);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[1], 1);
+   }
+
pm_runtime_put_sync(dev);
 }
 
+static void omap_usbhs_deinit(struct device *dev)
+{
+   struct usbhs_hcd_omap   *omap = dev_get_drvdata(dev);
+   struct usbhs_omap_platform_data *pdata = omap-platdata;
+
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[0]);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[1]);
+   }
+}
+
 
 /**
  * usbhs_omap_probe - initialize TI-based HCDs
@@ -767,6 +811,7 @@ static int __devinit usbhs_omap_probe(struct 
platform_device *pdev)
goto end_probe;
 
 err_alloc:
+   omap_usbhs_deinit(pdev-dev);
iounmap(omap-tll_base

[PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-27 Thread Russ Dill
From: Russ Dill russ.d...@gmail.com

'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
an issue where the ULPI PHYs were not held in reset while initializing
the EHCI controller. However, it also changes behavior in
omap-usb-host.c omap_usbhs_init by releasing reset while the
configuration in that function was done.

This change caused a regression on BB-xM where USB would not function
if 'usb start' had been run from u-boot before booting. A change was
made to release reset a little bit earlier which fixed the issue on
BB-xM and did not cause any regressions on 3430 sdp, the board for
which the fix was originally made.

This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

The original fix to hold the EHCI controller in reset during
initialization was correct, however it appears that changing
omap_usbhs_init to not hold the PHYs in reset during it's
configuration was incorrect. This patch first reverts both fixes, and
then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
reset as the original patch had done. It also is sure to incorporate
the _cansleep change that has been made in the meantime.

Tested on Beagleboard xM.

v3 - Don't double free gpio
v2 - Put cansleep gpiolib call outside of spinlock

Signed-off-by: Russ Dill russ.d...@gmail.com
---
 drivers/mfd/omap-usb-host.c  |   48 +-
 drivers/usb/host/ehci-omap.c |   26 +++
 2 files changed, 55 insertions(+), 19 deletions(-)

diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 7e96bb2..41088ec 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -25,6 +25,7 @@
 #include linux/clk.h
 #include linux/dma-mapping.h
 #include linux/spinlock.h
+#include linux/gpio.h
 #include plat/cpu.h
 #include plat/usb.h
 #include linux/pm_runtime.h
@@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
dev_dbg(dev, starting TI HSUSB Controller\n);
 
pm_runtime_get_sync(dev);
-   spin_lock_irqsave(omap-lock, flags);
 
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
+GPIOF_OUT_INIT_LOW, USB1 PHY reset);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
+GPIOF_OUT_INIT_LOW, USB2 PHY reset);
+
+   /* Hold the PHY in RESET for enough time till DIR is high */
+   udelay(10);
+   }
+
+   spin_lock_irqsave(omap-lock, flags);
omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);
 
@@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
}
 
spin_unlock_irqrestore(omap-lock, flags);
+
+   if (pdata-ehci_data-phy_reset) {
+   /* Hold the PHY in RESET for enough time till
+* PHY is settled and ready
+*/
+   udelay(10);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[0], 1);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[1], 1);
+   }
+
pm_runtime_put_sync(dev);
 }
 
+static void omap_usbhs_deinit(struct device *dev)
+{
+   struct usbhs_hcd_omap   *omap = dev_get_drvdata(dev);
+   struct usbhs_omap_platform_data *pdata = omap-platdata;
+
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[0]);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[1]);
+   }
+}
+
 
 /**
  * usbhs_omap_probe - initialize TI-based HCDs
@@ -767,6 +811,7 @@ static int __devinit usbhs_omap_probe(struct 
platform_device *pdev)
goto end_probe;
 
 err_alloc:
+   omap_usbhs_deinit(pdev-dev);
iounmap(omap-tll_base);
 
 err_tll:
@@ -818,6 +863,7 @@ static int __devexit usbhs_omap_remove(struct 
platform_device *pdev)
 {
struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev);
 
+   omap_usbhs_deinit(pdev-dev);
iounmap(omap-tll_base);
iounmap(omap-uhh_base);
clk_put(omap-init_60m_fclk);
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index a44294d..35f4788 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -192,14 +192,13 @@ static 

Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-18 Thread Munegowda, Keshava
On Fri, Jun 15, 2012 at 12:36 AM, Sarashetti, Mantesh mant...@ti.com wrote:
 'Acked-by: mant...@ti.com'
 'Tested-by: mant...@ti.com'

 Regards,
 Mantesh
 -Original Message-
 From: Russ Dill [mailto:russ.d...@gmail.com] On Behalf Of Dill, Russ
 Sent: Thursday, June 14, 2012 11:24 AM
 To: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org
 Cc: Balbi, Felipe; Munegowda, Keshava; Partha Basak; Igor Grinberg; Samuel 
 Ortiz; Sarashetti, Mantesh; Setty, Sapna; Russ Dill
 Subject: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

 From: Russ Dill russ.d...@gmail.com

 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.

 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.

 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.

 I've tested this on Beagleboard xM, I'd really like to get an ack from
 the 3430 sdp and OMAP5 guys before getting this merged.

 v3 - Brown paper bag its too early in the morning actually run
     git commit amend fix
 v2 - Put cansleep gpiolib call outside of spinlock

 Signed-off-by: Russ Dill russ.d...@gmail.com
 ---
  drivers/mfd/omap-usb-host.c  |   48 
 +-
  drivers/usb/host/ehci-omap.c |   18 +++-
  2 files changed, 55 insertions(+), 11 deletions(-)

 diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
 index 7e96bb2..41088ec 100644
 --- a/drivers/mfd/omap-usb-host.c
 +++ b/drivers/mfd/omap-usb-host.c
 @@ -25,6 +25,7 @@
  #include linux/clk.h
  #include linux/dma-mapping.h
  #include linux/spinlock.h
 +#include linux/gpio.h
  #include plat/cpu.h
  #include plat/usb.h
  #include linux/pm_runtime.h
 @@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
        dev_dbg(dev, starting TI HSUSB Controller\n);

        pm_runtime_get_sync(dev);
 -       spin_lock_irqsave(omap-lock, flags);

 +       if (pdata-ehci_data-phy_reset) {
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
 +                       gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
 +                                        GPIOF_OUT_INIT_LOW, USB1 PHY 
 reset);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
 +                       gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
 +                                        GPIOF_OUT_INIT_LOW, USB2 PHY 
 reset);
 +
 +               /* Hold the PHY in RESET for enough time till DIR is high */
 +               udelay(10);
 +       }
 +
 +       spin_lock_irqsave(omap-lock, flags);
        omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
        dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);

 @@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
        }

        spin_unlock_irqrestore(omap-lock, flags);
 +
 +       if (pdata-ehci_data-phy_reset) {
 +               /* Hold the PHY in RESET for enough time till
 +                * PHY is settled and ready
 +                */
 +               udelay(10);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
 +                       gpio_set_value_cansleep
 +                               (pdata-ehci_data-reset_gpio_port[0], 1);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
 +                       gpio_set_value_cansleep
 +                               (pdata-ehci_data-reset_gpio_port[1], 1);
 +       }
 +
        pm_runtime_put_sync(dev);
  }

 +static void omap_usbhs_deinit(struct device *dev)
 +{
 +       struct usbhs_hcd_omap           *omap = dev_get_drvdata(dev);
 +       struct usbhs_omap_platform_data *pdata = omap-platdata;
 +
 +       if (pdata-ehci_data-phy_reset) {
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
 +                       gpio_free(pdata-ehci_data-reset_gpio_port[0]);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
 +                       gpio_free(pdata

RE: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-18 Thread Sunil Matange
Thanks Keshava.

Regards
Sunil Matange


-Original Message-
From: Munegowda, Keshava [mailto:keshava_mgo...@ti.com]
Sent: Monday, June 18, 2012 1:59 PM
To: Samuel Ortiz
Cc: Dill, Russ; linux-omap@vger.kernel.org;
linux-arm-ker...@lists.infradead.org; Balbi, Felipe; Partha Basak; Igor
Grinberg; Setty, Sapna; Russ Dill; Mantesh Sarashetti; Sunil Matange;
Nishant Kamat; Linux USB Devel
Subject: Re: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix
issues.

On Fri, Jun 15, 2012 at 12:36 AM, Sarashetti, Mantesh mant...@ti.com
wrote:
 'Acked-by: mant...@ti.com'
 'Tested-by: mant...@ti.com'

 Regards,
 Mantesh
 -Original Message-
 From: Russ Dill [mailto:russ.d...@gmail.com] On Behalf Of Dill, Russ
 Sent: Thursday, June 14, 2012 11:24 AM
 To: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org
 Cc: Balbi, Felipe; Munegowda, Keshava; Partha Basak; Igor Grinberg;
Samuel Ortiz; Sarashetti, Mantesh; Setty, Sapna; Russ Dill
 Subject: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix
issues.

 From: Russ Dill russ.d...@gmail.com

 'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
 an issue where the ULPI PHYs were not held in reset while initializing
 the EHCI controller. However, it also changes behavior in
 omap-usb-host.c omap_usbhs_init by releasing reset while the
 configuration in that function was done.

 This change caused a regression on BB-xM where USB would not function
 if 'usb start' had been run from u-boot before booting. A change was
 made to release reset a little bit earlier which fixed the issue on
 BB-xM and did not cause any regressions on 3430 sdp, the board for
 which the fix was originally made.

 This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
 before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

 The original fix to hold the EHCI controller in reset during
 initialization was correct, however it appears that changing
 omap_usbhs_init to not hold the PHYs in reset during it's
 configuration was incorrect. This patch first reverts both fixes, and
 then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
 reset as the original patch had done. It also is sure to incorporate
 the _cansleep change that has been made in the meantime.

 I've tested this on Beagleboard xM, I'd really like to get an ack from
 the 3430 sdp and OMAP5 guys before getting this merged.

 v3 - Brown paper bag its too early in the morning actually run
     git commit amend fix
 v2 - Put cansleep gpiolib call outside of spinlock

 Signed-off-by: Russ Dill russ.d...@gmail.com
 ---
  drivers/mfd/omap-usb-host.c  |   48
+-
  drivers/usb/host/ehci-omap.c |   18 +++-
  2 files changed, 55 insertions(+), 11 deletions(-)

 diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
 index 7e96bb2..41088ec 100644
 --- a/drivers/mfd/omap-usb-host.c
 +++ b/drivers/mfd/omap-usb-host.c
 @@ -25,6 +25,7 @@
  #include linux/clk.h
  #include linux/dma-mapping.h
  #include linux/spinlock.h
 +#include linux/gpio.h
  #include plat/cpu.h
  #include plat/usb.h
  #include linux/pm_runtime.h
 @@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
        dev_dbg(dev, starting TI HSUSB Controller\n);

        pm_runtime_get_sync(dev);
 -       spin_lock_irqsave(omap-lock, flags);

 +       if (pdata-ehci_data-phy_reset) {
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
 +
gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
 +                                        GPIOF_OUT_INIT_LOW, USB1 PHY
reset);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
 +
gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
 +                                        GPIOF_OUT_INIT_LOW, USB2 PHY
reset);
 +
 +               /* Hold the PHY in RESET for enough time till DIR is
high */
 +               udelay(10);
 +       }
 +
 +       spin_lock_irqsave(omap-lock, flags);
        omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
        dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);

 @@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
        }

        spin_unlock_irqrestore(omap-lock, flags);
 +
 +       if (pdata-ehci_data-phy_reset) {
 +               /* Hold the PHY in RESET for enough time till
 +                * PHY is settled and ready
 +                */
 +               udelay(10);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
 +                       gpio_set_value_cansleep
 +                               (pdata-ehci_data-reset_gpio_port[0],
1);
 +
 +               if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
 +                       gpio_set_value_cansleep
 +                               (pdata-ehci_data-reset_gpio_port[1],
1);
 +       }
 +
        pm_runtime_put_sync(dev);
  }

 +static void omap_usbhs_deinit(struct device *dev)
 +{
 +       struct

[PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-14 Thread Russ Dill
From: Russ Dill russ.d...@gmail.com

'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
an issue where the ULPI PHYs were not held in reset while initializing
the EHCI controller. However, it also changes behavior in
omap-usb-host.c omap_usbhs_init by releasing reset while the
configuration in that function was done.

This change caused a regression on BB-xM where USB would not function
if 'usb start' had been run from u-boot before booting. A change was
made to release reset a little bit earlier which fixed the issue on
BB-xM and did not cause any regressions on 3430 sdp, the board for
which the fix was originally made.

This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

The original fix to hold the EHCI controller in reset during
initialization was correct, however it appears that changing
omap_usbhs_init to not hold the PHYs in reset during it's
configuration was incorrect. This patch first reverts both fixes, and
then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
reset as the original patch had done. It also is sure to incorporate
the _cansleep change that has been made in the meantime.

I've tested this on Beagleboard xM, I'd really like to get an ack from
the 3430 sdp and OMAP5 guys before getting this merged.

v3 - Brown paper bag its too early in the morning actually run
 git commit amend fix
v2 - Put cansleep gpiolib call outside of spinlock

Signed-off-by: Russ Dill russ.d...@gmail.com
---
 drivers/mfd/omap-usb-host.c  |   48 +-
 drivers/usb/host/ehci-omap.c |   18 +++-
 2 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 7e96bb2..41088ec 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -25,6 +25,7 @@
 #include linux/clk.h
 #include linux/dma-mapping.h
 #include linux/spinlock.h
+#include linux/gpio.h
 #include plat/cpu.h
 #include plat/usb.h
 #include linux/pm_runtime.h
@@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
dev_dbg(dev, starting TI HSUSB Controller\n);
 
pm_runtime_get_sync(dev);
-   spin_lock_irqsave(omap-lock, flags);
 
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
+GPIOF_OUT_INIT_LOW, USB1 PHY reset);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
+GPIOF_OUT_INIT_LOW, USB2 PHY reset);
+
+   /* Hold the PHY in RESET for enough time till DIR is high */
+   udelay(10);
+   }
+
+   spin_lock_irqsave(omap-lock, flags);
omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);
 
@@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
}
 
spin_unlock_irqrestore(omap-lock, flags);
+
+   if (pdata-ehci_data-phy_reset) {
+   /* Hold the PHY in RESET for enough time till
+* PHY is settled and ready
+*/
+   udelay(10);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[0], 1);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[1], 1);
+   }
+
pm_runtime_put_sync(dev);
 }
 
+static void omap_usbhs_deinit(struct device *dev)
+{
+   struct usbhs_hcd_omap   *omap = dev_get_drvdata(dev);
+   struct usbhs_omap_platform_data *pdata = omap-platdata;
+
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[0]);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[1]);
+   }
+}
+
 
 /**
  * usbhs_omap_probe - initialize TI-based HCDs
@@ -767,6 +811,7 @@ static int __devinit usbhs_omap_probe(struct 
platform_device *pdev)
goto end_probe;
 
 err_alloc:
+   omap_usbhs_deinit(pdev-dev);
iounmap(omap-tll_base);
 
 err_tll:
@@ -818,6 +863,7 @@ static int __devexit usbhs_omap_remove(struct 
platform_device *pdev)
 {
struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev);
 
+   omap_usbhs_deinit(pdev-dev);
iounmap(omap-tll_base);
iounmap(omap-uhh_base);
clk_put(omap-init_60m_fclk);
diff --git a/drivers/usb/host/ehci-omap.c 

RE: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

2012-06-14 Thread Sarashetti, Mantesh
'Acked-by: mant...@ti.com'
'Tested-by: mant...@ti.com'

Regards,
Mantesh
-Original Message-
From: Russ Dill [mailto:russ.d...@gmail.com] On Behalf Of Dill, Russ
Sent: Thursday, June 14, 2012 11:24 AM
To: linux-omap@vger.kernel.org; linux-arm-ker...@lists.infradead.org
Cc: Balbi, Felipe; Munegowda, Keshava; Partha Basak; Igor Grinberg; Samuel 
Ortiz; Sarashetti, Mantesh; Setty, Sapna; Russ Dill
Subject: [PATCH v3] ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset fix issues.

From: Russ Dill russ.d...@gmail.com

'ARM: OMAP3: USB: Fix the EHCI ULPI PHY reset issue' (1fcb57d0) fixes
an issue where the ULPI PHYs were not held in reset while initializing
the EHCI controller. However, it also changes behavior in
omap-usb-host.c omap_usbhs_init by releasing reset while the
configuration in that function was done.

This change caused a regression on BB-xM where USB would not function
if 'usb start' had been run from u-boot before booting. A change was
made to release reset a little bit earlier which fixed the issue on
BB-xM and did not cause any regressions on 3430 sdp, the board for
which the fix was originally made.

This new fix, 'USB: EHCI: OMAP: Finish ehci omap phy reset cycle
before adding hcd.', (3aa2ae74) caused a regression on OMAP5.

The original fix to hold the EHCI controller in reset during
initialization was correct, however it appears that changing
omap_usbhs_init to not hold the PHYs in reset during it's
configuration was incorrect. This patch first reverts both fixes, and
then changes ehci_hcd_omap_probe in ehci-omap.c to hold the PHYs in
reset as the original patch had done. It also is sure to incorporate
the _cansleep change that has been made in the meantime.

I've tested this on Beagleboard xM, I'd really like to get an ack from
the 3430 sdp and OMAP5 guys before getting this merged.

v3 - Brown paper bag its too early in the morning actually run
 git commit amend fix
v2 - Put cansleep gpiolib call outside of spinlock

Signed-off-by: Russ Dill russ.d...@gmail.com
---
 drivers/mfd/omap-usb-host.c  |   48 +-
 drivers/usb/host/ehci-omap.c |   18 +++-
 2 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 7e96bb2..41088ec 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -25,6 +25,7 @@
 #include linux/clk.h
 #include linux/dma-mapping.h
 #include linux/spinlock.h
+#include linux/gpio.h
 #include plat/cpu.h
 #include plat/usb.h
 #include linux/pm_runtime.h
@@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
dev_dbg(dev, starting TI HSUSB Controller\n);
 
pm_runtime_get_sync(dev);
-   spin_lock_irqsave(omap-lock, flags);
 
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[0],
+GPIOF_OUT_INIT_LOW, USB1 PHY reset);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_request_one(pdata-ehci_data-reset_gpio_port[1],
+GPIOF_OUT_INIT_LOW, USB2 PHY reset);
+
+   /* Hold the PHY in RESET for enough time till DIR is high */
+   udelay(10);
+   }
+
+   spin_lock_irqsave(omap-lock, flags);
omap-usbhs_rev = usbhs_read(omap-uhh_base, OMAP_UHH_REVISION);
dev_dbg(dev, OMAP UHH_REVISION 0x%x\n, omap-usbhs_rev);
 
@@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
}
 
spin_unlock_irqrestore(omap-lock, flags);
+
+   if (pdata-ehci_data-phy_reset) {
+   /* Hold the PHY in RESET for enough time till
+* PHY is settled and ready
+*/
+   udelay(10);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[0], 1);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_set_value_cansleep
+   (pdata-ehci_data-reset_gpio_port[1], 1);
+   }
+
pm_runtime_put_sync(dev);
 }
 
+static void omap_usbhs_deinit(struct device *dev)
+{
+   struct usbhs_hcd_omap   *omap = dev_get_drvdata(dev);
+   struct usbhs_omap_platform_data *pdata = omap-platdata;
+
+   if (pdata-ehci_data-phy_reset) {
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[0]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[0]);
+
+   if (gpio_is_valid(pdata-ehci_data-reset_gpio_port[1]))
+   gpio_free(pdata-ehci_data-reset_gpio_port[1]);
+   }
+}
+
 
 /**
  * usbhs_omap_probe - initialize TI-based HCDs
@@ -767,6 +811,7 @@ static int __devinit usbhs_omap_probe(struct