From: Shengzhou Liu <hidden> Date: 2012-02-16 10:06:29
If USB UTMI PHY is not enable, writing to portsc register will lead to
kernel hang during boot up.
Signed-off-by: Shengzhou Liu <redacted>
---
Apply for master branch of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Tested on P5020DS, the issue was reported by Benjamin Herrenschmidt.
drivers/usb/host/ehci-fsl.c | 4 ++++
drivers/usb/host/ehci-fsl.h | 1 +
2 files changed, 5 insertions(+), 0 deletions(-)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2012-02-16 10:39:24
On Thu, 2012-02-16 at 18:02 +0800, Shengzhou Liu wrote:
If USB UTMI PHY is not enable, writing to portsc register will lead to
kernel hang during boot up.
Thanks, I'll try that tomorrow.
Greg, you're picking that up or should I ?
Cheers,
Ben.
quoted hunk
Signed-off-by: Shengzhou Liu <redacted>
---
Apply for master branch of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Tested on P5020DS, the issue was reported by Benjamin Herrenschmidt.
drivers/usb/host/ehci-fsl.c | 4 ++++
drivers/usb/host/ehci-fsl.h | 1 +
2 files changed, 5 insertions(+), 0 deletions(-)
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2012-02-16 22:59:01
On Thu, 2012-02-16 at 18:02 +0800, Shengzhou Liu wrote:
If USB UTMI PHY is not enable, writing to portsc register will lead to
kernel hang during boot up.
Signed-off-by: Shengzhou Liu <redacted>
---
Apply for master branch of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Tested on P5020DS, the issue was reported by Benjamin Herrenschmidt.
This fixes the hang, but sadly doesn't make USB work. I now get:
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
/soc@ffe000000/usb@210000: Invalid 'dr_mode' property, fallback to host mode
fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1
fsl-ehci fsl-ehci.0: irq 44, io mem 0xffe210000
fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2
fsl-ehci fsl-ehci.1: irq 45, io mem 0xffe211000
fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00
.../...
usb 1-1: device descriptor read/64, error -110
usb 1-1: device descriptor read/64, error -110
<remove device, re-plug it>
usb 1-1: new full-speed USB device number 3 using fsl-ehci
hub 1-0:1.0: unable to enumerate USB device on port 1
<remove again, re-plug it>
usb 1-1: new full-speed USB device number 4 using fsl-ehci
usb 1-1: device descriptor read/64, error -110
The blurb about "invalid dr_mode property" makes me think there's some
kind of disagreement between the device-tree coming with the machine and
what upstream expects. Basically the DT doesn't contain a dr_mode
property at all (which should be fine, host mode is what I want, but I
suspect some stuff aren't being configured properly by u-boot either...)
Cheers,
Ben.
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2012-02-17 00:02:44
On Fri, 2012-02-17 at 09:58 +1100, Benjamin Herrenschmidt wrote:
On Thu, 2012-02-16 at 18:02 +0800, Shengzhou Liu wrote:
quoted
If USB UTMI PHY is not enable, writing to portsc register will lead to
kernel hang during boot up.
Signed-off-by: Shengzhou Liu <redacted>
---
Apply for master branch of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Tested on P5020DS, the issue was reported by Benjamin Herrenschmidt.
This fixes the hang, but sadly doesn't make USB work. I now get:
.../...
Ok, found the problem.
First, the SDK kernel had a delay after setting that bit, I added that
back in. This is not what fixed it but it looks like the right thing to
do, though please, use msleep rather than udelay here if possible (not
in atomic context).
Then, the real culprit is (CC'ing Kumar and Scott to figure out why)
this statement:
#if defined(CONFIG_PPC32) && !defined(CONFIG_NOT_COHERENT_CACHE)
/*
* Turn on cache snooping hardware, since some PowerPC platforms
* wholly rely on hardware to deal with cache coherent
*/
/* Setup Snooping for all the 4GB space */
/* SNOOP1 starts from 0x0, size 2G */
out_be32(non_ehci + FSL_SOC_USB_SNOOP1, 0x0 | SNOOP_SIZE_2GB);
/* SNOOP2 starts from 0x80000000, size 2G */
out_be32(non_ehci + FSL_SOC_USB_SNOOP2, 0x80000000 | SNOOP_SIZE_2GB);
#endif
I'm building a 64-bit kernel so this isn't compiled and it looks like
the EHCI is thus not snooping.
By removing the defined(CONFIG_PPC32) part of the statement, my problem
goes away.
Cheers,
Ben.
From: Pan Jiafei-B37022 <hidden> Date: 2012-02-17 03:20:34
FYI, I once fixed this issue when backport P5020 BSP for WR Linux, The foll=
owing is the patch which I have submitted to linuxbj-internal.
From: linuxbj-internal-bounces@linux.freescale.net [mailto:linuxbj-internal=
-bounces@linux.freescale.net] On Behalf Of Pan Jiafei-B37022
Sent: Friday, December 16, 2011 12:49 PM
To: linuxbj-internal@linux.freescale.net
Cc: Pan Jiafei-B37022
Subject: [Linuxbj-internal] [PATCH] USB: ehci-fsl: Turn on cache snooping o=
n MPC8xxx
If a MPC8xxx was being used, 'have_sysif_regs' should be set and
it should setup cache snooping for all the 4GB space on both PPC32
and PPC64.
Signed-off-by: Pan Jiafei <redacted>
---
drivers/usb/host/ehci-fsl.c | 23 ++++++++++-------------
1 files changed, 10 insertions(+), 13 deletions(-)
@@ -260,21 +260,18 @@ static void ehci_fsl_usb_setup(struct ehci_hcd *ehci)if(pdata->have_sysif_regs){temp=3Din_be32(non_ehci+FSL_SOC_USB_CTRL);out_be32(non_ehci+FSL_SOC_USB_CTRL,temp|0x00000004);-out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0000001b);-}-#if defined(CONFIG_PPC32) && !defined(CONFIG_NOT_COHERENT_CACHE)-/*-*Turnoncachesnoopinghardware,sincesomePowerPCplatforms-*whollyrelyonhardwaretodealwithcachecoherent-*/+/*+*Turnoncachesnoopinghardware,sincesomePowerPCplatforms+*whollyrelyonhardwaretodealwithcachecoherent+*/-/* Setup Snooping for all the 4GB space */-/* SNOOP1 starts from 0x0, size 2G */-out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0|SNOOP_SIZE_2GB);-/* SNOOP2 starts from 0x80000000, size 2G */-out_be32(non_ehci+FSL_SOC_USB_SNOOP2,0x80000000|SNOOP_SIZE_2GB);-#endif+/* Setup Snooping for all the 4GB space */+/* SNOOP1 starts from 0x0, size 2G */+out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0|SNOOP_SIZE_2GB);+/* SNOOP2 starts from 0x80000000, size 2G */+out_be32(non_ehci+FSL_SOC_USB_SNOOP2,0x80000000|SNOOP_SIZE_=
-----Original Message-----
From: linuxppc-dev-bounces+jiafei.pan=3Dfreescale.com@lists.ozlabs.org
[mailto:linuxppc-dev-bounces+jiafei.pan=3Dfreescale.com@lists.ozlabs.org]
On Behalf Of Liu Shengzhou-B36685
Sent: Friday, February 17, 2012 10:33 AM
To: Benjamin Herrenschmidt
Cc: linux-usb@vger.kernel.org; linuxppc-dev@lists.ozlabs.org
Subject: RE: [PATCH] powerpc/usb: fix bug of kernel hang when
initializing usb
=20
=20
quoted
-----Original Message-----
From: Benjamin Herrenschmidt [mailto:benh@kernel.crashing.org]
Sent: Friday, February 17, 2012 8:03 AM
To: Liu Shengzhou-B36685
Cc: linux-usb@vger.kernel.org; linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc/usb: fix bug of kernel hang when
initializing usb
On Fri, 2012-02-17 at 09:58 +1100, Benjamin Herrenschmidt wrote:
quoted
On Thu, 2012-02-16 at 18:02 +0800, Shengzhou Liu wrote:
quoted
If USB UTMI PHY is not enable, writing to portsc register will
lead to kernel hang during boot up.
Signed-off-by: Shengzhou Liu <redacted>
---
Apply for master branch of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-
2.6.git
quoted
quoted
Tested on P5020DS, the issue was reported by Benjamin Herrenschmidt=
.
quoted
quoted
This fixes the hang, but sadly doesn't make USB work. I now get:
.../...
Ok, found the problem.
First, the SDK kernel had a delay after setting that bit, I added that
back in. This is not what fixed it but it looks like the right thing
to do, though please, use msleep rather than udelay here if possible
(not in atomic context).
Then, the real culprit is (CC'ing Kumar and Scott to figure out why)
this statement:
#if defined(CONFIG_PPC32) && !defined(CONFIG_NOT_COHERENT_CACHE)
/*
* Turn on cache snooping hardware, since some PowerPC platforms
* wholly rely on hardware to deal with cache coherent
*/
/* Setup Snooping for all the 4GB space */
/* SNOOP1 starts from 0x0, size 2G */
out_be32(non_ehci + FSL_SOC_USB_SNOOP1, 0x0 | SNOOP_SIZE_2GB);
/* SNOOP2 starts from 0x80000000, size 2G */
out_be32(non_ehci + FSL_SOC_USB_SNOOP2, 0x80000000 |
SNOOP_SIZE_2GB);
quoted
#endif
I'm building a 64-bit kernel so this isn't compiled and it looks like
the EHCI is thus not snooping.
By removing the defined(CONFIG_PPC32) part of the statement, my
problem goes away.
Cheers,
Ben.
=20
[Shengzhou] I tested the patch with 32bit P5020DS, USB worked well. Not
tested with 64-bit kernel.
Glad to you had found the problem in case of 64-bit, thanks!
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2012-02-17 03:43:04
On Fri, 2012-02-17 at 03:20 +0000, Pan Jiafei-B37022 wrote:
FYI, I once fixed this issue when backport P5020 BSP for WR Linux, The
following is the patch which I have submitted to linuxbj-internal.
Should I just apply this to upstream ?
Cheers,
Ben.
quoted hunk
From: linuxbj-internal-bounces@linux.freescale.net [mailto:linuxbj-internal-bounces@linux.freescale.net] On Behalf Of Pan Jiafei-B37022
Sent: Friday, December 16, 2011 12:49 PM
To: linuxbj-internal@linux.freescale.net
Cc: Pan Jiafei-B37022
Subject: [Linuxbj-internal] [PATCH] USB: ehci-fsl: Turn on cache snooping on MPC8xxx
If a MPC8xxx was being used, 'have_sysif_regs' should be set and
it should setup cache snooping for all the 4GB space on both PPC32
and PPC64.
Signed-off-by: Pan Jiafei <redacted>
---
drivers/usb/host/ehci-fsl.c | 23 ++++++++++-------------
1 files changed, 10 insertions(+), 13 deletions(-)
@@ -260,21 +260,18 @@ static void ehci_fsl_usb_setup(struct ehci_hcd *ehci)if(pdata->have_sysif_regs){temp=in_be32(non_ehci+FSL_SOC_USB_CTRL);out_be32(non_ehci+FSL_SOC_USB_CTRL,temp|0x00000004);-out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0000001b);-}-#if defined(CONFIG_PPC32) && !defined(CONFIG_NOT_COHERENT_CACHE)-/*-*Turnoncachesnoopinghardware,sincesomePowerPCplatforms-*whollyrelyonhardwaretodealwithcachecoherent-*/+/*+*Turnoncachesnoopinghardware,sincesomePowerPCplatforms+*whollyrelyonhardwaretodealwithcachecoherent+*/-/* Setup Snooping for all the 4GB space */-/* SNOOP1 starts from 0x0, size 2G */-out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0|SNOOP_SIZE_2GB);-/* SNOOP2 starts from 0x80000000, size 2G */-out_be32(non_ehci+FSL_SOC_USB_SNOOP2,0x80000000|SNOOP_SIZE_2GB);-#endif+/* Setup Snooping for all the 4GB space */+/* SNOOP1 starts from 0x0, size 2G */+out_be32(non_ehci+FSL_SOC_USB_SNOOP1,0x0|SNOOP_SIZE_2GB);+/* SNOOP2 starts from 0x80000000, size 2G */+out_be32(non_ehci+FSL_SOC_USB_SNOOP2,0x80000000|SNOOP_SIZE_2GB);+}if((pdata->operating_mode==FSL_USB2_DR_HOST)||(pdata->operating_mode==FSL_USB2_DR_OTG))