summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-07-11 07:58:32 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-07-11 07:58:32 +0200
commit28d7f7878c0676e5115fdd3157a80f42f2d7cd86 (patch)
tree5a40d6aa67fda57f6eeab519211a0425d725be65 /arch
parent4a0041b48da7862e3de71eb1e13aa568651bb11c (diff)
parent95543d98e77c62174d143afc8ed5af4d1ade613b (diff)
downloadbarebox-28d7f7878c0676e5115fdd3157a80f42f2d7cd86.tar.gz
barebox-28d7f7878c0676e5115fdd3157a80f42f2d7cd86.tar.xz
Merge branch 'for-next/arm'
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/cpu/start.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index e037d91f9c..f25e5928cb 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -34,9 +34,9 @@
#include "mmu-early.h"
unsigned long arm_stack_top;
-static unsigned long arm_head_bottom;
static unsigned long arm_barebox_size;
static void *barebox_boarddata;
+static unsigned long barebox_boarddata_size;
static bool blob_is_fdt(const void *blob)
{
@@ -73,6 +73,10 @@ void *barebox_arm_boot_dtb(void)
void *data;
int ret;
struct barebox_arm_boarddata_compressed_dtb *compressed_dtb;
+ static void *boot_dtb;
+
+ if (boot_dtb)
+ return boot_dtb;
if (barebox_boarddata && blob_is_fdt(barebox_boarddata)) {
pr_debug("%s: using barebox_boarddata\n", __func__);
@@ -101,9 +105,9 @@ void *barebox_arm_boot_dtb(void)
return NULL;
}
- barebox_boarddata = dtb;
+ boot_dtb = dtb;
- return barebox_boarddata;
+ return boot_dtb;
}
static inline unsigned long arm_mem_boarddata(unsigned long membase,
@@ -126,11 +130,9 @@ EXPORT_SYMBOL_GPL(arm_mem_ramoops_get);
static int barebox_memory_areas_init(void)
{
- unsigned long start = arm_head_bottom;
- unsigned long size = arm_mem_barebox_image(0, arm_stack_top,
- arm_barebox_size) -
- arm_head_bottom;
- request_sdram_region("board data", start, size);
+ if(barebox_boarddata)
+ request_sdram_region("board data", (unsigned long)barebox_boarddata,
+ barebox_boarddata_size);
return 0;
}
@@ -159,7 +161,7 @@ __noreturn void barebox_non_pbl_start(unsigned long membase,
arm_stack_top = endmem;
arm_barebox_size = barebox_size;
- arm_head_bottom = arm_mem_barebox_image(membase, endmem,
+ malloc_end = arm_mem_barebox_image(membase, endmem,
arm_barebox_size);
if (IS_ENABLED(CONFIG_MMU_EARLY)) {
@@ -197,12 +199,11 @@ __noreturn void barebox_non_pbl_start(unsigned long membase,
name, mem);
barebox_boarddata = memcpy((void *)mem, boarddata,
totalsize);
- arm_head_bottom = mem;
+ barebox_boarddata_size = totalsize;
+ malloc_end = mem;
}
}
- malloc_end = arm_head_bottom;
-
/*
* Maximum malloc space is the Kconfig value if given
* or 1GB.