dev: Added new Lupio-SYS device
This adds the LupIO system controller, in which we provide a way to halt or reboot the system. It is implemented as a BasicPIODevice. Change-Id: I0031ac65d2aaca3460dcd4c59543a75230b0b52a Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/53043 Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
This commit is contained in:
committed by
melissa jost
parent
9d64f0fd90
commit
1e5bda500d
34
src/dev/lupio/LupioSYS.py
Normal file
34
src/dev/lupio/LupioSYS.py
Normal file
@@ -0,0 +1,34 @@
|
||||
# Copyright (c) 2021 The Regents of the University of California
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from m5.objects.Device import BasicPioDevice
|
||||
from m5.params import Param
|
||||
|
||||
class LupioSYS(BasicPioDevice):
|
||||
type = 'LupioSYS'
|
||||
cxx_class='gem5::LupioSYS'
|
||||
cxx_header = 'dev/lupio/lupio_sys.hh'
|
||||
pio_size = Param.Addr(0x1000, "PIO Size")
|
||||
@@ -33,6 +33,7 @@ SimObject('LupioRNG.py', tags='riscv isa')
|
||||
SimObject('LupioRTC.py', tags='riscv isa')
|
||||
SimObject('LupioTMR.py', tags='riscv isa')
|
||||
SimObject('LupioTTY.py', tags='riscv isa')
|
||||
SimObject('LupioSYS.py', tags='riscv isa')
|
||||
|
||||
DebugFlag('LupioBLK')
|
||||
DebugFlag('LupioIPI')
|
||||
@@ -41,6 +42,7 @@ DebugFlag('LupioRNG')
|
||||
DebugFlag('LupioRTC')
|
||||
DebugFlag('LupioTMR')
|
||||
DebugFlag('LupioTTY')
|
||||
DebugFlag('LupioSYS')
|
||||
|
||||
Source('lupio_blk.cc', tags='riscv isa')
|
||||
Source('lupio_ipi.cc', tags='riscv isa')
|
||||
@@ -49,3 +51,4 @@ Source('lupio_rng.cc', tags='riscv isa')
|
||||
Source('lupio_rtc.cc', tags='riscv isa')
|
||||
Source('lupio_tmr.cc', tags='riscv isa')
|
||||
Source('lupio_tty.cc', tags='riscv isa')
|
||||
Source('lupio_sys.cc', tags='riscv isa')
|
||||
|
||||
102
src/dev/lupio/lupio_sys.cc
Normal file
102
src/dev/lupio/lupio_sys.cc
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (c) 2021 The Regents of the University of California
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer;
|
||||
* redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution;
|
||||
* neither the name of the copyright holders nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "dev/lupio/lupio_sys.hh"
|
||||
|
||||
#include "debug/LupioSYS.hh"
|
||||
#include "mem/packet_access.hh"
|
||||
#include "params/LupioSYS.hh"
|
||||
#include "sim/sim_exit.hh"
|
||||
|
||||
namespace gem5
|
||||
{
|
||||
|
||||
LupioSYS::LupioSYS(const Params ¶ms) :
|
||||
BasicPioDevice(params, params.pio_size)
|
||||
{
|
||||
DPRINTF(LupioSYS, "LupioSYS initalized\n");
|
||||
}
|
||||
|
||||
uint8_t
|
||||
LupioSYS::lupioSYSRead(uint8_t addr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
LupioSYS::lupioSYSWrite(uint8_t addr, uint64_t val64)
|
||||
{
|
||||
switch (addr >> 2) {
|
||||
case LUPIO_SYS_HALT:
|
||||
DPRINTF(LupioSYS, "Trying to halt\n");
|
||||
exitSimLoopNow("LUPIO_SYS_HALT called, exiting", val64, 0, false);
|
||||
break;
|
||||
case LUPIO_SYS_REBT:
|
||||
DPRINTF(LupioSYS, "Trying to reboot\n");
|
||||
exitSimLoopNow("LUPIO_SYS_REBT called, exiting", val64, 0, false);
|
||||
break;
|
||||
|
||||
default:
|
||||
panic("Unexpected write to the LupioRTC device at address %d!",
|
||||
addr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Tick
|
||||
LupioSYS::read(PacketPtr pkt)
|
||||
{
|
||||
Addr daddr = pkt->getAddr() - pioAddr;
|
||||
|
||||
DPRINTF(LupioSYS,
|
||||
"Read request - addr: %#x, size: %#x\n", daddr, pkt->getSize());
|
||||
|
||||
uint64_t sys_read = lupioSYSRead(daddr);
|
||||
DPRINTF(LupioSYS, "Packet Read: %#x\n", sys_read);
|
||||
pkt->setUintX(sys_read, byteOrder);
|
||||
pkt->makeResponse();
|
||||
|
||||
return pioDelay;
|
||||
}
|
||||
|
||||
Tick
|
||||
LupioSYS::write(PacketPtr pkt)
|
||||
{
|
||||
Addr daddr = pkt->getAddr() - pioAddr;
|
||||
|
||||
DPRINTF(LupioSYS, "Write register %#x value %#x\n", daddr,
|
||||
pkt->getUintX(byteOrder));
|
||||
|
||||
lupioSYSWrite(daddr, pkt->getUintX(byteOrder));
|
||||
DPRINTF(LupioSYS, "Packet Write Value: %d\n", pkt->getUintX(byteOrder));
|
||||
|
||||
pkt->makeResponse();
|
||||
|
||||
return pioDelay;
|
||||
}
|
||||
} // namespace gem5
|
||||
78
src/dev/lupio/lupio_sys.hh
Normal file
78
src/dev/lupio/lupio_sys.hh
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2021 The Regents of the University of California
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer;
|
||||
* redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution;
|
||||
* neither the name of the copyright holders nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __DEV_LUPIO_LUPIO_SYS_HH__
|
||||
#define __DEV_LUPIO_LUPIO_SYS_HH__
|
||||
|
||||
#include "debug/LupioSYS.hh"
|
||||
#include "dev/io_device.hh"
|
||||
#include "dev/platform.hh"
|
||||
#include "params/LupioSYS.hh"
|
||||
#include "sim/system.hh"
|
||||
|
||||
namespace gem5
|
||||
{
|
||||
|
||||
/**
|
||||
* LupioSYS:
|
||||
* A Real-Time System Controller virtual device which provides a way for the
|
||||
* software to halt or reboot the computer system
|
||||
*/
|
||||
class LupioSYS : public BasicPioDevice
|
||||
{
|
||||
protected:
|
||||
const ByteOrder byteOrder = ByteOrder::little;
|
||||
// Register map
|
||||
private:
|
||||
enum
|
||||
{
|
||||
LUPIO_SYS_HALT,
|
||||
LUPIO_SYS_REBT,
|
||||
|
||||
/* Max offset */
|
||||
LUPIO_SYS_MAX,
|
||||
};
|
||||
|
||||
uint8_t lupioSYSRead(const uint8_t addr);
|
||||
|
||||
void lupioSYSWrite(const uint8_t addr, const uint64_t val64);
|
||||
|
||||
public:
|
||||
PARAMS(LupioSYS);
|
||||
LupioSYS(const Params ¶ms);
|
||||
|
||||
/**
|
||||
* Implement BasicPioDevice virtual functions
|
||||
*/
|
||||
Tick read(PacketPtr pkt) override;
|
||||
Tick write(PacketPtr pkt) override;
|
||||
};
|
||||
|
||||
} // namespace gem5
|
||||
|
||||
#endif // __DEV_LUPIO_LUPIO_SYS_HH__
|
||||
Reference in New Issue
Block a user