diff options
Diffstat (limited to 'arch/powerpc/xmon/xmon.c')
-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 c60d123e9f1f..865e36751f21 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 | ||