Fixed reset for socrates
authorSergei Poselenov <sposelenov@emcraft.com>
Thu, 8 May 2008 12:17:08 +0000 (14:17 +0200)
committerWolfgang Denk <wd@denx.de>
Tue, 20 May 2008 21:27:50 +0000 (23:27 +0200)
Signed-off-by: Sergei Poselenov <sposelenov@emcraft.com>
cpu/mpc85xx/cpu.c

index 74b210cd108232fd34fd30734eb87463c45ccbee..98733834e0621627080572a08797756066bbf80b 100644 (file)
@@ -174,28 +174,33 @@ int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 {
        uint pvr;
        uint ver;
+       unsigned long val, msr;
+
        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{
+               udelay(100);
+       }
+
        /*
+        * Fallthrough if the code above failed
         * Initiate hard reset in debug control register DBCR0
         * Make sure MSR[DE] = 1
         */
-               unsigned long val, msr;
 
-               msr = mfmsr ();
-               msr |= MSR_DE;
-               mtmsr (msr);
+       msr = mfmsr ();
+       msr |= MSR_DE;
+       mtmsr (msr);
+
+       val = mfspr(DBCR0);
+       val |= 0x70000000;
+       mtspr(DBCR0,val);
 
-               val = mfspr(DBCR0);
-               val |= 0x70000000;
-               mtspr(DBCR0,val);
-       }
        return 1;
 }