summaryrefslogtreecommitdiff
path: root/drivers/usb/usb_ehci_fsl.c
diff options
context:
space:
mode:
authorVivek Mahajan <vivek.mahajan@freescale.com>2009-10-07 15:47:48 -0400
committerJustin Waters <justin.waters@timesys.com>2009-10-07 15:47:48 -0400
commitb4a7ef6f8871fe73c848fa31075971c83ff5e129 (patch)
tree89f5fcd552432ef36bca47dd22de9faa958ea51c /drivers/usb/usb_ehci_fsl.c
parent51fad42204d5b1cdd3bdc89fd8685fcd3414a2a0 (diff)
u-boot-2009.03-p2020rdb-USB-mpc85xx-support
Add USB support for P2020RDB and 85xx platforms Signed-off-by: Vivek Mahajan <vivek.mahajan@freescale.com>
Diffstat (limited to 'drivers/usb/usb_ehci_fsl.c')
-rw-r--r--drivers/usb/usb_ehci_fsl.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/usb/usb_ehci_fsl.c b/drivers/usb/usb_ehci_fsl.c
index 81d5d21657..081e83595d 100644
--- a/drivers/usb/usb_ehci_fsl.c
+++ b/drivers/usb/usb_ehci_fsl.c
@@ -1,5 +1,6 @@
/*
* (C) Copyright 2008, Excito Elektronik i Sk=E5ne AB
+ * (C) Copyright 2009 Freescale Semiconductor, Inc.
*
* Author: Tor Krill tor@excito.com
*
@@ -22,7 +23,9 @@
#include <common.h>
#include <pci.h>
#include <usb.h>
+#if defined(CONFIG_MPC83XX)
#include <mpc83xx.h>
+#endif
#include <asm/io.h>
#include <asm/bitops.h>
@@ -38,14 +41,21 @@
*/
int ehci_hcd_init(void)
{
+#if defined(CONFIG_MPC83XX)
volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
+#endif
uint32_t addr, temp;
+#if defined(CONFIG_MPC83XX)
addr = (uint32_t)&(im->usb[0]);
+#elif defined(CONFIG_MPC85xx)
+ addr = CONFIG_SYS_USB_EHCI_REGS_BASE;
+#endif
hccr = (struct ehci_hccr *)(addr + FSL_SKIP_PCI);
hcor = (struct ehci_hcor *)((uint32_t) hccr +
HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+#if defined(CONFIG_MPC83XX)
/* Configure clock */
clrsetbits_be32(&(im->clk.sccr), MPC83XX_SCCR_USB_MASK,
MPC83XX_SCCR_USB_DRCM_11);
@@ -60,6 +70,7 @@ int ehci_hcd_init(void)
temp = in_be32((void *)(addr + FSL_SOC_USB_CTRL));
udelay(1000);
} while (!(temp & PHY_CLK_VALID));
+#endif
/* Set to Host mode */
temp = in_le32((void *)(addr + FSL_SOC_USB_USBMODE));
@@ -71,7 +82,11 @@ int ehci_hcd_init(void)
/* Init phy */
/* TODO: handle different phys? */
+#if defined(CONFIG_MPC83XX)
out_le32(&(hcor->or_portsc[0]), PORT_PTS_UTMI);
+#elif defined(CONFIG_MPC85xx)
+ out_le32(&(hcor->or_portsc[0]), PORT_PTS_ULPI);
+#endif
/* Enable interface. */
temp = in_be32((void *)(addr + FSL_SOC_USB_CTRL));
@@ -81,9 +96,11 @@ int ehci_hcd_init(void)
out_be32((void *)(addr + FSL_SOC_USB_AGECNTTHRSH), 0x00000040);
out_be32((void *)(addr + FSL_SOC_USB_SICTRL), 0x00000001);
+#if !defined(CONFIG_MPC85xx)
/* Enable interface. */
temp = in_be32((void *)(addr + FSL_SOC_USB_CTRL));
out_be32((void *)(addr + FSL_SOC_USB_CTRL), temp | USB_EN);
+#endif
temp = in_le32((void *)(addr + FSL_SOC_USB_USBMODE));