x86: Move ECC initialisation outside RAM initialisation
authorGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:26 +0000 (20:03 +1100)
committerGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:26 +0000 (20:03 +1100)
To allow for 'load anywhere' images, the %ebp return pointer 'hack' must
be removed, so we cannot have two 'calls' to get_mem_size

arch/i386/cpu/sc520/sc520_asm.S
arch/i386/cpu/start.S

index 7c2de31134362e7cbe51ec78c5790db7ffa5fae1..e0d3102ce260453a20633e8e68dc252cc2f6813b 100644 (file)
@@ -517,22 +517,11 @@ bad_ram:
        jmp     bad_reint
 
 dram_done:
+       jmp     *%ebp
 
 #if CONFIG_SYS_SDRAM_ECC_ENABLE
-       /*
-        * We are in the middle of an existing 'call' - Need to store the
-        * existing return address before making another 'call'
-        */
-       movl    %ebp, %ebx
-
-       /* Get the memory size */
-       movl    $init_ecc, %ebp
-       jmpl    get_mem_size
-
+.globl init_ecc
 init_ecc:
-       /* Restore the orignal return address */
-       movl    %ebx, %ebp
-
        /* A nominal memory test: just a byte at each address line */
        movl    %eax, %ecx
        shrl    $0x1, %ecx
@@ -571,10 +560,10 @@ set_ecc:
        movl    $ECCCTL, %edi
        movb    $0x05, %al
        movb    %al,(%edi)
-#endif
 
 out:
        jmp     *%ebp
+#endif
 
 /*
  * Read and decode the sc520 DRCBENDADR MMCR and return the number of
index cb47ce7faa61807111638a54840cd4b464ebd5ee..819274f05062e0054a2839642cbb9d904b6d7be4 100644 (file)
@@ -93,6 +93,17 @@ mem_init_ret:
        jmp     get_mem_size
 get_mem_size_ret:
 
+#if CONFIG_SYS_SDRAM_ECC_ENABLE
+       /* Skip ECC initialization if not starting from cold-reset */
+       movl    %ebx, %ecx
+       andl    $GD_FLG_COLD_BOOT, %ecx
+       jz      init_ecc_ret
+       mov     $init_ecc_ret, %ebp
+       jmp     init_ecc
+
+init_ecc_ret:
+#endif
+
        /* Check we have enough memory for stack */
        movl    $CONFIG_SYS_STACK_SIZE, %ecx
        cmpl    %ecx, %eax