cpu.c (256281) | cpu.c (257528) |
---|---|
1/*- 2 * Copyright (c) 2004 Juli Mallett. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. --- 11 unchanged lines hidden (view full) --- 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2004 Juli Mallett. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. --- 11 unchanged lines hidden (view full) --- 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: stable/10/sys/mips/mips/cpu.c 232896 2012-03-12 21:25:32Z jmallett $"); | 28__FBSDID("$FreeBSD: stable/10/sys/mips/mips/cpu.c 257528 2013-11-01 21:17:45Z brooks $"); |
29 30#include <sys/param.h> 31#include <sys/kernel.h> 32#include <sys/module.h> 33#include <sys/stdint.h> 34 35#include <sys/bus.h> 36#include <sys/rman.h> --- 57 unchanged lines hidden (view full) --- 94 cpuinfo->icache_virtual = cfg0 & MIPS_CONFIG0_VI; 95 96 /* If config register selection 1 does not exist, exit. */ 97 if (!(cfg0 & MIPS_CONFIG_CM)) 98 return; 99 100 /* Learn TLB size and L1 cache geometry. */ 101 cfg1 = mips_rd_config1(); | 29 30#include <sys/param.h> 31#include <sys/kernel.h> 32#include <sys/module.h> 33#include <sys/stdint.h> 34 35#include <sys/bus.h> 36#include <sys/rman.h> --- 57 unchanged lines hidden (view full) --- 94 cpuinfo->icache_virtual = cfg0 & MIPS_CONFIG0_VI; 95 96 /* If config register selection 1 does not exist, exit. */ 97 if (!(cfg0 & MIPS_CONFIG_CM)) 98 return; 99 100 /* Learn TLB size and L1 cache geometry. */ 101 cfg1 = mips_rd_config1(); |
102#ifndef CPU_NLM 103 cpuinfo->tlb_nentries = 104 ((cfg1 & MIPS_CONFIG1_TLBSZ_MASK) >> MIPS_CONFIG1_TLBSZ_SHIFT) + 1; 105#else | 102 103#if defined(CPU_NLM) |
106 /* Account for Extended TLB entries in XLP */ 107 tmp = mips_rd_config6(); 108 cpuinfo->tlb_nentries = ((tmp >> 16) & 0xffff) + 1; | 104 /* Account for Extended TLB entries in XLP */ 105 tmp = mips_rd_config6(); 106 cpuinfo->tlb_nentries = ((tmp >> 16) & 0xffff) + 1; |
107#elif defined(BERI_LARGE_TLB) 108 /* Check if we support extended TLB entries and if so activate. */ 109 tmp = mips_rd_config5(); 110#define BERI_CP5_LTLB_SUPPORTED 0x1 111 if (tmp & BERI_CP5_LTLB_SUPPORTED) { 112 /* See how many extra TLB entries we have. */ 113 tmp = mips_rd_config6(); 114 cpuinfo->tlb_nentries = (tmp >> 16) + 1; 115 /* Activate the extended entries. */ 116 mips_wr_config6(tmp|0x4); 117 } else |
|
109#endif | 118#endif |
110 111 /* Add extended TLB size information from config4. */ | 119#if !defined(CPU_NLM) 120 cpuinfo->tlb_nentries = 121 ((cfg1 & MIPS_CONFIG1_TLBSZ_MASK) >> MIPS_CONFIG1_TLBSZ_SHIFT) + 1; 122#endif |
112#if defined(CPU_CNMIPS) | 123#if defined(CPU_CNMIPS) |
124 /* Add extended TLB size information from config4. */ |
|
113 cfg4 = mips_rd_config4(); 114 if ((cfg4 & MIPS_CONFIG4_MMUEXTDEF) == MIPS_CONFIG4_MMUEXTDEF_MMUSIZEEXT) 115 cpuinfo->tlb_nentries += (cfg4 & MIPS_CONFIG4_MMUSIZEEXT) * 0x40; 116#endif 117 118 /* L1 instruction cache. */ 119 tmp = (cfg1 & MIPS_CONFIG1_IL_MASK) >> MIPS_CONFIG1_IL_SHIFT; 120 if (tmp != 0) { 121 cpuinfo->l1.ic_linesize = 1 << (tmp + 1); 122 cpuinfo->l1.ic_nways = (((cfg1 & MIPS_CONFIG1_IA_MASK) >> MIPS_CONFIG1_IA_SHIFT)) + 1; 123 cpuinfo->l1.ic_nsets = 124 1 << (((cfg1 & MIPS_CONFIG1_IS_MASK) >> MIPS_CONFIG1_IS_SHIFT) + 6); 125 } 126 | 125 cfg4 = mips_rd_config4(); 126 if ((cfg4 & MIPS_CONFIG4_MMUEXTDEF) == MIPS_CONFIG4_MMUEXTDEF_MMUSIZEEXT) 127 cpuinfo->tlb_nentries += (cfg4 & MIPS_CONFIG4_MMUSIZEEXT) * 0x40; 128#endif 129 130 /* L1 instruction cache. */ 131 tmp = (cfg1 & MIPS_CONFIG1_IL_MASK) >> MIPS_CONFIG1_IL_SHIFT; 132 if (tmp != 0) { 133 cpuinfo->l1.ic_linesize = 1 << (tmp + 1); 134 cpuinfo->l1.ic_nways = (((cfg1 & MIPS_CONFIG1_IA_MASK) >> MIPS_CONFIG1_IA_SHIFT)) + 1; 135 cpuinfo->l1.ic_nsets = 136 1 << (((cfg1 & MIPS_CONFIG1_IS_MASK) >> MIPS_CONFIG1_IS_SHIFT) + 6); 137 } 138 |
127#ifndef CPU_CNMIPS | |
128 /* L1 data cache. */ | 139 /* L1 data cache. */ |
140#ifndef CPU_CNMIPS |
|
129 tmp = (cfg1 & MIPS_CONFIG1_DL_MASK) >> MIPS_CONFIG1_DL_SHIFT; 130 if (tmp != 0) { 131 cpuinfo->l1.dc_linesize = 1 << (tmp + 1); 132 cpuinfo->l1.dc_nways = 133 (((cfg1 & MIPS_CONFIG1_DA_MASK) >> MIPS_CONFIG1_DA_SHIFT)) + 1; 134 cpuinfo->l1.dc_nsets = 135 1 << (((cfg1 & MIPS_CONFIG1_DS_MASK) >> MIPS_CONFIG1_DS_SHIFT) + 6); 136 } --- 280 unchanged lines hidden --- | 141 tmp = (cfg1 & MIPS_CONFIG1_DL_MASK) >> MIPS_CONFIG1_DL_SHIFT; 142 if (tmp != 0) { 143 cpuinfo->l1.dc_linesize = 1 << (tmp + 1); 144 cpuinfo->l1.dc_nways = 145 (((cfg1 & MIPS_CONFIG1_DA_MASK) >> MIPS_CONFIG1_DA_SHIFT)) + 1; 146 cpuinfo->l1.dc_nsets = 147 1 << (((cfg1 & MIPS_CONFIG1_DS_MASK) >> MIPS_CONFIG1_DS_SHIFT) + 6); 148 } --- 280 unchanged lines hidden --- |