gem5 v24.0.0.0
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
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
103
105 struct PmpEntry
106 {
112 uint8_t pmpCfg = 0;
113 };
114
117
118 public:
131 PrivilegeMode pmode, ThreadContext *tc,
132 Addr vaddr = 0);
133
142 bool pmpUpdateCfg(uint32_t pmp_index, uint8_t this_cfg);
143
152 bool pmpUpdateAddr(uint32_t pmp_index, Addr this_addr);
153
158 void pmpReset();
159
160 private:
170
182
189 void pmpUpdateRule(uint32_t pmp_index);
190
197 inline uint8_t pmpGetAField(uint8_t cfg);
198
207 inline AddrRange pmpDecodeNapot(Addr pmpaddr);
208
209};
210
211} // namespace RiscvISA
212} // namespace gem5
213
214#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:58
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:128
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:238
std::vector< PmpEntry > pmpTable
a table of pmp entries
Definition pmp.hh:116
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:229
uint8_t pmpGetAField(uint8_t cfg)
pmpGetAField extracts the A field (address matching mode) from an input pmpcfg register
Definition pmp.cc:143
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
bool hasLockEntry
variable to keep track of any lock of entry
Definition pmp.hh:102
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:60
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:174
AddrRange pmpDecodeNapot(Addr pmpaddr)
This function decodes a pmpaddr register value into an address range when A field of pmpcfg register ...
Definition pmp.cc:285
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:152
bool shouldCheckPMP(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:275
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
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria 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:106
AddrRange pmpAddr
addr range corresponding to a single pmp entry
Definition pmp.hh:108
uint8_t pmpCfg
pmpcfg reg value for a pmp entry
Definition pmp.hh:112
Addr rawAddr
raw addr in pmpaddr register for a pmp entry
Definition pmp.hh:110

Generated on Tue Jun 18 2024 16:24:00 for gem5 by doxygen 1.11.0