linux/drivers/iommu/arm-smmu-v3.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * IOMMU API for ARM architected SMMUv3 implementations.
   4 *
   5 * Copyright (C) 2015 ARM Limited
   6 *
   7 * Author: Will Deacon <will.deacon@arm.com>
   8 *
   9 * This driver is powered by bad coffee and bombay mix.
  10 */
  11
  12#include <linux/acpi.h>
  13#include <linux/acpi_iort.h>
  14#include <linux/bitfield.h>
  15#include <linux/bitops.h>
  16#include <linux/crash_dump.h>
  17#include <linux/delay.h>
  18#include <linux/dma-iommu.h>
  19#include <linux/err.h>
  20#include <linux/interrupt.h>
  21#include <linux/io-pgtable.h>
  22#include <linux/iommu.h>
  23#include <linux/iopoll.h>
  24#include <linux/init.h>
  25#include <linux/moduleparam.h>
  26#include <linux/msi.h>
  27#include <linux/of.h>
  28#include <linux/of_address.h>
  29#include <linux/of_iommu.h>
  30#include <linux/of_platform.h>
  31#include <linux/pci.h>
  32#include <linux/pci-ats.h>
  33#include <linux/platform_device.h>
  34
  35#include <linux/amba/bus.h>
  36
  37/* MMIO registers */
  38#define ARM_SMMU_IDR0                   0x0
  39#define IDR0_ST_LVL                     GENMASK(28, 27)
  40#define IDR0_ST_LVL_2LVL                1
  41#define IDR0_STALL_MODEL                GENMASK(25, 24)
  42#define IDR0_STALL_MODEL_STALL          0
  43#define IDR0_STALL_MODEL_FORCE          2
  44#define IDR0_TTENDIAN                   GENMASK(22, 21)
  45#define IDR0_TTENDIAN_MIXED             0
  46#define IDR0_TTENDIAN_LE                2
  47#define IDR0_TTENDIAN_BE                3
  48#define IDR0_CD2L                       (1 << 19)
  49#define IDR0_VMID16                     (1 << 18)
  50#define IDR0_PRI                        (1 << 16)
  51#define IDR0_SEV                        (1 << 14)
  52#define IDR0_MSI                        (1 << 13)
  53#define IDR0_ASID16                     (1 << 12)
  54#define IDR0_ATS                        (1 << 10)
  55#define IDR0_HYP                        (1 << 9)
  56#define IDR0_COHACC                     (1 << 4)
  57#define IDR0_TTF                        GENMASK(3, 2)
  58#define IDR0_TTF_AARCH64                2
  59#define IDR0_TTF_AARCH32_64             3
  60#define IDR0_S1P                        (1 << 1)
  61#define IDR0_S2P                        (1 << 0)
  62
  63#define ARM_SMMU_IDR1                   0x4
  64#define IDR1_TABLES_PRESET              (1 << 30)
  65#define IDR1_QUEUES_PRESET              (1 << 29)
  66#define IDR1_REL                        (1 << 28)
  67#define IDR1_CMDQS                      GENMASK(25, 21)
  68#define IDR1_EVTQS                      GENMASK(20, 16)
  69#define IDR1_PRIQS                      GENMASK(15, 11)
  70#define IDR1_SSIDSIZE                   GENMASK(10, 6)
  71#define IDR1_SIDSIZE                    GENMASK(5, 0)
  72
  73#define ARM_SMMU_IDR5                   0x14
  74#define IDR5_STALL_MAX                  GENMASK(31, 16)
  75#define IDR5_GRAN64K                    (1 << 6)
  76#define IDR5_GRAN16K                    (1 << 5)
  77#define IDR5_GRAN4K                     (1 << 4)
  78#define IDR5_OAS                        GENMASK(2, 0)
  79#define IDR5_OAS_32_BIT                 0
  80#define IDR5_OAS_36_BIT                 1
  81#define IDR5_OAS_40_BIT                 2
  82#define IDR5_OAS_42_BIT                 3
  83#define IDR5_OAS_44_BIT                 4
  84#define IDR5_OAS_48_BIT                 5
  85#define IDR5_OAS_52_BIT                 6
  86#define IDR5_VAX                        GENMASK(11, 10)
  87#define IDR5_VAX_52_BIT                 1
  88
  89#define ARM_SMMU_CR0                    0x20
  90#define CR0_ATSCHK                      (1 << 4)
  91#define CR0_CMDQEN                      (1 << 3)
  92#define CR0_EVTQEN                      (1 << 2)
  93#define CR0_PRIQEN                      (1 << 1)
  94#define CR0_SMMUEN                      (1 << 0)
  95
  96#define ARM_SMMU_CR0ACK                 0x24
  97
  98#define ARM_SMMU_CR1                    0x28
  99#define CR1_TABLE_SH                    GENMASK(11, 10)
 100#define CR1_TABLE_OC                    GENMASK(9, 8)
 101#define CR1_TABLE_IC                    GENMASK(7, 6)
 102#define CR1_QUEUE_SH                    GENMASK(5, 4)
 103#define CR1_QUEUE_OC                    GENMASK(3, 2)
 104#define CR1_QUEUE_IC                    GENMASK(1, 0)
 105/* CR1 cacheability fields don't quite follow the usual TCR-style encoding */
 106#define CR1_CACHE_NC                    0
 107#define CR1_CACHE_WB                    1
 108#define CR1_CACHE_WT                    2
 109
 110#define ARM_SMMU_CR2                    0x2c
 111#define CR2_PTM                         (1 << 2)
 112#define CR2_RECINVSID                   (1 << 1)
 113#define CR2_E2H                         (1 << 0)
 114
 115#define ARM_SMMU_GBPA                   0x44
 116#define GBPA_UPDATE                     (1 << 31)
 117#define GBPA_ABORT                      (1 << 20)
 118
 119#define ARM_SMMU_IRQ_CTRL               0x50
 120#define IRQ_CTRL_EVTQ_IRQEN             (1 << 2)
 121#define IRQ_CTRL_PRIQ_IRQEN             (1 << 1)
 122#define IRQ_CTRL_GERROR_IRQEN           (1 << 0)
 123
 124#define ARM_SMMU_IRQ_CTRLACK            0x54
 125
 126#define ARM_SMMU_GERROR                 0x60
 127#define GERROR_SFM_ERR                  (1 << 8)
 128#define GERROR_MSI_GERROR_ABT_ERR       (1 << 7)
 129#define GERROR_MSI_PRIQ_ABT_ERR         (1 << 6)
 130#define GERROR_MSI_EVTQ_ABT_ERR         (1 << 5)
 131#define GERROR_MSI_CMDQ_ABT_ERR         (1 << 4)
 132#define GERROR_PRIQ_ABT_ERR             (1 << 3)
 133#define GERROR_EVTQ_ABT_ERR             (1 << 2)
 134#define GERROR_CMDQ_ERR                 (1 << 0)
 135#define GERROR_ERR_MASK                 0xfd
 136
 137#define ARM_SMMU_GERRORN                0x64
 138
 139#define ARM_SMMU_GERROR_IRQ_CFG0        0x68
 140#define ARM_SMMU_GERROR_IRQ_CFG1        0x70
 141#define ARM_SMMU_GERROR_IRQ_CFG2        0x74
 142
 143#define ARM_SMMU_STRTAB_BASE            0x80
 144#define STRTAB_BASE_RA                  (1UL << 62)
 145#define STRTAB_BASE_ADDR_MASK           GENMASK_ULL(51, 6)
 146
 147#define ARM_SMMU_STRTAB_BASE_CFG        0x88
 148#define STRTAB_BASE_CFG_FMT             GENMASK(17, 16)
 149#define STRTAB_BASE_CFG_FMT_LINEAR      0
 150#define STRTAB_BASE_CFG_FMT_2LVL        1
 151#define STRTAB_BASE_CFG_SPLIT           GENMASK(10, 6)
 152#define STRTAB_BASE_CFG_LOG2SIZE        GENMASK(5, 0)
 153
 154#define ARM_SMMU_CMDQ_BASE              0x90
 155#define ARM_SMMU_CMDQ_PROD              0x98
 156#define ARM_SMMU_CMDQ_CONS              0x9c
 157
 158#define ARM_SMMU_EVTQ_BASE              0xa0
 159#define ARM_SMMU_EVTQ_PROD              0x100a8
 160#define ARM_SMMU_EVTQ_CONS              0x100ac
 161#define ARM_SMMU_EVTQ_IRQ_CFG0          0xb0
 162#define ARM_SMMU_EVTQ_IRQ_CFG1          0xb8
 163#define ARM_SMMU_EVTQ_IRQ_CFG2          0xbc
 164
 165#define ARM_SMMU_PRIQ_BASE              0xc0
 166#define ARM_SMMU_PRIQ_PROD              0x100c8
 167#define ARM_SMMU_PRIQ_CONS              0x100cc
 168#define ARM_SMMU_PRIQ_IRQ_CFG0          0xd0
 169#define ARM_SMMU_PRIQ_IRQ_CFG1          0xd8
 170#define ARM_SMMU_PRIQ_IRQ_CFG2          0xdc
 171
 172/* Common MSI config fields */
 173#define MSI_CFG0_ADDR_MASK              GENMASK_ULL(51, 2)
 174#define MSI_CFG2_SH                     GENMASK(5, 4)
 175#define MSI_CFG2_MEMATTR                GENMASK(3, 0)
 176
 177/* Common memory attribute values */
 178#define ARM_SMMU_SH_NSH                 0
 179#define ARM_SMMU_SH_OSH                 2
 180#define ARM_SMMU_SH_ISH                 3
 181#define ARM_SMMU_MEMATTR_DEVICE_nGnRE   0x1
 182#define ARM_SMMU_MEMATTR_OIWB           0xf
 183
 184#define Q_IDX(llq, p)                   ((p) & ((1 << (llq)->max_n_shift) - 1))
 185#define Q_WRP(llq, p)                   ((p) & (1 << (llq)->max_n_shift))
 186#define Q_OVERFLOW_FLAG                 (1U << 31)
 187#define Q_OVF(p)                        ((p) & Q_OVERFLOW_FLAG)
 188#define Q_ENT(q, p)                     ((q)->base +                    \
 189                                         Q_IDX(&((q)->llq), p) *        \
 190                                         (q)->ent_dwords)
 191
 192#define Q_BASE_RWA                      (1UL << 62)
 193#define Q_BASE_ADDR_MASK                GENMASK_ULL(51, 5)
 194#define Q_BASE_LOG2SIZE                 GENMASK(4, 0)
 195
 196/* Ensure DMA allocations are naturally aligned */
 197#ifdef CONFIG_CMA_ALIGNMENT
 198#define Q_MAX_SZ_SHIFT                  (PAGE_SHIFT + CONFIG_CMA_ALIGNMENT)
 199#else
 200#define Q_MAX_SZ_SHIFT                  (PAGE_SHIFT + MAX_ORDER - 1)
 201#endif
 202
 203/*
 204 * Stream table.
 205 *
 206 * Linear: Enough to cover 1 << IDR1.SIDSIZE entries
 207 * 2lvl: 128k L1 entries,
 208 *       256 lazy entries per table (each table covers a PCI bus)
 209 */
 210#define STRTAB_L1_SZ_SHIFT              20
 211#define STRTAB_SPLIT                    8
 212
 213#define STRTAB_L1_DESC_DWORDS           1
 214#define STRTAB_L1_DESC_SPAN             GENMASK_ULL(4, 0)
 215#define STRTAB_L1_DESC_L2PTR_MASK       GENMASK_ULL(51, 6)
 216
 217#define STRTAB_STE_DWORDS               8
 218#define STRTAB_STE_0_V                  (1UL << 0)
 219#define STRTAB_STE_0_CFG                GENMASK_ULL(3, 1)
 220#define STRTAB_STE_0_CFG_ABORT          0
 221#define STRTAB_STE_0_CFG_BYPASS         4
 222#define STRTAB_STE_0_CFG_S1_TRANS       5
 223#define STRTAB_STE_0_CFG_S2_TRANS       6
 224
 225#define STRTAB_STE_0_S1FMT              GENMASK_ULL(5, 4)
 226#define STRTAB_STE_0_S1FMT_LINEAR       0
 227#define STRTAB_STE_0_S1CTXPTR_MASK      GENMASK_ULL(51, 6)
 228#define STRTAB_STE_0_S1CDMAX            GENMASK_ULL(63, 59)
 229
 230#define STRTAB_STE_1_S1C_CACHE_NC       0UL
 231#define STRTAB_STE_1_S1C_CACHE_WBRA     1UL
 232#define STRTAB_STE_1_S1C_CACHE_WT       2UL
 233#define STRTAB_STE_1_S1C_CACHE_WB       3UL
 234#define STRTAB_STE_1_S1CIR              GENMASK_ULL(3, 2)
 235#define STRTAB_STE_1_S1COR              GENMASK_ULL(5, 4)
 236#define STRTAB_STE_1_S1CSH              GENMASK_ULL(7, 6)
 237
 238#define STRTAB_STE_1_S1STALLD           (1UL << 27)
 239
 240#define STRTAB_STE_1_EATS               GENMASK_ULL(29, 28)
 241#define STRTAB_STE_1_EATS_ABT           0UL
 242#define STRTAB_STE_1_EATS_TRANS         1UL
 243#define STRTAB_STE_1_EATS_S1CHK         2UL
 244
 245#define STRTAB_STE_1_STRW               GENMASK_ULL(31, 30)
 246#define STRTAB_STE_1_STRW_NSEL1         0UL
 247#define STRTAB_STE_1_STRW_EL2           2UL
 248
 249#define STRTAB_STE_1_SHCFG              GENMASK_ULL(45, 44)
 250#define STRTAB_STE_1_SHCFG_INCOMING     1UL
 251
 252#define STRTAB_STE_2_S2VMID             GENMASK_ULL(15, 0)
 253#define STRTAB_STE_2_VTCR               GENMASK_ULL(50, 32)
 254#define STRTAB_STE_2_S2AA64             (1UL << 51)
 255#define STRTAB_STE_2_S2ENDI             (1UL << 52)
 256#define STRTAB_STE_2_S2PTW              (1UL << 54)
 257#define STRTAB_STE_2_S2R                (1UL << 58)
 258
 259#define STRTAB_STE_3_S2TTB_MASK         GENMASK_ULL(51, 4)
 260
 261/* Context descriptor (stage-1 only) */
 262#define CTXDESC_CD_DWORDS               8
 263#define CTXDESC_CD_0_TCR_T0SZ           GENMASK_ULL(5, 0)
 264#define ARM64_TCR_T0SZ                  GENMASK_ULL(5, 0)
 265#define CTXDESC_CD_0_TCR_TG0            GENMASK_ULL(7, 6)
 266#define ARM64_TCR_TG0                   GENMASK_ULL(15, 14)
 267#define CTXDESC_CD_0_TCR_IRGN0          GENMASK_ULL(9, 8)
 268#define ARM64_TCR_IRGN0                 GENMASK_ULL(9, 8)
 269#define CTXDESC_CD_0_TCR_ORGN0          GENMASK_ULL(11, 10)
 270#define ARM64_TCR_ORGN0                 GENMASK_ULL(11, 10)
 271#define CTXDESC_CD_0_TCR_SH0            GENMASK_ULL(13, 12)
 272#define ARM64_TCR_SH0                   GENMASK_ULL(13, 12)
 273#define CTXDESC_CD_0_TCR_EPD0           (1ULL << 14)
 274#define ARM64_TCR_EPD0                  (1ULL << 7)
 275#define CTXDESC_CD_0_TCR_EPD1           (1ULL << 30)
 276#define ARM64_TCR_EPD1                  (1ULL << 23)
 277
 278#define CTXDESC_CD_0_ENDI               (1UL << 15)
 279#define CTXDESC_CD_0_V                  (1UL << 31)
 280
 281#define CTXDESC_CD_0_TCR_IPS            GENMASK_ULL(34, 32)
 282#define ARM64_TCR_IPS                   GENMASK_ULL(34, 32)
 283#define CTXDESC_CD_0_TCR_TBI0           (1ULL << 38)
 284#define ARM64_TCR_TBI0                  (1ULL << 37)
 285
 286#define CTXDESC_CD_0_AA64               (1UL << 41)
 287#define CTXDESC_CD_0_S                  (1UL << 44)
 288#define CTXDESC_CD_0_R                  (1UL << 45)
 289#define CTXDESC_CD_0_A                  (1UL << 46)
 290#define CTXDESC_CD_0_ASET               (1UL << 47)
 291#define CTXDESC_CD_0_ASID               GENMASK_ULL(63, 48)
 292
 293#define CTXDESC_CD_1_TTB0_MASK          GENMASK_ULL(51, 4)
 294
 295/* Convert between AArch64 (CPU) TCR format and SMMU CD format */
 296#define ARM_SMMU_TCR2CD(tcr, fld)       FIELD_PREP(CTXDESC_CD_0_TCR_##fld, \
 297                                        FIELD_GET(ARM64_TCR_##fld, tcr))
 298
 299/* Command queue */
 300#define CMDQ_ENT_SZ_SHIFT               4
 301#define CMDQ_ENT_DWORDS                 ((1 << CMDQ_ENT_SZ_SHIFT) >> 3)
 302#define CMDQ_MAX_SZ_SHIFT               (Q_MAX_SZ_SHIFT - CMDQ_ENT_SZ_SHIFT)
 303
 304#define CMDQ_CONS_ERR                   GENMASK(30, 24)
 305#define CMDQ_ERR_CERROR_NONE_IDX        0
 306#define CMDQ_ERR_CERROR_ILL_IDX         1
 307#define CMDQ_ERR_CERROR_ABT_IDX         2
 308#define CMDQ_ERR_CERROR_ATC_INV_IDX     3
 309
 310#define CMDQ_PROD_OWNED_FLAG            Q_OVERFLOW_FLAG
 311
 312/*
 313 * This is used to size the command queue and therefore must be at least
 314 * BITS_PER_LONG so that the valid_map works correctly (it relies on the
 315 * total number of queue entries being a multiple of BITS_PER_LONG).
 316 */
 317#define CMDQ_BATCH_ENTRIES              BITS_PER_LONG
 318
 319#define CMDQ_0_OP                       GENMASK_ULL(7, 0)
 320#define CMDQ_0_SSV                      (1UL << 11)
 321
 322#define CMDQ_PREFETCH_0_SID             GENMASK_ULL(63, 32)
 323#define CMDQ_PREFETCH_1_SIZE            GENMASK_ULL(4, 0)
 324#define CMDQ_PREFETCH_1_ADDR_MASK       GENMASK_ULL(63, 12)
 325
 326#define CMDQ_CFGI_0_SID                 GENMASK_ULL(63, 32)
 327#define CMDQ_CFGI_1_LEAF                (1UL << 0)
 328#define CMDQ_CFGI_1_RANGE               GENMASK_ULL(4, 0)
 329
 330#define CMDQ_TLBI_0_VMID                GENMASK_ULL(47, 32)
 331#define CMDQ_TLBI_0_ASID                GENMASK_ULL(63, 48)
 332#define CMDQ_TLBI_1_LEAF                (1UL << 0)
 333#define CMDQ_TLBI_1_VA_MASK             GENMASK_ULL(63, 12)
 334#define CMDQ_TLBI_1_IPA_MASK            GENMASK_ULL(51, 12)
 335
 336#define CMDQ_ATC_0_SSID                 GENMASK_ULL(31, 12)
 337#define CMDQ_ATC_0_SID                  GENMASK_ULL(63, 32)
 338#define CMDQ_ATC_0_GLOBAL               (1UL << 9)
 339#define CMDQ_ATC_1_SIZE                 GENMASK_ULL(5, 0)
 340#define CMDQ_ATC_1_ADDR_MASK            GENMASK_ULL(63, 12)
 341
 342#define CMDQ_PRI_0_SSID                 GENMASK_ULL(31, 12)
 343#define CMDQ_PRI_0_SID                  GENMASK_ULL(63, 32)
 344#define CMDQ_PRI_1_GRPID                GENMASK_ULL(8, 0)
 345#define CMDQ_PRI_1_RESP                 GENMASK_ULL(13, 12)
 346
 347#define CMDQ_SYNC_0_CS                  GENMASK_ULL(13, 12)
 348#define CMDQ_SYNC_0_CS_NONE             0
 349#define CMDQ_SYNC_0_CS_IRQ              1
 350#define CMDQ_SYNC_0_CS_SEV              2
 351#define CMDQ_SYNC_0_MSH                 GENMASK_ULL(23, 22)
 352#define CMDQ_SYNC_0_MSIATTR             GENMASK_ULL(27, 24)
 353#define CMDQ_SYNC_0_MSIDATA             GENMASK_ULL(63, 32)
 354#define CMDQ_SYNC_1_MSIADDR_MASK        GENMASK_ULL(51, 2)
 355
 356/* Event queue */
 357#define EVTQ_ENT_SZ_SHIFT               5
 358#define EVTQ_ENT_DWORDS                 ((1 << EVTQ_ENT_SZ_SHIFT) >> 3)
 359#define EVTQ_MAX_SZ_SHIFT               (Q_MAX_SZ_SHIFT - EVTQ_ENT_SZ_SHIFT)
 360
 361#define EVTQ_0_ID                       GENMASK_ULL(7, 0)
 362
 363/* PRI queue */
 364#define PRIQ_ENT_SZ_SHIFT               4
 365#define PRIQ_ENT_DWORDS                 ((1 << PRIQ_ENT_SZ_SHIFT) >> 3)
 366#define PRIQ_MAX_SZ_SHIFT               (Q_MAX_SZ_SHIFT - PRIQ_ENT_SZ_SHIFT)
 367
 368#define PRIQ_0_SID                      GENMASK_ULL(31, 0)
 369#define PRIQ_0_SSID                     GENMASK_ULL(51, 32)
 370#define PRIQ_0_PERM_PRIV                (1UL << 58)
 371#define PRIQ_0_PERM_EXEC                (1UL << 59)
 372#define PRIQ_0_PERM_READ                (1UL << 60)
 373#define PRIQ_0_PERM_WRITE               (1UL << 61)
 374#define PRIQ_0_PRG_LAST                 (1UL << 62)
 375#define PRIQ_0_SSID_V                   (1UL << 63)
 376
 377#define PRIQ_1_PRG_IDX                  GENMASK_ULL(8, 0)
 378#define PRIQ_1_ADDR_MASK                GENMASK_ULL(63, 12)
 379
 380/* High-level queue structures */
 381#define ARM_SMMU_POLL_TIMEOUT_US        1000000 /* 1s! */
 382#define ARM_SMMU_POLL_SPIN_COUNT        10
 383
 384#define MSI_IOVA_BASE                   0x8000000
 385#define MSI_IOVA_LENGTH                 0x100000
 386
 387/*
 388 * not really modular, but the easiest way to keep compat with existing
 389 * bootargs behaviour is to continue using module_param_named here.
 390 */
 391static bool disable_bypass = 1;
 392module_param_named(disable_bypass, disable_bypass, bool, S_IRUGO);
 393MODULE_PARM_DESC(disable_bypass,
 394        "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.");
 395
 396enum pri_resp {
 397        PRI_RESP_DENY = 0,
 398        PRI_RESP_FAIL = 1,
 399        PRI_RESP_SUCC = 2,
 400};
 401
 402enum arm_smmu_msi_index {
 403        EVTQ_MSI_INDEX,
 404        GERROR_MSI_INDEX,
 405        PRIQ_MSI_INDEX,
 406        ARM_SMMU_MAX_MSIS,
 407};
 408
 409static phys_addr_t arm_smmu_msi_cfg[ARM_SMMU_MAX_MSIS][3] = {
 410        [EVTQ_MSI_INDEX] = {
 411                ARM_SMMU_EVTQ_IRQ_CFG0,
 412                ARM_SMMU_EVTQ_IRQ_CFG1,
 413                ARM_SMMU_EVTQ_IRQ_CFG2,
 414        },
 415        [GERROR_MSI_INDEX] = {
 416                ARM_SMMU_GERROR_IRQ_CFG0,
 417                ARM_SMMU_GERROR_IRQ_CFG1,
 418                ARM_SMMU_GERROR_IRQ_CFG2,
 419        },
 420        [PRIQ_MSI_INDEX] = {
 421                ARM_SMMU_PRIQ_IRQ_CFG0,
 422                ARM_SMMU_PRIQ_IRQ_CFG1,
 423                ARM_SMMU_PRIQ_IRQ_CFG2,
 424        },
 425};
 426
 427struct arm_smmu_cmdq_ent {
 428        /* Common fields */
 429        u8                              opcode;
 430        bool                            substream_valid;
 431
 432        /* Command-specific fields */
 433        union {
 434                #define CMDQ_OP_PREFETCH_CFG    0x1
 435                struct {
 436                        u32                     sid;
 437                        u8                      size;
 438                        u64                     addr;
 439                } prefetch;
 440
 441                #define CMDQ_OP_CFGI_STE        0x3
 442                #define CMDQ_OP_CFGI_ALL        0x4
 443                struct {
 444                        u32                     sid;
 445                        union {
 446                                bool            leaf;
 447                                u8              span;
 448                        };
 449                } cfgi;
 450
 451                #define CMDQ_OP_TLBI_NH_ASID    0x11
 452                #define CMDQ_OP_TLBI_NH_VA      0x12
 453                #define CMDQ_OP_TLBI_EL2_ALL    0x20
 454                #define CMDQ_OP_TLBI_S12_VMALL  0x28
 455                #define CMDQ_OP_TLBI_S2_IPA     0x2a
 456                #define CMDQ_OP_TLBI_NSNH_ALL   0x30
 457                struct {
 458                        u16                     asid;
 459                        u16                     vmid;
 460                        bool                    leaf;
 461                        u64                     addr;
 462                } tlbi;
 463
 464                #define CMDQ_OP_ATC_INV         0x40
 465                #define ATC_INV_SIZE_ALL        52
 466                struct {
 467                        u32                     sid;
 468                        u32                     ssid;
 469                        u64                     addr;
 470                        u8                      size;
 471                        bool                    global;
 472                } atc;
 473
 474                #define CMDQ_OP_PRI_RESP        0x41
 475                struct {
 476                        u32                     sid;
 477                        u32                     ssid;
 478                        u16                     grpid;
 479                        enum pri_resp           resp;
 480                } pri;
 481
 482                #define CMDQ_OP_CMD_SYNC        0x46
 483                struct {
 484                        u64                     msiaddr;
 485                } sync;
 486        };
 487};
 488
 489struct arm_smmu_ll_queue {
 490        union {
 491                u64                     val;
 492                struct {
 493                        u32             prod;
 494                        u32             cons;
 495                };
 496                struct {
 497                        atomic_t        prod;
 498                        atomic_t        cons;
 499                } atomic;
 500                u8                      __pad[SMP_CACHE_BYTES];
 501        } ____cacheline_aligned_in_smp;
 502        u32                             max_n_shift;
 503};
 504
 505struct arm_smmu_queue {
 506        struct arm_smmu_ll_queue        llq;
 507        int                             irq; /* Wired interrupt */
 508
 509        __le64                          *base;
 510        dma_addr_t                      base_dma;
 511        u64                             q_base;
 512
 513        size_t                          ent_dwords;
 514
 515        u32 __iomem                     *prod_reg;
 516        u32 __iomem                     *cons_reg;
 517};
 518
 519struct arm_smmu_queue_poll {
 520        ktime_t                         timeout;
 521        unsigned int                    delay;
 522        unsigned int                    spin_cnt;
 523        bool                            wfe;
 524};
 525
 526struct arm_smmu_cmdq {
 527        struct arm_smmu_queue           q;
 528        atomic_long_t                   *valid_map;
 529        atomic_t                        owner_prod;
 530        atomic_t                        lock;
 531};
 532
 533struct arm_smmu_evtq {
 534        struct arm_smmu_queue           q;
 535        u32                             max_stalls;
 536};
 537
 538struct arm_smmu_priq {
 539        struct arm_smmu_queue           q;
 540};
 541
 542/* High-level stream table and context descriptor structures */
 543struct arm_smmu_strtab_l1_desc {
 544        u8                              span;
 545
 546        __le64                          *l2ptr;
 547        dma_addr_t                      l2ptr_dma;
 548};
 549
 550struct arm_smmu_s1_cfg {
 551        __le64                          *cdptr;
 552        dma_addr_t                      cdptr_dma;
 553
 554        struct arm_smmu_ctx_desc {
 555                u16     asid;
 556                u64     ttbr;
 557                u64     tcr;
 558                u64     mair;
 559        }                               cd;
 560};
 561
 562struct arm_smmu_s2_cfg {
 563        u16                             vmid;
 564        u64                             vttbr;
 565        u64                             vtcr;
 566};
 567
 568struct arm_smmu_strtab_cfg {
 569        __le64                          *strtab;
 570        dma_addr_t                      strtab_dma;
 571        struct arm_smmu_strtab_l1_desc  *l1_desc;
 572        unsigned int                    num_l1_ents;
 573
 574        u64                             strtab_base;
 575        u32                             strtab_base_cfg;
 576};
 577
 578/* An SMMUv3 instance */
 579struct arm_smmu_device {
 580        struct device                   *dev;
 581        void __iomem                    *base;
 582
 583#define ARM_SMMU_FEAT_2_LVL_STRTAB      (1 << 0)
 584#define ARM_SMMU_FEAT_2_LVL_CDTAB       (1 << 1)
 585#define ARM_SMMU_FEAT_TT_LE             (1 << 2)
 586#define ARM_SMMU_FEAT_TT_BE             (1 << 3)
 587#define ARM_SMMU_FEAT_PRI               (1 << 4)
 588#define ARM_SMMU_FEAT_ATS               (1 << 5)
 589#define ARM_SMMU_FEAT_SEV               (1 << 6)
 590#define ARM_SMMU_FEAT_MSI               (1 << 7)
 591#define ARM_SMMU_FEAT_COHERENCY         (1 << 8)
 592#define ARM_SMMU_FEAT_TRANS_S1          (1 << 9)
 593#define ARM_SMMU_FEAT_TRANS_S2          (1 << 10)
 594#define ARM_SMMU_FEAT_STALLS            (1 << 11)
 595#define ARM_SMMU_FEAT_HYP               (1 << 12)
 596#define ARM_SMMU_FEAT_STALL_FORCE       (1 << 13)
 597#define ARM_SMMU_FEAT_VAX               (1 << 14)
 598        u32                             features;
 599
 600#define ARM_SMMU_OPT_SKIP_PREFETCH      (1 << 0)
 601#define ARM_SMMU_OPT_PAGE0_REGS_ONLY    (1 << 1)
 602        u32                             options;
 603
 604        struct arm_smmu_cmdq            cmdq;
 605        struct arm_smmu_evtq            evtq;
 606        struct arm_smmu_priq            priq;
 607
 608        int                             gerr_irq;
 609        int                             combined_irq;
 610
 611        unsigned long                   ias; /* IPA */
 612        unsigned long                   oas; /* PA */
 613        unsigned long                   pgsize_bitmap;
 614
 615#define ARM_SMMU_MAX_ASIDS              (1 << 16)
 616        unsigned int                    asid_bits;
 617        DECLARE_BITMAP(asid_map, ARM_SMMU_MAX_ASIDS);
 618
 619#define ARM_SMMU_MAX_VMIDS              (1 << 16)
 620        unsigned int                    vmid_bits;
 621        DECLARE_BITMAP(vmid_map, ARM_SMMU_MAX_VMIDS);
 622
 623        unsigned int                    ssid_bits;
 624        unsigned int                    sid_bits;
 625
 626        struct arm_smmu_strtab_cfg      strtab_cfg;
 627
 628        /* IOMMU core code handle */
 629        struct iommu_device             iommu;
 630};
 631
 632/* SMMU private data for each master */
 633struct arm_smmu_master {
 634        struct arm_smmu_device          *smmu;
 635        struct device                   *dev;
 636        struct arm_smmu_domain          *domain;
 637        struct list_head                domain_head;
 638        u32                             *sids;
 639        unsigned int                    num_sids;
 640        bool                            ats_enabled;
 641};
 642
 643/* SMMU private data for an IOMMU domain */
 644enum arm_smmu_domain_stage {
 645        ARM_SMMU_DOMAIN_S1 = 0,
 646        ARM_SMMU_DOMAIN_S2,
 647        ARM_SMMU_DOMAIN_NESTED,
 648        ARM_SMMU_DOMAIN_BYPASS,
 649};
 650
 651struct arm_smmu_domain {
 652        struct arm_smmu_device          *smmu;
 653        struct mutex                    init_mutex; /* Protects smmu pointer */
 654
 655        struct io_pgtable_ops           *pgtbl_ops;
 656        bool                            non_strict;
 657        atomic_t                        nr_ats_masters;
 658
 659        enum arm_smmu_domain_stage      stage;
 660        union {
 661                struct arm_smmu_s1_cfg  s1_cfg;
 662                struct arm_smmu_s2_cfg  s2_cfg;
 663        };
 664
 665        struct iommu_domain             domain;
 666
 667        struct list_head                devices;
 668        spinlock_t                      devices_lock;
 669};
 670
 671struct arm_smmu_option_prop {
 672        u32 opt;
 673        const char *prop;
 674};
 675
 676static struct arm_smmu_option_prop arm_smmu_options[] = {
 677        { ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" },
 678        { ARM_SMMU_OPT_PAGE0_REGS_ONLY, "cavium,cn9900-broken-page1-regspace"},
 679        { 0, NULL},
 680};
 681
 682static inline void __iomem *arm_smmu_page1_fixup(unsigned long offset,
 683                                                 struct arm_smmu_device *smmu)
 684{
 685        if ((offset > SZ_64K) &&
 686            (smmu->options & ARM_SMMU_OPT_PAGE0_REGS_ONLY))
 687                offset -= SZ_64K;
 688
 689        return smmu->base + offset;
 690}
 691
 692static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
 693{
 694        return container_of(dom, struct arm_smmu_domain, domain);
 695}
 696
 697static void parse_driver_options(struct arm_smmu_device *smmu)
 698{
 699        int i = 0;
 700
 701        do {
 702                if (of_property_read_bool(smmu->dev->of_node,
 703                                                arm_smmu_options[i].prop)) {
 704                        smmu->options |= arm_smmu_options[i].opt;
 705                        dev_notice(smmu->dev, "option %s\n",
 706                                arm_smmu_options[i].prop);
 707                }
 708        } while (arm_smmu_options[++i].opt);
 709}
 710
 711/* Low-level queue manipulation functions */
 712static bool queue_has_space(struct arm_smmu_ll_queue *q, u32 n)
 713{
 714        u32 space, prod, cons;
 715
 716        prod = Q_IDX(q, q->prod);
 717        cons = Q_IDX(q, q->cons);
 718
 719        if (Q_WRP(q, q->prod) == Q_WRP(q, q->cons))
 720                space = (1 << q->max_n_shift) - (prod - cons);
 721        else
 722                space = cons - prod;
 723
 724        return space >= n;
 725}
 726
 727static bool queue_full(struct arm_smmu_ll_queue *q)
 728{
 729        return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) &&
 730               Q_WRP(q, q->prod) != Q_WRP(q, q->cons);
 731}
 732
 733static bool queue_empty(struct arm_smmu_ll_queue *q)
 734{
 735        return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) &&
 736               Q_WRP(q, q->prod) == Q_WRP(q, q->cons);
 737}
 738
 739static bool queue_consumed(struct arm_smmu_ll_queue *q, u32 prod)
 740{
 741        return ((Q_WRP(q, q->cons) == Q_WRP(q, prod)) &&
 742                (Q_IDX(q, q->cons) > Q_IDX(q, prod))) ||
 743               ((Q_WRP(q, q->cons) != Q_WRP(q, prod)) &&
 744                (Q_IDX(q, q->cons) <= Q_IDX(q, prod)));
 745}
 746
 747static void queue_sync_cons_out(struct arm_smmu_queue *q)
 748{
 749        /*
 750         * Ensure that all CPU accesses (reads and writes) to the queue
 751         * are complete before we update the cons pointer.
 752         */
 753        mb();
 754        writel_relaxed(q->llq.cons, q->cons_reg);
 755}
 756
 757static void queue_inc_cons(struct arm_smmu_ll_queue *q)
 758{
 759        u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1;
 760        q->cons = Q_OVF(q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons);
 761}
 762
 763static int queue_sync_prod_in(struct arm_smmu_queue *q)
 764{
 765        int ret = 0;
 766        u32 prod = readl_relaxed(q->prod_reg);
 767
 768        if (Q_OVF(prod) != Q_OVF(q->llq.prod))
 769                ret = -EOVERFLOW;
 770
 771        q->llq.prod = prod;
 772        return ret;
 773}
 774
 775static u32 queue_inc_prod_n(struct arm_smmu_ll_queue *q, int n)
 776{
 777        u32 prod = (Q_WRP(q, q->prod) | Q_IDX(q, q->prod)) + n;
 778        return Q_OVF(q->prod) | Q_WRP(q, prod) | Q_IDX(q, prod);
 779}
 780
 781static void queue_poll_init(struct arm_smmu_device *smmu,
 782                            struct arm_smmu_queue_poll *qp)
 783{
 784        qp->delay = 1;
 785        qp->spin_cnt = 0;
 786        qp->wfe = !!(smmu->features & ARM_SMMU_FEAT_SEV);
 787        qp->timeout = ktime_add_us(ktime_get(), ARM_SMMU_POLL_TIMEOUT_US);
 788}
 789
 790static int queue_poll(struct arm_smmu_queue_poll *qp)
 791{
 792        if (ktime_compare(ktime_get(), qp->timeout) > 0)
 793                return -ETIMEDOUT;
 794
 795        if (qp->wfe) {
 796                wfe();
 797        } else if (++qp->spin_cnt < ARM_SMMU_POLL_SPIN_COUNT) {
 798                cpu_relax();
 799        } else {
 800                udelay(qp->delay);
 801                qp->delay *= 2;
 802                qp->spin_cnt = 0;
 803        }
 804
 805        return 0;
 806}
 807
 808static void queue_write(__le64 *dst, u64 *src, size_t n_dwords)
 809{
 810        int i;
 811
 812        for (i = 0; i < n_dwords; ++i)
 813                *dst++ = cpu_to_le64(*src++);
 814}
 815
 816static void queue_read(__le64 *dst, u64 *src, size_t n_dwords)
 817{
 818        int i;
 819
 820        for (i = 0; i < n_dwords; ++i)
 821                *dst++ = le64_to_cpu(*src++);
 822}
 823
 824static int queue_remove_raw(struct arm_smmu_queue *q, u64 *ent)
 825{
 826        if (queue_empty(&q->llq))
 827                return -EAGAIN;
 828
 829        queue_read(ent, Q_ENT(q, q->llq.cons), q->ent_dwords);
 830        queue_inc_cons(&q->llq);
 831        queue_sync_cons_out(q);
 832        return 0;
 833}
 834
 835/* High-level queue accessors */
 836static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent)
 837{
 838        memset(cmd, 0, 1 << CMDQ_ENT_SZ_SHIFT);
 839        cmd[0] |= FIELD_PREP(CMDQ_0_OP, ent->opcode);
 840
 841        switch (ent->opcode) {
 842        case CMDQ_OP_TLBI_EL2_ALL:
 843        case CMDQ_OP_TLBI_NSNH_ALL:
 844                break;
 845        case CMDQ_OP_PREFETCH_CFG:
 846                cmd[0] |= FIELD_PREP(CMDQ_PREFETCH_0_SID, ent->prefetch.sid);
 847                cmd[1] |= FIELD_PREP(CMDQ_PREFETCH_1_SIZE, ent->prefetch.size);
 848                cmd[1] |= ent->prefetch.addr & CMDQ_PREFETCH_1_ADDR_MASK;
 849                break;
 850        case CMDQ_OP_CFGI_STE:
 851                cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SID, ent->cfgi.sid);
 852                cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_LEAF, ent->cfgi.leaf);
 853                break;
 854        case CMDQ_OP_CFGI_ALL:
 855                /* Cover the entire SID range */
 856                cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_RANGE, 31);
 857                break;
 858        case CMDQ_OP_TLBI_NH_VA:
 859                cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid);
 860                cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_LEAF, ent->tlbi.leaf);
 861                cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_VA_MASK;
 862                break;
 863        case CMDQ_OP_TLBI_S2_IPA:
 864                cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid);
 865                cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_LEAF, ent->tlbi.leaf);
 866                cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_IPA_MASK;
 867                break;
 868        case CMDQ_OP_TLBI_NH_ASID:
 869                cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid);
 870                /* Fallthrough */
 871        case CMDQ_OP_TLBI_S12_VMALL:
 872                cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid);
 873                break;
 874        case CMDQ_OP_ATC_INV:
 875                cmd[0] |= FIELD_PREP(CMDQ_0_SSV, ent->substream_valid);
 876                cmd[0] |= FIELD_PREP(CMDQ_ATC_0_GLOBAL, ent->atc.global);
 877                cmd[0] |= FIELD_PREP(CMDQ_ATC_0_SSID, ent->atc.ssid);
 878                cmd[0] |= FIELD_PREP(CMDQ_ATC_0_SID, ent->atc.sid);
 879                cmd[1] |= FIELD_PREP(CMDQ_ATC_1_SIZE, ent->atc.size);
 880                cmd[1] |= ent->atc.addr & CMDQ_ATC_1_ADDR_MASK;
 881                break;
 882        case CMDQ_OP_PRI_RESP:
 883                cmd[0] |= FIELD_PREP(CMDQ_0_SSV, ent->substream_valid);
 884                cmd[0] |= FIELD_PREP(CMDQ_PRI_0_SSID, ent->pri.ssid);
 885                cmd[0] |= FIELD_PREP(CMDQ_PRI_0_SID, ent->pri.sid);
 886                cmd[1] |= FIELD_PREP(CMDQ_PRI_1_GRPID, ent->pri.grpid);
 887                switch (ent->pri.resp) {
 888                case PRI_RESP_DENY:
 889                case PRI_RESP_FAIL:
 890                case PRI_RESP_SUCC:
 891                        break;
 892                default:
 893                        return -EINVAL;
 894                }
 895                cmd[1] |= FIELD_PREP(CMDQ_PRI_1_RESP, ent->pri.resp);
 896                break;
 897        case CMDQ_OP_CMD_SYNC:
 898                if (ent->sync.msiaddr) {
 899                        cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_IRQ);
 900                        cmd[1] |= ent->sync.msiaddr & CMDQ_SYNC_1_MSIADDR_MASK;
 901                } else {
 902                        cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_SEV);
 903                }
 904                cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSH, ARM_SMMU_SH_ISH);
 905                cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSIATTR, ARM_SMMU_MEMATTR_OIWB);
 906                break;
 907        default:
 908                return -ENOENT;
 909        }
 910
 911        return 0;
 912}
 913
 914static void arm_smmu_cmdq_build_sync_cmd(u64 *cmd, struct arm_smmu_device *smmu,
 915                                         u32 prod)
 916{
 917        struct arm_smmu_queue *q = &smmu->cmdq.q;
 918        struct arm_smmu_cmdq_ent ent = {
 919                .opcode = CMDQ_OP_CMD_SYNC,
 920        };
 921
 922        /*
 923         * Beware that Hi16xx adds an extra 32 bits of goodness to its MSI
 924         * payload, so the write will zero the entire command on that platform.
 925         */
 926        if (smmu->features & ARM_SMMU_FEAT_MSI &&
 927            smmu->features & ARM_SMMU_FEAT_COHERENCY) {
 928                ent.sync.msiaddr = q->base_dma + Q_IDX(&q->llq, prod) *
 929                                   q->ent_dwords * 8;
 930        }
 931
 932        arm_smmu_cmdq_build_cmd(cmd, &ent);
 933}
 934
 935static void arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu)
 936{
 937        static const char *cerror_str[] = {
 938                [CMDQ_ERR_CERROR_NONE_IDX]      = "No error",
 939                [CMDQ_ERR_CERROR_ILL_IDX]       = "Illegal command",
 940                [CMDQ_ERR_CERROR_ABT_IDX]       = "Abort on command fetch",
 941                [CMDQ_ERR_CERROR_ATC_INV_IDX]   = "ATC invalidate timeout",
 942        };
 943
 944        int i;
 945        u64 cmd[CMDQ_ENT_DWORDS];
 946        struct arm_smmu_queue *q = &smmu->cmdq.q;
 947        u32 cons = readl_relaxed(q->cons_reg);
 948        u32 idx = FIELD_GET(CMDQ_CONS_ERR, cons);
 949        struct arm_smmu_cmdq_ent cmd_sync = {
 950                .opcode = CMDQ_OP_CMD_SYNC,
 951        };
 952
 953        dev_err(smmu->dev, "CMDQ error (cons 0x%08x): %s\n", cons,
 954                idx < ARRAY_SIZE(cerror_str) ?  cerror_str[idx] : "Unknown");
 955
 956        switch (idx) {
 957        case CMDQ_ERR_CERROR_ABT_IDX:
 958                dev_err(smmu->dev, "retrying command fetch\n");
 959        case CMDQ_ERR_CERROR_NONE_IDX:
 960                return;
 961        case CMDQ_ERR_CERROR_ATC_INV_IDX:
 962                /*
 963                 * ATC Invalidation Completion timeout. CONS is still pointing
 964                 * at the CMD_SYNC. Attempt to complete other pending commands
 965                 * by repeating the CMD_SYNC, though we might well end up back
 966                 * here since the ATC invalidation may still be pending.
 967                 */
 968                return;
 969        case CMDQ_ERR_CERROR_ILL_IDX:
 970                /* Fallthrough */
 971        default:
 972                break;
 973        }
 974
 975        /*
 976         * We may have concurrent producers, so we need to be careful
 977         * not to touch any of the shadow cmdq state.
 978         */
 979        queue_read(cmd, Q_ENT(q, cons), q->ent_dwords);
 980        dev_err(smmu->dev, "skipping command in error state:\n");
 981        for (i = 0; i < ARRAY_SIZE(cmd); ++i)
 982                dev_err(smmu->dev, "\t0x%016llx\n", (unsigned long long)cmd[i]);
 983
 984        /* Convert the erroneous command into a CMD_SYNC */
 985        if (arm_smmu_cmdq_build_cmd(cmd, &cmd_sync)) {
 986                dev_err(smmu->dev, "failed to convert to CMD_SYNC\n");
 987                return;
 988        }
 989
 990        queue_write(Q_ENT(q, cons), cmd, q->ent_dwords);
 991}
 992
 993/*
 994 * Command queue locking.
 995 * This is a form of bastardised rwlock with the following major changes:
 996 *
 997 * - The only LOCK routines are exclusive_trylock() and shared_lock().
 998 *   Neither have barrier semantics, and instead provide only a control
 999 *   dependency.
1000 *
1001 * - The UNLOCK routines are supplemented with shared_tryunlock(), which
1002 *   fails if the caller appears to be the last lock holder (yes, this is
1003 *   racy). All successful UNLOCK routines have RELEASE semantics.
1004 */
1005static void arm_smmu_cmdq_shared_lock(struct arm_smmu_cmdq *cmdq)
1006{
1007        int val;
1008
1009        /*
1010         * We can try to avoid the cmpxchg() loop by simply incrementing the
1011         * lock counter. When held in exclusive state, the lock counter is set
1012         * to INT_MIN so these increments won't hurt as the value will remain
1013         * negative.
1014         */
1015        if (atomic_fetch_inc_relaxed(&cmdq->lock) >= 0)
1016                return;
1017
1018        do {
1019                val = atomic_cond_read_relaxed(&cmdq->lock, VAL >= 0);
1020        } while (atomic_cmpxchg_relaxed(&cmdq->lock, val, val + 1) != val);
1021}
1022
1023static void arm_smmu_cmdq_shared_unlock(struct arm_smmu_cmdq *cmdq)
1024{
1025        (void)atomic_dec_return_release(&cmdq->lock);
1026}
1027
1028static bool arm_smmu_cmdq_shared_tryunlock(struct arm_smmu_cmdq *cmdq)
1029{
1030        if (atomic_read(&cmdq->lock) == 1)
1031                return false;
1032
1033        arm_smmu_cmdq_shared_unlock(cmdq);
1034        return true;
1035}
1036
1037#define arm_smmu_cmdq_exclusive_trylock_irqsave(cmdq, flags)            \
1038({                                                                      \
1039        bool __ret;                                                     \
1040        local_irq_save(flags);                                          \
1041        __ret = !atomic_cmpxchg_relaxed(&cmdq->lock, 0, INT_MIN);       \
1042        if (!__ret)                                                     \
1043                local_irq_restore(flags);                               \
1044        __ret;                                                          \
1045})
1046
1047#define arm_smmu_cmdq_exclusive_unlock_irqrestore(cmdq, flags)          \
1048({                                                                      \
1049        atomic_set_release(&cmdq->lock, 0);                             \
1050        local_irq_restore(flags);                                       \
1051})
1052
1053
1054/*
1055 * Command queue insertion.
1056 * This is made fiddly by our attempts to achieve some sort of scalability
1057 * since there is one queue shared amongst all of the CPUs in the system.  If
1058 * you like mixed-size concurrency, dependency ordering and relaxed atomics,
1059 * then you'll *love* this monstrosity.
1060 *
1061 * The basic idea is to split the queue up into ranges of commands that are
1062 * owned by a given CPU; the owner may not have written all of the commands
1063 * itself, but is responsible for advancing the hardware prod pointer when
1064 * the time comes. The algorithm is roughly:
1065 *
1066 *      1. Allocate some space in the queue. At this point we also discover
1067 *         whether the head of the queue is currently owned by another CPU,
1068 *         or whether we are the owner.
1069 *
1070 *      2. Write our commands into our allocated slots in the queue.
1071 *
1072 *      3. Mark our slots as valid in arm_smmu_cmdq.valid_map.
1073 *
1074 *      4. If we are an owner:
1075 *              a. Wait for the previous owner to finish.
1076 *              b. Mark the queue head as unowned, which tells us the range
1077 *                 that we are responsible for publishing.
1078 *              c. Wait for all commands in our owned range to become valid.
1079 *              d. Advance the hardware prod pointer.
1080 *              e. Tell the next owner we've finished.
1081 *
1082 *      5. If we are inserting a CMD_SYNC (we may or may not have been an
1083 *         owner), then we need to stick around until it has completed:
1084 *              a. If we have MSIs, the SMMU can write back into the CMD_SYNC
1085 *                 to clear the first 4 bytes.
1086 *              b. Otherwise, we spin waiting for the hardware cons pointer to
1087 *                 advance past our command.
1088 *
1089 * The devil is in the details, particularly the use of locking for handling
1090 * SYNC completion and freeing up space in the queue before we think that it is
1091 * full.
1092 */
1093static void __arm_smmu_cmdq_poll_set_valid_map(struct arm_smmu_cmdq *cmdq,
1094                                               u32 sprod, u32 eprod, bool set)
1095{
1096        u32 swidx, sbidx, ewidx, ebidx;
1097        struct arm_smmu_ll_queue llq = {
1098                .max_n_shift    = cmdq->q.llq.max_n_shift,
1099                .prod           = sprod,
1100        };
1101
1102        ewidx = BIT_WORD(Q_IDX(&llq, eprod));
1103        ebidx = Q_IDX(&llq, eprod) % BITS_PER_LONG;
1104
1105        while (llq.prod != eprod) {
1106                unsigned long mask;
1107                atomic_long_t *ptr;
1108                u32 limit = BITS_PER_LONG;
1109
1110                swidx = BIT_WORD(Q_IDX(&llq, llq.prod));
1111                sbidx = Q_IDX(&llq, llq.prod) % BITS_PER_LONG;
1112
1113                ptr = &cmdq->valid_map[swidx];
1114
1115                if ((swidx == ewidx) && (sbidx < ebidx))
1116                        limit = ebidx;
1117
1118                mask = GENMASK(limit - 1, sbidx);
1119
1120                /*
1121                 * The valid bit is the inverse of the wrap bit. This means
1122                 * that a zero-initialised queue is invalid and, after marking
1123                 * all entries as valid, they become invalid again when we
1124                 * wrap.
1125                 */
1126                if (set) {
1127                        atomic_long_xor(mask, ptr);
1128                } else { /* Poll */
1129                        unsigned long valid;
1130
1131                        valid = (ULONG_MAX + !!Q_WRP(&llq, llq.prod)) & mask;
1132                        atomic_long_cond_read_relaxed(ptr, (VAL & mask) == valid);
1133                }
1134
1135                llq.prod = queue_inc_prod_n(&llq, limit - sbidx);
1136        }
1137}
1138
1139/* Mark all entries in the range [sprod, eprod) as valid */
1140static void arm_smmu_cmdq_set_valid_map(struct arm_smmu_cmdq *cmdq,
1141                                        u32 sprod, u32 eprod)
1142{
1143        __arm_smmu_cmdq_poll_set_valid_map(cmdq, sprod, eprod, true);
1144}
1145
1146/* Wait for all entries in the range [sprod, eprod) to become valid */
1147static void arm_smmu_cmdq_poll_valid_map(struct arm_smmu_cmdq *cmdq,
1148                                         u32 sprod, u32 eprod)
1149{
1150        __arm_smmu_cmdq_poll_set_valid_map(cmdq, sprod, eprod, false);
1151}
1152
1153/* Wait for the command queue to become non-full */
1154static int arm_smmu_cmdq_poll_until_not_full(struct arm_smmu_device *smmu,
1155                                             struct arm_smmu_ll_queue *llq)
1156{
1157        unsigned long flags;
1158        struct arm_smmu_queue_poll qp;
1159        struct arm_smmu_cmdq *cmdq = &smmu->cmdq;
1160        int ret = 0;
1161
1162        /*
1163         * Try to update our copy of cons by grabbing exclusive cmdq access. If
1164         * that fails, spin until somebody else updates it for us.
1165         */
1166        if (arm_smmu_cmdq_exclusive_trylock_irqsave(cmdq, flags)) {
1167                WRITE_ONCE(cmdq->q.llq.cons, readl_relaxed(cmdq->q.cons_reg));
1168                arm_smmu_cmdq_exclusive_unlock_irqrestore(cmdq, flags);
1169                llq->val = READ_ONCE(cmdq->q.llq.val);
1170                return 0;
1171        }
1172
1173        queue_poll_init(smmu, &qp);
1174        do {
1175                llq->val = READ_ONCE(smmu->cmdq.q.llq.val);
1176                if (!queue_full(llq))
1177                        break;
1178
1179                ret = queue_poll(&qp);
1180        } while (!ret);
1181
1182        return ret;
1183}
1184
1185/*
1186 * Wait until the SMMU signals a CMD_SYNC completion MSI.
1187 * Must be called with the cmdq lock held in some capacity.
1188 */
1189static int __arm_smmu_cmdq_poll_until_msi(struct arm_smmu_device *smmu,
1190                                          struct arm_smmu_ll_queue *llq)
1191{
1192        int ret = 0;
1193        struct arm_smmu_queue_poll qp;
1194        struct arm_smmu_cmdq *cmdq = &smmu->cmdq;
1195        u32 *cmd = (u32 *)(Q_ENT(&cmdq->q, llq->prod));
1196
1197        queue_poll_init(smmu, &qp);
1198
1199        /*
1200         * The MSI won't generate an event, since it's being written back
1201         * into the command queue.
1202         */
1203        qp.wfe = false;
1204        smp_cond_load_relaxed(cmd, !VAL || (ret = queue_poll(&qp)));
1205        llq->cons = ret ? llq->prod : queue_inc_prod_n(llq, 1);
1206        return ret;
1207}
1208
1209/*
1210 * Wait until the SMMU cons index passes llq->prod.
1211 * Must be called with the cmdq lock held in some capacity.
1212 */
1213static int __arm_smmu_cmdq_poll_until_consumed(struct arm_smmu_device *smmu,
1214                                               struct arm_smmu_ll_queue *llq)
1215{
1216        struct arm_smmu_queue_poll qp;
1217        struct arm_smmu_cmdq *cmdq = &smmu->cmdq;
1218        u32 prod = llq->prod;
1219        int ret = 0;
1220
1221        queue_poll_init(smmu, &qp);
1222        llq->val = READ_ONCE(smmu->cmdq.q.llq.val);
1223        do {
1224                if (queue_consumed(llq, prod))
1225                        break;
1226
1227                ret = queue_poll(&qp);
1228
1229                /*
1230                 * This needs to be a readl() so that our subsequent call
1231                 * to arm_smmu_cmdq_shared_tryunlock() can fail accurately.
1232                 *
1233                 * Specifically, we need to ensure that we observe all
1234                 * shared_lock()s by other CMD_SYNCs that share our owner,
1235                 * so that a failing call to tryunlock() means that we're
1236                 * the last one out and therefore we can safely advance
1237                 * cmdq->q.llq.cons. Roughly speaking:
1238                 *
1239                 * CPU 0                CPU1                    CPU2 (us)
1240                 *
1241                 * if (sync)
1242                 *      shared_lock();
1243                 *
1244                 * dma_wmb();
1245                 * set_valid_map();
1246                 *
1247                 *                      if (owner) {
1248                 *                              poll_valid_map();
1249                 *                              <control dependency>
1250                 *                              writel(prod_reg);
1251                 *
1252                 *                                              readl(cons_reg);
1253                 *                                              tryunlock();
1254                 *
1255                 * Requires us to see CPU 0's shared_lock() acquisition.
1256                 */
1257                llq->cons = readl(cmdq->q.cons_reg);
1258        } while (!ret);
1259
1260        return ret;
1261}
1262
1263static int arm_smmu_cmdq_poll_until_sync(struct arm_smmu_device *smmu,
1264                                         struct arm_smmu_ll_queue *llq)
1265{
1266        if (smmu->features & ARM_SMMU_FEAT_MSI &&
1267            smmu->features & ARM_SMMU_FEAT_COHERENCY)
1268                return __arm_smmu_cmdq_poll_until_msi(smmu, llq);
1269
1270        return __arm_smmu_cmdq_poll_until_consumed(smmu, llq);
1271}
1272
1273static void arm_smmu_cmdq_write_entries(struct arm_smmu_cmdq *cmdq, u64 *cmds,
1274                                        u32 prod, int n)
1275{
1276        int i;
1277        struct arm_smmu_ll_queue llq = {
1278                .max_n_shift    = cmdq->q.llq.max_n_shift,
1279                .prod           = prod,
1280        };
1281
1282        for (i = 0; i < n; ++i) {
1283                u64 *cmd = &cmds[i * CMDQ_ENT_DWORDS];
1284
1285                prod = queue_inc_prod_n(&llq, i);
1286                queue_write(Q_ENT(&cmdq->q, prod), cmd, CMDQ_ENT_DWORDS);
1287        }
1288}
1289
1290/*
1291 * This is the actual insertion function, and provides the following
1292 * ordering guarantees to callers:
1293 *
1294 * - There is a dma_wmb() before publishing any commands to the queue.
1295 *   This can be relied upon to order prior writes to data structures
1296 *   in memory (such as a CD or an STE) before the command.
1297 *
1298 * - On completion of a CMD_SYNC, there is a control dependency.
1299 *   This can be relied upon to order subsequent writes to memory (e.g.
1300 *   freeing an IOVA) after completion of the CMD_SYNC.
1301 *
1302 * - Command insertion is totally ordered, so if two CPUs each race to
1303 *   insert their own list of commands then all of the commands from one
1304 *   CPU will appear before any of the commands from the other CPU.
1305 */
1306static int arm_smmu_cmdq_issue_cmdlist(struct arm_smmu_device *smmu,
1307                                       u64 *cmds, int n, bool sync)
1308{
1309        u64 cmd_sync[CMDQ_ENT_DWORDS];
1310        u32 prod;
1311        unsigned long flags;
1312        bool owner;
1313        struct arm_smmu_cmdq *cmdq = &smmu->cmdq;
1314        struct arm_smmu_ll_queue llq = {
1315                .max_n_shift = cmdq->q.llq.max_n_shift,
1316        }, head = llq;
1317        int ret = 0;
1318
1319        /* 1. Allocate some space in the queue */
1320        local_irq_save(flags);
1321        llq.val = READ_ONCE(cmdq->q.llq.val);
1322        do {
1323                u64 old;
1324
1325                while (!queue_has_space(&llq, n + sync)) {
1326                        local_irq_restore(flags);
1327                        if (arm_smmu_cmdq_poll_until_not_full(smmu, &llq))
1328                                dev_err_ratelimited(smmu->dev, "CMDQ timeout\n");
1329                        local_irq_save(flags);
1330                }
1331
1332                head.cons = llq.cons;
1333                head.prod = queue_inc_prod_n(&llq, n + sync) |
1334                                             CMDQ_PROD_OWNED_FLAG;
1335
1336                old = cmpxchg_relaxed(&cmdq->q.llq.val, llq.val, head.val);
1337                if (old == llq.val)
1338                        break;
1339
1340                llq.val = old;
1341        } while (1);
1342        owner = !(llq.prod & CMDQ_PROD_OWNED_FLAG);
1343        head.prod &= ~CMDQ_PROD_OWNED_FLAG;
1344        llq.prod &= ~CMDQ_PROD_OWNED_FLAG;
1345
1346        /*
1347         * 2. Write our commands into the queue
1348         * Dependency ordering from the cmpxchg() loop above.
1349         */
1350        arm_smmu_cmdq_write_entries(cmdq, cmds, llq.prod, n);
1351        if (sync) {
1352                prod = queue_inc_prod_n(&llq, n);
1353                arm_smmu_cmdq_build_sync_cmd(cmd_sync, smmu, prod);
1354                queue_write(Q_ENT(&cmdq->q, prod), cmd_sync, CMDQ_ENT_DWORDS);
1355
1356                /*
1357                 * In order to determine completion of our CMD_SYNC, we must
1358                 * ensure that the queue can't wrap twice without us noticing.
1359                 * We achieve that by taking the cmdq lock as shared before
1360                 * marking our slot as valid.
1361                 */
1362                arm_smmu_cmdq_shared_lock(cmdq);
1363        }
1364
1365        /* 3. Mark our slots as valid, ensuring commands are visible first */
1366        dma_wmb();
1367        arm_smmu_cmdq_set_valid_map(cmdq, llq.prod, head.prod);
1368
1369        /* 4. If we are the owner, take control of the SMMU hardware */
1370        if (owner) {
1371                /* a. Wait for previous owner to finish */
1372                atomic_cond_read_relaxed(&cmdq->owner_prod, VAL == llq.prod);
1373
1374                /* b. Stop gathering work by clearing the owned flag */
1375                prod = atomic_fetch_andnot_relaxed(CMDQ_PROD_OWNED_FLAG,
1376                                                   &cmdq->q.llq.atomic.prod);
1377                prod &= ~CMDQ_PROD_OWNED_FLAG;
1378
1379                /*
1380                 * c. Wait for any gathered work to be written to the queue.
1381                 * Note that we read our own entries so that we have the control
1382                 * dependency required by (d).
1383                 */
1384                arm_smmu_cmdq_poll_valid_map(cmdq, llq.prod, prod);
1385
1386                /*
1387                 * d. Advance the hardware prod pointer
1388                 * Control dependency ordering from the entries becoming valid.
1389                 */
1390                writel_relaxed(prod, cmdq->q.prod_reg);
1391
1392                /*
1393                 * e. Tell the next owner we're done
1394                 * Make sure we've updated the hardware first, so that we don't
1395                 * race to update prod and potentially move it backwards.
1396                 */
1397                atomic_set_release(&cmdq->owner_prod, prod);
1398        }
1399
1400        /* 5. If we are inserting a CMD_SYNC, we must wait for it to complete */
1401        if (sync) {
1402                llq.prod = queue_inc_prod_n(&llq, n);
1403                ret = arm_smmu_cmdq_poll_until_sync(smmu, &llq);
1404                if (ret) {
1405                        dev_err_ratelimited(smmu->dev,
1406                                            "CMD_SYNC timeout at 0x%08x [hwprod 0x%08x, hwcons 0x%08x]\n",
1407                                            llq.prod,
1408                                            readl_relaxed(cmdq->q.prod_reg),
1409                                            readl_relaxed(cmdq->q.cons_reg));
1410                }
1411
1412                /*
1413                 * Try to unlock the cmq lock. This will fail if we're the last
1414                 * reader, in which case we can safely update cmdq->q.llq.cons
1415                 */
1416                if (!arm_smmu_cmdq_shared_tryunlock(cmdq)) {
1417                        WRITE_ONCE(cmdq->q.llq.cons, llq.cons);
1418                        arm_smmu_cmdq_shared_unlock(cmdq);
1419                }
1420        }
1421
1422        local_irq_restore(flags);
1423        return ret;
1424}
1425
1426static int arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu,
1427                                   struct arm_smmu_cmdq_ent *ent)
1428{
1429        u64 cmd[CMDQ_ENT_DWORDS];
1430
1431        if (arm_smmu_cmdq_build_cmd(cmd, ent)) {
1432                dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n",
1433                         ent->opcode);
1434                return -EINVAL;
1435        }
1436
1437        return arm_smmu_cmdq_issue_cmdlist(smmu, cmd, 1, false);
1438}
1439
1440static int arm_smmu_cmdq_issue_sync(struct arm_smmu_device *smmu)
1441{
1442        return arm_smmu_cmdq_issue_cmdlist(smmu, NULL, 0, true);
1443}
1444
1445/* Context descriptor manipulation functions */
1446static u64 arm_smmu_cpu_tcr_to_cd(u64 tcr)
1447{
1448        u64 val = 0;
1449
1450        /* Repack the TCR. Just care about TTBR0 for now */
1451        val |= ARM_SMMU_TCR2CD(tcr, T0SZ);
1452        val |= ARM_SMMU_TCR2CD(tcr, TG0);
1453        val |= ARM_SMMU_TCR2CD(tcr, IRGN0);
1454        val |= ARM_SMMU_TCR2CD(tcr, ORGN0);
1455        val |= ARM_SMMU_TCR2CD(tcr, SH0);
1456        val |= ARM_SMMU_TCR2CD(tcr, EPD0);
1457        val |= ARM_SMMU_TCR2CD(tcr, EPD1);
1458        val |= ARM_SMMU_TCR2CD(tcr, IPS);
1459
1460        return val;
1461}
1462
1463static void arm_smmu_write_ctx_desc(struct arm_smmu_device *smmu,
1464                                    struct arm_smmu_s1_cfg *cfg)
1465{
1466        u64 val;
1467
1468        /*
1469         * We don't need to issue any invalidation here, as we'll invalidate
1470         * the STE when installing the new entry anyway.
1471         */
1472        val = arm_smmu_cpu_tcr_to_cd(cfg->cd.tcr) |
1473#ifdef __BIG_ENDIAN
1474              CTXDESC_CD_0_ENDI |
1475#endif
1476              CTXDESC_CD_0_R | CTXDESC_CD_0_A | CTXDESC_CD_0_ASET |
1477              CTXDESC_CD_0_AA64 | FIELD_PREP(CTXDESC_CD_0_ASID, cfg->cd.asid) |
1478              CTXDESC_CD_0_V;
1479
1480        /* STALL_MODEL==0b10 && CD.S==0 is ILLEGAL */
1481        if (smmu->features & ARM_SMMU_FEAT_STALL_FORCE)
1482                val |= CTXDESC_CD_0_S;
1483
1484        cfg->cdptr[0] = cpu_to_le64(val);
1485
1486        val = cfg->cd.ttbr & CTXDESC_CD_1_TTB0_MASK;
1487        cfg->cdptr[1] = cpu_to_le64(val);
1488
1489        cfg->cdptr[3] = cpu_to_le64(cfg->cd.mair);
1490}
1491
1492/* Stream table manipulation functions */
1493static void
1494arm_smmu_write_strtab_l1_desc(__le64 *dst, struct arm_smmu_strtab_l1_desc *desc)
1495{
1496        u64 val = 0;
1497
1498        val |= FIELD_PREP(STRTAB_L1_DESC_SPAN, desc->span);
1499        val |= desc->l2ptr_dma & STRTAB_L1_DESC_L2PTR_MASK;
1500
1501        *dst = cpu_to_le64(val);
1502}
1503
1504static void arm_smmu_sync_ste_for_sid(struct arm_smmu_device *smmu, u32 sid)
1505{
1506        struct arm_smmu_cmdq_ent cmd = {
1507                .opcode = CMDQ_OP_CFGI_STE,
1508                .cfgi   = {
1509                        .sid    = sid,
1510                        .leaf   = true,
1511                },
1512        };
1513
1514        arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1515        arm_smmu_cmdq_issue_sync(smmu);
1516}
1517
1518static void arm_smmu_write_strtab_ent(struct arm_smmu_master *master, u32 sid,
1519                                      __le64 *dst)
1520{
1521        /*
1522         * This is hideously complicated, but we only really care about
1523         * three cases at the moment:
1524         *
1525         * 1. Invalid (all zero) -> bypass/fault (init)
1526         * 2. Bypass/fault -> translation/bypass (attach)
1527         * 3. Translation/bypass -> bypass/fault (detach)
1528         *
1529         * Given that we can't update the STE atomically and the SMMU
1530         * doesn't read the thing in a defined order, that leaves us
1531         * with the following maintenance requirements:
1532         *
1533         * 1. Update Config, return (init time STEs aren't live)
1534         * 2. Write everything apart from dword 0, sync, write dword 0, sync
1535         * 3. Update Config, sync
1536         */
1537        u64 val = le64_to_cpu(dst[0]);
1538        bool ste_live = false;
1539        struct arm_smmu_device *smmu = NULL;
1540        struct arm_smmu_s1_cfg *s1_cfg = NULL;
1541        struct arm_smmu_s2_cfg *s2_cfg = NULL;
1542        struct arm_smmu_domain *smmu_domain = NULL;
1543        struct arm_smmu_cmdq_ent prefetch_cmd = {
1544                .opcode         = CMDQ_OP_PREFETCH_CFG,
1545                .prefetch       = {
1546                        .sid    = sid,
1547                },
1548        };
1549
1550        if (master) {
1551                smmu_domain = master->domain;
1552                smmu = master->smmu;
1553        }
1554
1555        if (smmu_domain) {
1556                switch (smmu_domain->stage) {
1557                case ARM_SMMU_DOMAIN_S1:
1558                        s1_cfg = &smmu_domain->s1_cfg;
1559                        break;
1560                case ARM_SMMU_DOMAIN_S2:
1561                case ARM_SMMU_DOMAIN_NESTED:
1562                        s2_cfg = &smmu_domain->s2_cfg;
1563                        break;
1564                default:
1565                        break;
1566                }
1567        }
1568
1569        if (val & STRTAB_STE_0_V) {
1570                switch (FIELD_GET(STRTAB_STE_0_CFG, val)) {
1571                case STRTAB_STE_0_CFG_BYPASS:
1572                        break;
1573                case STRTAB_STE_0_CFG_S1_TRANS:
1574                case STRTAB_STE_0_CFG_S2_TRANS:
1575                        ste_live = true;
1576                        break;
1577                case STRTAB_STE_0_CFG_ABORT:
1578                        BUG_ON(!disable_bypass);
1579                        break;
1580                default:
1581                        BUG(); /* STE corruption */
1582                }
1583        }
1584
1585        /* Nuke the existing STE_0 value, as we're going to rewrite it */
1586        val = STRTAB_STE_0_V;
1587
1588        /* Bypass/fault */
1589        if (!smmu_domain || !(s1_cfg || s2_cfg)) {
1590                if (!smmu_domain && disable_bypass)
1591                        val |= FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_ABORT);
1592                else
1593                        val |= FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_BYPASS);
1594
1595                dst[0] = cpu_to_le64(val);
1596                dst[1] = cpu_to_le64(FIELD_PREP(STRTAB_STE_1_SHCFG,
1597                                                STRTAB_STE_1_SHCFG_INCOMING));
1598                dst[2] = 0; /* Nuke the VMID */
1599                /*
1600                 * The SMMU can perform negative caching, so we must sync
1601                 * the STE regardless of whether the old value was live.
1602                 */
1603                if (smmu)
1604                        arm_smmu_sync_ste_for_sid(smmu, sid);
1605                return;
1606        }
1607
1608        if (s1_cfg) {
1609                BUG_ON(ste_live);
1610                dst[1] = cpu_to_le64(
1611                         FIELD_PREP(STRTAB_STE_1_S1CIR, STRTAB_STE_1_S1C_CACHE_WBRA) |
1612                         FIELD_PREP(STRTAB_STE_1_S1COR, STRTAB_STE_1_S1C_CACHE_WBRA) |
1613                         FIELD_PREP(STRTAB_STE_1_S1CSH, ARM_SMMU_SH_ISH) |
1614                         FIELD_PREP(STRTAB_STE_1_STRW, STRTAB_STE_1_STRW_NSEL1));
1615
1616                if (smmu->features & ARM_SMMU_FEAT_STALLS &&
1617                   !(smmu->features & ARM_SMMU_FEAT_STALL_FORCE))
1618                        dst[1] |= cpu_to_le64(STRTAB_STE_1_S1STALLD);
1619
1620                val |= (s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK) |
1621                        FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_S1_TRANS);
1622        }
1623
1624        if (s2_cfg) {
1625                BUG_ON(ste_live);
1626                dst[2] = cpu_to_le64(
1627                         FIELD_PREP(STRTAB_STE_2_S2VMID, s2_cfg->vmid) |
1628                         FIELD_PREP(STRTAB_STE_2_VTCR, s2_cfg->vtcr) |
1629#ifdef __BIG_ENDIAN
1630                         STRTAB_STE_2_S2ENDI |
1631#endif
1632                         STRTAB_STE_2_S2PTW | STRTAB_STE_2_S2AA64 |
1633                         STRTAB_STE_2_S2R);
1634
1635                dst[3] = cpu_to_le64(s2_cfg->vttbr & STRTAB_STE_3_S2TTB_MASK);
1636
1637                val |= FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_S2_TRANS);
1638        }
1639
1640        if (master->ats_enabled)
1641                dst[1] |= cpu_to_le64(FIELD_PREP(STRTAB_STE_1_EATS,
1642                                                 STRTAB_STE_1_EATS_TRANS));
1643
1644        arm_smmu_sync_ste_for_sid(smmu, sid);
1645        dst[0] = cpu_to_le64(val);
1646        arm_smmu_sync_ste_for_sid(smmu, sid);
1647
1648        /* It's likely that we'll want to use the new STE soon */
1649        if (!(smmu->options & ARM_SMMU_OPT_SKIP_PREFETCH))
1650                arm_smmu_cmdq_issue_cmd(smmu, &prefetch_cmd);
1651}
1652
1653static void arm_smmu_init_bypass_stes(u64 *strtab, unsigned int nent)
1654{
1655        unsigned int i;
1656
1657        for (i = 0; i < nent; ++i) {
1658                arm_smmu_write_strtab_ent(NULL, -1, strtab);
1659                strtab += STRTAB_STE_DWORDS;
1660        }
1661}
1662
1663static int arm_smmu_init_l2_strtab(struct arm_smmu_device *smmu, u32 sid)
1664{
1665        size_t size;
1666        void *strtab;
1667        struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
1668        struct arm_smmu_strtab_l1_desc *desc = &cfg->l1_desc[sid >> STRTAB_SPLIT];
1669
1670        if (desc->l2ptr)
1671                return 0;
1672
1673        size = 1 << (STRTAB_SPLIT + ilog2(STRTAB_STE_DWORDS) + 3);
1674        strtab = &cfg->strtab[(sid >> STRTAB_SPLIT) * STRTAB_L1_DESC_DWORDS];
1675
1676        desc->span = STRTAB_SPLIT + 1;
1677        desc->l2ptr = dmam_alloc_coherent(smmu->dev, size, &desc->l2ptr_dma,
1678                                          GFP_KERNEL | __GFP_ZERO);
1679        if (!desc->l2ptr) {
1680                dev_err(smmu->dev,
1681                        "failed to allocate l2 stream table for SID %u\n",
1682                        sid);
1683                return -ENOMEM;
1684        }
1685
1686        arm_smmu_init_bypass_stes(desc->l2ptr, 1 << STRTAB_SPLIT);
1687        arm_smmu_write_strtab_l1_desc(strtab, desc);
1688        return 0;
1689}
1690
1691/* IRQ and event handlers */
1692static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev)
1693{
1694        int i;
1695        struct arm_smmu_device *smmu = dev;
1696        struct arm_smmu_queue *q = &smmu->evtq.q;
1697        struct arm_smmu_ll_queue *llq = &q->llq;
1698        u64 evt[EVTQ_ENT_DWORDS];
1699
1700        do {
1701                while (!queue_remove_raw(q, evt)) {
1702                        u8 id = FIELD_GET(EVTQ_0_ID, evt[0]);
1703
1704                        dev_info(smmu->dev, "event 0x%02x received:\n", id);
1705                        for (i = 0; i < ARRAY_SIZE(evt); ++i)
1706                                dev_info(smmu->dev, "\t0x%016llx\n",
1707                                         (unsigned long long)evt[i]);
1708
1709                }
1710
1711                /*
1712                 * Not much we can do on overflow, so scream and pretend we're
1713                 * trying harder.
1714                 */
1715                if (queue_sync_prod_in(q) == -EOVERFLOW)
1716                        dev_err(smmu->dev, "EVTQ overflow detected -- events lost\n");
1717        } while (!queue_empty(llq));
1718
1719        /* Sync our overflow flag, as we believe we're up to speed */
1720        llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) |
1721                    Q_IDX(llq, llq->cons);
1722        return IRQ_HANDLED;
1723}
1724
1725static void arm_smmu_handle_ppr(struct arm_smmu_device *smmu, u64 *evt)
1726{
1727        u32 sid, ssid;
1728        u16 grpid;
1729        bool ssv, last;
1730
1731        sid = FIELD_GET(PRIQ_0_SID, evt[0]);
1732        ssv = FIELD_GET(PRIQ_0_SSID_V, evt[0]);
1733        ssid = ssv ? FIELD_GET(PRIQ_0_SSID, evt[0]) : 0;
1734        last = FIELD_GET(PRIQ_0_PRG_LAST, evt[0]);
1735        grpid = FIELD_GET(PRIQ_1_PRG_IDX, evt[1]);
1736
1737        dev_info(smmu->dev, "unexpected PRI request received:\n");
1738        dev_info(smmu->dev,
1739                 "\tsid 0x%08x.0x%05x: [%u%s] %sprivileged %s%s%s access at iova 0x%016llx\n",
1740                 sid, ssid, grpid, last ? "L" : "",
1741                 evt[0] & PRIQ_0_PERM_PRIV ? "" : "un",
1742                 evt[0] & PRIQ_0_PERM_READ ? "R" : "",
1743                 evt[0] & PRIQ_0_PERM_WRITE ? "W" : "",
1744                 evt[0] & PRIQ_0_PERM_EXEC ? "X" : "",
1745                 evt[1] & PRIQ_1_ADDR_MASK);
1746
1747        if (last) {
1748                struct arm_smmu_cmdq_ent cmd = {
1749                        .opcode                 = CMDQ_OP_PRI_RESP,
1750                        .substream_valid        = ssv,
1751                        .pri                    = {
1752                                .sid    = sid,
1753                                .ssid   = ssid,
1754                                .grpid  = grpid,
1755                                .resp   = PRI_RESP_DENY,
1756                        },
1757                };
1758
1759                arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1760        }
1761}
1762
1763static irqreturn_t arm_smmu_priq_thread(int irq, void *dev)
1764{
1765        struct arm_smmu_device *smmu = dev;
1766        struct arm_smmu_queue *q = &smmu->priq.q;
1767        struct arm_smmu_ll_queue *llq = &q->llq;
1768        u64 evt[PRIQ_ENT_DWORDS];
1769
1770        do {
1771                while (!queue_remove_raw(q, evt))
1772                        arm_smmu_handle_ppr(smmu, evt);
1773
1774                if (queue_sync_prod_in(q) == -EOVERFLOW)
1775                        dev_err(smmu->dev, "PRIQ overflow detected -- requests lost\n");
1776        } while (!queue_empty(llq));
1777
1778        /* Sync our overflow flag, as we believe we're up to speed */
1779        llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) |
1780                      Q_IDX(llq, llq->cons);
1781        queue_sync_cons_out(q);
1782        return IRQ_HANDLED;
1783}
1784
1785static int arm_smmu_device_disable(struct arm_smmu_device *smmu);
1786
1787static irqreturn_t arm_smmu_gerror_handler(int irq, void *dev)
1788{
1789        u32 gerror, gerrorn, active;
1790        struct arm_smmu_device *smmu = dev;
1791
1792        gerror = readl_relaxed(smmu->base + ARM_SMMU_GERROR);
1793        gerrorn = readl_relaxed(smmu->base + ARM_SMMU_GERRORN);
1794
1795        active = gerror ^ gerrorn;
1796        if (!(active & GERROR_ERR_MASK))
1797                return IRQ_NONE; /* No errors pending */
1798
1799        dev_warn(smmu->dev,
1800                 "unexpected global error reported (0x%08x), this could be serious\n",
1801                 active);
1802
1803        if (active & GERROR_SFM_ERR) {
1804                dev_err(smmu->dev, "device has entered Service Failure Mode!\n");
1805                arm_smmu_device_disable(smmu);
1806        }
1807
1808        if (active & GERROR_MSI_GERROR_ABT_ERR)
1809                dev_warn(smmu->dev, "GERROR MSI write aborted\n");
1810
1811        if (active & GERROR_MSI_PRIQ_ABT_ERR)
1812                dev_warn(smmu->dev, "PRIQ MSI write aborted\n");
1813
1814        if (active & GERROR_MSI_EVTQ_ABT_ERR)
1815                dev_warn(smmu->dev, "EVTQ MSI write aborted\n");
1816
1817        if (active & GERROR_MSI_CMDQ_ABT_ERR)
1818                dev_warn(smmu->dev, "CMDQ MSI write aborted\n");
1819
1820        if (active & GERROR_PRIQ_ABT_ERR)
1821                dev_err(smmu->dev, "PRIQ write aborted -- events may have been lost\n");
1822
1823        if (active & GERROR_EVTQ_ABT_ERR)
1824                dev_err(smmu->dev, "EVTQ write aborted -- events may have been lost\n");
1825
1826        if (active & GERROR_CMDQ_ERR)
1827                arm_smmu_cmdq_skip_err(smmu);
1828
1829        writel(gerror, smmu->base + ARM_SMMU_GERRORN);
1830        return IRQ_HANDLED;
1831}
1832
1833static irqreturn_t arm_smmu_combined_irq_thread(int irq, void *dev)
1834{
1835        struct arm_smmu_device *smmu = dev;
1836
1837        arm_smmu_evtq_thread(irq, dev);
1838        if (smmu->features & ARM_SMMU_FEAT_PRI)
1839                arm_smmu_priq_thread(irq, dev);
1840
1841        return IRQ_HANDLED;
1842}
1843
1844static irqreturn_t arm_smmu_combined_irq_handler(int irq, void *dev)
1845{
1846        arm_smmu_gerror_handler(irq, dev);
1847        return IRQ_WAKE_THREAD;
1848}
1849
1850static void
1851arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
1852                        struct arm_smmu_cmdq_ent *cmd)
1853{
1854        size_t log2_span;
1855        size_t span_mask;
1856        /* ATC invalidates are always on 4096-bytes pages */
1857        size_t inval_grain_shift = 12;
1858        unsigned long page_start, page_end;
1859
1860        *cmd = (struct arm_smmu_cmdq_ent) {
1861                .opcode                 = CMDQ_OP_ATC_INV,
1862                .substream_valid        = !!ssid,
1863                .atc.ssid               = ssid,
1864        };
1865
1866        if (!size) {
1867                cmd->atc.size = ATC_INV_SIZE_ALL;
1868                return;
1869        }
1870
1871        page_start      = iova >> inval_grain_shift;
1872        page_end        = (iova + size - 1) >> inval_grain_shift;
1873
1874        /*
1875         * In an ATS Invalidate Request, the address must be aligned on the
1876         * range size, which must be a power of two number of page sizes. We
1877         * thus have to choose between grossly over-invalidating the region, or
1878         * splitting the invalidation into multiple commands. For simplicity
1879         * we'll go with the first solution, but should refine it in the future
1880         * if multiple commands are shown to be more efficient.
1881         *
1882         * Find the smallest power of two that covers the range. The most
1883         * significant differing bit between the start and end addresses,
1884         * fls(start ^ end), indicates the required span. For example:
1885         *
1886         * We want to invalidate pages [8; 11]. This is already the ideal range:
1887         *              x = 0b1000 ^ 0b1011 = 0b11
1888         *              span = 1 << fls(x) = 4
1889         *
1890         * To invalidate pages [7; 10], we need to invalidate [0; 15]:
1891         *              x = 0b0111 ^ 0b1010 = 0b1101
1892         *              span = 1 << fls(x) = 16
1893         */
1894        log2_span       = fls_long(page_start ^ page_end);
1895        span_mask       = (1ULL << log2_span) - 1;
1896
1897        page_start      &= ~span_mask;
1898
1899        cmd->atc.addr   = page_start << inval_grain_shift;
1900        cmd->atc.size   = log2_span;
1901}
1902
1903static int arm_smmu_atc_inv_master(struct arm_smmu_master *master,
1904                                   struct arm_smmu_cmdq_ent *cmd)
1905{
1906        int i;
1907
1908        if (!master->ats_enabled)
1909                return 0;
1910
1911        for (i = 0; i < master->num_sids; i++) {
1912                cmd->atc.sid = master->sids[i];
1913                arm_smmu_cmdq_issue_cmd(master->smmu, cmd);
1914        }
1915
1916        return arm_smmu_cmdq_issue_sync(master->smmu);
1917}
1918
1919static int arm_smmu_atc_inv_domain(struct arm_smmu_domain *smmu_domain,
1920                                   int ssid, unsigned long iova, size_t size)
1921{
1922        int ret = 0;
1923        unsigned long flags;
1924        struct arm_smmu_cmdq_ent cmd;
1925        struct arm_smmu_master *master;
1926
1927        if (!(smmu_domain->smmu->features & ARM_SMMU_FEAT_ATS))
1928                return 0;
1929
1930        /*
1931         * Ensure that we've completed prior invalidation of the main TLBs
1932         * before we read 'nr_ats_masters' in case of a concurrent call to
1933         * arm_smmu_enable_ats():
1934         *
1935         *      // unmap()                      // arm_smmu_enable_ats()
1936         *      TLBI+SYNC                       atomic_inc(&nr_ats_masters);
1937         *      smp_mb();                       [...]
1938         *      atomic_read(&nr_ats_masters);   pci_enable_ats() // writel()
1939         *
1940         * Ensures that we always see the incremented 'nr_ats_masters' count if
1941         * ATS was enabled at the PCI device before completion of the TLBI.
1942         */
1943        smp_mb();
1944        if (!atomic_read(&smmu_domain->nr_ats_masters))
1945                return 0;
1946
1947        arm_smmu_atc_inv_to_cmd(ssid, iova, size, &cmd);
1948
1949        spin_lock_irqsave(&smmu_domain->devices_lock, flags);
1950        list_for_each_entry(master, &smmu_domain->devices, domain_head)
1951                ret |= arm_smmu_atc_inv_master(master, &cmd);
1952        spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
1953
1954        return ret ? -ETIMEDOUT : 0;
1955}
1956
1957/* IO_PGTABLE API */
1958static void arm_smmu_tlb_inv_context(void *cookie)
1959{
1960        struct arm_smmu_domain *smmu_domain = cookie;
1961        struct arm_smmu_device *smmu = smmu_domain->smmu;
1962        struct arm_smmu_cmdq_ent cmd;
1963
1964        if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1965                cmd.opcode      = CMDQ_OP_TLBI_NH_ASID;
1966                cmd.tlbi.asid   = smmu_domain->s1_cfg.cd.asid;
1967                cmd.tlbi.vmid   = 0;
1968        } else {
1969                cmd.opcode      = CMDQ_OP_TLBI_S12_VMALL;
1970                cmd.tlbi.vmid   = smmu_domain->s2_cfg.vmid;
1971        }
1972
1973        /*
1974         * NOTE: when io-pgtable is in non-strict mode, we may get here with
1975         * PTEs previously cleared by unmaps on the current CPU not yet visible
1976         * to the SMMU. We are relying on the dma_wmb() implicit during cmd
1977         * insertion to guarantee those are observed before the TLBI. Do be
1978         * careful, 007.
1979         */
1980        arm_smmu_cmdq_issue_cmd(smmu, &cmd);
1981        arm_smmu_cmdq_issue_sync(smmu);
1982        arm_smmu_atc_inv_domain(smmu_domain, 0, 0, 0);
1983}
1984
1985static void arm_smmu_tlb_inv_range(unsigned long iova, size_t size,
1986                                   size_t granule, bool leaf,
1987                                   struct arm_smmu_domain *smmu_domain)
1988{
1989        u64 cmds[CMDQ_BATCH_ENTRIES * CMDQ_ENT_DWORDS];
1990        struct arm_smmu_device *smmu = smmu_domain->smmu;
1991        unsigned long start = iova, end = iova + size;
1992        int i = 0;
1993        struct arm_smmu_cmdq_ent cmd = {
1994                .tlbi = {
1995                        .leaf   = leaf,
1996                },
1997        };
1998
1999        if (!size)
2000                return;
2001
2002        if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
2003                cmd.opcode      = CMDQ_OP_TLBI_NH_VA;
2004                cmd.tlbi.asid   = smmu_domain->s1_cfg.cd.asid;
2005        } else {
2006                cmd.opcode      = CMDQ_OP_TLBI_S2_IPA;
2007                cmd.tlbi.vmid   = smmu_domain->s2_cfg.vmid;
2008        }
2009
2010        while (iova < end) {
2011                if (i == CMDQ_BATCH_ENTRIES) {
2012                        arm_smmu_cmdq_issue_cmdlist(smmu, cmds, i, false);
2013                        i = 0;
2014                }
2015
2016                cmd.tlbi.addr = iova;
2017                arm_smmu_cmdq_build_cmd(&cmds[i * CMDQ_ENT_DWORDS], &cmd);
2018                iova += granule;
2019                i++;
2020        }
2021
2022        arm_smmu_cmdq_issue_cmdlist(smmu, cmds, i, true);
2023
2024        /*
2025         * Unfortunately, this can't be leaf-only since we may have
2026         * zapped an entire table.
2027         */
2028        arm_smmu_atc_inv_domain(smmu_domain, 0, start, size);
2029}
2030
2031static void arm_smmu_tlb_inv_page_nosync(struct iommu_iotlb_gather *gather,
2032                                         unsigned long iova, size_t granule,
2033                                         void *cookie)
2034{
2035        struct arm_smmu_domain *smmu_domain = cookie;
2036        struct iommu_domain *domain = &smmu_domain->domain;
2037
2038        iommu_iotlb_gather_add_page(domain, gather, iova, granule);
2039}
2040
2041static void arm_smmu_tlb_inv_walk(unsigned long iova, size_t size,
2042                                  size_t granule, void *cookie)
2043{
2044        arm_smmu_tlb_inv_range(iova, size, granule, false, cookie);
2045}
2046
2047static void arm_smmu_tlb_inv_leaf(unsigned long iova, size_t size,
2048                                  size_t granule, void *cookie)
2049{
2050        arm_smmu_tlb_inv_range(iova, size, granule, true, cookie);
2051}
2052
2053static const struct iommu_flush_ops arm_smmu_flush_ops = {
2054        .tlb_flush_all  = arm_smmu_tlb_inv_context,
2055        .tlb_flush_walk = arm_smmu_tlb_inv_walk,
2056        .tlb_flush_leaf = arm_smmu_tlb_inv_leaf,
2057        .tlb_add_page   = arm_smmu_tlb_inv_page_nosync,
2058};
2059
2060/* IOMMU API */
2061static bool arm_smmu_capable(enum iommu_cap cap)
2062{
2063        switch (cap) {
2064        case IOMMU_CAP_CACHE_COHERENCY:
2065                return true;
2066        case IOMMU_CAP_NOEXEC:
2067                return true;
2068        default:
2069                return false;
2070        }
2071}
2072
2073static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
2074{
2075        struct arm_smmu_domain *smmu_domain;
2076
2077        if (type != IOMMU_DOMAIN_UNMANAGED &&
2078            type != IOMMU_DOMAIN_DMA &&
2079            type != IOMMU_DOMAIN_IDENTITY)
2080                return NULL;
2081
2082        /*
2083         * Allocate the domain and initialise some of its data structures.
2084         * We can't really do anything meaningful until we've added a
2085         * master.
2086         */
2087        smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
2088        if (!smmu_domain)
2089                return NULL;
2090
2091        if (type == IOMMU_DOMAIN_DMA &&
2092            iommu_get_dma_cookie(&smmu_domain->domain)) {
2093                kfree(smmu_domain);
2094                return NULL;
2095        }
2096
2097        mutex_init(&smmu_domain->init_mutex);
2098        INIT_LIST_HEAD(&smmu_domain->devices);
2099        spin_lock_init(&smmu_domain->devices_lock);
2100
2101        return &smmu_domain->domain;
2102}
2103
2104static int arm_smmu_bitmap_alloc(unsigned long *map, int span)
2105{
2106        int idx, size = 1 << span;
2107
2108        do {
2109                idx = find_first_zero_bit(map, size);
2110                if (idx == size)
2111                        return -ENOSPC;
2112        } while (test_and_set_bit(idx, map));
2113
2114        return idx;
2115}
2116
2117static void arm_smmu_bitmap_free(unsigned long *map, int idx)
2118{
2119        clear_bit(idx, map);
2120}
2121
2122static void arm_smmu_domain_free(struct iommu_domain *domain)
2123{
2124        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2125        struct arm_smmu_device *smmu = smmu_domain->smmu;
2126
2127        iommu_put_dma_cookie(domain);
2128        free_io_pgtable_ops(smmu_domain->pgtbl_ops);
2129
2130        /* Free the CD and ASID, if we allocated them */
2131        if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
2132                struct arm_smmu_s1_cfg *cfg = &smmu_domain->s1_cfg;
2133
2134                if (cfg->cdptr) {
2135                        dmam_free_coherent(smmu_domain->smmu->dev,
2136                                           CTXDESC_CD_DWORDS << 3,
2137                                           cfg->cdptr,
2138                                           cfg->cdptr_dma);
2139
2140                        arm_smmu_bitmap_free(smmu->asid_map, cfg->cd.asid);
2141                }
2142        } else {
2143                struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg;
2144                if (cfg->vmid)
2145                        arm_smmu_bitmap_free(smmu->vmid_map, cfg->vmid);
2146        }
2147
2148        kfree(smmu_domain);
2149}
2150
2151static int arm_smmu_domain_finalise_s1(struct arm_smmu_domain *smmu_domain,
2152                                       struct io_pgtable_cfg *pgtbl_cfg)
2153{
2154        int ret;
2155        int asid;
2156        struct arm_smmu_device *smmu = smmu_domain->smmu;
2157        struct arm_smmu_s1_cfg *cfg = &smmu_domain->s1_cfg;
2158
2159        asid = arm_smmu_bitmap_alloc(smmu->asid_map, smmu->asid_bits);
2160        if (asid < 0)
2161                return asid;
2162
2163        cfg->cdptr = dmam_alloc_coherent(smmu->dev, CTXDESC_CD_DWORDS << 3,
2164                                         &cfg->cdptr_dma,
2165                                         GFP_KERNEL | __GFP_ZERO);
2166        if (!cfg->cdptr) {
2167                dev_warn(smmu->dev, "failed to allocate context descriptor\n");
2168                ret = -ENOMEM;
2169                goto out_free_asid;
2170        }
2171
2172        cfg->cd.asid    = (u16)asid;
2173        cfg->cd.ttbr    = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
2174        cfg->cd.tcr     = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
2175        cfg->cd.mair    = pgtbl_cfg->arm_lpae_s1_cfg.mair;
2176        return 0;
2177
2178out_free_asid:
2179        arm_smmu_bitmap_free(smmu->asid_map, asid);
2180        return ret;
2181}
2182
2183static int arm_smmu_domain_finalise_s2(struct arm_smmu_domain *smmu_domain,
2184                                       struct io_pgtable_cfg *pgtbl_cfg)
2185{
2186        int vmid;
2187        struct arm_smmu_device *smmu = smmu_domain->smmu;
2188        struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg;
2189
2190        vmid = arm_smmu_bitmap_alloc(smmu->vmid_map, smmu->vmid_bits);
2191        if (vmid < 0)
2192                return vmid;
2193
2194        cfg->vmid       = (u16)vmid;
2195        cfg->vttbr      = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
2196        cfg->vtcr       = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
2197        return 0;
2198}
2199
2200static int arm_smmu_domain_finalise(struct iommu_domain *domain)
2201{
2202        int ret;
2203        unsigned long ias, oas;
2204        enum io_pgtable_fmt fmt;
2205        struct io_pgtable_cfg pgtbl_cfg;
2206        struct io_pgtable_ops *pgtbl_ops;
2207        int (*finalise_stage_fn)(struct arm_smmu_domain *,
2208                                 struct io_pgtable_cfg *);
2209        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2210        struct arm_smmu_device *smmu = smmu_domain->smmu;
2211
2212        if (domain->type == IOMMU_DOMAIN_IDENTITY) {
2213                smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS;
2214                return 0;
2215        }
2216
2217        /* Restrict the stage to what we can actually support */
2218        if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
2219                smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
2220        if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
2221                smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
2222
2223        switch (smmu_domain->stage) {
2224        case ARM_SMMU_DOMAIN_S1:
2225                ias = (smmu->features & ARM_SMMU_FEAT_VAX) ? 52 : 48;
2226                ias = min_t(unsigned long, ias, VA_BITS);
2227                oas = smmu->ias;
2228                fmt = ARM_64_LPAE_S1;
2229                finalise_stage_fn = arm_smmu_domain_finalise_s1;
2230                break;
2231        case ARM_SMMU_DOMAIN_NESTED:
2232        case ARM_SMMU_DOMAIN_S2:
2233                ias = smmu->ias;
2234                oas = smmu->oas;
2235                fmt = ARM_64_LPAE_S2;
2236                finalise_stage_fn = arm_smmu_domain_finalise_s2;
2237                break;
2238        default:
2239                return -EINVAL;
2240        }
2241
2242        pgtbl_cfg = (struct io_pgtable_cfg) {
2243                .pgsize_bitmap  = smmu->pgsize_bitmap,
2244                .ias            = ias,
2245                .oas            = oas,
2246                .coherent_walk  = smmu->features & ARM_SMMU_FEAT_COHERENCY,
2247                .tlb            = &arm_smmu_flush_ops,
2248                .iommu_dev      = smmu->dev,
2249        };
2250
2251        if (smmu_domain->non_strict)
2252                pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_NON_STRICT;
2253
2254        pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
2255        if (!pgtbl_ops)
2256                return -ENOMEM;
2257
2258        domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
2259        domain->geometry.aperture_end = (1UL << pgtbl_cfg.ias) - 1;
2260        domain->geometry.force_aperture = true;
2261
2262        ret = finalise_stage_fn(smmu_domain, &pgtbl_cfg);
2263        if (ret < 0) {
2264                free_io_pgtable_ops(pgtbl_ops);
2265                return ret;
2266        }
2267
2268        smmu_domain->pgtbl_ops = pgtbl_ops;
2269        return 0;
2270}
2271
2272static __le64 *arm_smmu_get_step_for_sid(struct arm_smmu_device *smmu, u32 sid)
2273{
2274        __le64 *step;
2275        struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
2276
2277        if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) {
2278                struct arm_smmu_strtab_l1_desc *l1_desc;
2279                int idx;
2280
2281                /* Two-level walk */
2282                idx = (sid >> STRTAB_SPLIT) * STRTAB_L1_DESC_DWORDS;
2283                l1_desc = &cfg->l1_desc[idx];
2284                idx = (sid & ((1 << STRTAB_SPLIT) - 1)) * STRTAB_STE_DWORDS;
2285                step = &l1_desc->l2ptr[idx];
2286        } else {
2287                /* Simple linear lookup */
2288                step = &cfg->strtab[sid * STRTAB_STE_DWORDS];
2289        }
2290
2291        return step;
2292}
2293
2294static void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master)
2295{
2296        int i, j;
2297        struct arm_smmu_device *smmu = master->smmu;
2298
2299        for (i = 0; i < master->num_sids; ++i) {
2300                u32 sid = master->sids[i];
2301                __le64 *step = arm_smmu_get_step_for_sid(smmu, sid);
2302
2303                /* Bridged PCI devices may end up with duplicated IDs */
2304                for (j = 0; j < i; j++)
2305                        if (master->sids[j] == sid)
2306                                break;
2307                if (j < i)
2308                        continue;
2309
2310                arm_smmu_write_strtab_ent(master, sid, step);
2311        }
2312}
2313
2314#ifdef CONFIG_PCI_ATS
2315static bool arm_smmu_ats_supported(struct arm_smmu_master *master)
2316{
2317        struct pci_dev *pdev;
2318        struct arm_smmu_device *smmu = master->smmu;
2319        struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(master->dev);
2320
2321        if (!(smmu->features & ARM_SMMU_FEAT_ATS) || !dev_is_pci(master->dev) ||
2322            !(fwspec->flags & IOMMU_FWSPEC_PCI_RC_ATS) || pci_ats_disabled())
2323                return false;
2324
2325        pdev = to_pci_dev(master->dev);
2326        return !pdev->untrusted && pdev->ats_cap;
2327}
2328#else
2329static bool arm_smmu_ats_supported(struct arm_smmu_master *master)
2330{
2331        return false;
2332}
2333#endif
2334
2335static void arm_smmu_enable_ats(struct arm_smmu_master *master)
2336{
2337        size_t stu;
2338        struct pci_dev *pdev;
2339        struct arm_smmu_device *smmu = master->smmu;
2340        struct arm_smmu_domain *smmu_domain = master->domain;
2341
2342        /* Don't enable ATS at the endpoint if it's not enabled in the STE */
2343        if (!master->ats_enabled)
2344                return;
2345
2346        /* Smallest Translation Unit: log2 of the smallest supported granule */
2347        stu = __ffs(smmu->pgsize_bitmap);
2348        pdev = to_pci_dev(master->dev);
2349
2350        atomic_inc(&smmu_domain->nr_ats_masters);
2351        arm_smmu_atc_inv_domain(smmu_domain, 0, 0, 0);
2352        if (pci_enable_ats(pdev, stu))
2353                dev_err(master->dev, "Failed to enable ATS (STU %zu)\n", stu);
2354}
2355
2356static void arm_smmu_disable_ats(struct arm_smmu_master *master)
2357{
2358        struct arm_smmu_cmdq_ent cmd;
2359        struct arm_smmu_domain *smmu_domain = master->domain;
2360
2361        if (!master->ats_enabled)
2362                return;
2363
2364        pci_disable_ats(to_pci_dev(master->dev));
2365        /*
2366         * Ensure ATS is disabled at the endpoint before we issue the
2367         * ATC invalidation via the SMMU.
2368         */
2369        wmb();
2370        arm_smmu_atc_inv_to_cmd(0, 0, 0, &cmd);
2371        arm_smmu_atc_inv_master(master, &cmd);
2372        atomic_dec(&smmu_domain->nr_ats_masters);
2373}
2374
2375static void arm_smmu_detach_dev(struct arm_smmu_master *master)
2376{
2377        unsigned long flags;
2378        struct arm_smmu_domain *smmu_domain = master->domain;
2379
2380        if (!smmu_domain)
2381                return;
2382
2383        arm_smmu_disable_ats(master);
2384
2385        spin_lock_irqsave(&smmu_domain->devices_lock, flags);
2386        list_del(&master->domain_head);
2387        spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
2388
2389        master->domain = NULL;
2390        master->ats_enabled = false;
2391        arm_smmu_install_ste_for_dev(master);
2392}
2393
2394static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
2395{
2396        int ret = 0;
2397        unsigned long flags;
2398        struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
2399        struct arm_smmu_device *smmu;
2400        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2401        struct arm_smmu_master *master;
2402
2403        if (!fwspec)
2404                return -ENOENT;
2405
2406        master = fwspec->iommu_priv;
2407        smmu = master->smmu;
2408
2409        arm_smmu_detach_dev(master);
2410
2411        mutex_lock(&smmu_domain->init_mutex);
2412
2413        if (!smmu_domain->smmu) {
2414                smmu_domain->smmu = smmu;
2415                ret = arm_smmu_domain_finalise(domain);
2416                if (ret) {
2417                        smmu_domain->smmu = NULL;
2418                        goto out_unlock;
2419                }
2420        } else if (smmu_domain->smmu != smmu) {
2421                dev_err(dev,
2422                        "cannot attach to SMMU %s (upstream of %s)\n",
2423                        dev_name(smmu_domain->smmu->dev),
2424                        dev_name(smmu->dev));
2425                ret = -ENXIO;
2426                goto out_unlock;
2427        }
2428
2429        master->domain = smmu_domain;
2430
2431        if (smmu_domain->stage != ARM_SMMU_DOMAIN_BYPASS)
2432                master->ats_enabled = arm_smmu_ats_supported(master);
2433
2434        if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
2435                arm_smmu_write_ctx_desc(smmu, &smmu_domain->s1_cfg);
2436
2437        arm_smmu_install_ste_for_dev(master);
2438
2439        spin_lock_irqsave(&smmu_domain->devices_lock, flags);
2440        list_add(&master->domain_head, &smmu_domain->devices);
2441        spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
2442
2443        arm_smmu_enable_ats(master);
2444
2445out_unlock:
2446        mutex_unlock(&smmu_domain->init_mutex);
2447        return ret;
2448}
2449
2450static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
2451                        phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
2452{
2453        struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
2454
2455        if (!ops)
2456                return -ENODEV;
2457
2458        return ops->map(ops, iova, paddr, size, prot);
2459}
2460
2461static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
2462                             size_t size, struct iommu_iotlb_gather *gather)
2463{
2464        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2465        struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
2466
2467        if (!ops)
2468                return 0;
2469
2470        return ops->unmap(ops, iova, size, gather);
2471}
2472
2473static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain)
2474{
2475        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2476
2477        if (smmu_domain->smmu)
2478                arm_smmu_tlb_inv_context(smmu_domain);
2479}
2480
2481static void arm_smmu_iotlb_sync(struct iommu_domain *domain,
2482                                struct iommu_iotlb_gather *gather)
2483{
2484        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2485
2486        arm_smmu_tlb_inv_range(gather->start, gather->end - gather->start,
2487                               gather->pgsize, true, smmu_domain);
2488}
2489
2490static phys_addr_t
2491arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
2492{
2493        struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
2494
2495        if (domain->type == IOMMU_DOMAIN_IDENTITY)
2496                return iova;
2497
2498        if (!ops)
2499                return 0;
2500
2501        return ops->iova_to_phys(ops, iova);
2502}
2503
2504static struct platform_driver arm_smmu_driver;
2505
2506static
2507struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
2508{
2509        struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
2510                                                          fwnode);
2511        put_device(dev);
2512        return dev ? dev_get_drvdata(dev) : NULL;
2513}
2514
2515static bool arm_smmu_sid_in_range(struct arm_smmu_device *smmu, u32 sid)
2516{
2517        unsigned long limit = smmu->strtab_cfg.num_l1_ents;
2518
2519        if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB)
2520                limit *= 1UL << STRTAB_SPLIT;
2521
2522        return sid < limit;
2523}
2524
2525static struct iommu_ops arm_smmu_ops;
2526
2527static int arm_smmu_add_device(struct device *dev)
2528{
2529        int i, ret;
2530        struct arm_smmu_device *smmu;
2531        struct arm_smmu_master *master;
2532        struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
2533        struct iommu_group *group;
2534
2535        if (!fwspec || fwspec->ops != &arm_smmu_ops)
2536                return -ENODEV;
2537        /*
2538         * We _can_ actually withstand dodgy bus code re-calling add_device()
2539         * without an intervening remove_device()/of_xlate() sequence, but
2540         * we're not going to do so quietly...
2541         */
2542        if (WARN_ON_ONCE(fwspec->iommu_priv)) {
2543                master = fwspec->iommu_priv;
2544                smmu = master->smmu;
2545        } else {
2546                smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
2547                if (!smmu)
2548                        return -ENODEV;
2549                master = kzalloc(sizeof(*master), GFP_KERNEL);
2550                if (!master)
2551                        return -ENOMEM;
2552
2553                master->dev = dev;
2554                master->smmu = smmu;
2555                master->sids = fwspec->ids;
2556                master->num_sids = fwspec->num_ids;
2557                fwspec->iommu_priv = master;
2558        }
2559
2560        /* Check the SIDs are in range of the SMMU and our stream table */
2561        for (i = 0; i < master->num_sids; i++) {
2562                u32 sid = master->sids[i];
2563
2564                if (!arm_smmu_sid_in_range(smmu, sid))
2565                        return -ERANGE;
2566
2567                /* Ensure l2 strtab is initialised */
2568                if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) {
2569                        ret = arm_smmu_init_l2_strtab(smmu, sid);
2570                        if (ret)
2571                                return ret;
2572                }
2573        }
2574
2575        group = iommu_group_get_for_dev(dev);
2576        if (!IS_ERR(group)) {
2577                iommu_group_put(group);
2578                iommu_device_link(&smmu->iommu, dev);
2579        }
2580
2581        return PTR_ERR_OR_ZERO(group);
2582}
2583
2584static void arm_smmu_remove_device(struct device *dev)
2585{
2586        struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
2587        struct arm_smmu_master *master;
2588        struct arm_smmu_device *smmu;
2589
2590        if (!fwspec || fwspec->ops != &arm_smmu_ops)
2591                return;
2592
2593        master = fwspec->iommu_priv;
2594        smmu = master->smmu;
2595        arm_smmu_detach_dev(master);
2596        iommu_group_remove_device(dev);
2597        iommu_device_unlink(&smmu->iommu, dev);
2598        kfree(master);
2599        iommu_fwspec_free(dev);
2600}
2601
2602static struct iommu_group *arm_smmu_device_group(struct device *dev)
2603{
2604        struct iommu_group *group;
2605
2606        /*
2607         * We don't support devices sharing stream IDs other than PCI RID
2608         * aliases, since the necessary ID-to-device lookup becomes rather
2609         * impractical given a potential sparse 32-bit stream ID space.
2610         */
2611        if (dev_is_pci(dev))
2612                group = pci_device_group(dev);
2613        else
2614                group = generic_device_group(dev);
2615
2616        return group;
2617}
2618
2619static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
2620                                    enum iommu_attr attr, void *data)
2621{
2622        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2623
2624        switch (domain->type) {
2625        case IOMMU_DOMAIN_UNMANAGED:
2626                switch (attr) {
2627                case DOMAIN_ATTR_NESTING:
2628                        *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
2629                        return 0;
2630                default:
2631                        return -ENODEV;
2632                }
2633                break;
2634        case IOMMU_DOMAIN_DMA:
2635                switch (attr) {
2636                case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
2637                        *(int *)data = smmu_domain->non_strict;
2638                        return 0;
2639                default:
2640                        return -ENODEV;
2641                }
2642                break;
2643        default:
2644                return -EINVAL;
2645        }
2646}
2647
2648static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
2649                                    enum iommu_attr attr, void *data)
2650{
2651        int ret = 0;
2652        struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
2653
2654        mutex_lock(&smmu_domain->init_mutex);
2655
2656        switch (domain->type) {
2657        case IOMMU_DOMAIN_UNMANAGED:
2658                switch (attr) {
2659                case DOMAIN_ATTR_NESTING:
2660                        if (smmu_domain->smmu) {
2661                                ret = -EPERM;
2662                                goto out_unlock;
2663                        }
2664
2665                        if (*(int *)data)
2666                                smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
2667                        else
2668                                smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
2669                        break;
2670                default:
2671                        ret = -ENODEV;
2672                }
2673                break;
2674        case IOMMU_DOMAIN_DMA:
2675                switch(attr) {
2676                case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
2677                        smmu_domain->non_strict = *(int *)data;
2678                        break;
2679                default:
2680                        ret = -ENODEV;
2681                }
2682                break;
2683        default:
2684                ret = -EINVAL;
2685        }
2686
2687out_unlock:
2688        mutex_unlock(&smmu_domain->init_mutex);
2689        return ret;
2690}
2691
2692static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
2693{
2694        return iommu_fwspec_add_ids(dev, args->args, 1);
2695}
2696
2697static void arm_smmu_get_resv_regions(struct device *dev,
2698                                      struct list_head *head)
2699{
2700        struct iommu_resv_region *region;
2701        int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
2702
2703        region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
2704                                         prot, IOMMU_RESV_SW_MSI);
2705        if (!region)
2706                return;
2707
2708        list_add_tail(&region->list, head);
2709
2710        iommu_dma_get_resv_regions(dev, head);
2711}
2712
2713static void arm_smmu_put_resv_regions(struct device *dev,
2714                                      struct list_head *head)
2715{
2716        struct iommu_resv_region *entry, *next;
2717
2718        list_for_each_entry_safe(entry, next, head, list)
2719                kfree(entry);
2720}
2721
2722static struct iommu_ops arm_smmu_ops = {
2723        .capable                = arm_smmu_capable,
2724        .domain_alloc           = arm_smmu_domain_alloc,
2725        .domain_free            = arm_smmu_domain_free,
2726        .attach_dev             = arm_smmu_attach_dev,
2727        .map                    = arm_smmu_map,
2728        .unmap                  = arm_smmu_unmap,
2729        .flush_iotlb_all        = arm_smmu_flush_iotlb_all,
2730        .iotlb_sync             = arm_smmu_iotlb_sync,
2731        .iova_to_phys           = arm_smmu_iova_to_phys,
2732        .add_device             = arm_smmu_add_device,
2733        .remove_device          = arm_smmu_remove_device,
2734        .device_group           = arm_smmu_device_group,
2735        .domain_get_attr        = arm_smmu_domain_get_attr,
2736        .domain_set_attr        = arm_smmu_domain_set_attr,
2737        .of_xlate               = arm_smmu_of_xlate,
2738        .get_resv_regions       = arm_smmu_get_resv_regions,
2739        .put_resv_regions       = arm_smmu_put_resv_regions,
2740        .pgsize_bitmap          = -1UL, /* Restricted during device attach */
2741};
2742
2743/* Probing and initialisation functions */
2744static int arm_smmu_init_one_queue(struct arm_smmu_device *smmu,
2745                                   struct arm_smmu_queue *q,
2746                                   unsigned long prod_off,
2747                                   unsigned long cons_off,
2748                                   size_t dwords, const char *name)
2749{
2750        size_t qsz;
2751
2752        do {
2753                qsz = ((1 << q->llq.max_n_shift) * dwords) << 3;
2754                q->base = dmam_alloc_coherent(smmu->dev, qsz, &q->base_dma,
2755                                              GFP_KERNEL);
2756                if (q->base || qsz < PAGE_SIZE)
2757                        break;
2758
2759                q->llq.max_n_shift--;
2760        } while (1);
2761
2762        if (!q->base) {
2763                dev_err(smmu->dev,
2764                        "failed to allocate queue (0x%zx bytes) for %s\n",
2765                        qsz, name);
2766                return -ENOMEM;
2767        }
2768
2769        if (!WARN_ON(q->base_dma & (qsz - 1))) {
2770                dev_info(smmu->dev, "allocated %u entries for %s\n",
2771                         1 << q->llq.max_n_shift, name);
2772        }
2773
2774        q->prod_reg     = arm_smmu_page1_fixup(prod_off, smmu);
2775        q->cons_reg     = arm_smmu_page1_fixup(cons_off, smmu);
2776        q->ent_dwords   = dwords;
2777
2778        q->q_base  = Q_BASE_RWA;
2779        q->q_base |= q->base_dma & Q_BASE_ADDR_MASK;
2780        q->q_base |= FIELD_PREP(Q_BASE_LOG2SIZE, q->llq.max_n_shift);
2781
2782        q->llq.prod = q->llq.cons = 0;
2783        return 0;
2784}
2785
2786static void arm_smmu_cmdq_free_bitmap(void *data)
2787{
2788        unsigned long *bitmap = data;
2789        bitmap_free(bitmap);
2790}
2791
2792static int arm_smmu_cmdq_init(struct arm_smmu_device *smmu)
2793{
2794        int ret = 0;
2795        struct arm_smmu_cmdq *cmdq = &smmu->cmdq;
2796        unsigned int nents = 1 << cmdq->q.llq.max_n_shift;
2797        atomic_long_t *bitmap;
2798
2799        atomic_set(&cmdq->owner_prod, 0);
2800        atomic_set(&cmdq->lock, 0);
2801
2802        bitmap = (atomic_long_t *)bitmap_zalloc(nents, GFP_KERNEL);
2803        if (!bitmap) {
2804                dev_err(smmu->dev, "failed to allocate cmdq bitmap\n");
2805                ret = -ENOMEM;
2806        } else {
2807                cmdq->valid_map = bitmap;
2808                devm_add_action(smmu->dev, arm_smmu_cmdq_free_bitmap, bitmap);
2809        }
2810
2811        return ret;
2812}
2813
2814static int arm_smmu_init_queues(struct arm_smmu_device *smmu)
2815{
2816        int ret;
2817
2818        /* cmdq */
2819        ret = arm_smmu_init_one_queue(smmu, &smmu->cmdq.q, ARM_SMMU_CMDQ_PROD,
2820                                      ARM_SMMU_CMDQ_CONS, CMDQ_ENT_DWORDS,
2821                                      "cmdq");
2822        if (ret)
2823                return ret;
2824
2825        ret = arm_smmu_cmdq_init(smmu);
2826        if (ret)
2827                return ret;
2828
2829        /* evtq */
2830        ret = arm_smmu_init_one_queue(smmu, &smmu->evtq.q, ARM_SMMU_EVTQ_PROD,
2831                                      ARM_SMMU_EVTQ_CONS, EVTQ_ENT_DWORDS,
2832                                      "evtq");
2833        if (ret)
2834                return ret;
2835
2836        /* priq */
2837        if (!(smmu->features & ARM_SMMU_FEAT_PRI))
2838                return 0;
2839
2840        return arm_smmu_init_one_queue(smmu, &smmu->priq.q, ARM_SMMU_PRIQ_PROD,
2841                                       ARM_SMMU_PRIQ_CONS, PRIQ_ENT_DWORDS,
2842                                       "priq");
2843}
2844
2845static int arm_smmu_init_l1_strtab(struct arm_smmu_device *smmu)
2846{
2847        unsigned int i;
2848        struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
2849        size_t size = sizeof(*cfg->l1_desc) * cfg->num_l1_ents;
2850        void *strtab = smmu->strtab_cfg.strtab;
2851
2852        cfg->l1_desc = devm_kzalloc(smmu->dev, size, GFP_KERNEL);
2853        if (!cfg->l1_desc) {
2854                dev_err(smmu->dev, "failed to allocate l1 stream table desc\n");
2855                return -ENOMEM;
2856        }
2857
2858        for (i = 0; i < cfg->num_l1_ents; ++i) {
2859                arm_smmu_write_strtab_l1_desc(strtab, &cfg->l1_desc[i]);
2860                strtab += STRTAB_L1_DESC_DWORDS << 3;
2861        }
2862
2863        return 0;
2864}
2865
2866static int arm_smmu_init_strtab_2lvl(struct arm_smmu_device *smmu)
2867{
2868        void *strtab;
2869        u64 reg;
2870        u32 size, l1size;
2871        struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
2872
2873        /* Calculate the L1 size, capped to the SIDSIZE. */
2874        size = STRTAB_L1_SZ_SHIFT - (ilog2(STRTAB_L1_DESC_DWORDS) + 3);
2875        size = min(size, smmu->sid_bits - STRTAB_SPLIT);
2876        cfg->num_l1_ents = 1 << size;
2877
2878        size += STRTAB_SPLIT;
2879        if (size < smmu->sid_bits)
2880                dev_warn(smmu->dev,
2881                         "2-level strtab only covers %u/%u bits of SID\n",
2882                         size, smmu->sid_bits);
2883
2884        l1size = cfg->num_l1_ents * (STRTAB_L1_DESC_DWORDS << 3);
2885        strtab = dmam_alloc_coherent(smmu->dev, l1size, &cfg->strtab_dma,
2886                                     GFP_KERNEL | __GFP_ZERO);
2887        if (!strtab) {
2888                dev_err(smmu->dev,
2889                        "failed to allocate l1 stream table (%u bytes)\n",
2890                        size);
2891                return -ENOMEM;
2892        }
2893        cfg->strtab = strtab;
2894
2895        /* Configure strtab_base_cfg for 2 levels */
2896        reg  = FIELD_PREP(STRTAB_BASE_CFG_FMT, STRTAB_BASE_CFG_FMT_2LVL);
2897        reg |= FIELD_PREP(STRTAB_BASE_CFG_LOG2SIZE, size);
2898        reg |= FIELD_PREP(STRTAB_BASE_CFG_SPLIT, STRTAB_SPLIT);
2899        cfg->strtab_base_cfg = reg;
2900
2901        return arm_smmu_init_l1_strtab(smmu);
2902}
2903
2904static int arm_smmu_init_strtab_linear(struct arm_smmu_device *smmu)
2905{
2906        void *strtab;
2907        u64 reg;
2908        u32 size;
2909        struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg;
2910
2911        size = (1 << smmu->sid_bits) * (STRTAB_STE_DWORDS << 3);
2912        strtab = dmam_alloc_coherent(smmu->dev, size, &cfg->strtab_dma,
2913                                     GFP_KERNEL | __GFP_ZERO);
2914        if (!strtab) {
2915                dev_err(smmu->dev,
2916                        "failed to allocate linear stream table (%u bytes)\n",
2917                        size);
2918                return -ENOMEM;
2919        }
2920        cfg->strtab = strtab;
2921        cfg->num_l1_ents = 1 << smmu->sid_bits;
2922
2923        /* Configure strtab_base_cfg for a linear table covering all SIDs */
2924        reg  = FIELD_PREP(STRTAB_BASE_CFG_FMT, STRTAB_BASE_CFG_FMT_LINEAR);
2925        reg |= FIELD_PREP(STRTAB_BASE_CFG_LOG2SIZE, smmu->sid_bits);
2926        cfg->strtab_base_cfg = reg;
2927
2928        arm_smmu_init_bypass_stes(strtab, cfg->num_l1_ents);
2929        return 0;
2930}
2931
2932static int arm_smmu_init_strtab(struct arm_smmu_device *smmu)
2933{
2934        u64 reg;
2935        int ret;
2936
2937        if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB)
2938                ret = arm_smmu_init_strtab_2lvl(smmu);
2939        else
2940                ret = arm_smmu_init_strtab_linear(smmu);
2941
2942        if (ret)
2943                return ret;
2944
2945        /* Set the strtab base address */
2946        reg  = smmu->strtab_cfg.strtab_dma & STRTAB_BASE_ADDR_MASK;
2947        reg |= STRTAB_BASE_RA;
2948        smmu->strtab_cfg.strtab_base = reg;
2949
2950        /* Allocate the first VMID for stage-2 bypass STEs */
2951        set_bit(0, smmu->vmid_map);
2952        return 0;
2953}
2954
2955static int arm_smmu_init_structures(struct arm_smmu_device *smmu)
2956{
2957        int ret;
2958
2959        ret = arm_smmu_init_queues(smmu);
2960        if (ret)
2961                return ret;
2962
2963        return arm_smmu_init_strtab(smmu);
2964}
2965
2966static int arm_smmu_write_reg_sync(struct arm_smmu_device *smmu, u32 val,
2967                                   unsigned int reg_off, unsigned int ack_off)
2968{
2969        u32 reg;
2970
2971        writel_relaxed(val, smmu->base + reg_off);
2972        return readl_relaxed_poll_timeout(smmu->base + ack_off, reg, reg == val,
2973                                          1, ARM_SMMU_POLL_TIMEOUT_US);
2974}
2975
2976/* GBPA is "special" */
2977static int arm_smmu_update_gbpa(struct arm_smmu_device *smmu, u32 set, u32 clr)
2978{
2979        int ret;
2980        u32 reg, __iomem *gbpa = smmu->base + ARM_SMMU_GBPA;
2981
2982        ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE),
2983                                         1, ARM_SMMU_POLL_TIMEOUT_US);
2984        if (ret)
2985                return ret;
2986
2987        reg &= ~clr;
2988        reg |= set;
2989        writel_relaxed(reg | GBPA_UPDATE, gbpa);
2990        ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE),
2991                                         1, ARM_SMMU_POLL_TIMEOUT_US);
2992
2993        if (ret)
2994                dev_err(smmu->dev, "GBPA not responding to update\n");
2995        return ret;
2996}
2997
2998static void arm_smmu_free_msis(void *data)
2999{
3000        struct device *dev = data;
3001        platform_msi_domain_free_irqs(dev);
3002}
3003
3004static void arm_smmu_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg)
3005{
3006        phys_addr_t doorbell;
3007        struct device *dev = msi_desc_to_dev(desc);
3008        struct arm_smmu_device *smmu = dev_get_drvdata(dev);
3009        phys_addr_t *cfg = arm_smmu_msi_cfg[desc->platform.msi_index];
3010
3011        doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo;
3012        doorbell &= MSI_CFG0_ADDR_MASK;
3013
3014        writeq_relaxed(doorbell, smmu->base + cfg[0]);
3015        writel_relaxed(msg->data, smmu->base + cfg[1]);
3016        writel_relaxed(ARM_SMMU_MEMATTR_DEVICE_nGnRE, smmu->base + cfg[2]);
3017}
3018
3019static void arm_smmu_setup_msis(struct arm_smmu_device *smmu)
3020{
3021        struct msi_desc *desc;
3022        int ret, nvec = ARM_SMMU_MAX_MSIS;
3023        struct device *dev = smmu->dev;
3024
3025        /* Clear the MSI address regs */
3026        writeq_relaxed(0, smmu->base + ARM_SMMU_GERROR_IRQ_CFG0);
3027        writeq_relaxed(0, smmu->base + ARM_SMMU_EVTQ_IRQ_CFG0);
3028
3029        if (smmu->features & ARM_SMMU_FEAT_PRI)
3030                writeq_relaxed(0, smmu->base + ARM_SMMU_PRIQ_IRQ_CFG0);
3031        else
3032                nvec--;
3033
3034        if (!(smmu->features & ARM_SMMU_FEAT_MSI))
3035                return;
3036
3037        if (!dev->msi_domain) {
3038                dev_info(smmu->dev, "msi_domain absent - falling back to wired irqs\n");
3039                return;
3040        }
3041
3042        /* Allocate MSIs for evtq, gerror and priq. Ignore cmdq */
3043        ret = platform_msi_domain_alloc_irqs(dev, nvec, arm_smmu_write_msi_msg);
3044        if (ret) {
3045                dev_warn(dev, "failed to allocate MSIs - falling back to wired irqs\n");
3046                return;
3047        }
3048
3049        for_each_msi_entry(desc, dev) {
3050                switch (desc->platform.msi_index) {
3051                case EVTQ_MSI_INDEX:
3052                        smmu->evtq.q.irq = desc->irq;
3053                        break;
3054                case GERROR_MSI_INDEX:
3055                        smmu->gerr_irq = desc->irq;
3056                        break;
3057                case PRIQ_MSI_INDEX:
3058                        smmu->priq.q.irq = desc->irq;
3059                        break;
3060                default:        /* Unknown */
3061                        continue;
3062                }
3063        }
3064
3065        /* Add callback to free MSIs on teardown */
3066        devm_add_action(dev, arm_smmu_free_msis, dev);
3067}
3068
3069static void arm_smmu_setup_unique_irqs(struct arm_smmu_device *smmu)
3070{
3071        int irq, ret;
3072
3073        arm_smmu_setup_msis(smmu);
3074
3075        /* Request interrupt lines */
3076        irq = smmu->evtq.q.irq;
3077        if (irq) {
3078                ret = devm_request_threaded_irq(smmu->dev, irq, NULL,
3079                                                arm_smmu_evtq_thread,
3080                                                IRQF_ONESHOT,
3081                                                "arm-smmu-v3-evtq", smmu);
3082                if (ret < 0)
3083                        dev_warn(smmu->dev, "failed to enable evtq irq\n");
3084        } else {
3085                dev_warn(smmu->dev, "no evtq irq - events will not be reported!\n");
3086        }
3087
3088        irq = smmu->gerr_irq;
3089        if (irq) {
3090                ret = devm_request_irq(smmu->dev, irq, arm_smmu_gerror_handler,
3091                                       0, "arm-smmu-v3-gerror", smmu);
3092                if (ret < 0)
3093                        dev_warn(smmu->dev, "failed to enable gerror irq\n");
3094        } else {
3095                dev_warn(smmu->dev, "no gerr irq - errors will not be reported!\n");
3096        }
3097
3098        if (smmu->features & ARM_SMMU_FEAT_PRI) {
3099                irq = smmu->priq.q.irq;
3100                if (irq) {
3101                        ret = devm_request_threaded_irq(smmu->dev, irq, NULL,
3102                                                        arm_smmu_priq_thread,
3103                                                        IRQF_ONESHOT,
3104                                                        "arm-smmu-v3-priq",
3105                                                        smmu);
3106                        if (ret < 0)
3107                                dev_warn(smmu->dev,
3108                                         "failed to enable priq irq\n");
3109                } else {
3110                        dev_warn(smmu->dev, "no priq irq - PRI will be broken\n");
3111                }
3112        }
3113}
3114
3115static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu)
3116{
3117        int ret, irq;
3118        u32 irqen_flags = IRQ_CTRL_EVTQ_IRQEN | IRQ_CTRL_GERROR_IRQEN;
3119
3120        /* Disable IRQs first */
3121        ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_IRQ_CTRL,
3122                                      ARM_SMMU_IRQ_CTRLACK);
3123        if (ret) {
3124                dev_err(smmu->dev, "failed to disable irqs\n");
3125                return ret;
3126        }
3127
3128        irq = smmu->combined_irq;
3129        if (irq) {
3130                /*
3131                 * Cavium ThunderX2 implementation doesn't support unique irq
3132                 * lines. Use a single irq line for all the SMMUv3 interrupts.
3133                 */
3134                ret = devm_request_threaded_irq(smmu->dev, irq,
3135                                        arm_smmu_combined_irq_handler,
3136                                        arm_smmu_combined_irq_thread,
3137                                        IRQF_ONESHOT,
3138                                        "arm-smmu-v3-combined-irq", smmu);
3139                if (ret < 0)
3140                        dev_warn(smmu->dev, "failed to enable combined irq\n");
3141        } else
3142                arm_smmu_setup_unique_irqs(smmu);
3143
3144        if (smmu->features & ARM_SMMU_FEAT_PRI)
3145                irqen_flags |= IRQ_CTRL_PRIQ_IRQEN;
3146
3147        /* Enable interrupt generation on the SMMU */
3148        ret = arm_smmu_write_reg_sync(smmu, irqen_flags,
3149                                      ARM_SMMU_IRQ_CTRL, ARM_SMMU_IRQ_CTRLACK);
3150        if (ret)
3151                dev_warn(smmu->dev, "failed to enable irqs\n");
3152
3153        return 0;
3154}
3155
3156static int arm_smmu_device_disable(struct arm_smmu_device *smmu)
3157{
3158        int ret;
3159
3160        ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_CR0, ARM_SMMU_CR0ACK);
3161        if (ret)
3162                dev_err(smmu->dev, "failed to clear cr0\n");
3163
3164        return ret;
3165}
3166
3167static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass)
3168{
3169        int ret;
3170        u32 reg, enables;
3171        struct arm_smmu_cmdq_ent cmd;
3172
3173        /* Clear CR0 and sync (disables SMMU and queue processing) */
3174        reg = readl_relaxed(smmu->base + ARM_SMMU_CR0);
3175        if (reg & CR0_SMMUEN) {
3176                dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n");
3177                WARN_ON(is_kdump_kernel() && !disable_bypass);
3178                arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0);
3179        }
3180
3181        ret = arm_smmu_device_disable(smmu);
3182        if (ret)
3183                return ret;
3184
3185        /* CR1 (table and queue memory attributes) */
3186        reg = FIELD_PREP(CR1_TABLE_SH, ARM_SMMU_SH_ISH) |
3187              FIELD_PREP(CR1_TABLE_OC, CR1_CACHE_WB) |
3188              FIELD_PREP(CR1_TABLE_IC, CR1_CACHE_WB) |
3189              FIELD_PREP(CR1_QUEUE_SH, ARM_SMMU_SH_ISH) |
3190              FIELD_PREP(CR1_QUEUE_OC, CR1_CACHE_WB) |
3191              FIELD_PREP(CR1_QUEUE_IC, CR1_CACHE_WB);
3192        writel_relaxed(reg, smmu->base + ARM_SMMU_CR1);
3193
3194        /* CR2 (random crap) */
3195        reg = CR2_PTM | CR2_RECINVSID | CR2_E2H;
3196        writel_relaxed(reg, smmu->base + ARM_SMMU_CR2);
3197
3198        /* Stream table */
3199        writeq_relaxed(smmu->strtab_cfg.strtab_base,
3200                       smmu->base + ARM_SMMU_STRTAB_BASE);
3201        writel_relaxed(smmu->strtab_cfg.strtab_base_cfg,
3202                       smmu->base + ARM_SMMU_STRTAB_BASE_CFG);
3203
3204        /* Command queue */
3205        writeq_relaxed(smmu->cmdq.q.q_base, smmu->base + ARM_SMMU_CMDQ_BASE);
3206        writel_relaxed(smmu->cmdq.q.llq.prod, smmu->base + ARM_SMMU_CMDQ_PROD);
3207        writel_relaxed(smmu->cmdq.q.llq.cons, smmu->base + ARM_SMMU_CMDQ_CONS);
3208
3209        enables = CR0_CMDQEN;
3210        ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
3211                                      ARM_SMMU_CR0ACK);
3212        if (ret) {
3213                dev_err(smmu->dev, "failed to enable command queue\n");
3214                return ret;
3215        }
3216
3217        /* Invalidate any cached configuration */
3218        cmd.opcode = CMDQ_OP_CFGI_ALL;
3219        arm_smmu_cmdq_issue_cmd(smmu, &cmd);
3220        arm_smmu_cmdq_issue_sync(smmu);
3221
3222        /* Invalidate any stale TLB entries */
3223        if (smmu->features & ARM_SMMU_FEAT_HYP) {
3224                cmd.opcode = CMDQ_OP_TLBI_EL2_ALL;
3225                arm_smmu_cmdq_issue_cmd(smmu, &cmd);
3226        }
3227
3228        cmd.opcode = CMDQ_OP_TLBI_NSNH_ALL;
3229        arm_smmu_cmdq_issue_cmd(smmu, &cmd);
3230        arm_smmu_cmdq_issue_sync(smmu);
3231
3232        /* Event queue */
3233        writeq_relaxed(smmu->evtq.q.q_base, smmu->base + ARM_SMMU_EVTQ_BASE);
3234        writel_relaxed(smmu->evtq.q.llq.prod,
3235                       arm_smmu_page1_fixup(ARM_SMMU_EVTQ_PROD, smmu));
3236        writel_relaxed(smmu->evtq.q.llq.cons,
3237                       arm_smmu_page1_fixup(ARM_SMMU_EVTQ_CONS, smmu));
3238
3239        enables |= CR0_EVTQEN;
3240        ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
3241                                      ARM_SMMU_CR0ACK);
3242        if (ret) {
3243                dev_err(smmu->dev, "failed to enable event queue\n");
3244                return ret;
3245        }
3246
3247        /* PRI queue */
3248        if (smmu->features & ARM_SMMU_FEAT_PRI) {
3249                writeq_relaxed(smmu->priq.q.q_base,
3250                               smmu->base + ARM_SMMU_PRIQ_BASE);
3251                writel_relaxed(smmu->priq.q.llq.prod,
3252                               arm_smmu_page1_fixup(ARM_SMMU_PRIQ_PROD, smmu));
3253                writel_relaxed(smmu->priq.q.llq.cons,
3254                               arm_smmu_page1_fixup(ARM_SMMU_PRIQ_CONS, smmu));
3255
3256                enables |= CR0_PRIQEN;
3257                ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
3258                                              ARM_SMMU_CR0ACK);
3259                if (ret) {
3260                        dev_err(smmu->dev, "failed to enable PRI queue\n");
3261                        return ret;
3262                }
3263        }
3264
3265        if (smmu->features & ARM_SMMU_FEAT_ATS) {
3266                enables |= CR0_ATSCHK;
3267                ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
3268                                              ARM_SMMU_CR0ACK);
3269                if (ret) {
3270                        dev_err(smmu->dev, "failed to enable ATS check\n");
3271                        return ret;
3272                }
3273        }
3274
3275        ret = arm_smmu_setup_irqs(smmu);
3276        if (ret) {
3277                dev_err(smmu->dev, "failed to setup irqs\n");
3278                return ret;
3279        }
3280
3281        if (is_kdump_kernel())
3282                enables &= ~(CR0_EVTQEN | CR0_PRIQEN);
3283
3284        /* Enable the SMMU interface, or ensure bypass */
3285        if (!bypass || disable_bypass) {
3286                enables |= CR0_SMMUEN;
3287        } else {
3288                ret = arm_smmu_update_gbpa(smmu, 0, GBPA_ABORT);
3289                if (ret)
3290                        return ret;
3291        }
3292        ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0,
3293                                      ARM_SMMU_CR0ACK);
3294        if (ret) {
3295                dev_err(smmu->dev, "failed to enable SMMU interface\n");
3296                return ret;
3297        }
3298
3299        return 0;
3300}
3301
3302static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu)
3303{
3304        u32 reg;
3305        bool coherent = smmu->features & ARM_SMMU_FEAT_COHERENCY;
3306
3307        /* IDR0 */
3308        reg = readl_relaxed(smmu->base + ARM_SMMU_IDR0);
3309
3310        /* 2-level structures */
3311        if (FIELD_GET(IDR0_ST_LVL, reg) == IDR0_ST_LVL_2LVL)
3312                smmu->features |= ARM_SMMU_FEAT_2_LVL_STRTAB;
3313
3314        if (reg & IDR0_CD2L)
3315                smmu->features |= ARM_SMMU_FEAT_2_LVL_CDTAB;
3316
3317        /*
3318         * Translation table endianness.
3319         * We currently require the same endianness as the CPU, but this
3320         * could be changed later by adding a new IO_PGTABLE_QUIRK.
3321         */
3322        switch (FIELD_GET(IDR0_TTENDIAN, reg)) {
3323        case IDR0_TTENDIAN_MIXED:
3324                smmu->features |= ARM_SMMU_FEAT_TT_LE | ARM_SMMU_FEAT_TT_BE;
3325                break;
3326#ifdef __BIG_ENDIAN
3327        case IDR0_TTENDIAN_BE:
3328                smmu->features |= ARM_SMMU_FEAT_TT_BE;
3329                break;
3330#else
3331        case IDR0_TTENDIAN_LE:
3332                smmu->features |= ARM_SMMU_FEAT_TT_LE;
3333                break;
3334#endif
3335        default:
3336                dev_err(smmu->dev, "unknown/unsupported TT endianness!\n");
3337                return -ENXIO;
3338        }
3339
3340        /* Boolean feature flags */
3341        if (IS_ENABLED(CONFIG_PCI_PRI) && reg & IDR0_PRI)
3342                smmu->features |= ARM_SMMU_FEAT_PRI;
3343
3344        if (IS_ENABLED(CONFIG_PCI_ATS) && reg & IDR0_ATS)
3345                smmu->features |= ARM_SMMU_FEAT_ATS;
3346
3347        if (reg & IDR0_SEV)
3348                smmu->features |= ARM_SMMU_FEAT_SEV;
3349
3350        if (reg & IDR0_MSI)
3351                smmu->features |= ARM_SMMU_FEAT_MSI;
3352
3353        if (reg & IDR0_HYP)
3354                smmu->features |= ARM_SMMU_FEAT_HYP;
3355
3356        /*
3357         * The coherency feature as set by FW is used in preference to the ID
3358         * register, but warn on mismatch.
3359         */
3360        if (!!(reg & IDR0_COHACC) != coherent)
3361                dev_warn(smmu->dev, "IDR0.COHACC overridden by FW configuration (%s)\n",
3362                         coherent ? "true" : "false");
3363
3364        switch (FIELD_GET(IDR0_STALL_MODEL, reg)) {
3365        case IDR0_STALL_MODEL_FORCE:
3366                smmu->features |= ARM_SMMU_FEAT_STALL_FORCE;
3367                /* Fallthrough */
3368        case IDR0_STALL_MODEL_STALL:
3369                smmu->features |= ARM_SMMU_FEAT_STALLS;
3370        }
3371
3372        if (reg & IDR0_S1P)
3373                smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
3374
3375        if (reg & IDR0_S2P)
3376                smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
3377
3378        if (!(reg & (IDR0_S1P | IDR0_S2P))) {
3379                dev_err(smmu->dev, "no translation support!\n");
3380                return -ENXIO;
3381        }
3382
3383        /* We only support the AArch64 table format at present */
3384        switch (FIELD_GET(IDR0_TTF, reg)) {
3385        case IDR0_TTF_AARCH32_64:
3386                smmu->ias = 40;
3387                /* Fallthrough */
3388        case IDR0_TTF_AARCH64:
3389                break;
3390        default:
3391                dev_err(smmu->dev, "AArch64 table format not supported!\n");
3392                return -ENXIO;
3393        }
3394
3395        /* ASID/VMID sizes */
3396        smmu->asid_bits = reg & IDR0_ASID16 ? 16 : 8;
3397        smmu->vmid_bits = reg & IDR0_VMID16 ? 16 : 8;
3398
3399        /* IDR1 */
3400        reg = readl_relaxed(smmu->base + ARM_SMMU_IDR1);
3401        if (reg & (IDR1_TABLES_PRESET | IDR1_QUEUES_PRESET | IDR1_REL)) {
3402                dev_err(smmu->dev, "embedded implementation not supported\n");
3403                return -ENXIO;
3404        }
3405
3406        /* Queue sizes, capped to ensure natural alignment */
3407        smmu->cmdq.q.llq.max_n_shift = min_t(u32, CMDQ_MAX_SZ_SHIFT,
3408                                             FIELD_GET(IDR1_CMDQS, reg));
3409        if (smmu->cmdq.q.llq.max_n_shift <= ilog2(CMDQ_BATCH_ENTRIES)) {
3410                /*
3411                 * We don't support splitting up batches, so one batch of
3412                 * commands plus an extra sync needs to fit inside the command
3413                 * queue. There's also no way we can handle the weird alignment
3414                 * restrictions on the base pointer for a unit-length queue.
3415                 */
3416                dev_err(smmu->dev, "command queue size <= %d entries not supported\n",
3417                        CMDQ_BATCH_ENTRIES);
3418                return -ENXIO;
3419        }
3420
3421        smmu->evtq.q.llq.max_n_shift = min_t(u32, EVTQ_MAX_SZ_SHIFT,
3422                                             FIELD_GET(IDR1_EVTQS, reg));
3423        smmu->priq.q.llq.max_n_shift = min_t(u32, PRIQ_MAX_SZ_SHIFT,
3424                                             FIELD_GET(IDR1_PRIQS, reg));
3425
3426        /* SID/SSID sizes */
3427        smmu->ssid_bits = FIELD_GET(IDR1_SSIDSIZE, reg);
3428        smmu->sid_bits = FIELD_GET(IDR1_SIDSIZE, reg);
3429
3430        /*
3431         * If the SMMU supports fewer bits than would fill a single L2 stream
3432         * table, use a linear table instead.
3433         */
3434        if (smmu->sid_bits <= STRTAB_SPLIT)
3435                smmu->features &= ~ARM_SMMU_FEAT_2_LVL_STRTAB;
3436
3437        /* IDR5 */
3438        reg = readl_relaxed(smmu->base + ARM_SMMU_IDR5);
3439
3440        /* Maximum number of outstanding stalls */
3441        smmu->evtq.max_stalls = FIELD_GET(IDR5_STALL_MAX, reg);
3442
3443        /* Page sizes */
3444        if (reg & IDR5_GRAN64K)
3445                smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
3446        if (reg & IDR5_GRAN16K)
3447                smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
3448        if (reg & IDR5_GRAN4K)
3449                smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
3450
3451        /* Input address size */
3452        if (FIELD_GET(IDR5_VAX, reg) == IDR5_VAX_52_BIT)
3453                smmu->features |= ARM_SMMU_FEAT_VAX;
3454
3455        /* Output address size */
3456        switch (FIELD_GET(IDR5_OAS, reg)) {
3457        case IDR5_OAS_32_BIT:
3458                smmu->oas = 32;
3459                break;
3460        case IDR5_OAS_36_BIT:
3461                smmu->oas = 36;
3462                break;
3463        case IDR5_OAS_40_BIT:
3464                smmu->oas = 40;
3465                break;
3466        case IDR5_OAS_42_BIT:
3467                smmu->oas = 42;
3468                break;
3469        case IDR5_OAS_44_BIT:
3470                smmu->oas = 44;
3471                break;
3472        case IDR5_OAS_52_BIT:
3473                smmu->oas = 52;
3474                smmu->pgsize_bitmap |= 1ULL << 42; /* 4TB */
3475                break;
3476        default:
3477                dev_info(smmu->dev,
3478                        "unknown output address size. Truncating to 48-bit\n");
3479                /* Fallthrough */
3480        case IDR5_OAS_48_BIT:
3481                smmu->oas = 48;
3482        }
3483
3484        if (arm_smmu_ops.pgsize_bitmap == -1UL)
3485                arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
3486        else
3487                arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
3488
3489        /* Set the DMA mask for our table walker */
3490        if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(smmu->oas)))
3491                dev_warn(smmu->dev,
3492                         "failed to set DMA mask for table walker\n");
3493
3494        smmu->ias = max(smmu->ias, smmu->oas);
3495
3496        dev_info(smmu->dev, "ias %lu-bit, oas %lu-bit (features 0x%08x)\n",
3497                 smmu->ias, smmu->oas, smmu->features);
3498        return 0;
3499}
3500
3501#ifdef CONFIG_ACPI
3502static void acpi_smmu_get_options(u32 model, struct arm_smmu_device *smmu)
3503{
3504        switch (model) {
3505        case ACPI_IORT_SMMU_V3_CAVIUM_CN99XX:
3506                smmu->options |= ARM_SMMU_OPT_PAGE0_REGS_ONLY;
3507                break;
3508        case ACPI_IORT_SMMU_V3_HISILICON_HI161X:
3509                smmu->options |= ARM_SMMU_OPT_SKIP_PREFETCH;
3510                break;
3511        }
3512
3513        dev_notice(smmu->dev, "option mask 0x%x\n", smmu->options);
3514}
3515
3516static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
3517                                      struct arm_smmu_device *smmu)
3518{
3519        struct acpi_iort_smmu_v3 *iort_smmu;
3520        struct device *dev = smmu->dev;
3521        struct acpi_iort_node *node;
3522
3523        node = *(struct acpi_iort_node **)dev_get_platdata(dev);
3524
3525        /* Retrieve SMMUv3 specific data */
3526        iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
3527
3528        acpi_smmu_get_options(iort_smmu->model, smmu);
3529
3530        if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE)
3531                smmu->features |= ARM_SMMU_FEAT_COHERENCY;
3532
3533        return 0;
3534}
3535#else
3536static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
3537                                             struct arm_smmu_device *smmu)
3538{
3539        return -ENODEV;
3540}
3541#endif
3542
3543static int arm_smmu_device_dt_probe(struct platform_device *pdev,
3544                                    struct arm_smmu_device *smmu)
3545{
3546        struct device *dev = &pdev->dev;
3547        u32 cells;
3548        int ret = -EINVAL;
3549
3550        if (of_property_read_u32(dev->of_node, "#iommu-cells", &cells))
3551                dev_err(dev, "missing #iommu-cells property\n");
3552        else if (cells != 1)
3553                dev_err(dev, "invalid #iommu-cells value (%d)\n", cells);
3554        else
3555                ret = 0;
3556
3557        parse_driver_options(smmu);
3558
3559        if (of_dma_is_coherent(dev->of_node))
3560                smmu->features |= ARM_SMMU_FEAT_COHERENCY;
3561
3562        return ret;
3563}
3564
3565static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu)
3566{
3567        if (smmu->options & ARM_SMMU_OPT_PAGE0_REGS_ONLY)
3568                return SZ_64K;
3569        else
3570                return SZ_128K;
3571}
3572
3573static int arm_smmu_device_probe(struct platform_device *pdev)
3574{
3575        int irq, ret;
3576        struct resource *res;
3577        resource_size_t ioaddr;
3578        struct arm_smmu_device *smmu;
3579        struct device *dev = &pdev->dev;
3580        bool bypass;
3581
3582        smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
3583        if (!smmu) {
3584                dev_err(dev, "failed to allocate arm_smmu_device\n");
3585                return -ENOMEM;
3586        }
3587        smmu->dev = dev;
3588
3589        if (dev->of_node) {
3590                ret = arm_smmu_device_dt_probe(pdev, smmu);
3591        } else {
3592                ret = arm_smmu_device_acpi_probe(pdev, smmu);
3593                if (ret == -ENODEV)
3594                        return ret;
3595        }
3596
3597        /* Set bypass mode according to firmware probing result */
3598        bypass = !!ret;
3599
3600        /* Base address */
3601        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3602        if (resource_size(res) + 1 < arm_smmu_resource_size(smmu)) {
3603                dev_err(dev, "MMIO region too small (%pr)\n", res);
3604                return -EINVAL;
3605        }
3606        ioaddr = res->start;
3607
3608        smmu->base = devm_ioremap_resource(dev, res);
3609        if (IS_ERR(smmu->base))
3610                return PTR_ERR(smmu->base);
3611
3612        /* Interrupt lines */
3613
3614        irq = platform_get_irq_byname_optional(pdev, "combined");
3615        if (irq > 0)
3616                smmu->combined_irq = irq;
3617        else {
3618                irq = platform_get_irq_byname_optional(pdev, "eventq");
3619                if (irq > 0)
3620                        smmu->evtq.q.irq = irq;
3621
3622                irq = platform_get_irq_byname_optional(pdev, "priq");
3623                if (irq > 0)
3624                        smmu->priq.q.irq = irq;
3625
3626                irq = platform_get_irq_byname_optional(pdev, "gerror");
3627                if (irq > 0)
3628                        smmu->gerr_irq = irq;
3629        }
3630        /* Probe the h/w */
3631        ret = arm_smmu_device_hw_probe(smmu);
3632        if (ret)
3633                return ret;
3634
3635        /* Initialise in-memory data structures */
3636        ret = arm_smmu_init_structures(smmu);
3637        if (ret)
3638                return ret;
3639
3640        /* Record our private device structure */
3641        platform_set_drvdata(pdev, smmu);
3642
3643        /* Reset the device */
3644        ret = arm_smmu_device_reset(smmu, bypass);
3645        if (ret)
3646                return ret;
3647
3648        /* And we're up. Go go go! */
3649        ret = iommu_device_sysfs_add(&smmu->iommu, dev, NULL,
3650                                     "smmu3.%pa", &ioaddr);
3651        if (ret)
3652                return ret;
3653
3654        iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
3655        iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);
3656
3657        ret = iommu_device_register(&smmu->iommu);
3658        if (ret) {
3659                dev_err(dev, "Failed to register iommu\n");
3660                return ret;
3661        }
3662
3663#ifdef CONFIG_PCI
3664        if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
3665                pci_request_acs();
3666                ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
3667                if (ret)
3668                        return ret;
3669        }
3670#endif
3671#ifdef CONFIG_ARM_AMBA
3672        if (amba_bustype.iommu_ops != &arm_smmu_ops) {
3673                ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops);
3674                if (ret)
3675                        return ret;
3676        }
3677#endif
3678        if (platform_bus_type.iommu_ops != &arm_smmu_ops) {
3679                ret = bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
3680                if (ret)
3681                        return ret;
3682        }
3683        return 0;
3684}
3685
3686static void arm_smmu_device_shutdown(struct platform_device *pdev)
3687{
3688        struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
3689
3690        arm_smmu_device_disable(smmu);
3691}
3692
3693static const struct of_device_id arm_smmu_of_match[] = {
3694        { .compatible = "arm,smmu-v3", },
3695        { },
3696};
3697
3698static struct platform_driver arm_smmu_driver = {
3699        .driver = {
3700                .name           = "arm-smmu-v3",
3701                .of_match_table = of_match_ptr(arm_smmu_of_match),
3702                .suppress_bind_attrs = true,
3703        },
3704        .probe  = arm_smmu_device_probe,
3705        .shutdown = arm_smmu_device_shutdown,
3706};
3707builtin_platform_driver(arm_smmu_driver);
3708