summaryrefslogtreecommitdiffstats
path: root/arch/arm/lib
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-04-20 07:51:39 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-04-20 07:51:41 +0200
commit3ae96610c5a86bfceb6c6679e5411ee808aab5e1 (patch)
treefe7f9cd26b3c7386ed06afbeaadc09f205838020 /arch/arm/lib
parent6ccfd8c9e92fca4069da12d642e3d6162b28a2aa (diff)
downloadbarebox-3ae96610c5a86bfceb6c6679e5411ee808aab5e1.tar.gz
barebox-3ae96610c5a86bfceb6c6679e5411ee808aab5e1.tar.xz
ARM: bootm: Let get_kernel_addresses() determine SDRAM region itself
Move the call to sdram_start_and_size() into get_kernel_addresses() and remove the now unnecessary parameter mem_start. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/lib')
-rw-r--r--arch/arm/lib/bootm.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 28b4f4a4b4..d4ce6308c5 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -67,15 +67,23 @@ static int sdram_start_and_size(unsigned long *start, unsigned long *size)
return 0;
}
-static void get_kernel_addresses(unsigned long mem_start, size_t image_size,
+static int get_kernel_addresses(size_t image_size,
int verbose, unsigned long *load_address,
unsigned long *spacing)
{
+ unsigned long mem_start, mem_size;
+ int ret;
+ size_t image_decomp_size;
+
+ ret = sdram_start_and_size(&mem_start, &mem_size);
+ if (ret)
+ return ret;
+
/*
* We don't know the exact decompressed size so just use a conservative
* default of 4 times the size of the compressed image.
*/
- size_t image_decomp_size = PAGE_ALIGN(image_size * 4);
+ image_decomp_size = PAGE_ALIGN(image_size * 4);
/*
* By default put oftree/initrd close behind compressed kernel image to
@@ -101,6 +109,8 @@ static void get_kernel_addresses(unsigned long mem_start, size_t image_size,
*/
*spacing += image_decomp_size;
}
+
+ return 0;
}
static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int swap)
@@ -160,17 +170,15 @@ static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int
static int do_bootm_linux(struct image_data *data)
{
- unsigned long load_address, mem_start, mem_size, mem_free, spacing;
+ unsigned long load_address, mem_free, spacing;
int ret;
- ret = sdram_start_and_size(&mem_start, &mem_size);
- if (ret)
- return ret;
-
load_address = data->os_address;
- get_kernel_addresses(mem_start, bootm_get_os_size(data),
+ ret = get_kernel_addresses(bootm_get_os_size(data),
bootm_verbose(data), &load_address, &spacing);
+ if (ret)
+ return ret;
ret = bootm_load_os(data, load_address);
if (ret)
@@ -273,11 +281,7 @@ static int do_bootz_linux(struct image_data *data)
u32 end, start;
size_t image_size;
unsigned long load_address = data->os_address;
- unsigned long mem_start, mem_size, mem_free, spacing;
-
- ret = sdram_start_and_size(&mem_start, &mem_size);
- if (ret)
- return ret;
+ unsigned long mem_free, spacing;
fd = open(data->os_file, O_RDONLY);
if (fd < 0) {
@@ -315,8 +319,10 @@ static int do_bootz_linux(struct image_data *data)
image_size = end - start;
load_address = data->os_address;
- get_kernel_addresses(mem_start, image_size, bootm_verbose(data),
+ ret = get_kernel_addresses(image_size, bootm_verbose(data),
&load_address, &spacing);
+ if (ret)
+ return ret;
data->os_res = request_sdram_region("zimage", load_address, image_size);
if (!data->os_res) {