From 567a9b0a085d79c6bc9128204946cd6155960a9f Mon Sep 17 00:00:00 2001 From: Curtis Dunham Date: Fri, 27 Jan 2017 20:21:59 +0000 Subject: arm, kvm: implement GIC state transfer This also allows checkpointing of a Kvm GIC via the Pl390 model. Change-Id: Ic85d81cfefad630617491b732398f5e6a5f34c0b Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/2444 Maintainer: Andreas Sandberg Reviewed-by: Weiping Liao --- src/dev/arm/base_gic.hh | 13 ++++++++++++- src/dev/arm/gic_pl390.hh | 20 ++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) (limited to 'src/dev') diff --git a/src/dev/arm/base_gic.hh b/src/dev/arm/base_gic.hh index facc99084..cd16c0362 100644 --- a/src/dev/arm/base_gic.hh +++ b/src/dev/arm/base_gic.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2013 ARM Limited + * Copyright (c) 2012-2013, 2017 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -92,4 +92,15 @@ class BaseGic : public PioDevice Platform *platform; }; +class BaseGicRegisters +{ + public: + virtual uint32_t readDistributor(ContextID ctx, Addr daddr) = 0; + virtual uint32_t readCpu(ContextID ctx, Addr daddr) = 0; + + virtual void writeDistributor(ContextID ctx, Addr daddr, + uint32_t data) = 0; + virtual void writeCpu(ContextID ctx, Addr daddr, uint32_t data) = 0; +}; + #endif diff --git a/src/dev/arm/gic_pl390.hh b/src/dev/arm/gic_pl390.hh index 8beb5e2d5..6f819bf65 100644 --- a/src/dev/arm/gic_pl390.hh +++ b/src/dev/arm/gic_pl390.hh @@ -58,7 +58,7 @@ #include "dev/platform.hh" #include "params/Pl390.hh" -class Pl390 : public BaseGic +class Pl390 : public BaseGic, public BaseGicRegisters { protected: // distributor memory addresses @@ -404,26 +404,34 @@ class Pl390 : public BaseGic * @param pkt packet to respond to */ Tick readDistributor(PacketPtr pkt); - uint32_t readDistributor(ContextID ctx, Addr daddr, size_t resp_sz); + uint32_t readDistributor(ContextID ctx, Addr daddr, + size_t resp_sz); + uint32_t readDistributor(ContextID ctx, Addr daddr) override { + return readDistributor(ctx, daddr, 4); + } /** Handle a read to the cpu portion of the GIC * @param pkt packet to respond to */ Tick readCpu(PacketPtr pkt); - uint32_t readCpu(ContextID ctx, Addr daddr); + uint32_t readCpu(ContextID ctx, Addr daddr) override; /** Handle a write to the distributor portion of the GIC * @param pkt packet to respond to */ Tick writeDistributor(PacketPtr pkt); - void writeDistributor(ContextID ctx, Addr daddr, uint32_t data, - size_t data_sz); + void writeDistributor(ContextID ctx, Addr daddr, + uint32_t data, size_t data_sz); + void writeDistributor(ContextID ctx, Addr daddr, + uint32_t data) override { + return writeDistributor(ctx, daddr, data, 4); + } /** Handle a write to the cpu portion of the GIC * @param pkt packet to respond to */ Tick writeCpu(PacketPtr pkt); - void writeCpu(ContextID ctx, Addr daddr, uint32_t data); + void writeCpu(ContextID ctx, Addr daddr, uint32_t data) override; }; #endif //__DEV_ARM_GIC_H__ -- cgit v1.2.3