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