diff options
Diffstat (limited to 'target/linux/ar7/files/arch/mips/ar7/memory.c')
-rw-r--r-- | target/linux/ar7/files/arch/mips/ar7/memory.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/target/linux/ar7/files/arch/mips/ar7/memory.c b/target/linux/ar7/files/arch/mips/ar7/memory.c index 72d6668a1..e8522a174 100644 --- a/target/linux/ar7/files/arch/mips/ar7/memory.c +++ b/target/linux/ar7/files/arch/mips/ar7/memory.c @@ -37,22 +37,25 @@ static int __init memsize(void) { u32 size = (64 << 20); - volatile u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4); + u32 *addr = (u32 *)KSEG1ADDR(0x14000000 + size - 4); u32 *kernel_end = (u32 *)KSEG1ADDR(CPHYSADDR((u32)&_end)); + u32 *tmpaddr = addr; - while (addr > kernel_end) { - *addr = (u32)addr; + while (tmpaddr > kernel_end) { + *tmpaddr = (u32)tmpaddr; size >>= 1; - addr -= size >> 2; + tmpaddr -= size >> 2; } do { - addr += size >> 2; - if (*addr != (u32)addr) + tmpaddr += size >> 2; + if (*tmpaddr != (u32)tmpaddr) break; size <<= 1; } while (size < (64 << 20)); + writel(tmpaddr, &addr); + return size; } |