diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-10-31 17:12:30 +0000 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-11-07 15:22:43 +0000 |
commit | 6fa49382ef22e1b01fb24503e3bbe5ab3556750a (patch) | |
tree | 503b9ab214e8a52116debf268c7add2f6f41a962 /src/arch/arm/system.hh | |
parent | f97164aa29ad50c1b324416c14f93e0b463bcfa7 (diff) | |
download | gem5-6fa49382ef22e1b01fb24503e3bbe5ab3556750a.tar.xz |
arch-arm: ArmSystem::resetAddr64 renamed to be used in AArch32
ARMv8 differs from ARMv7 with the presence of RVBAR register, which
contains the implementation defined reset address when EL3 is not
implemented.
The entry 0x0 in the AArch32 vector table, once used for the Reset
Vector, is now marked as "Not used", stating that it is now IMPLEMENTATION
DEFINED. An implementation might still use this vector table entry to
hold the Reset vector, but having a Reset address != than the general
vector table (for any other exception) is allowed.
At the moment any Reset exception is still using 0 as a vector table
base address. This patch is extending the ArmSystem::resetAddr64 to
ArmSystem::resetAddr so that it can be used for initializing
MVBAR/RVBAR. In order to do so, we are providing a specialized behavior
for the Reset exception when evaluating the vector base address.
Change-Id: I051a730dc089e194db3b107bbed19251c661f87e
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/14000
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/arch/arm/system.hh')
-rw-r--r-- | src/arch/arm/system.hh | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/arch/arm/system.hh b/src/arch/arm/system.hh index 2e236f722..c6974609e 100644 --- a/src/arch/arm/system.hh +++ b/src/arch/arm/system.hh @@ -99,16 +99,15 @@ class ArmSystem : public System GenericTimer *_genericTimer; /** - * True if the register width of the highest implemented exception level is - * 64 bits (ARMv8) + * Reset address (ARMv8) */ - bool _highestELIs64; + const Addr _resetAddr; /** - * Reset address if the highest implemented exception level is 64 bits - * (ARMv8) + * True if the register width of the highest implemented exception level is + * 64 bits (ARMv8) */ - const Addr _resetAddr64; + bool _highestELIs64; /** * Supported physical address range in bits if the highest implemented @@ -212,7 +211,7 @@ class ArmSystem : public System /** Returns the reset address if the highest implemented exception level is * 64 bits (ARMv8) */ - Addr resetAddr64() const { return _resetAddr64; } + Addr resetAddr() const { return _resetAddr; } /** Returns true if ASID is 16 bits in AArch64 (ARMv8) */ bool haveLargeAsid64() const { return _haveLargeAsid64; } @@ -283,7 +282,7 @@ class ArmSystem : public System /** Returns the reset address if the highest implemented exception level * for the system of a specific thread context is 64 bits (ARMv8) */ - static Addr resetAddr64(ThreadContext *tc); + static Addr resetAddr(ThreadContext *tc); /** Returns the supported physical address range in bits for the system of a * specific thread context |