From: Graeme Russ Date: Thu, 7 Oct 2010 09:03:26 +0000 (+1100) Subject: x86: Move ECC initialisation outside RAM initialisation X-Git-Tag: v2010.12-rc1~149^2~9 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=00940a229d564044d52a5449bce14090c7298f92;p=u-boot x86: Move ECC initialisation outside RAM initialisation To allow for 'load anywhere' images, the %ebp return pointer 'hack' must be removed, so we cannot have two 'calls' to get_mem_size --- diff --git a/arch/i386/cpu/sc520/sc520_asm.S b/arch/i386/cpu/sc520/sc520_asm.S index 7c2de31134..e0d3102ce2 100644 --- a/arch/i386/cpu/sc520/sc520_asm.S +++ b/arch/i386/cpu/sc520/sc520_asm.S @@ -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 diff --git a/arch/i386/cpu/start.S b/arch/i386/cpu/start.S index cb47ce7faa..819274f050 100644 --- a/arch/i386/cpu/start.S +++ b/arch/i386/cpu/start.S @@ -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