188bfa979SJoseph Chen /* SPDX-License-Identifier: GPL-2.0+ */ 288bfa979SJoseph Chen /* 388bfa979SJoseph Chen * (C) Copyright 2019 Rockchip Electronics Co., Ltd 488bfa979SJoseph Chen */ 588bfa979SJoseph Chen 688bfa979SJoseph Chen #ifndef _MEMBLK_H 788bfa979SJoseph Chen #define _MEMBLK_H 888bfa979SJoseph Chen 950226c8fSJoseph Chen #define ALIAS_COUNT_MAX 2 101e5eaf8fSJoseph Chen #define MEM_RESV_COUNT 10 1150226c8fSJoseph Chen 1288bfa979SJoseph Chen enum memblk_id { 13c01d4489SJoseph Chen MEM_UNK, 1488bfa979SJoseph Chen 1588bfa979SJoseph Chen /* Preloader */ 16c01d4489SJoseph Chen MEM_ATF, 17c01d4489SJoseph Chen MEM_OPTEE, 18c01d4489SJoseph Chen MEM_SHM, 1988bfa979SJoseph Chen 2088bfa979SJoseph Chen /* U-Boot self */ 21c01d4489SJoseph Chen MEM_UBOOT, 22c01d4489SJoseph Chen MEM_STACK, 23c01d4489SJoseph Chen MEM_FASTBOOT, 2488bfa979SJoseph Chen 2588bfa979SJoseph Chen /* Image */ 26c01d4489SJoseph Chen MEM_RESOURCE, 27c01d4489SJoseph Chen MEM_RAMDISK, 28c01d4489SJoseph Chen MEM_FDT, 29c01d4489SJoseph Chen MEM_FDT_DTBO, 30c01d4489SJoseph Chen MEM_KERNEL, 31c01d4489SJoseph Chen MEM_UNCOMP_KERNEL, 32c01d4489SJoseph Chen MEM_ANDROID, 33c01d4489SJoseph Chen MEM_AVB_ANDROID, 34c01d4489SJoseph Chen MEM_FIT_USER, 35c01d4489SJoseph Chen MEM_FIT, 36c01d4489SJoseph Chen MEM_UIMAGE_USER, 37c01d4489SJoseph Chen MEM_UIMAGE, 3888bfa979SJoseph Chen 3988bfa979SJoseph Chen /* Other */ 40c01d4489SJoseph Chen MEM_SEARCH, 41c01d4489SJoseph Chen MEM_BY_NAME, 42c01d4489SJoseph Chen MEM_KMEM_RESERVED, 43c01d4489SJoseph Chen MEM_MAX, 4488bfa979SJoseph Chen }; 4588bfa979SJoseph Chen 4688bfa979SJoseph Chen struct memblk_attr { 4788bfa979SJoseph Chen const char *name; 4850226c8fSJoseph Chen const char *alias[ALIAS_COUNT_MAX]; 4988bfa979SJoseph Chen u32 flags; 5088bfa979SJoseph Chen }; 5188bfa979SJoseph Chen 5288bfa979SJoseph Chen struct memblock { 5388bfa979SJoseph Chen phys_addr_t base; 5488bfa979SJoseph Chen phys_size_t size; 551d09cf29SJoseph Chen u64 base_u64; /* 4GB+ */ 561d09cf29SJoseph Chen u64 size_u64; 5750226c8fSJoseph Chen phys_addr_t orig_base; 5888bfa979SJoseph Chen struct memblk_attr attr; 5988bfa979SJoseph Chen struct list_head node; 6088bfa979SJoseph Chen }; 6188bfa979SJoseph Chen 6288bfa979SJoseph Chen extern const struct memblk_attr *mem_attr; 6388bfa979SJoseph Chen 6488bfa979SJoseph Chen #define SIZE_MB(len) ((len) >> 20) 6588bfa979SJoseph Chen #define SIZE_KB(len) (((len) % (1 << 20)) >> 10) 6688bfa979SJoseph Chen 67c01d4489SJoseph Chen #define F_NONE 0 6850226c8fSJoseph Chen 69c01d4489SJoseph Chen /* Over-Flow-Check for region tail */ 70c01d4489SJoseph Chen #define F_OFC (1 << 0) 71c01d4489SJoseph Chen 72c01d4489SJoseph Chen /* Over-Flow-Check for region Head, only for U-Boot stack */ 73c01d4489SJoseph Chen #define F_HOFC (1 << 1) 74c01d4489SJoseph Chen 75c01d4489SJoseph Chen /* Memory can be overlap by fdt reserved memory, deprecated */ 76c01d4489SJoseph Chen #define F_OVERLAP (1 << 2) 77c01d4489SJoseph Chen 78c01d4489SJoseph Chen /* The region start address should be aligned to cacheline size */ 79c01d4489SJoseph Chen #define F_CACHELINE_ALIGN (1 << 3) 80c01d4489SJoseph Chen 81c01d4489SJoseph Chen /* Kernel 'reserved-memory' */ 82c01d4489SJoseph Chen #define F_KMEM_RESERVED (1 << 4) 83c01d4489SJoseph Chen 84c01d4489SJoseph Chen /* The region can be overlap by kernel 'reserved-memory' */ 85c01d4489SJoseph Chen #define F_KMEM_CAN_OVERLAP (1 << 5) 86c01d4489SJoseph Chen 87c01d4489SJoseph Chen /* Ignore invisible region reserved by bidram */ 88c01d4489SJoseph Chen #define F_IGNORE_INVISIBLE (1 << 6) 89c01d4489SJoseph Chen 90c01d4489SJoseph Chen /* Highest memory right under the sp */ 91c01d4489SJoseph Chen #define F_HIGHEST_MEM (1 << 7) 92c01d4489SJoseph Chen 93c01d4489SJoseph Chen /* No sysmem layout dump if failed */ 94c01d4489SJoseph Chen #define F_NO_FAIL_DUMP (1 << 8) 9588bfa979SJoseph Chen 96*8d5a6a40SJoseph Chen /* Warning but not Error */ 97*8d5a6a40SJoseph Chen #define F_FAIL_WARNING (1 << 9) 98*8d5a6a40SJoseph Chen 9988bfa979SJoseph Chen #endif /* _MEMBLK_H */ 100