|
@@ -597,6 +597,7 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
|
|
|
uint64_t addr, size;
|
|
|
int total, ret;
|
|
|
uint actualsize;
|
|
|
+ int fdt_memrsv = 0;
|
|
|
|
|
|
if (!blob)
|
|
|
return 0;
|
|
@@ -606,6 +607,7 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
|
|
|
fdt_get_mem_rsv(blob, i, &addr, &size);
|
|
|
if (addr == (uintptr_t)blob) {
|
|
|
fdt_del_mem_rsv(blob, i);
|
|
|
+ fdt_memrsv = 1;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -627,10 +629,12 @@ int fdt_shrink_to_minimum(void *blob, uint extrasize)
|
|
|
/* Change the fdt header to reflect the correct size */
|
|
|
fdt_set_totalsize(blob, actualsize);
|
|
|
|
|
|
- /* Add the new reservation */
|
|
|
- ret = fdt_add_mem_rsv(blob, map_to_sysmem(blob), actualsize);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
+ if (fdt_memrsv) {
|
|
|
+ /* Add the new reservation */
|
|
|
+ ret = fdt_add_mem_rsv(blob, map_to_sysmem(blob), actualsize);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
|
|
|
return actualsize;
|
|
|
}
|