|
@@ -23,8 +23,8 @@
|
|
|
#include <common.h>
|
|
|
#include <mpc83xx.h>
|
|
|
#include <ioports.h>
|
|
|
-#ifdef CONFIG_USB_EHCI_FSL
|
|
|
#include <asm/io.h>
|
|
|
+#ifdef CONFIG_USB_EHCI_FSL
|
|
|
#include <usb/ehci-fsl.h>
|
|
|
#endif
|
|
|
|
|
@@ -63,149 +63,163 @@ static void config_qe_ioports(void)
|
|
|
*/
|
|
|
void cpu_init_f (volatile immap_t * im)
|
|
|
{
|
|
|
- /* Pointer is writable since we allocated a register for it */
|
|
|
- gd = (gd_t *) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
|
|
|
-
|
|
|
- /* Clear initial global data */
|
|
|
- memset ((void *) gd, 0, sizeof (gd_t));
|
|
|
-
|
|
|
- /* system performance tweaking */
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_ACR_PIPE_DEP
|
|
|
- /* Arbiter pipeline depth */
|
|
|
- im->arbiter.acr = (im->arbiter.acr & ~ACR_PIPE_DEP) |
|
|
|
- (CONFIG_SYS_ACR_PIPE_DEP << ACR_PIPE_DEP_SHIFT);
|
|
|
+ __be32 acr_mask =
|
|
|
+#ifdef CONFIG_SYS_ACR_PIPE_DEP /* Arbiter pipeline depth */
|
|
|
+ (ACR_PIPE_DEP << ACR_PIPE_DEP_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_ACR_RPTCNT
|
|
|
- /* Arbiter repeat count */
|
|
|
- im->arbiter.acr = (im->arbiter.acr & ~(ACR_RPTCNT)) |
|
|
|
- (CONFIG_SYS_ACR_RPTCNT << ACR_RPTCNT_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_ACR_RPTCNT /* Arbiter repeat count */
|
|
|
+ (ACR_RPTCNT << ACR_RPTCNT_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
+ 0;
|
|
|
+ __be32 acr_val =
|
|
|
+#ifdef CONFIG_SYS_ACR_PIPE_DEP /* Arbiter pipeline depth */
|
|
|
+ (CONFIG_SYS_ACR_PIPE_DEP << ACR_PIPE_DEP_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_ACR_RPTCNT /* Arbiter repeat count */
|
|
|
+ (CONFIG_SYS_ACR_RPTCNT << ACR_RPTCNT_SHIFT) |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+ __be32 spcr_mask =
|
|
|
+#ifdef CONFIG_SYS_SPCR_OPT /* Optimize transactions between CSB and other dev */
|
|
|
+ (SPCR_OPT << SPCR_OPT_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSECEP /* all eTSEC's Emergency priority */
|
|
|
+ (SPCR_TSECEP << SPCR_TSECEP_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSEC1EP /* TSEC1 Emergency priority */
|
|
|
+ (SPCR_TSEC1EP << SPCR_TSEC1EP_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSEC2EP /* TSEC2 Emergency priority */
|
|
|
+ (SPCR_TSEC2EP << SPCR_TSEC2EP_SHIFT) |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+ __be32 spcr_val =
|
|
|
#ifdef CONFIG_SYS_SPCR_OPT
|
|
|
- /* Optimize transactions between CSB and other devices */
|
|
|
- im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_OPT) |
|
|
|
- (CONFIG_SYS_SPCR_OPT << SPCR_OPT_SHIFT);
|
|
|
+ (CONFIG_SYS_SPCR_OPT << SPCR_OPT_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SPCR_TSECEP
|
|
|
- /* all eTSEC's Emergency priority */
|
|
|
- im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSECEP) |
|
|
|
- (CONFIG_SYS_SPCR_TSECEP << SPCR_TSECEP_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSECEP /* all eTSEC's Emergency priority */
|
|
|
+ (CONFIG_SYS_SPCR_TSECEP << SPCR_TSECEP_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SPCR_TSEC1EP
|
|
|
- /* TSEC1 Emergency priority */
|
|
|
- im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSEC1EP) |
|
|
|
- (CONFIG_SYS_SPCR_TSEC1EP << SPCR_TSEC1EP_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSEC1EP /* TSEC1 Emergency priority */
|
|
|
+ (CONFIG_SYS_SPCR_TSEC1EP << SPCR_TSEC1EP_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SPCR_TSEC2EP
|
|
|
- /* TSEC2 Emergency priority */
|
|
|
- im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSEC2EP) |
|
|
|
- (CONFIG_SYS_SPCR_TSEC2EP << SPCR_TSEC2EP_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SPCR_TSEC2EP /* TSEC2 Emergency priority */
|
|
|
+ (CONFIG_SYS_SPCR_TSEC2EP << SPCR_TSEC2EP_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_ENCCM
|
|
|
- /* Encryption clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_ENCCM) |
|
|
|
- (CONFIG_SYS_SCCR_ENCCM << SCCR_ENCCM_SHIFT);
|
|
|
+ 0;
|
|
|
+ __be32 sccr_mask =
|
|
|
+#ifdef CONFIG_SYS_SCCR_ENCCM /* Encryption clock mode */
|
|
|
+ (SCCR_ENCCM << SCCR_ENCCM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_PCICM
|
|
|
- /* PCI & DMA clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_PCICM) |
|
|
|
- (CONFIG_SYS_SCCR_PCICM << SCCR_PCICM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_PCICM /* PCI & DMA clock mode */
|
|
|
+ (SCCR_PCICM << SCCR_PCICM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_TSECCM
|
|
|
- /* all TSEC's clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_TSECCM) |
|
|
|
- (CONFIG_SYS_SCCR_TSECCM << SCCR_TSECCM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSECCM /* all TSEC's clock mode */
|
|
|
+ (SCCR_TSECCM << SCCR_TSECCM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_TSEC1CM
|
|
|
- /* TSEC1 clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC1CM) |
|
|
|
- (CONFIG_SYS_SCCR_TSEC1CM << SCCR_TSEC1CM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC1CM /* TSEC1 clock mode */
|
|
|
+ (SCCR_TSEC1CM << SCCR_TSEC1CM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_TSEC2CM
|
|
|
- /* TSEC2 clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC2CM) |
|
|
|
- (CONFIG_SYS_SCCR_TSEC2CM << SCCR_TSEC2CM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC2CM /* TSEC2 clock mode */
|
|
|
+ (SCCR_TSEC2CM << SCCR_TSEC2CM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_TSEC1ON
|
|
|
- /* TSEC1 clock switch */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC1ON) |
|
|
|
- (CONFIG_SYS_SCCR_TSEC1ON << SCCR_TSEC1ON_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC1ON /* TSEC1 clock switch */
|
|
|
+ (SCCR_TSEC1ON << SCCR_TSEC1ON_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_TSEC2ON
|
|
|
- /* TSEC2 clock switch */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_TSEC2ON) |
|
|
|
- (CONFIG_SYS_SCCR_TSEC2ON << SCCR_TSEC2ON_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC2ON /* TSEC2 clock switch */
|
|
|
+ (SCCR_TSEC2ON << SCCR_TSEC2ON_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_USBMPHCM
|
|
|
- /* USB MPH clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_USBMPHCM) |
|
|
|
- (CONFIG_SYS_SCCR_USBMPHCM << SCCR_USBMPHCM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_USBMPHCM /* USB MPH clock mode */
|
|
|
+ (SCCR_USBMPHCM << SCCR_USBMPHCM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_USBDRCM
|
|
|
- /* USB DR clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_USBDRCM) |
|
|
|
- (CONFIG_SYS_SCCR_USBDRCM << SCCR_USBDRCM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_USBDRCM /* USB DR clock mode */
|
|
|
+ (SCCR_USBDRCM << SCCR_USBDRCM_SHIFT) |
|
|
|
#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_SYS_SCCR_SATACM
|
|
|
- /* SATA controller clock mode */
|
|
|
- im->clk.sccr = (im->clk.sccr & ~SCCR_SATACM) |
|
|
|
- (CONFIG_SYS_SCCR_SATACM << SCCR_SATACM_SHIFT);
|
|
|
+#ifdef CONFIG_SYS_SCCR_SATACM /* SATA controller clock mode */
|
|
|
+ (SCCR_SATACM << SCCR_SATACM_SHIFT) |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+ __be32 sccr_val =
|
|
|
+#ifdef CONFIG_SYS_SCCR_ENCCM /* Encryption clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_ENCCM << SCCR_ENCCM_SHIFT) |
|
|
|
#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_PCICM /* PCI & DMA clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_PCICM << SCCR_PCICM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSECCM /* all TSEC's clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_TSECCM << SCCR_TSECCM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC1CM /* TSEC1 clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_TSEC1CM << SCCR_TSEC1CM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC2CM /* TSEC2 clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_TSEC2CM << SCCR_TSEC2CM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC1ON /* TSEC1 clock switch */
|
|
|
+ (CONFIG_SYS_SCCR_TSEC1ON << SCCR_TSEC1ON_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_TSEC2ON /* TSEC2 clock switch */
|
|
|
+ (CONFIG_SYS_SCCR_TSEC2ON << SCCR_TSEC2ON_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_USBMPHCM /* USB MPH clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_USBMPHCM << SCCR_USBMPHCM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_USBDRCM /* USB DR clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_USBDRCM << SCCR_USBDRCM_SHIFT) |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_SCCR_SATACM /* SATA controller clock mode */
|
|
|
+ (CONFIG_SYS_SCCR_SATACM << SCCR_SATACM_SHIFT) |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+
|
|
|
+ /* Pointer is writable since we allocated a register for it */
|
|
|
+ gd = (gd_t *) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET);
|
|
|
+
|
|
|
+ /* Clear initial global data */
|
|
|
+ memset ((void *) gd, 0, sizeof (gd_t));
|
|
|
+
|
|
|
+ /* system performance tweaking */
|
|
|
+ clrsetbits_be32(&im->arbiter.acr, acr_mask, acr_val);
|
|
|
+
|
|
|
+ clrsetbits_be32(&im->sysconf.spcr, spcr_mask, spcr_val);
|
|
|
+
|
|
|
+ clrsetbits_be32(&im->clk.sccr, sccr_mask, sccr_val);
|
|
|
|
|
|
/* RSR - Reset Status Register - clear all status (4.6.1.3) */
|
|
|
- gd->reset_status = im->reset.rsr;
|
|
|
- im->reset.rsr = ~(RSR_RES);
|
|
|
+ gd->reset_status = __raw_readl(&im->reset.rsr);
|
|
|
+ __raw_writel(~(RSR_RES), &im->reset.rsr);
|
|
|
|
|
|
/* AER - Arbiter Event Register - store status */
|
|
|
- gd->arbiter_event_attributes = im->arbiter.aeatr;
|
|
|
- gd->arbiter_event_address = im->arbiter.aeadr;
|
|
|
+ gd->arbiter_event_attributes = __raw_readl(&im->arbiter.aeatr);
|
|
|
+ gd->arbiter_event_address = __raw_readl(&im->arbiter.aeadr);
|
|
|
|
|
|
/*
|
|
|
* RMR - Reset Mode Register
|
|
|
* contains checkstop reset enable (4.6.1.4)
|
|
|
*/
|
|
|
- im->reset.rmr = (RMR_CSRE & (1<<RMR_CSRE_SHIFT));
|
|
|
-
|
|
|
- /* LCRR - Clock Ratio Register (10.3.1.16) */
|
|
|
- im->lbus.lcrr = CONFIG_SYS_LCRR;
|
|
|
+ __raw_writel(RMR_CSRE & (1<<RMR_CSRE_SHIFT), &im->reset.rmr);
|
|
|
|
|
|
- /* Enable Time Base & Decrimenter ( so we will have udelay() )*/
|
|
|
- im->sysconf.spcr |= SPCR_TBEN;
|
|
|
+ /* Enable Time Base & Decrementer ( so we will have udelay() )*/
|
|
|
+ setbits_be32(&im->sysconf.spcr, SPCR_TBEN);
|
|
|
|
|
|
/* System General Purpose Register */
|
|
|
#ifdef CONFIG_SYS_SICRH
|
|
|
#if defined(CONFIG_MPC834x) || defined(CONFIG_MPC8313)
|
|
|
/* regarding to MPC34x manual rev.1 bits 28..29 must be preserved */
|
|
|
- im->sysconf.sicrh = (im->sysconf.sicrh & 0x0000000C) | CONFIG_SYS_SICRH;
|
|
|
+ __raw_writel((im->sysconf.sicrh & 0x0000000C) | CONFIG_SYS_SICRH,
|
|
|
+ &im->sysconf.sicrh);
|
|
|
#else
|
|
|
- im->sysconf.sicrh = CONFIG_SYS_SICRH;
|
|
|
+ __raw_writel(CONFIG_SYS_SICRH, &im->sysconf.sicrh);
|
|
|
#endif
|
|
|
#endif
|
|
|
#ifdef CONFIG_SYS_SICRL
|
|
|
- im->sysconf.sicrl = CONFIG_SYS_SICRL;
|
|
|
+ __raw_writel(CONFIG_SYS_SICRL, &im->sysconf.sicrl);
|
|
|
#endif
|
|
|
- /* DDR control driver register */
|
|
|
-#ifdef CONFIG_SYS_DDRCDR
|
|
|
- im->sysconf.ddrcdr = CONFIG_SYS_DDRCDR;
|
|
|
+#ifdef CONFIG_SYS_DDRCDR /* DDR control driver register */
|
|
|
+ __raw_writel(CONFIG_SYS_DDRCDR, &im->sysconf.ddrcdr);
|
|
|
#endif
|
|
|
- /* Output buffer impedance register */
|
|
|
-#ifdef CONFIG_SYS_OBIR
|
|
|
- im->sysconf.obir = CONFIG_SYS_OBIR;
|
|
|
+#ifdef CONFIG_SYS_OBIR /* Output buffer impedance register */
|
|
|
+ __raw_writel(CONFIG_SYS_OBIR, &im->sysconf.obir);
|
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_QE
|
|
@@ -308,7 +322,7 @@ void cpu_init_f (volatile immap_t * im)
|
|
|
|
|
|
/* Wait for clock to stabilize */
|
|
|
do {
|
|
|
- temp = in_be32(&ehci->control);
|
|
|
+ temp = __raw_readl(&ehci->control);
|
|
|
udelay(1000);
|
|
|
} while (!(temp & PHY_CLK_VALID));
|
|
|
#endif
|
|
@@ -317,8 +331,41 @@ void cpu_init_f (volatile immap_t * im)
|
|
|
|
|
|
int cpu_init_r (void)
|
|
|
{
|
|
|
+ volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR;
|
|
|
#ifdef CONFIG_QE
|
|
|
uint qe_base = CONFIG_SYS_IMMR + 0x00100000; /* QE immr base */
|
|
|
+#endif
|
|
|
+ __be32 lcrr_mask =
|
|
|
+#ifdef CONFIG_SYS_LCRR_DBYP /* PLL bypass */
|
|
|
+ LCRR_DBYP |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_LCRR_EADC /* external address delay */
|
|
|
+ LCRR_EADC |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_LCRR_CLKDIV /* system clock divider */
|
|
|
+ LCRR_CLKDIV |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+ __be32 lcrr_val =
|
|
|
+#ifdef CONFIG_SYS_LCRR_DBYP /* PLL bypass */
|
|
|
+ CONFIG_SYS_LCRR_DBYP |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_LCRR_EADC
|
|
|
+ CONFIG_SYS_LCRR_EADC |
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SYS_LCRR_CLKDIV /* system clock divider */
|
|
|
+ CONFIG_SYS_LCRR_CLKDIV |
|
|
|
+#endif
|
|
|
+ 0;
|
|
|
+
|
|
|
+ /* LCRR - Clock Ratio Register (10.3.1.16)
|
|
|
+ * write, read, and isync per MPC8379ERM rev.1 CLKDEV field description
|
|
|
+ */
|
|
|
+ clrsetbits_be32(&im->lbus.lcrr, lcrr_mask, lcrr_val);
|
|
|
+ __raw_readl(&im->lbus.lcrr);
|
|
|
+ isync();
|
|
|
+
|
|
|
+#ifdef CONFIG_QE
|
|
|
qe_init(qe_base);
|
|
|
qe_reset();
|
|
|
#endif
|