PERFORCE change 228019 for review

Bjoern A. Zeeb bz at FreeBSD.org
Tue Apr 23 13:55:45 UTC 2013


http://p4web.freebsd.org/@@228019?ac=10

Change 228019 by bz at bz_zenith on 2013/04/23 13:55:30

	Add kernel side support for large TLB on BERI/CHERI.
	Modelled similar to NLM.
	
	Tested by:		jdw57
	Hardware changes in:	r6828

Affected files ...

.. //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#9 edit
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/std.beri#5 edit
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/include/cpufunc.h#7 edit
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/cpu.c#4 edit

Differences ...

==== //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#9 (text+ko) ====

@@ -79,6 +79,11 @@
 OCTEON_BOARD_CAPK_0100ND	opt_cvmx.h
 
 #
+# Options specific to the BERI and CHERI CPUs.
+#
+BERI_LARGE_TLB			opt_global.h
+
+#
 # Options that control the Atheros SoC peripherals
 #
 ARGE_DEBUG			opt_arge.h

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/std.beri#5 (text+ko) ====

@@ -2,3 +2,6 @@
 files	"../beri/files.beri"
 
 cpu		CPU_MIPS4KC
+
+options 	BERI_LARGE_TLB
+

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/include/cpufunc.h#7 (text+ko) ====

@@ -242,8 +242,13 @@
 #ifdef CPU_CNMIPS
 MIPS_RW32_COP0_SEL(config4, MIPS_COP_0_CONFIG, 4);
 #endif
+#ifdef BERI_LARGE_TLB
+MIPS_RW32_COP0_SEL(config5, MIPS_COP_0_CONFIG, 5);
+#endif
+#if defined(CPU_NLM) || defined(BERI_LARGE_TLB)
+MIPS_RW32_COP0_SEL(config6, MIPS_COP_0_CONFIG, 6);
+#endif
 #ifdef CPU_NLM
-MIPS_RW32_COP0_SEL(config6, MIPS_COP_0_CONFIG, 6);
 MIPS_RW32_COP0_SEL(config7, MIPS_COP_0_CONFIG, 7);
 #endif
 MIPS_RW32_COP0(count, MIPS_COP_0_COUNT);

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/cpu.c#4 (text+ko) ====

@@ -99,17 +99,29 @@
 
 	/* Learn TLB size and L1 cache geometry. */
 	cfg1 = mips_rd_config1();
-#ifndef CPU_NLM
-	cpuinfo->tlb_nentries = 
-	    ((cfg1 & MIPS_CONFIG1_TLBSZ_MASK) >> MIPS_CONFIG1_TLBSZ_SHIFT) + 1;
-#else
+
+#if defined(CPU_NLM)
 	/* Account for Extended TLB entries in XLP */
 	tmp = mips_rd_config6();
 	cpuinfo->tlb_nentries = ((tmp >> 16) & 0xffff) + 1;
+#elif defined(BERI_LARGE_TLB)
+	/* Check if we support extended TLB entries and if so activate. */
+	tmp = mips_rd_config5();
+#define	BERI_CP5_LTLB_SUPPORTED	0x1
+	if (tmp & BERI_CP5_LTLB_SUPPORTED) {
+		/* See how many extra TLB entries we have. */
+		tmp = mips_rd_config6();
+		cpuinfo->tlb_nentries = (tmp >> 16) + 1;
+		/* Activate the extended entries. */
+		mips_wr_config6(tmp|0x4);
+	} else
+#endif
+#if !defined(CPU_NLM)
+	cpuinfo->tlb_nentries = 
+	    ((cfg1 & MIPS_CONFIG1_TLBSZ_MASK) >> MIPS_CONFIG1_TLBSZ_SHIFT) + 1;
 #endif
-
+#if defined(CPU_CNMIPS)
 	/* Add extended TLB size information from config4.  */
-#if defined(CPU_CNMIPS)
 	cfg4 = mips_rd_config4();
 	if ((cfg4 & MIPS_CONFIG4_MMUEXTDEF) == MIPS_CONFIG4_MMUEXTDEF_MMUSIZEEXT)
 		cpuinfo->tlb_nentries += (cfg4 & MIPS_CONFIG4_MMUSIZEEXT) * 0x40;


More information about the p4-projects mailing list