1 /* 1 2 * debugfs ops for the L1 cache 3 * 4 * Copyright (C) 2006 Paul Mundt 5 * 6 * This file is subject to the terms and condi 7 * License. See the file "COPYING" in the mai 8 * for more details. 9 */ 10 #include <linux/init.h> 11 #include <linux/module.h> 12 #include <linux/debugfs.h> 13 #include <linux/seq_file.h> 14 #include <asm/processor.h> 15 #include <linux/uaccess.h> 16 #include <asm/cache.h> 17 #include <asm/io.h> 18 19 enum cache_type { 20 CACHE_TYPE_ICACHE, 21 CACHE_TYPE_DCACHE, 22 CACHE_TYPE_UNIFIED, 23 }; 24 25 static int cache_debugfs_show(struct seq_file 26 { 27 unsigned int cache_type = (unsigned in 28 struct cache_info *cache; 29 unsigned int waysize, way; 30 unsigned long ccr; 31 unsigned long addrstart = 0; 32 33 /* 34 * Go uncached immediately so we don't 35 * more than we already are.. 36 */ 37 jump_to_uncached(); 38 39 ccr = __raw_readl(SH_CCR); 40 if ((ccr & CCR_CACHE_ENABLE) == 0) { 41 back_to_cached(); 42 43 seq_printf(file, "disabled\n") 44 return 0; 45 } 46 47 if (cache_type == CACHE_TYPE_DCACHE) { 48 addrstart = CACHE_OC_ADDRESS_A 49 cache = ¤t_cpu_data.dcac 50 } else { 51 addrstart = CACHE_IC_ADDRESS_A 52 cache = ¤t_cpu_data.icac 53 } 54 55 waysize = cache->sets; 56 57 /* 58 * If the OC is already in RAM mode, w 59 * half of the entries to consider.. 60 */ 61 if ((ccr & CCR_CACHE_ORA) && cache_typ 62 waysize >>= 1; 63 64 waysize <<= cache->entry_shift; 65 66 for (way = 0; way < cache->ways; way++ 67 unsigned long addr; 68 unsigned int line; 69 70 seq_printf(file, "------------ 71 seq_printf(file, "Way %d\n", w 72 seq_printf(file, "------------ 73 74 for (addr = addrstart, line = 75 addr < addrstart + waysiz 76 addr += cache->linesz, li 77 unsigned long data = _ 78 79 /* Check the V bit, ig 80 if ((data & 1) == 0) 81 continue; 82 83 /* U: Dirty, cache tag 84 seq_printf(file, "%3d: 85 line, data 86 data & 0x1f 87 } 88 89 addrstart += cache->way_incr; 90 } 91 92 back_to_cached(); 93 94 return 0; 95 } 96 97 DEFINE_SHOW_ATTRIBUTE(cache_debugfs); 98 99 static int __init cache_debugfs_init(void) 100 { 101 debugfs_create_file("dcache", S_IRUSR, 102 (void *)CACHE_TYPE 103 debugfs_create_file("icache", S_IRUSR, 104 (void *)CACHE_TYPE 105 return 0; 106 } 107 module_init(cache_debugfs_init); 108 109 MODULE_LICENSE("GPL v2"); 110
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.