rv_ctrl.hh revision 11011
17119Sgblack@eecs.umich.edu/* 27119Sgblack@eecs.umich.edu * Copyright (c) 2010,2013,2015 ARM Limited 37120Sgblack@eecs.umich.edu * All rights reserved 47120Sgblack@eecs.umich.edu * 57120Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67120Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77120Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87120Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97120Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107120Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117120Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127120Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137120Sgblack@eecs.umich.edu * 147120Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 157119Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 167119Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 177119Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 187119Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 197119Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 207119Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 217119Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 227119Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 237119Sgblack@eecs.umich.edu * this software without specific prior written permission. 247119Sgblack@eecs.umich.edu * 257119Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 267119Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 277119Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 287119Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 297119Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 307119Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 317119Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 327119Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 337119Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 347119Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 357119Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 367119Sgblack@eecs.umich.edu * 377119Sgblack@eecs.umich.edu * Authors: Ali Saidi 387119Sgblack@eecs.umich.edu */ 397119Sgblack@eecs.umich.edu 407119Sgblack@eecs.umich.edu#ifndef __DEV_ARM_RV_HH__ 417119Sgblack@eecs.umich.edu#define __DEV_ARM_RV_HH__ 427119Sgblack@eecs.umich.edu 437119Sgblack@eecs.umich.edu#include "base/bitunion.hh" 447646Sgene.wu@arm.com#include "dev/io_device.hh" 457646Sgene.wu@arm.com#include "params/RealViewCtrl.hh" 467646Sgene.wu@arm.com#include "params/RealViewOsc.hh" 477646Sgene.wu@arm.com 487646Sgene.wu@arm.com/** @file 497646Sgene.wu@arm.com * This implements the simple real view registers on a PBXA9 507646Sgene.wu@arm.com */ 517646Sgene.wu@arm.com 527646Sgene.wu@arm.comclass RealViewCtrl : public BasicPioDevice 537646Sgene.wu@arm.com{ 547646Sgene.wu@arm.com public: 557646Sgene.wu@arm.com enum DeviceFunc { 567646Sgene.wu@arm.com FUNC_OSC = 1, 577646Sgene.wu@arm.com FUNC_VOLT = 2, 587646Sgene.wu@arm.com FUNC_AMP = 3, 597646Sgene.wu@arm.com FUNC_TEMP = 4, 607646Sgene.wu@arm.com FUNC_RESET = 5, 617646Sgene.wu@arm.com FUNC_SCC = 6, 627646Sgene.wu@arm.com FUNC_MUXFPGA = 7, 637646Sgene.wu@arm.com FUNC_SHUTDOWN = 8, 647646Sgene.wu@arm.com FUNC_REBOOT = 9, 657646Sgene.wu@arm.com FUNC_DVIMODE = 11, 667646Sgene.wu@arm.com FUNC_POWER = 12, 677646Sgene.wu@arm.com FUNC_ENERGY = 13, 687646Sgene.wu@arm.com }; 697646Sgene.wu@arm.com 707646Sgene.wu@arm.com class Device 717646Sgene.wu@arm.com { 727646Sgene.wu@arm.com public: 737205Sgblack@eecs.umich.edu Device(RealViewCtrl &parent, DeviceFunc func, 747205Sgblack@eecs.umich.edu uint8_t site, uint8_t pos, uint8_t dcc, uint16_t dev) 757205Sgblack@eecs.umich.edu { 767205Sgblack@eecs.umich.edu parent.registerDevice(func, site, pos, dcc, dev, this); 777205Sgblack@eecs.umich.edu } 787205Sgblack@eecs.umich.edu 797205Sgblack@eecs.umich.edu virtual ~Device() {} 807205Sgblack@eecs.umich.edu 817205Sgblack@eecs.umich.edu virtual uint32_t read() const = 0; 827205Sgblack@eecs.umich.edu virtual void write(uint32_t value) = 0; 837205Sgblack@eecs.umich.edu }; 847205Sgblack@eecs.umich.edu 857205Sgblack@eecs.umich.edu protected: 867205Sgblack@eecs.umich.edu enum { 877205Sgblack@eecs.umich.edu IdReg = 0x00, 887205Sgblack@eecs.umich.edu SwReg = 0x04, 897205Sgblack@eecs.umich.edu Led = 0x08, 907205Sgblack@eecs.umich.edu Osc0 = 0x0C, 917205Sgblack@eecs.umich.edu Osc1 = 0x10, 927205Sgblack@eecs.umich.edu Osc2 = 0x14, 937205Sgblack@eecs.umich.edu Osc3 = 0x18, 947205Sgblack@eecs.umich.edu Osc4 = 0x1C, 957205Sgblack@eecs.umich.edu Lock = 0x20, 967205Sgblack@eecs.umich.edu Clock100 = 0x24, 977205Sgblack@eecs.umich.edu CfgData1 = 0x28, 987205Sgblack@eecs.umich.edu CfgData2 = 0x2C, 997205Sgblack@eecs.umich.edu Flags = 0x30, 1007205Sgblack@eecs.umich.edu FlagsClr = 0x34, 1017597Sminkyu.jeong@arm.com NvFlags = 0x38, 1027597Sminkyu.jeong@arm.com NvFlagsClr = 0x3C, 1037205Sgblack@eecs.umich.edu ResetCtl = 0x40, 1047205Sgblack@eecs.umich.edu PciCtl = 0x44, 1057646Sgene.wu@arm.com MciCtl = 0x48, 1067646Sgene.wu@arm.com Flash = 0x4C, 1077408Sgblack@eecs.umich.edu Clcd = 0x50, 1087408Sgblack@eecs.umich.edu ClcdSer = 0x54, 1097408Sgblack@eecs.umich.edu Bootcs = 0x58, 1107205Sgblack@eecs.umich.edu Clock24 = 0x5C, 1117205Sgblack@eecs.umich.edu Misc = 0x60, 1127205Sgblack@eecs.umich.edu IoSel = 0x70, 1137205Sgblack@eecs.umich.edu ProcId0 = 0x84, 1147205Sgblack@eecs.umich.edu ProcId1 = 0x88, 1157205Sgblack@eecs.umich.edu CfgData = 0xA0, 1167205Sgblack@eecs.umich.edu CfgCtrl = 0xA4, 1177205Sgblack@eecs.umich.edu CfgStat = 0xA8, 1187205Sgblack@eecs.umich.edu TestOsc0 = 0xC0, 1197205Sgblack@eecs.umich.edu TestOsc1 = 0xC4, 1207205Sgblack@eecs.umich.edu TestOsc2 = 0xC8, 1217205Sgblack@eecs.umich.edu TestOsc3 = 0xCC, 1227205Sgblack@eecs.umich.edu TestOsc4 = 0xD0 1237205Sgblack@eecs.umich.edu }; 1247205Sgblack@eecs.umich.edu 1257205Sgblack@eecs.umich.edu // system lock value 1267205Sgblack@eecs.umich.edu BitUnion32(SysLockReg) 1277205Sgblack@eecs.umich.edu Bitfield<15,0> lockVal; 1287205Sgblack@eecs.umich.edu Bitfield<16> locked; 1297205Sgblack@eecs.umich.edu EndBitUnion(SysLockReg) 1307205Sgblack@eecs.umich.edu 1317205Sgblack@eecs.umich.edu BitUnion32(CfgCtrlReg) 1327205Sgblack@eecs.umich.edu Bitfield<11, 0> dev; 1337205Sgblack@eecs.umich.edu Bitfield<15, 12> pos; 1347597Sminkyu.jeong@arm.com Bitfield<17, 16> site; 1357597Sminkyu.jeong@arm.com Bitfield<25, 20> func; 1367205Sgblack@eecs.umich.edu Bitfield<29, 26> dcc; 1377205Sgblack@eecs.umich.edu Bitfield<30> wr; 1387646Sgene.wu@arm.com Bitfield<31> start; 1397646Sgene.wu@arm.com EndBitUnion(CfgCtrlReg) 1407408Sgblack@eecs.umich.edu 1417408Sgblack@eecs.umich.edu static const uint32_t CFG_CTRL_ADDR_MASK = 0x3fffffffUL; 1427408Sgblack@eecs.umich.edu 1437205Sgblack@eecs.umich.edu SysLockReg sysLock; 1447205Sgblack@eecs.umich.edu 1457205Sgblack@eecs.umich.edu /** This register is used for smp booting. 1467205Sgblack@eecs.umich.edu * The primary cpu writes the secondary start address here before 1477205Sgblack@eecs.umich.edu * sends it a soft interrupt. The secondary cpu reads this register and if 1487205Sgblack@eecs.umich.edu * it's non-zero it jumps to the address 1497205Sgblack@eecs.umich.edu */ 1507205Sgblack@eecs.umich.edu uint32_t flags; 1517205Sgblack@eecs.umich.edu 1527205Sgblack@eecs.umich.edu /** This register contains the result from a system control reg access 1537205Sgblack@eecs.umich.edu */ 1547205Sgblack@eecs.umich.edu uint32_t scData; 1557205Sgblack@eecs.umich.edu 1567205Sgblack@eecs.umich.edu public: 1577205Sgblack@eecs.umich.edu typedef RealViewCtrlParams Params; 1587205Sgblack@eecs.umich.edu const Params * 1597205Sgblack@eecs.umich.edu params() const 1607205Sgblack@eecs.umich.edu { 1617205Sgblack@eecs.umich.edu return dynamic_cast<const Params *>(_params); 1627205Sgblack@eecs.umich.edu } 1637205Sgblack@eecs.umich.edu /** 1647205Sgblack@eecs.umich.edu * The constructor for RealView just registers itself with the MMU. 1657205Sgblack@eecs.umich.edu * @param p params structure 1667205Sgblack@eecs.umich.edu */ 1677205Sgblack@eecs.umich.edu RealViewCtrl(Params *p); 1687205Sgblack@eecs.umich.edu 1697408Sgblack@eecs.umich.edu /** 1707408Sgblack@eecs.umich.edu * Handle a read to the device 1717408Sgblack@eecs.umich.edu * @param pkt The memory request. 1727408Sgblack@eecs.umich.edu * @param data Where to put the data. 1737205Sgblack@eecs.umich.edu */ 1747205Sgblack@eecs.umich.edu Tick read(PacketPtr pkt) M5_ATTR_OVERRIDE; 1757205Sgblack@eecs.umich.edu 1767205Sgblack@eecs.umich.edu /** 1777119Sgblack@eecs.umich.edu * All writes are simply ignored. 1787119Sgblack@eecs.umich.edu * @param pkt The memory request. 1797119Sgblack@eecs.umich.edu * @param data the data 1807119Sgblack@eecs.umich.edu */ 1817119Sgblack@eecs.umich.edu Tick write(PacketPtr pkt) M5_ATTR_OVERRIDE; 1827119Sgblack@eecs.umich.edu 1837119Sgblack@eecs.umich.edu void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 1847119Sgblack@eecs.umich.edu void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; 1857119Sgblack@eecs.umich.edu 1867119Sgblack@eecs.umich.edu public: 1877119Sgblack@eecs.umich.edu void registerDevice(DeviceFunc func, uint8_t site, uint8_t pos, 1887119Sgblack@eecs.umich.edu uint8_t dcc, uint16_t dev, 1897119Sgblack@eecs.umich.edu Device *handler); 1907119Sgblack@eecs.umich.edu 1917119Sgblack@eecs.umich.edu protected: 1927119Sgblack@eecs.umich.edu std::map<uint32_t, Device *> devices; 1937119Sgblack@eecs.umich.edu}; 1947119Sgblack@eecs.umich.edu 1957119Sgblack@eecs.umich.edu/** 1967119Sgblack@eecs.umich.edu * This is an implementation of a programmable oscillator on the that 1977119Sgblack@eecs.umich.edu * can be configured through the RealView/Versatile Express 1987597Sminkyu.jeong@arm.com * configuration interface. 1997597Sminkyu.jeong@arm.com * 2007119Sgblack@eecs.umich.edu * See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1). 2017119Sgblack@eecs.umich.edu */ 2027646Sgene.wu@arm.comclass RealViewOsc 2037646Sgene.wu@arm.com : public ClockDomain, RealViewCtrl::Device 2047408Sgblack@eecs.umich.edu{ 2057408Sgblack@eecs.umich.edu public: 2067408Sgblack@eecs.umich.edu RealViewOsc(RealViewOscParams *p); 2077119Sgblack@eecs.umich.edu virtual ~RealViewOsc() {}; 2087119Sgblack@eecs.umich.edu 2097119Sgblack@eecs.umich.edu void startup() M5_ATTR_OVERRIDE; 2107119Sgblack@eecs.umich.edu 2117639Sgblack@eecs.umich.edu void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE; 2127639Sgblack@eecs.umich.edu void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE; 2137639Sgblack@eecs.umich.edu 2147639Sgblack@eecs.umich.edu public: // RealViewCtrl::Device interface 2157639Sgblack@eecs.umich.edu uint32_t read() const M5_ATTR_OVERRIDE; 2167639Sgblack@eecs.umich.edu void write(uint32_t freq) M5_ATTR_OVERRIDE; 2177639Sgblack@eecs.umich.edu 2187639Sgblack@eecs.umich.edu protected: 2197639Sgblack@eecs.umich.edu void clockPeriod(Tick clock_period); 2207639Sgblack@eecs.umich.edu}; 2217639Sgblack@eecs.umich.edu 2227639Sgblack@eecs.umich.edu 2237639Sgblack@eecs.umich.edu#endif // __DEV_ARM_RV_HH__ 2247639Sgblack@eecs.umich.edu