gem5  v22.1.0.0
smmu_v3_defs.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013, 2018-2019 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef __DEV_ARM_SMMU_V3_DEFS_HH__
39 #define __DEV_ARM_SMMU_V3_DEFS_HH__
40 
41 #include <stdint.h>
42 
43 #include "base/bitunion.hh"
44 
45 namespace gem5
46 {
47 
48 enum
49 {
50  SMMU_SECURE_SZ = 0x184, // Secure regs are within page0
51  SMMU_PAGE_ZERO_SZ = 0x10000,
52  SMMU_PAGE_ONE_SZ = 0x10000,
54 };
55 
56 enum
57 {
63 };
64 
65 enum
66 {
70 };
71 
72 enum
73 {
78 };
79 
80 enum
81 {
86 };
87 
88 enum
89 {
90  ST_BASE_ADDR_MASK = 0x0000ffffffffffe0ULL,
91  ST_CFG_SIZE_MASK = 0x000000000000003fULL,
92  ST_CFG_SPLIT_MASK = 0x00000000000007c0ULL,
93  ST_CFG_FMT_MASK = 0x0000000000030000ULL,
94  ST_CFG_FMT_LINEAR = 0x0000000000000000ULL,
95  ST_CFG_FMT_2LEVEL = 0x0000000000010000ULL,
96  ST_L2_SPAN_MASK = 0x000000000000001fULL,
97  ST_L2_ADDR_MASK = 0x0000ffffffffffe0ULL,
98 
99  VMT_BASE_ADDR_MASK = 0x0000ffffffffffe0ULL,
100  VMT_BASE_SIZE_MASK = 0x000000000000001fULL,
101 
102  Q_BASE_ADDR_MASK = 0x0000ffffffffffe0ULL,
103  Q_BASE_SIZE_MASK = 0x000000000000001fULL,
104 
105  E_BASE_ENABLE_MASK = 0x8000000000000000ULL,
106  E_BASE_ADDR_MASK = 0x0000fffffffffffcULL,
107 };
108 
109 union SMMURegs
110 {
111  uint8_t data[SMMU_REG_SIZE];
112 
113  struct
114  {
115  uint32_t idr0; // 0x0000
116  uint32_t idr1; // 0x0004
117  uint32_t idr2; // 0x0008
118  uint32_t idr3; // 0x000c
119  uint32_t idr4; // 0x0010
120  uint32_t idr5; // 0x0014
121  uint32_t iidr; // 0x0018
122  uint32_t aidr; // 0x001c
123  uint32_t cr0; // 0x0020
124  uint32_t cr0ack; // 0x0024
125  uint32_t cr1; // 0x0028
126  uint32_t cr2; // 0x002c
127  uint32_t _pad1; // 0x0030
128  uint32_t _pad2; // 0x0034
129  uint32_t _pad3; // 0x0038
130  uint32_t _pad4; // 0x003c
131  uint32_t statusr; // 0x0040
132  uint32_t gbpa; // 0x0044
133  uint32_t agbpa; // 0x0048
134  uint32_t _pad5; // 0x004c
135  uint32_t irq_ctrl; // 0x0050
136  uint32_t irq_ctrlack; // 0x0054
137  uint32_t _pad6; // 0x0058
138  uint32_t _pad7; // 0x005c
139 
140  uint32_t gerror; // 0x0060
141  uint32_t gerrorn; // 0x0064
142  uint64_t gerror_irq_cfg0; // 0x0068, 64 bit
143  uint32_t gerror_irq_cfg1; // 0x0070
144  uint32_t gerror_irq_cfg2; // 0x0074
145  uint32_t _pad_1; // 0x0078
146  uint32_t _pad_2; // 0x007c
147 
148  uint64_t strtab_base; // 0x0080, 64 bit
149  uint32_t strtab_base_cfg; // 0x0088
150 
151  uint64_t cmdq_base; // 0x0090, 64 bit
152  uint32_t cmdq_prod; // 0x0098
153  uint32_t cmdq_cons; // 0x009c
154  uint64_t eventq_base; // 0x00a0, 64 bit
155  uint32_t _pad8; // 0x00a8
156  uint32_t _pad9; // 0x00ac
157  uint64_t eventq_irq_cfg0; // 0x00b0, 64 bit
158  uint32_t eventq_irq_cfg1; // 0x00b8
159  uint32_t eventq_irq_cfg2; // 0x00bc
160  uint64_t priq_base; // 0x00c0, 64 bit
161  uint32_t _pad10; // 0x00c8
162  uint32_t _pad11; // 0x00cc
163 
164  uint64_t priq_irq_cfg0; // 0x00d0
165  uint32_t priq_irq_cfg1; // 0x00d8
166  uint32_t priq_irq_cfg2; // 0x00dc
167 
168  uint32_t _pad12[8]; // 0x00e0 - 0x0100
169  uint32_t gatos_ctrl; // 0x0100
170  uint32_t _pad13; // 0x0104
171  uint64_t gatos_sid; // 0x0108
172  uint64_t gatos_addr; // 0x0110
173  uint64_t gatos_par; // 0x0118
174  uint32_t _pad14[24]; // 0x0120
175  uint32_t vatos_sel; // 0x0180
176 
177  uint32_t _pad15[8095]; // 0x184 - 0x7ffc
178 
179  uint8_t _secure_regs[SMMU_SECURE_SZ]; // 0x8000 - 0x8180
180 
181  uint32_t _pad16[8095]; // 0x8184 - 0x10000
182 
183  // Page 1
184  uint32_t _pad17[42]; // 0x10000
185  uint32_t eventq_prod; // 0x100A8
186  uint32_t eventq_cons; // 0x100AC
187 
188  uint32_t _pad18[6]; // 0x100B0
189  uint32_t priq_prod; // 0x100C8
190  uint32_t priq_cons; // 0x100CC
191  };
192 };
193 
195 {
196  BitUnion64(DWORD0)
197  Bitfield<0> valid;
198  Bitfield<3, 1> config;
199  Bitfield<5, 4> s1fmt;
200  Bitfield<51, 6> s1ctxptr;
201  Bitfield<63, 59> s1cdmax;
202  EndBitUnion(DWORD0)
203  DWORD0 dw0;
204 
205  BitUnion64(DWORD1)
206  Bitfield<1, 0> s1dss;
207  Bitfield<3, 2> s1cir;
208  Bitfield<5, 4> s1cor;
209  Bitfield<7, 6> s1csh;
210  Bitfield<8> s2hwu59;
211  Bitfield<9> s2hwu60;
212  Bitfield<10> s2hwu61;
213  Bitfield<11> s2hwu62;
214  Bitfield<12> dre;
215  Bitfield<16, 13> cont;
216  Bitfield<17> dcp;
217  Bitfield<18> ppar;
218  Bitfield<19> mev;
219  Bitfield<27> s1stalld;
220  Bitfield<29, 28> eats;
221  Bitfield<31, 30> strw;
222  Bitfield<35, 32> memattr;
223  Bitfield<36> mtcfg;
224  Bitfield<40, 37> alloccfg;
225  Bitfield<45, 44> shcfg;
226  Bitfield<47, 46> nscfg;
227  Bitfield<49, 48> privcfg;
228  Bitfield<51, 50> instcfg;
229  EndBitUnion(DWORD1)
230  DWORD1 dw1;
231 
232  BitUnion64(DWORD2)
233  Bitfield<15, 0> s2vmid;
234  Bitfield<37, 32> s2t0sz;
235  Bitfield<39, 38> s2sl0;
236  Bitfield<41, 40> s2ir0;
237  Bitfield<43, 42> s2or0;
238  Bitfield<45, 44> s2sh0;
239  Bitfield<47, 46> s2tg;
240  Bitfield<50, 48> s2ps;
241  Bitfield<51> s2aa64;
242  Bitfield<52> s2endi;
243  Bitfield<53> s2affd;
244  Bitfield<54> s2ptw;
245  Bitfield<55> s2hd;
246  Bitfield<56> s2ha;
247  Bitfield<57> s2s;
248  Bitfield<58> s2r;
249  EndBitUnion(DWORD2)
250  DWORD2 dw2;
251 
252  BitUnion64(DWORD3)
253  Bitfield<51, 4> s2ttb;
254  EndBitUnion(DWORD3)
255  DWORD3 dw3;
256 
257  uint64_t _pad[4];
258 };
259 
261 {
262  BitUnion64(DWORD0)
263  Bitfield<5, 0> t0sz;
264  Bitfield<7, 6> tg0;
265  Bitfield<9, 8> ir0;
266  Bitfield<11, 10> or0;
267  Bitfield<13, 12> sh0;
268  Bitfield<14> epd0;
269  Bitfield<15> endi;
270  Bitfield<21, 16> t1sz;
271  Bitfield<23, 22> tg1;
272  Bitfield<25, 24> ir1;
273  Bitfield<27, 26> or1;
274  Bitfield<29, 28> sh1;
275  Bitfield<30> epd1;
276  Bitfield<31> valid;
277  Bitfield<34, 32> ips;
278  Bitfield<35> affd;
279  Bitfield<36> wxn;
280  Bitfield<37> uwxn;
281  Bitfield<39, 38> tbi;
282  Bitfield<40> pan;
283  Bitfield<41> aa64;
284  Bitfield<42> hd;
285  Bitfield<43> ha;
286  Bitfield<44> s;
287  Bitfield<45> r;
288  Bitfield<46> a;
289  Bitfield<47> aset;
290  Bitfield<63, 48> asid;
291  EndBitUnion(DWORD0)
292  DWORD0 dw0;
293 
294  BitUnion64(DWORD1)
295  Bitfield<0> nscfg0;
296  Bitfield<1> had0;
297  Bitfield<51, 4> ttb0;
298  Bitfield<60> hwu0g59;
299  Bitfield<61> hwu0g60;
300  Bitfield<62> hwu0g61;
301  Bitfield<63> hwu0g62;
302  EndBitUnion(DWORD1)
303  DWORD1 dw1;
304 
305  BitUnion64(DWORD2)
306  Bitfield<0> nscfg1;
307  Bitfield<1> had1;
308  Bitfield<51, 4> ttb1;
309  Bitfield<60> hwu1g59;
310  Bitfield<61> hwu1g60;
311  Bitfield<62> hwu1g61;
312  Bitfield<63> hwu1g62;
313  EndBitUnion(DWORD2)
314  DWORD2 dw2;
315 
316  uint64_t mair;
317  uint64_t amair;
318  uint64_t _pad[3];
319 };
320 
321 enum
322 {
328  CR0_VMW_MASK = 0x1C0,
329 };
330 
332 {
334  CMD_PRF_ADDR = 0x02,
335  CMD_CFGI_STE = 0x03,
337  CMD_CFGI_CD = 0x05,
352  CMD_ATC_INV = 0x40,
353  CMD_PRI_RESP = 0x41,
354  CMD_RESUME = 0x44,
356  CMD_SYNC = 0x46,
357 };
358 
360 {
361  BitUnion64(DWORD0)
362  Bitfield<7, 0> type;
363  Bitfield<10> ssec;
364  Bitfield<11> ssv;
365  Bitfield<31, 12> ssid;
366  Bitfield<47, 32> vmid;
367  Bitfield<63, 48> asid;
368  Bitfield<63, 32> sid;
369  EndBitUnion(DWORD0)
370  DWORD0 dw0;
371 
372  BitUnion64(DWORD1)
373  Bitfield<0> leaf;
374  Bitfield<4, 0> size;
375  Bitfield<4, 0> range;
376  Bitfield<63, 12> address;
377  EndBitUnion(DWORD1)
378  DWORD1 dw1;
379 
380  uint64_t addr() const
381  {
382  uint64_t address = (uint64_t)(dw1.address) << 12;
383  return address;
384  }
385 };
386 
388 {
389  EVT_FAULT = 0x0001,
390 };
391 
393 {
394  EVF_WRITE = 0x0001,
395 };
396 
397 struct SMMUEvent
398 {
399  uint16_t type;
400  uint16_t stag;
401  uint32_t flags;
402  uint32_t streamId;
403  uint32_t substreamId;
404  uint64_t va;
405  uint64_t ipa;
406 };
407 
408 enum
409 {
410  SMMU_MAX_TRANS_ID = 64
411 };
412 
413 } // namespace gem5
414 
415 #endif /* __DEV_ARM_SMMU_V3_DEFS_HH__ */
Bitfield< 20 > uwxn
Definition: misc_types.hh:362
Bitfield< 14 > tg0
Definition: misc_types.hh:505
Bitfield< 40 > hd
Definition: misc_types.hh:551
Bitfield< 19 > wxn
Definition: misc_types.hh:366
Bitfield< 34, 32 > ips
Definition: misc_types.hh:513
Bitfield< 22 > pan
Definition: misc_types.hh:59
Bitfield< 18, 16 > t1sz
Definition: misc_types.hh:506
Bitfield< 23 > epd1
Definition: misc_types.hh:508
Bitfield< 20 > tbi
Definition: misc_types.hh:521
Bitfield< 8 > a
Definition: misc_types.hh:66
Bitfield< 17, 16 > or0
Definition: misc_types.hh:613
Bitfield< 39 > ha
Definition: misc_types.hh:550
Bitfield< 2, 0 > t0sz
Definition: misc_types.hh:499
Bitfield< 7 > epd0
Definition: misc_types.hh:501
SignedBitfield< 31, 16 > sh1
Definition: int.hh:61
SignedBitfield< 15, 0 > sh0
Definition: int.hh:62
Bitfield< 30 > tg1
Definition: misc_types.hh:512
Bitfield< 19, 18 > or1
Definition: misc_types.hh:614
Bitfield< 3, 2 > ir1
Definition: misc_types.hh:606
Bitfield< 5 > r
Definition: pagetable.hh:60
Bitfield< 1 > s
Definition: pagetable.hh:64
Bitfield< 3 > addr
Definition: types.hh:84
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
@ SMMU_SECURE_SZ
Definition: smmu_v3_defs.hh:50
@ SMMU_PAGE_ZERO_SZ
Definition: smmu_v3_defs.hh:51
@ SMMU_PAGE_ONE_SZ
Definition: smmu_v3_defs.hh:52
@ SMMU_REG_SIZE
Definition: smmu_v3_defs.hh:53
@ STE_CONFIG_ABORT
Definition: smmu_v3_defs.hh:58
@ STE_CONFIG_STAGE1_ONLY
Definition: smmu_v3_defs.hh:60
@ STE_CONFIG_STAGE2_ONLY
Definition: smmu_v3_defs.hh:61
@ STE_CONFIG_BYPASS
Definition: smmu_v3_defs.hh:59
@ STE_CONFIG_STAGE1_AND_2
Definition: smmu_v3_defs.hh:62
SMMUEventTypes
@ EVT_FAULT
SMMUCommandType
@ CMD_CFGI_STE
@ CMD_ATC_INV
@ CMD_TLBI_S2_IPA
@ CMD_TLBI_S12_VMALL
@ CMD_TLBI_EL2_VA
@ CMD_TLBI_EL3_ALL
@ CMD_CFGI_STE_RANGE
@ CMD_TLBI_NH_ASID
@ CMD_TLBI_EL2_ASID
@ CMD_TLBI_EL3_VA
@ CMD_TLBI_NH_VA
@ CMD_SYNC
@ CMD_TLBI_EL2_VAA
@ CMD_RESUME
@ CMD_CFGI_CD_ALL
@ CMD_PRF_CONFIG
@ CMD_TLBI_EL2_ALL
@ CMD_TLBI_NSNH_ALL
@ CMD_CFGI_CD
@ CMD_TLBI_NH_ALL
@ CMD_PRF_ADDR
@ CMD_STALL_TERM
@ CMD_TLBI_NH_VAA
@ CMD_PRI_RESP
@ TRANS_GRANULE_INVALID
Definition: smmu_v3_defs.hh:85
@ TRANS_GRANULE_16K
Definition: smmu_v3_defs.hh:84
@ TRANS_GRANULE_4K
Definition: smmu_v3_defs.hh:82
@ TRANS_GRANULE_64K
Definition: smmu_v3_defs.hh:83
@ STAGE1_CFG_2L_4K
Definition: smmu_v3_defs.hh:68
@ STAGE1_CFG_1L
Definition: smmu_v3_defs.hh:67
@ STAGE1_CFG_2L_64K
Definition: smmu_v3_defs.hh:69
SMMUEventFlags
@ EVF_WRITE
@ ST_CFG_SPLIT_SHIFT
Definition: smmu_v3_defs.hh:74
@ STE_S2TTB_SHIFT
Definition: smmu_v3_defs.hh:77
@ ST_CD_ADDR_SHIFT
Definition: smmu_v3_defs.hh:75
@ CD_TTB_SHIFT
Definition: smmu_v3_defs.hh:76
@ CR0_EVENTQEN_MASK
@ CR0_ATSCHK_MASK
@ CR0_VMW_MASK
@ CR0_CMDQEN_MASK
@ CR0_SMMUEN_MASK
@ CR0_PRIQEN_MASK
@ SMMU_MAX_TRANS_ID
@ ST_CFG_FMT_LINEAR
Definition: smmu_v3_defs.hh:94
@ VMT_BASE_SIZE_MASK
@ ST_CFG_FMT_2LEVEL
Definition: smmu_v3_defs.hh:95
@ ST_CFG_SPLIT_MASK
Definition: smmu_v3_defs.hh:92
@ Q_BASE_ADDR_MASK
@ ST_L2_ADDR_MASK
Definition: smmu_v3_defs.hh:97
@ Q_BASE_SIZE_MASK
@ ST_BASE_ADDR_MASK
Definition: smmu_v3_defs.hh:90
@ E_BASE_ENABLE_MASK
@ ST_CFG_SIZE_MASK
Definition: smmu_v3_defs.hh:91
@ ST_L2_SPAN_MASK
Definition: smmu_v3_defs.hh:96
@ ST_CFG_FMT_MASK
Definition: smmu_v3_defs.hh:93
@ VMT_BASE_ADDR_MASK
Definition: smmu_v3_defs.hh:99
@ E_BASE_ADDR_MASK
BitUnion64(DWORD0) Bitfield< 5
BitUnion64(DWORD0) Bitfield< 7
uint32_t substreamId
Bitfield< 51, 6 > s1ctxptr
Bitfield< 51 > s2aa64
Bitfield< 3, 1 > config
Bitfield< 36 > mtcfg
Bitfield< 7, 6 > s1csh
Bitfield< 27 > s1stalld
Bitfield< 45, 44 > shcfg
Bitfield< 29, 28 > eats
Bitfield< 5, 4 > s1fmt
Bitfield< 16, 13 > cont
Bitfield< 47, 46 > nscfg
Bitfield< 37, 32 > s2t0sz
BitUnion64(DWORD1) Bitfield< 1
Bitfield< 49, 48 > privcfg
Bitfield< 35, 32 > memattr
Bitfield< 10 > s2hwu61
Bitfield< 39, 38 > s2sl0
Bitfield< 5, 4 > s1cor
Bitfield< 45, 44 > s2sh0
Bitfield< 11 > s2hwu62
Bitfield< 47, 46 > s2tg
Bitfield< 51, 50 > instcfg
Bitfield< 54 > s2ptw
Bitfield< 3, 2 > s1cir
Bitfield< 31, 30 > strw
Bitfield< 40, 37 > alloccfg
Bitfield< 63, 59 > s1cdmax
Bitfield< 52 > s2endi
EndBitUnion(DWORD0) DWORD0 dw0
Bitfield< 53 > s2affd
Bitfield< 50, 48 > s2ps
Bitfield< 41, 40 > s2ir0
BitUnion64(DWORD0) Bitfield< 0 > valid
Bitfield< 43, 42 > s2or0
uint32_t _pad14[24]
uint32_t _pad12[8]
uint32_t priq_irq_cfg2
uint8_t _secure_regs[SMMU_SECURE_SZ]
uint32_t gerror_irq_cfg1
uint64_t cmdq_base
uint8_t data[SMMU_REG_SIZE]
uint64_t eventq_irq_cfg0
uint32_t gatos_ctrl
uint32_t _pad16[8095]
uint32_t cmdq_prod
uint32_t statusr
uint64_t priq_base
uint32_t eventq_prod
uint32_t _pad18[6]
uint32_t irq_ctrl
uint32_t _pad15[8095]
uint32_t irq_ctrlack
uint32_t cmdq_cons
uint32_t gerror_irq_cfg2
uint64_t gatos_sid
uint32_t eventq_irq_cfg1
uint32_t priq_cons
uint64_t gatos_par
uint64_t strtab_base
uint32_t gerrorn
uint64_t gerror_irq_cfg0
uint32_t _pad17[42]
uint32_t eventq_cons
uint64_t gatos_addr
uint32_t priq_prod
uint64_t priq_irq_cfg0
uint32_t vatos_sel
uint32_t strtab_base_cfg
uint64_t eventq_base
uint32_t eventq_irq_cfg2
uint32_t priq_irq_cfg1

Generated on Wed Dec 21 2022 10:22:33 for gem5 by doxygen 1.9.1