diff options
author | Furquan Shaikh <furquan@google.com> | 2014-09-06 18:47:33 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-03-28 07:04:38 +0100 |
commit | c4fb61385fd5ea0e9a98a9fb5e3cfec1f06c8504 (patch) | |
tree | e6706232ae7cc842571d4603cf93e9b9ebcad4d2 | |
parent | cbf17d95c567bcc4439c249fb2e4525f616e3580 (diff) |
arm64: Reinit free_idx to 1 in mmu_init
If mmu_init is called more than once then, free_idx should be reset to
1. Here, the assumption would be that mmu_init will not be called more than
once. However, this is not necessarily true. Thus, free_idx should be reset to 1
every time we are initializing ttb from scratch.
BUG=None
BRANCH=None
TEST=Compiles sucessfully and boots to kernel
Change-Id: I5ac0af43346a492583380b0f15101390fc98d182
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 398a68c3b08d82cfa521d235af2c1922629bdf56
Original-Change-Id: Idb7424df7dd577f263f12d1527dbd7fb89216d40
Original-Signed-off-by: Furquan Shaikh <furquan@google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/216906
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Original-Tested-by: Furquan Shaikh <furquan@chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/9068
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r-- | src/arch/arm64/armv8/mmu.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/arch/arm64/armv8/mmu.c b/src/arch/arm64/armv8/mmu.c index 2c1555c808..8fde41f7f7 100644 --- a/src/arch/arm64/armv8/mmu.c +++ b/src/arch/arm64/armv8/mmu.c @@ -40,6 +40,7 @@ static unsigned int max_tables; /* Address of ttb buffer */ static uint64_t *xlat_addr; +static int free_idx; static const uint64_t level_to_addr_mask[] = { L1_ADDR_MASK, @@ -74,7 +75,6 @@ static uint64_t get_block_attr(unsigned long tag) attr |= BLOCK_INDEX_MEM_DEV_NGNRNE << BLOCK_INDEX_SHIFT; } - return attr; } @@ -103,7 +103,6 @@ static uint64_t table_desc_valid(uint64_t desc) */ static uint64_t *get_new_table(void) { - static int free_idx = 1; uint64_t *new; if (free_idx >= max_tables) { @@ -260,6 +259,7 @@ void mmu_init(struct memranges *mmap_ranges, memset((void*)ttb_buffer, 0, GRANULE_SIZE); max_tables = (ttb_size >> GRANULE_SIZE_SHIFT); xlat_addr = ttb_buffer; + free_idx = 1; memranges_each_entry(mmap_entry, mmap_ranges) { init_mmap_entry(mmap_entry); |