Module Name:    src
Committed By:   matt
Date:           Thu Jun 23 01:27:21 UTC 2011

Modified Files:
        src/sys/arch/evbppc/mpc85xx: machdep.c
        src/sys/arch/powerpc/booke: booke_stubs.c e500_tlb.c
        src/sys/arch/powerpc/include: types.h
        src/sys/arch/powerpc/include/booke: cpuvar.h pte.h
        src/sys/common/pmap/tlb: pmap_tlb.c

Log Message:
Switch to using the common <common/pmap/tlb/tlb.h>


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/evbppc/mpc85xx/machdep.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/powerpc/booke/booke_stubs.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/powerpc/booke/e500_tlb.c
cvs rdiff -u -r1.44 -r1.45 src/sys/arch/powerpc/include/types.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/include/booke/cpuvar.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/powerpc/include/booke/pte.h
cvs rdiff -u -r1.4 -r1.5 src/sys/common/pmap/tlb/pmap_tlb.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/evbppc/mpc85xx/machdep.c
diff -u src/sys/arch/evbppc/mpc85xx/machdep.c:1.11 src/sys/arch/evbppc/mpc85xx/machdep.c:1.12
--- src/sys/arch/evbppc/mpc85xx/machdep.c:1.11	Wed Jun 15 15:18:20 2011
+++ src/sys/arch/evbppc/mpc85xx/machdep.c	Thu Jun 23 01:27:20 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.11 2011/06/15 15:18:20 matt Exp $	*/
+/*	$NetBSD: machdep.c,v 1.12 2011/06/23 01:27:20 matt Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -821,8 +821,8 @@
 	 * We know the GUR is mapped via a TLB1 entry so we add a limited
 	 * mapiodev which allows mappings in GUR space.
 	 */
-	CTASSERT(offsetof(struct tlb_md_ops, md_tlb_mapiodev) == 0);
-	cpu_md_ops.md_tlb_ops = (const void *)&early_tlb_mapiodev;
+	CTASSERT(offsetof(struct tlb_md_io_ops, md_tlb_mapiodev) == 0);
+	cpu_md_ops.md_tlb_io_ops = (const void *)&early_tlb_mapiodev;
 	bus_space_init(&gur_bst, NULL, NULL, 0);
 	bus_space_init(&gur_le_bst, NULL, NULL, 0);
 	cpu->cpu_bst = &gur_bst;

Index: src/sys/arch/powerpc/booke/booke_stubs.c
diff -u src/sys/arch/powerpc/booke/booke_stubs.c:1.6 src/sys/arch/powerpc/booke/booke_stubs.c:1.7
--- src/sys/arch/powerpc/booke/booke_stubs.c:1.6	Wed Jun 15 15:22:56 2011
+++ src/sys/arch/powerpc/booke/booke_stubs.c	Thu Jun 23 01:27:20 2011
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: booke_stubs.c,v 1.6 2011/06/15 15:22:56 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: booke_stubs.c,v 1.7 2011/06/23 01:27:20 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -45,17 +45,17 @@
 
 #define	__stub	__section(".stub") __noprofile
 
-void tlb_set_asid(uint32_t) __stub;
+void tlb_set_asid(tlb_asid_t) __stub;
 
 void
-tlb_set_asid(uint32_t asid)
+tlb_set_asid(tlb_asid_t asid)
 {
 	(*cpu_md_ops.md_tlb_ops->md_tlb_set_asid)(asid);
 }
 
-uint32_t tlb_get_asid(void) __stub;
+tlb_asid_t tlb_get_asid(void) __stub;
 
-uint32_t
+tlb_asid_t
 tlb_get_asid(void)
 {
 	return (*cpu_md_ops.md_tlb_ops->md_tlb_get_asid)();
@@ -77,26 +77,26 @@
 	(*cpu_md_ops.md_tlb_ops->md_tlb_invalidate_globals)();
 }
 
-void tlb_invalidate_asids(uint32_t, uint32_t) __stub;
+void tlb_invalidate_asids(tlb_asid_t, tlb_asid_t) __stub;
 
 void
-tlb_invalidate_asids(uint32_t asid_lo, uint32_t asid_hi)
+tlb_invalidate_asids(tlb_asid_t asid_lo, tlb_asid_t asid_hi)
 {
 	(*cpu_md_ops.md_tlb_ops->md_tlb_invalidate_asids)(asid_lo, asid_hi);
 }
 
-void tlb_invalidate_addr(vaddr_t, uint32_t) __stub;
+void tlb_invalidate_addr(vaddr_t, tlb_asid_t) __stub;
 
 void
-tlb_invalidate_addr(vaddr_t va, uint32_t asid)
+tlb_invalidate_addr(vaddr_t va, tlb_asid_t asid)
 {
 	(*cpu_md_ops.md_tlb_ops->md_tlb_invalidate_addr)(va, asid);
 }
 
-bool tlb_update_addr(vaddr_t, uint32_t, uint32_t, bool) __stub;
+bool tlb_update_addr(vaddr_t, tlb_asid_t, pt_entry_t, bool) __stub;
 
 bool
-tlb_update_addr(vaddr_t va, uint32_t asid, uint32_t pte, bool insert_p)
+tlb_update_addr(vaddr_t va, tlb_asid_t asid, pt_entry_t pte, bool insert_p)
 {
 	return (*cpu_md_ops.md_tlb_ops->md_tlb_update_addr)(va, asid, pte, insert_p);
 }
@@ -109,12 +109,37 @@
 	(*cpu_md_ops.md_tlb_ops->md_tlb_read_entry)(pos, tlb);
 }
 
-u_int tlb_record_asids(u_long *, uint32_t) __stub;
+void tlb_write_entry(size_t, const struct tlbmask *) __stub;
+
+void
+tlb_write_entry(size_t pos, const struct tlbmask *tlb)
+{
+	(*cpu_md_ops.md_tlb_ops->md_tlb_write_entry)(pos, tlb);
+}
+
+u_int tlb_record_asids(u_long *) __stub;
 
 u_int
-tlb_record_asids(u_long *bitmap, uint32_t start)
+tlb_record_asids(u_long *bitmap)
+{
+	return (*cpu_md_ops.md_tlb_ops->md_tlb_record_asids)(bitmap);
+}
+
+void tlb_dump(void (*)(const char *, ...)) __stub;
+
+void
+tlb_dump(void (*pr)(const char *, ...))
 {
-	return (*cpu_md_ops.md_tlb_ops->md_tlb_record_asids)(bitmap, start);
+	(*cpu_md_ops.md_tlb_ops->md_tlb_dump)(pr);
+}
+
+void tlb_walk(void *, bool (*)(void *, vaddr_t, uint32_t, uint32_t))
+    __stub;
+
+void
+tlb_walk(void *ctx, bool (*func)(void *, vaddr_t, uint32_t, uint32_t))
+{
+	(*cpu_md_ops.md_tlb_ops->md_tlb_walk)(ctx, func);
 }
 
 void *tlb_mapiodev(paddr_t, psize_t) __stub;
@@ -122,7 +147,7 @@
 void *
 tlb_mapiodev(paddr_t pa, psize_t len)
 {
-	return (*cpu_md_ops.md_tlb_ops->md_tlb_mapiodev)(pa, len);
+	return (*cpu_md_ops.md_tlb_io_ops->md_tlb_mapiodev)(pa, len);
 }
 
 void tlb_unmapiodev(vaddr_t, vsize_t) __stub;
@@ -130,7 +155,7 @@
 void
 tlb_unmapiodev(vaddr_t va, vsize_t len)
 {
-	(*cpu_md_ops.md_tlb_ops->md_tlb_unmapiodev)(va, len);
+	(*cpu_md_ops.md_tlb_io_ops->md_tlb_unmapiodev)(va, len);
 }
 
 int tlb_ioreserve(vaddr_t, vsize_t, uint32_t) __stub;
@@ -138,7 +163,7 @@
 int
 tlb_ioreserve(vaddr_t va, vsize_t len, uint32_t pte)
 {
-	return (*cpu_md_ops.md_tlb_ops->md_tlb_ioreserve)(va, len, pte);
+	return (*cpu_md_ops.md_tlb_io_ops->md_tlb_ioreserve)(va, len, pte);
 }
 
 int tlb_iorelease(vaddr_t) __stub;
@@ -146,22 +171,5 @@
 int
 tlb_iorelease(vaddr_t va)
 {
-	return (*cpu_md_ops.md_tlb_ops->md_tlb_iorelease)(va);
-}
-
-void tlb_dump(void (*)(const char *, ...)) __stub;
-
-void
-tlb_dump(void (*pr)(const char *, ...))
-{
-	(*cpu_md_ops.md_tlb_ops->md_tlb_dump)(pr);
-}
-
-void tlb_walk(void *, bool (*)(void *, vaddr_t, uint32_t, uint32_t))
-    __stub;
-
-void
-tlb_walk(void *ctx, bool (*func)(void *, vaddr_t, uint32_t, uint32_t))
-{
-	(*cpu_md_ops.md_tlb_ops->md_tlb_walk)(ctx, func);
+	return (*cpu_md_ops.md_tlb_io_ops->md_tlb_iorelease)(va);
 }

Index: src/sys/arch/powerpc/booke/e500_tlb.c
diff -u src/sys/arch/powerpc/booke/e500_tlb.c:1.3 src/sys/arch/powerpc/booke/e500_tlb.c:1.4
--- src/sys/arch/powerpc/booke/e500_tlb.c:1.3	Sun Jun  5 16:52:24 2011
+++ src/sys/arch/powerpc/booke/e500_tlb.c	Thu Jun 23 01:27:20 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: e500_tlb.c,v 1.3 2011/06/05 16:52:24 matt Exp $	*/
+/*	$NetBSD: e500_tlb.c,v 1.4 2011/06/23 01:27:20 matt Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: e500_tlb.c,v 1.3 2011/06/05 16:52:24 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: e500_tlb.c,v 1.4 2011/06/23 01:27:20 matt Exp $");
 
 #include <sys/param.h>
 
@@ -335,12 +335,20 @@
 	wrtee(msr);
 }
 
-static void e500_tlb_set_asid(uint32_t asid)
+static tlb_asid_t
+e500_tlb_get_asid(void)
+{
+	return mfspr(SPR_PID0);
+}
+
+static void
+e500_tlb_set_asid(tlb_asid_t asid)
 {
 	mtspr(SPR_PID0, asid);
 }
 
-static void e500_tlb_invalidate_all(void)
+static void
+e500_tlb_invalidate_all(void)
 {
 	/*
 	 * This does a flash invalidate of all entries in TLB0.
@@ -405,7 +413,7 @@
 }
 
 static void
-e500_tlb_invalidate_asids(uint32_t asid_lo, uint32_t asid_hi)
+e500_tlb_invalidate_asids(tlb_asid_t asid_lo, tlb_asid_t asid_hi)
 {
 	const size_t tlbassoc = TLBCFG_ASSOC(mftlb0cfg());
 	const size_t tlbentries = TLBCFG_NENTRY(mftlb0cfg());
@@ -443,7 +451,7 @@
 }
 
 static u_int
-e500_tlb_record_asids(u_long *bitmap, uint32_t start_slot)
+e500_tlb_record_asids(u_long *bitmap)
 {
 	const size_t tlbassoc = TLBCFG_ASSOC(mftlb0cfg());
 	const size_t tlbentries = TLBCFG_NENTRY(mftlb0cfg());
@@ -480,7 +488,7 @@
 }
 
 static void
-e500_tlb_invalidate_addr(vaddr_t va, uint32_t asid)
+e500_tlb_invalidate_addr(vaddr_t va, tlb_asid_t asid)
 {
 	KASSERT((va & PAGE_MASK) == 0);
 	/*
@@ -492,7 +500,7 @@
 }
 
 static bool
-e500_tlb_update_addr(vaddr_t va, uint32_t asid, uint32_t pte, bool insert)
+e500_tlb_update_addr(vaddr_t va, tlb_asid_t asid, pt_entry_t pte, bool insert)
 {
 	struct e500_hwtlb hwtlb = tlb_to_hwtlb(
 	    (struct e500_tlb){ .tlb_va = va, .tlb_asid = asid,
@@ -529,6 +537,11 @@
 }
 
 static void
+e500_tlb_write_entry(size_t index, const struct tlbmask *tlb)
+{
+}
+
+static void
 e500_tlb_read_entry(size_t index, struct tlbmask *tlb)
 {
 }
@@ -696,7 +709,7 @@
 }
 
 static int
-e500_tlb_ioreserve(vaddr_t va, vsize_t len, uint32_t pte)
+e500_tlb_ioreserve(vaddr_t va, vsize_t len, pt_entry_t pte)
 {
 	struct e500_tlb1 * const tlb1 = &e500_tlb1;
 	struct e500_xtlb *xtlb;
@@ -786,6 +799,7 @@
 	return nextslot;
 }
 static const struct tlb_md_ops e500_tlb_ops = {
+	.md_tlb_get_asid = e500_tlb_get_asid,
 	.md_tlb_set_asid = e500_tlb_set_asid,
 	.md_tlb_invalidate_all = e500_tlb_invalidate_all,
 	.md_tlb_invalidate_globals = e500_tlb_invalidate_globals,
@@ -793,13 +807,17 @@
 	.md_tlb_invalidate_addr = e500_tlb_invalidate_addr,
 	.md_tlb_update_addr = e500_tlb_update_addr,
 	.md_tlb_record_asids = e500_tlb_record_asids,
+	.md_tlb_write_entry = e500_tlb_write_entry,
 	.md_tlb_read_entry = e500_tlb_read_entry,
+	.md_tlb_dump = e500_tlb_dump,
+	.md_tlb_walk = e500_tlb_walk,
+};
+
+static const struct tlb_md_io_ops e500_tlb_io_ops = {
 	.md_tlb_mapiodev = e500_tlb_mapiodev,
 	.md_tlb_unmapiodev = e500_tlb_unmapiodev,
 	.md_tlb_ioreserve = e500_tlb_ioreserve,
 	.md_tlb_iorelease = e500_tlb_iorelease,
-	.md_tlb_dump = e500_tlb_dump,
-	.md_tlb_walk = e500_tlb_walk,
 };
 
 void
@@ -882,6 +900,7 @@
 	}
 
 	cpu_md_ops.md_tlb_ops = &e500_tlb_ops;
+	cpu_md_ops.md_tlb_io_ops = &e500_tlb_io_ops;
 
 	if (__predict_false(memmapped < memsize)) {
 		/*

Index: src/sys/arch/powerpc/include/types.h
diff -u src/sys/arch/powerpc/include/types.h:1.44 src/sys/arch/powerpc/include/types.h:1.45
--- src/sys/arch/powerpc/include/types.h:1.44	Tue Jun 14 03:12:43 2011
+++ src/sys/arch/powerpc/include/types.h	Thu Jun 23 01:27:20 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: types.h,v 1.44 2011/06/14 03:12:43 matt Exp $	*/
+/*	$NetBSD: types.h,v 1.45 2011/06/23 01:27:20 matt Exp $	*/
 
 /*-
  * Copyright (C) 1995 Wolfgang Solfrank.
@@ -64,6 +64,8 @@
 typedef struct label_t {
 	register_t val[40]; /* double check this XXX */
 } label_t;
+
+typedef __uint32_t tlb_asid_t;		/* for booke */
 #endif
 
 typedef volatile int __cpu_simple_lock_t;

Index: src/sys/arch/powerpc/include/booke/cpuvar.h
diff -u src/sys/arch/powerpc/include/booke/cpuvar.h:1.9 src/sys/arch/powerpc/include/booke/cpuvar.h:1.10
--- src/sys/arch/powerpc/include/booke/cpuvar.h:1.9	Mon Jun 20 06:00:46 2011
+++ src/sys/arch/powerpc/include/booke/cpuvar.h	Thu Jun 23 01:27:20 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpuvar.h,v 1.9 2011/06/20 06:00:46 matt Exp $	*/
+/*	$NetBSD: cpuvar.h,v 1.10 2011/06/23 01:27:20 matt Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -102,9 +102,14 @@
 	int ga_irq;
 };
 
-struct tlbmask;
+#ifndef __BSD_PT_ENTRY_T
+#define __BSD_PT_ENTRY_T	__uint32_t
+typedef __BSD_PT_ENTRY_T	pt_entry_t;
+#endif
+
+#include <common/pmap/tlb/tlb.h>
 
-struct tlb_md_ops {
+struct tlb_md_io_ops {
 	/*
 	 * We need mapiodev to be first so we can easily override it in
 	 * early boot by doing cpu_md_ops.tlb_md_ops = (const struct
@@ -112,20 +117,8 @@
 	 */
 	void *(*md_tlb_mapiodev)(paddr_t, psize_t);
 	void (*md_tlb_unmapiodev)(vaddr_t, vsize_t);
-	void (*md_tlb_set_asid)(uint32_t);
-	uint32_t (*md_tlb_get_asid)(void);
-	void (*md_tlb_invalidate_all)(void);
-	void (*md_tlb_invalidate_globals)(void);
-	void (*md_tlb_invalidate_asids)(uint32_t, uint32_t);
-	void (*md_tlb_invalidate_addr)(vaddr_t, uint32_t);
-	bool (*md_tlb_update_addr)(vaddr_t, uint32_t, uint32_t, bool);
-	void (*md_tlb_read_entry)(size_t, struct tlbmask *);
-	u_int (*md_tlb_record_asids)(u_long *, uint32_t);
 	int (*md_tlb_ioreserve)(vaddr_t, vsize_t, uint32_t);
 	int (*md_tlb_iorelease)(vaddr_t);
-	void (*md_tlb_dump)(void (*)(const char *, ...));
-	void (*md_tlb_walk)(void *, bool (*)(void *, vaddr_t, uint32_t,
-	    uint32_t));
 };
 
 struct cpu_md_ops {
@@ -138,6 +131,7 @@
 	void (*md_cpunode_attach)(device_t, device_t, void *);
 
 	const struct tlb_md_ops *md_tlb_ops;
+	const struct tlb_md_io_ops *md_tlb_io_ops;
 };
 
 
@@ -178,22 +172,10 @@
 struct intrsw;
 void	exception_init(const struct intrsw *);
 
-uint32_t tlb_get_asid(void);
-void	tlb_set_asid(uint32_t);
-void	tlb_invalidate_all(void);
-void	tlb_invalidate_globals(void);
-void	tlb_invalidate_asids(uint32_t, uint32_t);
-void	tlb_invalidate_addr(vaddr_t, uint32_t);
-bool	tlb_update_addr(vaddr_t, uint32_t, uint32_t, bool);
-u_int	tlb_record_asids(u_long *, uint32_t);
-void	tlb_enter_addr(size_t, const struct tlbmask *);
-void	tlb_read_entry(size_t, struct tlbmask *);
 void	*tlb_mapiodev(paddr_t, psize_t);
 void	tlb_unmapiodev(vaddr_t, vsize_t);
-int	tlb_ioreserve(vaddr_t, vsize_t, uint32_t);
+int	tlb_ioreserve(vaddr_t, vsize_t, pt_entry_t);
 int	tlb_iorelease(vaddr_t);
-void	tlb_dump(void (*)(const char *, ...));
-void	tlb_walk(void *, bool (*)(void *, vaddr_t, uint32_t, uint32_t));
 
 extern struct cpu_md_ops cpu_md_ops;
 

Index: src/sys/arch/powerpc/include/booke/pte.h
diff -u src/sys/arch/powerpc/include/booke/pte.h:1.3 src/sys/arch/powerpc/include/booke/pte.h:1.4
--- src/sys/arch/powerpc/include/booke/pte.h:1.3	Mon Jun 20 20:24:28 2011
+++ src/sys/arch/powerpc/include/booke/pte.h	Thu Jun 23 01:27:20 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pte.h,v 1.3 2011/06/20 20:24:28 matt Exp $	*/
+/*	$NetBSD: pte.h,v 1.4 2011/06/23 01:27:20 matt Exp $	*/
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -38,7 +38,10 @@
 #define _POWERPC_BOOKE_PTE_H_
 
 #ifndef _LOCORE
-typedef __uint32_t pt_entry_t;
+#ifndef __BSD_PT_ENTRY_T
+#define __BSD_PT_ENTRY_T	__uint32_t
+typedef __BSD_PT_ENTRY_T	pt_entry_t;
+#endif
 #endif
 
 #include <powerpc/booke/spr.h>

Index: src/sys/common/pmap/tlb/pmap_tlb.c
diff -u src/sys/common/pmap/tlb/pmap_tlb.c:1.4 src/sys/common/pmap/tlb/pmap_tlb.c:1.5
--- src/sys/common/pmap/tlb/pmap_tlb.c:1.4	Sun Jun  5 16:52:27 2011
+++ src/sys/common/pmap/tlb/pmap_tlb.c	Thu Jun 23 01:27:21 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap_tlb.c,v 1.4 2011/06/05 16:52:27 matt Exp $	*/
+/*	$NetBSD: pmap_tlb.c,v 1.5 2011/06/23 01:27:21 matt Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.4 2011/06/05 16:52:27 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.5 2011/06/23 01:27:21 matt Exp $");
 
 /*
  * Manages address spaces in a TLB.
@@ -335,8 +335,7 @@
 		 * and clear the ASID bitmap.  That will force everyone to
 		 * allocate a new ASID.
 		 */
-		const u_int asids_found = tlb_record_asids(ti->ti_asid_bitmap,
-		    ti->ti_asid_mask);
+		const u_int asids_found = tlb_record_asids(ti->ti_asid_bitmap);
 		KASSERT(asids_found == pmap_tlb_asid_count(ti));
 		if (__predict_false(asids_found >= ti->ti_asid_max / 2)) {
 			tlb_invalidate_asids(KERNEL_PID + 1, ti->ti_asid_mask);

Reply via email to