gem5 [DEVELOP-FOR-25.1]
Loading...
Searching...
No Matches
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
45
46namespace gem5
47{
48
49namespace RiscvISA
50{
51
57class PMP : public SimObject
58{
59 public:
61 PMP(const Params &params);
62
63 private:
66
82
84 const uint8_t PMP_READ = 1 << 0;
85
87 const uint8_t PMP_WRITE = 1 << 1;
88
90 const uint8_t PMP_EXEC = 1 << 2;
91
93 const uint8_t PMP_A_MASK = 3 << 3;
94
96 const uint8_t PMP_LOCK = 1 << 7;
97
100
102 struct PmpEntry
103 {
109 uint8_t pmpCfg = 0;
110 };
111
114
115 public:
128 PrivilegeMode pmode, ThreadContext *tc,
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:
169
180 PrivilegeMode pmode, Addr vaddr = 0);
181
188 void pmpUpdateRule(uint32_t pmp_index);
189
196 inline uint8_t pmpGetAField(uint8_t cfg);
197
206 inline AddrRange pmpDecodeNapot(Addr pmpaddr);
207
208};
209
210} // namespace RiscvISA
211} // namespace gem5
212
213#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
const uint8_t PMP_EXEC
pmpcfg address range execute permission mask
Definition pmp.hh:90
pmpAmatch
This enum is used for encoding of address matching mode of pmp address register, which is present in ...
Definition pmp.hh:76
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:124
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:241
std::vector< PmpEntry > pmpTable
a table of pmp entries
Definition pmp.hh:113
Fault createDefaultFault(const RequestPtr &req, BaseMMU::Mode mode, PrivilegeMode pmode, Addr vaddr=0)
createDefaultFault creates an address fault when numRules = 0
Definition pmp.cc:139
const uint8_t PMP_LOCK
pmpcfg address range locked mask
Definition pmp.hh:96
void pmpReset()
pmpReset reset when reset signal in trigger from CPU.
Definition pmp.cc:232
uint8_t pmpGetAField(uint8_t cfg)
pmpGetAField extracts the A field (address matching mode) from an input pmpcfg register
Definition pmp.cc:152
const uint8_t PMP_READ
pmpcfg address range read permission mask
Definition pmp.hh:84
const uint8_t PMP_A_MASK
pmpcfg A field mask
Definition pmp.hh:93
Fault pmpCheck(const RequestPtr &req, BaseMMU::Mode mode, PrivilegeMode pmode, ThreadContext *tc, Addr vaddr=0)
pmpCheck checks if a particular memory access is allowed based on the pmp rules.
Definition pmp.cc:59
int pmpEntries
maximum number of entries in the pmp table
Definition pmp.hh:65
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:183
AddrRange pmpDecodeNapot(Addr pmpaddr)
This function decodes a pmpaddr register value into an address range when A field of pmpcfg register ...
Definition pmp.cc:278
int numRules
variable to keep track of active number of rules any time
Definition pmp.hh:99
const uint8_t PMP_WRITE
pmpcfg address range write permission mask
Definition pmp.hh:87
PMP(const Params &params)
Definition pmp.cc:50
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:161
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
SimObject(const Params &p)
Definition sim_object.cc:58
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
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
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
Addr rawAddr
raw addr in pmpaddr register for a pmp entry
Definition pmp.hh:107

Generated on Mon Oct 27 2025 04:12:59 for gem5 by doxygen 1.14.0