xref: /OK3568_Linux_fs/u-boot/include/memblk.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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