rv_ctrl.cc revision 7950
17584SAli.Saidi@arm.com/* 27584SAli.Saidi@arm.com * Copyright (c) 2010 ARM Limited 37584SAli.Saidi@arm.com * All rights reserved 47584SAli.Saidi@arm.com * 57584SAli.Saidi@arm.com * The license below extends only to copyright in the software and shall 67584SAli.Saidi@arm.com * not be construed as granting a license to any other intellectual 77584SAli.Saidi@arm.com * property including but not limited to intellectual property relating 87584SAli.Saidi@arm.com * to a hardware implementation of the functionality of the software 97584SAli.Saidi@arm.com * licensed hereunder. You may use the software subject to the license 107584SAli.Saidi@arm.com * terms below provided that you ensure that this notice is replicated 117584SAli.Saidi@arm.com * unmodified and in its entirety in all distributions of the software, 127584SAli.Saidi@arm.com * modified or unmodified, in source code or in binary form. 137584SAli.Saidi@arm.com * 147584SAli.Saidi@arm.com * Redistribution and use in source and binary forms, with or without 157584SAli.Saidi@arm.com * modification, are permitted provided that the following conditions are 167584SAli.Saidi@arm.com * met: redistributions of source code must retain the above copyright 177584SAli.Saidi@arm.com * notice, this list of conditions and the following disclaimer; 187584SAli.Saidi@arm.com * redistributions in binary form must reproduce the above copyright 197584SAli.Saidi@arm.com * notice, this list of conditions and the following disclaimer in the 207584SAli.Saidi@arm.com * documentation and/or other materials provided with the distribution; 217584SAli.Saidi@arm.com * neither the name of the copyright holders nor the names of its 227584SAli.Saidi@arm.com * contributors may be used to endorse or promote products derived from 237584SAli.Saidi@arm.com * this software without specific prior written permission. 247584SAli.Saidi@arm.com * 257584SAli.Saidi@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 267584SAli.Saidi@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 277584SAli.Saidi@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 287584SAli.Saidi@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 297584SAli.Saidi@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 307584SAli.Saidi@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 317584SAli.Saidi@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 327584SAli.Saidi@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 337584SAli.Saidi@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 347584SAli.Saidi@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 357584SAli.Saidi@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 367584SAli.Saidi@arm.com * 377584SAli.Saidi@arm.com * Authors: Ali Saidi 387584SAli.Saidi@arm.com */ 397584SAli.Saidi@arm.com 407584SAli.Saidi@arm.com#include "base/trace.hh" 417584SAli.Saidi@arm.com#include "dev/arm/rv_ctrl.hh" 427584SAli.Saidi@arm.com#include "mem/packet.hh" 437584SAli.Saidi@arm.com#include "mem/packet_access.hh" 447584SAli.Saidi@arm.com 457584SAli.Saidi@arm.comRealViewCtrl::RealViewCtrl(Params *p) 467584SAli.Saidi@arm.com : BasicPioDevice(p) 477584SAli.Saidi@arm.com{ 487584SAli.Saidi@arm.com pioSize = 0xD4; 497584SAli.Saidi@arm.com} 507584SAli.Saidi@arm.com 517584SAli.Saidi@arm.comTick 527584SAli.Saidi@arm.comRealViewCtrl::read(PacketPtr pkt) 537584SAli.Saidi@arm.com{ 547584SAli.Saidi@arm.com assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 557584SAli.Saidi@arm.com assert(pkt->getSize() == 4); 567584SAli.Saidi@arm.com Addr daddr = pkt->getAddr() - pioAddr; 577584SAli.Saidi@arm.com pkt->allocate(); 587584SAli.Saidi@arm.com 597584SAli.Saidi@arm.com switch(daddr) { 607584SAli.Saidi@arm.com case ProcId: 617584SAli.Saidi@arm.com pkt->set(params()->proc_id); 627584SAli.Saidi@arm.com break; 637584SAli.Saidi@arm.com case Clock24: 647584SAli.Saidi@arm.com Tick clk; 657823Ssteve.reinhardt@amd.com clk = (Tick)(curTick() / (24 * SimClock::Float::MHz)); 667584SAli.Saidi@arm.com pkt->set((uint32_t)(clk)); 677584SAli.Saidi@arm.com break; 687584SAli.Saidi@arm.com case Flash: 697584SAli.Saidi@arm.com pkt->set<uint32_t>(0); 707584SAli.Saidi@arm.com break; 717950SAli.Saidi@ARM.com case Clcd: 727950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00001F00); 737950SAli.Saidi@ARM.com break; 747950SAli.Saidi@ARM.com case Osc0: 757950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00012C5C); 767950SAli.Saidi@ARM.com break; 777950SAli.Saidi@ARM.com case Osc1: 787950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00002CC0); 797950SAli.Saidi@ARM.com break; 807950SAli.Saidi@ARM.com case Osc2: 817950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00002C75); 827950SAli.Saidi@ARM.com break; 837950SAli.Saidi@ARM.com case Osc3: 847950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00020211); 857950SAli.Saidi@ARM.com break; 867950SAli.Saidi@ARM.com case Osc4: 877950SAli.Saidi@ARM.com pkt->set<uint32_t>(0x00002C75); 887950SAli.Saidi@ARM.com break; 897950SAli.Saidi@ARM.com case Lock: 907950SAli.Saidi@ARM.com pkt->set<uint32_t>(sysLock); 917950SAli.Saidi@ARM.com break; 927584SAli.Saidi@arm.com default: 937584SAli.Saidi@arm.com panic("Tried to read RealView I/O at offset %#x that doesn't exist\n", daddr); 947584SAli.Saidi@arm.com break; 957584SAli.Saidi@arm.com } 967584SAli.Saidi@arm.com pkt->makeAtomicResponse(); 977584SAli.Saidi@arm.com return pioDelay; 987584SAli.Saidi@arm.com 997584SAli.Saidi@arm.com} 1007584SAli.Saidi@arm.com 1017584SAli.Saidi@arm.comTick 1027584SAli.Saidi@arm.comRealViewCtrl::write(PacketPtr pkt) 1037584SAli.Saidi@arm.com{ 1047584SAli.Saidi@arm.com assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize); 1057584SAli.Saidi@arm.com 1067584SAli.Saidi@arm.com Addr daddr = pkt->getAddr() - pioAddr; 1077584SAli.Saidi@arm.com switch (daddr) { 1087584SAli.Saidi@arm.com case Flash: 1097950SAli.Saidi@ARM.com case Clcd: 1107950SAli.Saidi@ARM.com case Osc0: 1117950SAli.Saidi@ARM.com case Osc1: 1127950SAli.Saidi@ARM.com case Osc2: 1137950SAli.Saidi@ARM.com case Osc3: 1147950SAli.Saidi@ARM.com case Osc4: 1157950SAli.Saidi@ARM.com break; 1167950SAli.Saidi@ARM.com case Lock: 1177950SAli.Saidi@ARM.com sysLock.lockVal = pkt->get<uint16_t>(); 1187584SAli.Saidi@arm.com break; 1197584SAli.Saidi@arm.com default: 1207584SAli.Saidi@arm.com panic("Tried to write RVIO at offset %#x that doesn't exist\n", daddr); 1217584SAli.Saidi@arm.com break; 1227584SAli.Saidi@arm.com } 1237584SAli.Saidi@arm.com pkt->makeAtomicResponse(); 1247584SAli.Saidi@arm.com return pioDelay; 1257584SAli.Saidi@arm.com} 1267584SAli.Saidi@arm.com 1277584SAli.Saidi@arm.comvoid 1287584SAli.Saidi@arm.comRealViewCtrl::serialize(std::ostream &os) 1297584SAli.Saidi@arm.com{ 1307584SAli.Saidi@arm.com} 1317584SAli.Saidi@arm.com 1327584SAli.Saidi@arm.comvoid 1337584SAli.Saidi@arm.comRealViewCtrl::unserialize(Checkpoint *cp, const std::string §ion) 1347584SAli.Saidi@arm.com{ 1357584SAli.Saidi@arm.com} 1367584SAli.Saidi@arm.com 1377584SAli.Saidi@arm.comRealViewCtrl * 1387584SAli.Saidi@arm.comRealViewCtrlParams::create() 1397584SAli.Saidi@arm.com{ 1407584SAli.Saidi@arm.com return new RealViewCtrl(this); 1417584SAli.Saidi@arm.com} 142