%ebx will hold low-level boot flags and must be preserved
.globl mem_init
mem_init:
+ /* Preserve Boot Flags */
+ movl %ebx, %ebp
+
/* initialize dram controller registers */
xorw %ax, %ax
movl $DBCTL, %edi
jmp bad_reint
dram_done:
+ /* Restore Boot Flags */
+ movl %ebx, %ebp
jmp mem_init_ret
#if CONFIG_SYS_SDRAM_ECC_ENABLE
jz bank1
andl $0x0000007f, %eax
shll $22, %eax
- movl %eax, %ebx
+ movl %eax, %edx
bank1: movl (%edi), %eax
movl %eax, %ecx
jz bank2
andl $0x00007f00, %eax
shll $14, %eax
- movl %eax, %ebx
+ movl %eax, %edx
bank2: movl (%edi), %eax
movl %eax, %ecx
jz bank3
andl $0x007f0000, %eax
shll $6, %eax
- movl %eax, %ebx
+ movl %eax, %edx
bank3: movl (%edi), %eax
movl %eax, %ecx
jz done
andl $0x7f000000, %eax
shrl $2, %eax
- movl %eax, %ebx
+ movl %eax, %edx
done:
- movl %ebx, %eax
+ movl %edx, %eax
jmp get_mem_size_ret
cmpl $0, %eax
jne die
push $0x55aa55aa
- popl %ebx
- cmpl $0x55aa55aa, %ebx
+ popl %ecx
+ cmpl $0x55aa55aa, %ecx
jne die
wbinvd