From 69e6ea485ac44157400cd666a5db3636aa5fc2d4 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Thu, 12 Aug 2021 11:19:29 +0100 Subject: [PATCH] arch-arm: Add walkBits method to PageTableOps Change-Id: I84cea3bcc5a3b566b8c26ebd3a54443c96199483 Signed-off-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/52008 Tested-by: kokoro Reviewed-by: Jason Lowe-Power Reviewed-by: Andreas Sandberg Maintainer: Jason Lowe-Power Maintainer: Andreas Sandberg --- src/arch/arm/pagetable.cc | 58 +++++++++++++++++++++------------------ src/arch/arm/pagetable.hh | 12 ++++---- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/arch/arm/pagetable.cc b/src/arch/arm/pagetable.cc index 0834e7b21b..542610d79c 100644 --- a/src/arch/arm/pagetable.cc +++ b/src/arch/arm/pagetable.cc @@ -51,6 +51,12 @@ const GrainSize GrainMap_tg0[] = const GrainSize GrainMap_tg1[] = { ReservedGrain, Grain16KB, Grain4KB, Grain64KB }; +Addr +PageTableOps::walkMask(unsigned level) const +{ + return ~mask(walkBits(level)); +} + bool V7LPageTableOps::isValid(pte_t pte, unsigned level) const { @@ -119,14 +125,14 @@ V7LPageTableOps::pageMask(pte_t pte, unsigned level) const } } -Addr -V7LPageTableOps::walkMask(unsigned level) const +unsigned +V7LPageTableOps::walkBits(unsigned level) const { switch (level) { - case 1: return ~mask(30); - case 2: return ~mask(21); - case 3: return ~mask(12); - default: panic("bad level %d", level); + case 1: return 30; + case 2: return 21; + case 3: return 12; + default: panic("bad level %d", level); } } @@ -212,15 +218,15 @@ V8PageTableOps4k::pageMask(pte_t pte, unsigned level) const } } -Addr -V8PageTableOps4k::walkMask(unsigned level) const +unsigned +V8PageTableOps4k::walkBits(unsigned level) const { switch (level) { - case 0: return ~mask(39); - case 1: return ~mask(30); - case 2: return ~mask(21); - case 3: return ~mask(12); - default: panic("bad level %d", level); + case 0: return 39; + case 1: return 30; + case 2: return 21; + case 3: return 12; + default: panic("bad level %d", level); } } @@ -323,15 +329,15 @@ V8PageTableOps16k::pageMask(pte_t pte, unsigned level) const } } -Addr -V8PageTableOps16k::walkMask(unsigned level) const +unsigned +V8PageTableOps16k::walkBits(unsigned level) const { switch (level) { - case 0: return ~mask(47); - case 1: return ~mask(36); - case 2: return ~mask(25); - case 3: return ~mask(14); - default: panic("bad level %d", level); + case 0: return 47; + case 1: return 36; + case 2: return 25; + case 3: return 14; + default: panic("bad level %d", level); } } @@ -428,14 +434,14 @@ V8PageTableOps64k::pageMask(pte_t pte, unsigned level) const } } -Addr -V8PageTableOps64k::walkMask(unsigned level) const +unsigned +V8PageTableOps64k::walkBits(unsigned level) const { switch (level) { - case 1: return ~mask(42); - case 2: return ~mask(29); - case 3: return ~mask(16); - default: panic("bad level %d", level); + case 1: return 42; + case 2: return 29; + case 3: return 16; + default: panic("bad level %d", level); } } diff --git a/src/arch/arm/pagetable.hh b/src/arch/arm/pagetable.hh index bf4a5f70e9..4cfdf2abc3 100644 --- a/src/arch/arm/pagetable.hh +++ b/src/arch/arm/pagetable.hh @@ -98,10 +98,12 @@ struct PageTableOps virtual Addr nextLevelPointer(pte_t pte, unsigned level) const = 0; virtual Addr index(Addr va, unsigned level, int tsz) const = 0; virtual Addr pageMask(pte_t pte, unsigned level) const = 0; - virtual Addr walkMask(unsigned level) const = 0; + virtual unsigned walkBits(unsigned level) const = 0; virtual LookupLevel firstLevel(uint8_t tsz) const = 0; virtual LookupLevel firstS2Level(uint8_t sl0) const = 0; virtual LookupLevel lastLevel() const = 0; + + Addr walkMask(unsigned level) const; }; struct V7LPageTableOps : public PageTableOps @@ -112,7 +114,7 @@ struct V7LPageTableOps : public PageTableOps Addr nextLevelPointer(pte_t pte, unsigned level) const override; Addr index(Addr va, unsigned level, int tsz) const override; Addr pageMask(pte_t pte, unsigned level) const override; - Addr walkMask(unsigned level) const override; + unsigned walkBits(unsigned level) const override; LookupLevel firstLevel(uint8_t tsz) const override; LookupLevel lastLevel() const override; }; @@ -125,7 +127,7 @@ struct V8PageTableOps4k : public PageTableOps Addr nextLevelPointer(pte_t pte, unsigned level) const override; Addr index(Addr va, unsigned level, int tsz) const override; Addr pageMask(pte_t pte, unsigned level) const override; - Addr walkMask(unsigned level) const override; + unsigned walkBits(unsigned level) const override; LookupLevel firstLevel(uint8_t tsz) const override; LookupLevel firstS2Level(uint8_t sl0) const override; LookupLevel lastLevel() const override; @@ -139,7 +141,7 @@ struct V8PageTableOps16k : public PageTableOps Addr nextLevelPointer(pte_t pte, unsigned level) const override; Addr index(Addr va, unsigned level, int tsz) const override; Addr pageMask(pte_t pte, unsigned level) const override; - Addr walkMask(unsigned level) const override; + unsigned walkBits(unsigned level) const override; LookupLevel firstLevel(uint8_t tsz) const override; LookupLevel firstS2Level(uint8_t sl0) const override; LookupLevel lastLevel() const override; @@ -153,7 +155,7 @@ struct V8PageTableOps64k : public PageTableOps Addr nextLevelPointer(pte_t pte, unsigned level) const override; Addr index(Addr va, unsigned level, int tsz) const override; Addr pageMask(pte_t pte, unsigned level) const override; - Addr walkMask(unsigned level) const override; + unsigned walkBits(unsigned level) const override; LookupLevel firstLevel(uint8_t tsz) const override; LookupLevel firstS2Level(uint8_t sl0) const override; LookupLevel lastLevel() const override;