|
@@ -72,7 +72,8 @@ static void dump_tlb(int first, int last)
|
|
|
{
|
|
|
unsigned long s_entryhi, entryhi, asid;
|
|
|
unsigned long long entrylo0, entrylo1, pa;
|
|
|
- unsigned int s_index, s_pagemask, pagemask, c0, c1, i;
|
|
|
+ unsigned int s_index, s_pagemask, s_guestctl1 = 0;
|
|
|
+ unsigned int pagemask, guestctl1 = 0, c0, c1, i;
|
|
|
unsigned long asidmask = cpu_asid_mask(¤t_cpu_data);
|
|
|
int asidwidth = DIV_ROUND_UP(ilog2(asidmask) + 1, 4);
|
|
|
#ifdef CONFIG_32BIT
|
|
@@ -89,6 +90,8 @@ static void dump_tlb(int first, int last)
|
|
|
s_entryhi = read_c0_entryhi();
|
|
|
s_index = read_c0_index();
|
|
|
asid = s_entryhi & asidmask;
|
|
|
+ if (cpu_has_guestid)
|
|
|
+ s_guestctl1 = read_c0_guestctl1();
|
|
|
|
|
|
for (i = first; i <= last; i++) {
|
|
|
write_c0_index(i);
|
|
@@ -99,6 +102,8 @@ static void dump_tlb(int first, int last)
|
|
|
entryhi = read_c0_entryhi();
|
|
|
entrylo0 = read_c0_entrylo0();
|
|
|
entrylo1 = read_c0_entrylo1();
|
|
|
+ if (cpu_has_guestid)
|
|
|
+ guestctl1 = read_c0_guestctl1();
|
|
|
|
|
|
/* EHINV bit marks entire entry as invalid */
|
|
|
if (cpu_has_tlbinv && entryhi & MIPS_ENTRYHI_EHINV)
|
|
@@ -128,15 +133,19 @@ static void dump_tlb(int first, int last)
|
|
|
c0 = (entrylo0 & ENTRYLO_C) >> ENTRYLO_C_SHIFT;
|
|
|
c1 = (entrylo1 & ENTRYLO_C) >> ENTRYLO_C_SHIFT;
|
|
|
|
|
|
- printk("va=%0*lx asid=%0*lx\n",
|
|
|
+ printk("va=%0*lx asid=%0*lx",
|
|
|
vwidth, (entryhi & ~0x1fffUL),
|
|
|
asidwidth, entryhi & asidmask);
|
|
|
+ if (cpu_has_guestid)
|
|
|
+ printk(" gid=%02lx",
|
|
|
+ (guestctl1 & MIPS_GCTL1_RID)
|
|
|
+ >> MIPS_GCTL1_RID_SHIFT);
|
|
|
/* RI/XI are in awkward places, so mask them off separately */
|
|
|
pa = entrylo0 & ~(MIPS_ENTRYLO_RI | MIPS_ENTRYLO_XI);
|
|
|
if (xpa)
|
|
|
pa |= (unsigned long long)readx_c0_entrylo0() << 30;
|
|
|
pa = (pa << 6) & PAGE_MASK;
|
|
|
- printk("\t[");
|
|
|
+ printk("\n\t[");
|
|
|
if (cpu_has_rixi)
|
|
|
printk("ri=%d xi=%d ",
|
|
|
(entrylo0 & MIPS_ENTRYLO_RI) ? 1 : 0,
|
|
@@ -166,6 +175,8 @@ static void dump_tlb(int first, int last)
|
|
|
write_c0_entryhi(s_entryhi);
|
|
|
write_c0_index(s_index);
|
|
|
write_c0_pagemask(s_pagemask);
|
|
|
+ if (cpu_has_guestid)
|
|
|
+ write_c0_guestctl1(s_guestctl1);
|
|
|
}
|
|
|
|
|
|
void dump_tlb_all(void)
|