summaryrefslogtreecommitdiffstats
path: root/arch/arm/lib/bootm.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/lib/bootm.c')
-rw-r--r--arch/arm/lib/bootm.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index d4ce6308c5..b9281e9c62 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -69,11 +69,12 @@ static int sdram_start_and_size(unsigned long *start, unsigned long *size)
static int get_kernel_addresses(size_t image_size,
int verbose, unsigned long *load_address,
- unsigned long *spacing)
+ unsigned long *mem_free)
{
unsigned long mem_start, mem_size;
int ret;
size_t image_decomp_size;
+ unsigned long spacing;
ret = sdram_start_and_size(&mem_start, &mem_size);
if (ret)
@@ -89,7 +90,7 @@ static int get_kernel_addresses(size_t image_size,
* By default put oftree/initrd close behind compressed kernel image to
* avoid placing it outside of the kernels lowmem region.
*/
- *spacing = SZ_1M;
+ spacing = SZ_1M;
if (*load_address == UIMAGE_INVALID_ADDRESS) {
/*
@@ -107,9 +108,11 @@ static int get_kernel_addresses(size_t image_size,
* spacing to allow this relocation to happen without
* overwriting anything placed behind the kernel.
*/
- *spacing += image_decomp_size;
+ spacing += image_decomp_size;
}
+ *mem_free = PAGE_ALIGN(*load_address + image_size + spacing);
+
return 0;
}
@@ -170,13 +173,13 @@ 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_free, spacing;
+ unsigned long load_address, mem_free;
int ret;
load_address = data->os_address;
ret = get_kernel_addresses(bootm_get_os_size(data),
- bootm_verbose(data), &load_address, &spacing);
+ bootm_verbose(data), &load_address, &mem_free);
if (ret)
return ret;
@@ -184,8 +187,6 @@ static int do_bootm_linux(struct image_data *data)
if (ret)
return ret;
- mem_free = PAGE_ALIGN(data->os_res->end + spacing);
-
return __do_bootm_linux(data, mem_free, 0);
}
@@ -281,7 +282,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_free, spacing;
+ unsigned long mem_free;
fd = open(data->os_file, O_RDONLY);
if (fd < 0) {
@@ -320,7 +321,7 @@ static int do_bootz_linux(struct image_data *data)
load_address = data->os_address;
ret = get_kernel_addresses(image_size, bootm_verbose(data),
- &load_address, &spacing);
+ &load_address, &mem_free);
if (ret)
return ret;
@@ -358,8 +359,6 @@ static int do_bootz_linux(struct image_data *data)
close(fd);
- mem_free = PAGE_ALIGN(data->os_res->end + spacing);
-
return __do_bootm_linux(data, mem_free, swap);
err_out: