xref: /rk3399_ARM-atf/plat/mediatek/drivers/apusys/mt8196/apusys_ammu.h (revision 999503d285475f8920111f3fd760312ddf1d5b5b)
1*e534d4f6SKarl Li /*
2*e534d4f6SKarl Li  * Copyright (c) 2024, MediaTek Inc. All rights reserved.
3*e534d4f6SKarl Li  *
4*e534d4f6SKarl Li  * SPDX-License-Identifier: BSD-3-Clause
5*e534d4f6SKarl Li  */
6*e534d4f6SKarl Li 
7*e534d4f6SKarl Li #ifndef APUSYS_AMMU_H
8*e534d4f6SKarl Li #define APUSYS_AMMU_H
9*e534d4f6SKarl Li 
10*e534d4f6SKarl Li #include <platform_def.h>
11*e534d4f6SKarl Li 
12*e534d4f6SKarl Li /* CMU */
13*e534d4f6SKarl Li #define APUMMU_CMU_TOP_BASE		(APU_CMU_TOP)
14*e534d4f6SKarl Li #define APUMMU_CMU_TOP_TOPOLOGY		(APUMMU_CMU_TOP_BASE + 0x04)
15*e534d4f6SKarl Li #define APUMMU_VSID_ENABLE_OFFSET	(0x50)
16*e534d4f6SKarl Li #define APUMMU_VSID_VALID_OFFSET	(0xb0)
17*e534d4f6SKarl Li 
18*e534d4f6SKarl Li #define VSID_OFFSET(vsid_idx)		(((vsid_idx) >> 5) * 0x4)
19*e534d4f6SKarl Li 
20*e534d4f6SKarl Li #define APUMMU_VSID_ENABLE_BASE(vsid_idx) \
21*e534d4f6SKarl Li 	(APUMMU_CMU_TOP_BASE + VSID_OFFSET(vsid_idx) + APUMMU_VSID_ENABLE_OFFSET)
22*e534d4f6SKarl Li #define APUMMU_VSID_VALID_BASE(vsid_idx) \
23*e534d4f6SKarl Li 	(APUMMU_CMU_TOP_BASE + VSID_OFFSET(vsid_idx) + APUMMU_VSID_VALID_OFFSET)
24*e534d4f6SKarl Li 
25*e534d4f6SKarl Li /* VSID SRAM */
26*e534d4f6SKarl Li #define APUMMU_VSID_BASE		(APUMMU_CMU_TOP_BASE + 0x1000)
27*e534d4f6SKarl Li #define APUMMU_VSID_DESC_BASE		(APUMMU_VSID_BASE + 0x400)
28*e534d4f6SKarl Li #define APUMMU_VSID_SRAM_SZIE		(0x5C00)
29*e534d4f6SKarl Li #define APUMMU_VSID_TBL_SZIE		(0xF4)
30*e534d4f6SKarl Li 
31*e534d4f6SKarl Li #define APUMMU_VSID(vsid_idx)		(APUMMU_VSID_BASE + (vsid_idx) * 4)
32*e534d4f6SKarl Li #define APUMMU_VSID_DESC(vsid_idx) \
33*e534d4f6SKarl Li 	(APUMMU_VSID_DESC_BASE + (vsid_idx) * APUMMU_VSID_TBL_SZIE)
34*e534d4f6SKarl Li 
35*e534d4f6SKarl Li /* TCU RCX */
36*e534d4f6SKarl Li #define APU_VCORE_CONFIG_BASE		(APU_RCX_VCORE_CONFIG)
37*e534d4f6SKarl Li #define APUMMU_RCX_EXTM_TCU_BASE	(APU_RCX_EXTM_TCU)
38*e534d4f6SKarl Li #define APUMMU_RCX_UPRV_TCU_BASE	(APU_RCX_UPRV_TCU)
39*e534d4f6SKarl Li 
40*e534d4f6SKarl Li #define APUMMU_SSID_SID_WIDTH_CTRL	(0xCC0)
41*e534d4f6SKarl Li #define CSR_SMMU_AXMMUSID_WIDTH		BIT(7)
42*e534d4f6SKarl Li #define APUMMU_1M_SIZE			(0x100000)
43*e534d4f6SKarl Li 
44*e534d4f6SKarl Li #define SMMU_NORMAL_0_1G_SID		(0x8)
45*e534d4f6SKarl Li #define SMMU_NORMAL_1_4G_SID		(0x9)
46*e534d4f6SKarl Li #define SMMU_NORMAL_4_16G_SID		(0xA)
47*e534d4f6SKarl Li 
48*e534d4f6SKarl Li enum apummu_page_size {
49*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_128KB = 0,
50*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_256KB,
51*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_512KB,
52*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_1MB,
53*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_128MB,
54*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_256MB,
55*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_512MB,
56*e534d4f6SKarl Li 	APUMMU_PAGE_LEN_4GB,
57*e534d4f6SKarl Li };
58*e534d4f6SKarl Li 
59*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_BASE(vsid_idx, seg_idx, seg_offset) \
60*e534d4f6SKarl Li 	(APUMMU_VSID_DESC(vsid_idx) + (seg_idx) * 0xC + (seg_offset) * 0x04 + 0x4)
61*e534d4f6SKarl Li 
62*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_ENABLE(vsid_idx)	(APUMMU_VSID_DESC(vsid_idx))
63*e534d4f6SKarl Li 
64*e534d4f6SKarl Li #define APUMMU_VSID_SRAM_TOTAL		(APUMMU_VSID_SRAM_SZIE / APUMMU_VSID_TBL_SZIE)
65*e534d4f6SKarl Li #define APUMMU_RSV_VSID_DESC_IDX_END	(APUMMU_VSID_SRAM_TOTAL - 1)
66*e534d4f6SKarl Li #define APUMMU_UPRV_RSV_DESC_IDX	(APUMMU_RSV_VSID_DESC_IDX_END)		/* 53 */
67*e534d4f6SKarl Li #define APUMMU_LOGGER_RSV_DESC_IDX	(APUMMU_RSV_VSID_DESC_IDX_END - 1)
68*e534d4f6SKarl Li #define APUMMU_APMCU_RSV_DESC_IDX	(APUMMU_RSV_VSID_DESC_IDX_END - 2)
69*e534d4f6SKarl Li #define APUMMU_GPU_RSV_DESC_IDX		(APUMMU_RSV_VSID_DESC_IDX_END - 3)
70*e534d4f6SKarl Li 
71*e534d4f6SKarl Li #define APUMMU_SEG_OFFSET_0		(0)
72*e534d4f6SKarl Li #define APUMMU_SEG_OFFSET_1		(1)
73*e534d4f6SKarl Li #define APUMMU_SEG_OFFSET_2		(2)
74*e534d4f6SKarl Li #define APUMMU_VSID_EN_MASK		(0x1f)
75*e534d4f6SKarl Li 
76*e534d4f6SKarl Li #define APUMMU_HW_THREAD_MAX		(7)
77*e534d4f6SKarl Li #define APUMMU_SEG_MAX			(9)
78*e534d4f6SKarl Li #define APUMMU_ADDR_SHIFT		(12)
79*e534d4f6SKarl Li 
80*e534d4f6SKarl Li #define VSID_THREAD_SZ			(0x4)
81*e534d4f6SKarl Li #define VSID_CORID_MASK			(0x7f)
82*e534d4f6SKarl Li #define VSID_CORID_OFF			(11)
83*e534d4f6SKarl Li #define VSID_IDX_MASK			(0xff)
84*e534d4f6SKarl Li #define VSID_IDX_OFF			(3)
85*e534d4f6SKarl Li #define VSID_VALID_MASK			(0x1)
86*e534d4f6SKarl Li #define VSID_COR_VALID_OFF		(1)
87*e534d4f6SKarl Li #define VSID_VALID_OFF			(0)
88*e534d4f6SKarl Li 
89*e534d4f6SKarl Li #define APUMMU_VSID_ACTIVE		(32)
90*e534d4f6SKarl Li #define APUMMU_VSID_RSV			(4)
91*e534d4f6SKarl Li #define APUMMU_VSID_UNUSED		(12)
92*e534d4f6SKarl Li #define APUMMU_VSID_USE_MAX		(APUMMU_VSID_ACTIVE + APUMMU_VSID_RSV)
93*e534d4f6SKarl Li 
94*e534d4f6SKarl Li #if ((APUMMU_VSID_RSV + APUMMU_VSID_ACTIVE + APUMMU_VSID_UNUSED + 1) > APUMMU_VSID_SRAM_TOTAL)
95*e534d4f6SKarl Li #error APUMMU VSID Overflow
96*e534d4f6SKarl Li #endif
97*e534d4f6SKarl Li 
98*e534d4f6SKarl Li #define APUMMU_RSV_VSID_IDX_END		(254)
99*e534d4f6SKarl Li #define APUMMU_RSV_VSID_IDX_START	(APUMMU_RSV_VSID_IDX_END - APUMMU_VSID_RSV + 1)
100*e534d4f6SKarl Li 
101*e534d4f6SKarl Li #if ((APUMMU_RSV_VSID_IDX_END - APUMMU_RSV_VSID_IDX_START) > APUMMU_VSID_RSV)
102*e534d4f6SKarl Li #error APUMMU VSID RSV Overflow
103*e534d4f6SKarl Li #endif
104*e534d4f6SKarl Li 
105*e534d4f6SKarl Li /* Reserve */
106*e534d4f6SKarl Li #define APUMMU_UPRV_RSV_VSID		(APUMMU_RSV_VSID_IDX_END)
107*e534d4f6SKarl Li #define APUMMU_LOGGER_RSV_VSID		(APUMMU_RSV_VSID_IDX_END - 1)
108*e534d4f6SKarl Li #define APUMMU_APMCU_RSV_VSID		(APUMMU_RSV_VSID_IDX_END - 2)
109*e534d4f6SKarl Li #define APUMMU_GPU_RSV_VSID		(APUMMU_RSV_VSID_IDX_END - 3)
110*e534d4f6SKarl Li 
111*e534d4f6SKarl Li /* VSID bit mask */
112*e534d4f6SKarl Li #define APUMMU_VSID_MAX_MASK_WORD	((APUMMU_VSID_USE_MAX + 32 - 1) / 32)
113*e534d4f6SKarl Li 
114*e534d4f6SKarl Li /* VSID fields */
115*e534d4f6SKarl Li #define READ_VSID_FIELD(vids, sg, offset, shift, mask) \
116*e534d4f6SKarl Li 	((mmio_read_32(APUMMU_VSID_SEGMENT_BASE(vsid, seg, offset)) >> sift) & mask)
117*e534d4f6SKarl Li #define READ_VSID_FIELD_OFFESET0(vids, sg, shift, mask) \
118*e534d4f6SKarl Li 	READ_VSID_FIELD(vids, sg, 0, shift, mask)
119*e534d4f6SKarl Li #define READ_VSID_FIELD_OFFESET1(vids, sg, shift, mask) \
120*e534d4f6SKarl Li 	READ_VSID_FIELD(vids, sg, 1, shift, mask)
121*e534d4f6SKarl Li #define READ_VSID_FIELD_OFFESET2(vids, sg, shift, mask) \
122*e534d4f6SKarl Li 	READ_VSID_FIELD(vids, sg, 2, shift, mask)
123*e534d4f6SKarl Li 
124*e534d4f6SKarl Li /* Get segment offset 0 data - 0x00 */
125*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_INPUT(vsid, seg) \
126*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET0(vsid, seg, 10, 0x3FFFFF)
127*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_OFFSET0_RSRV(vsid, seg) \
128*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET0(vsid, seg, 6, 0xF)
129*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_PAGELEN(vsid, seg) \
130*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET0(vsid, seg, 0, 0x7)
131*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_PAGESEL(vsid, seg) \
132*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET0(vsid, seg, 3, 0x7)
133*e534d4f6SKarl Li 
134*e534d4f6SKarl Li /* Get segment offset 1 data - 0x04 */
135*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_IOMMU_EN(vsid, seg) \
136*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET1(vsid, seg, 1, 0x1)
137*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_OFFSET1_RSRV0(vsid, seg) \
138*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET1(vsid, seg, 2, 0xFF)
139*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_OFFSET1_RSRV1(vsid, seg) \
140*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET1(vsid, seg, 0, 0x1)
141*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_OUTPUT(vsid, seg) \
142*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET1(vsid, seg, 10, 0x3FFFFF)
143*e534d4f6SKarl Li 
144*e534d4f6SKarl Li /* Get segment offset 2 data - 0x08 */
145*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_ACP_EN(vsid, seg) \
146*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 12, 0x1)
147*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AR_CACHE_ALLOC(vsid, seg) \
148*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 4, 0x1)
149*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AR_EXCLU(vsid, seg) \
150*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 9, 0x1)
151*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AR_SEPCU(vsid, seg) \
152*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 8, 0x1)
153*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AR_SLB_EN(vsid, seg) \
154*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 2, 0x1)
155*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AR_SLC_EN(vsid, seg) \
156*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 3, 0x1)
157*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AW_CACHE_ALLOC(vsid, seg) \
158*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 7, 0x1)
159*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AW_CLR(vsid, seg) \
160*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 11, 0x1)
161*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AW_INVALID(vsid, seg) \
162*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 10, 0x1)
163*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AW_SLB_EN(vsid, seg) \
164*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 5, 0x1)
165*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_AW_SLC_EN(vsid, seg) \
166*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 6, 0x1)
167*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_DOMAIN(vsid, seg) \
168*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 13, 0xF)
169*e534d4f6SKarl Li #define APUMMU_SEGMENT_GET_NS(vsid, seg) \
170*e534d4f6SKarl Li 	READ_VSID_FIELD_OFFESET2(vsid, seg, 0, 0x1)
171*e534d4f6SKarl Li 
172*e534d4f6SKarl Li /* Build segment data */
173*e534d4f6SKarl Li /* Build segment offset 0 (0x00) data */
174*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_00_INPUT(input_adr)		(((input_adr) & 0x3fffff) << 10)
175*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_00_PAGESEL(page_sel)	(((page_sel) & 0x7) << 3)
176*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_00_PAGELEN(page_len)	(((page_len) & 0x7) << 0)
177*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_00_RESV(resv)		(((resv) & 0xf) << 6)
178*e534d4f6SKarl Li 
179*e534d4f6SKarl Li #define APUMMU_BUILD_SEGMENT_OFFSET0(input_adr, resv, page_sel, page_len) \
180*e534d4f6SKarl Li 				(APUMMU_VSID_SEGMENT_00_INPUT(input_adr) | \
181*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_00_RESV(resv) | \
182*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_00_PAGESEL(page_sel) | \
183*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_00_PAGELEN(page_len))
184*e534d4f6SKarl Li 
185*e534d4f6SKarl Li /* Build segment offset 1 (0x04) data */
186*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_04_IOMMU_EN(iommu_en)	(((iommu_en) & 0x1) << 1)
187*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_04_OUTPUT(output_adr)	(((output_adr) & 0x3fffff) << 10)
188*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_04_RESV0(resv0)		(((resv0) & 0xff) << 2)
189*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_04_RESV1(resv1)		(((resv1) & 0x1) << 0)
190*e534d4f6SKarl Li 
191*e534d4f6SKarl Li #define APUMMU_BUILD_SEGMENT_OFFSET1(output_adr, resv0, iommu_en, resv1) \
192*e534d4f6SKarl Li 				(APUMMU_VSID_SEGMENT_04_OUTPUT(output_adr) | \
193*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_04_RESV0(resv0) | \
194*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_04_IOMMU_EN(iommu_en) | \
195*e534d4f6SKarl Li 				 APUMMU_VSID_SEGMENT_04_RESV1(resv1))
196*e534d4f6SKarl Li 
197*e534d4f6SKarl Li /* Build segment offset 2 (0x08) data */
198*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_DOMAIN_MASK	(0xf)
199*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_DOMAIN_SHIFT	(13)
200*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_RESV_MASK	(0x7fff)
201*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_RESV_SHIFT	(17)
202*e534d4f6SKarl Li 
203*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_DOMAIN(domain) \
204*e534d4f6SKarl Li 	(((domain) & APUMMU_VSID_SEGMENT_08_DOMAIN_MASK) << APUMMU_VSID_SEGMENT_08_DOMAIN_SHIFT)
205*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_RESV(resv) \
206*e534d4f6SKarl Li 	(((resv) & APUMMU_VSID_SEGMENT_08_RESV_MASK) << APUMMU_VSID_SEGMENT_08_RESV_SHIFT)
207*e534d4f6SKarl Li 
208*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_ACP_EN(acp_en)		(((acp_en) & 0x1) << 12)
209*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AR_EXCLU(ar_exclu)	(((ar_exclu) & 0x1) << 9)
210*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AR_SEPCU(ar_sepcu)	(((ar_sepcu) & 0x1) << 8)
211*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AR_SLB_EN(ar_slb_en)	(((ar_slb_en) & 0x1) << 2)
212*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AR_SLC_EN(ar_slc_en)	(((ar_slc_en) & 0x1) << 3)
213*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AW_CLR(aw_clr)		(((aw_clr) & 0x1) << 11)
214*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AW_INVALID(aw_invalid)	(((aw_invalid) & 0x1) << 10)
215*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AW_SLB_EN(aw_slb_en)	(((aw_slb_en) & 0x1) << 5)
216*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AW_SLC_EN(aw_slc_en)	(((aw_slc_en) & 0x1) << 6)
217*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_NS(ns)			(((ns) & 0x1) << 0)
218*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_RO(ro)			(((ro) & 0x1) << 1)
219*e534d4f6SKarl Li 
220*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AR_CACHE_ALLOCATE(ar_cache_allocate) \
221*e534d4f6SKarl Li 	(((ar_cache_allocate) & 0x1) << 4)
222*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_08_AW_CACHE_ALLOCATE(aw_cache_allocate) \
223*e534d4f6SKarl Li 	(((aw_cache_allocate) & 0x1) << 7)
224*e534d4f6SKarl Li 
225*e534d4f6SKarl Li #define APUMMU_BUILD_SEGMENT_OFFSET2(resv, domain, acp_en, aw_clr, \
226*e534d4f6SKarl Li 		aw_invalid, ar_exclu, ar_sepcu, \
227*e534d4f6SKarl Li 		aw_cache_allocate, aw_slc_en, aw_slb_en, ar_cache_allocate, \
228*e534d4f6SKarl Li 		ar_slc_en, ar_slb_en, ro, ns) \
229*e534d4f6SKarl Li 		((APUMMU_VSID_SEGMENT_08_RESV(resv)) |\
230*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_DOMAIN(domain)) |\
231*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_ACP_EN(acp_en)) |\
232*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AW_CLR(aw_clr)) |\
233*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AW_INVALID(aw_invalid)) |\
234*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AR_EXCLU(ar_exclu)) |\
235*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AR_SEPCU(ar_sepcu)) |\
236*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AW_CACHE_ALLOCATE(aw_cache_allocate)) |\
237*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AW_SLC_EN(aw_slc_en)) |\
238*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AW_SLB_EN(aw_slb_en)) |\
239*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AR_CACHE_ALLOCATE(ar_cache_allocate)) |\
240*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AR_SLC_EN(ar_slc_en)) |\
241*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_AR_SLB_EN(ar_slb_en)) |\
242*e534d4f6SKarl Li 		 (APUMMU_VSID_SEGMENT_08_RO(ro)) | (APUMMU_VSID_SEGMENT_08_NS(ns)))
243*e534d4f6SKarl Li 
244*e534d4f6SKarl Li /* Build segment offset 3 (0x0c) data */
245*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_0C_RESV(rsv)		(((rsv) & 0x7fffffff) << 0)
246*e534d4f6SKarl Li #define APUMMU_VSID_SEGMENT_0C_SEG_VALID(seg_valid)	(((seg_valid) & 0x1U) << 31)
247*e534d4f6SKarl Li #define APUMMU_BUILD_SEGMENT_OFFSET3(seg_valid, rsv) \
248*e534d4f6SKarl Li 	((uint32_t)APUMMU_VSID_SEGMENT_0C_SEG_VALID(seg_valid) | \
249*e534d4f6SKarl Li 	 APUMMU_VSID_SEGMENT_0C_RESV(rsv))
250*e534d4f6SKarl Li 
251*e534d4f6SKarl Li #define APUMMU_INT_D2T_TBL0_OFS	(0x40)
252*e534d4f6SKarl Li 
253*e534d4f6SKarl Li #define APUSYS_TCM		(0x4d100000)
254*e534d4f6SKarl Li 
255*e534d4f6SKarl Li enum {
256*e534d4f6SKarl Li 	APUMMU_THD_ID_APMCU_NORMAL = 0,
257*e534d4f6SKarl Li 	APUMMU_THD_ID_TEE,
258*e534d4f6SKarl Li };
259*e534d4f6SKarl Li 
260*e534d4f6SKarl Li int rv_boot(uint32_t uP_seg_output, uint8_t uP_hw_thread,
261*e534d4f6SKarl Li 	    enum apummu_page_size logger_page_size, uint32_t XPU_seg_output,
262*e534d4f6SKarl Li 	    enum apummu_page_size XPU_page_size);
263*e534d4f6SKarl Li 
264*e534d4f6SKarl Li #endif
265