gem5
v21.1.0.2
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
x
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
o
p
q
r
s
t
v
x
Enumerator
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
w
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Related Functions
:
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Functions
a
b
c
e
f
g
h
i
l
m
n
o
p
s
t
v
Variables
a
b
c
d
e
f
g
h
i
m
n
o
p
r
s
t
v
w
Typedefs
a
b
c
d
h
i
m
p
s
t
u
w
Enumerations
b
h
i
o
p
Enumerator
h
i
o
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
dev
arm
smmu_v3_cmdexec.cc
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
#include "
dev/arm/smmu_v3_cmdexec.hh
"
39
40
#include "
base/bitfield.hh
"
41
#include "
dev/arm/smmu_v3.hh
"
42
43
namespace
gem5
44
{
45
46
void
47
SMMUCommandExecProcess::main
(
Yield
&yield)
48
{
49
SMMUAction
a
;
50
a
.type =
ACTION_INITIAL_NOP
;
51
a
.pkt = NULL;
52
a
.ifc =
nullptr
;
53
a
.delay = 0;
54
yield(
a
);
55
56
while
(
true
) {
57
busy
=
true
;
58
59
while
(
true
) {
60
// Masking depending on CMDQ_BASE.LOG2SIZE (log(number of
61
// queue entries)). Example: a value of 0b101 (32 entries)
62
// generates a 0b11111 mask.
63
int
size_mask =
mask
(
64
smmu
.
regs
.
cmdq_base
&
Q_BASE_SIZE_MASK
);
65
66
// In this case the wrap bit is considered (+1)
67
int
size_mask_wrap =
mask
(
68
(
smmu
.
regs
.
cmdq_base
&
Q_BASE_SIZE_MASK
) + 1);
69
70
if
((
smmu
.
regs
.
cmdq_cons
& size_mask_wrap) ==
71
(
smmu
.
regs
.
cmdq_prod
& size_mask_wrap))
72
break
;
// command queue empty
73
74
Addr
cmd_addr =
75
(
smmu
.
regs
.
cmdq_base
&
Q_BASE_ADDR_MASK
) +
76
(
smmu
.
regs
.
cmdq_cons
& size_mask) *
sizeof
(
SMMUCommand
);
77
78
// This deliberately resets the error field in cmdq_cons!
79
smmu
.
regs
.
cmdq_cons
= (
smmu
.
regs
.
cmdq_cons
+ 1) & size_mask_wrap;
80
81
doRead
(yield, cmd_addr, &
cmd
,
sizeof
(
SMMUCommand
));
82
smmu
.
processCommand
(
cmd
);
83
}
84
85
busy
=
false
;
86
// No more commands to process, signal the SMMU as drained
87
smmu
.
signalDrainDone
();
88
89
doSleep
(yield);
90
}
91
}
92
93
}
// namespace gem5
gem5::ACTION_INITIAL_NOP
@ ACTION_INITIAL_NOP
Definition:
smmu_v3_proc.hh:60
gem5::SMMUv3::regs
SMMURegs regs
Definition:
smmu_v3.hh:156
gem5::SMMUAction
Definition:
smmu_v3_proc.hh:70
gem5::SMMURegs::cmdq_cons
uint32_t cmdq_cons
Definition:
smmu_v3_defs.hh:153
gem5::ArmISA::a
Bitfield< 8 > a
Definition:
misc_types.hh:65
smmu_v3_cmdexec.hh
gem5::SMMUCommandExecProcess::cmd
SMMUCommand cmd
Definition:
smmu_v3_cmdexec.hh:52
gem5::mask
constexpr uint64_t mask(unsigned nbits)
Generate a 64-bit mask of 'nbits' 1s, right justified.
Definition:
bitfield.hh:63
gem5::SMMURegs::cmdq_prod
uint32_t cmdq_prod
Definition:
smmu_v3_defs.hh:152
gem5::SMMUCommandExecProcess::busy
bool busy
Definition:
smmu_v3_cmdexec.hh:54
gem5::Q_BASE_ADDR_MASK
@ Q_BASE_ADDR_MASK
Definition:
smmu_v3_defs.hh:102
bitfield.hh
gem5::SMMUv3::processCommand
void processCommand(const SMMUCommand &cmd)
Definition:
smmu_v3.cc:389
gem5::SMMUProcess::doSleep
void doSleep(Yield &yield)
Definition:
smmu_v3_proc.cc:143
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:147
gem5::Drainable::signalDrainDone
void signalDrainDone() const
Signal that an object is drained.
Definition:
drain.hh:305
smmu_v3.hh
gem5::SMMUProcess::doRead
void doRead(Yield &yield, Addr addr, void *ptr, size_t size)
Definition:
smmu_v3_proc.cc:75
gem5::SMMUCommand
Definition:
smmu_v3_defs.hh:359
gem5::Coroutine::CallerType
CallerType: A reference to an object of this class will be passed to the coroutine task.
Definition:
coroutine.hh:85
gem5::SMMURegs::cmdq_base
uint64_t cmdq_base
Definition:
smmu_v3_defs.hh:151
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition:
decoder.cc:40
gem5::SMMUProcess::smmu
SMMUv3 & smmu
Definition:
smmu_v3_proc.hh:110
gem5::SMMUCommandExecProcess::main
virtual void main(Yield &yield)
Definition:
smmu_v3_cmdexec.cc:47
gem5::Q_BASE_SIZE_MASK
@ Q_BASE_SIZE_MASK
Definition:
smmu_v3_defs.hh:103
Generated on Tue Sep 21 2021 12:25:13 for gem5 by
doxygen
1.8.17