[PATCH] powerpc/usb: fix bug of kernel hang when initializing usb

Liu Shengzhou-B36685 B36685 at freescale.com
Fri Feb 17 13:32:38 EST 2012


> -----Original Message-----
> From: Benjamin Herrenschmidt [mailto:benh at kernel.crashing.org]
> Sent: Friday, February 17, 2012 8:03 AM
> To: Liu Shengzhou-B36685
> Cc: linux-usb at vger.kernel.org; linuxppc-dev at 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:
> > 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 at freescale.com>
> > > ---
> > > 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!


More information about the Linuxppc-dev mailing list