diff options
| author | Peter Korsgaard <jacmet@sunsite.dk> | 2009-01-14 13:52:24 +0100 | 
|---|---|---|
| committer | Gerald Van Baren <vanbaren@cideas.com> | 2009-01-17 13:03:29 -0500 | 
| commit | c088a108c75db565e07292fd668dfa5491e85bc2 (patch) | |
| tree | 0f310a28b1da8173a05e57c6cc30618716d5b0a9 /common/fdt_support.c | |
| parent | fadad1573fb16c90025f08a2861d6047d093cba7 (diff) | |
| download | olio-uboot-2014.01-c088a108c75db565e07292fd668dfa5491e85bc2.tar.xz olio-uboot-2014.01-c088a108c75db565e07292fd668dfa5491e85bc2.zip | |
fdt_resize(): fix actualsize calculations with unaligned blobs
The code in fdt_resize() to extend the fdt size to end on a page boundary
is wrong for fdt's not located at an address aligned on a page boundary.
What's even worse, the code would make actualsize shrink rather than grow
if (blob & 0xfff) was bigger than the amount of padding added by ALIGN(),
causing fdt_add_mem_rsv to fail.
Fix it by aligning end address (blob + size) to a page boundary instead.
For aligned fdt's this is equivalent to what we had before.
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'common/fdt_support.c')
| -rw-r--r-- | common/fdt_support.c | 2 | 
1 files changed, 1 insertions, 1 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index 5a83bca48..a79bc085b 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -610,7 +610,7 @@ int fdt_resize(void *blob)  		fdt_size_dt_strings(blob) + sizeof(struct fdt_reserve_entry);  	/* Make it so the fdt ends on a page boundary */ -	actualsize = ALIGN(actualsize, 0x1000); +	actualsize = ALIGN(actualsize + ((uint)blob & 0xfff), 0x1000);  	actualsize = actualsize - ((uint)blob & 0xfff);  	/* Change the fdt header to reflect the correct size */ |