1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * (C) Copyright 2019 Rockchip Electronics Co., Ltd 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _MEMBLK_H 7*4882a593Smuzhiyun #define _MEMBLK_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define ALIAS_COUNT_MAX 2 10*4882a593Smuzhiyun #define MEM_RESV_COUNT 10 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun enum memblk_id { 13*4882a593Smuzhiyun MEM_UNK, 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* Preloader */ 16*4882a593Smuzhiyun MEM_ATF, 17*4882a593Smuzhiyun MEM_OPTEE, 18*4882a593Smuzhiyun MEM_SHM, 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* U-Boot self */ 21*4882a593Smuzhiyun MEM_UBOOT, 22*4882a593Smuzhiyun MEM_STACK, 23*4882a593Smuzhiyun MEM_FASTBOOT, 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Image */ 26*4882a593Smuzhiyun MEM_RESOURCE, 27*4882a593Smuzhiyun MEM_RAMDISK, 28*4882a593Smuzhiyun MEM_FDT, 29*4882a593Smuzhiyun MEM_FDT_DTBO, 30*4882a593Smuzhiyun MEM_KERNEL, 31*4882a593Smuzhiyun MEM_UNCOMP_KERNEL, 32*4882a593Smuzhiyun MEM_ANDROID, 33*4882a593Smuzhiyun MEM_AVB_ANDROID, 34*4882a593Smuzhiyun MEM_FIT_USER, 35*4882a593Smuzhiyun MEM_FIT, 36*4882a593Smuzhiyun MEM_UIMAGE_USER, 37*4882a593Smuzhiyun MEM_UIMAGE, 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* Other */ 40*4882a593Smuzhiyun MEM_SEARCH, 41*4882a593Smuzhiyun MEM_BY_NAME, 42*4882a593Smuzhiyun MEM_KMEM_RESERVED, 43*4882a593Smuzhiyun MEM_MAX, 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun struct memblk_attr { 47*4882a593Smuzhiyun const char *name; 48*4882a593Smuzhiyun const char *alias[ALIAS_COUNT_MAX]; 49*4882a593Smuzhiyun u32 flags; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct memblock { 53*4882a593Smuzhiyun phys_addr_t base; 54*4882a593Smuzhiyun phys_size_t size; 55*4882a593Smuzhiyun u64 base_u64; /* 4GB+ */ 56*4882a593Smuzhiyun u64 size_u64; 57*4882a593Smuzhiyun phys_addr_t orig_base; 58*4882a593Smuzhiyun struct memblk_attr attr; 59*4882a593Smuzhiyun struct list_head node; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun extern const struct memblk_attr *mem_attr; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define SIZE_MB(len) ((len) >> 20) 65*4882a593Smuzhiyun #define SIZE_KB(len) (((len) % (1 << 20)) >> 10) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define F_NONE 0 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* Over-Flow-Check for region tail */ 70*4882a593Smuzhiyun #define F_OFC (1 << 0) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* Over-Flow-Check for region Head, only for U-Boot stack */ 73*4882a593Smuzhiyun #define F_HOFC (1 << 1) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* Memory can be overlap by fdt reserved memory, deprecated */ 76*4882a593Smuzhiyun #define F_OVERLAP (1 << 2) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* The region start address should be aligned to cacheline size */ 79*4882a593Smuzhiyun #define F_CACHELINE_ALIGN (1 << 3) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* Kernel 'reserved-memory' */ 82*4882a593Smuzhiyun #define F_KMEM_RESERVED (1 << 4) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* The region can be overlap by kernel 'reserved-memory' */ 85*4882a593Smuzhiyun #define F_KMEM_CAN_OVERLAP (1 << 5) 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* Ignore invisible region reserved by bidram */ 88*4882a593Smuzhiyun #define F_IGNORE_INVISIBLE (1 << 6) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* Highest memory right under the sp */ 91*4882a593Smuzhiyun #define F_HIGHEST_MEM (1 << 7) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* No sysmem layout dump if failed */ 94*4882a593Smuzhiyun #define F_NO_FAIL_DUMP (1 << 8) 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif /* _MEMBLK_H */ 97