xref: /freebsd/sys/arm64/iommu/smmureg.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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