base[0] is saved, but only restored in case the ram test failed.

Test case:  Start u-boot in qemu, using vexpress-a9 emulation.
qemu places the fdt at the start of ram, as a service for the
guest.  Trying to pick it up there by setting fdt_addr
accordingly fails because the fdt magic cookie is gone (zeroed
out) after calling get_ram_size.

Cc: Wolfgang Denk <w...@denx.de>
Signed-off-by: Gerd Hoffmann <kra...@redhat.com>
---
 common/memsize.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/common/memsize.c b/common/memsize.c
index 589400d..dac1368 100644
--- a/common/memsize.c
+++ b/common/memsize.c
@@ -48,11 +48,12 @@ long get_ram_size(long *base, long maxsize)
        *addr = 0;
 
        sync ();
-       if ((val = *addr) != 0) {
+       val = *addr;
+       *addr = save[i];
+       if (val != 0) {
                /* Restore the original data before leaving the function.
                 */
                sync ();
-               *addr = save[i];
                for (cnt = 1; cnt < maxsize / sizeof(long); cnt <<= 1) {
                        addr  = base + cnt;
                        sync ();
-- 
1.8.3.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to