rockchip: Reconfigure the malloc based to point to system memory
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Sat, 3 Oct 2015 11:25:01 +0000 (13:25 +0200)
committerSimon Glass <sjg@chromium.org>
Sat, 3 Oct 2015 16:24:33 +0000 (10:24 -0600)
When malloc_base initially gets setup in the SPL it is based on the
current (early) stack pointer, which for rockchip is pointing into SRAM.
This means simple memory allocations happen in SRAM space, which is
somewhat unfortunate. Specifically a bounce buffer for the mmc allocated
in SRAM space seems to cause the mmc engine to stall/fail causing
timeouts and a failure to load the main u-boot image.

To resolve this, reconfigure the malloc_base to start at the relocated
stack pointer after DRAM  has been setup.

For reference, things did work fine on rockchip before 596380db was
merged to fix memalign_simple due to a combination of rockchip SDRAM
starting at address 0 and the dw_mmc driver not checking errors from
bounce_buffer_start. As a result, when a bounce buffer needed to be
allocated mem_align simple would fail and return NULL. The mmc driver
ignored the error and happily continued with the bounce buffer address
being set to 0, which just happened to work fine..

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
arch/arm/mach-rockchip/board-spl.c

index a241d965b91935312168811f528cddfef4aa98e0..28c3949b75d660b2874e7e1e76f37b92c2c170eb 100644 (file)
@@ -217,6 +217,13 @@ void board_init_f(ulong dummy)
                debug("DRAM init failed: %d\n", ret);
                return;
        }
+
+       /*
+        * Now that DRAM is initialized setup base pointer for simple malloc
+        * into RAM.
+        */
+       gd->malloc_base = CONFIG_SPL_STACK_R_ADDR;
+       gd->malloc_ptr = 0;
 }
 
 static int setup_led(void)