Module Name:    src
Committed By:   matt
Date:           Sat Jun 19 20:42:43 UTC 2010

Modified Files:
        src/sys/arch/arm/arm: cpufunc.c
        src/sys/arch/arm/arm32: cpu.c
        src/sys/arch/arm/include: armreg.h

Log Message:
Fix cache probing on Cortex.  Add missing CORTEX dependency in cpu.c


To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/sys/arch/arm/arm/cpufunc.c
cvs rdiff -u -r1.75 -r1.76 src/sys/arch/arm/arm32/cpu.c
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/arm/include/armreg.h

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.96 src/sys/arch/arm/arm/cpufunc.c:1.97
--- src/sys/arch/arm/arm/cpufunc.c:1.96	Sat Jun 19 19:44:57 2010
+++ src/sys/arch/arm/arm/cpufunc.c	Sat Jun 19 20:42:43 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.c,v 1.96 2010/06/19 19:44:57 matt Exp $	*/
+/*	$NetBSD: cpufunc.c,v 1.97 2010/06/19 20:42:43 matt Exp $	*/
 
 /*
  * arm7tdmi support code Copyright (c) 2001 John Fremlin
@@ -49,7 +49,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.96 2010/06/19 19:44:57 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.97 2010/06/19 20:42:43 matt Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_cpuoptions.h"
@@ -1203,27 +1203,37 @@
 
 #if (ARM_MMU_V6 + ARM_MMU_V7) > 0
 	if (CPU_CT_FORMAT(ctype) == 4) { 
-		u_int csid1, csid2;
+		u_int csid0, csid1, csid2;
+
 		isize = 1U << (CPU_CT4_ILINE(ctype) + 2);
 		dsize = 1U << (CPU_CT4_DLINE(ctype) + 2);
 
-		csid1 = get_cachesize_cp15(CPU_CSSR_L1); /* select L1 cache values */
-		arm_pdcache_ways = CPU_CSID_ASSOC(csid1) + 1;
-		arm_pdcache_line_size = dsize << CPU_CSID_LEN(csid1);
+		csid0 = get_cachesize_cp15(CPU_CSSR_L1); /* select L1 dcache values */
+		arm_pdcache_ways = CPU_CSID_ASSOC(csid0) + 1;
+		arm_pdcache_line_size = dsize;
 		arm_pdcache_size = arm_pdcache_line_size * arm_pdcache_ways;
-		arm_pdcache_size *= CPU_CSID_NUMSETS(csid1);
+		arm_pdcache_size *= (CPU_CSID_NUMSETS(csid0) + 1);
+		arm_cache_prefer_mask = PAGE_SIZE;
+
+		arm_dcache_align = arm_pdcache_line_size;
+
+		csid1 = get_cachesize_cp15(CPU_CSSR_L1|CPU_CSSR_InD); /* select L1 icache values */
+		arm_picache_ways = CPU_CSID_ASSOC(csid1) + 1;
+		arm_picache_line_size = isize;
+		arm_picache_size = arm_picache_line_size * arm_picache_ways;
+		arm_picache_size *= (CPU_CSID_NUMSETS(csid1) + 1);
 		arm_cache_prefer_mask = PAGE_SIZE;
 
 		arm_dcache_align = arm_pdcache_line_size;
 
 		csid2 = get_cachesize_cp15(CPU_CSSR_L2); /* select L2 cache values */
 		arm_dcache_l2_assoc = CPU_CSID_ASSOC(csid2) + 1;
-		arm_dcache_l2_linesize = dsize << CPU_CSID_LEN(csid2);
+		arm_dcache_l2_linesize = 1 << (CPU_CSID_LEN(csid2) + 2);
 		arm_dcache_l2_nsets = CPU_CSID_NUMSETS(csid2) + 1;
 		arm_pcache_type = CPU_CT_CTYPE_WB14;
 		goto out;
 	}
-#endif /* ARM_MMU_V6 > 0 */
+#endif /* ARM_MMU_V6 + ARM_MMU_V7 > 0 */
 
 	if ((ctype & CPU_CT_S) == 0)
 		arm_pcache_unified = 1;

Index: src/sys/arch/arm/arm32/cpu.c
diff -u src/sys/arch/arm/arm32/cpu.c:1.75 src/sys/arch/arm/arm32/cpu.c:1.76
--- src/sys/arch/arm/arm32/cpu.c:1.75	Sat Jun 19 19:49:24 2010
+++ src/sys/arch/arm/arm32/cpu.c	Sat Jun 19 20:42:43 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.75 2010/06/19 19:49:24 matt Exp $	*/
+/*	$NetBSD: cpu.c,v 1.76 2010/06/19 20:42:43 matt Exp $	*/
 
 /*
  * Copyright (c) 1995 Mark Brinicombe.
@@ -46,7 +46,7 @@
 
 #include <sys/param.h>
 
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.75 2010/06/19 19:49:24 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.76 2010/06/19 20:42:43 matt Exp $");
 
 #include <sys/systm.h>
 #include <sys/malloc.h>
@@ -623,6 +623,8 @@
 #endif
 #if defined(CPU_ARM11)
 	case CPU_CLASS_ARM11J:
+#endif
+#if defined(CPU_CORTEX)
 	case CPU_CLASS_CORTEX:
 #endif
 #if defined(CPU_FA526)

Index: src/sys/arch/arm/include/armreg.h
diff -u src/sys/arch/arm/include/armreg.h:1.43 src/sys/arch/arm/include/armreg.h:1.44
--- src/sys/arch/arm/include/armreg.h:1.43	Sat Jun 19 19:44:58 2010
+++ src/sys/arch/arm/include/armreg.h	Sat Jun 19 20:42:43 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: armreg.h,v 1.43 2010/06/19 19:44:58 matt Exp $	*/
+/*	$NetBSD: armreg.h,v 1.44 2010/06/19 20:42:43 matt Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Ben Harris
@@ -346,7 +346,7 @@
 #define	CPU_CSID_CTYPE_WB	0x40000000	/* write-back avail */ 
 #define	CPU_CSID_CTYPE_RA	0x20000000	/* read-allocation avail */ 
 #define	CPU_CSID_CTYPE_WA	0x10000000	/* write-allocation avail */ 
-#define	CPU_CSID_NUMSETS(x)	(((x) >> 12) & 0xffff)
+#define	CPU_CSID_NUMSETS(x)	(((x) >> 13) & 0x7fff)
 #define	CPU_CSID_ASSOC(x)	(((x) >> 3) & 0x1ff)
 #define	CPU_CSID_LEN(x)		((x) & 0x03)
 

Reply via email to