gem5  [DEVELOP-FOR-23.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 namespace gem5
45 {
46 
47 class ArmInterruptPin;
48 struct GenericWatchdogParams;
49 
57 class GenericWatchdog : public PioDevice
58 {
59  public:
60  GenericWatchdog(const GenericWatchdogParams &params);
61 
62  void serialize(CheckpointOut &cp) const override;
63  void unserialize(CheckpointIn &cp) override;
64 
65  bool enabled() const { return controlStatus.enabled; }
66 
67  protected:
68  AddrRangeList getAddrRanges() const override;
69 
70  Tick read(PacketPtr pkt) override;
71  Tick write(PacketPtr pkt) override;
72 
73  uint32_t readRefresh(Addr addr);
74  uint32_t readControl(Addr addr);
75 
76  void writeRefresh(Addr addr, uint32_t data);
77  void writeControl(Addr addr, uint32_t data);
78 
79  protected:
89  {
90  public:
91  explicit Listener(GenericWatchdog& _parent)
92  : parent(_parent)
93  {}
94 
95  void notify(void) override
96  {
98  "The Generic Watchdog shall be disabled when "
99  "the System Counter is being updated, or "
100  "the results are unpredictable");
101  }
102 
103  protected:
105  };
106 
107  void explicitRefresh();
108  void refresh();
109  void timeout();
111 
112  private:
113  enum class RefreshOffset : Addr
114  {
115  WRR = 0x000, // Watchdog Refresh Register
116  W_IIDR = 0xfcc, // Watchdog Interface Identification Register
117  };
118 
119  enum class ControlOffset : Addr
120  {
121  WCS = 0x000, // Watchdog Control and Status Register
122  WOR = 0x008, // Watchdog Offset Register
123  WCV_LO = 0x010, // Watchdog Compare Register [31:0]
124  WCV_HI = 0x014, // Watchdog Compare Register [63:32]
125  W_IIDR = 0xfcc, // Watchdog Interface Identification Register
126  };
127 
128  BitUnion32(WCTRLS)
129  Bitfield<2> ws1; // Watchdog Signal 1 Status
130  Bitfield<1> ws0; // Watchdog Signal 0 Status
131  Bitfield<0> enabled; // Watchdog Enable
132  EndBitUnion(WCTRLS)
133 
134 
135  WCTRLS controlStatus;
136 
138  uint32_t offset;
139 
141  uint64_t compare;
142 
144  const uint32_t iidr;
145 
148 
150 
153 
157 };
158 
159 } // namespace gem5
160 
161 #endif // __DEV_ARM_WATCHDOG_GENERIC_HH__
io_device.hh
gem5::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:65
gem5::GenericWatchdog::RefreshOffset::WRR
@ WRR
gem5::GenericWatchdog::Listener
System Counter Listener: This object is being notified any time there is a change in the SystemCounte...
Definition: watchdog_generic.hh:88
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::GenericWatchdog::cnt
SystemCounter & cnt
Definition: watchdog_generic.hh:151
gem5::PioDevice
This device is the base class which all devices senstive to an address range inherit from.
Definition: io_device.hh:102
gem5::GenericWatchdog::explicitRefresh
void explicitRefresh()
Definition: watchdog_generic.cc:197
gem5::GenericWatchdog::ControlOffset::WCS
@ WCS
gem5::GenericWatchdog::read
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: watchdog_generic.cc:74
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::GenericWatchdog::ControlOffset::W_IIDR
@ W_IIDR
gem5::GenericWatchdog::writeRefresh
void writeRefresh(Addr addr, uint32_t data)
Definition: watchdog_generic.cc:156
gem5::GenericWatchdog::readRefresh
uint32_t readRefresh(Addr addr)
Definition: watchdog_generic.cc:96
gem5::GenericWatchdog::EndBitUnion
EndBitUnion(WCTRLS) WCTRLS controlStatus
Control and Status Register.
gem5::GenericWatchdog::offset
uint32_t offset
Offset Register.
Definition: watchdog_generic.hh:138
gem5::GenericWatchdog::iidr
const uint32_t iidr
Interface Identification Register.
Definition: watchdog_generic.hh:144
gem5::GenericWatchdog::timeout
void timeout()
Definition: watchdog_generic.cc:222
gem5::GenericWatchdog::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: watchdog_generic.cc:252
gem5::GenericWatchdog
Definition: watchdog_generic.hh:57
gem5::GenericWatchdog::BitUnion32
BitUnion32(WCTRLS) Bitfield< 2 > ws1
gem5::GenericWatchdog::Listener::parent
GenericWatchdog & parent
Definition: watchdog_generic.hh:104
gem5::GenericWatchdog::ControlOffset::WOR
@ WOR
gem5::SystemCounterListener
Abstract class for elements whose events depend on the counting speed of the System Counter.
Definition: generic_timer.hh:76
gem5::GenericWatchdog::ws0
Bitfield< 1 > ws0
Definition: watchdog_generic.hh:130
gem5::SimObject::params
const Params & params() const
Definition: sim_object.hh:176
gem5::GenericWatchdog::refresh
void refresh()
Definition: watchdog_generic.cc:209
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
gem5::GenericWatchdog::timeoutEvent
EventFunctionWrapper timeoutEvent
Definition: watchdog_generic.hh:110
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
gem5::GenericWatchdog::readControl
uint32_t readControl(Addr addr)
Definition: watchdog_generic.cc:113
generic_timer.hh
gem5::GenericWatchdog::Listener::Listener
Listener(GenericWatchdog &_parent)
Definition: watchdog_generic.hh:91
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::GenericWatchdog::enabled
Bitfield< 0 > enabled
Definition: watchdog_generic.hh:131
gem5::GenericWatchdog::enabled
bool enabled() const
Definition: watchdog_generic.hh:65
gem5::GenericWatchdog::cntListener
Listener cntListener
Definition: watchdog_generic.hh:152
gem5::EventFunctionWrapper
Definition: eventq.hh:1136
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:214
gem5::GenericWatchdog::RefreshOffset::W_IIDR
@ W_IIDR
gem5::GenericWatchdog::GenericWatchdog
GenericWatchdog(const GenericWatchdogParams &params)
Definition: watchdog_generic.cc:46
gem5::GenericWatchdog::RefreshOffset
RefreshOffset
Definition: watchdog_generic.hh:113
gem5::GenericWatchdog::compare
uint64_t compare
Compare Register.
Definition: watchdog_generic.hh:141
gem5::GenericWatchdog::write
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: watchdog_generic.cc:135
gem5::ArmInterruptPin
Generic representation of an Arm interrupt pin.
Definition: base_gic.hh:199
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
gem5::GenericWatchdog::writeControl
void writeControl(Addr addr, uint32_t data)
Definition: watchdog_generic.cc:171
gem5::AddrRange
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition: addr_range.hh:81
std::list< AddrRange >
gem5::GenericWatchdog::ControlOffset::WCV_HI
@ WCV_HI
gem5::SystemCounter
Global system counter.
Definition: generic_timer.hh:86
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::GenericWatchdog::refreshFrame
const AddrRange refreshFrame
Definition: watchdog_generic.hh:146
gem5::GenericWatchdog::controlFrame
const AddrRange controlFrame
Definition: watchdog_generic.hh:147
gem5::GenericWatchdog::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: watchdog_generic.cc:239
gem5::GenericWatchdog::ws1
ArmInterruptPin *const ws1
Definition: watchdog_generic.hh:156
gem5::GenericWatchdog::ControlOffset::WCV_LO
@ WCV_LO
gem5::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:95
gem5::GenericWatchdog::pioLatency
const Tick pioLatency
Definition: watchdog_generic.hh:149
gem5::GenericWatchdog::ControlOffset
ControlOffset
Definition: watchdog_generic.hh:119
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::GenericWatchdog::ws0
ArmInterruptPin *const ws0
Watchdog Signals (IRQs)
Definition: watchdog_generic.hh:155

Generated on Sun Jul 30 2023 01:56:55 for gem5 by doxygen 1.8.17