> -----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! ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥