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