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