mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
MIPS: Retrieve ASID masks using function accepting struct cpuinfo_mips
In preparation for supporting variable ASID masks, retrieve ASID masks using functions in asm/cpu-info.h which accept struct cpuinfo_mips. This will allow those functions to determine the ASID mask based upon the CPU in a later patch. This also allows for the r3k & r8k cases to be handled in Kconfig, which is arguably cleaner than the previous #ifdefs. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Radim Krčmář <rkrcmar@redhat.com> Cc: linux-mips@linux-mips.org Cc: kvm@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/13210/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
f1b711c638
commit
4edf00a46b
10 changed files with 92 additions and 61 deletions
|
@ -73,6 +73,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 long asidmask = cpu_asid_mask(¤t_cpu_data);
|
||||
int asidwidth = DIV_ROUND_UP(ilog2(asidmask) + 1, 4);
|
||||
#ifdef CONFIG_32BIT
|
||||
bool xpa = cpu_has_xpa && (read_c0_pagegrain() & PG_ELPA);
|
||||
int pwidth = xpa ? 11 : 8;
|
||||
|
@ -86,7 +88,7 @@ static void dump_tlb(int first, int last)
|
|||
s_pagemask = read_c0_pagemask();
|
||||
s_entryhi = read_c0_entryhi();
|
||||
s_index = read_c0_index();
|
||||
asid = s_entryhi & 0xff;
|
||||
asid = s_entryhi & asidmask;
|
||||
|
||||
for (i = first; i <= last; i++) {
|
||||
write_c0_index(i);
|
||||
|
@ -115,7 +117,7 @@ static void dump_tlb(int first, int last)
|
|||
* due to duplicate TLB entry.
|
||||
*/
|
||||
if (!((entrylo0 | entrylo1) & ENTRYLO_G) &&
|
||||
(entryhi & 0xff) != asid)
|
||||
(entryhi & asidmask) != asid)
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
@ -126,9 +128,9 @@ 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=%02lx\n",
|
||||
printk("va=%0*lx asid=%0*lx\n",
|
||||
vwidth, (entryhi & ~0x1fffUL),
|
||||
entryhi & 0xff);
|
||||
asidwidth, entryhi & asidmask);
|
||||
/* RI/XI are in awkward places, so mask them off separately */
|
||||
pa = entrylo0 & ~(MIPS_ENTRYLO_RI | MIPS_ENTRYLO_XI);
|
||||
if (xpa)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue