Patchwork powerpc/usb: fix bug of kernel hang when initializing usb

login
register
mail settings
Submitter Pan Jiafei-B37022
Date Feb. 17, 2012, 3:20 a.m.
Message ID <4F9F958A64F25C4DA463F3D6931E533140828E@039-SN1MPN1-003.039d.mgd.msft.net>
Download mbox | patch
Permalink /patch/141728/
State Not Applicable
Headers show

Comments

Pan Jiafei-B37022 - Feb. 17, 2012, 3:20 a.m.
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@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 <Jiafei.Pan@freescale.com>
---
drivers/usb/host/ehci-fsl.c |   23 ++++++++++-------------
1 files changed, 10 insertions(+), 13 deletions(-)

Patch

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))