diff options
author | will schmidt <will_schmidt@vnet.ibm.com> | 2007-12-06 16:22:23 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-12-10 21:46:05 -0500 |
commit | b3b9595f50f73f0d53ebd71c463c5f09a6e64a21 (patch) | |
tree | 27a5b47959527c8940e733675f89425682f394f2 | |
parent | 584f8b71a2e8abdaeb4b6f4fddaf542b61392453 (diff) |
[POWERPC] Update xmon slb code
This adds a bit more detail to the xmon SLB output. When the valid
bit is set, this displays the ESID and VSID values, as well as
decoding the segment size -- 1T or 256M -- and displaying the LLP
bits. This supresses the output for any slb entries that contain only
zeros.
sample output from power6 (1T segment support):
00 c000000008000000 40004f7ca3000500 1T ESID= c00000 VSID= 4f7ca3 LLP:100
01 d000000008000000 4000eb71b0000400 1T ESID= d00000 VSID= eb71b0 LLP: 0
08 0000000018000000 0000c8499f8ccc80 256M ESID= 1 VSID= c8499f8cc LLP: 0
09 00000000f8000000 0000d2c1a8e46c80 256M ESID= f VSID= d2c1a8e46 LLP: 0
10 0000000048000000 0000ca87eab1dc80 256M ESID= 4 VSID= ca87eab1d LLP: 0
43 cf00000008000000 400011b260000500 1T ESID= cf0000 VSID= 11b260 LLP:100
sample output from power5 (notice the non-valid but non-zero entries)
10 0000000008000000 00004fd0e077ac80 256M ESID= 0 VSID= 4fd0e077a LLP: 0
11 00000000f8000000 00005b085830fc80 256M ESID= f VSID= 5b085830f LLP: 0
12 0000000048000000 000052ce99fe6c80 256M ESID= 4 VSID= 52ce99fe6 LLP: 0
13 0000000018000000 000050904ed95c80 256M ESID= 1 VSID= 50904ed95 LLP: 0
14 cf00000008000000 0000d59aca40f500 256M ESID=cf0000000 VSID= d59aca40f LLP:100
15 c000000078000000 000045cb97751500 256M ESID=c00000007 VSID= 45cb97751 LLP:100
Tested on power5 and power6.
Signed-Off-By: Will Schmidt <will_schmidt@vnet.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/xmon/xmon.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index c60d123e9f1..865e36751f2 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
@@ -2539,16 +2539,33 @@ static void xmon_print_symbol(unsigned long address, const char *mid, | |||
2539 | static void dump_slb(void) | 2539 | static void dump_slb(void) |
2540 | { | 2540 | { |
2541 | int i; | 2541 | int i; |
2542 | unsigned long tmp; | 2542 | unsigned long esid,vsid,valid; |
2543 | unsigned long llp; | ||
2543 | 2544 | ||
2544 | printf("SLB contents of cpu %x\n", smp_processor_id()); | 2545 | printf("SLB contents of cpu %x\n", smp_processor_id()); |
2545 | 2546 | ||
2546 | for (i = 0; i < mmu_slb_size; i++) { | 2547 | for (i = 0; i < mmu_slb_size; i++) { |
2547 | asm volatile("slbmfee %0,%1" : "=r" (tmp) : "r" (i)); | 2548 | asm volatile("slbmfee %0,%1" : "=r" (esid) : "r" (i)); |
2548 | printf("%02d %016lx ", i, tmp); | 2549 | asm volatile("slbmfev %0,%1" : "=r" (vsid) : "r" (i)); |
2549 | 2550 | valid = (esid & SLB_ESID_V); | |
2550 | asm volatile("slbmfev %0,%1" : "=r" (tmp) : "r" (i)); | 2551 | if (valid | esid | vsid) { |
2551 | printf("%016lx\n", tmp); | 2552 | printf("%02d %016lx %016lx", i, esid, vsid); |
2553 | if (valid) { | ||
2554 | llp = vsid & SLB_VSID_LLP; | ||
2555 | if (vsid & SLB_VSID_B_1T) { | ||
2556 | printf(" 1T ESID=%9lx VSID=%13lx LLP:%3lx \n", | ||
2557 | GET_ESID_1T(esid), | ||
2558 | (vsid & ~SLB_VSID_B) >> SLB_VSID_SHIFT_1T, | ||
2559 | llp); | ||
2560 | } else { | ||
2561 | printf(" 256M ESID=%9lx VSID=%13lx LLP:%3lx \n", | ||
2562 | GET_ESID(esid), | ||
2563 | (vsid & ~SLB_VSID_B) >> SLB_VSID_SHIFT, | ||
2564 | llp); | ||
2565 | } | ||
2566 | } else | ||
2567 | printf("\n"); | ||
2568 | } | ||
2552 | } | 2569 | } |
2553 | } | 2570 | } |
2554 | 2571 | ||