lib: sysmem: support avb android memblk sysmem alloc

Because avb android image usually needs a large memory buffer,
always alloc avb android memblk right after U-Boot stack is a
better choice to avoid memblk overlap with others.

Since we have overflow protect magic for U-Boot stack, so we add
a pad(4KB) between them.

Change-Id: I72655d022f7e82f1ed9fbb381424d04bc86ccf6a
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
Joseph Chen 2019-05-07 17:34:27 +08:00
parent dcb404a677
commit f6e1530165
3 changed files with 14 additions and 0 deletions

View File

@ -61,6 +61,10 @@ const static struct memblk_attr plat_mem_attr[MEMBLK_ID_MAX] = {
.name = "ANDROID",
.flags = M_ATTR_OFC,
},
[MEMBLK_ID_AVB_ANDROID] = {
.name = "AVB_ANDROID",
.flags = M_ATTR_OFC,
},
};
const struct memblk_attr *mem_attr = plat_mem_attr;

View File

@ -26,6 +26,7 @@ enum memblk_id {
MEMBLK_ID_FDT_AOSP,
MEMBLK_ID_KERNEL,
MEMBLK_ID_ANDROID,
MEMBLK_ID_AVB_ANDROID,
/* Other */
MEMBLK_ID_BY_NAME,

View File

@ -245,6 +245,15 @@ static void *sysmem_alloc_align_base(enum memblk_id id,
} else if (id > MEMBLK_ID_UNK && id < MEMBLK_ID_MAX) {
attr = mem_attr[id];
name = attr.name;
/*
* Fixup base and place right after U-Boot stack, adding a lot
* of space(4KB) maybe safer.
*/
if ((id == MEMBLK_ID_AVB_ANDROID) &&
(base == SYSMEM_ALLOC_ANYWHERE))
base = gd->start_addr_sp -
CONFIG_SYS_STACK_SIZE - size - 0x1000;
} else {
SYSMEM_E("Unsupport memblk id %d for alloc sysmem\n", id);
goto out;