114039Sstacze01@arm.com/*
214039Sstacze01@arm.com * Copyright (c) 2013, 2018-2019 ARM Limited
314039Sstacze01@arm.com * All rights reserved
414039Sstacze01@arm.com *
514039Sstacze01@arm.com * The license below extends only to copyright in the software and shall
614039Sstacze01@arm.com * not be construed as granting a license to any other intellectual
714039Sstacze01@arm.com * property including but not limited to intellectual property relating
814039Sstacze01@arm.com * to a hardware implementation of the functionality of the software
914039Sstacze01@arm.com * licensed hereunder.  You may use the software subject to the license
1014039Sstacze01@arm.com * terms below provided that you ensure that this notice is replicated
1114039Sstacze01@arm.com * unmodified and in its entirety in all distributions of the software,
1214039Sstacze01@arm.com * modified or unmodified, in source code or in binary form.
1314039Sstacze01@arm.com *
1414039Sstacze01@arm.com * Redistribution and use in source and binary forms, with or without
1514039Sstacze01@arm.com * modification, are permitted provided that the following conditions are
1614039Sstacze01@arm.com * met: redistributions of source code must retain the above copyright
1714039Sstacze01@arm.com * notice, this list of conditions and the following disclaimer;
1814039Sstacze01@arm.com * redistributions in binary form must reproduce the above copyright
1914039Sstacze01@arm.com * notice, this list of conditions and the following disclaimer in the
2014039Sstacze01@arm.com * documentation and/or other materials provided with the distribution;
2114039Sstacze01@arm.com * neither the name of the copyright holders nor the names of its
2214039Sstacze01@arm.com * contributors may be used to endorse or promote products derived from
2314039Sstacze01@arm.com * this software without specific prior written permission.
2414039Sstacze01@arm.com *
2514039Sstacze01@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2614039Sstacze01@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2714039Sstacze01@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2814039Sstacze01@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2914039Sstacze01@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3014039Sstacze01@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3114039Sstacze01@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3214039Sstacze01@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3314039Sstacze01@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3414039Sstacze01@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3514039Sstacze01@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3614039Sstacze01@arm.com *
3714039Sstacze01@arm.com * Authors: Stan Czerniawski
3814039Sstacze01@arm.com */
3914039Sstacze01@arm.com
4014039Sstacze01@arm.com#ifndef __DEV_ARM_SMMU_V3_DEFS_HH__
4114039Sstacze01@arm.com#define __DEV_ARM_SMMU_V3_DEFS_HH__
4214039Sstacze01@arm.com
4314039Sstacze01@arm.com#include <stdint.h>
4414039Sstacze01@arm.com
4514039Sstacze01@arm.com#include "base/bitunion.hh"
4614039Sstacze01@arm.com
4714039Sstacze01@arm.comenum {
4814039Sstacze01@arm.com    SMMU_SECURE_SZ = 0x184, // Secure regs are within page0
4914039Sstacze01@arm.com    SMMU_PAGE_ZERO_SZ = 0x10000,
5014039Sstacze01@arm.com    SMMU_PAGE_ONE_SZ = 0x10000,
5114039Sstacze01@arm.com    SMMU_REG_SIZE = SMMU_PAGE_ONE_SZ + SMMU_PAGE_ZERO_SZ
5214039Sstacze01@arm.com};
5314039Sstacze01@arm.com
5414039Sstacze01@arm.comenum {
5514039Sstacze01@arm.com    STE_CONFIG_ABORT        = 0x0,
5614039Sstacze01@arm.com    STE_CONFIG_BYPASS       = 0x4,
5714039Sstacze01@arm.com    STE_CONFIG_STAGE1_ONLY  = 0x5,
5814039Sstacze01@arm.com    STE_CONFIG_STAGE2_ONLY  = 0x6,
5914039Sstacze01@arm.com    STE_CONFIG_STAGE1_AND_2 = 0x7,
6014039Sstacze01@arm.com};
6114039Sstacze01@arm.com
6214039Sstacze01@arm.comenum {
6314039Sstacze01@arm.com    STAGE1_CFG_1L     = 0x0,
6414039Sstacze01@arm.com    STAGE1_CFG_2L_4K  = 0x1,
6514039Sstacze01@arm.com    STAGE1_CFG_2L_64K = 0x2,
6614039Sstacze01@arm.com};
6714039Sstacze01@arm.com
6814039Sstacze01@arm.comenum {
6914039Sstacze01@arm.com    ST_CFG_SPLIT_SHIFT = 6,
7014086Sgiacomo.travaglini@arm.com    ST_CD_ADDR_SHIFT   = 6,
7114039Sstacze01@arm.com    CD_TTB_SHIFT       = 4,
7214039Sstacze01@arm.com    STE_S2TTB_SHIFT    = 4,
7314039Sstacze01@arm.com};
7414039Sstacze01@arm.com
7514039Sstacze01@arm.comenum {
7614039Sstacze01@arm.com    TRANS_GRANULE_4K      = 0x0,
7714039Sstacze01@arm.com    TRANS_GRANULE_64K     = 0x1,
7814039Sstacze01@arm.com    TRANS_GRANULE_16K     = 0x2,
7914039Sstacze01@arm.com    TRANS_GRANULE_INVALID = 0x3,
8014039Sstacze01@arm.com};
8114039Sstacze01@arm.com
8214039Sstacze01@arm.comenum {
8314039Sstacze01@arm.com    ST_BASE_ADDR_MASK  = 0x0000ffffffffffe0ULL,
8414039Sstacze01@arm.com    ST_CFG_SIZE_MASK   = 0x000000000000003fULL,
8514039Sstacze01@arm.com    ST_CFG_SPLIT_MASK  = 0x00000000000007c0ULL,
8614039Sstacze01@arm.com    ST_CFG_FMT_MASK    = 0x0000000000030000ULL,
8714039Sstacze01@arm.com    ST_CFG_FMT_LINEAR  = 0x0000000000000000ULL,
8814039Sstacze01@arm.com    ST_CFG_FMT_2LEVEL  = 0x0000000000010000ULL,
8914039Sstacze01@arm.com    ST_L2_SPAN_MASK    = 0x000000000000001fULL,
9014039Sstacze01@arm.com    ST_L2_ADDR_MASK    = 0x0000ffffffffffe0ULL,
9114039Sstacze01@arm.com
9214039Sstacze01@arm.com    VMT_BASE_ADDR_MASK = 0x0000ffffffffffe0ULL,
9314039Sstacze01@arm.com    VMT_BASE_SIZE_MASK = 0x000000000000001fULL,
9414039Sstacze01@arm.com
9514039Sstacze01@arm.com    Q_BASE_ADDR_MASK   = 0x0000ffffffffffe0ULL,
9614039Sstacze01@arm.com    Q_BASE_SIZE_MASK   = 0x000000000000001fULL,
9714039Sstacze01@arm.com
9814039Sstacze01@arm.com    E_BASE_ENABLE_MASK = 0x8000000000000000ULL,
9914039Sstacze01@arm.com    E_BASE_ADDR_MASK   = 0x0000fffffffffffcULL,
10014039Sstacze01@arm.com};
10114039Sstacze01@arm.com
10214039Sstacze01@arm.comunion SMMURegs
10314039Sstacze01@arm.com{
10414039Sstacze01@arm.com    uint8_t data[SMMU_REG_SIZE];
10514039Sstacze01@arm.com
10614039Sstacze01@arm.com    struct
10714039Sstacze01@arm.com    {
10814039Sstacze01@arm.com        uint32_t idr0;        // 0x0000
10914039Sstacze01@arm.com        uint32_t idr1;        // 0x0004
11014039Sstacze01@arm.com        uint32_t idr2;        // 0x0008
11114039Sstacze01@arm.com        uint32_t idr3;        // 0x000c
11214039Sstacze01@arm.com        uint32_t idr4;        // 0x0010
11314039Sstacze01@arm.com        uint32_t idr5;        // 0x0014
11414039Sstacze01@arm.com        uint32_t iidr;        // 0x0018
11514039Sstacze01@arm.com        uint32_t aidr;        // 0x001c
11614039Sstacze01@arm.com        uint32_t cr0;         // 0x0020
11714039Sstacze01@arm.com        uint32_t cr0ack;      // 0x0024
11814039Sstacze01@arm.com        uint32_t cr1;         // 0x0028
11914039Sstacze01@arm.com        uint32_t cr2;         // 0x002c
12014039Sstacze01@arm.com        uint32_t _pad1;       // 0x0030
12114039Sstacze01@arm.com        uint32_t _pad2;       // 0x0034
12214039Sstacze01@arm.com        uint32_t _pad3;       // 0x0038
12314039Sstacze01@arm.com        uint32_t _pad4;       // 0x003c
12414039Sstacze01@arm.com        uint32_t statusr;     // 0x0040
12514039Sstacze01@arm.com        uint32_t gbpa;        // 0x0044
12614039Sstacze01@arm.com        uint32_t agbpa;       // 0x0048
12714039Sstacze01@arm.com        uint32_t _pad5;       // 0x004c
12814039Sstacze01@arm.com        uint32_t irq_ctrl;    // 0x0050
12914039Sstacze01@arm.com        uint32_t irq_ctrlack; // 0x0054
13014039Sstacze01@arm.com        uint32_t _pad6;       // 0x0058
13114039Sstacze01@arm.com        uint32_t _pad7;       // 0x005c
13214039Sstacze01@arm.com
13314039Sstacze01@arm.com        uint32_t gerror;          // 0x0060
13414039Sstacze01@arm.com        uint32_t gerrorn;         // 0x0064
13514039Sstacze01@arm.com        uint64_t gerror_irq_cfg0; // 0x0068, 64 bit
13614039Sstacze01@arm.com        uint32_t gerror_irq_cfg1; // 0x0070
13714039Sstacze01@arm.com        uint32_t gerror_irq_cfg2; // 0x0074
13814039Sstacze01@arm.com        uint32_t _pad_1;          // 0x0078
13914039Sstacze01@arm.com        uint32_t _pad_2;          // 0x007c
14014039Sstacze01@arm.com
14114039Sstacze01@arm.com        uint64_t strtab_base;     // 0x0080, 64 bit
14214039Sstacze01@arm.com        uint32_t strtab_base_cfg; // 0x0088
14314039Sstacze01@arm.com
14414039Sstacze01@arm.com        uint64_t cmdq_base;       // 0x0090, 64 bit
14514039Sstacze01@arm.com        uint32_t cmdq_prod;       // 0x0098
14614039Sstacze01@arm.com        uint32_t cmdq_cons;       // 0x009c
14714039Sstacze01@arm.com        uint64_t eventq_base;     // 0x00a0, 64 bit
14814039Sstacze01@arm.com        uint32_t _pad8;           // 0x00a8
14914039Sstacze01@arm.com        uint32_t _pad9;           // 0x00ac
15014039Sstacze01@arm.com        uint64_t eventq_irq_cfg0; // 0x00b0, 64 bit
15114039Sstacze01@arm.com        uint32_t eventq_irq_cfg1; // 0x00b8
15214039Sstacze01@arm.com        uint32_t eventq_irq_cfg2; // 0x00bc
15314039Sstacze01@arm.com        uint64_t priq_base;       // 0x00c0, 64 bit
15414039Sstacze01@arm.com        uint32_t _pad10;          // 0x00c8
15514039Sstacze01@arm.com        uint32_t _pad11;          // 0x00cc
15614039Sstacze01@arm.com
15714039Sstacze01@arm.com        uint64_t priq_irq_cfg0;   // 0x00d0
15814039Sstacze01@arm.com        uint32_t priq_irq_cfg1;   // 0x00d8
15914039Sstacze01@arm.com        uint32_t priq_irq_cfg2;   // 0x00dc
16014039Sstacze01@arm.com
16114039Sstacze01@arm.com        uint32_t _pad12[8];       // 0x00e0 - 0x0100
16214039Sstacze01@arm.com        uint32_t gatos_ctrl;      // 0x0100
16314039Sstacze01@arm.com        uint32_t _pad13;          // 0x0104
16414039Sstacze01@arm.com        uint64_t gatos_sid;       // 0x0108
16514039Sstacze01@arm.com        uint64_t gatos_addr;      // 0x0110
16614039Sstacze01@arm.com        uint64_t gatos_par;       // 0x0118
16714039Sstacze01@arm.com        uint32_t _pad14[24];      // 0x0120
16814039Sstacze01@arm.com        uint32_t vatos_sel;       // 0x0180
16914039Sstacze01@arm.com
17014039Sstacze01@arm.com        uint32_t _pad15[8095];    // 0x184 - 0x7ffc
17114039Sstacze01@arm.com
17214039Sstacze01@arm.com        uint8_t  _secure_regs[SMMU_SECURE_SZ]; // 0x8000 - 0x8180
17314039Sstacze01@arm.com
17414039Sstacze01@arm.com        uint32_t _pad16[8095];    // 0x8184 - 0x10000
17514039Sstacze01@arm.com
17614039Sstacze01@arm.com        // Page 1
17714039Sstacze01@arm.com        uint32_t _pad17[42];      // 0x10000
17814039Sstacze01@arm.com        uint32_t eventq_prod;     // 0x100A8
17914039Sstacze01@arm.com        uint32_t eventq_cons;     // 0x100AC
18014039Sstacze01@arm.com
18114039Sstacze01@arm.com        uint32_t _pad18[6];       // 0x100B0
18214039Sstacze01@arm.com        uint32_t priq_prod;       // 0x100C8
18314039Sstacze01@arm.com        uint32_t priq_cons;       // 0x100CC
18414039Sstacze01@arm.com    };
18514039Sstacze01@arm.com};
18614039Sstacze01@arm.com
18714039Sstacze01@arm.comstruct StreamTableEntry
18814039Sstacze01@arm.com{
18914039Sstacze01@arm.com    BitUnion64(DWORD0)
19014039Sstacze01@arm.com        Bitfield<0>       valid;
19114039Sstacze01@arm.com        Bitfield<3, 1>    config;
19214039Sstacze01@arm.com        Bitfield<5, 4>    s1fmt;
19314039Sstacze01@arm.com        Bitfield<51, 6>   s1ctxptr;
19414039Sstacze01@arm.com        Bitfield<63, 59>  s1cdmax;
19514039Sstacze01@arm.com    EndBitUnion(DWORD0)
19614039Sstacze01@arm.com    DWORD0 dw0;
19714039Sstacze01@arm.com
19814039Sstacze01@arm.com    BitUnion64(DWORD1)
19914039Sstacze01@arm.com        Bitfield<1, 0>   s1dss;
20014039Sstacze01@arm.com        Bitfield<3, 2>   s1cir;
20114039Sstacze01@arm.com        Bitfield<5, 4>   s1cor;
20214039Sstacze01@arm.com        Bitfield<7, 6>   s1csh;
20314039Sstacze01@arm.com        Bitfield<8>      s2hwu59;
20414039Sstacze01@arm.com        Bitfield<9>      s2hwu60;
20514039Sstacze01@arm.com        Bitfield<10>     s2hwu61;
20614039Sstacze01@arm.com        Bitfield<11>     s2hwu62;
20714039Sstacze01@arm.com        Bitfield<12>     dre;
20814039Sstacze01@arm.com        Bitfield<16, 13> cont;
20914039Sstacze01@arm.com        Bitfield<17>     dcp;
21014039Sstacze01@arm.com        Bitfield<18>     ppar;
21114039Sstacze01@arm.com        Bitfield<19>     mev;
21214039Sstacze01@arm.com        Bitfield<27>     s1stalld;
21314039Sstacze01@arm.com        Bitfield<29, 28> eats;
21414039Sstacze01@arm.com        Bitfield<31, 30> strw;
21514039Sstacze01@arm.com        Bitfield<35, 32> memattr;
21614039Sstacze01@arm.com        Bitfield<36>     mtcfg;
21714039Sstacze01@arm.com        Bitfield<40, 37> alloccfg;
21814039Sstacze01@arm.com        Bitfield<45, 44> shcfg;
21914039Sstacze01@arm.com        Bitfield<47, 46> nscfg;
22014039Sstacze01@arm.com        Bitfield<49, 48> privcfg;
22114039Sstacze01@arm.com        Bitfield<51, 50> instcfg;
22214039Sstacze01@arm.com    EndBitUnion(DWORD1)
22314039Sstacze01@arm.com    DWORD1 dw1;
22414039Sstacze01@arm.com
22514039Sstacze01@arm.com    BitUnion64(DWORD2)
22614039Sstacze01@arm.com        Bitfield<15, 0>  s2vmid;
22714039Sstacze01@arm.com        Bitfield<37, 32> s2t0sz;
22814039Sstacze01@arm.com        Bitfield<39, 38> s2sl0;
22914039Sstacze01@arm.com        Bitfield<41, 40> s2ir0;
23014039Sstacze01@arm.com        Bitfield<43, 42> s2or0;
23114039Sstacze01@arm.com        Bitfield<45, 44> s2sh0;
23214039Sstacze01@arm.com        Bitfield<47, 46> s2tg;
23314039Sstacze01@arm.com        Bitfield<50, 48> s2ps;
23414039Sstacze01@arm.com        Bitfield<51>     s2aa64;
23514039Sstacze01@arm.com        Bitfield<52>     s2endi;
23614039Sstacze01@arm.com        Bitfield<53>     s2affd;
23714039Sstacze01@arm.com        Bitfield<54>     s2ptw;
23814039Sstacze01@arm.com        Bitfield<55>     s2hd;
23914039Sstacze01@arm.com        Bitfield<56>     s2ha;
24014039Sstacze01@arm.com        Bitfield<57>     s2s;
24114039Sstacze01@arm.com        Bitfield<58>     s2r;
24214039Sstacze01@arm.com    EndBitUnion(DWORD2)
24314039Sstacze01@arm.com    DWORD2 dw2;
24414039Sstacze01@arm.com
24514039Sstacze01@arm.com    BitUnion64(DWORD3)
24614039Sstacze01@arm.com        Bitfield<51, 4> s2ttb;
24714039Sstacze01@arm.com    EndBitUnion(DWORD3)
24814039Sstacze01@arm.com    DWORD3 dw3;
24914039Sstacze01@arm.com
25014039Sstacze01@arm.com    uint64_t _pad[4];
25114039Sstacze01@arm.com};
25214039Sstacze01@arm.com
25314039Sstacze01@arm.comstruct ContextDescriptor
25414039Sstacze01@arm.com{
25514039Sstacze01@arm.com    BitUnion64(DWORD0)
25614039Sstacze01@arm.com        Bitfield<5, 0>   t0sz;
25714039Sstacze01@arm.com        Bitfield<7, 6>   tg0;
25814039Sstacze01@arm.com        Bitfield<9, 8>   ir0;
25914039Sstacze01@arm.com        Bitfield<11, 10> or0;
26014039Sstacze01@arm.com        Bitfield<13, 12> sh0;
26114039Sstacze01@arm.com        Bitfield<14>     epd0;
26214039Sstacze01@arm.com        Bitfield<15>     endi;
26314039Sstacze01@arm.com        Bitfield<21, 16> t1sz;
26414039Sstacze01@arm.com        Bitfield<23, 22> tg1;
26514039Sstacze01@arm.com        Bitfield<25, 24> ir1;
26614039Sstacze01@arm.com        Bitfield<27, 26> or1;
26714039Sstacze01@arm.com        Bitfield<29, 28> sh1;
26814039Sstacze01@arm.com        Bitfield<30>     epd1;
26914039Sstacze01@arm.com        Bitfield<31>     valid;
27014039Sstacze01@arm.com        Bitfield<34, 32> ips;
27114039Sstacze01@arm.com        Bitfield<35>     affd;
27214039Sstacze01@arm.com        Bitfield<36>     wxn;
27314039Sstacze01@arm.com        Bitfield<37>     uwxn;
27414039Sstacze01@arm.com        Bitfield<39, 38> tbi;
27514039Sstacze01@arm.com        Bitfield<40>     pan;
27614039Sstacze01@arm.com        Bitfield<41>     aa64;
27714039Sstacze01@arm.com        Bitfield<42>     hd;
27814039Sstacze01@arm.com        Bitfield<43>     ha;
27914039Sstacze01@arm.com        Bitfield<44>     s;
28014039Sstacze01@arm.com        Bitfield<45>     r;
28114039Sstacze01@arm.com        Bitfield<46>     a;
28214039Sstacze01@arm.com        Bitfield<47>     aset;
28314039Sstacze01@arm.com        Bitfield<63, 48> asid;
28414039Sstacze01@arm.com    EndBitUnion(DWORD0)
28514039Sstacze01@arm.com    DWORD0 dw0;
28614039Sstacze01@arm.com
28714039Sstacze01@arm.com    BitUnion64(DWORD1)
28814039Sstacze01@arm.com        Bitfield<0>      nscfg0;
28914039Sstacze01@arm.com        Bitfield<1>      had0;
29014039Sstacze01@arm.com        Bitfield<51, 4>  ttb0;
29114039Sstacze01@arm.com        Bitfield<60>     hwu0g59;
29214039Sstacze01@arm.com        Bitfield<61>     hwu0g60;
29314039Sstacze01@arm.com        Bitfield<62>     hwu0g61;
29414039Sstacze01@arm.com        Bitfield<63>     hwu0g62;
29514039Sstacze01@arm.com    EndBitUnion(DWORD1)
29614039Sstacze01@arm.com    DWORD1 dw1;
29714039Sstacze01@arm.com
29814039Sstacze01@arm.com    BitUnion64(DWORD2)
29914039Sstacze01@arm.com        Bitfield<0>      nscfg1;
30014039Sstacze01@arm.com        Bitfield<1>      had1;
30114039Sstacze01@arm.com        Bitfield<51, 4>  ttb1;
30214039Sstacze01@arm.com        Bitfield<60>     hwu1g59;
30314039Sstacze01@arm.com        Bitfield<61>     hwu1g60;
30414039Sstacze01@arm.com        Bitfield<62>     hwu1g61;
30514039Sstacze01@arm.com        Bitfield<63>     hwu1g62;
30614039Sstacze01@arm.com    EndBitUnion(DWORD2)
30714039Sstacze01@arm.com    DWORD2 dw2;
30814039Sstacze01@arm.com
30914039Sstacze01@arm.com    uint64_t mair;
31014039Sstacze01@arm.com    uint64_t amair;
31114039Sstacze01@arm.com    uint64_t _pad[3];
31214039Sstacze01@arm.com};
31314039Sstacze01@arm.com
31414102Sgiacomo.travaglini@arm.comenum {
31514102Sgiacomo.travaglini@arm.com    CR0_SMMUEN_MASK = 0x1,
31614102Sgiacomo.travaglini@arm.com    CR0_PRIQEN_MASK = 0x2,
31714102Sgiacomo.travaglini@arm.com    CR0_EVENTQEN_MASK = 0x4,
31814102Sgiacomo.travaglini@arm.com    CR0_CMDQEN_MASK = 0x8,
31914102Sgiacomo.travaglini@arm.com    CR0_ATSCHK_MASK = 0x10,
32014102Sgiacomo.travaglini@arm.com    CR0_VMW_MASK = 0x1C0,
32114102Sgiacomo.travaglini@arm.com};
32214102Sgiacomo.travaglini@arm.com
32314039Sstacze01@arm.comenum SMMUCommandType {
32414116Sgiacomo.travaglini@arm.com    CMD_PRF_CONFIG     = 0x01,
32514116Sgiacomo.travaglini@arm.com    CMD_PRF_ADDR       = 0x02,
32614116Sgiacomo.travaglini@arm.com    CMD_CFGI_STE       = 0x03,
32714116Sgiacomo.travaglini@arm.com    CMD_CFGI_STE_RANGE = 0x04,
32814116Sgiacomo.travaglini@arm.com    CMD_CFGI_CD        = 0x05,
32914116Sgiacomo.travaglini@arm.com    CMD_CFGI_CD_ALL    = 0x06,
33014116Sgiacomo.travaglini@arm.com    CMD_TLBI_NH_ALL    = 0x10,
33114116Sgiacomo.travaglini@arm.com    CMD_TLBI_NH_ASID   = 0x11,
33214116Sgiacomo.travaglini@arm.com    CMD_TLBI_NH_VAA    = 0x13,
33314116Sgiacomo.travaglini@arm.com    CMD_TLBI_NH_VA     = 0x12,
33414116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL3_ALL   = 0x18,
33514116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL3_VA    = 0x1A,
33614116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL2_ALL   = 0x20,
33714116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL2_ASID  = 0x21,
33814116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL2_VA    = 0x22,
33914116Sgiacomo.travaglini@arm.com    CMD_TLBI_EL2_VAA   = 0x23,
34014116Sgiacomo.travaglini@arm.com    CMD_TLBI_S2_IPA    = 0x2a,
34114116Sgiacomo.travaglini@arm.com    CMD_TLBI_S12_VMALL = 0x28,
34214116Sgiacomo.travaglini@arm.com    CMD_TLBI_NSNH_ALL  = 0x30,
34314116Sgiacomo.travaglini@arm.com    CMD_ATC_INV        = 0x40,
34414116Sgiacomo.travaglini@arm.com    CMD_PRI_RESP       = 0x41,
34514116Sgiacomo.travaglini@arm.com    CMD_RESUME         = 0x44,
34614116Sgiacomo.travaglini@arm.com    CMD_STALL_TERM     = 0x45,
34714116Sgiacomo.travaglini@arm.com    CMD_SYNC           = 0x46,
34814039Sstacze01@arm.com};
34914039Sstacze01@arm.com
35014039Sstacze01@arm.comstruct SMMUCommand
35114039Sstacze01@arm.com{
35214116Sgiacomo.travaglini@arm.com    BitUnion64(DWORD0)
35314116Sgiacomo.travaglini@arm.com        Bitfield<7, 0>   type;
35414116Sgiacomo.travaglini@arm.com        Bitfield<10>     ssec;
35514116Sgiacomo.travaglini@arm.com        Bitfield<11>     ssv;
35614116Sgiacomo.travaglini@arm.com        Bitfield<31, 12> ssid;
35714116Sgiacomo.travaglini@arm.com        Bitfield<47, 32> vmid;
35814116Sgiacomo.travaglini@arm.com        Bitfield<63, 48> asid;
35914116Sgiacomo.travaglini@arm.com        Bitfield<63, 32> sid;
36014116Sgiacomo.travaglini@arm.com    EndBitUnion(DWORD0)
36114116Sgiacomo.travaglini@arm.com    DWORD0 dw0;
36214116Sgiacomo.travaglini@arm.com
36314116Sgiacomo.travaglini@arm.com    BitUnion64(DWORD1)
36414116Sgiacomo.travaglini@arm.com        Bitfield<0>      leaf;
36514116Sgiacomo.travaglini@arm.com        Bitfield<4, 0>   size;
36614116Sgiacomo.travaglini@arm.com        Bitfield<4, 0>   range;
36714116Sgiacomo.travaglini@arm.com        Bitfield<63, 12> address;
36814116Sgiacomo.travaglini@arm.com    EndBitUnion(DWORD1)
36914116Sgiacomo.travaglini@arm.com    DWORD1 dw1;
37014116Sgiacomo.travaglini@arm.com
37114116Sgiacomo.travaglini@arm.com    uint64_t addr() const
37214116Sgiacomo.travaglini@arm.com    {
37314116Sgiacomo.travaglini@arm.com        uint64_t address = (uint64_t)(dw1.address) << 12;
37414116Sgiacomo.travaglini@arm.com        return address;
37514116Sgiacomo.travaglini@arm.com    }
37614039Sstacze01@arm.com};
37714039Sstacze01@arm.com
37814039Sstacze01@arm.comenum SMMUEventTypes {
37914039Sstacze01@arm.com    EVT_FAULT = 0x0001,
38014039Sstacze01@arm.com};
38114039Sstacze01@arm.com
38214039Sstacze01@arm.comenum SMMUEventFlags {
38314039Sstacze01@arm.com    EVF_WRITE = 0x0001,
38414039Sstacze01@arm.com};
38514039Sstacze01@arm.com
38614039Sstacze01@arm.comstruct SMMUEvent
38714039Sstacze01@arm.com{
38814039Sstacze01@arm.com    uint16_t type;
38914039Sstacze01@arm.com    uint16_t stag;
39014039Sstacze01@arm.com    uint32_t flags;
39114039Sstacze01@arm.com    uint32_t streamId;
39214039Sstacze01@arm.com    uint32_t substreamId;
39314039Sstacze01@arm.com    uint64_t va;
39414039Sstacze01@arm.com    uint64_t ipa;
39514039Sstacze01@arm.com};
39614039Sstacze01@arm.com
39714039Sstacze01@arm.comenum {
39814039Sstacze01@arm.com    SMMU_MAX_TRANS_ID = 64
39914039Sstacze01@arm.com};
40014039Sstacze01@arm.com
40114039Sstacze01@arm.com#endif /* __DEV_ARM_SMMU_V3_DEFS_HH__ */
402