gem5  v21.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
watchdog_generic.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 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 #ifndef __DEV_ARM_WATCHDOG_GENERIC_HH__
39 #define __DEV_ARM_WATCHDOG_GENERIC_HH__
40 
41 #include "dev/arm/generic_timer.hh"
42 #include "dev/io_device.hh"
43 
44 class ArmInterruptPin;
45 struct GenericWatchdogParams;
46 
54 class GenericWatchdog : public PioDevice
55 {
56  public:
57  GenericWatchdog(const GenericWatchdogParams &params);
58 
59  void serialize(CheckpointOut &cp) const override;
60  void unserialize(CheckpointIn &cp) override;
61 
62  bool enabled() const { return controlStatus.enabled; }
63 
64  protected:
65  AddrRangeList getAddrRanges() const override;
66 
67  Tick read(PacketPtr pkt) override;
68  Tick write(PacketPtr pkt) override;
69 
70  uint32_t readRefresh(Addr addr);
71  uint32_t readControl(Addr addr);
72 
73  void writeRefresh(Addr addr, uint32_t data);
74  void writeControl(Addr addr, uint32_t data);
75 
76  protected:
86  {
87  public:
88  explicit Listener(GenericWatchdog& _parent)
89  : parent(_parent)
90  {}
91 
92  void notify(void) override
93  {
95  "The Generic Watchdog shall be disabled when "
96  "the System Counter is being updated, or "
97  "the results are unpredictable");
98  }
99 
100  protected:
102  };
103 
104  void explicitRefresh();
105  void refresh();
106  void timeout();
108 
109  private:
110  enum class RefreshOffset : Addr
111  {
112  WRR = 0x000, // Watchdog Refresh Register
113  W_IIDR = 0xfcc, // Watchdog Interface Identification Register
114  };
115 
116  enum class ControlOffset : Addr
117  {
118  WCS = 0x000, // Watchdog Control and Status Register
119  WOR = 0x008, // Watchdog Offset Register
120  WCV_LO = 0x010, // Watchdog Compare Register [31:0]
121  WCV_HI = 0x014, // Watchdog Compare Register [63:32]
122  W_IIDR = 0xfcc, // Watchdog Interface Identification Register
123  };
124 
125  BitUnion32(WCTRLS)
126  Bitfield<2> ws1; // Watchdog Signal 1 Status
127  Bitfield<1> ws0; // Watchdog Signal 0 Status
128  Bitfield<0> enabled; // Watchdog Enable
129  EndBitUnion(WCTRLS)
130 
131 
132  WCTRLS controlStatus;
133 
135  uint32_t offset;
136 
138  uint64_t compare;
139 
141  const uint32_t iidr;
142 
145 
147 
150 
154 };
155 
156 #endif // __DEV_ARM_WATCHDOG_GENERIC_HH__
GenericWatchdog::timeoutEvent
EventFunctionWrapper timeoutEvent
Definition: watchdog_generic.hh:107
SystemCounter
Global system counter.
Definition: generic_timer.hh:84
GenericWatchdog::enabled
Bitfield< 0 > enabled
Definition: watchdog_generic.hh:128
io_device.hh
GenericWatchdog::Listener::notify
void notify(void) override
Called from the SystemCounter when a change in counting speed occurred Events should be rescheduled p...
Definition: watchdog_generic.hh:92
GenericWatchdog::RefreshOffset
RefreshOffset
Definition: watchdog_generic.hh:110
data
const char data[]
Definition: circlebuf.test.cc:47
GenericWatchdog::ControlOffset::WCS
@ WCS
GenericWatchdog::getAddrRanges
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
Definition: watchdog_generic.cc:63
GenericWatchdog::offset
uint32_t offset
Offset Register.
Definition: watchdog_generic.hh:135
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:59
GenericWatchdog::cntListener
Listener cntListener
Definition: watchdog_generic.hh:149
GenericWatchdog::ControlOffset::WCV_HI
@ WCV_HI
GenericWatchdog::read
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: watchdog_generic.cc:72
GenericWatchdog::ws1
ArmInterruptPin *const ws1
Definition: watchdog_generic.hh:153
GenericWatchdog::EndBitUnion
EndBitUnion(WCTRLS) WCTRLS controlStatus
Control and Status Register.
EventFunctionWrapper
Definition: eventq.hh:1112
GenericWatchdog::writeControl
void writeControl(Addr addr, uint32_t data)
Definition: watchdog_generic.cc:169
cp
Definition: cprintf.cc:37
PioDevice
This device is the base class which all devices senstive to an address range inherit from.
Definition: io_device.hh:99
AddrRange
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition: addr_range.hh:68
GenericWatchdog::GenericWatchdog
GenericWatchdog(const GenericWatchdogParams &params)
Definition: watchdog_generic.cc:44
GenericWatchdog::compare
uint64_t compare
Compare Register.
Definition: watchdog_generic.hh:138
GenericWatchdog::BitUnion32
BitUnion32(WCTRLS) Bitfield< 2 > ws1
GenericWatchdog::cnt
SystemCounter & cnt
Definition: watchdog_generic.hh:148
GenericWatchdog::Listener::Listener
Listener(GenericWatchdog &_parent)
Definition: watchdog_generic.hh:88
GenericWatchdog::pioLatency
const Tick pioLatency
Definition: watchdog_generic.hh:146
GenericWatchdog::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: watchdog_generic.cc:237
generic_timer.hh
GenericWatchdog::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: watchdog_generic.cc:250
SystemCounterListener
Abstract class for elements whose events depend on the counting speed of the System Counter.
Definition: generic_timer.hh:74
GenericWatchdog::ControlOffset
ControlOffset
Definition: watchdog_generic.hh:116
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:148
GenericWatchdog::refreshFrame
const AddrRange refreshFrame
Definition: watchdog_generic.hh:143
GenericWatchdog::controlFrame
const AddrRange controlFrame
Definition: watchdog_generic.hh:144
GenericWatchdog::readControl
uint32_t readControl(Addr addr)
Definition: watchdog_generic.cc:111
GenericWatchdog::ws0
Bitfield< 1 > ws0
Definition: watchdog_generic.hh:127
X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:80
GenericWatchdog::RefreshOffset::WRR
@ WRR
panic_if
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
Definition: logging.hh:197
GenericWatchdog::readRefresh
uint32_t readRefresh(Addr addr)
Definition: watchdog_generic.cc:94
GenericWatchdog::ws0
ArmInterruptPin *const ws0
Watchdog Signals (IRQs)
Definition: watchdog_generic.hh:152
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:258
GenericWatchdog::timeout
void timeout()
Definition: watchdog_generic.cc:220
ArmInterruptPin
Generic representation of an Arm interrupt pin.
Definition: base_gic.hh:179
GenericWatchdog::explicitRefresh
void explicitRefresh()
Definition: watchdog_generic.cc:195
GenericWatchdog::writeRefresh
void writeRefresh(Addr addr, uint32_t data)
Definition: watchdog_generic.cc:154
GenericWatchdog
Definition: watchdog_generic.hh:54
GenericWatchdog::enabled
bool enabled() const
Definition: watchdog_generic.hh:62
CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:64
GenericWatchdog::RefreshOffset::W_IIDR
@ W_IIDR
GenericWatchdog::Listener
System Counter Listener: This object is being notified any time there is a change in the SystemCounte...
Definition: watchdog_generic.hh:85
GenericWatchdog::Listener::parent
GenericWatchdog & parent
Definition: watchdog_generic.hh:101
SimObject::params
const Params & params() const
Definition: sim_object.hh:168
GenericWatchdog::write
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: watchdog_generic.cc:133
GenericWatchdog::iidr
const uint32_t iidr
Interface Identification Register.
Definition: watchdog_generic.hh:141
std::list< AddrRange >
CheckpointIn
Definition: serialize.hh:68
GenericWatchdog::refresh
void refresh()
Definition: watchdog_generic.cc:207
GenericWatchdog::ControlOffset::W_IIDR
@ W_IIDR
GenericWatchdog::ControlOffset::WCV_LO
@ WCV_LO
GenericWatchdog::ControlOffset::WOR
@ WOR

Generated on Tue Mar 23 2021 19:41:26 for gem5 by doxygen 1.8.17