1*4cc87010SRuslan Bukin /*- 2*4cc87010SRuslan Bukin * SPDX-License-Identifier: BSD-2-Clause 3*4cc87010SRuslan Bukin * 4*4cc87010SRuslan Bukin * Copyright (c) 2020 Ruslan Bukin <br@bsdpad.com> 5*4cc87010SRuslan Bukin * 6*4cc87010SRuslan Bukin * This software was developed by SRI International and the University of 7*4cc87010SRuslan Bukin * Cambridge Computer Laboratory (Department of Computer Science and 8*4cc87010SRuslan Bukin * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the 9*4cc87010SRuslan Bukin * DARPA SSITH research programme. 10*4cc87010SRuslan Bukin * 11*4cc87010SRuslan Bukin * Redistribution and use in source and binary forms, with or without 12*4cc87010SRuslan Bukin * modification, are permitted provided that the following conditions 13*4cc87010SRuslan Bukin * are met: 14*4cc87010SRuslan Bukin * 1. Redistributions of source code must retain the above copyright 15*4cc87010SRuslan Bukin * notice, this list of conditions and the following disclaimer. 16*4cc87010SRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 17*4cc87010SRuslan Bukin * notice, this list of conditions and the following disclaimer in the 18*4cc87010SRuslan Bukin * documentation and/or other materials provided with the distribution. 19*4cc87010SRuslan Bukin * 20*4cc87010SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21*4cc87010SRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*4cc87010SRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*4cc87010SRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24*4cc87010SRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*4cc87010SRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*4cc87010SRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*4cc87010SRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*4cc87010SRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*4cc87010SRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*4cc87010SRuslan Bukin * SUCH DAMAGE. 31*4cc87010SRuslan Bukin */ 32*4cc87010SRuslan Bukin 33*4cc87010SRuslan Bukin #ifndef _ARM64_IOMMU_SMMUREG_H_ 34*4cc87010SRuslan Bukin #define _ARM64_IOMMU_SMMUREG_H_ 35*4cc87010SRuslan Bukin 36*4cc87010SRuslan Bukin #define SMMU_IDR0 0x000 37*4cc87010SRuslan Bukin #define IDR0_ST_LVL_S 27 38*4cc87010SRuslan Bukin #define IDR0_ST_LVL_M (0x3 << IDR0_ST_LVL_S) 39*4cc87010SRuslan Bukin #define IDR0_ST_LVL_LINEAR (0x0 << IDR0_ST_LVL_S) /* Linear Stream table*/ 40*4cc87010SRuslan Bukin #define IDR0_ST_LVL_2 (0x1 << IDR0_ST_LVL_S) /* 2-level Stream Table*/ 41*4cc87010SRuslan Bukin #define IDR0_ST_TERM_MODEL (1 << 26) /* Terminate model behavior */ 42*4cc87010SRuslan Bukin #define IDR0_STALL_MODEL_S 24 /* Stall model support */ 43*4cc87010SRuslan Bukin #define IDR0_STALL_MODEL_M (0x3 << IDR0_STALL_MODEL_S) 44*4cc87010SRuslan Bukin #define IDR0_STALL_MODEL_STALL (0x0 << IDR0_STALL_MODEL_S) /* Stall and Term*/ 45*4cc87010SRuslan Bukin #define IDR0_STALL_MODEL_FORCE (0x2 << IDR0_STALL_MODEL_S) /* Stall is forced*/ 46*4cc87010SRuslan Bukin #define IDR0_TTENDIAN_S 21 /* Endianness for translation table walks.*/ 47*4cc87010SRuslan Bukin #define IDR0_TTENDIAN_M (0x3 << IDR0_TTENDIAN_S) 48*4cc87010SRuslan Bukin #define IDR0_TTENDIAN_MIXED (0x0 << IDR0_TTENDIAN_S) 49*4cc87010SRuslan Bukin #define IDR0_TTENDIAN_LITTLE (0x2 << IDR0_TTENDIAN_S) 50*4cc87010SRuslan Bukin #define IDR0_TTENDIAN_BIG (0x3 << IDR0_TTENDIAN_S) 51*4cc87010SRuslan Bukin #define IDR0_VATOS (1 << 20) / * Virtual ATOS page interface */ 52*4cc87010SRuslan Bukin #define IDR0_CD2L (1 << 19) /* 2-level Context descriptor table*/ 53*4cc87010SRuslan Bukin #define IDR0_VMID16 (1 << 18) /* 16-bit VMID supported */ 54*4cc87010SRuslan Bukin #define IDR0_VMW (1 << 17) /* VMID wildcard-matching */ 55*4cc87010SRuslan Bukin #define IDR0_PRI (1 << 16) /* Page Request Interface supported*/ 56*4cc87010SRuslan Bukin #define IDR0_ATOS (1 << 15) /* Address Translation Operations */ 57*4cc87010SRuslan Bukin #define IDR0_SEV (1 << 14) /* WFE wake-up events */ 58*4cc87010SRuslan Bukin #define IDR0_MSI (1 << 13) /* Message Signalled Interrupts */ 59*4cc87010SRuslan Bukin #define IDR0_ASID16 (1 << 12) /* 16-bit ASID supported */ 60*4cc87010SRuslan Bukin #define IDR0_NS1ATS (1 << 11) /* Split-stage ATS not supported */ 61*4cc87010SRuslan Bukin #define IDR0_ATS (1 << 10) /* PCIe ATS supported by SMMU */ 62*4cc87010SRuslan Bukin #define IDR0_HYP (1 << 9) /* Hypervisor stage 1 contexts */ 63*4cc87010SRuslan Bukin #define IDR0_DORMHINT (1 << 8) /* Dormant hint supported */ 64*4cc87010SRuslan Bukin #define IDR0_HTTU_S 6 /* H/W transl. table A-flag and Dirty state */ 65*4cc87010SRuslan Bukin #define IDR0_HTTU_M (0x3 << IDR0_HTTU_S) 66*4cc87010SRuslan Bukin #define IDR0_HTTU_A (0x1 << IDR0_HTTU_S) /* Access flag (A-flag) */ 67*4cc87010SRuslan Bukin #define IDR0_HTTU_AD (0x2 << IDR0_HTTU_S) /* A-flag and Dirty State*/ 68*4cc87010SRuslan Bukin #define IDR0_BTM (1 << 5) /* Broadcast TLB Maintenance */ 69*4cc87010SRuslan Bukin #define IDR0_COHACC (1 << 4) /* Coherent access to translations*/ 70*4cc87010SRuslan Bukin #define IDR0_TTF_S 2 /* Translation Table Formats supported */ 71*4cc87010SRuslan Bukin #define IDR0_TTF_M (0x3 << IDR0_TTF_S) 72*4cc87010SRuslan Bukin #define IDR0_TTF_AA32 (0x1 << IDR0_TTF_S) /* AArch32 (LPAE) */ 73*4cc87010SRuslan Bukin #define IDR0_TTF_AA64 (0x2 << IDR0_TTF_S) /* AArch64 */ 74*4cc87010SRuslan Bukin #define IDR0_TTF_ALL (0x3 << IDR0_TTF_S) /* AArch32 and AArch64 */ 75*4cc87010SRuslan Bukin #define IDR0_S1P (1 << 1) /* Stage1 translation supported. */ 76*4cc87010SRuslan Bukin #define IDR0_S2P (1 << 0) /* Stage2 translation supported. */ 77*4cc87010SRuslan Bukin #define SMMU_IDR1 0x004 78*4cc87010SRuslan Bukin #define IDR1_TABLES_PRESET (1 << 30) /* Table base addresses fixed. */ 79*4cc87010SRuslan Bukin #define IDR1_QUEUES_PRESET (1 << 29) /* Queue base addresses fixed. */ 80*4cc87010SRuslan Bukin #define IDR1_REL (1 << 28) /* Relative base pointers */ 81*4cc87010SRuslan Bukin #define IDR1_ATTR_TYPES_OVR (1 << 27) /* Incoming attrs can be overridden*/ 82*4cc87010SRuslan Bukin #define IDR1_ATTR_PERMS_OVR (1 << 26) /* Incoming attrs can be overridden*/ 83*4cc87010SRuslan Bukin #define IDR1_CMDQS_S 21 /* Maximum number of Command queue entries*/ 84*4cc87010SRuslan Bukin #define IDR1_CMDQS_M (0x1f << IDR1_CMDQS_S) 85*4cc87010SRuslan Bukin #define IDR1_EVENTQS_S 16 /* Maximum number of Event queue entries */ 86*4cc87010SRuslan Bukin #define IDR1_EVENTQS_M (0x1f << IDR1_EVENTQS_S) 87*4cc87010SRuslan Bukin #define IDR1_PRIQS_S 11 /* Maximum number of PRI queue entries */ 88*4cc87010SRuslan Bukin #define IDR1_PRIQS_M (0x1f << IDR1_PRIQS_S) 89*4cc87010SRuslan Bukin #define IDR1_SSIDSIZE_S 6 /* Max bits of SubstreamID */ 90*4cc87010SRuslan Bukin #define IDR1_SSIDSIZE_M (0x1f << IDR1_SSIDSIZE_S) 91*4cc87010SRuslan Bukin #define IDR1_SIDSIZE_S 0 /* Max bits of StreamID */ 92*4cc87010SRuslan Bukin #define IDR1_SIDSIZE_M (0x3f << IDR1_SIDSIZE_S) 93*4cc87010SRuslan Bukin #define SMMU_IDR2 0x008 94*4cc87010SRuslan Bukin #define SMMU_IDR3 0x00C 95*4cc87010SRuslan Bukin #define IDR3_RIL (1 << 10) /* Range-based Invalidations. */ 96*4cc87010SRuslan Bukin #define SMMU_IDR4 0x010 97*4cc87010SRuslan Bukin #define SMMU_IDR5 0x014 98*4cc87010SRuslan Bukin #define IDR5_STALL_MAX_S 16 /* Max outstanding stalled transactions */ 99*4cc87010SRuslan Bukin #define IDR5_STALL_MAX_M (0xffff << IDR5_STALL_MAX_S) 100*4cc87010SRuslan Bukin #define IDR5_VAX_S 10 /* Virtual Address eXtend */ 101*4cc87010SRuslan Bukin #define IDR5_VAX_M (0x3 << IDR5_VAX_S) 102*4cc87010SRuslan Bukin #define IDR5_VAX_48 (0 << IDR5_VAX_S) 103*4cc87010SRuslan Bukin #define IDR5_VAX_52 (1 << IDR5_VAX_S) 104*4cc87010SRuslan Bukin #define IDR5_GRAN64K (1 << 6) /* 64KB translation granule */ 105*4cc87010SRuslan Bukin #define IDR5_GRAN16K (1 << 5) /* 16KB translation granule */ 106*4cc87010SRuslan Bukin #define IDR5_GRAN4K (1 << 4) /* 4KB translation granule */ 107*4cc87010SRuslan Bukin #define IDR5_OAS_S 0 /* Output Address Size */ 108*4cc87010SRuslan Bukin #define IDR5_OAS_M (0x7 << IDR5_OAS_S) 109*4cc87010SRuslan Bukin #define IDR5_OAS_32 (0x0 << IDR5_OAS_S) 110*4cc87010SRuslan Bukin #define IDR5_OAS_36 (0x1 << IDR5_OAS_S) 111*4cc87010SRuslan Bukin #define IDR5_OAS_40 (0x2 << IDR5_OAS_S) 112*4cc87010SRuslan Bukin #define IDR5_OAS_42 (0x3 << IDR5_OAS_S) 113*4cc87010SRuslan Bukin #define IDR5_OAS_44 (0x4 << IDR5_OAS_S) 114*4cc87010SRuslan Bukin #define IDR5_OAS_48 (0x5 << IDR5_OAS_S) 115*4cc87010SRuslan Bukin #define IDR5_OAS_52 (0x6 << IDR5_OAS_S) /* Reserved in SMMU v3.0 */ 116*4cc87010SRuslan Bukin #define SMMU_IIDR 0x018 117*4cc87010SRuslan Bukin #define SMMU_AIDR 0x01C 118*4cc87010SRuslan Bukin #define SMMU_CR0 0x020 119*4cc87010SRuslan Bukin #define CR0_VMW_S 6 /* VMID Wildcard */ 120*4cc87010SRuslan Bukin #define CR0_VMW_M (0x7 << CR0_VMW_S) 121*4cc87010SRuslan Bukin #define CR0_ATSCHK (1 << 4) /* ATS behavior: Safe mode */ 122*4cc87010SRuslan Bukin #define CR0_CMDQEN (1 << 3) /* Enable Command queue processing */ 123*4cc87010SRuslan Bukin #define CR0_EVENTQEN (1 << 2) /* Enable Event queue writes */ 124*4cc87010SRuslan Bukin #define CR0_PRIQEN (1 << 1) /* Enable PRI queue writes */ 125*4cc87010SRuslan Bukin #define CR0_SMMUEN (1 << 0) /* Non-secure SMMU enable */ 126*4cc87010SRuslan Bukin #define SMMU_CR0ACK 0x024 127*4cc87010SRuslan Bukin #define SMMU_CR1 0x028 128*4cc87010SRuslan Bukin #define CR1_TABLE_SH_S 10 /* Table access Shareability. */ 129*4cc87010SRuslan Bukin #define CR1_TABLE_SH_M (0x3 << CR1_TABLE_SH_S) 130*4cc87010SRuslan Bukin #define CR1_TABLE_SH_NS (0x0 << CR1_TABLE_SH_S) 131*4cc87010SRuslan Bukin #define CR1_TABLE_SH_OS (0x2 << CR1_TABLE_SH_S) 132*4cc87010SRuslan Bukin #define CR1_TABLE_SH_IS (0x3 << CR1_TABLE_SH_S) 133*4cc87010SRuslan Bukin #define CR1_TABLE_OC_S 8 /* Table access Outer Cacheability. */ 134*4cc87010SRuslan Bukin #define CR1_TABLE_OC_M (0x3 << CR1_TABLE_OC_S) 135*4cc87010SRuslan Bukin #define CR1_TABLE_OC_NC (0x0 << CR1_TABLE_OC_S) 136*4cc87010SRuslan Bukin #define CR1_TABLE_OC_WBC (0x1 << CR1_TABLE_OC_S) 137*4cc87010SRuslan Bukin #define CR1_TABLE_OC_WTC (0x2 << CR1_TABLE_OC_S) 138*4cc87010SRuslan Bukin #define CR1_TABLE_IC_S 6 /* Table access Inner Cacheability. */ 139*4cc87010SRuslan Bukin #define CR1_TABLE_IC_M (0x3 << CR1_TABLE_IC_S) 140*4cc87010SRuslan Bukin #define CR1_TABLE_IC_NC (0x0 << CR1_TABLE_IC_S) 141*4cc87010SRuslan Bukin #define CR1_TABLE_IC_WBC (0x1 << CR1_TABLE_IC_S) 142*4cc87010SRuslan Bukin #define CR1_TABLE_IC_WTC (0x2 << CR1_TABLE_IC_S) 143*4cc87010SRuslan Bukin #define CR1_QUEUE_SH_S 4 /* Queue access Shareability. */ 144*4cc87010SRuslan Bukin #define CR1_QUEUE_SH_M (0x3 << CR1_QUEUE_SH_S) 145*4cc87010SRuslan Bukin #define CR1_QUEUE_SH_NS (0x0 << CR1_QUEUE_SH_S) 146*4cc87010SRuslan Bukin #define CR1_QUEUE_SH_OS (0x2 << CR1_QUEUE_SH_S) 147*4cc87010SRuslan Bukin #define CR1_QUEUE_SH_IS (0x3 << CR1_QUEUE_SH_S) 148*4cc87010SRuslan Bukin #define CR1_QUEUE_OC_S 2 /* Queue access Outer Cacheability. */ 149*4cc87010SRuslan Bukin #define CR1_QUEUE_OC_M (0x3 << CR1_QUEUE_OC_S) 150*4cc87010SRuslan Bukin #define CR1_QUEUE_OC_NC (0x0 << CR1_QUEUE_OC_S) 151*4cc87010SRuslan Bukin #define CR1_QUEUE_OC_WBC (0x1 << CR1_QUEUE_OC_S) 152*4cc87010SRuslan Bukin #define CR1_QUEUE_OC_WTC (0x2 << CR1_QUEUE_OC_S) 153*4cc87010SRuslan Bukin #define CR1_QUEUE_IC_S 0 /* Queue access Inner Cacheability. */ 154*4cc87010SRuslan Bukin #define CR1_QUEUE_IC_M (0x3 << CR1_QUEUE_IC_S) 155*4cc87010SRuslan Bukin #define CR1_QUEUE_IC_NC (0x0 << CR1_QUEUE_IC_S) 156*4cc87010SRuslan Bukin #define CR1_QUEUE_IC_WBC (0x1 << CR1_QUEUE_IC_S) 157*4cc87010SRuslan Bukin #define CR1_QUEUE_IC_WTC (0x2 << CR1_QUEUE_IC_S) 158*4cc87010SRuslan Bukin #define SMMU_CR2 0x02C 159*4cc87010SRuslan Bukin #define CR2_PTM (1 << 2) /* Private TLB Maintenance. */ 160*4cc87010SRuslan Bukin #define CR2_RECINVSID (1 << 1) /* Record invalid SID. */ 161*4cc87010SRuslan Bukin #define CR2_E2H (1 << 0) /* Enable EL2-E2H translation regime */ 162*4cc87010SRuslan Bukin #define SMMU_STATUSR 0x040 163*4cc87010SRuslan Bukin #define SMMU_GBPA 0x044 164*4cc87010SRuslan Bukin #define SMMU_AGBPA 0x048 165*4cc87010SRuslan Bukin #define SMMU_IRQ_CTRL 0x050 166*4cc87010SRuslan Bukin #define IRQ_CTRL_EVENTQ_IRQEN (1 << 2) /* NS Event queue interrupts enabled.*/ 167*4cc87010SRuslan Bukin #define IRQ_CTRL_PRIQ_IRQEN (1 << 1) /* PRI queue interrupts are enabled.*/ 168*4cc87010SRuslan Bukin #define IRQ_CTRL_GERROR_IRQEN (1 << 0) /* Global errors int are enabled. */ 169*4cc87010SRuslan Bukin #define SMMU_IRQ_CTRLACK 0x054 170*4cc87010SRuslan Bukin #define SMMU_GERROR 0x060 171*4cc87010SRuslan Bukin #define SMMU_GERRORN 0x064 172*4cc87010SRuslan Bukin #define SMMU_GERROR_IRQ_CFG0 0x068 173*4cc87010SRuslan Bukin #define SMMU_GERROR_IRQ_CFG1 0x070 174*4cc87010SRuslan Bukin #define SMMU_GERROR_IRQ_CFG2 0x074 175*4cc87010SRuslan Bukin #define SMMU_STRTAB_BASE 0x080 176*4cc87010SRuslan Bukin #define STRTAB_BASE_RA (1UL << 62) /* Read-Allocate. */ 177*4cc87010SRuslan Bukin #define STRTAB_BASE_ADDR_S 6 /* Physical address of Stream table base */ 178*4cc87010SRuslan Bukin #define STRTAB_BASE_ADDR_M (0x3fffffffffffUL << STRTAB_BASE_ADDR_S) 179*4cc87010SRuslan Bukin #define SMMU_STRTAB_BASE_CFG 0x088 180*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_FMT_S 16 /* Format of Stream table. */ 181*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_FMT_M (0x3 << STRTAB_BASE_CFG_FMT_S) 182*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_FMT_LINEAR (0x0 << STRTAB_BASE_CFG_FMT_S) 183*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_FMT_2LVL (0x1 << STRTAB_BASE_CFG_FMT_S) 184*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_SPLIT_S 6 /* SID split point for 2lvl table. */ 185*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_SPLIT_M (0x1f << STRTAB_BASE_CFG_SPLIT_S) 186*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_SPLIT_4KB (6 << STRTAB_BASE_CFG_SPLIT_S) 187*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_SPLIT_16KB (8 << STRTAB_BASE_CFG_SPLIT_S) 188*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_SPLIT_64KB (10 << STRTAB_BASE_CFG_SPLIT_S) 189*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_LOG2SIZE_S 0 /* Table size as log2(entries) */ 190*4cc87010SRuslan Bukin #define STRTAB_BASE_CFG_LOG2SIZE_M (0x3f << STRTAB_BASE_CFG_LOG2SIZE_S) 191*4cc87010SRuslan Bukin #define SMMU_CMDQ_BASE 0x090 192*4cc87010SRuslan Bukin #define CMDQ_BASE_RA (1UL << 62) /* Read-Allocate. */ 193*4cc87010SRuslan Bukin #define Q_BASE_ADDR_S 5 /* PA of queue base */ 194*4cc87010SRuslan Bukin #define Q_BASE_ADDR_M (0x7fffffffffff << Q_BASE_ADDR_S) 195*4cc87010SRuslan Bukin #define Q_LOG2SIZE_S 0 /* Queue size as log2(entries) */ 196*4cc87010SRuslan Bukin #define Q_LOG2SIZE_M (0x1f << Q_LOG2SIZE_S) 197*4cc87010SRuslan Bukin #define SMMU_CMDQ_PROD 0x098 198*4cc87010SRuslan Bukin #define SMMU_CMDQ_CONS 0x09C 199*4cc87010SRuslan Bukin #define CMDQ_CONS_ERR_S 24 200*4cc87010SRuslan Bukin #define CMDQ_CONS_ERR_M (0x7f << CMDQ_CONS_ERR_S) 201*4cc87010SRuslan Bukin #define SMMU_EVENTQ_BASE 0x0A0 202*4cc87010SRuslan Bukin #define EVENTQ_BASE_WA (1UL << 62) /* Write-Allocate. */ 203*4cc87010SRuslan Bukin #define SMMU_EVENTQ_PROD 0x100A8 204*4cc87010SRuslan Bukin #define SMMU_EVENTQ_CONS 0x100AC 205*4cc87010SRuslan Bukin #define SMMU_EVENTQ_IRQ_CFG0 0x0B0 206*4cc87010SRuslan Bukin #define SMMU_EVENTQ_IRQ_CFG1 0x0B8 207*4cc87010SRuslan Bukin #define SMMU_EVENTQ_IRQ_CFG2 0x0BC 208*4cc87010SRuslan Bukin #define SMMU_PRIQ_BASE 0x0C0 209*4cc87010SRuslan Bukin #define PRIQ_BASE_WA (1UL < 62) /* Write-Allocate. */ 210*4cc87010SRuslan Bukin #define SMMU_PRIQ_PROD 0x100C8 211*4cc87010SRuslan Bukin #define SMMU_PRIQ_CONS 0x100CC 212*4cc87010SRuslan Bukin #define SMMU_PRIQ_IRQ_CFG0 0x0D0 213*4cc87010SRuslan Bukin #define SMMU_PRIQ_IRQ_CFG1 0x0D8 214*4cc87010SRuslan Bukin #define SMMU_PRIQ_IRQ_CFG2 0x0DC 215*4cc87010SRuslan Bukin #define SMMU_GATOS_CTRL 0x100 216*4cc87010SRuslan Bukin #define SMMU_GATOS_SID 0x108 217*4cc87010SRuslan Bukin #define SMMU_GATOS_ADDR 0x110 218*4cc87010SRuslan Bukin #define SMMU_GATOS_PAR 0x118 219*4cc87010SRuslan Bukin #define SMMU_VATOS_SEL 0x180 220*4cc87010SRuslan Bukin #define SMMU_S_IDR0 0x8000 221*4cc87010SRuslan Bukin #define SMMU_S_IDR1 0x8004 222*4cc87010SRuslan Bukin #define SMMU_S_IDR2 0x8008 223*4cc87010SRuslan Bukin #define SMMU_S_IDR3 0x800C 224*4cc87010SRuslan Bukin #define SMMU_S_IDR4 0x8010 225*4cc87010SRuslan Bukin #define SMMU_S_CR0 0x8020 226*4cc87010SRuslan Bukin #define SMMU_S_CR0ACK 0x8024 227*4cc87010SRuslan Bukin #define SMMU_S_CR1 0x8028 228*4cc87010SRuslan Bukin #define SMMU_S_CR2 0x802C 229*4cc87010SRuslan Bukin #define SMMU_S_INIT 0x803C 230*4cc87010SRuslan Bukin #define SMMU_S_GBPA 0x8044 231*4cc87010SRuslan Bukin #define SMMU_S_AGBPA 0x8048 232*4cc87010SRuslan Bukin #define SMMU_S_IRQ_CTRL 0x8050 233*4cc87010SRuslan Bukin #define SMMU_S_IRQ_CTRLACK 0x8054 234*4cc87010SRuslan Bukin #define SMMU_S_GERROR 0x8060 235*4cc87010SRuslan Bukin #define SMMU_S_GERRORN 0x8064 236*4cc87010SRuslan Bukin #define SMMU_S_GERROR_IRQ_CFG0 0x8068 237*4cc87010SRuslan Bukin #define SMMU_S_GERROR_IRQ_CFG1 0x8070 238*4cc87010SRuslan Bukin #define SMMU_S_GERROR_IRQ_CFG2 0x8074 239*4cc87010SRuslan Bukin #define SMMU_S_STRTAB_BASE 0x8080 240*4cc87010SRuslan Bukin #define SMMU_S_STRTAB_BASE_CFG 0x8088 241*4cc87010SRuslan Bukin #define SMMU_S_CMDQ_BASE 0x8090 242*4cc87010SRuslan Bukin #define SMMU_S_CMDQ_PROD 0x8098 243*4cc87010SRuslan Bukin #define SMMU_S_CMDQ_CONS 0x809C 244*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_BASE 0x80A0 245*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_PROD 0x80A8 246*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_CONS 0x80AC 247*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_IRQ_CFG0 0x80B0 248*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_IRQ_CFG1 0x80B8 249*4cc87010SRuslan Bukin #define SMMU_S_EVENTQ_IRQ_CFG2 0x80BC 250*4cc87010SRuslan Bukin #define SMMU_S_GATOS_CTRL 0x8100 251*4cc87010SRuslan Bukin #define SMMU_S_GATOS_SID 0x8108 252*4cc87010SRuslan Bukin #define SMMU_S_GATOS_ADDR 0x8110 253*4cc87010SRuslan Bukin #define SMMU_S_GATOS_PAR 0x8118 254*4cc87010SRuslan Bukin 255*4cc87010SRuslan Bukin #define CMD_QUEUE_OPCODE_S 0 256*4cc87010SRuslan Bukin #define CMD_QUEUE_OPCODE_M (0xff << CMD_QUEUE_OPCODE_S) 257*4cc87010SRuslan Bukin 258*4cc87010SRuslan Bukin #define CMD_PREFETCH_CONFIG 0x01 259*4cc87010SRuslan Bukin #define PREFETCH_0_SID_S 32 260*4cc87010SRuslan Bukin #define CMD_PREFETCH_ADDR 0x02 261*4cc87010SRuslan Bukin #define CMD_CFGI_STE 0x03 262*4cc87010SRuslan Bukin #define CFGI_0_STE_SID_S 32 263*4cc87010SRuslan Bukin #define CMD_CFGI_STE_RANGE 0x04 264*4cc87010SRuslan Bukin #define CFGI_1_STE_RANGE_S 0 265*4cc87010SRuslan Bukin #define CMD_CFGI_CD 0x05 266*4cc87010SRuslan Bukin #define CFGI_0_SSID_S 12 267*4cc87010SRuslan Bukin #define CFGI_1_LEAF_S 0 268*4cc87010SRuslan Bukin #define CMD_CFGI_CD_ALL 0x06 269*4cc87010SRuslan Bukin #define CMD_TLBI_NH_ALL 0x10 270*4cc87010SRuslan Bukin #define CMD_TLBI_NH_ASID 0x11 271*4cc87010SRuslan Bukin #define CMD_TLBI_NH_VA 0x12 272*4cc87010SRuslan Bukin #define TLBI_0_ASID_S 48 273*4cc87010SRuslan Bukin #define TLBI_1_LEAF (1 << 0) 274*4cc87010SRuslan Bukin #define TLBI_1_ADDR_S 12 275*4cc87010SRuslan Bukin #define TLBI_1_ADDR_M (0xfffffffffffff << TLBI_1_ADDR_S) 276*4cc87010SRuslan Bukin #define CMD_TLBI_NH_VAA 0x13 277*4cc87010SRuslan Bukin #define CMD_TLBI_EL3_ALL 0x18 278*4cc87010SRuslan Bukin #define CMD_TLBI_EL3_VA 0x1A 279*4cc87010SRuslan Bukin #define CMD_TLBI_EL2_ALL 0x20 280*4cc87010SRuslan Bukin #define CMD_TLBI_EL2_ASID 0x21 281*4cc87010SRuslan Bukin #define CMD_TLBI_EL2_VA 0x22 282*4cc87010SRuslan Bukin #define CMD_TLBI_EL2_VAA 0x23 283*4cc87010SRuslan Bukin #define CMD_TLBI_S12_VMALL 0x28 284*4cc87010SRuslan Bukin #define CMD_TLBI_S2_IPA 0x2A 285*4cc87010SRuslan Bukin #define CMD_TLBI_NSNH_ALL 0x30 286*4cc87010SRuslan Bukin #define CMD_ATC_INV 0x40 287*4cc87010SRuslan Bukin #define CMD_PRI_RESP 0x41 288*4cc87010SRuslan Bukin #define CMD_RESUME 0x44 289*4cc87010SRuslan Bukin #define CMD_STALL_TERM 0x45 290*4cc87010SRuslan Bukin #define CMD_SYNC 0x46 291*4cc87010SRuslan Bukin #define SYNC_0_CS_S 12 /* The ComplSignal */ 292*4cc87010SRuslan Bukin #define SYNC_0_CS_M (0x3 << SYNC_0_CS_S) 293*4cc87010SRuslan Bukin #define SYNC_0_CS_SIG_NONE (0x0 << SYNC_0_CS_S) 294*4cc87010SRuslan Bukin #define SYNC_0_CS_SIG_IRQ (0x1 << SYNC_0_CS_S) 295*4cc87010SRuslan Bukin #define SYNC_0_CS_SIG_SEV (0x2 << SYNC_0_CS_S) 296*4cc87010SRuslan Bukin #define SYNC_0_MSH_S 22 /* Shareability attribute for MSI write */ 297*4cc87010SRuslan Bukin #define SYNC_0_MSH_M (0x3 << SYNC_0_MSH_S) 298*4cc87010SRuslan Bukin #define SYNC_0_MSH_NS (0x0 << SYNC_0_MSH_S) /* Non-shareable */ 299*4cc87010SRuslan Bukin #define SYNC_0_MSH_OS (0x2 << SYNC_0_MSH_S) /* Outer Shareable */ 300*4cc87010SRuslan Bukin #define SYNC_0_MSH_IS (0x3 << SYNC_0_MSH_S) /* Inner Shareable */ 301*4cc87010SRuslan Bukin #define SYNC_0_MSIATTR_S 24 /* Write attribute for MSI */ 302*4cc87010SRuslan Bukin #define SYNC_0_MSIATTR_M (0xf << SYNC_0_MSIATTR_S) 303*4cc87010SRuslan Bukin #define SYNC_0_MSIATTR_OIWB (0xf << SYNC_0_MSIATTR_S) 304*4cc87010SRuslan Bukin #define SYNC_0_MSIDATA_S 32 305*4cc87010SRuslan Bukin #define SYNC_1_MSIADDRESS_S 2 306*4cc87010SRuslan Bukin #define SYNC_1_MSIADDRESS_M (0x3ffffffffffff << SYNC_1_MSIADDRESS_S) 307*4cc87010SRuslan Bukin #define STE0_VALID (1 << 0) /* Structure contents are valid. */ 308*4cc87010SRuslan Bukin #define STE0_CONFIG_S 1 309*4cc87010SRuslan Bukin #define STE0_CONFIG_M (0x7 << STE0_CONFIG_S) 310*4cc87010SRuslan Bukin #define STE0_CONFIG_ABORT (0x0 << STE0_CONFIG_S) 311*4cc87010SRuslan Bukin #define STE0_CONFIG_BYPASS (0x4 << STE0_CONFIG_S) 312*4cc87010SRuslan Bukin #define STE0_CONFIG_S1_TRANS (0x5 << STE0_CONFIG_S) 313*4cc87010SRuslan Bukin #define STE0_CONFIG_S2_TRANS (0x6 << STE0_CONFIG_S) 314*4cc87010SRuslan Bukin #define STE0_CONFIG_ALL_TRANS (0x7 << STE0_CONFIG_S) 315*4cc87010SRuslan Bukin #define STE0_S1FMT_S 4 316*4cc87010SRuslan Bukin #define STE0_S1FMT_M (0x3 << STE0_S1FMT_S) 317*4cc87010SRuslan Bukin #define STE0_S1FMT_LINEAR (0x0 << STE0_S1FMT_S) 318*4cc87010SRuslan Bukin #define STE0_S1FMT_4KB_L2 (0x1 << STE0_S1FMT_S) 319*4cc87010SRuslan Bukin #define STE0_S1FMT_64KB_L2 (0x2 << STE0_S1FMT_S) 320*4cc87010SRuslan Bukin #define STE0_S1CONTEXTPTR_S 6 321*4cc87010SRuslan Bukin #define STE0_S1CONTEXTPTR_M (0x3fffffffffff << STE0_S1CONTEXTPTR_S) 322*4cc87010SRuslan Bukin #define STE0_S1CDMAX_S 59 323*4cc87010SRuslan Bukin #define STE0_S1CDMAX_M (0x1f << STE0_S1CDMAX_S) 324*4cc87010SRuslan Bukin 325*4cc87010SRuslan Bukin #define STE1_S1DSS_S 0 326*4cc87010SRuslan Bukin #define STE1_S1DSS_M (0x3 << STE1_S1DSS_S) 327*4cc87010SRuslan Bukin #define STE1_S1DSS_TERMINATE (0x0 << STE1_S1DSS_S) 328*4cc87010SRuslan Bukin #define STE1_S1DSS_BYPASS (0x1 << STE1_S1DSS_S) 329*4cc87010SRuslan Bukin #define STE1_S1DSS_SUBSTREAM0 (0x2 << STE1_S1DSS_S) 330*4cc87010SRuslan Bukin #define STE1_S1CIR_S 2 331*4cc87010SRuslan Bukin #define STE1_S1CIR_M (0x3 << STE1_S1CIR_S) 332*4cc87010SRuslan Bukin #define STE1_S1CIR_NC (0x0 << STE1_S1CIR_S) 333*4cc87010SRuslan Bukin #define STE1_S1CIR_WBRA (0x1 << STE1_S1CIR_S) 334*4cc87010SRuslan Bukin #define STE1_S1CIR_WT (0x2 << STE1_S1CIR_S) 335*4cc87010SRuslan Bukin #define STE1_S1CIR_WB (0x3 << STE1_S1CIR_S) 336*4cc87010SRuslan Bukin #define STE1_S1COR_S 4 337*4cc87010SRuslan Bukin #define STE1_S1COR_M (0x3 << STE1_S1COR_S) 338*4cc87010SRuslan Bukin #define STE1_S1COR_NC (0x0 << STE1_S1COR_S) 339*4cc87010SRuslan Bukin #define STE1_S1COR_WBRA (0x1 << STE1_S1COR_S) 340*4cc87010SRuslan Bukin #define STE1_S1COR_WT (0x2 << STE1_S1COR_S) 341*4cc87010SRuslan Bukin #define STE1_S1COR_WB (0x3 << STE1_S1COR_S) 342*4cc87010SRuslan Bukin #define STE1_S1CSH_S 6 343*4cc87010SRuslan Bukin #define STE1_S1CSH_NS (0x0 << STE1_S1CSH_S) 344*4cc87010SRuslan Bukin #define STE1_S1CSH_OS (0x2 << STE1_S1CSH_S) 345*4cc87010SRuslan Bukin #define STE1_S1CSH_IS (0x3 << STE1_S1CSH_S) 346*4cc87010SRuslan Bukin #define STE1_S2HWU59 (1 << 8) 347*4cc87010SRuslan Bukin #define STE1_S2HWU60 (1 << 9) 348*4cc87010SRuslan Bukin #define STE1_S2HWU61 (1 << 10) 349*4cc87010SRuslan Bukin #define STE1_S2HWU62 (1 << 11) 350*4cc87010SRuslan Bukin #define STE1_DRE (1 << 12) /* Destructive Read Enable. */ 351*4cc87010SRuslan Bukin #define STE1_CONT_S 13 /* Contiguous Hint */ 352*4cc87010SRuslan Bukin #define STE1_CONT_M (0xf << STE1_CONT_S) 353*4cc87010SRuslan Bukin #define STE1_DCP (1 << 17) /* Directed Cache Prefetch. */ 354*4cc87010SRuslan Bukin #define STE1_PPAR (1 << 18) /* PRI Page request Auto Responses */ 355*4cc87010SRuslan Bukin #define STE1_MEV (1 << 19) /* Merge Events */ 356*4cc87010SRuslan Bukin #define STE1_S1STALLD (1 << 27) /* Stage 1 Stall Disable */ 357*4cc87010SRuslan Bukin #define STE1_EATS_S 28 /* Enable PCIe ATS translation and traffic */ 358*4cc87010SRuslan Bukin #define STE1_EATS_M (0x3 << STE1_EATS_S) 359*4cc87010SRuslan Bukin #define STE1_EATS_ABORT (0x0 << STE1_EATS_S) 360*4cc87010SRuslan Bukin #define STE1_EATS_FULLATS (0x1 << STE1_EATS_S) /* Full ATS */ 361*4cc87010SRuslan Bukin #define STE1_EATS_S1 (0x2 << STE1_EATS_S) /* Split-stage ATS */ 362*4cc87010SRuslan Bukin #define STE1_STRW_S 30 /* StreamWorld control */ 363*4cc87010SRuslan Bukin #define STE1_STRW_M (0x3 << STE1_STRW_S) 364*4cc87010SRuslan Bukin #define STE1_STRW_NS_EL1 (0x0 << STE1_STRW_S) 365*4cc87010SRuslan Bukin #define STE1_STRW_NS_EL2 (0x2 << STE1_STRW_S) 366*4cc87010SRuslan Bukin #define STE1_MEMATTR_S 32 367*4cc87010SRuslan Bukin #define STE1_MTCFG (1 << 36) 368*4cc87010SRuslan Bukin #define STE1_ALLOCCFG_S 37 369*4cc87010SRuslan Bukin #define STE1_SHCFG_S 44 370*4cc87010SRuslan Bukin #define STE1_SHCFG_M (0x3UL << STE1_SHCFG_S) 371*4cc87010SRuslan Bukin #define STE1_SHCFG_NS (0x0UL << STE1_SHCFG_S) 372*4cc87010SRuslan Bukin #define STE1_SHCFG_INCOMING (0x1UL << STE1_SHCFG_S) 373*4cc87010SRuslan Bukin #define STE1_SHCFG_OS (0x2UL << STE1_SHCFG_S) 374*4cc87010SRuslan Bukin #define STE1_SHCFG_IS (0x3UL << STE1_SHCFG_S) 375*4cc87010SRuslan Bukin #define STE1_NSCFG_S 46 376*4cc87010SRuslan Bukin #define STE1_NSCFG_M (0x3UL << STE1_NSCFG_S) 377*4cc87010SRuslan Bukin #define STE1_NSCFG_SECURE (0x2UL << STE1_NSCFG_S) 378*4cc87010SRuslan Bukin #define STE1_NSCFG_NONSECURE (0x3UL << STE1_NSCFG_S) 379*4cc87010SRuslan Bukin #define STE1_PRIVCFG_S 48 380*4cc87010SRuslan Bukin #define STE1_INSTCFG_S 50 381*4cc87010SRuslan Bukin 382*4cc87010SRuslan Bukin #define STE2_S2VMID_S 0 383*4cc87010SRuslan Bukin #define STE2_S2VMID_M (0xffff << STE2_S2VMID_S) 384*4cc87010SRuslan Bukin #define STE2_S2T0SZ_S 32 /* Size of IPA input region */ 385*4cc87010SRuslan Bukin #define STE2_S2T0SZ_M (0x3f << STE2_S2T0SZ_S) 386*4cc87010SRuslan Bukin #define STE2_S2SL0_S 38 /* Starting level of stage 2 tt walk */ 387*4cc87010SRuslan Bukin #define STE2_S2SL0_M (0x3 << STE2_S2SL0_S) 388*4cc87010SRuslan Bukin #define STE2_S2IR0_S 40 389*4cc87010SRuslan Bukin #define STE2_S2IR0_M (0x3 << STE2_S2IR0_S) 390*4cc87010SRuslan Bukin #define STE2_S2OR0_S 42 391*4cc87010SRuslan Bukin #define STE2_S2OR0_M (0x3 << STE2_S2OR0_S) 392*4cc87010SRuslan Bukin #define STE2_S2SH0_S 44 393*4cc87010SRuslan Bukin #define STE2_S2SH0_M (0x3 << STE2_S2SH0_S) 394*4cc87010SRuslan Bukin #define STE2_S2TG_S 46 395*4cc87010SRuslan Bukin #define STE2_S2TG_M (0x3 << STE2_S2TG_S) 396*4cc87010SRuslan Bukin #define STE2_S2PS_S 48 /* Physical address Size */ 397*4cc87010SRuslan Bukin #define STE2_S2PS_M (0x7 << STE2_S2PS_S) 398*4cc87010SRuslan Bukin #define STE2_S2AA64 (1 << 51) /* Stage 2 tt is AArch64 */ 399*4cc87010SRuslan Bukin #define STE2_S2ENDI (1 << 52) /* Stage 2 tt endianness */ 400*4cc87010SRuslan Bukin #define STE2_S2AFFD (1 << 53) /* Stage 2 Access Flag Fault Disable*/ 401*4cc87010SRuslan Bukin #define STE2_S2PTW (1 << 54) /* Protected Table Walk */ 402*4cc87010SRuslan Bukin #define STE2_S2S (1 << 57) 403*4cc87010SRuslan Bukin #define STE2_S2R (1 << 58) 404*4cc87010SRuslan Bukin 405*4cc87010SRuslan Bukin #define STE3_S2TTB_S 4 /* Address of Translation Table base */ 406*4cc87010SRuslan Bukin #define STE3_S2TTB_M (0xffffffffffff << STE3_S2TTB_S) 407*4cc87010SRuslan Bukin 408*4cc87010SRuslan Bukin #define CD0_T0SZ_S 0 /* VA region size covered by TT0. */ 409*4cc87010SRuslan Bukin #define CD0_T0SZ_M (0x3f << CD0_T0SZ_S) 410*4cc87010SRuslan Bukin #define CD0_TG0_S 6 /* TT0 Translation Granule size */ 411*4cc87010SRuslan Bukin #define CD0_TG0_M (0x3 << CD0_TG0_S) 412*4cc87010SRuslan Bukin #define CD0_TG0_4KB (0x0 << CD0_TG0_S) 413*4cc87010SRuslan Bukin #define CD0_TG0_64KB (0x1 << CD0_TG0_S) 414*4cc87010SRuslan Bukin #define CD0_TG0_16KB (0x2 << CD0_TG0_S) 415*4cc87010SRuslan Bukin #define CD0_IR0_S 8 /* Inner region Cacheability for TT0 access*/ 416*4cc87010SRuslan Bukin #define CD0_IR0_M (0x3 << CD0_IR0_S) 417*4cc87010SRuslan Bukin #define CD0_IR0_NC (0x0 << CD0_IR0_S) 418*4cc87010SRuslan Bukin #define CD0_IR0_WBC_RWA (0x1 << CD0_IR0_S) 419*4cc87010SRuslan Bukin #define CD0_IR0_WTC_RA (0x2 << CD0_IR0_S) 420*4cc87010SRuslan Bukin #define CD0_IR0_WBC_RA (0x3 << CD0_IR0_S) 421*4cc87010SRuslan Bukin #define CD0_OR0_S 10 /* Outer region Cacheability for TT0 access*/ 422*4cc87010SRuslan Bukin #define CD0_OR0_M (0x3 << CD0_OR0_S) 423*4cc87010SRuslan Bukin #define CD0_OR0_NC (0x0 << CD0_OR0_S) 424*4cc87010SRuslan Bukin #define CD0_OR0_WBC_RWA (0x1 << CD0_OR0_S) 425*4cc87010SRuslan Bukin #define CD0_OR0_WTC_RA (0x2 << CD0_OR0_S) 426*4cc87010SRuslan Bukin #define CD0_OR0_WBC_RA (0x3 << CD0_OR0_S) 427*4cc87010SRuslan Bukin #define CD0_SH0_S 12 /* Shareability for TT0 access */ 428*4cc87010SRuslan Bukin #define CD0_SH0_M (0x3 << CD0_SH0_S) 429*4cc87010SRuslan Bukin #define CD0_SH0_NS (0x0 << CD0_SH0_S) 430*4cc87010SRuslan Bukin #define CD0_SH0_OS (0x2 << CD0_SH0_S) /* Outer Shareable */ 431*4cc87010SRuslan Bukin #define CD0_SH0_IS (0x3 << CD0_SH0_S) /* Inner Shareable */ 432*4cc87010SRuslan Bukin #define CD0_EPD0 (1 << 14) /* TT0 walk disable */ 433*4cc87010SRuslan Bukin #define CD0_ENDI (1 << 15) /* Big Endian */ 434*4cc87010SRuslan Bukin #define CD0_T1SZ_S 16 /* VA region size covered by TT1 */ 435*4cc87010SRuslan Bukin #define CD0_T1SZ_M (0x3f << CD0_T1SZ_S) 436*4cc87010SRuslan Bukin #define CD0_TG1_S 22 /* TT1 Translation Granule size */ 437*4cc87010SRuslan Bukin #define CD0_TG1_M (0x3 << CD0_TG1_S) 438*4cc87010SRuslan Bukin #define CD0_TG1_4KB (0x2 << CD0_TG1_S) 439*4cc87010SRuslan Bukin #define CD0_TG1_64KB (0x3 << CD0_TG1_S) 440*4cc87010SRuslan Bukin #define CD0_TG1_16KB (0x1 << CD0_TG1_S) 441*4cc87010SRuslan Bukin #define CD0_IR1_S 24 /* Inner region Cacheability for TT1 access*/ 442*4cc87010SRuslan Bukin #define CD0_IR1_M (0x3 << CD0_IR1_S) 443*4cc87010SRuslan Bukin #define CD0_OR1_S 26 444*4cc87010SRuslan Bukin #define CD0_OR1_M (0x3 << CD0_OR1_S) 445*4cc87010SRuslan Bukin #define CD0_SH1_S 28 446*4cc87010SRuslan Bukin #define CD0_SH1_M (0x3 << CD0_SH1_S) 447*4cc87010SRuslan Bukin #define CD0_EPD1 (1UL << 30) /* TT1 tt walk disable*/ 448*4cc87010SRuslan Bukin #define CD0_VALID (1UL << 31) /* CD Valid. */ 449*4cc87010SRuslan Bukin #define CD0_IPS_S 32 /* Intermediate Physical Size */ 450*4cc87010SRuslan Bukin #define CD0_IPS_M (0x7UL << CD0_IPS_S) 451*4cc87010SRuslan Bukin #define CD0_IPS_32BITS (0x0UL << CD0_IPS_S) 452*4cc87010SRuslan Bukin #define CD0_IPS_36BITS (0x1UL << CD0_IPS_S) 453*4cc87010SRuslan Bukin #define CD0_IPS_40BITS (0x2UL << CD0_IPS_S) 454*4cc87010SRuslan Bukin #define CD0_IPS_42BITS (0x3UL << CD0_IPS_S) 455*4cc87010SRuslan Bukin #define CD0_IPS_44BITS (0x4UL << CD0_IPS_S) 456*4cc87010SRuslan Bukin #define CD0_IPS_48BITS (0x5UL << CD0_IPS_S) 457*4cc87010SRuslan Bukin #define CD0_IPS_52BITS (0x6UL << CD0_IPS_S) /* SMMUv3.1 only */ 458*4cc87010SRuslan Bukin #define CD0_AFFD (1UL << 35) /* Access Flag Fault Disable */ 459*4cc87010SRuslan Bukin #define CD0_WXN (1UL << 36) /* Write eXecute Never */ 460*4cc87010SRuslan Bukin #define CD0_UWXN (1UL << 37) /* Unprivileged Write eXecut Never*/ 461*4cc87010SRuslan Bukin #define CD0_TBI0 (1UL << 38) /* Top Byte Ignore for TTB0 */ 462*4cc87010SRuslan Bukin #define CD0_TBI1 (1UL << 39) /* Top Byte Ignore for TTB1 */ 463*4cc87010SRuslan Bukin #define CD0_PAN (1UL << 40) /* Privileged Access Never */ 464*4cc87010SRuslan Bukin #define CD0_AA64 (1UL << 41) /* TTB{0,1} is AArch64-format TT */ 465*4cc87010SRuslan Bukin #define CD0_HD (1UL << 42) 466*4cc87010SRuslan Bukin #define CD0_HA (1UL << 43) 467*4cc87010SRuslan Bukin #define CD0_S (1UL << 44) 468*4cc87010SRuslan Bukin #define CD0_R (1UL << 45) 469*4cc87010SRuslan Bukin #define CD0_A (1UL << 46) 470*4cc87010SRuslan Bukin #define CD0_ASET (1UL << 47) /* ASID Set. */ 471*4cc87010SRuslan Bukin #define CD0_ASID_S 48 /* Address Space Identifier */ 472*4cc87010SRuslan Bukin #define CD0_ASID_M (0xffff << CD0_ASID_S) 473*4cc87010SRuslan Bukin #define CD1_TTB0_S 4 /* Address of TT0 base. */ 474*4cc87010SRuslan Bukin #define CD1_TTB0_M (0xffffffffffff << CD1_TTB0_S) 475*4cc87010SRuslan Bukin 476*4cc87010SRuslan Bukin #endif /* _ARM64_IOMMU_SMMUREG_H_ */ 477