Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/mips - Rename some of TLB ops to have handy abbriva...
details: https://anonhg.NetBSD.org/src/rev/1143f92edbed
branches: trunk
changeset: 484157:1143f92edbed
user: nisimura <nisimura%NetBSD.org@localhost>
date: Mon Mar 27 05:23:42 2000 +0000
description:
- Rename some of TLB ops to have handy abbrivations hired from VAX and
ALPHA; mips1_TBIA, mips1_TBIAP, mips1_TBIS.
- Make sure TBIA and TBIAP ops to have an argument for the size of TLB
which varies across even for MIPS1 implementations.
- Nuke the unused cpu_isa field from processor personality list.
- XXX XXX XXX
it's less-than-optimal and likely a mistake to have TLBUpdate().
It's costy to try to invalidate a single TLB entry whenver a certain
PTE is going to be modified by traversing the entire TLB looking
for the modified PTE because the PTE in question is not in TLB in
most cases. ASID bump could do the invalidation smartly. Solution
is planned for now.
diffstat:
sys/arch/mips/include/locore.h | 15 +++++----
sys/arch/mips/mips/locore_mips1.S | 47 +++++++++++--------------------
sys/arch/mips/mips/mips_machdep.c | 57 +++++++++++++++++++-------------------
3 files changed, 53 insertions(+), 66 deletions(-)
diffs (247 lines):
diff -r cb720d5ed7b3 -r 1143f92edbed sys/arch/mips/include/locore.h
--- a/sys/arch/mips/include/locore.h Mon Mar 27 04:52:11 2000 +0000
+++ b/sys/arch/mips/include/locore.h Mon Mar 27 05:23:42 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.h,v 1.26 2000/03/23 14:49:29 soren Exp $ */
+/* $NetBSD: locore.h,v 1.27 2000/03/27 05:23:42 nisimura Exp $ */
/*
* Copyright 1996 The Board of Trustees of The Leland Stanford
@@ -60,10 +60,11 @@
extern void mips1_FlushICache __P((vaddr_t addr, vsize_t len));
extern void mips1_ForceCacheUpdate __P((void));
extern void mips1_SetPID __P((int pid));
-extern void mips1_clean_tlb __P((void));
-extern void mips1_TLBFlush __P((int numtlb));
-extern void mips1_TLBFlushAddr __P( /* XXX Really pte highpart ? */
- (vaddr_t addr));
+
+extern void mips1_TBIA __P((int));
+extern void mips1_TBIAP __P((int));
+extern void mips1_TBIS __P((vaddr_t));
+
extern int mips1_TLBUpdate __P((u_int, /*pt_entry_t*/ u_int));
extern void mips1_TLBWriteIndexed __P((u_int index, u_int high,
u_int low));
@@ -179,8 +180,8 @@
#define MachFlushICache mips1_FlushICache
#define MachForceCacheUpdate mips1_ForceCacheUpdate
#define MachSetPID mips1_SetPID
-#define MachTLBFlush() mips1_TLBFlush(MIPS1_TLB_NUM_TLB_ENTRIES)
-#define MachTLBFlushAddr mips1_TLBFlushAddr
+#define MachTLBFlush() mips1_TBIAP(MIPS1_TLB_NUM_TLB_ENTRIES)
+#define MachTLBFlushAddr mips1_TBIS
#define MachTLBUpdate mips1_TLBUpdate
#define wbflush() mips1_wbflush()
#define proc_trampoline mips1_proc_trampoline
diff -r cb720d5ed7b3 -r 1143f92edbed sys/arch/mips/mips/locore_mips1.S
--- a/sys/arch/mips/mips/locore_mips1.S Mon Mar 27 04:52:11 2000 +0000
+++ b/sys/arch/mips/mips/locore_mips1.S Mon Mar 27 05:23:42 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: locore_mips1.S,v 1.23 2000/03/04 11:37:31 nisimura Exp $ */
+/* $NetBSD: locore_mips1.S,v 1.24 2000/03/27 05:23:43 nisimura Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -1038,24 +1038,12 @@
END(mips1_TLBFlushPID)
#endif
-/*--------------------------------------------------------------------------
- *
- * mips1_TLBFlushAddr --
- *
- * Flush any TLB entries for the given address and TLB PID.
- *
- * mips1_TLBFlushAddr(highreg)
- * unsigned highreg;
+/*
+ * void mips1_TBIS(vaddr_t va)
*
- * Results:
- * None.
- *
- * Side effects:
- * The process's page is flushed from the TLB.
- *
- *--------------------------------------------------------------------------
+ * Invalidate a TLB entry for given virtual address if found in TLB.
*/
-LEAF(mips1_TLBFlushAddr)
+LEAF(mips1_TBIS)
mfc0 v1, MIPS_COP_0_STATUS # Save the status register.
mtc0 zero, MIPS_COP_0_STATUS # Disable interrupts
mfc0 t0, MIPS_COP_0_TLB_HI # Get current PID
@@ -1075,7 +1063,7 @@
mtc0 t0, MIPS_COP_0_TLB_HI # restore PID
j ra
mtc0 v1, MIPS_COP_0_STATUS # Restore the status register
-END(mips1_TLBFlushAddr)
+END(mips1_TBIS)
/*--------------------------------------------------------------------------
*
@@ -1837,18 +1825,17 @@
END(mips1_cpu_switch_resume)
/*
- * void mips1_purge_perprocess_tlb(void)
+ * void mips1_TBIAP(int sizeofTLB)
*
- * Purge all TLB entries belong to per process user spaces. Entries for
- * kernel space are preserved.
+ * Invalidate TLB entries belong to per process user spaces while
+ * retaining entries for kernel space marked global.
*/
-LEAF(mips1_purge_perprocess_tlb)
-ALEAF(mips1_TLBFlush)
+LEAF(mips1_TBIAP)
mfc0 v1, MIPS_COP_0_STATUS # save status register
mtc0 zero, MIPS_COP_0_STATUS # disable interrupts
li t1, MIPS1_TLB_FIRST_RAND_ENTRY << MIPS1_TLB_INDEX_SHIFT
- li t2, MIPS1_TLB_NUM_TLB_ENTRIES << MIPS1_TLB_INDEX_SHIFT
+ sll t2, a0, MIPS1_TLB_INDEX_SHIFT
li v0, MIPS_KSEG0_START
# Align the starting value (t1) and the upper bound (t2)
@@ -1871,14 +1858,14 @@
j ra # new TLBPID will be set soon
mtc0 v1, MIPS_COP_0_STATUS # restore status register
-END(mips1_purge_perprocess_tlb)
+END(mips1_TBIAP)
/*
- * void mips1_clean_tlb(void)
+ * void mips1_TBIA(int sizeofTLB)
*
- * Clense the entire TLB at early stage of processor initialization.
+ * Invalidate TLB entirely.
*/
-LEAF(mips1_clean_tlb)
+LEAF(mips1_TBIA)
mfc0 v1, MIPS_COP_0_STATUS # save the status register.
mtc0 zero, MIPS_COP_0_STATUS # disable interrupts
@@ -1888,7 +1875,7 @@
# Align the starting value (t1) and the upper bound (t2).
move t1, zero
- li t2, MIPS1_TLB_NUM_TLB_ENTRIES << MIPS1_TLB_INDEX_SHIFT
+ sll t2, a0, MIPS1_TLB_INDEX_SHIFT
1:
mtc0 t1, MIPS_COP_0_TLB_INDEX # set TLB index
addu t1, t1, 1 << MIPS1_TLB_INDEX_SHIFT # increment index
@@ -1897,7 +1884,7 @@
j ra
mtc0 v1, MIPS_COP_0_STATUS # restore status register
-END(mips1_clean_tlb)
+END(mips1_TBIA)
.data
mips1_excausesw:
diff -r cb720d5ed7b3 -r 1143f92edbed sys/arch/mips/mips/mips_machdep.c
--- a/sys/arch/mips/mips/mips_machdep.c Mon Mar 27 04:52:11 2000 +0000
+++ b/sys/arch/mips/mips/mips_machdep.c Mon Mar 27 05:23:42 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_machdep.c,v 1.70 2000/03/27 02:55:16 nisimura Exp $ */
+/* $NetBSD: mips_machdep.c,v 1.71 2000/03/27 05:23:42 nisimura Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.70 2000/03/27 02:55:16 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.71 2000/03/27 05:23:42 nisimura Exp $");
#include "opt_compat_netbsd.h"
#include "opt_compat_ultrix.h"
@@ -134,8 +134,8 @@
mips1_FlushICache,
/*mips1_FlushICache*/ mips1_FlushCache,
mips1_SetPID,
- mips1_TLBFlush,
- mips1_TLBFlushAddr,
+ mips1_TBIAP,
+ mips1_TBIS,
mips1_TLBUpdate,
mips1_wbflush,
mips1_proc_trampoline,
@@ -439,7 +439,7 @@
switch (cpu_arch) {
#ifdef MIPS1
case 1:
- mips1_clean_tlb();
+ mips1_TBIA(MIPS1_TLB_NUM_TLB_ENTRIES);
mips1_vector_init();
break;
#endif
@@ -470,41 +470,40 @@
struct pridtab {
int cpu_imp;
char *cpu_name;
- int cpu_isa;
};
struct pridtab cputab[] = {
- { MIPS_R2000, "MIPS R2000 CPU", 1 },
- { MIPS_R3000, "MIPS R3000 CPU", 1 },
- { MIPS_R6000, "MIPS R6000 CPU", 2 },
- { MIPS_R4000, "MIPS R4000 CPU", 3 },
- { MIPS_R3LSI, "LSI Logic R3000 derivative", 1 },
- { MIPS_R6000A, "MIPS R6000A CPU", 2 },
- { MIPS_R3IDT, "IDT R3041 or RC36100 CPU", 1 },
- { MIPS_R10000, "MIPS R10000/T5 CPU", 4 },
- { MIPS_R4200, "NEC VR4200 CPU", 3 },
- { MIPS_R4300, "NEC VR4300 CPU", 3 },
- { MIPS_R4100, "NEC VR4100 CPU", 3 },
- { MIPS_R8000, "MIPS R8000 Blackbird/TFP CPU", 4 },
- { MIPS_R4600, "QED R4600 Orion CPU", 3 },
- { MIPS_R4700, "QED R4700 Orion CPU", 3 },
+ { MIPS_R2000, "MIPS R2000 CPU", },
+ { MIPS_R3000, "MIPS R3000 CPU", },
+ { MIPS_R6000, "MIPS R6000 CPU", },
+ { MIPS_R4000, "MIPS R4000 CPU", },
+ { MIPS_R3LSI, "LSI Logic R3000 derivative", },
+ { MIPS_R6000A, "MIPS R6000A CPU", },
+ { MIPS_R3IDT, "IDT R3041 or RC36100 CPU", },
+ { MIPS_R10000, "MIPS R10000/T5 CPU", },
+ { MIPS_R4200, "NEC VR4200 CPU", },
+ { MIPS_R4300, "NEC VR4300 CPU", },
+ { MIPS_R4100, "NEC VR4100 CPU", },
+ { MIPS_R8000, "MIPS R8000 Blackbird/TFP CPU", },
+ { MIPS_R4600, "QED R4600 Orion CPU", },
+ { MIPS_R4700, "QED R4700 Orion CPU", },
#ifdef ENABLE_MIPS_TX3900
- { MIPS_TX3900, "Toshiba TX3900 CPU", 1 }, /* see below */
+ { MIPS_TX3900, "Toshiba TX3900 CPU", }, /* see below */
#else
- { MIPS_TX3900, "Toshiba TX3900 or QED R4650 CPU", 1 }, /* see below */
+ { MIPS_TX3900, "Toshiba TX3900 or QED R4650 CPU", }, /* see below */
#endif
- { MIPS_R5000, "MIPS R5000 CPU", 4 },
- { MIPS_RC32364, "IDT RC32364 CPU", 3 },
- { MIPS_RM5230, "QED RM5200 CPU", 4 },
- { MIPS_RC64470, "IDT RC64474/RC64475 CPU", 3 },
- { MIPS_R5400, "NEC VR5400 CPU", 4 },
+ { MIPS_R5000, "MIPS R5000 CPU", },
+ { MIPS_RC32364, "IDT RC32364 CPU", },
+ { MIPS_RM5230, "QED RM5200 CPU", },
+ { MIPS_RC64470, "IDT RC64474/RC64475 CPU", },
+ { MIPS_R5400, "NEC VR5400 CPU", },
#if 0 /* ID crashs */
/*
* According to documents from Toshiba and QED, PRid 0x22 is
* used by both of TX3900 (ISA-I) and QED4640/4650 (ISA-III).
* Two PRid conflicts below have not been confirmed this time.
*/
- { MIPS_R3SONY, "SONY R3000 derivative", 1}, /* 0x21; crash R4700? */
- { MIPS_R3NKK, "NKK R3000 derivative", 1}, /* 0x23; crash R5000? */
+ { MIPS_R3SONY, "SONY R3000 derivative", }, /* 0x21; crash R4700? */
+ { MIPS_R3NKK, "NKK R3000 derivative", }, /* 0x23; crash R5000? */
#endif
};
struct pridtab fputab[] = {
Home |
Main Index |
Thread Index |
Old Index