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. From: linuxbj-internal-bounces@xxxxxxxxxxxxxxxxxxx [mailto:linuxbj-internal-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Pan Jiafei-B37022 Sent: Friday, December 16, 2011 12:49 PM To: linuxbj-internal@xxxxxxxxxxxxxxxxxxx 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 <Jiafei.Pan@xxxxxxxxxxxxx> --- drivers/usb/host/ehci-fsl.c | 23 ++++++++++------------- 1 files changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 90534cc..ee14fa7 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c @@ -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) - /* - * Turn on cache snooping hardware, since some PowerPC platforms - * wholly rely on hardware to deal with cache coherent - */ + /* + * 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 + /* 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)) -- 1.7.5.1 > -----Original Message----- > From: linuxppc-dev-bounces+jiafei.pan=freescale.com@xxxxxxxxxxxxxxxx > [mailto:linuxppc-dev-bounces+jiafei.pan=freescale.com@xxxxxxxxxxxxxxxx] > On Behalf Of Liu Shengzhou-B36685 > Sent: Friday, February 17, 2012 10:33 AM > To: Benjamin Herrenschmidt > Cc: linux-usb@xxxxxxxxxxxxxxx; linuxppc-dev@xxxxxxxxxxxxxxxx > Subject: RE: [PATCH] powerpc/usb: fix bug of kernel hang when > initializing usb > > > > -----Original Message----- > > From: Benjamin Herrenschmidt [mailto:benh@xxxxxxxxxxxxxxxxxxx] > > Sent: Friday, February 17, 2012 8:03 AM > > To: Liu Shengzhou-B36685 > > Cc: linux-usb@xxxxxxxxxxxxxxx; linuxppc-dev@xxxxxxxxxxxxxxxx > > 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: > > > 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 <Shengzhou.Liu@xxxxxxxxxxxxx> > > > > --- > > > > 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. > > > > > > [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@xxxxxxxxxxxxxxxx > https://lists.ozlabs.org/listinfo/linuxppc-dev -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html