Module Name: src Committed By: matt Date: Thu Feb 25 05:45:12 UTC 2010
Modified Files: src/sys/arch/mips/include [matt-nb5-mips64]: locore.h src/sys/arch/mips/mips [matt-nb5-mips64]: locore.S locore_mips3.S mipsX_subr.S mips_machdep.c Log Message: Add mipsXX_tlb_record_asids - records what ASIDs have valid TLB entries in the TLB. Move some mips3 specific routines from locore.S to locore_mips3.S To generate a diff of this commit: cvs rdiff -u -r1.78.36.1.2.14 -r1.78.36.1.2.15 \ src/sys/arch/mips/include/locore.h cvs rdiff -u -r1.167.38.15 -r1.167.38.16 src/sys/arch/mips/mips/locore.S cvs rdiff -u -r1.93.38.6 -r1.93.38.7 src/sys/arch/mips/mips/locore_mips3.S cvs rdiff -u -r1.26.36.1.2.25 -r1.26.36.1.2.26 \ src/sys/arch/mips/mips/mipsX_subr.S cvs rdiff -u -r1.205.4.1.2.1.2.35 -r1.205.4.1.2.1.2.36 \ src/sys/arch/mips/mips/mips_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/include/locore.h diff -u src/sys/arch/mips/include/locore.h:1.78.36.1.2.14 src/sys/arch/mips/include/locore.h:1.78.36.1.2.15 --- src/sys/arch/mips/include/locore.h:1.78.36.1.2.14 Tue Feb 23 20:33:47 2010 +++ src/sys/arch/mips/include/locore.h Thu Feb 25 05:45:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.h,v 1.78.36.1.2.14 2010/02/23 20:33:47 matt Exp $ */ +/* $NetBSD: locore.h,v 1.78.36.1.2.15 2010/02/25 05:45:12 matt Exp $ */ /* * This file should not be included by MI code!!! @@ -51,6 +51,7 @@ void mips1_tlb_invalidate_globals(void); void mips1_tlb_invalidate_asids(uint32_t, uint32_t); void mips1_tlb_invalidate_addr(vaddr_t); +u_int mips1_tlb_record_asids(u_long *, uint32_t); int mips1_tlb_update(vaddr_t, uint32_t); void mips1_tlb_read_indexed(size_t, struct tlbmask *); void mips1_wbflush(void); @@ -67,6 +68,7 @@ void mips3_tlb_invalidate_globals(void); void mips3_tlb_invalidate_asids(uint32_t, uint32_t); void mips3_tlb_invalidate_addr(vaddr_t); +u_int mips3_tlb_record_asids(u_long *, uint32_t); int mips3_tlb_update(vaddr_t, uint32_t); void mips3_tlb_read_indexed(size_t, struct tlbmask *); void mips3_tlb_write_indexed_VPS(size_t, struct tlbmask *); @@ -82,6 +84,7 @@ void mips5900_tlb_invalidate_globals(void); void mips5900_tlb_invalidate_asids(uint32_t, uint32_t); void mips5900_tlb_invalidate_addr(vaddr_t); +u_int mips5900_tlb_record_asids(u_long *, uint32_t); int mips5900_tlb_update(vaddr_t, uint32_t); void mips5900_tlb_read_indexed(size_t, struct tlbmask *); void mips5900_tlb_write_indexed_VPS(size_t, struct tlbmask *); @@ -99,6 +102,7 @@ void mips32_tlb_invalidate_globals(void); void mips32_tlb_invalidate_asids(uint32_t, uint32_t); void mips32_tlb_invalidate_addr(vaddr_t); +u_int mips32_tlb_record_asids(u_long *, uint32_t); int mips32_tlb_update(vaddr_t, uint32_t); void mips32_tlb_read_indexed(size_t, struct tlbmask *); void mips32_tlb_write_indexed_VPS(size_t, struct tlbmask *); @@ -114,6 +118,7 @@ void mips64_tlb_invalidate_globals(void); void mips64_tlb_invalidate_asids(uint32_t, uint32_t); void mips64_tlb_invalidate_addr(vaddr_t); +u_int mips64_tlb_record_asids(u_long *, uint32_t); int mips64_tlb_update(vaddr_t, uint32_t); void mips64_tlb_read_indexed(size_t, struct tlbmask *); void mips64_tlb_write_indexed_VPS(size_t, struct tlbmask *); @@ -295,6 +300,7 @@ void (*ljv_tlb_invalidate_addr)(vaddr_t); void (*ljv_tlb_invalidate_globals)(void); void (*ljv_tlb_invalidate_all)(void); + u_int (*ljv_tlb_record_asids)(u_long *, uint32_t); int (*ljv_tlb_update)(vaddr_t, uint32_t); void (*ljv_tlb_read_indexed)(size_t, struct tlbmask *); void (*ljv_wbflush)(void); @@ -334,6 +340,7 @@ #define tlb_invalidate_addr mips1_tlb_invalidate_addr #define tlb_invalidate_globals mips1_tlb_invalidate_globals #define tlb_invalidate_all mips1_tlb_invalidate_all +#define tlb_record_asids mips1_tlb_record_asids #define tlb_update mips1_tlb_update #define tlb_read_indexed mips1_tlb_read_indexed #define wbflush mips1_wbflush @@ -345,6 +352,7 @@ #define tlb_invalidate_addr mips3_tlb_invalidate_addr #define tlb_invalidate_globals mips3_tlb_invalidate_globals #define tlb_invalidate_all mips3_tlb_invalidate_all +#define tlb_record_asids mips3_tlb_record_asids #define tlb_update mips3_tlb_update #define tlb_read_indexed mips3_tlb_read_indexed #define tlb_write_indexed_VPS mips3_tlb_write_indexed_VPS @@ -357,6 +365,7 @@ #define tlb_invalidate_addr mips32_tlb_invalidate_addr #define tlb_invalidate_globals mips32_tlb_invalidate_globals #define tlb_invalidate_all mips32_tlb_invalidate_all +#define tlb_record_asids mips32_tlb_record_asids #define tlb_update mips32_tlb_update #define tlb_read_indexed mips32_tlb_read_indexed #define tlb_write_indexed_VPS mips32_tlb_write_indexed_VPS @@ -370,6 +379,7 @@ #define tlb_invalidate_addr mips64_tlb_invalidate_addr #define tlb_invalidate_globals mips64_tlb_invalidate_globals #define tlb_invalidate_all mips64_tlb_invalidate_all +#define tlb_record_asids mips64_tlb_record_asids #define tlb_update mips64_tlb_update #define tlb_read_indexed mips64_tlb_read_indexed #define tlb_write_indexed_VPS mips64_tlb_write_indexed_VPS @@ -382,6 +392,7 @@ #define tlb_invalidate_addr mips5900_tlb_invalidate_addr #define tlb_invalidate_globals mips5900_tlb_invalidate_globals #define tlb_invalidate_all mips5900_tlb_invalidate_all +#define tlb_record_asids mips5900_tlb_record_asids #define tlb_update mips5900_tlb_update #define tlb_read_indexed mips5900_tlb_read_indexed #define tlb_write_indexed_VPS mips5900_tlb_write_indexed_VPS @@ -394,6 +405,7 @@ #define tlb_invalidate_addr (*mips_locore_jumpvec.ljv_tlb_invalidate_addr) #define tlb_invalidate_globals (*mips_locore_jumpvec.ljv_tlb_invalidate_globals) #define tlb_invalidate_all (*mips_locore_jumpvec.ljv_tlb_invalidate_all) +#define tlb_record_asids (*mips_locore_jumpvec.ljv_tlb_record_asids) #define tlb_update (*mips_locore_jumpvec.ljv_tlb_update) #define tlb_read_indexed (*mips_locore_jumpvec.ljv_tlb_read_indexed) #define wbflush (*mips_locore_jumpvec.ljv_wbflush) Index: src/sys/arch/mips/mips/locore.S diff -u src/sys/arch/mips/mips/locore.S:1.167.38.15 src/sys/arch/mips/mips/locore.S:1.167.38.16 --- src/sys/arch/mips/mips/locore.S:1.167.38.15 Tue Feb 23 20:33:48 2010 +++ src/sys/arch/mips/mips/locore.S Thu Feb 25 05:45:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.167.38.15 2010/02/23 20:33:48 matt Exp $ */ +/* $NetBSD: locore.S,v 1.167.38.16 2010/02/25 05:45:12 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -551,99 +551,6 @@ nop END(mips_cp0_status_write) -#ifdef MIPS3_PLUS - .set push - .set mips3 -/* - * uint64_t mips_cp0_tlb_entry_hi_probe(void); - * - * Write 1s to the VPN field of Entry_Hi0 to see how many VA bits - * are implemented. Assumes that interrupts are disabled. - */ -LEAF(mips_cp0_tlb_entry_hi_probe) - dmfc0 t0, MIPS_COP_0_TLB_HI - li v0, -4096 /* all 1s except low 12 bits */ - dsll v0, v0, 2 /* except the top 2 */ - dsrl v0, v0, 2 - dmtc0 v0, MIPS_COP_0_TLB_HI - COP0_SYNC - nop - nop - dmfc0 v0, MIPS_COP_0_TLB_HI - dmtc0 t0, MIPS_COP_0_TLB_HI - COP0_SYNC - nop -#ifdef __mips_o32 - nop -#if BYTE_ORDER == BIG_ENDIAN - srl v1, v0, 0 - dsra v0, v0, 32 -#endif -#if BYTE_ORDER == LITTLE_ENDIAN - dsra v1, v0, 32 - srl v0, v0, 0 -#endif -#endif /* __mips_o32 */ - j ra - nop -END(mips_cp0_tlb_entry_hi_probe) - -/* - * uint64_t mips_cp0_tlb_entry_lo_probe(void); - * - * Write 1s to the PFN field of Entry_Lo0 to see how many - * PA bits are implemented. Assumes that interrupts are disabled. - */ -LEAF(mips_cp0_tlb_entry_lo_probe) - dmfc0 t0, MIPS_COP_0_TLB_LO0 - li v0, -64 /* all 1s except low 6 bits */ - dmtc0 v0, MIPS_COP_0_TLB_LO0 - COP0_SYNC - nop - nop - dmfc0 v0, MIPS_COP_0_TLB_LO0 - dmtc0 t0, MIPS_COP_0_TLB_LO0 - COP0_SYNC - nop -#ifdef __mips_o32 - nop -#if BYTE_ORDER == BIG_ENDIAN - srl v1, v0, 0 - dsra v0, v0, 32 -#endif -#if BYTE_ORDER == LITTLE_ENDIAN - dsra v1, v0, 32 - srl v0, v0, 0 -#endif -#endif /* __mips_o32 */ - j ra - nop -END(mips_cp0_tlb_entry_lo_probe) - .set pop - -/* - * uint32_t mips_cp0_tlb_page_mask_probe(void); - * - * Write 1s to the RPN field of Entry_Lo0 to see how many PA bits are implemented. - * Assumes that interrupts are disabled. - */ -LEAF(mips_cp0_tlb_page_mask_probe) - mfc0 t0, MIPS_COP_0_TLB_PG_MASK - lui v0, 0xffff - srl v0, v0, 3 - mtc0 v0, MIPS_COP_0_TLB_PG_MASK - COP0_SYNC - nop - nop - mfc0 v0, MIPS_COP_0_TLB_PG_MASK - mtc0 t0, MIPS_COP_0_TLB_PG_MASK - COP0_SYNC - nop - j ra - nop -END(mips_cp0_tlb_page_mask_probe) -#endif /* MIPS3_PLUS */ - #if !defined(NOFPU) || defined(FPEMUL) /*---------------------------------------------------------------------------- * Index: src/sys/arch/mips/mips/locore_mips3.S diff -u src/sys/arch/mips/mips/locore_mips3.S:1.93.38.6 src/sys/arch/mips/mips/locore_mips3.S:1.93.38.7 --- src/sys/arch/mips/mips/locore_mips3.S:1.93.38.6 Mon Feb 22 20:13:22 2010 +++ src/sys/arch/mips/mips/locore_mips3.S Thu Feb 25 05:45:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_mips3.S,v 1.93.38.6 2010/02/22 20:13:22 matt Exp $ */ +/* $NetBSD: locore_mips3.S,v 1.93.38.7 2010/02/25 05:45:12 matt Exp $ */ /* * Copyright (c) 1997 Jonathan Stone (hereinafter referred to as the author) @@ -484,3 +484,91 @@ li v0, -1 END(baderr64) #endif + +/* + * uint64_t mips3_cp0_tlb_entry_hi_probe(void); + * + * Write 1s to the VPN and ASID fields of Entry_Hi0 to see how many VA bits + * and ASID bits are implemented. Assumes that interrupts are disabled. + */ +LEAF(mips3_cp0_tlb_entry_hi_probe) + dmfc0 t0, MIPS_COP_0_TLB_HI + li v0, -1 /* all 1s */ + dsll v0, v0, 2 /* except the top 2 */ + dsrl v0, v0, 2 + dmtc0 v0, MIPS_COP_0_TLB_HI + COP0_SYNC + nop + nop + dmfc0 v0, MIPS_COP_0_TLB_HI + dmtc0 t0, MIPS_COP_0_TLB_HI + COP0_SYNC + nop +#ifdef __mips_o32 + nop +#if BYTE_ORDER == BIG_ENDIAN + srl v1, v0, 0 + dsra v0, v0, 32 +#endif +#if BYTE_ORDER == LITTLE_ENDIAN + dsra v1, v0, 32 + srl v0, v0, 0 +#endif +#endif /* __mips_o32 */ + j ra + nop +END(mips3_cp0_tlb_entry_hi_probe) + +/* + * uint64_t mips3_cp0_tlb_entry_lo_probe(void); + * + * Write 1s to the PFN field of Entry_Lo0 to see how many + * PA bits are implemented. Assumes that interrupts are disabled. + */ +LEAF(mips3_cp0_tlb_entry_lo_probe) + dmfc0 t0, MIPS_COP_0_TLB_LO0 + li v0, -64 /* all 1s except low 6 bits */ + dmtc0 v0, MIPS_COP_0_TLB_LO0 + COP0_SYNC + nop + nop + dmfc0 v0, MIPS_COP_0_TLB_LO0 + dmtc0 t0, MIPS_COP_0_TLB_LO0 + COP0_SYNC + nop +#ifdef __mips_o32 + nop +#if BYTE_ORDER == BIG_ENDIAN + srl v1, v0, 0 + dsra v0, v0, 32 +#endif +#if BYTE_ORDER == LITTLE_ENDIAN + dsra v1, v0, 32 + srl v0, v0, 0 +#endif +#endif /* __mips_o32 */ + j ra + nop +END(mips3_cp0_tlb_entry_lo_probe) + +/* + * uint32_t mips3_cp0_tlb_page_mask_probe(void); + * + * Write 1s to the RPN field of Entry_Lo0 to see how many PA bits are implemented. + * Assumes that interrupts are disabled. + */ +LEAF(mips3_cp0_tlb_page_mask_probe) + mfc0 t0, MIPS_COP_0_TLB_PG_MASK + lui v0, 0xffff + srl v0, v0, 3 + mtc0 v0, MIPS_COP_0_TLB_PG_MASK + COP0_SYNC + nop + nop + mfc0 v0, MIPS_COP_0_TLB_PG_MASK + mtc0 t0, MIPS_COP_0_TLB_PG_MASK + COP0_SYNC + nop + j ra + nop +END(mips3_cp0_tlb_page_mask_probe) Index: src/sys/arch/mips/mips/mipsX_subr.S diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.25 src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.26 --- src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.25 Tue Feb 23 20:33:48 2010 +++ src/sys/arch/mips/mips/mipsX_subr.S Thu Feb 25 05:45:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mipsX_subr.S,v 1.26.36.1.2.25 2010/02/23 20:33:48 matt Exp $ */ +/* $NetBSD: mipsX_subr.S,v 1.26.36.1.2.26 2010/02/25 05:45:12 matt Exp $ */ /* * Copyright 2002 Wasabi Systems, Inc. @@ -181,6 +181,12 @@ #define USE_64BIT_CP0_FUNCTIONS #endif +#ifdef _LP64 +#define _SLLV dsllv +#else +#define _SLLV sllv +#endif + #if defined(USE_64BIT_CP0_FUNCTIONS) #define _SLL dsll #define _SRL dsrl @@ -2304,6 +2310,7 @@ mtc0 zero, MIPS_COP_0_STATUS # disable interrupts COP0_SYNC + _MFC0 t0, MIPS_COP_0_TLB_HI # Save the current PID. mfc0 t1, MIPS_COP_0_TLB_WIRED li v0, MIPS_KSEG0_START # invalid address INT_L t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES @@ -2355,6 +2362,8 @@ bne t1, t2, 1b nop + _MFC0 t0, MIPS_COP_0_TLB_HI # restore PID. + COP0_SYNC mtc0 t3, MIPS_COP_0_TLB_PG_MASK # restore pgMask COP0_SYNC /* XXX simonb: lose these nops for mips32/64? */ @@ -2366,6 +2375,89 @@ END(MIPSX(tlb_invalidate_asids)) /* + * u_int mipsN_tlb_record_asids(u_long *bitmap, uint32_t asid_mask); + * + * Record all the ASIDs in use in the TLB and return the number of different + * ASIDs present. + */ +LEAF_NOPROFILE(MIPSX(tlb_record_asids)) + + _MFC0 a3, MIPS_COP_0_TLB_HI # Save the current PID. + mfc0 ta0, MIPS_COP_0_TLB_WIRED + INT_L ta1, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES + move ta2, zero + li ta3, 1 + move v0, zero + + mfc0 v1, MIPS_COP_0_STATUS # save status register +#ifdef _LP64 + and t0, v1, MIPS_SR_INT_IE + xor t0, v1 + mtc0 t0, MIPS_COP_0_STATUS # disable interrupts +#else + mtc0 zero, MIPS_COP_0_STATUS # disable interrupts +#endif + COP0_SYNC + + # do {} while (ta0 < ta1) +1: + mtc0 ta0, MIPS_COP_0_TLB_INDEX # set index + COP0_SYNC + nop + nop + /* XXX simonb: lose this nop for mips32/64? */ + nop + tlbr # obtain an entry + COP0_SYNC + /* XXX simonb: lose these nops for mips32/64? */ + nop + nop + nop + _MFC0 t0, MIPS_COP_0_TLB_LO1 + and t0, MIPS3_PG_G # check to see it has G bit + bnez t0, 4f # yep, skip this one. + nop + _MFC0 t0, MIPS_COP_0_TLB_HI # get VA and ASID + and t0, a1 # focus on ASID + + srl a2, t0, 3 + LONG_SCALESHIFT # drop low 5 or 6 bits + sll a2, LONG_SCALESHIFT # make an index for the bitmap + _SLLV t0, ta3, t0 # t0 is mask (ta3 == 1) + + PTR_ADDU a2, a0 # index into the bitmap + beq a2, ta2, 3f # is the desired cell loaded? + nop # yes, don't reload it + beqz ta2, 2f # have we ever loaded it? + nop # nope, so don't save it. + + LONG_S t2, 0(ta2) # save the updated value. +2: + move ta2, a2 # remember the new cell's addr + LONG_L t2, 0(ta2) # and load it +3: + and t1, t2, t0 # t1 = t2 & t0 + sltu t1, t1, ta3 # t1 = t1 < 1 (aka t1 == 0) + addu v0, t1 # v0 += t1 + or t2, t0 # or in the new ASID bits +4: + addu ta0, 1 # increment TLB entry # + bne ta0, ta1, 1b # keep lookup if not limit + nop + + beqz ta2, 5f # do we have a cell to write? + nop # nope. nothing + + LONG_S t2, 0(ta2) # save the updated value. +5: + _MTC0 a3, MIPS_COP_0_TLB_HI # restore ASID + COP0_SYNC + + mtc0 v1, MIPS_COP_0_STATUS # restore status register + j ra + COP0_SYNC # XXXX - not executed!! +END(MIPSX(tlb_record_asids)) + +/* * void mipsN_tlb_invalidate_globals(void); * * Invalidate the non-wired TLB entries belonging to kernel space while Index: src/sys/arch/mips/mips/mips_machdep.c diff -u src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.35 src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.36 --- src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.35 Tue Feb 23 20:33:48 2010 +++ src/sys/arch/mips/mips/mips_machdep.c Thu Feb 25 05:45:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.35 2010/02/23 20:33:48 matt Exp $ */ +/* $NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.36 2010/02/25 05:45:12 matt Exp $ */ /* * Copyright 2002 Wasabi Systems, Inc. @@ -112,7 +112,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.35 2010/02/23 20:33:48 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.36 2010/02/25 05:45:12 matt Exp $"); #include "opt_cputype.h" #include "opt_compat_netbsd32.h" @@ -173,9 +173,9 @@ int cpu_dump(void); #if defined(MIPS3_PLUS) -uint32_t mips_cp0_tlb_page_mask_probe(void); -uint64_t mips_cp0_tlb_entry_hi_probe(void); -uint64_t mips_cp0_tlb_entry_lo_probe(void); +uint32_t mips3_cp0_tlb_page_mask_probe(void); +uint64_t mips3_cp0_tlb_entry_hi_probe(void); +uint64_t mips3_cp0_tlb_entry_lo_probe(void); static void mips3_tlb_probe(void); #endif @@ -530,6 +530,7 @@ .ljv_tlb_invalidate_all = mips1_tlb_invalidate_all, .ljv_tlb_invalidate_asids = mips1_tlb_invalidate_asids, .ljv_tlb_invalidate_globals = mips1_tlb_invalidate_globals, + .ljv_tlb_record_asids = mips1_tlb_record_asids, .ljv_tlb_update = mips1_tlb_update, .ljv_tlb_read_indexed = mips1_tlb_read_indexed, .ljv_wbflush = mips1_wbflush, @@ -578,6 +579,7 @@ .ljv_tlb_invalidate_all = mips3_tlb_invalidate_all, .ljv_tlb_invalidate_asids = mips3_tlb_invalidate_asids, .ljv_tlb_invalidate_globals = mips3_tlb_invalidate_globals, + .ljv_tlb_record_asids = mips3_tlb_record_asids, .ljv_tlb_update = mips3_tlb_update, .ljv_tlb_read_indexed = mips3_tlb_read_indexed, .ljv_wbflush = mips3_wbflush, @@ -640,6 +642,7 @@ .ljv_tlb_invalidate_all = mips5900_tlb_invalidate_all, .ljv_tlb_invalidate_asids = mips5900_tlb_invalidate_asids, .ljv_tlb_invalidate_globals = mips5900_tlb_invalidate_globals, + .ljv_tlb_record_asids = mips5900_tlb_record_asids, .ljv_tlb_update = mips5900_tlb_update, .ljv_tlb_read_indexed = mips5900_tlb_read_indexed, .ljv_wbflush = mips5900_wbflush, @@ -690,6 +693,7 @@ .ljv_tlb_invalidate_all = mips32_tlb_invalidate_all, .ljv_tlb_invalidate_asids = mips32_tlb_invalidate_asids, .ljv_tlb_invalidate_globals = mips32_tlb_invalidate_globals, + .ljv_tlb_record_asids = mips32_tlb_record_asids, .ljv_tlb_update = mips32_tlb_update, .ljv_tlb_read_indexed = mips32_tlb_read_indexed, .ljv_wbflush = mips32_wbflush, @@ -753,6 +757,7 @@ .ljv_tlb_invalidate_all = mips64_tlb_invalidate_all, .ljv_tlb_invalidate_asids = mips64_tlb_invalidate_asids, .ljv_tlb_invalidate_globals = mips64_tlb_invalidate_globals, + .ljv_tlb_record_asids = mips64_tlb_record_asids, .ljv_tlb_update = mips64_tlb_update, .ljv_tlb_read_indexed = mips64_tlb_read_indexed, .ljv_wbflush = mips64_wbflush, @@ -1045,12 +1050,12 @@ mips3_tlb_probe(void) { struct mips_options * const opts = &mips_options; - opts->mips3_tlb_pg_mask = mips_cp0_tlb_page_mask_probe(); + opts->mips3_tlb_pg_mask = mips3_cp0_tlb_page_mask_probe(); if (CPUIS64BITS) { - opts->mips3_tlb_vpn_mask = mips_cp0_tlb_entry_hi_probe(); + opts->mips3_tlb_vpn_mask = mips3_cp0_tlb_entry_hi_probe(); opts->mips3_tlb_vpn_mask <<= 2; opts->mips3_tlb_vpn_mask >>= 2; - opts->mips3_tlb_pfn_mask = mips_cp0_tlb_entry_lo_probe(); + opts->mips3_tlb_pfn_mask = mips3_cp0_tlb_entry_lo_probe(); } } #endif