Blame view
arch/mips/lib/dump_tlb.c
2.58 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 |
/* * Dump R4x00 TLB for debugging purposes. * * Copyright (C) 1994, 1995 by Waldorf Electronics, written by Ralf Baechle. * Copyright (C) 1999 by Silicon Graphics, Inc. */ |
1da177e4c Linux-2.6.12-rc2 |
7 8 |
#include <linux/kernel.h> #include <linux/mm.h> |
1da177e4c Linux-2.6.12-rc2 |
9 |
|
1da177e4c Linux-2.6.12-rc2 |
10 11 12 |
#include <asm/mipsregs.h> #include <asm/page.h> #include <asm/pgtable.h> |
40df3831f [MIPS] Cleanup tl... |
13 |
#include <asm/tlbdebug.h> |
1da177e4c Linux-2.6.12-rc2 |
14 15 16 17 18 19 20 21 |
static inline const char *msk2str(unsigned int mask) { switch (mask) { case PM_4K: return "4kb"; case PM_16K: return "16kb"; case PM_64K: return "64kb"; case PM_256K: return "256kb"; |
c52399bec MIPS: Cavium: Add... |
22 23 24 25 26 27 28 29 30 |
#ifdef CONFIG_CPU_CAVIUM_OCTEON case PM_8K: return "8kb"; case PM_32K: return "32kb"; case PM_128K: return "128kb"; case PM_512K: return "512kb"; case PM_2M: return "2Mb"; case PM_8M: return "8Mb"; case PM_32M: return "32Mb"; #endif |
1da177e4c Linux-2.6.12-rc2 |
31 32 33 34 35 36 |
#ifndef CONFIG_CPU_VR41XX case PM_1M: return "1Mb"; case PM_4M: return "4Mb"; case PM_16M: return "16Mb"; case PM_64M: return "64Mb"; case PM_256M: return "256Mb"; |
542c1020a MIPS: Add CONFIG_... |
37 |
case PM_1G: return "1Gb"; |
1da177e4c Linux-2.6.12-rc2 |
38 39 |
#endif } |
4becef1d8 [MIPS] Unify dump... |
40 |
return ""; |
1da177e4c Linux-2.6.12-rc2 |
41 42 43 44 45 46 47 48 49 |
} #define BARRIER() \ __asm__ __volatile__( \ ".set\tnoreorder \t" \ "nop;nop;nop;nop;nop;nop;nop \t" \ ".set\treorder"); |
69ed25b89 [MIPS] Remove unu... |
50 |
static void dump_tlb(int first, int last) |
1da177e4c Linux-2.6.12-rc2 |
51 |
{ |
4becef1d8 [MIPS] Unify dump... |
52 53 |
unsigned long s_entryhi, entryhi, asid; unsigned long long entrylo0, entrylo1; |
1da177e4c Linux-2.6.12-rc2 |
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
unsigned int s_index, pagemask, c0, c1, i; s_entryhi = read_c0_entryhi(); s_index = read_c0_index(); asid = s_entryhi & 0xff; for (i = first; i <= last; i++) { write_c0_index(i); BARRIER(); tlb_read(); BARRIER(); pagemask = read_c0_pagemask(); entryhi = read_c0_entryhi(); entrylo0 = read_c0_entrylo0(); entrylo1 = read_c0_entrylo1(); /* Unused entries have a virtual address of CKSEG0. */ if ((entryhi & ~0x1ffffUL) != CKSEG0 && (entryhi & 0xff) == asid) { |
4becef1d8 [MIPS] Unify dump... |
73 74 75 76 77 |
#ifdef CONFIG_32BIT int width = 8; #else int width = 11; #endif |
1da177e4c Linux-2.6.12-rc2 |
78 79 80 81 82 83 84 |
/* * Only print entries in use */ printk("Index: %2d pgmask=%s ", i, msk2str(pagemask)); c0 = (entrylo0 >> 3) & 7; c1 = (entrylo1 >> 3) & 7; |
4becef1d8 [MIPS] Unify dump... |
85 86 87 |
printk("va=%0*lx asid=%02lx ", width, (entryhi & ~0x1fffUL), |
1da177e4c Linux-2.6.12-rc2 |
88 |
entryhi & 0xff); |
4becef1d8 [MIPS] Unify dump... |
89 90 |
printk("\t[pa=%0*llx c=%d d=%d v=%d g=%d] ", width, |
1da177e4c Linux-2.6.12-rc2 |
91 92 93 |
(entrylo0 << 6) & PAGE_MASK, c0, (entrylo0 & 4) ? 1 : 0, (entrylo0 & 2) ? 1 : 0, |
4becef1d8 [MIPS] Unify dump... |
94 95 96 97 |
(entrylo0 & 1) ? 1 : 0); printk("[pa=%0*llx c=%d d=%d v=%d g=%d] ", width, |
1da177e4c Linux-2.6.12-rc2 |
98 99 100 |
(entrylo1 << 6) & PAGE_MASK, c1, (entrylo1 & 4) ? 1 : 0, (entrylo1 & 2) ? 1 : 0, |
4becef1d8 [MIPS] Unify dump... |
101 |
(entrylo1 & 1) ? 1 : 0); |
1da177e4c Linux-2.6.12-rc2 |
102 103 104 105 106 107 108 109 110 111 112 113 114 |
} } printk(" "); write_c0_entryhi(s_entryhi); write_c0_index(s_index); } void dump_tlb_all(void) { dump_tlb(0, current_cpu_data.tlbsize - 1); } |