diff --git a/arch/arm/mach-rockchip/resource_img.c b/arch/arm/mach-rockchip/resource_img.c index 20d3c61c36..477aae70b2 100755 --- a/arch/arm/mach-rockchip/resource_img.c +++ b/arch/arm/mach-rockchip/resource_img.c @@ -648,7 +648,7 @@ int rockchip_read_dtb_file(void *fdt_addr) return size; if (!sysmem_alloc_base("fdt", (phys_addr_t)fdt_addr, - ALIGN(size, RK_BLK_SIZE))) + ALIGN(size, RK_BLK_SIZE) + CONFIG_SYS_FDT_PAD)) return -ENOMEM; ret = rockchip_read_resource_file((void *)fdt_addr, dtb_name, 0, 0); diff --git a/common/android_bootloader.c b/common/android_bootloader.c index feec2fda13..af912f98de 100644 --- a/common/android_bootloader.c +++ b/common/android_bootloader.c @@ -811,9 +811,10 @@ int android_fdt_overlay_apply(void *fdt_addr) fdt_totalsize((void *)fdt_dtbo); if (sysmem_free((phys_addr_t)fdt_addr)) goto out; + if (!sysmem_alloc_base("fdt(dtbo)", (phys_addr_t)fdt_addr, - fdt_size)) + fdt_size + CONFIG_SYS_FDT_PAD)) goto out; fdt_increase_size(fdt_addr, fdt_totalsize((void *)fdt_dtbo)); ret = fdt_overlay_apply(fdt_addr, (void *)fdt_dtbo); diff --git a/common/image-android.c b/common/image-android.c index e980f7eb6d..f37123efaa 100644 --- a/common/image-android.c +++ b/common/image-android.c @@ -349,7 +349,8 @@ static int android_image_load_separate(struct blk_desc *dev_desc, blk_cnt = DIV_ROUND_UP(hdr->second_size, dev_desc->blksz); if (!sysmem_alloc_base("fdt(AOSP)", fdt_addr_r, - blk_cnt * dev_desc->blksz)) + blk_cnt * dev_desc->blksz + + CONFIG_SYS_FDT_PAD)) return -ENXIO; ret = blk_dread(dev_desc, blk_start, blk_cnt, (void *)fdt_addr_r); diff --git a/include/sysmem.h b/include/sysmem.h index 308b8e2653..58de824968 100644 --- a/include/sysmem.h +++ b/include/sysmem.h @@ -13,6 +13,14 @@ #undef MAX_LMB_REGIONS #define MAX_LMB_REGIONS MAX_SYSMEM_REGIONS +/* + * CONFIG_SYS_FDT_PAD default value is sync with bootm framework in: + * common/image-fdt.c + */ +#ifndef CONFIG_SYS_FDT_PAD +#define CONFIG_SYS_FDT_PAD 0x3000 +#endif + struct sysmem_property { const char *name; phys_addr_t base; diff --git a/lib/sysmem.c b/lib/sysmem.c index f44b78ca61..24bd4f91c9 100644 --- a/lib/sysmem.c +++ b/lib/sysmem.c @@ -373,7 +373,7 @@ int sysmem_free(phys_addr_t base) ret = lmb_free(&sysmem->lmb, prop->base, prop->size); if (ret >= 0) { - SYSMEM_I("Free: \"%s\", paddr=0x%lx, size=0x%lx\n", + SYSMEM_D("Free: \"%s\", paddr=0x%lx, size=0x%lx\n", prop->name, (ulong)prop->base, (ulong)prop->size); sysmem->allocated_cnt--; list_del(&prop->node);