Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Feb 2009 23:44:50 GMT
From:      Arnar Mar Sig <antab@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 157013 for review
Message-ID:  <200902012344.n11NioTZ069636@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=157013

Change 157013 by antab@antab_farm on 2009/02/01 23:44:50

	Misc changes to get AVR32 working. Stops at cpu_fork() now.

Affected files ...

.. //depot/projects/avr32/src/sys/avr32/avr32/cpu.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/db_disasm.c#1 add
.. //depot/projects/avr32/src/sys/avr32/avr32/db_interface.c#1 add
.. //depot/projects/avr32/src/sys/avr32/avr32/db_trace.c#1 add
.. //depot/projects/avr32/src/sys/avr32/avr32/gdb_machdep.c#1 add
.. //depot/projects/avr32/src/sys/avr32/avr32/machdep.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/stack_machdep.c#1 add
.. //depot/projects/avr32/src/sys/avr32/avr32/support.S#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/tlb.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/uboot.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/vm_machdep.c#2 edit
.. //depot/projects/avr32/src/sys/avr32/conf/NGW100#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/atomic.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/cpu.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/cpufunc.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/db_machdep.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/gdb_machdep.h#1 add
.. //depot/projects/avr32/src/sys/avr32/include/pcpu.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/pte.h#2 edit
.. //depot/projects/avr32/src/sys/avr32/include/tlb.h#2 edit
.. //depot/projects/avr32/src/sys/conf/files.avr32#2 edit

Differences ...

==== //depot/projects/avr32/src/sys/avr32/avr32/cpu.c#2 (text+ko) ====

@@ -108,22 +108,3 @@
 	avr32_debug(": needs implementing\n");
 	while (1) { }
 }
-
-void avr32_hexdump(uint8_t *data, size_t size) {
-    int i;
-
-    printf("*** %4d bytes *******************************************\n", size);
-    for (i = 0; i < size; i++) {
-        if (!(i % 32)) {
-            printf("%08X  ", (uint32_t)data + i);
-        }
-        printf("%02X", data[i]);
-
-        if (!((i + 1) % 32)) {
-            printf("\n");
-        } else if (!((i + 1) % 4)) {
-            printf(" ");
-        }
-    }
-    printf("\n");
-}

==== //depot/projects/avr32/src/sys/avr32/avr32/machdep.c#2 (text+ko) ====

@@ -54,6 +54,14 @@
 #include <sys/vmmeter.h>
 #include <sys/cons.h>
 #include <sys/kdb.h>
+#include <vm/vm.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_object.h>
+#include <vm/vm_page.h>
+#include <vm/pmap.h>
+#include <vm/vm_map.h>
+#include <vm/vm_pager.h>
+#include <vm/vm_extern.h>
 #include <machine/cpu.h>
 #include <machine/reg.h>
 #include <machine/pcb.h>
@@ -71,20 +79,25 @@
 extern vm_offset_t proc0_stack_end;
 
 vm_offset_t phys_avail[10];
-long realmem = 0;
+long realmem;
+struct kva_md_info kmi;
+
+static void cpu_startup(void *);
+SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL);
 
 // Prototypes (Should be in headers!)
 void mi_startup(void);
 void avr32_init(void);
 void avr32_init_proc0(void);
 
-
 void avr32_init() {
 	cninit();				// Init console
 	cpu_init();				// Init needed cpu things (evb and irq)
 	uboot_parse_tags();		// Parse uboot tags
+
+	realmem = btoc(phys_avail[1] - phys_avail[0]);
 	init_param1();
-	init_param2(phys_avail[1] - phys_avail[2]);
+	init_param2(realmem);
 	pmap_bootstrap();		// Bootstrap pmap so we so virtual memory works
 	avr32_init_proc0();		// Init proc0
 	mutex_init();
@@ -96,16 +109,37 @@
 	proc_linkup(&proc0, &thread0);
 	thread0.td_kstack = proc0_stack_end;
 	thread0.td_kstack_pages = KSTACK_PAGES - 1;
-    thread0.td_pcb = &proc0_pcb;
-    thread0.td_frame = &thread0.td_pcb->pcb_regs;
+	thread0.td_pcb = &proc0_pcb;
+	thread0.td_frame = &thread0.td_pcb->pcb_regs;
 
 	pcpu_init(pcpup, 0, sizeof(struct pcpu));
 	PCPU_SET(curthread, &thread0);
 	PCPU_SET(curpcb, thread0.td_pcb);
 }
 
+static void cpu_startup(void *dummy) {
+	if (boothowto & RB_VERBOSE) {
+		bootverbose++;
+	}
+    bootverbose++;
+	printf("real memory  = %u (%u MB)\n", ptoa(realmem),
+		ptoa(realmem) / 1048576);
+
+
+	vm_ksubmap_init(&kmi);
+
+	printf("avail memory = %u (%uMB)\n", ptoa(cnt.v_free_count),
+		ptoa(cnt.v_free_count) / 1048576);
+
+	/*
+	 * Set up buffers, so they can be used to read disk labels.
+	 */
+	bufinit();
+	vm_pager_bufferinit();
+}
+
 void cpu_pcpu_init(struct pcpu *pcpu, int cpuid, size_t size) {
-	pcpu->pc_next_asid = 1;
+	pcpu->pc_asid_next = 1;
 	pcpu->pc_asid_generation = 1;
 }
 
@@ -167,6 +201,7 @@
 
 int savectx(struct pcb *pcb) {
 	avr32_impl();
+	return (0);
 }
 
 void makectx(struct trapframe *tf, struct pcb *pcb) {

==== //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#2 (text+ko) ====

@@ -44,6 +44,7 @@
 #include <sys/user.h>
 #include <sys/uio.h>
 #include <sys/ptrace.h>
+#include <sys/sysproto.h>
 #include <vm/vm.h>
 #include <vm/pmap.h>
 #include <vm/vm_map.h>
@@ -53,10 +54,12 @@
 
 int get_mcontext(struct thread *td, mcontext_t *mcp, int flags) {
 	avr32_impl();
+	return (0);
 }
 
 int set_mcontext(struct thread *td, const mcontext_t *mcp) {
 	avr32_impl();
+	return (0);
 }
 
 void exec_setregs(struct thread *td, u_long entry, u_long stack, u_long ps_strings) {
@@ -65,14 +68,17 @@
 
 int ptrace_set_pc(struct thread *td, unsigned long addr) {
 	avr32_impl();
+	return (0);
 }
 
 int ptrace_single_step(struct thread *td) {
 	avr32_impl();
+	return (0);
 }
 
 int ptrace_clear_single_step(struct thread *td) {
 	avr32_impl();
+	return (0);
 }
 
 void cpu_switch(struct thread *td, struct thread *newtd, struct mtx *lock) {
@@ -88,5 +94,6 @@
  */
 int sigreturn(struct thread *td, struct sigreturn_args *uap) {
 	avr32_impl();
+	return (0);
 }
 

==== //depot/projects/avr32/src/sys/avr32/avr32/pmap.c#2 (text+ko) ====

@@ -53,7 +53,6 @@
 vm_offset_t kernel_vm_end = 0;
 vm_offset_t virtual_avail;      /* VA of first avail page (after kernel bss) */
 vm_offset_t virtual_end;        /* VA of last avail page (end of kernel AS) */
-int asid_current, asid_current_generation;
 
 /*
  * Data for the pv entry allocation mechanism
@@ -96,6 +95,7 @@
 	}
 
 	// Enable paging
+	tlb_flush();
 	sysreg_write(PTBR, (uint32_t)kernel_pmap);
 	sysreg_write(MMUCR,	bit_offset(SYS, MMUCR, S) |
 						bit_offset(SYS, MMUCR, E) |
@@ -148,15 +148,26 @@
  * such as one in a vmspace structure.
  */
 int pmap_pinit(pmap_t pmap) {
-/*	mtx_init(&(pmap)->pm_mtx, "pmap", NULL, MTX_DEF);
+	vm_page_t ptdpg;
+
+	PMAP_LOCK_INIT(pmap);
+
+	/* allocate the page directory page */
+	ptdpg = vm_page_alloc(NULL, 512,
+		VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL |
+		VM_ALLOC_WIRED | VM_ALLOC_ZERO);
 
-	pmap->pm_active = 0;
-	pmap->pm_asid.asid = PMAP_ASID_RESERVED;
-	pmap->pm_asid.gen = 0;
+    pmap->pm_pd = (pd_entry_t *)AVR32_PHYS_TO_P2(VM_PAGE_TO_PHYS(ptdpg));
+    if ((ptdpg->flags & PG_ZERO) == 0) {
+        bzero(pmap->pm_pd, PAGE_SIZE);
+	}
 
+    pmap->pm_active = 0;
+	pmap->pm_asid = 0;
+	pmap->pm_asid_generation = 0;
 	TAILQ_INIT(&pmap->pm_pvlist);
-	bzero(&pmap->pm_stats, sizeof(pmap->pm_stats)); */
-	avr32_impl();
+	bzero(&pmap->pm_stats, sizeof(pmap->pm_stats));
+
 	return(1);
 }
 
@@ -166,6 +177,7 @@
 
 boolean_t pmap_is_modified(vm_page_t m) {
 	avr32_impl();
+	return (0);
 }
 
 void pmap_clear_modify(vm_page_t m) {
@@ -174,6 +186,7 @@
 
 int pmap_ts_referenced(vm_page_t m) {
 	avr32_impl();
+	return (0);
 }
 
 void pmap_clear_reference(vm_page_t m) {
@@ -226,6 +239,7 @@
  */
 boolean_t pmap_is_prefaultable(pmap_t pmap, vm_offset_t addr) {
 	avr32_impl();
+	return (0);
 }
 
 void pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, vm_offset_t src_addr) {
@@ -239,7 +253,7 @@
 void pmap_zero_page(vm_page_t m) {
 	vm_paddr_t phys = VM_PAGE_TO_PHYS(m);
 
-	bzero(AVR32_PHYS_TO_P2(phys), PAGE_SIZE);
+	bzero((caddr_t)AVR32_PHYS_TO_P2(phys), PAGE_SIZE);
 }
 
 void pmap_zero_page_area(vm_page_t m, int off, int size) {
@@ -250,12 +264,20 @@
 	avr32_impl();
 }
 
-void pmap_qenter(vm_offset_t sva, vm_page_t *m, int count) {
-	avr32_impl();
+void pmap_qenter(vm_offset_t va, vm_page_t *m, int count) {
+	int i;
+
+	for (i = 0; i < count; i++) {
+		pmap_kenter(va, VM_PAGE_TO_PHYS(m[i]));
+		va += PAGE_SIZE;
+	}
 }
 
-void pmap_qremove(vm_offset_t sva, int count) {
-	avr32_impl();
+void pmap_qremove(vm_offset_t va, int count) {
+	while (count-- > 0) {
+		pmap_kremove(va);
+		va += PAGE_SIZE;
+    }
 }
 
 void pmap_page_init(vm_page_t m) {
@@ -270,7 +292,6 @@
 void pmap_growkernel(vm_offset_t addr) {
 	// Not really sure what to do here, need to look better into it, but the
 	// kernel should have all the pages tables needed to grow within the P3 segment
-	avr32_debug("pmap_growkernel: Needs implementing?\n");
 }
 
 /*
@@ -480,10 +501,12 @@
 
 vm_page_t pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot) {
 	avr32_impl();
+	return (0);
 }
 
 boolean_t pmap_page_exists_quick(pmap_t pmap, vm_page_t m) {
 	avr32_impl();
+	return (0);
 }
 
 /*
@@ -507,6 +530,7 @@
  */
 int pmap_page_wired_mappings(vm_page_t m) {
 	avr32_impl();
+	return (0);
 }
 
 /*
@@ -516,6 +540,7 @@
  */
 int pmap_mincore(pmap_t pmap, vm_offset_t addr) {
 	avr32_impl();
+	return (0);
 }
 
 /*
@@ -675,7 +700,7 @@
 static void pmap_update_page(pmap_t pmap, vm_offset_t va, pt_entry_t pte) {
 	uint32_t tlbehi, mmucr;
 
-	if (pmap->pm_asid_generation != asid_current_generation) {
+	if (pmap->pm_asid_generation != PCPU_GET(asid_generation)) {
 		return;
 	}
 
@@ -703,8 +728,6 @@
 	pmap_t pmap = (pmap_t)sysreg_read(PTBR);
 	pt_entry_t *ent;
 
-
-
 	ent = pmap_pte(pmap, tlbear);
 	if (!ent || !*ent) {
 		printf("\nTLB miss: %x\n", ecr);
@@ -718,20 +741,20 @@
 	}
 
 	// Generate ASID?
-	if (pmap->pm_asid == 0 || pmap->pm_asid_generation < asid_current_generation) {
-		asid_current++;
-		if (asid_current == ASID_MAX) {
-			asid_current_generation++;
-			asid_current = 1;
+	if (pmap->pm_asid_generation < PCPU_GET(asid_generation)) {
+		if (PCPU_GET(asid_next) == ASID_MAX) {
+			PCPU_INC(asid_generation);
+			PCPU_SET(asid_next, 0);
 		}
-		pmap->pm_asid = asid_current;
-		pmap->pm_asid_generation = asid_current_generation;
+		pmap->pm_asid = PCPU_GET(asid_next);
+		pmap->pm_asid_generation = PCPU_GET(asid_generation);
+		PCPU_INC(asid_next);
 	}
 
 	// Insert into TLB
 	sysreg_write(TLBEHI,	(tlbehi & bit_mask(SYS, TLBEHI, VPN)) |
 							bit_offset(SYS, TLBEHI, V) |
-							asid_current);
+							pmap->pm_asid);
 	sysreg_write(TLBELO,	(*ent & ~bit_mask(SYS, TLBELO, SZ)) | PTE_DIRTY | PTE_SIZE_4K);
 	sysreg_write(MMUCR,     bit_offset(SYS, MMUCR, S) |
                             bit_offset(SYS, MMUCR, E) |
@@ -743,7 +766,7 @@
 	cpu_sync_pipeline();
 
 	tlb_at++;
-	if (tlb_at == 32) {
+	if (tlb_at == TLB_SIZE) {
 		tlb_at = 0;
 	}
 }

==== //depot/projects/avr32/src/sys/avr32/avr32/support.S#2 (text+ko) ====

@@ -189,9 +189,6 @@
 
 
 
-ENTRY(breakpoint)
-
-
 ENTRY(setjmp)
 ENTRY(longjmp)
     sub r12, pc, (. - 2f)

==== //depot/projects/avr32/src/sys/avr32/avr32/tlb.c#2 (text+ko) ====

@@ -47,7 +47,7 @@
 	uint32_t i, tlbehi, tlbelo, mmucr, mmucr_save;
 
 	mmucr_save = sysreg_read(MMUCR);
-	for (i = 0; i < 32; i++) {
+	for (i = 0; i < TLB_SIZE; i++) {
 		mmucr = (mmucr_save & ~bit_mask(SYS, MMUCR, DRP)) | (i << bit_shift(SYS, MMUCR, DRP));
 		sysreg_write(MMUCR, mmucr);
 
@@ -60,3 +60,19 @@
 	}
 	sysreg_write(MMUCR, mmucr_save);
 }
+
+void tlb_flush() {
+	uint32_t i, mmucr, mmucr_save;
+
+	mmucr_save = sysreg_read(MMUCR);
+	sysreg_write(TLBEHI, 0);
+	sysreg_write(TLBELO, 0);
+	for (i = 0; i < TLB_SIZE; i++) {
+		mmucr = (mmucr_save & ~bit_mask(SYS, MMUCR, DRP)) | (i << bit_shift(SYS, MMUCR, DRP));
+		sysreg_write(MMUCR, mmucr);
+
+		__builtin_tlbw();
+		cpu_sync_pipeline();
+	}
+	sysreg_write(MMUCR, mmucr_save);
+}

==== //depot/projects/avr32/src/sys/avr32/avr32/uboot.c#2 (text+ko) ====

@@ -25,9 +25,6 @@
 				if (tag->u.mem_range.size > 0) {
 					phys_avail[0] = AVR32_P1_TO_PHYS(&_end);
 					phys_avail[1] = tag->u.mem_range.addr + tag->u.mem_range.size;
-					printf("Memory start: %x to %x\n",
-						phys_avail[0],
-						phys_avail[1]);
 				}
 				break;
 

==== //depot/projects/avr32/src/sys/avr32/avr32/vm_machdep.c#2 (text+ko) ====

@@ -50,6 +50,8 @@
 #include <vm/vm_map.h>
 #include <vm/vm_extern.h>
 
+#include <machine/cpu.h>
+#include <machine/pcb.h>
 #include <machine/debug.h>
 
 /*
@@ -95,7 +97,8 @@
 }
 
 void cpu_thread_alloc(struct thread *td) {
-	avr32_impl();
+	td->td_pcb = (struct pcb *)(td->td_kstack + td->td_kstack_pages * PAGE_SIZE) - 1;
+	td->td_frame = &td->td_pcb->pcb_regs;
 }
 
 /*

==== //depot/projects/avr32/src/sys/avr32/conf/NGW100#2 (text+ko) ====

@@ -9,12 +9,21 @@
 hints		"NGW100.hints"
 
 makeoptions	DEBUG=-g		#Build kernel with gdb(1) debug symbols
-options			VERBOSE_SYSINIT
+options		VERBOSE_SYSINIT
 #options		DDB
 #options		KDB
+#options		GDB
 
+options		MUTEX_DEBUG
+#options		WITNESS
+#options		WITNESS_KDB
+#options		WITNESS_SKIPSPIN
+options		INVARIANTS
+options		INVARIANT_SUPPORT
+options		DIAGNOSTIC
+
 options		SCHED_4BSD		#4BSD scheduler
-options		INET			#InterNETworking
+#options		INET			#InterNETworking
 #ioptions		NFSCLIENT		#Network Filesystem Client
 #options		NFS_ROOT		#NFS usable as /, requires NFSCLIENT
 #options		PSEUDOFS		#Pseudo-filesystem framework
@@ -35,7 +44,7 @@
 #device		atmel_ssc	# Sync Serial controller
 #device		atmel_mci	# Media card interface
 
-device		loop
-device		ether
+#device		loop
+#device		ether
 #device		md
 #device		mem

==== //depot/projects/avr32/src/sys/avr32/include/atomic.h#2 (text+ko) ====

@@ -38,7 +38,7 @@
  * antab todo: Make this atomic. when needed
  */
 
-#ifndef	_MACHINE_ATOMIC_H_
+#ifndef _MACHINE_ATOMIC_H_
 #define	_MACHINE_ATOMIC_H_
 
 #include <sys/types.h>
@@ -47,6 +47,10 @@
 #include <machine/sysarch.h>
 #endif
 
+#define mb()
+#define wmb()
+#define rmb()
+
 #ifdef _KERNEL
 static __inline void
 atomic_set_32(volatile uint32_t *address, uint32_t setmask)

==== //depot/projects/avr32/src/sys/avr32/include/cpu.h#2 (text+ko) ====

@@ -33,6 +33,8 @@
 #include <machine/psl.h>
 #include <machine/endian.h>
 #include <machine/frame.h>
+#include <machine/reg.h>
+#include <machine/reg_sys.h>
 
 // Macros for segment addressing
 #define AVR32_SEG_P0			0x00000000
@@ -45,8 +47,9 @@
 #define AVR32_P2_TO_PHYS(x)		((unsigned)(x) & ~AVR32_SEG_MASK)
 #define AVR32_PHYS_TO_P1(x)		((unsigned)(x) | AVR32_SEG_P1)
 #define AVR32_PHYS_TO_P2(x)		((unsigned)(x) | AVR32_SEG_P2)
+#define AVR32_MODE_USER			bit_value(SYS, SR, MODE, 0)
 
-#define TRAPF_USERMODE(frame)	((frame->regs.sr & PSR_MODE) == PSR_USR32_MODE)
+#define TRAPF_USERMODE(frame)	((frame->regs.sr & bit_mask(SYS, SR, MODE)) == AVR32_MODE_USER)
 #define TRAPF_PC(tfp)			((tfp)->regs.pc)
 #define cpu_getstack(td)		((td)->td_frame->regs.sp)
 //#define cpu_setstack(td, sp)	((td)->td_frame->sp = (sp))

==== //depot/projects/avr32/src/sys/avr32/include/cpufunc.h#2 (text+ko) ====

@@ -45,5 +45,11 @@
 register_t intr_disable(void);
 void intr_restore(register_t s);
 
+static __inline void
+breakpoint(void)
+{
+	__asm __volatile ("breakpoint");
+}
+
 #endif	/* _KERNEL */
 #endif	/* _MACHINE_CPUFUNC_H_ */

==== //depot/projects/avr32/src/sys/avr32/include/db_machdep.h#2 (text+ko) ====

@@ -37,16 +37,18 @@
 typedef vm_offset_t	db_addr_t;
 typedef int		db_expr_t;
 
-#define	PC_REGS()	((db_addr_t)kdb_thrctx->pcb_pc)
+#define	PC_REGS()	((db_addr_t)kdb_thrctx->pcb_regs.regs.pc)
 
-#define	BKPT_INST	(KERNEL_BREAKPOINT)
-#define	BKPT_SIZE	(4)
+#define	BKPT_INST		(0xD673)
+#define	BKPT_SIZE		(2)
 #define	BKPT_SET(inst)	(BKPT_INST)
 
-#define	BKPT_SKIP do {							\
-	kdb_frame->tf_pc += BKPT_SIZE; \
+#define	BKPT_SKIP do {						\
+	kdb_frame->regs.pc += BKPT_SIZE;		\
 } while (0)
 
+#define SOFTWARE_SSTEP	1
+
 #define T_BREAKPOINT	0xffff
 #define	IS_BREAKPOINT_TRAP(type, code)	(type == T_BREAKPOINT)
 

==== //depot/projects/avr32/src/sys/avr32/include/pcpu.h#2 (text+ko) ====

@@ -39,9 +39,9 @@
 
 struct vmspace;
 
-#define	PCPU_MD_FIELDS												\
-	 struct pmap	*pc_curpmap;        /* pmap of curthread */		\
-	u_int32_t		pc_next_asid;		/* next ASID to alloc */	\
+#define	PCPU_MD_FIELDS													\
+	struct pmap		*pc_curpmap;		/* pmap of curthread */			\
+	u_int32_t		pc_asid_next;		/* next ASID to alloc */		\
 	u_int32_t		pc_asid_generation;	/* current ASID generation */
 
 struct pcb;
@@ -50,15 +50,14 @@
 extern struct pcpu *pcpup;
 extern struct pcpu __pcpu;
 
-#define	PCPU_GET(member)	(__pcpu.pc_ ## member)
-
 /*
  * XXX The implementation of this operation should be made atomic
  * with respect to preemption.
  */
+#define	PCPU_GET(member)		(__pcpu.pc_ ## member)
 #define	PCPU_ADD(member, value)	(__pcpu.pc_ ## member += (value))
-#define	PCPU_INC(member)	PCPU_ADD(member, 1)
-#define	PCPU_PTR(member)	(&__pcpu.pc_ ## member)
+#define	PCPU_INC(member)		PCPU_ADD(member, 1)
+#define	PCPU_PTR(member)		(&__pcpu.pc_ ## member)
 #define	PCPU_SET(member,value)	(__pcpu.pc_ ## member = (value))
 
 #endif	/* _KERNEL */

==== //depot/projects/avr32/src/sys/avr32/include/pte.h#2 (text+ko) ====

@@ -61,6 +61,7 @@
 #define PTE_DIRTY			bit_offset(SYS, TLBELO, D)		/* Dirty */
 #define pfn_get(x)			(x & bit_mask(SYS, TLBELO, PFN))
 #define pfn_set(x, pfn)		x &= ~bit_mask(SYS, TLBELO, PFN); x |= (pfn & bit_mask(SYS, TLBELO, PFN));
+#define PTE_RW				(PTE_PERM_READ | PTE_PERM_WRITE)
 
 // Page size, not set in PTE, always 4K
 #define PTE_SIZE_1K			bit_value(SYS, TLBELO, SZ, 0)

==== //depot/projects/avr32/src/sys/avr32/include/tlb.h#2 (text+ko) ====

@@ -1,6 +1,9 @@
 #ifndef _MACHINE_TLB_H_
 #define _MACHINE_TLB_H_
 
-void tlb_dump(void);
+#define TLB_SIZE		32	/* Number of TLB entries, this should be read from config1 */
+
+void tlb_dump(void);		/* Dump content of TLB to console */
+void tlb_flush(void);		/* Invalid all TLB entries */
 
 #endif // !_MACHINE_TLB_H_

==== //depot/projects/avr32/src/sys/conf/files.avr32#2 (text+ko) ====

@@ -19,6 +19,11 @@
 avr32/avr32/at32.c		standard
 avr32/avr32/trap.c		standard
 avr32/avr32/tlb.c		standard
+avr32/avr32/db_interface.c	optional	ddb
+avr32/avr32/db_trace.c		optional	ddb
+avr32/avr32/db_disasm.c		optional	gdb
+avr32/avr32/stack_machdep.c	optional	ddb | stack
+avr32/avr32/gdb_machdep.c	optional	gdb
 
 libkern/ashldi3.c		standard
 libkern/ashrdi3.c		standard



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902012344.n11NioTZ069636>