Module Name: src Committed By: tsutsui Date: Fri Dec 23 10:01:33 UTC 2011
Modified Files: src/sys/arch/mips/mips: locore_mips1.S Log Message: - use correct ASID bits in MIPS_COP_0_TLB_HI - save/restore current PID in tlb_invalidate_all() and cpu_switch_resume() as mipsX_subr.S does To generate a diff of this commit: cvs rdiff -u -r1.82 -r1.83 src/sys/arch/mips/mips/locore_mips1.S 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/mips/locore_mips1.S diff -u src/sys/arch/mips/mips/locore_mips1.S:1.82 src/sys/arch/mips/mips/locore_mips1.S:1.83 --- src/sys/arch/mips/mips/locore_mips1.S:1.82 Sat May 7 19:15:48 2011 +++ src/sys/arch/mips/mips/locore_mips1.S Fri Dec 23 10:01:33 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: locore_mips1.S,v 1.82 2011/05/07 19:15:48 tsutsui Exp $ */ +/* $NetBSD: locore_mips1.S,v 1.83 2011/12/23 10:01:33 tsutsui Exp $ */ /* * Copyright (c) 1992, 1993 @@ -1265,7 +1265,8 @@ LEAF(MIPSX(tlb_invalidate_asids)) mfc0 ta0, MIPS_COP_0_TLB_HI # get va and ASID nop - and ta0, ta0, PG_ASID # mask off ASID + and ta0, MIPS1_TLB_PID # mask off ASID + srl ta0, MIPS1_TLB_PID_SHIFT sltu ta1, ta0, a0 # < asid_lo bnez ta1, 2f # yes, next tlb entry nop @@ -1299,7 +1300,8 @@ LEAF(MIPSX(tlb_invalidate_all)) mfc0 v1, MIPS_COP_0_STATUS # save the status register. mtc0 zero, MIPS_COP_0_STATUS # disable interrupts - li t1, MIPS_KSEG0_START + mfc0 t0, MIPS_COP_0_TLB_HI # save current PID + li t1, MIPS_KSEG0_START # invalid address mtc0 t1, MIPS_COP_0_TLB_HI # make entryHi invalid mtc0 zero, MIPS_COP_0_TLB_LOW # zero out entryLo @@ -1313,6 +1315,7 @@ LEAF(MIPSX(tlb_invalidate_all)) bne t1, a0, 1b tlbwi # invalidate the entry + mtc0 t0, MIPS_COP_0_TLB_HI # restore PID j ra mtc0 v1, MIPS_COP_0_STATUS # restore status register END(MIPSX(tlb_invalidate_all)) @@ -1350,8 +1353,9 @@ LEAF(MIPSX(tlb_record_asids)) mfc0 t0, MIPS_COP_0_TLB_HI # get va and ASID nop - and t0, PG_ASID # mask off ASID - srl t0, MIPS1_TLB_INDEX_SHIFT # shift to low bits + and t0, MIPS1_TLB_PID + srl t0, MIPS1_TLB_PID_SHIFT # shift to low bits + and t0, a1 # focus on asid_mask srl a2, t0, 3 + LONG_SCALESHIFT # drop low 5 bits sll a2, LONG_SCALESHIFT # make an index for the bitmap @@ -1545,6 +1549,8 @@ LEAF_NOPROFILE(MIPSX(cpu_switch_resume)) blt s0, s2, resume nop + mfc0 t3, MIPS_COP_0_TLB_HI # save PID + nop mtc0 s0, MIPS_COP_0_TLB_HI # VPN = va nop tlbp # probe 1st VPN @@ -1586,6 +1592,8 @@ entry1set: mtc0 a2, MIPS_COP_0_TLB_LOW # 2nd PFN w/ PG_G nop tlbwi # set TLB entry #1 + nop + mfc0 t3, MIPS_COP_0_TLB_HI # restore PID resume: j ra