Blame view
arch/sh/kernel/cpu/proc.c
3.95 KB
a9b27bcc6 sh: Break out cpu... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <linux/seq_file.h> #include <linux/kernel.h> #include <linux/module.h> #include <asm/machvec.h> #include <asm/processor.h> static const char *cpu_name[] = { [CPU_SH7201] = "SH7201", [CPU_SH7203] = "SH7203", [CPU_SH7263] = "SH7263", [CPU_SH7206] = "SH7206", [CPU_SH7619] = "SH7619", [CPU_SH7705] = "SH7705", [CPU_SH7706] = "SH7706", [CPU_SH7707] = "SH7707", [CPU_SH7708] = "SH7708", [CPU_SH7709] = "SH7709", [CPU_SH7710] = "SH7710", [CPU_SH7712] = "SH7712", [CPU_SH7720] = "SH7720", [CPU_SH7721] = "SH7721", [CPU_SH7729] = "SH7729", [CPU_SH7750] = "SH7750", [CPU_SH7750S] = "SH7750S", [CPU_SH7750R] = "SH7750R", [CPU_SH7751] = "SH7751", [CPU_SH7751R] = "SH7751R", [CPU_SH7760] = "SH7760", [CPU_SH4_202] = "SH4-202", [CPU_SH4_501] = "SH4-501", [CPU_SH7763] = "SH7763", [CPU_SH7770] = "SH7770", [CPU_SH7780] = "SH7780", [CPU_SH7781] = "SH7781", [CPU_SH7343] = "SH7343", [CPU_SH7785] = "SH7785", [CPU_SH7786] = "SH7786", [CPU_SH7757] = "SH7757", [CPU_SH7722] = "SH7722", [CPU_SHX3] = "SH-X3", [CPU_SH5_101] = "SH5-101", [CPU_SH5_103] = "SH5-103", [CPU_MXG] = "MX-G", [CPU_SH7723] = "SH7723", [CPU_SH7366] = "SH7366", [CPU_SH7724] = "SH7724", |
fac6c2a89 sh: sh7372 SH4AL-... |
28 |
[CPU_SH7372] = "SH7372", [CPU_SH_NONE] = "Unknown" |
a9b27bcc6 sh: Break out cpu... |
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
}; const char *get_cpu_subtype(struct sh_cpuinfo *c) { return cpu_name[c->type]; } EXPORT_SYMBOL(get_cpu_subtype); #ifdef CONFIG_PROC_FS /* Symbolic CPU flags, keep in sync with asm/cpu-features.h */ static const char *cpu_flags[] = { "none", "fpu", "p2flush", "mmuassoc", "dsp", "perfctr", "ptea", "llsc", "l2", "op32", "pteaex", NULL }; static void show_cpuflags(struct seq_file *m, struct sh_cpuinfo *c) { unsigned long i; seq_printf(m, "cpu flags\t:"); if (!c->flags) { seq_printf(m, " %s ", cpu_flags[0]); return; } for (i = 0; cpu_flags[i]; i++) if ((c->flags & (1 << i))) seq_printf(m, " %s", cpu_flags[i+1]); seq_printf(m, " "); } static void show_cacheinfo(struct seq_file *m, const char *type, struct cache_info info) { unsigned int cache_size; cache_size = info.ways * info.sets * info.linesz; seq_printf(m, "%s size\t: %2dKiB (%d-way) ", type, cache_size >> 10, info.ways); } /* * Get CPU information for use by the procfs. */ static int show_cpuinfo(struct seq_file *m, void *v) { struct sh_cpuinfo *c = v; unsigned int cpu = c - cpu_data; if (!cpu_online(cpu)) return 0; if (cpu == 0) seq_printf(m, "machine\t\t: %s ", get_system_type()); else seq_printf(m, " "); seq_printf(m, "processor\t: %d ", cpu); seq_printf(m, "cpu family\t: %s ", init_utsname()->machine); seq_printf(m, "cpu type\t: %s ", get_cpu_subtype(c)); if (c->cut_major == -1) seq_printf(m, "cut\t\t: unknown "); else if (c->cut_minor == -1) seq_printf(m, "cut\t\t: %d.x ", c->cut_major); else seq_printf(m, "cut\t\t: %d.%d ", c->cut_major, c->cut_minor); show_cpuflags(m, c); seq_printf(m, "cache type\t: "); /* * Check for what type of cache we have, we support both the * unified cache on the SH-2 and SH-3, as well as the harvard * style cache on the SH-4. */ if (c->icache.flags & SH_CACHE_COMBINED) { seq_printf(m, "unified "); show_cacheinfo(m, "cache", c->icache); } else { seq_printf(m, "split (harvard) "); show_cacheinfo(m, "icache", c->icache); show_cacheinfo(m, "dcache", c->dcache); } /* Optional secondary cache */ if (c->flags & CPU_HAS_L2_CACHE) show_cacheinfo(m, "scache", c->scache); seq_printf(m, "address sizes\t: %u bits physical ", c->phys_bits); seq_printf(m, "bogomips\t: %lu.%02lu ", c->loops_per_jiffy/(500000/HZ), (c->loops_per_jiffy/(5000/HZ)) % 100); return 0; } static void *c_start(struct seq_file *m, loff_t *pos) { return *pos < NR_CPUS ? cpu_data + *pos : NULL; } static void *c_next(struct seq_file *m, void *v, loff_t *pos) { ++*pos; return c_start(m, pos); } static void c_stop(struct seq_file *m, void *v) { } const struct seq_operations cpuinfo_op = { .start = c_start, .next = c_next, .stop = c_stop, .show = show_cpuinfo, }; #endif /* CONFIG_PROC_FS */ |