diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-04-20 07:51:39 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-04-20 07:51:41 +0200 |
commit | 3ae96610c5a86bfceb6c6679e5411ee808aab5e1 (patch) | |
tree | fe7f9cd26b3c7386ed06afbeaadc09f205838020 /arch/arm/lib | |
parent | 6ccfd8c9e92fca4069da12d642e3d6162b28a2aa (diff) | |
download | barebox-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.c | 34 |
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) { |