[gem5-dev] Change in gem5/gem5[develop]: arch-arm, dev-arm: Remove generic BaseGicRegisters interface
Giacomo Travaglini has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/55703 ) ( 4 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: arch-arm, dev-arm: Remove generic BaseGicRegisters interface .. arch-arm, dev-arm: Remove generic BaseGicRegisters interface The GICv3 register interface is different from the GICv2 one: from the presence of redistributor registers up to the system register implementation of the cpu-interface We therefore make the current BaseGicRegisters interface GICv2 specific. We will define a different Gic3Registers interface for GICv3 state transfer Signed-off-by: Giacomo Travaglini Change-Id: I42f15f48cab6e26aaf519e13c2ce70f661801117 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/55703 Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg Tested-by: kokoro --- M src/arch/arm/kvm/gic.cc M src/arch/arm/kvm/gic.hh M src/dev/arm/base_gic.cc M src/dev/arm/base_gic.hh M src/dev/arm/gic_v2.cc M src/dev/arm/gic_v2.hh 6 files changed, 119 insertions(+), 95 deletions(-) Approvals: Andreas Sandberg: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/arch/arm/kvm/gic.cc b/src/arch/arm/kvm/gic.cc index f6a57da..100f256 100644 --- a/src/arch/arm/kvm/gic.cc +++ b/src/arch/arm/kvm/gic.cc @@ -292,13 +292,15 @@ void MuxingKvmGic::fromGicToKvm() { -copyGicState(static_cast(this), kernelGic); +copyGicState(static_cast(this), + static_cast(kernelGic)); } void MuxingKvmGic::fromKvmToGic() { -copyGicState(kernelGic, static_cast(this)); +copyGicState(static_cast(kernelGic), + static_cast(this)); // the values read for the Interrupt Priority Mask Register (PMR) // have been shifted by three bits due to its having been emulated by diff --git a/src/arch/arm/kvm/gic.hh b/src/arch/arm/kvm/gic.hh index 5201f58..af52079 100644 --- a/src/arch/arm/kvm/gic.hh +++ b/src/arch/arm/kvm/gic.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2017, 2021 Arm Limited + * Copyright (c) 2015-2017, 2021-2022 Arm Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -54,7 +54,7 @@ * model. It exposes an API that is similar to that of * software-emulated GIC models in gem5. */ -class KvmKernelGic : public BaseGicRegisters +class KvmKernelGic { public: /** @@ -131,7 +131,7 @@ KvmDevice kdev; }; -class KvmKernelGicV2 : public KvmKernelGic +class KvmKernelGicV2 : public KvmKernelGic, public GicV2Registers { public: /** @@ -148,7 +148,7 @@ KvmKernelGicV2(KvmVM , Addr cpu_addr, Addr dist_addr, unsigned it_lines); - public: // BaseGicRegisters + public: // GicV2Registers uint32_t readDistributor(ContextID ctx, Addr daddr) override; uint32_t readCpu(ContextID ctx, Addr daddr) override; diff --git a/src/dev/arm/base_gic.cc b/src/dev/arm/base_gic.cc index c738c71..5694c37 100644 --- a/src/dev/arm/base_gic.cc +++ b/src/dev/arm/base_gic.cc @@ -80,61 +80,6 @@ return dynamic_cast(_params); } -void -BaseGicRegisters::copyDistRegister(BaseGicRegisters* from, - BaseGicRegisters* to, - ContextID ctx, Addr daddr) -{ -auto val = from->readDistributor(ctx, daddr); -DPRINTF(GIC, "copy dist 0x%x 0x%08x\n", daddr, val); -to->writeDistributor(ctx, daddr, val); -} - -void -BaseGicRegisters::copyCpuRegister(BaseGicRegisters* from, - BaseGicRegisters* to, - ContextID ctx, Addr daddr) -{ -auto val = from->readCpu(ctx, daddr); -DPRINTF(GIC, "copy cpu 0x%x 0x%08x\n", daddr, val); -to->writeCpu(ctx, daddr, val); -} - -void -BaseGicRegisters::copyBankedDistRange(System *sys, BaseGicRegisters* from, - BaseGicRegisters* to, - Addr daddr, size_t size) -{ -for (int ctx = 0; ctx < sys->threads.size(); ++ctx) -for (auto a = daddr; a < daddr + size; a += 4) -copyDistRegister(from, to, ctx, a); -} - -void -BaseGicRegisters::clearBankedDistRange(System *sys, BaseGicRegisters* to, - Addr daddr, size_t size) -{ -for (int ctx = 0; ctx < sys->threads.size(); ++ctx) -for (auto a = daddr; a < daddr + size; a += 4) -to->writeDistributor(ctx, a, 0x); -} - -void -BaseGicRegisters::copyDistRange(BaseGicRegisters* from, -BaseGicRegisters* to, -Addr daddr, size_t size) -{ -for (auto a = daddr; a < daddr + size; a += 4) -copyDistRegister(from, to, 0, a); -} - -void -BaseGicRegisters::clearDistRange(BaseGicRegisters* to,
[gem5-dev] Change in gem5/gem5[develop]: arch-arm, dev-arm: Remove generic BaseGicRegisters interface
Giacomo Travaglini has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/55703 ) Change subject: arch-arm, dev-arm: Remove generic BaseGicRegisters interface .. arch-arm, dev-arm: Remove generic BaseGicRegisters interface The GICv3 register interface is different from the GICv2 one: from the presence of redistributor registers up to the system register implementation of the cpu-interface We therefore make the current BaseGicRegisters interface GICv2 specific. We will define a different Gic3Registers interface for GICv3 state transfer Signed-off-by: Giacomo Travaglini Change-Id: I42f15f48cab6e26aaf519e13c2ce70f661801117 --- M src/arch/arm/kvm/gic.hh M src/dev/arm/base_gic.hh M src/dev/arm/gic_v2.cc M src/dev/arm/gic_v2.hh 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/arch/arm/kvm/gic.hh b/src/arch/arm/kvm/gic.hh index 5201f58..5207ad0 100644 --- a/src/arch/arm/kvm/gic.hh +++ b/src/arch/arm/kvm/gic.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2017, 2021 Arm Limited + * Copyright (c) 2015-2017, 2021-2022 Arm Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -54,7 +54,7 @@ * model. It exposes an API that is similar to that of * software-emulated GIC models in gem5. */ -class KvmKernelGic : public BaseGicRegisters +class KvmKernelGic { public: /** @@ -131,7 +131,7 @@ KvmDevice kdev; }; -class KvmKernelGicV2 : public KvmKernelGic +class KvmKernelGicV2 : public KvmKernelGic, public Gicv2Registers { public: /** @@ -148,7 +148,7 @@ KvmKernelGicV2(KvmVM , Addr cpu_addr, Addr dist_addr, unsigned it_lines); - public: // BaseGicRegisters + public: // Gicv2Registers uint32_t readDistributor(ContextID ctx, Addr daddr) override; uint32_t readCpu(ContextID ctx, Addr daddr) override; diff --git a/src/dev/arm/base_gic.hh b/src/dev/arm/base_gic.hh index b741585..1ab8c2a 100644 --- a/src/dev/arm/base_gic.hh +++ b/src/dev/arm/base_gic.hh @@ -134,17 +134,6 @@ 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; -}; - /** * This SimObject is instantiated in the python world and * serves as an ArmInterruptPin generator. In this way it diff --git a/src/dev/arm/gic_v2.cc b/src/dev/arm/gic_v2.cc index ecf4908..057d900 100644 --- a/src/dev/arm/gic_v2.cc +++ b/src/dev/arm/gic_v2.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2013, 2015-2018, 2020-2021 Arm Limited + * Copyright (c) 2010, 2013, 2015-2018, 2020-2022 Arm Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -998,7 +998,7 @@ } void -GicV2::copyGicState(BaseGicRegisters* from, BaseGicRegisters* to) +GicV2::copyGicState(Gicv2Registers* from, Gicv2Registers* to) { Addr set, clear; size_t size; @@ -1070,7 +1070,7 @@ } void -GicV2::copyDistRegister(BaseGicRegisters* from, BaseGicRegisters* to, +GicV2::copyDistRegister(Gicv2Registers* from, Gicv2Registers* to, ContextID ctx, Addr daddr) { auto val = from->readDistributor(ctx, daddr); @@ -1079,7 +1079,7 @@ } void -GicV2::copyCpuRegister(BaseGicRegisters* from, BaseGicRegisters* to, +GicV2::copyCpuRegister(Gicv2Registers* from, Gicv2Registers* to, ContextID ctx, Addr daddr) { auto val = from->readCpu(ctx, daddr); @@ -1088,7 +1088,7 @@ } void -GicV2::copyBankedDistRange(BaseGicRegisters* from, BaseGicRegisters* to, +GicV2::copyBankedDistRange(Gicv2Registers* from, Gicv2Registers* to, Addr daddr, size_t size) { for (int ctx = 0; ctx < sys->threads.size(); ++ctx) @@ -1097,7 +1097,7 @@ } void -GicV2::clearBankedDistRange(BaseGicRegisters* to, +GicV2::clearBankedDistRange(Gicv2Registers* to, Addr daddr, size_t size) { for (int ctx = 0; ctx < sys->threads.size(); ++ctx) @@ -1106,7 +1106,7 @@ } void -GicV2::copyDistRange(BaseGicRegisters* from, BaseGicRegisters* to, +GicV2::copyDistRange(Gicv2Registers* from, Gicv2Registers* to, Addr daddr, size_t size) { for (auto a = daddr; a < daddr + size; a += 4) @@ -1114,7 +1114,7 @@ } void -GicV2::clearDistRange(BaseGicRegisters* to, +GicV2::clearDistRange(Gicv2Registers* to, Addr daddr, size_t size) { for (auto a = daddr; a < daddr + size; a += 4) diff --git a/src/dev/arm/gic_v2.hh b/src/dev/arm/gic_v2.hh index 8031b3b..0ceba04 100644 --- a/src/dev/arm/gic_v2.hh +++ b/src/dev/arm/gic_v2.hh @@ -1,5 +1,5 @@ /* - *