diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-01-13 11:38:18 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-01-13 11:38:18 +0100 |
commit | f2e6c3e84afe25f6c94b1073f60dbbcd99a3472b (patch) | |
tree | 1bd5fba5d71f7224b0acecd0c4c8c4434b129434 /c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c | |
parent | powerpc: AltiVec and FPU context support (diff) | |
download | rtems-f2e6c3e84afe25f6c94b1073f60dbbcd99a3472b.tar.bz2 |
bsp/qoriq: Add T2080RDB and T4240RDB variants
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c b/c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c index 0e52f0ab32..e2a0188c80 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/mmu.c @@ -7,10 +7,10 @@ */ /* - * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2011-2015 embedded brains GmbH. All rights reserved. * * embedded brains GmbH - * Obere Lagerstr. 30 + * Dornierstr. 4 * 82178 Puchheim * Germany * <rtems@embedded-brains.de> @@ -40,6 +40,21 @@ static uint32_t TEXT power_of_two(uint32_t val) return power; } +static uint32_t TEXT max_power_of_two(uint32_t val) +{ + uint32_t test_power = QORIQ_MMU_MIN_POWER; + uint32_t power = test_power; + uint32_t max = 1U << test_power; + + do { + power = test_power; + max <<= QORIQ_MMU_POWER_STEP; + test_power += QORIQ_MMU_POWER_STEP; + } while (test_power <= QORIQ_MMU_MAX_POWER && max <= val); + + return power; +} + void TEXT qoriq_mmu_context_init(qoriq_mmu_context *self) { int *cur = (int *) self; @@ -150,7 +165,7 @@ static void TEXT align(qoriq_mmu_context *self, uint32_t alignment) static bool TEXT is_full(qoriq_mmu_context *self) { - return self->count >= QORIQ_MMU_ENTRY_COUNT; + return self->count >= QORIQ_TLB1_ENTRY_COUNT; } static void TEXT append(qoriq_mmu_context *self, const qoriq_mmu_entry *new_entry) @@ -208,9 +223,8 @@ static bool TEXT split(qoriq_mmu_context *self, qoriq_mmu_entry *cur) uint32_t end = cur->last + 1; uint32_t size = end - begin; uint32_t begin_power = power_of_two(begin); - uint32_t end_power = power_of_two(end); - uint32_t size_power = power_of_two(size); - uint32_t power = min(begin_power, min(end_power, size_power)); + uint32_t size_power = max_power_of_two(size); + uint32_t power = min(begin_power, size_power); uint32_t split_size = power < 32 ? (1U << power) : 0; uint32_t split_pos = begin + split_size; |