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