u-boot: Fix e500 v2 core reset bug
authorZang Roy-r61911 <tie-fei.zang@freescale.com>
Tue, 5 Dec 2006 08:42:30 +0000 (16:42 +0800)
committerAndrew Fleming-AFLEMING <afleming@freescale.com>
Tue, 24 Apr 2007 00:58:27 +0000 (19:58 -0500)
The following patch fixes the e500 v2 core reset bug.
For e500 v2 core, a new reset control register is added to reset the
processor.

Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
cpu/mpc85xx/cpu.c

index 0507c47e6e74dc66d04adffe35631138be9dc302..2fe4f2abba56bcf4d1f5f31a9225f47ced44db68 100644 (file)
@@ -140,16 +140,25 @@ int checkcpu (void)
 
 int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 {
+       uint pvr;
+       uint ver;
+       pvr = get_pvr();
+       ver = PVR_VER(pvr);
+       if (ver & 1){
+       /* e500 v2 core has reset control register */
+               volatile unsigned int * rstcr;
+               rstcr = (volatile unsigned int *)(CFG_IMMR + 0xE00B0);
+               *rstcr = 0x2;           /* HRESET_REQ */
+       }else{
        /*
         * Initiate hard reset in debug control register DBCR0
         * Make sure MSR[DE] = 1
         */
-       unsigned long val;
-
-       val = mfspr(DBCR0);
-       val |= 0x70000000;
-       mtspr(DBCR0,val);
-
+               unsigned long val;
+               val = mfspr(DBCR0);
+               val |= 0x70000000;
+               mtspr(DBCR0,val);
+       }
        return 1;
 }