timer_sp804.cc (12772:362544959c40) | timer_sp804.cc (13230:2988dc5d1d6f) |
---|---|
1/* 2 * Copyright (c) 2010 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 --- 72 unchanged lines hidden (view full) --- 81} 82 83 84void 85Sp804::Timer::read(PacketPtr pkt, Addr daddr) 86{ 87 switch(daddr) { 88 case LoadReg: | 1/* 2 * Copyright (c) 2010 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 --- 72 unchanged lines hidden (view full) --- 81} 82 83 84void 85Sp804::Timer::read(PacketPtr pkt, Addr daddr) 86{ 87 switch(daddr) { 88 case LoadReg: |
89 pkt->set | 89 pkt->setLE<uint32_t>(loadValue); |
90 break; 91 case CurrentReg: 92 DPRINTF(Timer, "Event schedule for %d, clock=%d, prescale=%d\n", 93 zeroEvent.when(), clock, control.timerPrescale); 94 Tick time; 95 time = zeroEvent.when() - curTick(); 96 time = time / clock / power(16, control.timerPrescale); 97 DPRINTF(Timer, "-- returning counter at %d\n", time); | 90 break; 91 case CurrentReg: 92 DPRINTF(Timer, "Event schedule for %d, clock=%d, prescale=%d\n", 93 zeroEvent.when(), clock, control.timerPrescale); 94 Tick time; 95 time = zeroEvent.when() - curTick(); 96 time = time / clock / power(16, control.timerPrescale); 97 DPRINTF(Timer, "-- returning counter at %d\n", time); |
98 pkt->set | 98 pkt->setLE<uint32_t>(time); |
99 break; 100 case ControlReg: | 99 break; 100 case ControlReg: |
101 pkt->set | 101 pkt->setLE<uint32_t>(control); |
102 break; 103 case RawISR: | 102 break; 103 case RawISR: |
104 pkt->set | 104 pkt->setLE<uint32_t>(rawInt); |
105 break; 106 case MaskedISR: | 105 break; 106 case MaskedISR: |
107 pkt->set | 107 pkt->setLE<uint32_t>(pendingInt); |
108 break; 109 case BGLoad: | 108 break; 109 case BGLoad: |
110 pkt->set | 110 pkt->setLE<uint32_t>(loadValue); |
111 break; 112 default: 113 panic("Tried to read SP804 timer at offset %#x\n", daddr); 114 break; 115 } | 111 break; 112 default: 113 panic("Tried to read SP804 timer at offset %#x\n", daddr); 114 break; 115 } |
116 DPRINTF(Timer, "Reading %#x from Timer at offset: %#x\n", pkt->get<uint32_t>(), daddr); | 116 DPRINTF(Timer, "Reading %#x from Timer at offset: %#x\n", 117 pkt->getLE<uint32_t>(), daddr); |
117} 118 119Tick 120Sp804::write(PacketPtr pkt) 121{ 122 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 123 assert(pkt->getSize() == 4); 124 Addr daddr = pkt->getAddr() - pioAddr; --- 7 unchanged lines hidden (view full) --- 132 panic("Tried to write SP804 at offset %#x that doesn't exist\n", daddr); 133 pkt->makeAtomicResponse(); 134 return pioDelay; 135} 136 137void 138Sp804::Timer::write(PacketPtr pkt, Addr daddr) 139{ | 118} 119 120Tick 121Sp804::write(PacketPtr pkt) 122{ 123 assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 124 assert(pkt->getSize() == 4); 125 Addr daddr = pkt->getAddr() - pioAddr; --- 7 unchanged lines hidden (view full) --- 133 panic("Tried to write SP804 at offset %#x that doesn't exist\n", daddr); 134 pkt->makeAtomicResponse(); 135 return pioDelay; 136} 137 138void 139Sp804::Timer::write(PacketPtr pkt, Addr daddr) 140{ |
140 DPRINTF(Timer, "Writing %#x to Timer at offset: %#x\n", pkt->get<uint32_t>(), daddr); | 141 DPRINTF(Timer, "Writing %#x to Timer at offset: %#x\n", 142 pkt->getLE<uint32_t>(), daddr); |
141 switch (daddr) { 142 case LoadReg: | 143 switch (daddr) { 144 case LoadReg: |
143 loadValue = pkt->get | 145 loadValue = pkt->getLE<uint32_t>(); |
144 restartCounter(loadValue); 145 break; 146 case CurrentReg: 147 // Spec says this value can't be written, but linux writes it anyway 148 break; 149 case ControlReg: 150 bool old_enable; 151 old_enable = control.timerEnable; | 146 restartCounter(loadValue); 147 break; 148 case CurrentReg: 149 // Spec says this value can't be written, but linux writes it anyway 150 break; 151 case ControlReg: 152 bool old_enable; 153 old_enable = control.timerEnable; |
152 control = pkt->get | 154 control = pkt->getLE<uint32_t>(); |
153 if ((old_enable == 0) && control.timerEnable) 154 restartCounter(loadValue); 155 break; 156 case IntClear: 157 rawInt = false; 158 if (pendingInt) { 159 pendingInt = false; 160 DPRINTF(Timer, "Clearing interrupt\n"); 161 parent->gic->clearInt(intNum); 162 } 163 break; 164 case BGLoad: | 155 if ((old_enable == 0) && control.timerEnable) 156 restartCounter(loadValue); 157 break; 158 case IntClear: 159 rawInt = false; 160 if (pendingInt) { 161 pendingInt = false; 162 DPRINTF(Timer, "Clearing interrupt\n"); 163 parent->gic->clearInt(intNum); 164 } 165 break; 166 case BGLoad: |
165 loadValue = pkt->get | 167 loadValue = pkt->getLE<uint32_t>(); |
166 break; 167 default: 168 panic("Tried to write SP804 timer at offset %#x\n", daddr); 169 break; 170 } 171} 172 173void --- 113 unchanged lines hidden --- | 168 break; 169 default: 170 panic("Tried to write SP804 timer at offset %#x\n", daddr); 171 break; 172 } 173} 174 175void --- 113 unchanged lines hidden --- |