From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Fri, 2 Oct 2015 09:11:23 +0200 Subject: [U-Boot] [PATCH v2] rockchip: Reconfigure the malloc based to point to system memory In-Reply-To: <1443725506-20587-1-git-send-email-sjoerd.simons@collabora.co.uk> References: <1443725506-20587-1-git-send-email-sjoerd.simons@collabora.co.uk> Message-ID: <560E2E1B.9080006@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 01-10-15 20:51, Sjoerd Simons wrote: > 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 Looks good to me, with the caveat that we really should do something better (and revert this one) for v2016.01: Reviewed-by: Hans de Goede Regards, Hans > > --- > A potentially better fix for this issue would be to reconfigure the > malloc_base in spl_relocate_stack_gd following the same steps as is done > for the initial setup. However at this point in the release cycle i > preferred to do a minimal rockchip only fix (so those boards become > bootable again) for this issue to minimize the potential impact on other > boards. > > Changes in v2: > - Also gd->malloc_ptr to 0 to not waste any potential space > > arch/arm/mach-rockchip/board-spl.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/arm/mach-rockchip/board-spl.c b/arch/arm/mach-rockchip/board-spl.c > index a241d96..982a1d9 100644 > --- a/arch/arm/mach-rockchip/board-spl.c > +++ b/arch/arm/mach-rockchip/board-spl.c > @@ -217,6 +217,11 @@ 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) >