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