rv_ctrl.cc (12078:6bbedad2eb30) | rv_ctrl.cc (13230:2988dc5d1d6f) |
---|---|
1/* 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 --- 47 unchanged lines hidden (view full) --- 56RealViewCtrl::read(PacketPtr pkt) 57{ 58 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 59 assert(pkt->getSize() == 4); 60 Addr daddr = pkt->getAddr() - pioAddr; 61 62 switch(daddr) { 63 case ProcId0: | 1/* 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 --- 47 unchanged lines hidden (view full) --- 56RealViewCtrl::read(PacketPtr pkt) 57{ 58 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 59 assert(pkt->getSize() == 4); 60 Addr daddr = pkt->getAddr() - pioAddr; 61 62 switch(daddr) { 63 case ProcId0: |
64 pkt->set(params()->proc_id0); | 64 pkt->setLE(params()->proc_id0); |
65 break; 66 case ProcId1: | 65 break; 66 case ProcId1: |
67 pkt->set(params()->proc_id1); | 67 pkt->setLE(params()->proc_id1); |
68 break; 69 case Clock24: 70 Tick clk; 71 clk = SimClock::Float::MHz * curTick() * 24; | 68 break; 69 case Clock24: 70 Tick clk; 71 clk = SimClock::Float::MHz * curTick() * 24; |
72 pkt->set((uint32_t)(clk)); | 72 pkt->setLE((uint32_t)(clk)); |
73 break; 74 case Clock100: 75 Tick clk100; 76 clk100 = SimClock::Float::MHz * curTick() * 100; | 73 break; 74 case Clock100: 75 Tick clk100; 76 clk100 = SimClock::Float::MHz * curTick() * 100; |
77 pkt->set((uint32_t)(clk100)); | 77 pkt->setLE((uint32_t)(clk100)); |
78 break; 79 case Flash: | 78 break; 79 case Flash: |
80 pkt->set | 80 pkt->setLE<uint32_t>(0); |
81 break; 82 case Clcd: | 81 break; 82 case Clcd: |
83 pkt->set | 83 pkt->setLE<uint32_t>(0x00001F00); |
84 break; 85 case Osc0: | 84 break; 85 case Osc0: |
86 pkt->set | 86 pkt->setLE<uint32_t>(0x00012C5C); |
87 break; 88 case Osc1: | 87 break; 88 case Osc1: |
89 pkt->set | 89 pkt->setLE<uint32_t>(0x00002CC0); |
90 break; 91 case Osc2: | 90 break; 91 case Osc2: |
92 pkt->set | 92 pkt->setLE<uint32_t>(0x00002C75); |
93 break; 94 case Osc3: | 93 break; 94 case Osc3: |
95 pkt->set | 95 pkt->setLE<uint32_t>(0x00020211); |
96 break; 97 case Osc4: | 96 break; 97 case Osc4: |
98 pkt->set | 98 pkt->setLE<uint32_t>(0x00002C75); |
99 break; 100 case Lock: | 99 break; 100 case Lock: |
101 pkt->set | 101 pkt->setLE<uint32_t>(sysLock); |
102 break; 103 case Flags: | 102 break; 103 case Flags: |
104 pkt->set | 104 pkt->setLE<uint32_t>(flags); |
105 break; 106 case IdReg: | 105 break; 106 case IdReg: |
107 pkt->set | 107 pkt->setLE<uint32_t>(params()->idreg); |
108 break; 109 case CfgStat: | 108 break; 109 case CfgStat: |
110 pkt->set | 110 pkt->setLE<uint32_t>(1); |
111 break; 112 case CfgData: | 111 break; 112 case CfgData: |
113 pkt->set | 113 pkt->setLE<uint32_t>(scData); |
114 DPRINTF(RVCTRL, "Read %#x from SCReg\n", scData); 115 break; 116 case CfgCtrl: | 114 DPRINTF(RVCTRL, "Read %#x from SCReg\n", scData); 115 break; 116 case CfgCtrl: |
117 pkt->set | 117 pkt->setLE<uint32_t>(0); // not busy |
118 DPRINTF(RVCTRL, "Read 0 from CfgCtrl\n"); 119 break; 120 default: 121 warn("Tried to read RealView I/O at offset %#x that doesn't exist\n", 122 daddr); | 118 DPRINTF(RVCTRL, "Read 0 from CfgCtrl\n"); 119 break; 120 default: 121 warn("Tried to read RealView I/O at offset %#x that doesn't exist\n", 122 daddr); |
123 pkt->set | 123 pkt->setLE<uint32_t>(0); |
124 break; 125 } 126 pkt->makeAtomicResponse(); 127 return pioDelay; 128 129} 130 131Tick --- 7 unchanged lines hidden (view full) --- 139 case Clcd: 140 case Osc0: 141 case Osc1: 142 case Osc2: 143 case Osc3: 144 case Osc4: 145 break; 146 case Lock: | 124 break; 125 } 126 pkt->makeAtomicResponse(); 127 return pioDelay; 128 129} 130 131Tick --- 7 unchanged lines hidden (view full) --- 139 case Clcd: 140 case Osc0: 141 case Osc1: 142 case Osc2: 143 case Osc3: 144 case Osc4: 145 break; 146 case Lock: |
147 sysLock.lockVal = pkt->get | 147 sysLock.lockVal = pkt->getLE<uint16_t>(); |
148 break; 149 case ResetCtl: 150 // Ignore writes to reset control 151 warn_once("Ignoring write to reset control\n"); 152 break; 153 case Flags: | 148 break; 149 case ResetCtl: 150 // Ignore writes to reset control 151 warn_once("Ignoring write to reset control\n"); 152 break; 153 case Flags: |
154 flags = pkt->get | 154 flags = pkt->getLE<uint32_t>(); |
155 break; 156 case FlagsClr: 157 flags = 0; 158 break; 159 case CfgData: | 155 break; 156 case FlagsClr: 157 flags = 0; 158 break; 159 case CfgData: |
160 scData = pkt->get | 160 scData = pkt->getLE<uint32_t>(); |
161 break; 162 case CfgCtrl: { 163 // A request is being submitted to read/write the system control 164 // registers. See 165 // http://infocenter.arm.com/help/topic/com.arm.doc.dui0447h/CACDEFGH.html | 161 break; 162 case CfgCtrl: { 163 // A request is being submitted to read/write the system control 164 // registers. See 165 // http://infocenter.arm.com/help/topic/com.arm.doc.dui0447h/CACDEFGH.html |
166 CfgCtrlReg req = pkt->get | 166 CfgCtrlReg req = pkt->getLE<uint32_t>(); |
167 if (!req.start) { 168 DPRINTF(RVCTRL, "SCReg: write %#x to ctrl but not starting\n", 169 req); 170 break; 171 } 172 173 auto it_dev(devices.find(req & CFG_CTRL_ADDR_MASK)); 174 if (it_dev == devices.end()) { --- 15 unchanged lines hidden (view full) --- 190 scData = dev.read(); 191 DPRINTF(RVCTRL, "SCReg: Reading %#x (ctrlRd %#x)\n", 192 scData, req); 193 } 194 } break; 195 case CfgStat: // Weird to write this 196 default: 197 warn("Tried to write RVIO at offset %#x (data %#x) that doesn't exist\n", | 167 if (!req.start) { 168 DPRINTF(RVCTRL, "SCReg: write %#x to ctrl but not starting\n", 169 req); 170 break; 171 } 172 173 auto it_dev(devices.find(req & CFG_CTRL_ADDR_MASK)); 174 if (it_dev == devices.end()) { --- 15 unchanged lines hidden (view full) --- 190 scData = dev.read(); 191 DPRINTF(RVCTRL, "SCReg: Reading %#x (ctrlRd %#x)\n", 192 scData, req); 193 } 194 } break; 195 case CfgStat: // Weird to write this 196 default: 197 warn("Tried to write RVIO at offset %#x (data %#x) that doesn't exist\n", |
198 daddr, pkt->get | 198 daddr, pkt->getLE<uint32_t>()); |
199 break; 200 } 201 pkt->makeAtomicResponse(); 202 return pioDelay; 203} 204 205void 206RealViewCtrl::serialize(CheckpointOut &cp) const --- 129 unchanged lines hidden --- | 199 break; 200 } 201 pkt->makeAtomicResponse(); 202 return pioDelay; 203} 204 205void 206RealViewCtrl::serialize(CheckpointOut &cp) const --- 129 unchanged lines hidden --- |