gem5 v23.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
pmp.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 The Regents of the University of California
3 * Copyright (c) 2023 Google LLC
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef __ARCH_RISCV_PMP_HH__
31#define __ARCH_RISCV_PMP_HH__
32
33#include "arch/generic/tlb.hh"
34#include "arch/riscv/isa.hh"
35#include "base/addr_range.hh"
36#include "base/types.hh"
37#include "mem/packet.hh"
38#include "params/PMP.hh"
39#include "sim/sim_object.hh"
40
46namespace gem5
47{
48
54class PMP : public SimObject
55{
56 public:
58 PMP(const Params &params);
59
60 private:
63
73 {
78 };
79
81 const uint8_t PMP_READ = 1 << 0;
82
84 const uint8_t PMP_WRITE = 1 << 1;
85
87 const uint8_t PMP_EXEC = 1 << 2;
88
90 const uint8_t PMP_A_MASK = 3 << 3;
91
93 const uint8_t PMP_LOCK = 1 << 7;
94
97
100
102 struct PmpEntry
103 {
109 uint8_t pmpCfg = 0;
110 };
111
114
115 public:
129 Addr vaddr = 0);
130
139 bool pmpUpdateCfg(uint32_t pmp_index, uint8_t this_cfg);
140
149 bool pmpUpdateAddr(uint32_t pmp_index, Addr this_addr);
150
155 void pmpReset();
156
157 private:
167
179
186 void pmpUpdateRule(uint32_t pmp_index);
187
194 inline uint8_t pmpGetAField(uint8_t cfg);
195
204 inline AddrRange pmpDecodeNapot(Addr pmpaddr);
205
206};
207
208} // namespace gem5
209
210#endif // __ARCH_RISCV_PMP_HH__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition addr_range.hh:82
This class helps to implement RISCV's physical memory protection (pmp) primitive.
Definition pmp.hh:55
const uint8_t PMP_LOCK
pmpcfg address range locked mask
Definition pmp.hh:93
const uint8_t PMP_WRITE
pmpcfg address range write permission mask
Definition pmp.hh:84
int pmpEntries
maximum number of entries in the pmp table
Definition pmp.hh:62
const uint8_t PMP_A_MASK
pmpcfg A field mask
Definition pmp.hh:90
void pmpUpdateRule(uint32_t pmp_index)
pmpUpdateRule updates the pmp rule for a given pmp entry depending on the value of pmpaddr and pmpcfg...
Definition pmp.cc:172
const uint8_t PMP_READ
pmpcfg address range read permission mask
Definition pmp.hh:81
int numRules
variable to keep track of active number of rules any time
Definition pmp.hh:96
bool hasLockEntry
variable to keep track of any lock of entry
Definition pmp.hh:99
AddrRange pmpDecodeNapot(Addr pmpaddr)
This function decodes a pmpaddr register value into an address range when A field of pmpcfg register ...
Definition pmp.cc:284
pmpAmatch
This enum is used for encoding of address matching mode of pmp address register, which is present in ...
Definition pmp.hh:73
@ PMP_TOR
Definition pmp.hh:75
@ PMP_NA4
Definition pmp.hh:76
@ PMP_OFF
Definition pmp.hh:74
@ PMP_NAPOT
Definition pmp.hh:77
bool pmpUpdateAddr(uint32_t pmp_index, Addr this_addr)
pmpUpdateAddr updates the pmpaddr for a pmp entry and calls pmpUpdateRule to update the rule of corre...
Definition pmp.cc:236
std::vector< PmpEntry > pmpTable
a table of pmp entries
Definition pmp.hh:113
Fault createAddrfault(Addr vaddr, BaseMMU::Mode mode)
createAddrfault creates an address fault if the pmp checks fail to pass for a given access.
Definition pmp.cc:126
bool pmpUpdateCfg(uint32_t pmp_index, uint8_t this_cfg)
pmpUpdateCfg updates the pmpcfg for a pmp entry and calls pmpUpdateRule to update the rule of corresp...
Definition pmp.cc:150
void pmpReset()
pmpReset reset when reset signal in trigger from CPU.
Definition pmp.cc:227
uint8_t pmpGetAField(uint8_t cfg)
pmpGetAField extracts the A field (address matching mode) from an input pmpcfg register
Definition pmp.cc:141
const uint8_t PMP_EXEC
pmpcfg address range execute permission mask
Definition pmp.hh:87
Fault pmpCheck(const RequestPtr &req, BaseMMU::Mode mode, RiscvISA::PrivilegeMode pmode, ThreadContext *tc, Addr vaddr=0)
pmpCheck checks if a particular memory access is allowed based on the pmp rules.
Definition pmp.cc:57
bool shouldCheckPMP(RiscvISA::PrivilegeMode pmode, ThreadContext *tc)
This function is called during a memory access to determine if the pmp table should be consulted for ...
Definition pmp.cc:273
Abstract superclass for simulation objects.
SimObjectParams Params
ThreadContext is the external interface to all thread state for anything outside of the CPU.
STL vector class.
Definition stl.hh:37
const Params & params() const
Bitfield< 4, 0 > mode
Definition misc_types.hh:74
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::shared_ptr< FaultBase > Fault
Definition types.hh:249
std::shared_ptr< Request > RequestPtr
Definition request.hh:94
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
Declaration of the Packet class.
single pmp entry struct
Definition pmp.hh:103
Addr rawAddr
raw addr in pmpaddr register for a pmp entry
Definition pmp.hh:107
AddrRange pmpAddr
addr range corresponding to a single pmp entry
Definition pmp.hh:105
uint8_t pmpCfg
pmpcfg reg value for a pmp entry
Definition pmp.hh:109

Generated on Mon Jul 10 2023 14:24:28 for gem5 by doxygen 1.9.7