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