x86: Fix sc520 memory size reporting
authorGraeme Russ <graeme.russ@gmail.com>
Fri, 23 Apr 2010 14:05:40 +0000 (00:05 +1000)
committerWolfgang Denk <wd@denx.de>
Wed, 5 May 2010 22:14:32 +0000 (00:14 +0200)
There is an error in how the assembler version of the sc520 memory size
reporting code works. As a result, it will only ever report at most the
size of one bank of RAM

Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
arch/i386/cpu/sc520/sc520_asm.S

index 2042d9bfcf886af1cc71d2014a3596bcdb8b07ce..135f7b4f30891b6a869b99cf3ceb6332ffc1e09d 100644 (file)
@@ -503,38 +503,37 @@ dram_done:
 
        movl    $DRCBENDADR, %edi        /* DRAM ending address register  */
 
-       movl    (%edi), %eax
-       movl    %eax, %ecx
-       andl    $0x80000000, %ecx
-       jz      bank2
-       andl    $0x7f000000, %eax
-       shrl    $2, %eax
-       movl    %eax, %ebx
-
-bank2: movl    (%edi), %eax
+bank0: movl    (%edi), %eax
        movl    %eax, %ecx
-       andl    $0x00800000, %ecx
+       andl    $0x00000080, %ecx
        jz      bank1
-       andl    $0x007f0000, %eax
-       shll    $6, %eax
+       andl    $0x0000007f, %eax
+       shll    $22, %eax
        movl    %eax, %ebx
 
 bank1: movl    (%edi), %eax
        movl    %eax, %ecx
        andl    $0x00008000, %ecx
-       jz      bank0
+       jz      bank2
        andl    $0x00007f00, %eax
        shll    $14, %eax
        movl    %eax, %ebx
 
-bank0: movl    (%edi), %eax
+bank2: movl    (%edi), %eax
        movl    %eax, %ecx
-       andl    $0x00000080, %ecx
-       jz      done
-       andl    $0x0000007f, %eax
-       shll    $22, %eax
+       andl    $0x00800000, %ecx
+       jz      bank3
+       andl    $0x007f0000, %eax
+       shll    $6, %eax
        movl    %eax, %ebx
 
+bank3: movl    (%edi), %eax
+       movl    %eax, %ecx
+       andl    $0x80000000, %ecx
+       jz      done
+       andl    $0x7f000000, %eax
+       shrl    $2, %eax
+       movl    %eax, %ebx
 
 done:
        movl    %ebx, %eax