rename CFG_ENV_IS_IN_NVRAM in CONFIG_ENV_IS_IN_NVRAM
[platform/kernel/u-boot.git] / cpu / mpc8xx / cpu_init.c
index 83ff66a..5c43eca 100644 (file)
 #include <mpc8xx.h>
 #include <commproc.h>
 
-#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH)
+#if defined(CFG_RTCSC) || defined(CFG_RMDS)
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH) || \
+    defined(CFG_SMC_UCODE_PATCH)
 void cpm_load_patch (volatile immap_t * immr);
 #endif
 
@@ -42,6 +47,9 @@ void cpu_init_f (volatile immap_t * immr)
 {
 #ifndef CONFIG_MBX
        volatile memctl8xx_t *memctl = &immr->im_memctl;
+# ifdef CFG_PLPRCR
+       ulong mfmask;
+# endif
 #endif
        ulong reg;
 
@@ -86,17 +94,26 @@ void cpu_init_f (volatile immap_t * immr)
 
        /* If CFG_PLPRCR (set in the various *_config.h files) tries to
         * set the MF field, then just copy CFG_PLPRCR over car_plprcr,
-        * otherwise OR in CFG_PLPRCR so we do not change the currentMF
+        * otherwise OR in CFG_PLPRCR so we do not change the current MF
         * field value.
+        *
+        * For newer (starting MPC866) chips PLPRCR layout is different.
         */
-#if ((CFG_PLPRCR & PLPRCR_MF_MSK) != 0)
-       reg = CFG_PLPRCR;                       /* reset control bits   */
-#else
-       reg = immr->im_clkrst.car_plprcr;
-       reg &= PLPRCR_MF_MSK;                   /* isolate MF field */
-       reg |= CFG_PLPRCR;                      /* reset control bits   */
-#endif
+#ifdef CFG_PLPRCR
+       if (get_immr(0xFFFF) >= MPC8xx_NEW_CLK)
+          mfmask = PLPRCR_MFACT_MSK;
+       else
+          mfmask = PLPRCR_MF_MSK;
+
+       if ((CFG_PLPRCR & mfmask) != 0)
+          reg = CFG_PLPRCR;                    /* reset control bits   */
+       else {
+          reg = immr->im_clkrst.car_plprcr;
+          reg &= mfmask;                       /* isolate MF-related fields */
+          reg |= CFG_PLPRCR;                   /* reset control bits   */
+       }
        immr->im_clkrst.car_plprcr = reg;
+#endif
 
        /*
         * Memory Controller:
@@ -142,10 +159,11 @@ void cpu_init_f (volatile immap_t * immr)
     defined(CONFIG_MHPC)       || \
     defined(CONFIG_PCU_E)      || \
     defined(CONFIG_R360MPI)    || \
+    defined(CONFIG_RMU)                || \
     defined(CONFIG_RPXCLASSIC) || \
     defined(CONFIG_RPXLITE)    || \
-    defined(CONFIG_SPD823TS)   || \
-   (defined(CONFIG_MPC860T) && defined(CONFIG_FADS))
+    defined(CONFIG_SPC1920)    || \
+    defined(CONFIG_SPD823TS)
 
        memctl->memc_br0 = CFG_BR0_PRELIM;
 #endif
@@ -227,12 +245,17 @@ void cpu_init_f (volatile immap_t * immr)
        rpxclassic_init ();
 #endif
 
+#if defined(CONFIG_RPXLITE) && defined(CONFIG_ENV_IS_IN_NVRAM)
+       rpxlite_init ();
+#endif
+
 #ifdef CFG_RCCR                        /* must be done before cpm_load_patch() */
        /* write config value */
        immr->im_cpm.cp_rccr = CFG_RCCR;
 #endif
 
-#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH)
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH) || \
+    defined(CFG_SMC_UCODE_PATCH)
        cpm_load_patch (immr);  /* load mpc8xx  microcode patch */
 #endif
 }
@@ -243,8 +266,6 @@ void cpu_init_f (volatile immap_t * immr)
 int cpu_init_r (void)
 {
 #if defined(CFG_RTCSC) || defined(CFG_RMDS)
-       DECLARE_GLOBAL_DATA_PTR;
-
        bd_t *bd = gd->bd;
        volatile immap_t *immr = (volatile immap_t *) (bd->bi_immr_base);
 #endif