1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #include <common.h> 7*4882a593Smuzhiyun #include <memblk.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define MEM_DEFINE(id, attr) \ 10*4882a593Smuzhiyun [MEM_##id] = { \ 11*4882a593Smuzhiyun .name = #id, \ 12*4882a593Smuzhiyun .flags = attr, \ 13*4882a593Smuzhiyun } 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define MEM_DEFINE_1(id, attr, alias0) \ 16*4882a593Smuzhiyun [MEM_##id] = { \ 17*4882a593Smuzhiyun .name = #id, \ 18*4882a593Smuzhiyun .flags = attr, \ 19*4882a593Smuzhiyun .alias[0] = alias0, \ 20*4882a593Smuzhiyun } 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define MEM_DEFINE_2(id, attr, alias0, alias1) \ 23*4882a593Smuzhiyun [MEM_##id] = { \ 24*4882a593Smuzhiyun .name = #id, \ 25*4882a593Smuzhiyun .flags = attr, \ 26*4882a593Smuzhiyun .alias[0] = alias0, \ 27*4882a593Smuzhiyun .alias[1] = alias1, \ 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun const static struct memblk_attr plat_mem_attr[MEM_MAX] = { 31*4882a593Smuzhiyun /* Invisiable */ 32*4882a593Smuzhiyun MEM_DEFINE(ATF, F_NONE), 33*4882a593Smuzhiyun MEM_DEFINE(OPTEE, F_NONE), 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* U-Boot */ 36*4882a593Smuzhiyun MEM_DEFINE(UBOOT, F_KMEM_CAN_OVERLAP), 37*4882a593Smuzhiyun MEM_DEFINE(FASTBOOT, F_KMEM_CAN_OVERLAP), 38*4882a593Smuzhiyun MEM_DEFINE(STACK, F_HOFC | F_KMEM_CAN_OVERLAP), 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* Images */ 41*4882a593Smuzhiyun MEM_DEFINE(ANDROID, F_HOFC | F_OFC | F_KMEM_CAN_OVERLAP), 42*4882a593Smuzhiyun MEM_DEFINE(FDT, F_OFC), 43*4882a593Smuzhiyun MEM_DEFINE(FDT_DTBO, F_OFC), 44*4882a593Smuzhiyun MEM_DEFINE_1(SHM, F_NONE, "ramoops"), 45*4882a593Smuzhiyun MEM_DEFINE_2(RAMDISK, F_OFC, "boot", "recovery"), 46*4882a593Smuzhiyun MEM_DEFINE(UNCOMP_KERNEL,F_IGNORE_INVISIBLE), 47*4882a593Smuzhiyun MEM_DEFINE(FIT_USER, F_OFC | F_KMEM_CAN_OVERLAP), 48*4882a593Smuzhiyun MEM_DEFINE(UIMAGE_USER, F_OFC | F_KMEM_CAN_OVERLAP), 49*4882a593Smuzhiyun MEM_DEFINE(AVB_ANDROID, F_OFC | F_CACHELINE_ALIGN | 50*4882a593Smuzhiyun F_KMEM_CAN_OVERLAP | F_HIGHEST_MEM), 51*4882a593Smuzhiyun MEM_DEFINE(FIT, F_OFC | F_CACHELINE_ALIGN | 52*4882a593Smuzhiyun F_KMEM_CAN_OVERLAP | F_HIGHEST_MEM), 53*4882a593Smuzhiyun MEM_DEFINE(UIMAGE, F_OFC | F_CACHELINE_ALIGN | 54*4882a593Smuzhiyun F_KMEM_CAN_OVERLAP | F_HIGHEST_MEM), 55*4882a593Smuzhiyun MEM_DEFINE(RESOURCE, F_OFC), 56*4882a593Smuzhiyun MEM_DEFINE(SEARCH, F_OFC | F_CACHELINE_ALIGN | F_NO_FAIL_DUMP | 57*4882a593Smuzhiyun F_KMEM_CAN_OVERLAP | F_HIGHEST_MEM), 58*4882a593Smuzhiyun /* 59*4882a593Smuzhiyun * Workarund: 60*4882a593Smuzhiyun * 61*4882a593Smuzhiyun * On aarch32 mode, ATF reserve 0~1MB memory that the same as aarch64 62*4882a593Smuzhiyun * mode, but aarch32 mode actually occupies 0~192KB. 63*4882a593Smuzhiyun * So that we allow kernel to alloc memory within 0~1MB. 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun #if defined(CONFIG_ROCKCHIP_RK3308) && defined(CONFIG_ARM64_BOOT_AARCH32) 66*4882a593Smuzhiyun MEM_DEFINE(KERNEL, F_OFC | F_IGNORE_INVISIBLE), 67*4882a593Smuzhiyun #else 68*4882a593Smuzhiyun MEM_DEFINE(KERNEL, F_OFC), 69*4882a593Smuzhiyun #endif 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun const struct memblk_attr *mem_attr = plat_mem_attr; 73