rv_ctrl.hh (10905:a6ca6831e775) | rv_ctrl.hh (11011:2ca6c68fdd6c) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2010,2013 ARM Limited | 2 * Copyright (c) 2010,2013,2015 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 --- 27 unchanged lines hidden (view full) --- 38 */ 39 40#ifndef __DEV_ARM_RV_HH__ 41#define __DEV_ARM_RV_HH__ 42 43#include "base/bitunion.hh" 44#include "dev/io_device.hh" 45#include "params/RealViewCtrl.hh" | 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 --- 27 unchanged lines hidden (view full) --- 38 */ 39 40#ifndef __DEV_ARM_RV_HH__ 41#define __DEV_ARM_RV_HH__ 42 43#include "base/bitunion.hh" 44#include "dev/io_device.hh" 45#include "params/RealViewCtrl.hh" |
46#include "params/RealViewOsc.hh" |
|
46 47/** @file 48 * This implements the simple real view registers on a PBXA9 49 */ 50 51class RealViewCtrl : public BasicPioDevice 52{ | 47 48/** @file 49 * This implements the simple real view registers on a PBXA9 50 */ 51 52class RealViewCtrl : public BasicPioDevice 53{ |
54 public: 55 enum DeviceFunc { 56 FUNC_OSC = 1, 57 FUNC_VOLT = 2, 58 FUNC_AMP = 3, 59 FUNC_TEMP = 4, 60 FUNC_RESET = 5, 61 FUNC_SCC = 6, 62 FUNC_MUXFPGA = 7, 63 FUNC_SHUTDOWN = 8, 64 FUNC_REBOOT = 9, 65 FUNC_DVIMODE = 11, 66 FUNC_POWER = 12, 67 FUNC_ENERGY = 13, 68 }; 69 70 class Device 71 { 72 public: 73 Device(RealViewCtrl &parent, DeviceFunc func, 74 uint8_t site, uint8_t pos, uint8_t dcc, uint16_t dev) 75 { 76 parent.registerDevice(func, site, pos, dcc, dev, this); 77 } 78 79 virtual ~Device() {} 80 81 virtual uint32_t read() const = 0; 82 virtual void write(uint32_t value) = 0; 83 }; 84 |
|
53 protected: 54 enum { 55 IdReg = 0x00, 56 SwReg = 0x04, 57 Led = 0x08, 58 Osc0 = 0x0C, 59 Osc1 = 0x10, 60 Osc2 = 0x14, --- 30 unchanged lines hidden (view full) --- 91 }; 92 93 // system lock value 94 BitUnion32(SysLockReg) 95 Bitfield<15,0> lockVal; 96 Bitfield<16> locked; 97 EndBitUnion(SysLockReg) 98 | 85 protected: 86 enum { 87 IdReg = 0x00, 88 SwReg = 0x04, 89 Led = 0x08, 90 Osc0 = 0x0C, 91 Osc1 = 0x10, 92 Osc2 = 0x14, --- 30 unchanged lines hidden (view full) --- 123 }; 124 125 // system lock value 126 BitUnion32(SysLockReg) 127 Bitfield<15,0> lockVal; 128 Bitfield<16> locked; 129 EndBitUnion(SysLockReg) 130 |
131 BitUnion32(CfgCtrlReg) 132 Bitfield<11, 0> dev; 133 Bitfield<15, 12> pos; 134 Bitfield<17, 16> site; 135 Bitfield<25, 20> func; 136 Bitfield<29, 26> dcc; 137 Bitfield<30> wr; 138 Bitfield<31> start; 139 EndBitUnion(CfgCtrlReg) 140 141 static const uint32_t CFG_CTRL_ADDR_MASK = 0x3fffffffUL; 142 |
|
99 SysLockReg sysLock; 100 101 /** This register is used for smp booting. 102 * The primary cpu writes the secondary start address here before 103 * sends it a soft interrupt. The secondary cpu reads this register and if 104 * it's non-zero it jumps to the address 105 */ 106 uint32_t flags; --- 15 unchanged lines hidden (view full) --- 122 */ 123 RealViewCtrl(Params *p); 124 125 /** 126 * Handle a read to the device 127 * @param pkt The memory request. 128 * @param data Where to put the data. 129 */ | 143 SysLockReg sysLock; 144 145 /** This register is used for smp booting. 146 * The primary cpu writes the secondary start address here before 147 * sends it a soft interrupt. The secondary cpu reads this register and if 148 * it's non-zero it jumps to the address 149 */ 150 uint32_t flags; --- 15 unchanged lines hidden (view full) --- 166 */ 167 RealViewCtrl(Params *p); 168 169 /** 170 * Handle a read to the device 171 * @param pkt The memory request. 172 * @param data Where to put the data. 173 */ |
130 virtual Tick read(PacketPtr pkt); | 174 Tick read(PacketPtr pkt) M5_ATTR_OVERRIDE; |
131 132 /** 133 * All writes are simply ignored. 134 * @param pkt The memory request. 135 * @param data the data 136 */ | 175 176 /** 177 * All writes are simply ignored. 178 * @param pkt The memory request. 179 * @param data the data 180 */ |
137 virtual Tick write(PacketPtr pkt); | 181 Tick write(PacketPtr pkt) M5_ATTR_OVERRIDE; |
138 139 void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 140 void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; | 182 183 void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 184 void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; |
185 186 public: 187 void registerDevice(DeviceFunc func, uint8_t site, uint8_t pos, 188 uint8_t dcc, uint16_t dev, 189 Device *handler); 190 191 protected: 192 std::map<uint32_t, Device *> devices; |
|
141}; 142 | 193}; 194 |
195/** 196 * This is an implementation of a programmable oscillator on the that 197 * can be configured through the RealView/Versatile Express 198 * configuration interface. 199 * 200 * See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1). 201 */ 202class RealViewOsc 203 : public ClockDomain, RealViewCtrl::Device 204{ 205 public: 206 RealViewOsc(RealViewOscParams *p); 207 virtual ~RealViewOsc() {}; |
|
143 | 208 |
209 void startup() M5_ATTR_OVERRIDE; 210 211 void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 212 void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; 213 214 public: // RealViewCtrl::Device interface 215 uint32_t read() const M5_ATTR_OVERRIDE; 216 void write(uint32_t freq) M5_ATTR_OVERRIDE; 217 218 protected: 219 void clockPeriod(Tick clock_period); 220}; 221 222 |
|
144#endif // __DEV_ARM_RV_HH__ | 223#endif // __DEV_ARM_RV_HH__ |