| From 28c56ea1431421dec51b7b229369e991481453df Mon Sep 17 00:00:00 2001 |
| From: Shengzhou Liu <Shengzhou.Liu@freescale.com> |
| Date: Thu, 16 Feb 2012 18:02:20 +0800 |
| Subject: powerpc/usb: fix bug of kernel hang when initializing usb |
| |
| From: Shengzhou Liu <Shengzhou.Liu@freescale.com> |
| |
| commit 28c56ea1431421dec51b7b229369e991481453df upstream. |
| |
| 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@freescale.com> |
| Reported-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/host/ehci-fsl.c | 4 ++++ |
| drivers/usb/host/ehci-fsl.h | 1 + |
| 2 files changed, 5 insertions(+) |
| |
| --- a/drivers/usb/host/ehci-fsl.c |
| +++ b/drivers/usb/host/ehci-fsl.c |
| @@ -216,6 +216,8 @@ static void ehci_fsl_setup_phy(struct eh |
| unsigned int port_offset) |
| { |
| u32 portsc; |
| + struct usb_hcd *hcd = ehci_to_hcd(ehci); |
| + void __iomem *non_ehci = hcd->regs; |
| |
| portsc = ehci_readl(ehci, &ehci->regs->port_status[port_offset]); |
| portsc &= ~(PORT_PTS_MSK | PORT_PTS_PTW); |
| @@ -231,6 +233,8 @@ static void ehci_fsl_setup_phy(struct eh |
| portsc |= PORT_PTS_PTW; |
| /* fall through */ |
| case FSL_USB2_PHY_UTMI: |
| + /* enable UTMI PHY */ |
| + setbits32(non_ehci + FSL_SOC_USB_CTRL, CTRL_UTMI_PHY_EN); |
| portsc |= PORT_PTS_UTMI; |
| break; |
| case FSL_USB2_PHY_NONE: |
| --- a/drivers/usb/host/ehci-fsl.h |
| +++ b/drivers/usb/host/ehci-fsl.h |
| @@ -45,5 +45,6 @@ |
| #define FSL_SOC_USB_PRICTRL 0x40c /* NOTE: big-endian */ |
| #define FSL_SOC_USB_SICTRL 0x410 /* NOTE: big-endian */ |
| #define FSL_SOC_USB_CTRL 0x500 /* NOTE: big-endian */ |
| +#define CTRL_UTMI_PHY_EN (1<<9) |
| #define SNOOP_SIZE_2GB 0x1e |
| #endif /* _EHCI_FSL_H */ |