]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/iommu/arm-smmu-v3.c
Revert "iommu/arm-smmu: Set PRIVCFG in stage 1 STEs"
[linux.git] / drivers / iommu / arm-smmu-v3.c
1 /*
2  * IOMMU API for ARM architected SMMUv3 implementations.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Copyright (C) 2015 ARM Limited
17  *
18  * Author: Will Deacon <will.deacon@arm.com>
19  *
20  * This driver is powered by bad coffee and bombay mix.
21  */
22
23 #include <linux/acpi.h>
24 #include <linux/acpi_iort.h>
25 #include <linux/delay.h>
26 #include <linux/dma-iommu.h>
27 #include <linux/err.h>
28 #include <linux/interrupt.h>
29 #include <linux/iommu.h>
30 #include <linux/iopoll.h>
31 #include <linux/module.h>
32 #include <linux/msi.h>
33 #include <linux/of.h>
34 #include <linux/of_address.h>
35 #include <linux/of_iommu.h>
36 #include <linux/of_platform.h>
37 #include <linux/pci.h>
38 #include <linux/platform_device.h>
39
40 #include <linux/amba/bus.h>
41
42 #include "io-pgtable.h"
43
44 /* MMIO registers */
45 #define ARM_SMMU_IDR0                   0x0
46 #define IDR0_ST_LVL_SHIFT               27
47 #define IDR0_ST_LVL_MASK                0x3
48 #define IDR0_ST_LVL_2LVL                (1 << IDR0_ST_LVL_SHIFT)
49 #define IDR0_STALL_MODEL_SHIFT          24
50 #define IDR0_STALL_MODEL_MASK           0x3
51 #define IDR0_STALL_MODEL_STALL          (0 << IDR0_STALL_MODEL_SHIFT)
52 #define IDR0_STALL_MODEL_FORCE          (2 << IDR0_STALL_MODEL_SHIFT)
53 #define IDR0_TTENDIAN_SHIFT             21
54 #define IDR0_TTENDIAN_MASK              0x3
55 #define IDR0_TTENDIAN_LE                (2 << IDR0_TTENDIAN_SHIFT)
56 #define IDR0_TTENDIAN_BE                (3 << IDR0_TTENDIAN_SHIFT)
57 #define IDR0_TTENDIAN_MIXED             (0 << IDR0_TTENDIAN_SHIFT)
58 #define IDR0_CD2L                       (1 << 19)
59 #define IDR0_VMID16                     (1 << 18)
60 #define IDR0_PRI                        (1 << 16)
61 #define IDR0_SEV                        (1 << 14)
62 #define IDR0_MSI                        (1 << 13)
63 #define IDR0_ASID16                     (1 << 12)
64 #define IDR0_ATS                        (1 << 10)
65 #define IDR0_HYP                        (1 << 9)
66 #define IDR0_COHACC                     (1 << 4)
67 #define IDR0_TTF_SHIFT                  2
68 #define IDR0_TTF_MASK                   0x3
69 #define IDR0_TTF_AARCH64                (2 << IDR0_TTF_SHIFT)
70 #define IDR0_TTF_AARCH32_64             (3 << IDR0_TTF_SHIFT)
71 #define IDR0_S1P                        (1 << 1)
72 #define IDR0_S2P                        (1 << 0)
73
74 #define ARM_SMMU_IDR1                   0x4
75 #define IDR1_TABLES_PRESET              (1 << 30)
76 #define IDR1_QUEUES_PRESET              (1 << 29)
77 #define IDR1_REL                        (1 << 28)
78 #define IDR1_CMDQ_SHIFT                 21
79 #define IDR1_CMDQ_MASK                  0x1f
80 #define IDR1_EVTQ_SHIFT                 16
81 #define IDR1_EVTQ_MASK                  0x1f
82 #define IDR1_PRIQ_SHIFT                 11
83 #define IDR1_PRIQ_MASK                  0x1f
84 #define IDR1_SSID_SHIFT                 6
85 #define IDR1_SSID_MASK                  0x1f
86 #define IDR1_SID_SHIFT                  0
87 #define IDR1_SID_MASK                   0x3f
88
89 #define ARM_SMMU_IDR5                   0x14
90 #define IDR5_STALL_MAX_SHIFT            16
91 #define IDR5_STALL_MAX_MASK             0xffff
92 #define IDR5_GRAN64K                    (1 << 6)
93 #define IDR5_GRAN16K                    (1 << 5)
94 #define IDR5_GRAN4K                     (1 << 4)
95 #define IDR5_OAS_SHIFT                  0
96 #define IDR5_OAS_MASK                   0x7
97 #define IDR5_OAS_32_BIT                 (0 << IDR5_OAS_SHIFT)
98 #define IDR5_OAS_36_BIT                 (1 << IDR5_OAS_SHIFT)
99 #define IDR5_OAS_40_BIT                 (2 << IDR5_OAS_SHIFT)
100 #define IDR5_OAS_42_BIT                 (3 << IDR5_OAS_SHIFT)
101 #define IDR5_OAS_44_BIT                 (4 << IDR5_OAS_SHIFT)
102 #define IDR5_OAS_48_BIT                 (5 << IDR5_OAS_SHIFT)
103
104 #define ARM_SMMU_CR0                    0x20
105 #define CR0_CMDQEN                      (1 << 3)
106 #define CR0_EVTQEN                      (1 << 2)
107 #define CR0_PRIQEN                      (1 << 1)
108 #define CR0_SMMUEN                      (1 << 0)
109
110 #define ARM_SMMU_CR0ACK                 0x24
111
112 #define ARM_SMMU_CR1                    0x28
113 #define CR1_SH_NSH                      0
114 #define CR1_SH_OSH                      2
115 #define CR1_SH_ISH                      3
116 #define CR1_CACHE_NC                    0
117 #define CR1_CACHE_WB                    1
118 #define CR1_CACHE_WT                    2
119 #define CR1_TABLE_SH_SHIFT              10
120 #define CR1_TABLE_OC_SHIFT              8
121 #define CR1_TABLE_IC_SHIFT              6
122 #define CR1_QUEUE_SH_SHIFT              4
123 #define CR1_QUEUE_OC_SHIFT              2
124 #define CR1_QUEUE_IC_SHIFT              0
125
126 #define ARM_SMMU_CR2                    0x2c
127 #define CR2_PTM                         (1 << 2)
128 #define CR2_RECINVSID                   (1 << 1)
129 #define CR2_E2H                         (1 << 0)
130
131 #define ARM_SMMU_GBPA                   0x44
132 #define GBPA_ABORT                      (1 << 20)
133 #define GBPA_UPDATE                     (1 << 31)
134
135 #define ARM_SMMU_IRQ_CTRL               0x50
136 #define IRQ_CTRL_EVTQ_IRQEN             (1 << 2)
137 #define IRQ_CTRL_PRIQ_IRQEN             (1 << 1)
138 #define IRQ_CTRL_GERROR_IRQEN           (1 << 0)
139
140 #define ARM_SMMU_IRQ_CTRLACK            0x54
141
142 #define ARM_SMMU_GERROR                 0x60
143 #define GERROR_SFM_ERR                  (1 << 8)
144 #define GERROR_MSI_GERROR_ABT_ERR       (1 << 7)
145 #define GERROR_MSI_PRIQ_ABT_ERR         (1 << 6)
146 #define GERROR_MSI_EVTQ_ABT_ERR         (1 << 5)
147 #define GERROR_MSI_CMDQ_ABT_ERR         (1 << 4)
148 #define GERROR_PRIQ_ABT_ERR             (1 << 3)
149 #define GERROR_EVTQ_ABT_ERR             (1 << 2)
150 #define GERROR_CMDQ_ERR                 (1 << 0)
151 #define GERROR_ERR_MASK                 0xfd
152
153 #define ARM_SMMU_GERRORN                0x64
154
155 #define ARM_SMMU_GERROR_IRQ_CFG0        0x68
156 #define ARM_SMMU_GERROR_IRQ_CFG1        0x70
157 #define ARM_SMMU_GERROR_IRQ_CFG2        0x74
158
159 #define ARM_SMMU_STRTAB_BASE            0x80
160 #define STRTAB_BASE_RA                  (1UL << 62)
161 #define STRTAB_BASE_ADDR_SHIFT          6
162 #define STRTAB_BASE_ADDR_MASK           0x3ffffffffffUL
163
164 #define ARM_SMMU_STRTAB_BASE_CFG        0x88
165 #define STRTAB_BASE_CFG_LOG2SIZE_SHIFT  0
166 #define STRTAB_BASE_CFG_LOG2SIZE_MASK   0x3f
167 #define STRTAB_BASE_CFG_SPLIT_SHIFT     6
168 #define STRTAB_BASE_CFG_SPLIT_MASK      0x1f
169 #define STRTAB_BASE_CFG_FMT_SHIFT       16
170 #define STRTAB_BASE_CFG_FMT_MASK        0x3
171 #define STRTAB_BASE_CFG_FMT_LINEAR      (0 << STRTAB_BASE_CFG_FMT_SHIFT)
172 #define STRTAB_BASE_CFG_FMT_2LVL        (1 << STRTAB_BASE_CFG_FMT_SHIFT)
173
174 #define ARM_SMMU_CMDQ_BASE              0x90
175 #define ARM_SMMU_CMDQ_PROD              0x98
176 #define ARM_SMMU_CMDQ_CONS              0x9c
177
178 #define ARM_SMMU_EVTQ_BASE              0xa0
179 #define ARM_SMMU_EVTQ_PROD              0x100a8
180 #define ARM_SMMU_EVTQ_CONS              0x100ac
181 #define ARM_SMMU_EVTQ_IRQ_CFG0          0xb0
182 #define ARM_SMMU_EVTQ_IRQ_CFG1          0xb8
183 #define ARM_SMMU_EVTQ_IRQ_CFG2          0xbc
184
185 #define ARM_SMMU_PRIQ_BASE              0xc0
186 #define ARM_SMMU_PRIQ_PROD              0x100c8
187 #define ARM_SMMU_PRIQ_CONS              0x100cc
188 #define ARM_SMMU_PRIQ_IRQ_CFG0          0xd0
189 #define ARM_SMMU_PRIQ_IRQ_CFG1          0xd8
190 #define ARM_SMMU_PRIQ_IRQ_CFG2          0xdc
191
192 /* Common MSI config fields */
193 #define MSI_CFG0_ADDR_SHIFT             2
194 #define MSI_CFG0_ADDR_MASK              0x3fffffffffffUL
195 #define MSI_CFG2_SH_SHIFT               4
196 #define MSI_CFG2_SH_NSH                 (0UL << MSI_CFG2_SH_SHIFT)
197 #define MSI_CFG2_SH_OSH                 (2UL << MSI_CFG2_SH_SHIFT)
198 #define MSI_CFG2_SH_ISH                 (3UL << MSI_CFG2_SH_SHIFT)
199 #define MSI_CFG2_MEMATTR_SHIFT          0
200 #define MSI_CFG2_MEMATTR_DEVICE_nGnRE   (0x1 << MSI_CFG2_MEMATTR_SHIFT)
201
202 #define Q_IDX(q, p)                     ((p) & ((1 << (q)->max_n_shift) - 1))
203 #define Q_WRP(q, p)                     ((p) & (1 << (q)->max_n_shift))
204 #define Q_OVERFLOW_FLAG                 (1 << 31)
205 #define Q_OVF(q, p)                     ((p) & Q_OVERFLOW_FLAG)
206 #define Q_ENT(q, p)                     ((q)->base +                    \
207                                          Q_IDX(q, p) * (q)->ent_dwords)
208
209 #define Q_BASE_RWA                      (1UL << 62)
210 #define Q_BASE_ADDR_SHIFT               5
211 #define Q_BASE_ADDR_MASK                0xfffffffffffUL
212 #define Q_BASE_LOG2SIZE_SHIFT           0
213 #define Q_BASE_LOG2SIZE_MASK            0x1fUL
214
215 /*
216  * Stream table.
217  *
218  * Linear: Enough to cover 1 << IDR1.SIDSIZE entries
219  * 2lvl: 128k L1 entries,
220  *       256 lazy entries per table (each table covers a PCI bus)
221  */
222 #define STRTAB_L1_SZ_SHIFT              20
223 #define STRTAB_SPLIT                    8
224
225 #define STRTAB_L1_DESC_DWORDS           1
226 #define STRTAB_L1_DESC_SPAN_SHIFT       0
227 #define STRTAB_L1_DESC_SPAN_MASK        0x1fUL
228 #define STRTAB_L1_DESC_L2PTR_SHIFT      6
229 #define STRTAB_L1_DESC_L2PTR_MASK       0x3ffffffffffUL
230
231 #define STRTAB_STE_DWORDS               8
232 #define STRTAB_STE_0_V                  (1UL << 0)
233 #define STRTAB_STE_0_CFG_SHIFT          1
234 #define STRTAB_STE_0_CFG_MASK           0x7UL
235 #define STRTAB_STE_0_CFG_ABORT          (0UL << STRTAB_STE_0_CFG_SHIFT)
236 #define STRTAB_STE_0_CFG_BYPASS         (4UL << STRTAB_STE_0_CFG_SHIFT)
237 #define STRTAB_STE_0_CFG_S1_TRANS       (5UL << STRTAB_STE_0_CFG_SHIFT)
238 #define STRTAB_STE_0_CFG_S2_TRANS       (6UL << STRTAB_STE_0_CFG_SHIFT)
239
240 #define STRTAB_STE_0_S1FMT_SHIFT        4
241 #define STRTAB_STE_0_S1FMT_LINEAR       (0UL << STRTAB_STE_0_S1FMT_SHIFT)
242 #define STRTAB_STE_0_S1CTXPTR_SHIFT     6
243 #define STRTAB_STE_0_S1CTXPTR_MASK      0x3ffffffffffUL
244 #define STRTAB_STE_0_S1CDMAX_SHIFT      59
245 #define STRTAB_STE_0_S1CDMAX_MASK       0x1fUL
246
247 #define STRTAB_STE_1_S1C_CACHE_NC       0UL
248 #define STRTAB_STE_1_S1C_CACHE_WBRA     1UL
249 #define STRTAB_STE_1_S1C_CACHE_WT       2UL
250 #define STRTAB_STE_1_S1C_CACHE_WB       3UL
251 #define STRTAB_STE_1_S1C_SH_NSH         0UL
252 #define STRTAB_STE_1_S1C_SH_OSH         2UL
253 #define STRTAB_STE_1_S1C_SH_ISH         3UL
254 #define STRTAB_STE_1_S1CIR_SHIFT        2
255 #define STRTAB_STE_1_S1COR_SHIFT        4
256 #define STRTAB_STE_1_S1CSH_SHIFT        6
257
258 #define STRTAB_STE_1_S1STALLD           (1UL << 27)
259
260 #define STRTAB_STE_1_EATS_ABT           0UL
261 #define STRTAB_STE_1_EATS_TRANS         1UL
262 #define STRTAB_STE_1_EATS_S1CHK         2UL
263 #define STRTAB_STE_1_EATS_SHIFT         28
264
265 #define STRTAB_STE_1_STRW_NSEL1         0UL
266 #define STRTAB_STE_1_STRW_EL2           2UL
267 #define STRTAB_STE_1_STRW_SHIFT         30
268
269 #define STRTAB_STE_1_SHCFG_INCOMING     1UL
270 #define STRTAB_STE_1_SHCFG_SHIFT        44
271
272 #define STRTAB_STE_2_S2VMID_SHIFT       0
273 #define STRTAB_STE_2_S2VMID_MASK        0xffffUL
274 #define STRTAB_STE_2_VTCR_SHIFT         32
275 #define STRTAB_STE_2_VTCR_MASK          0x7ffffUL
276 #define STRTAB_STE_2_S2AA64             (1UL << 51)
277 #define STRTAB_STE_2_S2ENDI             (1UL << 52)
278 #define STRTAB_STE_2_S2PTW              (1UL << 54)
279 #define STRTAB_STE_2_S2R                (1UL << 58)
280
281 #define STRTAB_STE_3_S2TTB_SHIFT        4
282 #define STRTAB_STE_3_S2TTB_MASK         0xfffffffffffUL
283
284 /* Context descriptor (stage-1 only) */
285 #define CTXDESC_CD_DWORDS               8
286 #define CTXDESC_CD_0_TCR_T0SZ_SHIFT     0
287 #define ARM64_TCR_T0SZ_SHIFT            0
288 #define ARM64_TCR_T0SZ_MASK             0x1fUL
289 #define CTXDESC_CD_0_TCR_TG0_SHIFT      6
290 #define ARM64_TCR_TG0_SHIFT             14
291 #define ARM64_TCR_TG0_MASK              0x3UL
292 #define CTXDESC_CD_0_TCR_IRGN0_SHIFT    8
293 #define ARM64_TCR_IRGN0_SHIFT           8
294 #define ARM64_TCR_IRGN0_MASK            0x3UL
295 #define CTXDESC_CD_0_TCR_ORGN0_SHIFT    10
296 #define ARM64_TCR_ORGN0_SHIFT           10
297 #define ARM64_TCR_ORGN0_MASK            0x3UL
298 #define CTXDESC_CD_0_TCR_SH0_SHIFT      12
299 #define ARM64_TCR_SH0_SHIFT             12
300 #define ARM64_TCR_SH0_MASK              0x3UL
301 #define CTXDESC_CD_0_TCR_EPD0_SHIFT     14
302 #define ARM64_TCR_EPD0_SHIFT            7
303 #define ARM64_TCR_EPD0_MASK             0x1UL
304 #define CTXDESC_CD_0_TCR_EPD1_SHIFT     30
305 #define ARM64_TCR_EPD1_SHIFT            23
306 #define ARM64_TCR_EPD1_MASK             0x1UL
307
308 #define CTXDESC_CD_0_ENDI               (1UL << 15)
309 #define CTXDESC_CD_0_V                  (1UL << 31)
310
311 #define CTXDESC_CD_0_TCR_IPS_SHIFT      32
312 #define ARM64_TCR_IPS_SHIFT             32
313 #define ARM64_TCR_IPS_MASK              0x7UL
314 #define CTXDESC_CD_0_TCR_TBI0_SHIFT     38
315 #define ARM64_TCR_TBI0_SHIFT            37
316 #define ARM64_TCR_TBI0_MASK             0x1UL
317
318 #define CTXDESC_CD_0_AA64               (1UL << 41)
319 #define CTXDESC_CD_0_R                  (1UL << 45)
320 #define CTXDESC_CD_0_A                  (1UL << 46)
321 #define CTXDESC_CD_0_ASET_SHIFT         47
322 #define CTXDESC_CD_0_ASET_SHARED        (0UL << CTXDESC_CD_0_ASET_SHIFT)
323 #define CTXDESC_CD_0_ASET_PRIVATE       (1UL << CTXDESC_CD_0_ASET_SHIFT)
324 #define CTXDESC_CD_0_ASID_SHIFT         48
325 #define CTXDESC_CD_0_ASID_MASK          0xffffUL
326
327 #define CTXDESC_CD_1_TTB0_SHIFT         4
328 #define CTXDESC_CD_1_TTB0_MASK          0xfffffffffffUL
329
330 #define CTXDESC_CD_3_MAIR_SHIFT         0
331
332 /* Convert between AArch64 (CPU) TCR format and SMMU CD format */
333 #define ARM_SMMU_TCR2CD(tcr, fld)                                       \
334         (((tcr) >> ARM64_TCR_##fld##_SHIFT & ARM64_TCR_##fld##_MASK)    \
335          << CTXDESC_CD_0_TCR_##fld##_SHIFT)
336
337 /* Command queue */
338 #define CMDQ_ENT_DWORDS                 2
339 #define CMDQ_MAX_SZ_SHIFT               8
340
341 #define CMDQ_ERR_SHIFT                  24
342 #define CMDQ_ERR_MASK                   0x7f
343 #define CMDQ_ERR_CERROR_NONE_IDX        0
344 #define CMDQ_ERR_CERROR_ILL_IDX         1
345 #define CMDQ_ERR_CERROR_ABT_IDX         2
346
347 #define CMDQ_0_OP_SHIFT                 0
348 #define CMDQ_0_OP_MASK                  0xffUL
349 #define CMDQ_0_SSV                      (1UL << 11)
350
351 #define CMDQ_PREFETCH_0_SID_SHIFT       32
352 #define CMDQ_PREFETCH_1_SIZE_SHIFT      0
353 #define CMDQ_PREFETCH_1_ADDR_MASK       ~0xfffUL
354
355 #define CMDQ_CFGI_0_SID_SHIFT           32
356 #define CMDQ_CFGI_0_SID_MASK            0xffffffffUL
357 #define CMDQ_CFGI_1_LEAF                (1UL << 0)
358 #define CMDQ_CFGI_1_RANGE_SHIFT         0
359 #define CMDQ_CFGI_1_RANGE_MASK          0x1fUL
360
361 #define CMDQ_TLBI_0_VMID_SHIFT          32
362 #define CMDQ_TLBI_0_ASID_SHIFT          48
363 #define CMDQ_TLBI_1_LEAF                (1UL << 0)
364 #define CMDQ_TLBI_1_VA_MASK             ~0xfffUL
365 #define CMDQ_TLBI_1_IPA_MASK            0xfffffffff000UL
366
367 #define CMDQ_PRI_0_SSID_SHIFT           12
368 #define CMDQ_PRI_0_SSID_MASK            0xfffffUL
369 #define CMDQ_PRI_0_SID_SHIFT            32
370 #define CMDQ_PRI_0_SID_MASK             0xffffffffUL
371 #define CMDQ_PRI_1_GRPID_SHIFT          0
372 #define CMDQ_PRI_1_GRPID_MASK           0x1ffUL
373 #define CMDQ_PRI_1_RESP_SHIFT           12
374 #define CMDQ_PRI_1_RESP_DENY            (0UL << CMDQ_PRI_1_RESP_SHIFT)
375 #define CMDQ_PRI_1_RESP_FAIL            (1UL << CMDQ_PRI_1_RESP_SHIFT)
376 #define CMDQ_PRI_1_RESP_SUCC            (2UL << CMDQ_PRI_1_RESP_SHIFT)
377
378 #define CMDQ_SYNC_0_CS_SHIFT            12
379 #define CMDQ_SYNC_0_CS_NONE             (0UL << CMDQ_SYNC_0_CS_SHIFT)
380 #define CMDQ_SYNC_0_CS_SEV              (2UL << CMDQ_SYNC_0_CS_SHIFT)
381
382 /* Event queue */
383 #define EVTQ_ENT_DWORDS                 4
384 #define EVTQ_MAX_SZ_SHIFT               7
385
386 #define EVTQ_0_ID_SHIFT                 0
387 #define EVTQ_0_ID_MASK                  0xffUL
388
389 /* PRI queue */
390 #define PRIQ_ENT_DWORDS                 2
391 #define PRIQ_MAX_SZ_SHIFT               8
392
393 #define PRIQ_0_SID_SHIFT                0
394 #define PRIQ_0_SID_MASK                 0xffffffffUL
395 #define PRIQ_0_SSID_SHIFT               32
396 #define PRIQ_0_SSID_MASK                0xfffffUL
397 #define PRIQ_0_PERM_PRIV                (1UL << 58)
398 #define PRIQ_0_PERM_EXEC                (1UL << 59)
399 #define PRIQ_0_PERM_READ                (1UL << 60)
400 #define PRIQ_0_PERM_WRITE               (1UL << 61)
401 #define PRIQ_0_PRG_LAST                 (1UL << 62)
402 #define PRIQ_0_SSID_V                   (1UL << 63)
403
404 #define PRIQ_1_PRG_IDX_SHIFT            0
405 #define PRIQ_1_PRG_IDX_MASK             0x1ffUL
406 #define PRIQ_1_ADDR_SHIFT               12
407 #define PRIQ_1_ADDR_MASK                0xfffffffffffffUL
408
409 /* High-level queue structures */
410 #define ARM_SMMU_POLL_TIMEOUT_US        100
411
412 static bool disable_bypass;
413 module_param_named(disable_bypass, disable_bypass, bool, S_IRUGO);
414 MODULE_PARM_DESC(disable_bypass,
415         "Disable bypass streams such that incoming transactions from devices that are not attached to an iommu domain will report an abort back to the device and will not be allowed to pass through the SMMU.");
416
417 enum pri_resp {
418         PRI_RESP_DENY,
419         PRI_RESP_FAIL,
420         PRI_RESP_SUCC,
421 };
422
423 enum arm_smmu_msi_index {
424         EVTQ_MSI_INDEX,
425         GERROR_MSI_INDEX,
426         PRIQ_MSI_INDEX,
427         ARM_SMMU_MAX_MSIS,
428 };
429
430 static phys_addr_t arm_smmu_msi_cfg[ARM_SMMU_MAX_MSIS][3] = {
431         [EVTQ_MSI_INDEX] = {
432                 ARM_SMMU_EVTQ_IRQ_CFG0,
433                 ARM_SMMU_EVTQ_IRQ_CFG1,
434                 ARM_SMMU_EVTQ_IRQ_CFG2,
435         },
436         [GERROR_MSI_INDEX] = {
437                 ARM_SMMU_GERROR_IRQ_CFG0,
438                 ARM_SMMU_GERROR_IRQ_CFG1,
439                 ARM_SMMU_GERROR_IRQ_CFG2,
440         },
441         [PRIQ_MSI_INDEX] = {
442                 ARM_SMMU_PRIQ_IRQ_CFG0,
443                 ARM_SMMU_PRIQ_IRQ_CFG1,
444                 ARM_SMMU_PRIQ_IRQ_CFG2,
445         },
446 };
447
448 struct arm_smmu_cmdq_ent {
449         /* Common fields */
450         u8                              opcode;
451         bool                            substream_valid;
452
453         /* Command-specific fields */
454         union {
455                 #define CMDQ_OP_PREFETCH_CFG    0x1
456                 struct {
457                         u32                     sid;
458                         u8                      size;
459                         u64                     addr;
460                 } prefetch;
461
462                 #define CMDQ_OP_CFGI_STE        0x3
463                 #define CMDQ_OP_CFGI_ALL        0x4
464                 struct {
465                         u32                     sid;
466                         union {
467                                 bool            leaf;
468                                 u8              span;
469                         };
470                 } cfgi;
471
472                 #define CMDQ_OP_TLBI_NH_ASID    0x11
473                 #define CMDQ_OP_TLBI_NH_VA      0x12
474                 #define CMDQ_OP_TLBI_EL2_ALL    0x20
475                 #define CMDQ_OP_TLBI_S12_VMALL  0x28
476                 #define CMDQ_OP_TLBI_S2_IPA     0x2a
477                 #define CMDQ_OP_TLBI_NSNH_ALL   0x30
478                 struct {
479                         u16                     asid;
480                         u16                     vmid;
481                         bool                    leaf;
482                         u64                     addr;
483                 } tlbi;
484
485                 #define CMDQ_OP_PRI_RESP        0x41
486                 struct {
487                         u32                     sid;
488                         u32                     ssid;
489                         u16                     grpid;
490                         enum pri_resp           resp;
491                 } pri;
492
493                 #define CMDQ_OP_CMD_SYNC        0x46
494         };
495 };
496
497 struct arm_smmu_queue {
498         int                             irq; /* Wired interrupt */
499
500         __le64                          *base;
501         dma_addr_t                      base_dma;
502         u64                             q_base;
503
504         size_t                          ent_dwords;
505         u32                             max_n_shift;
506         u32                             prod;
507         u32                             cons;
508
509         u32 __iomem                     *prod_reg;
510         u32 __iomem                     *cons_reg;
511 };
512
513 struct arm_smmu_cmdq {
514         struct arm_smmu_queue           q;
515         spinlock_t                      lock;
516 };
517
518 struct arm_smmu_evtq {
519         struct arm_smmu_queue           q;
520         u32                             max_stalls;
521 };
522
523 struct arm_smmu_priq {
524         struct arm_smmu_queue           q;
525 };
526
527 /* High-level stream table and context descriptor structures */
528 struct arm_smmu_strtab_l1_desc {
529         u8                              span;
530
531         __le64                          *l2ptr;
532         dma_addr_t                      l2ptr_dma;
533 };
534
535 struct arm_smmu_s1_cfg {
536         __le64                          *cdptr;
537         dma_addr_t                      cdptr_dma;
538
539         struct arm_smmu_ctx_desc {
540                 u16     asid;
541                 u64     ttbr;
542                 u64     tcr;
543                 u64     mair;
544         }                               cd;
545 };
546
547 struct arm_smmu_s2_cfg {
548         u16                             vmid;
549         u64                             vttbr;
550         u64                             vtcr;
551 };
552
553 struct arm_smmu_strtab_ent {
554         bool                            valid;
555
556         bool                            bypass; /* Overrides s1/s2 config */
557         struct arm_smmu_s1_cfg          *s1_cfg;
558         struct arm_smmu_s2_cfg          *s2_cfg;
559 };
560
561 struct arm_smmu_strtab_cfg {
562         __le64                          *strtab;
563         dma_addr_t                      strtab_dma;
564         struct arm_smmu_strtab_l1_desc  *l1_desc;
565         unsigned int                    num_l1_ents;
566
567         u64                             strtab_base;
568         u32                             strtab_base_cfg;
569 };
570
571 /* An SMMUv3 instance */
572 struct arm_smmu_device {
573         struct device                   *dev;
574         void __iomem                    *base;
575
576 #define ARM_SMMU_FEAT_2_LVL_STRTAB      (1 << 0)
577 #define ARM_SMMU_FEAT_2_LVL_CDTAB       (1 << 1)
578 #define ARM_SMMU_FEAT_TT_LE             (1 << 2)
579 #define ARM_SMMU_FEAT_TT_BE             (1 << 3)
580 #define ARM_SMMU_FEAT_PRI               (1 << 4)
581 #define ARM_SMMU_FEAT_ATS               (1 << 5)
582 #define ARM_SMMU_FEAT_SEV               (1 << 6)
583 #define ARM_SMMU_FEAT_MSI               (1 << 7)
584 #define ARM_SMMU_FEAT_COHERENCY         (1 << 8)
585 #define ARM_SMMU_FEAT_TRANS_S1          (1 << 9)
586 #define ARM_SMMU_FEAT_TRANS_S2          (1 << 10)
587 #define ARM_SMMU_FEAT_STALLS            (1 << 11)
588 #define ARM_SMMU_FEAT_HYP               (1 << 12)
589         u32                             features;
590
591 #define ARM_SMMU_OPT_SKIP_PREFETCH      (1 << 0)
592         u32                             options;
593
594         struct arm_smmu_cmdq            cmdq;
595         struct arm_smmu_evtq            evtq;
596         struct arm_smmu_priq            priq;
597
598         int                             gerr_irq;
599
600         unsigned long                   ias; /* IPA */
601         unsigned long                   oas; /* PA */
602         unsigned long                   pgsize_bitmap;
603
604 #define ARM_SMMU_MAX_ASIDS              (1 << 16)
605         unsigned int                    asid_bits;
606         DECLARE_BITMAP(asid_map, ARM_SMMU_MAX_ASIDS);
607
608 #define ARM_SMMU_MAX_VMIDS              (1 << 16)
609         unsigned int                    vmid_bits;
610         DECLARE_BITMAP(vmid_map, ARM_SMMU_MAX_VMIDS);
611
612         unsigned int                    ssid_bits;
613         unsigned int                    sid_bits;
614
615         struct arm_smmu_strtab_cfg      strtab_cfg;
616 };
617
618 /* SMMU private data for each master */
619 struct arm_smmu_master_data {
620         struct arm_smmu_device          *smmu;
621         struct arm_smmu_strtab_ent      ste;
622 };
623
624 /* SMMU private data for an IOMMU domain */
625 enum arm_smmu_domain_stage {
626         ARM_SMMU_DOMAIN_S1 = 0,
627         ARM_SMMU_DOMAIN_S2,
628         ARM_SMMU_DOMAIN_NESTED,
629 };
630
631 struct arm_smmu_domain {
632         struct arm_smmu_device          *smmu;
633         struct mutex                    init_mutex; /* Protects smmu pointer */
634
635         struct io_pgtable_ops           *pgtbl_ops;
636         spinlock_t                      pgtbl_lock;
637
638         enum arm_smmu_domain_stage      stage;
639         union {
640                 struct arm_smmu_s1_cfg  s1_cfg;
641                 struct arm_smmu_s2_cfg  s2_cfg;
642         };
643
644         struct iommu_domain             domain;
645 };
646
647 struct arm_smmu_option_prop {
648         u32 opt;
649         const char *prop;
650 };
651
652 static struct arm_smmu_option_prop arm_smmu_options[] = {
653         { ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
654         { 0, NULL},
655 };
656
657 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
658 {
659         return container_of(dom, struct arm_smmu_domain, domain);
660 }
661
662 static void parse_driver_options(struct arm_smmu_device *smmu)
663 {
664         int i = 0;
665
666         do {
667                 if (of_property_read_bool(smmu->dev->of_node,
668                                                 arm_smmu_options[i].prop)) {
669                         smmu->options |= arm_smmu_options[i].opt;
670                         dev_notice(smmu->dev, "option %s\n",
671                                 arm_smmu_options[i].prop);
672                 }
673         } while (arm_smmu_options[++i].opt);
674 }
675
676 /* Low-level queue manipulation functions */
677 static bool queue_full(struct arm_smmu_queue *q)
678 {
679         return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) &&
680                Q_WRP(q, q->prod) != Q_WRP(q, q->cons);
681 }
682
683 static bool queue_empty(struct arm_smmu_queue *q)
684 {
685         return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) &&
686                Q_WRP(q, q->prod) == Q_WRP(q, q->cons);
687 }
688
689 static void queue_sync_cons(struct arm_smmu_queue *q)
690 {
691         q->cons = readl_relaxed(q->cons_reg);
692 }
693
694 static void queue_inc_cons(struct arm_smmu_queue *q)
695 {
696         u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1;
697
698         q->cons = Q_OVF(q, q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons);
699         writel(q->cons, q->cons_reg);
700 }
701
702 static int queue_sync_prod(struct arm_smmu_queue *q)
703 {
704         int ret = 0;
705         u32 prod = readl_relaxed(q->prod_reg);
706
707         if (Q_OVF(q, prod) != Q_OVF(q, q->prod))
708                 ret = -EOVERFLOW;
709
710         q->prod = prod;
711         return ret;
712 }
713
714 static void queue_inc_prod(struct arm_smmu_queue *q)
715 {
716         u32 prod = (Q_WRP(q, q->prod) | Q_IDX(q, q->prod)) + 1;
717
718         q->prod = Q_OVF(q, q->prod) | Q_WRP(q, prod) | Q_IDX(q, prod);
719         writel(q->prod, q->prod_reg);
720 }
721
722 /*
723  * Wait for the SMMU to consume items. If drain is true, wait until the queue
724  * is empty. Otherwise, wait until there is at least one free slot.
725  */
726 static int queue_poll_cons(struct arm_smmu_queue *q, bool drain, bool wfe)
727 {
728         ktime_t timeout = ktime_add_us(ktime_get(), ARM_SMMU_POLL_TIMEOUT_US);
729
730         while (queue_sync_cons(q), (drain ? !queue_empty(q) : queue_full(q))) {
731                 if (ktime_compare(ktime_get(), timeout) > 0)
732                         return -ETIMEDOUT;
733
734                 if (wfe) {
735                         wfe();
736                 } else {
737                         cpu_relax();
738                         udelay(1);
739                 }
740         }
741
742         return 0;
743 }
744
745 static void queue_write(__le64 *dst, u64 *src, size_t n_dwords)
746 {
747         int i;
748
749         for (i = 0; i < n_dwords; ++i)
750                 *dst++ = cpu_to_le64(*src++);
751 }
752
753 static int queue_insert_raw(struct arm_smmu_queue *q, u64 *ent)
754 {
755         if (queue_full(q))
756                 return -ENOSPC;
757
758         queue_write(Q_ENT(q, q->prod), ent, q->ent_dwords);
759         queue_inc_prod(q);
760         return 0;
761 }
762
763 static void queue_read(__le64 *dst, u64 *src, size_t n_dwords)
764 {
765         int i;
766
767         for (i = 0; i < n_dwords; ++i)
768                 *dst++ = le64_to_cpu(*src++);
769 }
770
771 static int queue_remove_raw(struct arm_smmu_queue *q, u64 *ent)
772 {
773         if (queue_empty(q))
774                 return -EAGAIN;
775
776         queue_read(ent, Q_ENT(q, q->cons), q->ent_dwords);
777         queue_inc_cons(q);
778         return 0;
779 }
780
781 /* High-level queue accessors */
782 static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent)
783 {
784         memset(cmd, 0, CMDQ_ENT_DWORDS << 3);
785         cmd[0] |= (ent->opcode & CMDQ_0_OP_MASK) << CMDQ_0_OP_SHIFT;
786
787         switch (ent->opcode) {
788         case CMDQ_OP_TLBI_EL2_ALL:
789         case CMDQ_OP_TLBI_NSNH_ALL:
790                 break;
791         case CMDQ_OP_PREFETCH_CFG:
792                 cmd[0] |= (u64)ent->prefetch.sid << CMDQ_PREFETCH_0_SID_SHIFT;
793                 cmd[1] |= ent->prefetch.size << CMDQ_PREFETCH_1_SIZE_SHIFT;
794                 cmd[1] |= ent->prefetch.addr & CMDQ_PREFETCH_1_ADDR_MASK;
795                 break;
796         case CMDQ_OP_CFGI_STE:
797                 cmd[0] |= (u64)ent->cfgi.sid << CMDQ_CFGI_0_SID_SHIFT;
798                 cmd[1] |= ent->cfgi.leaf ? CMDQ_CFGI_1_LEAF : 0;
799                 break;
800         case CMDQ_OP_CFGI_ALL:
801                 /* Cover the entire SID range */
802                 cmd[1] |= CMDQ_CFGI_1_RANGE_MASK << CMDQ_CFGI_1_RANGE_SHIFT;
803                 break;
804         case CMDQ_OP_TLBI_NH_VA:
805                 cmd[0] |= (u64)ent->tlbi.asid << CMDQ_TLBI_0_ASID_SHIFT;
806                 cmd[1] |= ent->tlbi.leaf ? CMDQ_TLBI_1_LEAF : 0;
807                 cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_VA_MASK;
808                 break;
809         case CMDQ_OP_TLBI_S2_IPA:
810                 cmd[0] |= (u64)ent->tlbi.vmid << CMDQ_TLBI_0_VMID_SHIFT;
811                 cmd[1] |= ent->tlbi.leaf ? CMDQ_TLBI_1_LEAF : 0;
812                 cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_IPA_MASK;
813                 break;
814         case CMDQ_OP_TLBI_NH_ASID:
815                 cmd[0] |= (u64)ent->tlbi.asid << CMDQ_TLBI_0_ASID_SHIFT;
816                 /* Fallthrough */
817         case CMDQ_OP_TLBI_S12_VMALL:
818                 cmd[0] |= (u64)ent->tlbi.vmid << CMDQ_TLBI_0_VMID_SHIFT;
819                 break;
820         case CMDQ_OP_PRI_RESP:
821                 cmd[0] |= ent->substream_valid ? CMDQ_0_SSV : 0;
822                 cmd[0] |= ent->pri.ssid << CMDQ_PRI_0_SSID_SHIFT;
823                 cmd[0] |= (u64)ent->pri.sid << CMDQ_PRI_0_SID_SHIFT;
824                 cmd[1] |= ent->pri.grpid << CMDQ_PRI_1_GRPID_SHIFT;
825                 switch (ent->pri.resp) {
826                 case PRI_RESP_DENY:
827                         cmd[1] |= CMDQ_PRI_1_RESP_DENY;
828                         break;
829                 case PRI_RESP_FAIL:
830                         cmd[1] |= CMDQ_PRI_1_RESP_FAIL;
831                         break;
832                 case PRI_RESP_SUCC:
833                         cmd[1] |= CMDQ_PRI_1_RESP_SUCC;
834                         break;
835                 default:
836                         return -EINVAL;
837                 }
838                 break;
839         case CMDQ_OP_CMD_SYNC:
840                 cmd[0] |= CMDQ_SYNC_0_CS_SEV;
841                 break;
842         default:
843                 return -ENOENT;
844         }
845
846         return 0;
847 }
848
849 static void arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu)
850 {
851         static const char *cerror_str[] = {
852                 [CMDQ_ERR_CERROR_NONE_IDX]      = "No error",
853                 [CMDQ_ERR_CERROR_ILL_IDX]       = "Illegal command",
854                 [CMDQ_ERR_CERROR_ABT_IDX]       = "Abort on command fetch",
855         };
856
857         int i;
858         u64 cmd[CMDQ_ENT_DWORDS];
859         struct arm_smmu_queue *q = &smmu->cmdq.q;
860         u32 cons = readl_relaxed(q->cons_reg);
861         u32 idx = cons >> CMDQ_ERR_SHIFT & CMDQ_ERR_MASK;
862         struct arm_smmu_cmdq_ent cmd_sync = {
863                 .opcode = CMDQ_OP_CMD_SYNC,
864         };
865
866         dev_err(smmu->dev, "CMDQ error (cons 0x%08x): %s\n", cons,
867                 idx < ARRAY_SIZE(cerror_str) ?  cerror_str[idx] : "Unknown");
868
869         switch (idx) {
870         case CMDQ_ERR_CERROR_ABT_IDX:
871                 dev_err(smmu->dev, "retrying command fetch\n");
872         case CMDQ_ERR_CERROR_NONE_IDX:
873                 return;
874         case CMDQ_ERR_CERROR_ILL_IDX:
875                 /* Fallthrough */
876         default:
877                 break;
878         }
879
880         /*
881          * We may have concurrent producers, so we need to be careful
882          * not to touch any of the shadow cmdq state.
883          */
884         queue_read(cmd, Q_ENT(q, cons), q->ent_dwords);
885         dev_err(smmu->dev, "skipping command in error state:\n");
886         for (i = 0; i < ARRAY_SIZE(cmd); ++i)
887                 dev_err(smmu->dev, "\t0x%016llx\n", (unsigned long long)cmd[i]);
888
889         /* Convert the erroneous command into a CMD_SYNC */
890         if (arm_smmu_cmdq_build_cmd(cmd, &cmd_sync)) {
891                 dev_err(smmu->dev, "failed to convert to CMD_SYNC\n");
892                 return;
893         }
894
895         queue_write(Q_ENT(q, cons), cmd, q->ent_dwords);
896 }
897
898 static void arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu,
899                                     struct arm_smmu_cmdq_ent *ent)
900 {
901         u64 cmd[CMDQ_ENT_DWORDS];
902         unsigned long flags;
903         bool wfe = !!(smmu->features & ARM_SMMU_FEAT_SEV);
904         struct arm_smmu_queue *q = &smmu->cmdq.q;
905
906         if (arm_smmu_cmdq_build_cmd(cmd, ent)) {
907                 dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n",
908                          ent->opcode);
909                 return;
910         }
911
912         spin_lock_irqsave(&smmu->cmdq.lock, flags);
913         while (queue_insert_raw(q, cmd) == -ENOSPC) {
914                 if (queue_poll_cons(q, false, wfe))
915                         dev_err_ratelimited(smmu->dev, "CMDQ timeout\n");
916         }
917
918         if (ent->opcode == CMDQ_OP_CMD_SYNC && queue_poll_cons(q, true, wfe))
919                 dev_err_ratelimited(smmu->dev, "CMD_SYNC timeout\n");
920         spin_unlock_irqrestore(&smmu->cmdq.lock, flags);
921 }
922
923 /* Context descriptor manipulation functions */
924 static u64 arm_smmu_cpu_tcr_to_cd(u64 tcr)
925 {
926         u64 val = 0;
927
928         /* Repack the TCR. Just care about TTBR0 for now */
929         val |= ARM_SMMU_TCR2CD(tcr, T0SZ);
930         val |= ARM_SMMU_TCR2CD(tcr, TG0);
931         val |= ARM_SMMU_TCR2CD(tcr, IRGN0);
932         val |= ARM_SMMU_TCR2CD(tcr, ORGN0);
933         val |= ARM_SMMU_TCR2CD(tcr, SH0);
934         val |= ARM_SMMU_TCR2CD(tcr, EPD0);
935         val |= ARM_SMMU_TCR2CD(tcr, EPD1);
936         val |= ARM_SMMU_TCR2CD(tcr, IPS);
937         val |= ARM_SMMU_TCR2CD(tcr, TBI0);
938
939         return val;
940 }
941
942 static void arm_smmu_write_ctx_desc(struct arm_smmu_device *smmu,
943                                     struct arm_smmu_s1_cfg *cfg)
944 {
945         u64 val;
946
947         /*
948          * We don't need to issue any invalidation here, as we'll invalidate
949          * the STE when installing the new entry anyway.
950          */
951         val = arm_smmu_cpu_tcr_to_cd(cfg->cd.tcr) |
952 #ifdef __BIG_ENDIAN
953               CTXDESC_CD_0_ENDI |
954 #endif
955               CTXDESC_CD_0_R | CTXDESC_CD_0_A | CTXDESC_CD_0_ASET_PRIVATE |
956               CTXDESC_CD_0_AA64 | (u64)cfg->cd.asid << CTXDESC_CD_0_ASID_SHIFT |
957               CTXDESC_CD_0_V;
958         cfg->cdptr[0] = cpu_to_le64(val);
959
960         val = cfg->cd.ttbr & CTXDESC_CD_1_TTB0_MASK << CTXDESC_CD_1_TTB0_SHIFT;
961         cfg->cdptr[1] = cpu_to_le64(val);
962
963         cfg->cdptr[3] = cpu_to_le64(cfg->cd.mair << CTXDESC_CD_3_MAIR_SHIFT);
964 }
965
966 /* Stream table manipulation functions */
967 static void
968 arm_smmu_write_strtab_l1_desc(__le64 *dst, struct arm_smmu_strtab_l1_desc *desc)
969 {
970         u64 val = 0;
971
972         val |= (desc->span & STRTAB_L1_DESC_SPAN_MASK)
973                 << STRTAB_L1_DESC_SPAN_SHIFT;
974         val |= desc->l2ptr_dma &
975                STRTAB_L1_DESC_L2PTR_MASK << STRTAB_L1_DESC_L2PTR_SHIFT;
976
977         *dst = cpu_to_le64(val);
978 }
979
980 static void arm_smmu_sync_ste_for_sid(struct arm_smmu_device *smmu, u32 sid)
981 {
982         struct arm_smmu_cmdq_ent cmd = {
983                 .opcode = CMDQ_OP_CFGI_STE,
984                 .cfgi   = {
985                         .sid    = sid,
986                         .leaf   = true,
987                 },
988         };
989
990         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
991         cmd.opcode = CMDQ_OP_CMD_SYNC;
992         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
993 }
994
995 static void arm_smmu_write_strtab_ent(struct arm_smmu_device *smmu, u32 sid,
996                                       __le64 *dst, struct arm_smmu_strtab_ent *ste)
997 {
998         /*
999          * This is hideously complicated, but we only really care about
1000          * three cases at the moment:
1001          *
1002          * 1. Invalid (all zero) -> bypass  (init)
1003          * 2. Bypass -> translation (attach)
1004          * 3. Translation -> bypass (detach)
1005          *
1006          * Given that we can't update the STE atomically and the SMMU
1007          * doesn't read the thing in a defined order, that leaves us
1008          * with the following maintenance requirements:
1009          *
1010          * 1. Update Config, return (init time STEs aren't live)
1011          * 2. Write everything apart from dword 0, sync, write dword 0, sync
1012          * 3. Update Config, sync
1013          */
1014         u64 val = le64_to_cpu(dst[0]);
1015         bool ste_live = false;
1016         struct arm_smmu_cmdq_ent prefetch_cmd = {
1017                 .opcode         = CMDQ_OP_PREFETCH_CFG,
1018                 .prefetch       = {
1019                         .sid    = sid,
1020                 },
1021         };
1022
1023         if (val & STRTAB_STE_0_V) {
1024                 u64 cfg;
1025
1026                 cfg = val & STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT;
1027                 switch (cfg) {
1028                 case STRTAB_STE_0_CFG_BYPASS:
1029                         break;
1030                 case STRTAB_STE_0_CFG_S1_TRANS:
1031                 case STRTAB_STE_0_CFG_S2_TRANS:
1032                         ste_live = true;
1033                         break;
1034                 case STRTAB_STE_0_CFG_ABORT:
1035                         if (disable_bypass)
1036                                 break;
1037                 default:
1038                         BUG(); /* STE corruption */
1039                 }
1040         }
1041
1042         /* Nuke the existing Config, as we're going to rewrite it */
1043         val &= ~(STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT);
1044
1045         if (ste->valid)
1046                 val |= STRTAB_STE_0_V;
1047         else
1048                 val &= ~STRTAB_STE_0_V;
1049
1050         if (ste->bypass) {
1051                 val |= disable_bypass ? STRTAB_STE_0_CFG_ABORT
1052                                       : STRTAB_STE_0_CFG_BYPASS;
1053                 dst[0] = cpu_to_le64(val);
1054                 dst[1] = cpu_to_le64(STRTAB_STE_1_SHCFG_INCOMING
1055                          << STRTAB_STE_1_SHCFG_SHIFT);
1056                 dst[2] = 0; /* Nuke the VMID */
1057                 if (ste_live)
1058                         arm_smmu_sync_ste_for_sid(smmu, sid);
1059                 return;
1060         }
1061
1062         if (ste->s1_cfg) {
1063                 BUG_ON(ste_live);
1064                 dst[1] = cpu_to_le64(
1065                          STRTAB_STE_1_S1C_CACHE_WBRA
1066                          << STRTAB_STE_1_S1CIR_SHIFT |
1067                          STRTAB_STE_1_S1C_CACHE_WBRA
1068                          << STRTAB_STE_1_S1COR_SHIFT |
1069                          STRTAB_STE_1_S1C_SH_ISH << STRTAB_STE_1_S1CSH_SHIFT |
1070 #ifdef CONFIG_PCI_ATS
1071                          STRTAB_STE_1_EATS_TRANS << STRTAB_STE_1_EATS_SHIFT |
1072 #endif
1073                          STRTAB_STE_1_STRW_NSEL1 << STRTAB_STE_1_STRW_SHIFT);
1074
1075                 if (smmu->features & ARM_SMMU_FEAT_STALLS)
1076                         dst[1] |= cpu_to_le64(STRTAB_STE_1_S1STALLD);
1077
1078                 val |= (ste->s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK
1079                         << STRTAB_STE_0_S1CTXPTR_SHIFT) |
1080                         STRTAB_STE_0_CFG_S1_TRANS;
1081
1082         }
1083
1084         if (ste->s2_cfg) {
1085                 BUG_ON(ste_live);
1086                 dst[2] = cpu_to_le64(
1087                          ste->s2_cfg->vmid << STRTAB_STE_2_S2VMID_SHIFT |
1088                          (ste->s2_cfg->vtcr & STRTAB_STE_2_VTCR_MASK)
1089                           << STRTAB_STE_2_VTCR_SHIFT |
1090 #ifdef __BIG_ENDIAN
1091                          STRTAB_STE_2_S2ENDI |
1092 #endif
1093                          STRTAB_STE_2_S2PTW | STRTAB_STE_2_S2AA64 |
1094                          STRTAB_STE_2_S2R);
1095
1096                 dst[3] = cpu_to_le64(ste->s2_cfg->vttbr &
1097                          STRTAB_STE_3_S2TTB_MASK << STRTAB_STE_3_S2TTB_SHIFT);
1098
1099                 val |= STRTAB_STE_0_CFG_S2_TRANS;
1100         }
1101
1102         arm_smmu_sync_ste_for_sid(smmu, sid);
1103         dst[0] = cpu_to_le64(val);
1104         arm_smmu_sync_ste_for_sid(smmu, sid);
1105
1106         /* It's likely that we'll want to use the new STE soon */
1107         if (!(smmu->options & ARM_SMMU_OPT_SKIP_PREFETCH))
1108                 arm_smmu_cmdq_issue_cmd(smmu, &prefetch_cmd);
1109 }
1110
1111 static void arm_smmu_init_bypass_stes(u64 *strtab, unsigned int nent)
1112 {
1113         unsigned int i;
1114         struct arm_smmu_strtab_ent ste = {
1115                 .valid  = true,
1116                 .bypass = true,
1117         };
1118
1119         for (i = 0; i < nent; ++i) {
1120                 arm_smmu_write_strtab_ent(NULL, -1, strtab, &ste);
1121                 strtab += STRTAB_STE_DWORDS;
1122         }
1123 }
1124
1125 static int arm_smmu_init_l2_strtab(struct arm_smmu_device *smmu, u32 sid)
1126 {
1127         size_t size;
1128         void *strtab;
1129         struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
1130         struct arm_smmu_strtab_l1_desc *desc = &cfg->l1_desc[sid >> STRTAB_SPLIT];
1131
1132         if (desc->l2ptr)
1133                 return 0;
1134
1135         size = 1 << (STRTAB_SPLIT + ilog2(STRTAB_STE_DWORDS) + 3);
1136         strtab = &cfg->strtab[(sid >> STRTAB_SPLIT) * STRTAB_L1_DESC_DWORDS];
1137
1138         desc->span = STRTAB_SPLIT + 1;
1139         desc->l2ptr = dmam_alloc_coherent(smmu->dev, size, &desc->l2ptr_dma,
1140                                           GFP_KERNEL | __GFP_ZERO);
1141         if (!desc->l2ptr) {
1142                 dev_err(smmu->dev,
1143                         "failed to allocate l2 stream table for SID %u\n",
1144                         sid);
1145                 return -ENOMEM;
1146         }
1147
1148         arm_smmu_init_bypass_stes(desc->l2ptr, 1 << STRTAB_SPLIT);
1149         arm_smmu_write_strtab_l1_desc(strtab, desc);
1150         return 0;
1151 }
1152
1153 /* IRQ and event handlers */
1154 static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev)
1155 {
1156         int i;
1157         struct arm_smmu_device *smmu = dev;
1158         struct arm_smmu_queue *q = &smmu->evtq.q;
1159         u64 evt[EVTQ_ENT_DWORDS];
1160
1161         do {
1162                 while (!queue_remove_raw(q, evt)) {
1163                         u8 id = evt[0] >> EVTQ_0_ID_SHIFT & EVTQ_0_ID_MASK;
1164
1165                         dev_info(smmu->dev, "event 0x%02x received:\n", id);
1166                         for (i = 0; i < ARRAY_SIZE(evt); ++i)
1167                                 dev_info(smmu->dev, "\t0x%016llx\n",
1168                                          (unsigned long long)evt[i]);
1169
1170                 }
1171
1172                 /*
1173                  * Not much we can do on overflow, so scream and pretend we're
1174                  * trying harder.
1175                  */
1176                 if (queue_sync_prod(q) == -EOVERFLOW)
1177                         dev_err(smmu->dev, "EVTQ overflow detected -- events lost\n");
1178         } while (!queue_empty(q));
1179
1180         /* Sync our overflow flag, as we believe we're up to speed */
1181         q->cons = Q_OVF(q, q->prod) | Q_WRP(q, q->cons) | Q_IDX(q, q->cons);
1182         return IRQ_HANDLED;
1183 }
1184
1185 static void arm_smmu_handle_ppr(struct arm_smmu_device *smmu, u64 *evt)
1186 {
1187         u32 sid, ssid;
1188         u16 grpid;
1189         bool ssv, last;
1190
1191         sid = evt[0] >> PRIQ_0_SID_SHIFT & PRIQ_0_SID_MASK;
1192         ssv = evt[0] & PRIQ_0_SSID_V;
1193         ssid = ssv ? evt[0] >> PRIQ_0_SSID_SHIFT & PRIQ_0_SSID_MASK : 0;
1194         last = evt[0] & PRIQ_0_PRG_LAST;
1195         grpid = evt[1] >> PRIQ_1_PRG_IDX_SHIFT & PRIQ_1_PRG_IDX_MASK;
1196
1197         dev_info(smmu->dev, "unexpected PRI request received:\n");
1198         dev_info(smmu->dev,
1199                  "\tsid 0x%08x.0x%05x: [%u%s] %sprivileged %s%s%s access at iova 0x%016llx\n",
1200                  sid, ssid, grpid, last ? "L" : "",
1201                  evt[0] & PRIQ_0_PERM_PRIV ? "" : "un",
1202                  evt[0] & PRIQ_0_PERM_READ ? "R" : "",
1203                  evt[0] & PRIQ_0_PERM_WRITE ? "W" : "",
1204                  evt[0] & PRIQ_0_PERM_EXEC ? "X" : "",
1205                  evt[1] & PRIQ_1_ADDR_MASK << PRIQ_1_ADDR_SHIFT);
1206
1207         if (last) {
1208                 struct arm_smmu_cmdq_ent cmd = {
1209                         .opcode                 = CMDQ_OP_PRI_RESP,
1210                         .substream_valid        = ssv,
1211                         .pri                    = {
1212                                 .sid    = sid,
1213                                 .ssid   = ssid,
1214                                 .grpid  = grpid,
1215                                 .resp   = PRI_RESP_DENY,
1216                         },
1217                 };
1218
1219                 arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1220         }
1221 }
1222
1223 static irqreturn_t arm_smmu_priq_thread(int irq, void *dev)
1224 {
1225         struct arm_smmu_device *smmu = dev;
1226         struct arm_smmu_queue *q = &smmu->priq.q;
1227         u64 evt[PRIQ_ENT_DWORDS];
1228
1229         do {
1230                 while (!queue_remove_raw(q, evt))
1231                         arm_smmu_handle_ppr(smmu, evt);
1232
1233                 if (queue_sync_prod(q) == -EOVERFLOW)
1234                         dev_err(smmu->dev, "PRIQ overflow detected -- requests lost\n");
1235         } while (!queue_empty(q));
1236
1237         /* Sync our overflow flag, as we believe we're up to speed */
1238         q->cons = Q_OVF(q, q->prod) | Q_WRP(q, q->cons) | Q_IDX(q, q->cons);
1239         return IRQ_HANDLED;
1240 }
1241
1242 static irqreturn_t arm_smmu_cmdq_sync_handler(int irq, void *dev)
1243 {
1244         /* We don't actually use CMD_SYNC interrupts for anything */
1245         return IRQ_HANDLED;
1246 }
1247
1248 static int arm_smmu_device_disable(struct arm_smmu_device *smmu);
1249
1250 static irqreturn_t arm_smmu_gerror_handler(int irq, void *dev)
1251 {
1252         u32 gerror, gerrorn, active;
1253         struct arm_smmu_device *smmu = dev;
1254
1255         gerror = readl_relaxed(smmu->base + ARM_SMMU_GERROR);
1256         gerrorn = readl_relaxed(smmu->base + ARM_SMMU_GERRORN);
1257
1258         active = gerror ^ gerrorn;
1259         if (!(active & GERROR_ERR_MASK))
1260                 return IRQ_NONE; /* No errors pending */
1261
1262         dev_warn(smmu->dev,
1263                  "unexpected global error reported (0x%08x), this could be serious\n",
1264                  active);
1265
1266         if (active & GERROR_SFM_ERR) {
1267                 dev_err(smmu->dev, "device has entered Service Failure Mode!\n");
1268                 arm_smmu_device_disable(smmu);
1269         }
1270
1271         if (active & GERROR_MSI_GERROR_ABT_ERR)
1272                 dev_warn(smmu->dev, "GERROR MSI write aborted\n");
1273
1274         if (active & GERROR_MSI_PRIQ_ABT_ERR)
1275                 dev_warn(smmu->dev, "PRIQ MSI write aborted\n");
1276
1277         if (active & GERROR_MSI_EVTQ_ABT_ERR)
1278                 dev_warn(smmu->dev, "EVTQ MSI write aborted\n");
1279
1280         if (active & GERROR_MSI_CMDQ_ABT_ERR) {
1281                 dev_warn(smmu->dev, "CMDQ MSI write aborted\n");
1282                 arm_smmu_cmdq_sync_handler(irq, smmu->dev);
1283         }
1284
1285         if (active & GERROR_PRIQ_ABT_ERR)
1286                 dev_err(smmu->dev, "PRIQ write aborted -- events may have been lost\n");
1287
1288         if (active & GERROR_EVTQ_ABT_ERR)
1289                 dev_err(smmu->dev, "EVTQ write aborted -- events may have been lost\n");
1290
1291         if (active & GERROR_CMDQ_ERR)
1292                 arm_smmu_cmdq_skip_err(smmu);
1293
1294         writel(gerror, smmu->base + ARM_SMMU_GERRORN);
1295         return IRQ_HANDLED;
1296 }
1297
1298 /* IO_PGTABLE API */
1299 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu)
1300 {
1301         struct arm_smmu_cmdq_ent cmd;
1302
1303         cmd.opcode = CMDQ_OP_CMD_SYNC;
1304         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1305 }
1306
1307 static void arm_smmu_tlb_sync(void *cookie)
1308 {
1309         struct arm_smmu_domain *smmu_domain = cookie;
1310         __arm_smmu_tlb_sync(smmu_domain->smmu);
1311 }
1312
1313 static void arm_smmu_tlb_inv_context(void *cookie)
1314 {
1315         struct arm_smmu_domain *smmu_domain = cookie;
1316         struct arm_smmu_device *smmu = smmu_domain->smmu;
1317         struct arm_smmu_cmdq_ent cmd;
1318
1319         if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1320                 cmd.opcode      = CMDQ_OP_TLBI_NH_ASID;
1321                 cmd.tlbi.asid   = smmu_domain->s1_cfg.cd.asid;
1322                 cmd.tlbi.vmid   = 0;
1323         } else {
1324                 cmd.opcode      = CMDQ_OP_TLBI_S12_VMALL;
1325                 cmd.tlbi.vmid   = smmu_domain->s2_cfg.vmid;
1326         }
1327
1328         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1329         __arm_smmu_tlb_sync(smmu);
1330 }
1331
1332 static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
1333                                           size_t granule, bool leaf, void *cookie)
1334 {
1335         struct arm_smmu_domain *smmu_domain = cookie;
1336         struct arm_smmu_device *smmu = smmu_domain->smmu;
1337         struct arm_smmu_cmdq_ent cmd = {
1338                 .tlbi = {
1339                         .leaf   = leaf,
1340                         .addr   = iova,
1341                 },
1342         };
1343
1344         if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1345                 cmd.opcode      = CMDQ_OP_TLBI_NH_VA;
1346                 cmd.tlbi.asid   = smmu_domain->s1_cfg.cd.asid;
1347         } else {
1348                 cmd.opcode      = CMDQ_OP_TLBI_S2_IPA;
1349                 cmd.tlbi.vmid   = smmu_domain->s2_cfg.vmid;
1350         }
1351
1352         do {
1353                 arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1354                 cmd.tlbi.addr += granule;
1355         } while (size -= granule);
1356 }
1357
1358 static const struct iommu_gather_ops arm_smmu_gather_ops = {
1359         .tlb_flush_all  = arm_smmu_tlb_inv_context,
1360         .tlb_add_flush  = arm_smmu_tlb_inv_range_nosync,
1361         .tlb_sync       = arm_smmu_tlb_sync,
1362 };
1363
1364 /* IOMMU API */
1365 static bool arm_smmu_capable(enum iommu_cap cap)
1366 {
1367         switch (cap) {
1368         case IOMMU_CAP_CACHE_COHERENCY:
1369                 return true;
1370         case IOMMU_CAP_INTR_REMAP:
1371                 return true; /* MSIs are just memory writes */
1372         case IOMMU_CAP_NOEXEC:
1373                 return true;
1374         default:
1375                 return false;
1376         }
1377 }
1378
1379 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
1380 {
1381         struct arm_smmu_domain *smmu_domain;
1382
1383         if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1384                 return NULL;
1385
1386         /*
1387          * Allocate the domain and initialise some of its data structures.
1388          * We can't really do anything meaningful until we've added a
1389          * master.
1390          */
1391         smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
1392         if (!smmu_domain)
1393                 return NULL;
1394
1395         if (type == IOMMU_DOMAIN_DMA &&
1396             iommu_get_dma_cookie(&smmu_domain->domain)) {
1397                 kfree(smmu_domain);
1398                 return NULL;
1399         }
1400
1401         mutex_init(&smmu_domain->init_mutex);
1402         spin_lock_init(&smmu_domain->pgtbl_lock);
1403         return &smmu_domain->domain;
1404 }
1405
1406 static int arm_smmu_bitmap_alloc(unsigned long *map, int span)
1407 {
1408         int idx, size = 1 << span;
1409
1410         do {
1411                 idx = find_first_zero_bit(map, size);
1412                 if (idx == size)
1413                         return -ENOSPC;
1414         } while (test_and_set_bit(idx, map));
1415
1416         return idx;
1417 }
1418
1419 static void arm_smmu_bitmap_free(unsigned long *map, int idx)
1420 {
1421         clear_bit(idx, map);
1422 }
1423
1424 static void arm_smmu_domain_free(struct iommu_domain *domain)
1425 {
1426         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1427         struct arm_smmu_device *smmu = smmu_domain->smmu;
1428
1429         iommu_put_dma_cookie(domain);
1430         free_io_pgtable_ops(smmu_domain->pgtbl_ops);
1431
1432         /* Free the CD and ASID, if we allocated them */
1433         if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1434                 struct arm_smmu_s1_cfg *cfg = &smmu_domain->s1_cfg;
1435
1436                 if (cfg->cdptr) {
1437                         dmam_free_coherent(smmu_domain->smmu->dev,
1438                                            CTXDESC_CD_DWORDS << 3,
1439                                            cfg->cdptr,
1440                                            cfg->cdptr_dma);
1441
1442                         arm_smmu_bitmap_free(smmu->asid_map, cfg->cd.asid);
1443                 }
1444         } else {
1445                 struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg;
1446                 if (cfg->vmid)
1447                         arm_smmu_bitmap_free(smmu->vmid_map, cfg->vmid);
1448         }
1449
1450         kfree(smmu_domain);
1451 }
1452
1453 static int arm_smmu_domain_finalise_s1(struct arm_smmu_domain *smmu_domain,
1454                                        struct io_pgtable_cfg *pgtbl_cfg)
1455 {
1456         int ret;
1457         int asid;
1458         struct arm_smmu_device *smmu = smmu_domain->smmu;
1459         struct arm_smmu_s1_cfg *cfg = &smmu_domain->s1_cfg;
1460
1461         asid = arm_smmu_bitmap_alloc(smmu->asid_map, smmu->asid_bits);
1462         if (asid < 0)
1463                 return asid;
1464
1465         cfg->cdptr = dmam_alloc_coherent(smmu->dev, CTXDESC_CD_DWORDS << 3,
1466                                          &cfg->cdptr_dma,
1467                                          GFP_KERNEL | __GFP_ZERO);
1468         if (!cfg->cdptr) {
1469                 dev_warn(smmu->dev, "failed to allocate context descriptor\n");
1470                 ret = -ENOMEM;
1471                 goto out_free_asid;
1472         }
1473
1474         cfg->cd.asid    = (u16)asid;
1475         cfg->cd.ttbr    = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
1476         cfg->cd.tcr     = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
1477         cfg->cd.mair    = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
1478         return 0;
1479
1480 out_free_asid:
1481         arm_smmu_bitmap_free(smmu->asid_map, asid);
1482         return ret;
1483 }
1484
1485 static int arm_smmu_domain_finalise_s2(struct arm_smmu_domain *smmu_domain,
1486                                        struct io_pgtable_cfg *pgtbl_cfg)
1487 {
1488         int vmid;
1489         struct arm_smmu_device *smmu = smmu_domain->smmu;
1490         struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg;
1491
1492         vmid = arm_smmu_bitmap_alloc(smmu->vmid_map, smmu->vmid_bits);
1493         if (vmid < 0)
1494                 return vmid;
1495
1496         cfg->vmid       = (u16)vmid;
1497         cfg->vttbr      = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
1498         cfg->vtcr       = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
1499         return 0;
1500 }
1501
1502 static int arm_smmu_domain_finalise(struct iommu_domain *domain)
1503 {
1504         int ret;
1505         unsigned long ias, oas;
1506         enum io_pgtable_fmt fmt;
1507         struct io_pgtable_cfg pgtbl_cfg;
1508         struct io_pgtable_ops *pgtbl_ops;
1509         int (*finalise_stage_fn)(struct arm_smmu_domain *,
1510                                  struct io_pgtable_cfg *);
1511         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1512         struct arm_smmu_device *smmu = smmu_domain->smmu;
1513
1514         /* Restrict the stage to what we can actually support */
1515         if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
1516                 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
1517         if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
1518                 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1519
1520         switch (smmu_domain->stage) {
1521         case ARM_SMMU_DOMAIN_S1:
1522                 ias = VA_BITS;
1523                 oas = smmu->ias;
1524                 fmt = ARM_64_LPAE_S1;
1525                 finalise_stage_fn = arm_smmu_domain_finalise_s1;
1526                 break;
1527         case ARM_SMMU_DOMAIN_NESTED:
1528         case ARM_SMMU_DOMAIN_S2:
1529                 ias = smmu->ias;
1530                 oas = smmu->oas;
1531                 fmt = ARM_64_LPAE_S2;
1532                 finalise_stage_fn = arm_smmu_domain_finalise_s2;
1533                 break;
1534         default:
1535                 return -EINVAL;
1536         }
1537
1538         pgtbl_cfg = (struct io_pgtable_cfg) {
1539                 .pgsize_bitmap  = smmu->pgsize_bitmap,
1540                 .ias            = ias,
1541                 .oas            = oas,
1542                 .tlb            = &arm_smmu_gather_ops,
1543                 .iommu_dev      = smmu->dev,
1544         };
1545
1546         pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
1547         if (!pgtbl_ops)
1548                 return -ENOMEM;
1549
1550         domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
1551         domain->geometry.aperture_end = (1UL << ias) - 1;
1552         domain->geometry.force_aperture = true;
1553         smmu_domain->pgtbl_ops = pgtbl_ops;
1554
1555         ret = finalise_stage_fn(smmu_domain, &pgtbl_cfg);
1556         if (ret < 0)
1557                 free_io_pgtable_ops(pgtbl_ops);
1558
1559         return ret;
1560 }
1561
1562 static __le64 *arm_smmu_get_step_for_sid(struct arm_smmu_device *smmu, u32 sid)
1563 {
1564         __le64 *step;
1565         struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
1566
1567         if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) {
1568                 struct arm_smmu_strtab_l1_desc *l1_desc;
1569                 int idx;
1570
1571                 /* Two-level walk */
1572                 idx = (sid >> STRTAB_SPLIT) * STRTAB_L1_DESC_DWORDS;
1573                 l1_desc = &cfg->l1_desc[idx];
1574                 idx = (sid & ((1 << STRTAB_SPLIT) - 1)) * STRTAB_STE_DWORDS;
1575                 step = &l1_desc->l2ptr[idx];
1576         } else {
1577                 /* Simple linear lookup */
1578                 step = &cfg->strtab[sid * STRTAB_STE_DWORDS];
1579         }
1580
1581         return step;
1582 }
1583
1584 static int arm_smmu_install_ste_for_dev(struct iommu_fwspec *fwspec)
1585 {
1586         int i;
1587         struct arm_smmu_master_data *master = fwspec->iommu_priv;
1588         struct arm_smmu_device *smmu = master->smmu;
1589
1590         for (i = 0; i < fwspec->num_ids; ++i) {
1591                 u32 sid = fwspec->ids[i];
1592                 __le64 *step = arm_smmu_get_step_for_sid(smmu, sid);
1593
1594                 arm_smmu_write_strtab_ent(smmu, sid, step, &master->ste);
1595         }
1596
1597         return 0;
1598 }
1599
1600 static void arm_smmu_detach_dev(struct device *dev)
1601 {
1602         struct arm_smmu_master_data *master = dev->iommu_fwspec->iommu_priv;
1603
1604         master->ste.bypass = true;
1605         if (arm_smmu_install_ste_for_dev(dev->iommu_fwspec) < 0)
1606                 dev_warn(dev, "failed to install bypass STE\n");
1607 }
1608
1609 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1610 {
1611         int ret = 0;
1612         struct arm_smmu_device *smmu;
1613         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1614         struct arm_smmu_master_data *master;
1615         struct arm_smmu_strtab_ent *ste;
1616
1617         if (!dev->iommu_fwspec)
1618                 return -ENOENT;
1619
1620         master = dev->iommu_fwspec->iommu_priv;
1621         smmu = master->smmu;
1622         ste = &master->ste;
1623
1624         /* Already attached to a different domain? */
1625         if (!ste->bypass)
1626                 arm_smmu_detach_dev(dev);
1627
1628         mutex_lock(&smmu_domain->init_mutex);
1629
1630         if (!smmu_domain->smmu) {
1631                 smmu_domain->smmu = smmu;
1632                 ret = arm_smmu_domain_finalise(domain);
1633                 if (ret) {
1634                         smmu_domain->smmu = NULL;
1635                         goto out_unlock;
1636                 }
1637         } else if (smmu_domain->smmu != smmu) {
1638                 dev_err(dev,
1639                         "cannot attach to SMMU %s (upstream of %s)\n",
1640                         dev_name(smmu_domain->smmu->dev),
1641                         dev_name(smmu->dev));
1642                 ret = -ENXIO;
1643                 goto out_unlock;
1644         }
1645
1646         ste->bypass = false;
1647         ste->valid = true;
1648
1649         if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1650                 ste->s1_cfg = &smmu_domain->s1_cfg;
1651                 ste->s2_cfg = NULL;
1652                 arm_smmu_write_ctx_desc(smmu, ste->s1_cfg);
1653         } else {
1654                 ste->s1_cfg = NULL;
1655                 ste->s2_cfg = &smmu_domain->s2_cfg;
1656         }
1657
1658         ret = arm_smmu_install_ste_for_dev(dev->iommu_fwspec);
1659         if (ret < 0)
1660                 ste->valid = false;
1661
1662 out_unlock:
1663         mutex_unlock(&smmu_domain->init_mutex);
1664         return ret;
1665 }
1666
1667 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1668                         phys_addr_t paddr, size_t size, int prot)
1669 {
1670         int ret;
1671         unsigned long flags;
1672         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1673         struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1674
1675         if (!ops)
1676                 return -ENODEV;
1677
1678         spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1679         ret = ops->map(ops, iova, paddr, size, prot);
1680         spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1681         return ret;
1682 }
1683
1684 static size_t
1685 arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova, size_t size)
1686 {
1687         size_t ret;
1688         unsigned long flags;
1689         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1690         struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1691
1692         if (!ops)
1693                 return 0;
1694
1695         spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1696         ret = ops->unmap(ops, iova, size);
1697         spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1698         return ret;
1699 }
1700
1701 static phys_addr_t
1702 arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
1703 {
1704         phys_addr_t ret;
1705         unsigned long flags;
1706         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1707         struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1708
1709         if (!ops)
1710                 return 0;
1711
1712         spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1713         ret = ops->iova_to_phys(ops, iova);
1714         spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1715
1716         return ret;
1717 }
1718
1719 static struct platform_driver arm_smmu_driver;
1720
1721 static int arm_smmu_match_node(struct device *dev, void *data)
1722 {
1723         return dev->fwnode == data;
1724 }
1725
1726 static
1727 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
1728 {
1729         struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
1730                                                 fwnode, arm_smmu_match_node);
1731         put_device(dev);
1732         return dev ? dev_get_drvdata(dev) : NULL;
1733 }
1734
1735 static bool arm_smmu_sid_in_range(struct arm_smmu_device *smmu, u32 sid)
1736 {
1737         unsigned long limit = smmu->strtab_cfg.num_l1_ents;
1738
1739         if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB)
1740                 limit *= 1UL << STRTAB_SPLIT;
1741
1742         return sid < limit;
1743 }
1744
1745 static struct iommu_ops arm_smmu_ops;
1746
1747 static int arm_smmu_add_device(struct device *dev)
1748 {
1749         int i, ret;
1750         struct arm_smmu_device *smmu;
1751         struct arm_smmu_master_data *master;
1752         struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1753         struct iommu_group *group;
1754
1755         if (!fwspec || fwspec->ops != &arm_smmu_ops)
1756                 return -ENODEV;
1757         /*
1758          * We _can_ actually withstand dodgy bus code re-calling add_device()
1759          * without an intervening remove_device()/of_xlate() sequence, but
1760          * we're not going to do so quietly...
1761          */
1762         if (WARN_ON_ONCE(fwspec->iommu_priv)) {
1763                 master = fwspec->iommu_priv;
1764                 smmu = master->smmu;
1765         } else {
1766                 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
1767                 if (!smmu)
1768                         return -ENODEV;
1769                 master = kzalloc(sizeof(*master), GFP_KERNEL);
1770                 if (!master)
1771                         return -ENOMEM;
1772
1773                 master->smmu = smmu;
1774                 fwspec->iommu_priv = master;
1775         }
1776
1777         /* Check the SIDs are in range of the SMMU and our stream table */
1778         for (i = 0; i < fwspec->num_ids; i++) {
1779                 u32 sid = fwspec->ids[i];
1780
1781                 if (!arm_smmu_sid_in_range(smmu, sid))
1782                         return -ERANGE;
1783
1784                 /* Ensure l2 strtab is initialised */
1785                 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) {
1786                         ret = arm_smmu_init_l2_strtab(smmu, sid);
1787                         if (ret)
1788                                 return ret;
1789                 }
1790         }
1791
1792         group = iommu_group_get_for_dev(dev);
1793         if (!IS_ERR(group))
1794                 iommu_group_put(group);
1795
1796         return PTR_ERR_OR_ZERO(group);
1797 }
1798
1799 static void arm_smmu_remove_device(struct device *dev)
1800 {
1801         struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1802         struct arm_smmu_master_data *master;
1803
1804         if (!fwspec || fwspec->ops != &arm_smmu_ops)
1805                 return;
1806
1807         master = fwspec->iommu_priv;
1808         if (master && master->ste.valid)
1809                 arm_smmu_detach_dev(dev);
1810         iommu_group_remove_device(dev);
1811         kfree(master);
1812         iommu_fwspec_free(dev);
1813 }
1814
1815 static struct iommu_group *arm_smmu_device_group(struct device *dev)
1816 {
1817         struct iommu_group *group;
1818
1819         /*
1820          * We don't support devices sharing stream IDs other than PCI RID
1821          * aliases, since the necessary ID-to-device lookup becomes rather
1822          * impractical given a potential sparse 32-bit stream ID space.
1823          */
1824         if (dev_is_pci(dev))
1825                 group = pci_device_group(dev);
1826         else
1827                 group = generic_device_group(dev);
1828
1829         return group;
1830 }
1831
1832 static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1833                                     enum iommu_attr attr, void *data)
1834 {
1835         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1836
1837         switch (attr) {
1838         case DOMAIN_ATTR_NESTING:
1839                 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1840                 return 0;
1841         default:
1842                 return -ENODEV;
1843         }
1844 }
1845
1846 static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1847                                     enum iommu_attr attr, void *data)
1848 {
1849         int ret = 0;
1850         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1851
1852         mutex_lock(&smmu_domain->init_mutex);
1853
1854         switch (attr) {
1855         case DOMAIN_ATTR_NESTING:
1856                 if (smmu_domain->smmu) {
1857                         ret = -EPERM;
1858                         goto out_unlock;
1859                 }
1860
1861                 if (*(int *)data)
1862                         smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1863                 else
1864                         smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1865
1866                 break;
1867         default:
1868                 ret = -ENODEV;
1869         }
1870
1871 out_unlock:
1872         mutex_unlock(&smmu_domain->init_mutex);
1873         return ret;
1874 }
1875
1876 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1877 {
1878         return iommu_fwspec_add_ids(dev, args->args, 1);
1879 }
1880
1881 static struct iommu_ops arm_smmu_ops = {
1882         .capable                = arm_smmu_capable,
1883         .domain_alloc           = arm_smmu_domain_alloc,
1884         .domain_free            = arm_smmu_domain_free,
1885         .attach_dev             = arm_smmu_attach_dev,
1886         .map                    = arm_smmu_map,
1887         .unmap                  = arm_smmu_unmap,
1888         .map_sg                 = default_iommu_map_sg,
1889         .iova_to_phys           = arm_smmu_iova_to_phys,
1890         .add_device             = arm_smmu_add_device,
1891         .remove_device          = arm_smmu_remove_device,
1892         .device_group           = arm_smmu_device_group,
1893         .domain_get_attr        = arm_smmu_domain_get_attr,
1894         .domain_set_attr        = arm_smmu_domain_set_attr,
1895         .of_xlate               = arm_smmu_of_xlate,
1896         .pgsize_bitmap          = -1UL, /* Restricted during device attach */
1897 };
1898
1899 /* Probing and initialisation functions */
1900 static int arm_smmu_init_one_queue(struct arm_smmu_device *smmu,
1901                                    struct arm_smmu_queue *q,
1902                                    unsigned long prod_off,
1903                                    unsigned long cons_off,
1904                                    size_t dwords)
1905 {
1906         size_t qsz = ((1 << q->max_n_shift) * dwords) << 3;
1907
1908         q->base = dmam_alloc_coherent(smmu->dev, qsz, &q->base_dma, GFP_KERNEL);
1909         if (!q->base) {
1910                 dev_err(smmu->dev, "failed to allocate queue (0x%zx bytes)\n",
1911                         qsz);
1912                 return -ENOMEM;
1913         }
1914
1915         q->prod_reg     = smmu->base + prod_off;
1916         q->cons_reg     = smmu->base + cons_off;
1917         q->ent_dwords   = dwords;
1918
1919         q->q_base  = Q_BASE_RWA;
1920         q->q_base |= q->base_dma & Q_BASE_ADDR_MASK << Q_BASE_ADDR_SHIFT;
1921         q->q_base |= (q->max_n_shift & Q_BASE_LOG2SIZE_MASK)
1922                      << Q_BASE_LOG2SIZE_SHIFT;
1923
1924         q->prod = q->cons = 0;
1925         return 0;
1926 }
1927
1928 static int arm_smmu_init_queues(struct arm_smmu_device *smmu)
1929 {
1930         int ret;
1931
1932         /* cmdq */
1933         spin_lock_init(&smmu->cmdq.lock);
1934         ret = arm_smmu_init_one_queue(smmu, &smmu->cmdq.q, ARM_SMMU_CMDQ_PROD,
1935                                       ARM_SMMU_CMDQ_CONS, CMDQ_ENT_DWORDS);
1936         if (ret)
1937                 return ret;
1938
1939         /* evtq */
1940         ret = arm_smmu_init_one_queue(smmu, &smmu->evtq.q, ARM_SMMU_EVTQ_PROD,
1941                                       ARM_SMMU_EVTQ_CONS, EVTQ_ENT_DWORDS);
1942         if (ret)
1943                 return ret;
1944
1945         /* priq */
1946         if (!(smmu->features & ARM_SMMU_FEAT_PRI))
1947                 return 0;
1948
1949         return arm_smmu_init_one_queue(smmu, &smmu->priq.q, ARM_SMMU_PRIQ_PROD,
1950                                        ARM_SMMU_PRIQ_CONS, PRIQ_ENT_DWORDS);
1951 }
1952
1953 static int arm_smmu_init_l1_strtab(struct arm_smmu_device *smmu)
1954 {
1955         unsigned int i;
1956         struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
1957         size_t size = sizeof(*cfg->l1_desc) * cfg->num_l1_ents;
1958         void *strtab = smmu->strtab_cfg.strtab;
1959
1960         cfg->l1_desc = devm_kzalloc(smmu->dev, size, GFP_KERNEL);
1961         if (!cfg->l1_desc) {
1962                 dev_err(smmu->dev, "failed to allocate l1 stream table desc\n");
1963                 return -ENOMEM;
1964         }
1965
1966         for (i = 0; i < cfg->num_l1_ents; ++i) {
1967                 arm_smmu_write_strtab_l1_desc(strtab, &cfg->l1_desc[i]);
1968                 strtab += STRTAB_L1_DESC_DWORDS << 3;
1969         }
1970
1971         return 0;
1972 }
1973
1974 static int arm_smmu_init_strtab_2lvl(struct arm_smmu_device *smmu)
1975 {
1976         void *strtab;
1977         u64 reg;
1978         u32 size, l1size;
1979         struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
1980
1981         /*
1982          * If we can resolve everything with a single L2 table, then we
1983          * just need a single L1 descriptor. Otherwise, calculate the L1
1984          * size, capped to the SIDSIZE.
1985          */
1986         if (smmu->sid_bits < STRTAB_SPLIT) {
1987                 size = 0;
1988         } else {
1989                 size = STRTAB_L1_SZ_SHIFT - (ilog2(STRTAB_L1_DESC_DWORDS) + 3);
1990                 size = min(size, smmu->sid_bits - STRTAB_SPLIT);
1991         }
1992         cfg->num_l1_ents = 1 << size;
1993
1994         size += STRTAB_SPLIT;
1995         if (size < smmu->sid_bits)
1996                 dev_warn(smmu->dev,
1997                          "2-level strtab only covers %u/%u bits of SID\n",
1998                          size, smmu->sid_bits);
1999
2000         l1size = cfg->num_l1_ents * (STRTAB_L1_DESC_DWORDS << 3);
2001         strtab = dmam_alloc_coherent(smmu->dev, l1size, &cfg->strtab_dma,
2002                                      GFP_KERNEL | __GFP_ZERO);
2003         if (!strtab) {
2004                 dev_err(smmu->dev,
2005                         "failed to allocate l1 stream table (%u bytes)\n",
2006                         size);
2007                 return -ENOMEM;
2008         }
2009         cfg->strtab = strtab;
2010
2011         /* Configure strtab_base_cfg for 2 levels */
2012         reg  = STRTAB_BASE_CFG_FMT_2LVL;
2013         reg |= (size & STRTAB_BASE_CFG_LOG2SIZE_MASK)
2014                 << STRTAB_BASE_CFG_LOG2SIZE_SHIFT;
2015         reg |= (STRTAB_SPLIT & STRTAB_BASE_CFG_SPLIT_MASK)
2016                 << STRTAB_BASE_CFG_SPLIT_SHIFT;
2017         cfg->strtab_base_cfg = reg;
2018
2019         return arm_smmu_init_l1_strtab(smmu);
2020 }
2021
2022 static int arm_smmu_init_strtab_linear(struct arm_smmu_device *smmu)
2023 {
2024         void *strtab;
2025         u64 reg;
2026         u32 size;
2027         struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
2028
2029         size = (1 << smmu->sid_bits) * (STRTAB_STE_DWORDS << 3);
2030         strtab = dmam_alloc_coherent(smmu->dev, size, &cfg->strtab_dma,
2031                                      GFP_KERNEL | __GFP_ZERO);
2032         if (!strtab) {
2033                 dev_err(smmu->dev,
2034                         "failed to allocate linear stream table (%u bytes)\n",
2035                         size);
2036                 return -ENOMEM;
2037         }
2038         cfg->strtab = strtab;
2039         cfg->num_l1_ents = 1 << smmu->sid_bits;
2040
2041         /* Configure strtab_base_cfg for a linear table covering all SIDs */
2042         reg  = STRTAB_BASE_CFG_FMT_LINEAR;
2043         reg |= (smmu->sid_bits & STRTAB_BASE_CFG_LOG2SIZE_MASK)
2044                 << STRTAB_BASE_CFG_LOG2SIZE_SHIFT;
2045         cfg->strtab_base_cfg = reg;
2046
2047         arm_smmu_init_bypass_stes(strtab, cfg->num_l1_ents);
2048         return 0;
2049 }
2050
2051 static int arm_smmu_init_strtab(struct arm_smmu_device *smmu)
2052 {
2053         u64 reg;
2054         int ret;
2055
2056         if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB)
2057                 ret = arm_smmu_init_strtab_2lvl(smmu);
2058         else
2059                 ret = arm_smmu_init_strtab_linear(smmu);
2060
2061         if (ret)
2062                 return ret;
2063
2064         /* Set the strtab base address */
2065         reg  = smmu->strtab_cfg.strtab_dma &
2066                STRTAB_BASE_ADDR_MASK << STRTAB_BASE_ADDR_SHIFT;
2067         reg |= STRTAB_BASE_RA;
2068         smmu->strtab_cfg.strtab_base = reg;
2069
2070         /* Allocate the first VMID for stage-2 bypass STEs */
2071         set_bit(0, smmu->vmid_map);
2072         return 0;
2073 }
2074
2075 static int arm_smmu_init_structures(struct arm_smmu_device *smmu)
2076 {
2077         int ret;
2078
2079         ret = arm_smmu_init_queues(smmu);
2080         if (ret)
2081                 return ret;
2082
2083         return arm_smmu_init_strtab(smmu);
2084 }
2085
2086 static int arm_smmu_write_reg_sync(struct arm_smmu_device *smmu, u32 val,
2087                                    unsigned int reg_off, unsigned int ack_off)
2088 {
2089         u32 reg;
2090
2091         writel_relaxed(val, smmu->base + reg_off);
2092         return readl_relaxed_poll_timeout(smmu->base + ack_off, reg, reg == val,
2093                                           1, ARM_SMMU_POLL_TIMEOUT_US);
2094 }
2095
2096 /* GBPA is "special" */
2097 static int arm_smmu_update_gbpa(struct arm_smmu_device *smmu, u32 set, u32 clr)
2098 {
2099         int ret;
2100         u32 reg, __iomem *gbpa = smmu->base + ARM_SMMU_GBPA;
2101
2102         ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE),
2103                                          1, ARM_SMMU_POLL_TIMEOUT_US);
2104         if (ret)
2105                 return ret;
2106
2107         reg &= ~clr;
2108         reg |= set;
2109         writel_relaxed(reg | GBPA_UPDATE, gbpa);
2110         return readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE),
2111                                           1, ARM_SMMU_POLL_TIMEOUT_US);
2112 }
2113
2114 static void arm_smmu_free_msis(void *data)
2115 {
2116         struct device *dev = data;
2117         platform_msi_domain_free_irqs(dev);
2118 }
2119
2120 static void arm_smmu_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg)
2121 {
2122         phys_addr_t doorbell;
2123         struct device *dev = msi_desc_to_dev(desc);
2124         struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2125         phys_addr_t *cfg = arm_smmu_msi_cfg[desc->platform.msi_index];
2126
2127         doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo;
2128         doorbell &= MSI_CFG0_ADDR_MASK << MSI_CFG0_ADDR_SHIFT;
2129
2130         writeq_relaxed(doorbell, smmu->base + cfg[0]);
2131         writel_relaxed(msg->data, smmu->base + cfg[1]);
2132         writel_relaxed(MSI_CFG2_MEMATTR_DEVICE_nGnRE, smmu->base + cfg[2]);
2133 }
2134
2135 static void arm_smmu_setup_msis(struct arm_smmu_device *smmu)
2136 {
2137         struct msi_desc *desc;
2138         int ret, nvec = ARM_SMMU_MAX_MSIS;
2139         struct device *dev = smmu->dev;
2140
2141         /* Clear the MSI address regs */
2142         writeq_relaxed(0, smmu->base + ARM_SMMU_GERROR_IRQ_CFG0);
2143         writeq_relaxed(0, smmu->base + ARM_SMMU_EVTQ_IRQ_CFG0);
2144
2145         if (smmu->features & ARM_SMMU_FEAT_PRI)
2146                 writeq_relaxed(0, smmu->base + ARM_SMMU_PRIQ_IRQ_CFG0);
2147         else
2148                 nvec--;
2149
2150         if (!(smmu->features & ARM_SMMU_FEAT_MSI))
2151                 return;
2152
2153         /* Allocate MSIs for evtq, gerror and priq. Ignore cmdq */
2154         ret = platform_msi_domain_alloc_irqs(dev, nvec, arm_smmu_write_msi_msg);
2155         if (ret) {
2156                 dev_warn(dev, "failed to allocate MSIs\n");
2157                 return;
2158         }
2159
2160         for_each_msi_entry(desc, dev) {
2161                 switch (desc->platform.msi_index) {
2162                 case EVTQ_MSI_INDEX:
2163                         smmu->evtq.q.irq = desc->irq;
2164                         break;
2165                 case GERROR_MSI_INDEX:
2166                         smmu->gerr_irq = desc->irq;
2167                         break;
2168                 case PRIQ_MSI_INDEX:
2169                         smmu->priq.q.irq = desc->irq;
2170                         break;
2171                 default:        /* Unknown */
2172                         continue;
2173                 }
2174         }
2175
2176         /* Add callback to free MSIs on teardown */
2177         devm_add_action(dev, arm_smmu_free_msis, dev);
2178 }
2179
2180 static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu)
2181 {
2182         int ret, irq;
2183         u32 irqen_flags = IRQ_CTRL_EVTQ_IRQEN | IRQ_CTRL_GERROR_IRQEN;
2184
2185         /* Disable IRQs first */
2186         ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_IRQ_CTRL,
2187                                       ARM_SMMU_IRQ_CTRLACK);
2188         if (ret) {
2189                 dev_err(smmu->dev, "failed to disable irqs\n");
2190                 return ret;
2191         }
2192
2193         arm_smmu_setup_msis(smmu);
2194
2195         /* Request interrupt lines */
2196         irq = smmu->evtq.q.irq;
2197         if (irq) {
2198                 ret = devm_request_threaded_irq(smmu->dev, irq, NULL,
2199                                                 arm_smmu_evtq_thread,
2200                                                 IRQF_ONESHOT,
2201                                                 "arm-smmu-v3-evtq", smmu);
2202                 if (ret < 0)
2203                         dev_warn(smmu->dev, "failed to enable evtq irq\n");
2204         }
2205
2206         irq = smmu->cmdq.q.irq;
2207         if (irq) {
2208                 ret = devm_request_irq(smmu->dev, irq,
2209                                        arm_smmu_cmdq_sync_handler, 0,
2210                                        "arm-smmu-v3-cmdq-sync", smmu);
2211                 if (ret < 0)
2212                         dev_warn(smmu->dev, "failed to enable cmdq-sync irq\n");
2213         }
2214
2215         irq = smmu->gerr_irq;
2216         if (irq) {
2217                 ret = devm_request_irq(smmu->dev, irq, arm_smmu_gerror_handler,
2218                                        0, "arm-smmu-v3-gerror", smmu);
2219                 if (ret < 0)
2220                         dev_warn(smmu->dev, "failed to enable gerror irq\n");
2221         }
2222
2223         if (smmu->features & ARM_SMMU_FEAT_PRI) {
2224                 irq = smmu->priq.q.irq;
2225                 if (irq) {
2226                         ret = devm_request_threaded_irq(smmu->dev, irq, NULL,
2227                                                         arm_smmu_priq_thread,
2228                                                         IRQF_ONESHOT,
2229                                                         "arm-smmu-v3-priq",
2230                                                         smmu);
2231                         if (ret < 0)
2232                                 dev_warn(smmu->dev,
2233                                          "failed to enable priq irq\n");
2234                         else
2235                                 irqen_flags |= IRQ_CTRL_PRIQ_IRQEN;
2236                 }
2237         }
2238
2239         /* Enable interrupt generation on the SMMU */
2240         ret = arm_smmu_write_reg_sync(smmu, irqen_flags,
2241                                       ARM_SMMU_IRQ_CTRL, ARM_SMMU_IRQ_CTRLACK);
2242         if (ret)
2243                 dev_warn(smmu->dev, "failed to enable irqs\n");
2244
2245         return 0;
2246 }
2247
2248 static int arm_smmu_device_disable(struct arm_smmu_device *smmu)
2249 {
2250         int ret;
2251
2252         ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_CR0, ARM_SMMU_CR0ACK);
2253         if (ret)
2254                 dev_err(smmu->dev, "failed to clear cr0\n");
2255
2256         return ret;
2257 }
2258
2259 static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass)
2260 {
2261         int ret;
2262         u32 reg, enables;
2263         struct arm_smmu_cmdq_ent cmd;
2264
2265         /* Clear CR0 and sync (disables SMMU and queue processing) */
2266         reg = readl_relaxed(smmu->base + ARM_SMMU_CR0);
2267         if (reg & CR0_SMMUEN)
2268                 dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n");
2269
2270         ret = arm_smmu_device_disable(smmu);
2271         if (ret)
2272                 return ret;
2273
2274         /* CR1 (table and queue memory attributes) */
2275         reg = (CR1_SH_ISH << CR1_TABLE_SH_SHIFT) |
2276               (CR1_CACHE_WB << CR1_TABLE_OC_SHIFT) |
2277               (CR1_CACHE_WB << CR1_TABLE_IC_SHIFT) |
2278               (CR1_SH_ISH << CR1_QUEUE_SH_SHIFT) |
2279               (CR1_CACHE_WB << CR1_QUEUE_OC_SHIFT) |
2280               (CR1_CACHE_WB << CR1_QUEUE_IC_SHIFT);
2281         writel_relaxed(reg, smmu->base + ARM_SMMU_CR1);
2282
2283         /* CR2 (random crap) */
2284         reg = CR2_PTM | CR2_RECINVSID | CR2_E2H;
2285         writel_relaxed(reg, smmu->base + ARM_SMMU_CR2);
2286
2287         /* Stream table */
2288         writeq_relaxed(smmu->strtab_cfg.strtab_base,
2289                        smmu->base + ARM_SMMU_STRTAB_BASE);
2290         writel_relaxed(smmu->strtab_cfg.strtab_base_cfg,
2291                        smmu->base + ARM_SMMU_STRTAB_BASE_CFG);
2292
2293         /* Command queue */
2294         writeq_relaxed(smmu->cmdq.q.q_base, smmu->base + ARM_SMMU_CMDQ_BASE);
2295         writel_relaxed(smmu->cmdq.q.prod, smmu->base + ARM_SMMU_CMDQ_PROD);
2296         writel_relaxed(smmu->cmdq.q.cons, smmu->base + ARM_SMMU_CMDQ_CONS);
2297
2298         enables = CR0_CMDQEN;
2299         ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
2300                                       ARM_SMMU_CR0ACK);
2301         if (ret) {
2302                 dev_err(smmu->dev, "failed to enable command queue\n");
2303                 return ret;
2304         }
2305
2306         /* Invalidate any cached configuration */
2307         cmd.opcode = CMDQ_OP_CFGI_ALL;
2308         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
2309         cmd.opcode = CMDQ_OP_CMD_SYNC;
2310         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
2311
2312         /* Invalidate any stale TLB entries */
2313         if (smmu->features & ARM_SMMU_FEAT_HYP) {
2314                 cmd.opcode = CMDQ_OP_TLBI_EL2_ALL;
2315                 arm_smmu_cmdq_issue_cmd(smmu, &cmd);
2316         }
2317
2318         cmd.opcode = CMDQ_OP_TLBI_NSNH_ALL;
2319         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
2320         cmd.opcode = CMDQ_OP_CMD_SYNC;
2321         arm_smmu_cmdq_issue_cmd(smmu, &cmd);
2322
2323         /* Event queue */
2324         writeq_relaxed(smmu->evtq.q.q_base, smmu->base + ARM_SMMU_EVTQ_BASE);
2325         writel_relaxed(smmu->evtq.q.prod, smmu->base + ARM_SMMU_EVTQ_PROD);
2326         writel_relaxed(smmu->evtq.q.cons, smmu->base + ARM_SMMU_EVTQ_CONS);
2327
2328         enables |= CR0_EVTQEN;
2329         ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
2330                                       ARM_SMMU_CR0ACK);
2331         if (ret) {
2332                 dev_err(smmu->dev, "failed to enable event queue\n");
2333                 return ret;
2334         }
2335
2336         /* PRI queue */
2337         if (smmu->features & ARM_SMMU_FEAT_PRI) {
2338                 writeq_relaxed(smmu->priq.q.q_base,
2339                                smmu->base + ARM_SMMU_PRIQ_BASE);
2340                 writel_relaxed(smmu->priq.q.prod,
2341                                smmu->base + ARM_SMMU_PRIQ_PROD);
2342                 writel_relaxed(smmu->priq.q.cons,
2343                                smmu->base + ARM_SMMU_PRIQ_CONS);
2344
2345                 enables |= CR0_PRIQEN;
2346                 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
2347                                               ARM_SMMU_CR0ACK);
2348                 if (ret) {
2349                         dev_err(smmu->dev, "failed to enable PRI queue\n");
2350                         return ret;
2351                 }
2352         }
2353
2354         ret = arm_smmu_setup_irqs(smmu);
2355         if (ret) {
2356                 dev_err(smmu->dev, "failed to setup irqs\n");
2357                 return ret;
2358         }
2359
2360
2361         /* Enable the SMMU interface, or ensure bypass */
2362         if (!bypass || disable_bypass) {
2363                 enables |= CR0_SMMUEN;
2364         } else {
2365                 ret = arm_smmu_update_gbpa(smmu, 0, GBPA_ABORT);
2366                 if (ret) {
2367                         dev_err(smmu->dev, "GBPA not responding to update\n");
2368                         return ret;
2369                 }
2370         }
2371         ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
2372                                       ARM_SMMU_CR0ACK);
2373         if (ret) {
2374                 dev_err(smmu->dev, "failed to enable SMMU interface\n");
2375                 return ret;
2376         }
2377
2378         return 0;
2379 }
2380
2381 static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu)
2382 {
2383         u32 reg;
2384         bool coherent = smmu->features & ARM_SMMU_FEAT_COHERENCY;
2385
2386         /* IDR0 */
2387         reg = readl_relaxed(smmu->base + ARM_SMMU_IDR0);
2388
2389         /* 2-level structures */
2390         if ((reg & IDR0_ST_LVL_MASK << IDR0_ST_LVL_SHIFT) == IDR0_ST_LVL_2LVL)
2391                 smmu->features |= ARM_SMMU_FEAT_2_LVL_STRTAB;
2392
2393         if (reg & IDR0_CD2L)
2394                 smmu->features |= ARM_SMMU_FEAT_2_LVL_CDTAB;
2395
2396         /*
2397          * Translation table endianness.
2398          * We currently require the same endianness as the CPU, but this
2399          * could be changed later by adding a new IO_PGTABLE_QUIRK.
2400          */
2401         switch (reg & IDR0_TTENDIAN_MASK << IDR0_TTENDIAN_SHIFT) {
2402         case IDR0_TTENDIAN_MIXED:
2403                 smmu->features |= ARM_SMMU_FEAT_TT_LE | ARM_SMMU_FEAT_TT_BE;
2404                 break;
2405 #ifdef __BIG_ENDIAN
2406         case IDR0_TTENDIAN_BE:
2407                 smmu->features |= ARM_SMMU_FEAT_TT_BE;
2408                 break;
2409 #else
2410         case IDR0_TTENDIAN_LE:
2411                 smmu->features |= ARM_SMMU_FEAT_TT_LE;
2412                 break;
2413 #endif
2414         default:
2415                 dev_err(smmu->dev, "unknown/unsupported TT endianness!\n");
2416                 return -ENXIO;
2417         }
2418
2419         /* Boolean feature flags */
2420         if (IS_ENABLED(CONFIG_PCI_PRI) && reg & IDR0_PRI)
2421                 smmu->features |= ARM_SMMU_FEAT_PRI;
2422
2423         if (IS_ENABLED(CONFIG_PCI_ATS) && reg & IDR0_ATS)
2424                 smmu->features |= ARM_SMMU_FEAT_ATS;
2425
2426         if (reg & IDR0_SEV)
2427                 smmu->features |= ARM_SMMU_FEAT_SEV;
2428
2429         if (reg & IDR0_MSI)
2430                 smmu->features |= ARM_SMMU_FEAT_MSI;
2431
2432         if (reg & IDR0_HYP)
2433                 smmu->features |= ARM_SMMU_FEAT_HYP;
2434
2435         /*
2436          * The coherency feature as set by FW is used in preference to the ID
2437          * register, but warn on mismatch.
2438          */
2439         if (!!(reg & IDR0_COHACC) != coherent)
2440                 dev_warn(smmu->dev, "IDR0.COHACC overridden by dma-coherent property (%s)\n",
2441                          coherent ? "true" : "false");
2442
2443         switch (reg & IDR0_STALL_MODEL_MASK << IDR0_STALL_MODEL_SHIFT) {
2444         case IDR0_STALL_MODEL_STALL:
2445                 /* Fallthrough */
2446         case IDR0_STALL_MODEL_FORCE:
2447                 smmu->features |= ARM_SMMU_FEAT_STALLS;
2448         }
2449
2450         if (reg & IDR0_S1P)
2451                 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
2452
2453         if (reg & IDR0_S2P)
2454                 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
2455
2456         if (!(reg & (IDR0_S1P | IDR0_S2P))) {
2457                 dev_err(smmu->dev, "no translation support!\n");
2458                 return -ENXIO;
2459         }
2460
2461         /* We only support the AArch64 table format at present */
2462         switch (reg & IDR0_TTF_MASK << IDR0_TTF_SHIFT) {
2463         case IDR0_TTF_AARCH32_64:
2464                 smmu->ias = 40;
2465                 /* Fallthrough */
2466         case IDR0_TTF_AARCH64:
2467                 break;
2468         default:
2469                 dev_err(smmu->dev, "AArch64 table format not supported!\n");
2470                 return -ENXIO;
2471         }
2472
2473         /* ASID/VMID sizes */
2474         smmu->asid_bits = reg & IDR0_ASID16 ? 16 : 8;
2475         smmu->vmid_bits = reg & IDR0_VMID16 ? 16 : 8;
2476
2477         /* IDR1 */
2478         reg = readl_relaxed(smmu->base + ARM_SMMU_IDR1);
2479         if (reg & (IDR1_TABLES_PRESET | IDR1_QUEUES_PRESET | IDR1_REL)) {
2480                 dev_err(smmu->dev, "embedded implementation not supported\n");
2481                 return -ENXIO;
2482         }
2483
2484         /* Queue sizes, capped at 4k */
2485         smmu->cmdq.q.max_n_shift = min((u32)CMDQ_MAX_SZ_SHIFT,
2486                                        reg >> IDR1_CMDQ_SHIFT & IDR1_CMDQ_MASK);
2487         if (!smmu->cmdq.q.max_n_shift) {
2488                 /* Odd alignment restrictions on the base, so ignore for now */
2489                 dev_err(smmu->dev, "unit-length command queue not supported\n");
2490                 return -ENXIO;
2491         }
2492
2493         smmu->evtq.q.max_n_shift = min((u32)EVTQ_MAX_SZ_SHIFT,
2494                                        reg >> IDR1_EVTQ_SHIFT & IDR1_EVTQ_MASK);
2495         smmu->priq.q.max_n_shift = min((u32)PRIQ_MAX_SZ_SHIFT,
2496                                        reg >> IDR1_PRIQ_SHIFT & IDR1_PRIQ_MASK);
2497
2498         /* SID/SSID sizes */
2499         smmu->ssid_bits = reg >> IDR1_SSID_SHIFT & IDR1_SSID_MASK;
2500         smmu->sid_bits = reg >> IDR1_SID_SHIFT & IDR1_SID_MASK;
2501
2502         /* IDR5 */
2503         reg = readl_relaxed(smmu->base + ARM_SMMU_IDR5);
2504
2505         /* Maximum number of outstanding stalls */
2506         smmu->evtq.max_stalls = reg >> IDR5_STALL_MAX_SHIFT
2507                                 & IDR5_STALL_MAX_MASK;
2508
2509         /* Page sizes */
2510         if (reg & IDR5_GRAN64K)
2511                 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
2512         if (reg & IDR5_GRAN16K)
2513                 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
2514         if (reg & IDR5_GRAN4K)
2515                 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
2516
2517         if (arm_smmu_ops.pgsize_bitmap == -1UL)
2518                 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
2519         else
2520                 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
2521
2522         /* Output address size */
2523         switch (reg & IDR5_OAS_MASK << IDR5_OAS_SHIFT) {
2524         case IDR5_OAS_32_BIT:
2525                 smmu->oas = 32;
2526                 break;
2527         case IDR5_OAS_36_BIT:
2528                 smmu->oas = 36;
2529                 break;
2530         case IDR5_OAS_40_BIT:
2531                 smmu->oas = 40;
2532                 break;
2533         case IDR5_OAS_42_BIT:
2534                 smmu->oas = 42;
2535                 break;
2536         case IDR5_OAS_44_BIT:
2537                 smmu->oas = 44;
2538                 break;
2539         default:
2540                 dev_info(smmu->dev,
2541                         "unknown output address size. Truncating to 48-bit\n");
2542                 /* Fallthrough */
2543         case IDR5_OAS_48_BIT:
2544                 smmu->oas = 48;
2545         }
2546
2547         /* Set the DMA mask for our table walker */
2548         if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(smmu->oas)))
2549                 dev_warn(smmu->dev,
2550                          "failed to set DMA mask for table walker\n");
2551
2552         smmu->ias = max(smmu->ias, smmu->oas);
2553
2554         dev_info(smmu->dev, "ias %lu-bit, oas %lu-bit (features 0x%08x)\n",
2555                  smmu->ias, smmu->oas, smmu->features);
2556         return 0;
2557 }
2558
2559 #ifdef CONFIG_ACPI
2560 static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2561                                       struct arm_smmu_device *smmu)
2562 {
2563         struct acpi_iort_smmu_v3 *iort_smmu;
2564         struct device *dev = smmu->dev;
2565         struct acpi_iort_node *node;
2566
2567         node = *(struct acpi_iort_node **)dev_get_platdata(dev);
2568
2569         /* Retrieve SMMUv3 specific data */
2570         iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
2571
2572         if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE)
2573                 smmu->features |= ARM_SMMU_FEAT_COHERENCY;
2574
2575         return 0;
2576 }
2577 #else
2578 static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2579                                              struct arm_smmu_device *smmu)
2580 {
2581         return -ENODEV;
2582 }
2583 #endif
2584
2585 static int arm_smmu_device_dt_probe(struct platform_device *pdev,
2586                                     struct arm_smmu_device *smmu)
2587 {
2588         struct device *dev = &pdev->dev;
2589         u32 cells;
2590         int ret = -EINVAL;
2591
2592         if (of_property_read_u32(dev->of_node, "#iommu-cells", &cells))
2593                 dev_err(dev, "missing #iommu-cells property\n");
2594         else if (cells != 1)
2595                 dev_err(dev, "invalid #iommu-cells value (%d)\n", cells);
2596         else
2597                 ret = 0;
2598
2599         parse_driver_options(smmu);
2600
2601         if (of_dma_is_coherent(dev->of_node))
2602                 smmu->features |= ARM_SMMU_FEAT_COHERENCY;
2603
2604         return ret;
2605 }
2606
2607 static int arm_smmu_device_probe(struct platform_device *pdev)
2608 {
2609         int irq, ret;
2610         struct resource *res;
2611         struct arm_smmu_device *smmu;
2612         struct device *dev = &pdev->dev;
2613         bool bypass;
2614
2615         smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
2616         if (!smmu) {
2617                 dev_err(dev, "failed to allocate arm_smmu_device\n");
2618                 return -ENOMEM;
2619         }
2620         smmu->dev = dev;
2621
2622         /* Base address */
2623         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2624         if (resource_size(res) + 1 < SZ_128K) {
2625                 dev_err(dev, "MMIO region too small (%pr)\n", res);
2626                 return -EINVAL;
2627         }
2628
2629         smmu->base = devm_ioremap_resource(dev, res);
2630         if (IS_ERR(smmu->base))
2631                 return PTR_ERR(smmu->base);
2632
2633         /* Interrupt lines */
2634         irq = platform_get_irq_byname(pdev, "eventq");
2635         if (irq > 0)
2636                 smmu->evtq.q.irq = irq;
2637
2638         irq = platform_get_irq_byname(pdev, "priq");
2639         if (irq > 0)
2640                 smmu->priq.q.irq = irq;
2641
2642         irq = platform_get_irq_byname(pdev, "cmdq-sync");
2643         if (irq > 0)
2644                 smmu->cmdq.q.irq = irq;
2645
2646         irq = platform_get_irq_byname(pdev, "gerror");
2647         if (irq > 0)
2648                 smmu->gerr_irq = irq;
2649
2650         if (dev->of_node) {
2651                 ret = arm_smmu_device_dt_probe(pdev, smmu);
2652         } else {
2653                 ret = arm_smmu_device_acpi_probe(pdev, smmu);
2654                 if (ret == -ENODEV)
2655                         return ret;
2656         }
2657
2658         /* Set bypass mode according to firmware probing result */
2659         bypass = !!ret;
2660
2661         /* Probe the h/w */
2662         ret = arm_smmu_device_hw_probe(smmu);
2663         if (ret)
2664                 return ret;
2665
2666         /* Initialise in-memory data structures */
2667         ret = arm_smmu_init_structures(smmu);
2668         if (ret)
2669                 return ret;
2670
2671         /* Record our private device structure */
2672         platform_set_drvdata(pdev, smmu);
2673
2674         /* Reset the device */
2675         ret = arm_smmu_device_reset(smmu, bypass);
2676         if (ret)
2677                 return ret;
2678
2679         /* And we're up. Go go go! */
2680         iommu_register_instance(dev->fwnode, &arm_smmu_ops);
2681
2682 #ifdef CONFIG_PCI
2683         if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
2684                 pci_request_acs();
2685                 ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
2686                 if (ret)
2687                         return ret;
2688         }
2689 #endif
2690 #ifdef CONFIG_ARM_AMBA
2691         if (amba_bustype.iommu_ops != &arm_smmu_ops) {
2692                 ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops);
2693                 if (ret)
2694                         return ret;
2695         }
2696 #endif
2697         if (platform_bus_type.iommu_ops != &arm_smmu_ops) {
2698                 ret = bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
2699                 if (ret)
2700                         return ret;
2701         }
2702         return 0;
2703 }
2704
2705 static int arm_smmu_device_remove(struct platform_device *pdev)
2706 {
2707         struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2708
2709         arm_smmu_device_disable(smmu);
2710         return 0;
2711 }
2712
2713 static struct of_device_id arm_smmu_of_match[] = {
2714         { .compatible = "arm,smmu-v3", },
2715         { },
2716 };
2717 MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
2718
2719 static struct platform_driver arm_smmu_driver = {
2720         .driver = {
2721                 .name           = "arm-smmu-v3",
2722                 .of_match_table = of_match_ptr(arm_smmu_of_match),
2723         },
2724         .probe  = arm_smmu_device_probe,
2725         .remove = arm_smmu_device_remove,
2726 };
2727
2728 static int __init arm_smmu_init(void)
2729 {
2730         static bool registered;
2731         int ret = 0;
2732
2733         if (!registered) {
2734                 ret = platform_driver_register(&arm_smmu_driver);
2735                 registered = !ret;
2736         }
2737         return ret;
2738 }
2739
2740 static void __exit arm_smmu_exit(void)
2741 {
2742         return platform_driver_unregister(&arm_smmu_driver);
2743 }
2744
2745 subsys_initcall(arm_smmu_init);
2746 module_exit(arm_smmu_exit);
2747
2748 static int __init arm_smmu_of_init(struct device_node *np)
2749 {
2750         int ret = arm_smmu_init();
2751
2752         if (ret)
2753                 return ret;
2754
2755         if (!of_platform_device_create(np, NULL, platform_bus_type.dev_root))
2756                 return -ENODEV;
2757
2758         return 0;
2759 }
2760 IOMMU_OF_DECLARE(arm_smmuv3, "arm,smmu-v3", arm_smmu_of_init);
2761
2762 #ifdef CONFIG_ACPI
2763 static int __init acpi_smmu_v3_init(struct acpi_table_header *table)
2764 {
2765         if (iort_node_match(ACPI_IORT_NODE_SMMU_V3))
2766                 return arm_smmu_init();
2767
2768         return 0;
2769 }
2770 IORT_ACPI_DECLARE(arm_smmu_v3, ACPI_SIG_IORT, acpi_smmu_v3_init);
2771 #endif
2772
2773 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMUv3 implementations");
2774 MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
2775 MODULE_LICENSE("GPL v2");