gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
vtophys.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2012-2013 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  * Copyright (c) 2002-2005 The Regents of The University of Michigan
15  * Copyright (c) 2007-2008 The Florida State University
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Authors: Ali Saidi
42  * Nathan Binkert
43  * Stephen Hines
44  */
45 
46 #include "arch/arm/vtophys.hh"
47 
48 #include <string>
49 
50 #include "arch/arm/faults.hh"
51 #include "arch/arm/table_walker.hh"
52 #include "arch/arm/tlb.hh"
53 #include "base/chunk_generator.hh"
54 #include "base/trace.hh"
55 #include "cpu/thread_context.hh"
57 
58 using namespace std;
59 using namespace ArmISA;
60 
61 Addr
63 {
64  fatal("VTOPHYS: Can't convert vaddr to paddr on ARM without a thread context");
65 }
66 
69 {
70  Fault fault;
71  // Set up a functional memory Request to pass to the TLB
72  // to get it to translate the vaddr to a paddr
73  auto req = std::make_shared<Request>(0, addr, 64, 0x40, -1, 0, 0);
74  BaseTLB *tlb;
75 
76  // Check the TLBs for a translation
77  // It's possible that there is a valid translation in the tlb
78  // that is no loger valid in the page table in memory
79  // so we need to check here first
80  //
81  // Calling translateFunctional invokes a table-walk if required
82  // so we should always succeed
83  tlb = tc->getDTBPtr();
84  fault = tlb->translateFunctional(req, tc, BaseTLB::Read);
85  if (fault == NoFault)
86  return std::make_pair(true, req->getPaddr());
87 
88  tlb = tc->getITBPtr();
89  fault = tlb->translateFunctional(req, tc, BaseTLB::Read);
90  if (fault == NoFault)
91  return std::make_pair(true, req->getPaddr());
92 
93  return std::make_pair(false, 0);
94 }
95 
96 Addr
98 {
99  const std::pair<bool, Addr> translation(try_translate(tc, addr));
100 
101  if (translation.first)
102  return translation.second;
103  else
104  panic("Table walkers support functional accesses. We should never get here\n");
105 }
106 
107 bool
109 {
110  const std::pair<bool, Addr> translation(try_translate(tc, vaddr));
111 
112  return translation.first;
113 }
114 
115 
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
decltype(nullptr) constexpr NoFault
Definition: types.hh:245
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:175
STL pair class.
Definition: stl.hh:61
virtual BaseTLB * getDTBPtr()=0
ip6_addr_t addr
Definition: inet.hh:335
bool virtvalid(ThreadContext *tc, Addr vaddr)
Definition: vtophys.cc:108
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:586
Definition: ccregs.hh:42
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition: tlb.hh:52
static std::pair< bool, Addr > try_translate(ThreadContext *tc, Addr addr)
Definition: vtophys.cc:68
Addr vtophys(Addr vaddr)
Definition: vtophys.cc:62
virtual BaseTLB * getITBPtr()=0
Bitfield< 59, 56 > tlb
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
TranslatingPortProxy Object Declaration for FS.
Declaration and inline definition of ChunkGenerator object.
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
virtual Fault translateFunctional(const RequestPtr &req, ThreadContext *tc, Mode mode)
Definition: tlb.hh:98

Generated on Fri Feb 28 2020 16:26:56 for gem5 by doxygen 1.8.13