Module Name:    src
Committed By:   uebayasi
Date:           Sun Dec 27 05:14:56 UTC 2009

Modified Files:
        src/sys/arch/arm/arm: cpufunc.c
        src/sys/arch/arm/arm32: pmap.c
        src/sys/arch/arm/conf: files.arm
        src/sys/arch/arm/include/arm32: pmap.h
        src/sys/arch/evbarm/conf: std.imx31

Log Message:
Add write-through cache work-around for ARM11 as well as ARM9/ARM10.  Analyzed
& tested on i.MX35 with help from Tsubai Masanari.


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/arch/arm/arm/cpufunc.c
cvs rdiff -u -r1.203 -r1.204 src/sys/arch/arm/arm32/pmap.c
cvs rdiff -u -r1.96 -r1.97 src/sys/arch/arm/conf/files.arm
cvs rdiff -u -r1.93 -r1.94 src/sys/arch/arm/include/arm32/pmap.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbarm/conf/std.imx31

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/arm/cpufunc.c
diff -u src/sys/arch/arm/arm/cpufunc.c:1.93 src/sys/arch/arm/arm/cpufunc.c:1.94
--- src/sys/arch/arm/arm/cpufunc.c:1.93	Sun Mar 15 22:23:16 2009
+++ src/sys/arch/arm/arm/cpufunc.c	Sun Dec 27 05:14:56 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.c,v 1.93 2009/03/15 22:23:16 cegger Exp $	*/
+/*	$NetBSD: cpufunc.c,v 1.94 2009/12/27 05:14:56 uebayasi Exp $	*/
 
 /*
  * arm7tdmi support code Copyright (c) 2001 John Fremlin
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.93 2009/03/15 22:23:16 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.94 2009/12/27 05:14:56 uebayasi Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_cpuoptions.h"
@@ -1426,7 +1426,11 @@
 		cpu_reset_needs_v4_MMU_disable = 1;	/* V4 or higher */
 		cpu_do_powersave = 1;			/* Enable powersave */
 		get_cachetype_cp15();
+#ifdef ARM11_CACHE_WRITE_THROUGH
+		pmap_pte_init_arm11();
+#else
 		pmap_pte_init_generic();
+#endif
 		if (arm_cache_prefer_mask)
 			uvmexp.ncolors = (arm_cache_prefer_mask >> PGSHIFT) + 1;
 

Index: src/sys/arch/arm/arm32/pmap.c
diff -u src/sys/arch/arm/arm32/pmap.c:1.203 src/sys/arch/arm/arm32/pmap.c:1.204
--- src/sys/arch/arm/arm32/pmap.c:1.203	Sat Nov 28 11:44:45 2009
+++ src/sys/arch/arm/arm32/pmap.c	Sun Dec 27 05:14:56 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.203 2009/11/28 11:44:45 scw Exp $	*/
+/*	$NetBSD: pmap.c,v 1.204 2009/12/27 05:14:56 uebayasi Exp $	*/
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -211,7 +211,7 @@
 #include <machine/param.h>
 #include <arm/arm32/katelib.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.203 2009/11/28 11:44:45 scw Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.204 2009/12/27 05:14:56 uebayasi Exp $");
 
 #ifdef PMAP_DEBUG
 
@@ -5971,7 +5971,7 @@
 	pte_l2_l_cache_mode_pt = L2_C;
 	pte_l2_s_cache_mode_pt = L2_C;
 }
-#endif /* CPU_ARM9 */
+#endif /* CPU_ARM9 && ARM9_CACHE_WRITE_THROUGH */
 #endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1 + ARM_MMU_V6) != 0 */
 
 #if defined(CPU_ARM10)
@@ -5996,6 +5996,27 @@
 }
 #endif /* CPU_ARM10 */
 
+#if defined(CPU_ARM11) && defined(ARM11_CACHE_WRITE_THROUGH)
+void
+pmap_pte_init_arm11(void)
+{
+
+	/*
+	 * ARM11 is compatible with generic, but we want to use
+	 * write-through caching for now.
+	 */
+	pmap_pte_init_generic();
+
+	pte_l1_s_cache_mode = L1_S_C;
+	pte_l2_l_cache_mode = L2_C;
+	pte_l2_s_cache_mode = L2_C;
+
+	pte_l1_s_cache_mode_pt = L1_S_C;
+	pte_l2_l_cache_mode_pt = L2_C;
+	pte_l2_s_cache_mode_pt = L2_C;
+}
+#endif /* CPU_ARM11 && ARM11_CACHE_WRITE_THROUGH */
+
 #if ARM_MMU_SA1 == 1
 void
 pmap_pte_init_sa1(void)

Index: src/sys/arch/arm/conf/files.arm
diff -u src/sys/arch/arm/conf/files.arm:1.96 src/sys/arch/arm/conf/files.arm:1.97
--- src/sys/arch/arm/conf/files.arm:1.96	Sun Jan 18 16:42:09 2009
+++ src/sys/arch/arm/conf/files.arm	Sun Dec 27 05:14:56 2009
@@ -1,4 +1,4 @@
-#	$NetBSD: files.arm,v 1.96 2009/01/18 16:42:09 bjh21 Exp $
+#	$NetBSD: files.arm,v 1.97 2009/12/27 05:14:56 uebayasi Exp $
 
 # temporary define to allow easy moving to ../arch/arm/arm32
 defflag				ARM32
@@ -27,6 +27,7 @@
 defflag  opt_cpuoptions.h	PROCESS_ID_IS_CURLWP
 defflag  opt_cpuoptions.h	PROCESS_ID_IS_CURCPU
 defflag  opt_cpuoptions.h	ARM11_PMC
+defflag  opt_cpuoptions.h	ARM11_CACHE_WRITE_THROUGH
 
 # Interrupt implementation header definition.
 defparam opt_arm_intr_impl.h	ARM_INTR_IMPL

Index: src/sys/arch/arm/include/arm32/pmap.h
diff -u src/sys/arch/arm/include/arm32/pmap.h:1.93 src/sys/arch/arm/include/arm32/pmap.h:1.94
--- src/sys/arch/arm/include/arm32/pmap.h:1.93	Thu Oct 22 19:50:55 2009
+++ src/sys/arch/arm/include/arm32/pmap.h	Sun Dec 27 05:14:56 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.h,v 1.93 2009/10/22 19:50:55 rmind Exp $	*/
+/*	$NetBSD: pmap.h,v 1.94 2009/12/27 05:14:56 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 2002, 2003 Wasabi Systems, Inc.
@@ -462,6 +462,9 @@
 #if defined(CPU_ARM10)
 void	pmap_pte_init_arm10(void);
 #endif /* CPU_ARM10 */
+#if defined(CPU_ARM11)
+void	pmap_pte_init_arm11(void);
+#endif /* CPU_ARM11 */
 #endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */
 
 #if ARM_MMU_SA1 == 1

Index: src/sys/arch/evbarm/conf/std.imx31
diff -u src/sys/arch/evbarm/conf/std.imx31:1.2 src/sys/arch/evbarm/conf/std.imx31:1.3
--- src/sys/arch/evbarm/conf/std.imx31:1.2	Sun Apr 27 18:58:46 2008
+++ src/sys/arch/evbarm/conf/std.imx31	Sun Dec 27 05:14:56 2009
@@ -1,4 +1,4 @@
-#	$NetBSD: std.imx31,v 1.2 2008/04/27 18:58:46 matt Exp $
+#	$NetBSD: std.imx31,v 1.3 2009/12/27 05:14:56 uebayasi Exp $
 #
 # standard NetBSD/evbarm options for FreeScale I.MX31 
 
@@ -17,6 +17,7 @@
 # To support easy transit to ../arch/arm/arm32
 options 	ARM32
 options 	ARM11_PMC
+options 	ARM11_CACHE_WRITE_THROUGH
 
 makeoptions	LOADADDRESS="0x80100000"
 makeoptions	BOARDTYPE="imx31"

Reply via email to