Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/evbarm/rpi Prepare for ARM_MMU_EXTENDED
details: https://anonhg.NetBSD.org/src/rev/570841d8c961
branches: trunk
changeset: 797788:570841d8c961
user: skrll <skrll%NetBSD.org@localhost>
date: Sun Jul 27 09:04:09 2014 +0000
description:
Prepare for ARM_MMU_EXTENDED
diffstat:
sys/arch/evbarm/rpi/rpi_start.S | 53 ++++++++++++++++++++++++++++++----------
1 files changed, 39 insertions(+), 14 deletions(-)
diffs (110 lines):
diff -r bd8846be4a28 -r 570841d8c961 sys/arch/evbarm/rpi/rpi_start.S
--- a/sys/arch/evbarm/rpi/rpi_start.S Sun Jul 27 08:55:39 2014 +0000
+++ b/sys/arch/evbarm/rpi/rpi_start.S Sun Jul 27 09:04:09 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rpi_start.S,v 1.11 2014/05/14 14:38:54 joerg Exp $ */
+/* $NetBSD: rpi_start.S,v 1.12 2014/07/27 09:04:09 skrll Exp $ */
/*
* Copyright (c) 2002, 2003 Genetec Corporation. All rights reserved.
@@ -82,12 +82,13 @@
*/
#include "opt_cputypes.h"
+#include "opt_cpuoptions.h"
#include <machine/asm.h>
#include <arm/armreg.h>
#include "assym.h"
-RCSID("$NetBSD: rpi_start.S,v 1.11 2014/05/14 14:38:54 joerg Exp $")
+RCSID("$NetBSD: rpi_start.S,v 1.12 2014/07/27 09:04:09 skrll Exp $")
/*
* Workaround Erratum 411920
@@ -209,9 +210,23 @@
mcr p15, 0, r0, c7, c10, 4 /* Drain the write buffers. */
ldr r0, Ltemp_l1_table /* The page table address */
- mcr p15, 0, r0, c2, c0, 0 /* Set Translation Table Base */
+
+ mcr p15, 0, r0, c2, c0, 0 /* Set Translation Table Base 0 (TTB0) */
+
+#if defined(ARM_MMU_EXTENDED)
+ // When using split TTBRs, we need to set both since the physical
+ // addresses we were/are using might be in either.
+ mcr p15, 0, r0, c2, c0, 1 /* TTBR1 write */
+#endif
- mov r0, #0
+#if defined(ARM_MMU_EXTENDED)
+ mov r1, #TTBCR_S_N_1 /* make sure TTBCR_S_N is 1 */
+#else
+ mov r1, #0 /* make sure TTBCR is 0 */
+#endif
+ mcr p15, 0, r1, c2, c0, 2 /* TTBCR write */
+
+ mov r0, #0
mcr p15, 0, r0, c8, c7, 0 /* Invalidate TLBs */
/* Set the Domain Access register. Very important! */
@@ -267,18 +282,22 @@
/* bits to set in the Control Register */
Lcontrol_set:
+#ifdef ARM11_COMPAT_MMU
+#define CPU_CONTROL_EXTRA CPU_CONTROL_SYST_ENABLE
+#else
+#define CPU_CONTROL_EXTRA CPU_CONTROL_XP_ENABLE
+#endif
.word CPU_CONTROL_MMU_ENABLE | \
CPU_CONTROL_DC_ENABLE | \
- CPU_CONTROL_WBUF_ENABLE | /* not defined in 1176 */ \
- CPU_CONTROL_32BP_ENABLE | \
- CPU_CONTROL_32BD_ENABLE | \
- CPU_CONTROL_LABT_ENABLE | \
- CPU_CONTROL_SYST_ENABLE | \
+ CPU_CONTROL_WBUF_ENABLE | /* not defined in 1176 (SBO) */ \
+ CPU_CONTROL_32BP_ENABLE | /* SBO */ \
+ CPU_CONTROL_32BD_ENABLE | /* SBO */ \
+ CPU_CONTROL_LABT_ENABLE | /* SBO */ \
(1 << 16) | /* SBO - Global enable for data tcm */ \
(1 << 18) | /* SBO - Global enable for insn tcm */ \
CPU_CONTROL_UNAL_ENABLE | \
- CPU_CONTROL_IC_ENABLE
-
+ CPU_CONTROL_IC_ENABLE | \
+ CPU_CONTROL_EXTRA
/* bits to clear in the Control Register */
Lcontrol_clr:
@@ -305,20 +324,26 @@
.word n_sec ; \
.word attr ;
+#ifdef ARM11_COMPAT_MMU
+#define L1_S_APv6_KRW L1_S_AP_KRW
+#else
+#define L1_S_APv6_KRW L1_S_APv7_KRW
+#endif
+
mmu_init_table:
/* Add 1MB of VA==PA at 0x00000000 so we can keep the kernel going */
MMU_INIT(0x0, 0x0,
(_end - KERNEL_BASE + 2 * L1_S_SIZE - 1),
- L1_S_PROTO | L1_S_AP_KRW)
+ L1_S_PROTO | L1_S_APv6_KRW)
MMU_INIT(KERNEL_BASE, 0x0,
(_end - KERNEL_BASE + 2 * L1_S_SIZE - 1),
- L1_S_PROTO | L1_S_AP_KRW | L1_S_B | L1_S_C)
+ L1_S_PROTO | L1_S_APv6_KRW | L1_S_B | L1_S_C)
/* Map the 16MB of peripherals */
MMU_INIT(RPI_KERNEL_IO_VBASE, RPI_KERNEL_IO_PBASE,
(RPI_KERNEL_IO_VSIZE + L1_S_SIZE - 1),
- L1_S_PROTO | L1_S_AP_KRW)
+ L1_S_PROTO | L1_S_APv6_KRW)
/* end of table */
MMU_INIT(0, 0, 0, 0)
Home |
Main Index |
Thread Index |
Old Index