arch-arm: Add walkBits method to PageTableOps

Change-Id: I84cea3bcc5a3b566b8c26ebd3a54443c96199483
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/52008
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
This commit is contained in:
Giacomo Travaglini
2021-08-12 11:19:29 +01:00
parent 1268c6ec3c
commit 69e6ea485a
2 changed files with 39 additions and 31 deletions

View File

@@ -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);
}
}

View File

@@ -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;