summaryrefslogtreecommitdiffstats
path: root/sys/arm/sa11x0
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-09-23 22:32:33 +0000
committercognet <cognet@FreeBSD.org>2004-09-23 22:32:33 +0000
commit89fa389a2225d680279dad1e970852df17a80a0e (patch)
tree877b3faf1050d99e83e60b24dfd5b6501e4a8799 /sys/arm/sa11x0
parentf7c7e8938bb816a7728a9042f675c0f292c58743 (diff)
downloadFreeBSD-src-89fa389a2225d680279dad1e970852df17a80a0e.zip
FreeBSD-src-89fa389a2225d680279dad1e970852df17a80a0e.tar.gz
Now that we have pmap_growkernel(), use more KVA.
Diffstat (limited to 'sys/arm/sa11x0')
-rw-r--r--sys/arm/sa11x0/assabet_machdep.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c
index 7762440..78dace5 100644
--- a/sys/arm/sa11x0/assabet_machdep.c
+++ b/sys/arm/sa11x0/assabet_machdep.c
@@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <sys/buf.h>
#include <sys/exec.h>
+#include <sys/kdb.h>
#include <machine/reg.h>
#include <machine/cpu.h>
@@ -97,8 +98,9 @@ __FBSDID("$FreeBSD$");
#define KERNEL_PT_IO 3 /* Page table for mapping IO */
#define KERNEL_PT_IRQ 2 /* Page table for mapping irq handler */
#define KERNEL_PT_KERNEL 1 /* Page table for mapping kernel */
-#define KERNEL_PT_VMDATA 4 /* Page tables for mapping kernel VM */
-#define KERNEL_PT_VMDATA_NUM 12 /* start with 16MB of KVM */
+#define KERNEL_PT_L1 4 /* Page table for mapping l1pt */
+#define KERNEL_PT_VMDATA 5 /* Page tables for mapping kernel VM */
+#define KERNEL_PT_VMDATA_NUM 4 /* start with 16MB of KVM */
#define NUM_KERNEL_PTS (KERNEL_PT_VMDATA + KERNEL_PT_VMDATA_NUM)
/* Define various stack sizes in pages */
@@ -154,6 +156,19 @@ bus_dma_get_range(void)
return (NULL);
}
+int
+bus_dma_get_range_nb(void)
+{
+ return (0);
+}
+
+void
+cpu_reset()
+{
+ cpu_halt();
+ while (1);
+}
+
#define CPU_SA110_CACHE_CLEAN_SIZE (0x4000 * 2)
void *
@@ -168,6 +183,7 @@ initarm(void *arg, void *arg2)
u_int kerneldatasize, symbolsize;
u_int l1pagetable;
vm_offset_t freemempos;
+ vm_offset_t lastalloced;
vm_size_t pt_size;
int i = 0;
uint32_t fake_preload[35];
@@ -220,6 +236,7 @@ initarm(void *arg, void *arg2)
kerneldatasize = (u_int32_t)&end - (u_int32_t)KERNEL_TEXT_BASE;
symbolsize = 0;
freemempos = (vm_offset_t)round_page(physical_freestart);
+ printf("freemempos %p\n", (void*)freemempos);
memset((void *)freemempos, 0, 256*1024);
/* Define a macro to simplify memory allocation */
#define valloc_pages(var, np) \
@@ -266,6 +283,7 @@ initarm(void *arg, void *arg2)
/* Allocate pages for process 0 kernel stack and uarea */
valloc_pages(proc0_uarea, UAREA_PAGES);
+ lastalloced = proc0_uarea.pv_va;
/*
* Now we start construction of the L1 page table
@@ -282,6 +300,8 @@ initarm(void *arg, void *arg2)
&kernel_pt_table[KERNEL_PT_KERNEL]);
pmap_link_l2pt(l1pagetable, 0xd0000000,
&kernel_pt_table[KERNEL_PT_IO]);
+ pmap_link_l2pt(l1pagetable, lastalloced & ~((L1_S_SIZE * 4) - 1),
+ &kernel_pt_table[KERNEL_PT_L1]);
pmap_link_l2pt(l1pagetable, 0x90000000, &kernel_pt_table[KERNEL_PT_IRQ]);
pmap_link_l2pt(l1pagetable, MDROOT_ADDR,
&md_bla);
@@ -291,8 +311,10 @@ initarm(void *arg, void *arg2)
pmap_map_chunk(l1pagetable, KERNBASE, KERNBASE,
(uint32_t)&end - KERNBASE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
/* Map the stack pages */
+ printf("avant irq %p %p\n", (void*)irqstack.pv_va, (void*)irqstack.pv_pa);
pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+ printf("apres irq\n");
pmap_map_chunk(l1pagetable, md_addr.pv_va, md_addr.pv_pa,
MDSIZE * 1024, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
pmap_map_chunk(l1pagetable, abtstack.pv_va, abtstack.pv_pa,
@@ -385,9 +407,10 @@ initarm(void *arg, void *arg2)
got_mmu = 1;
arm_vector_init(ARM_VECTORS_LOW, ARM_VEC_ALL);
+ pmap_curmaxkvaddr = freemempos + KERNEL_PT_VMDATA_NUM * 0x400000;
pmap_bootstrap(KERNEL_VM_BASE,
- KERNEL_VM_BASE + KERNEL_PT_VMDATA_NUM * 0x400000, &kernel_l1pt);
+ 0xd0000000, &kernel_l1pt);
mutex_init();
@@ -401,6 +424,7 @@ initarm(void *arg, void *arg2)
/* Do basic tuning, hz etc */
init_param1();
init_param2(physmem);
+ kdb_init();
avail_end = 0xc0000000 + 0x02000000 - 1;
return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP));
}
OpenPOWER on IntegriCloud