diff options
Diffstat (limited to 'sys/arm/at91/at91_machdep.c')
-rw-r--r-- | sys/arm/at91/at91_machdep.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c index 2eb00a1d..ad38410 100644 --- a/sys/arm/at91/at91_machdep.c +++ b/sys/arm/at91/at91_machdep.c @@ -116,36 +116,22 @@ extern u_int undefined_handler_address; struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; -/* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; - -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; - /* Static device mappings. */ const struct arm_devmap_entry at91_devmap[] = { /* - * Map the on-board devices VA == PA so that we can access them - * with the MMU on or off. + * Map the critical on-board devices. The interrupt vector at + * 0xffff0000 makes it impossible to map them PA == VA, so we map all + * 0xfffxxxxx addresses to 0xdffxxxxx. This covers all critical devices + * on all members of the AT91SAM9 and AT91RM9200 families. */ { - /* - * This at least maps the interrupt controller, the UART - * and the timer. Other devices should use newbus to - * map their memory anyway. - */ 0xdff00000, 0xfff00000, 0x00100000, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, + /* There's a notion that we should do the rest of these lazily. */ /* * We can't just map the OHCI registers VA == PA, because * AT91xx_xxx_BASE belongs to the userland address space. @@ -163,16 +149,16 @@ const struct arm_devmap_entry at91_devmap[] = { * on this chip select for a VA/PA mapping. */ /* Internal Memory 1MB */ + AT91RM92_OHCI_VA_BASE, AT91RM92_OHCI_BASE, - AT91RM92_OHCI_PA_BASE, 0x00100000, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, { /* CompactFlash controller. Portion of EBI CS4 1MB */ + AT91RM92_CF_VA_BASE, AT91RM92_CF_BASE, - AT91RM92_CF_PA_BASE, 0x00100000, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, @@ -183,16 +169,16 @@ const struct arm_devmap_entry at91_devmap[] = { */ { /* Internal Memory 1MB */ + AT91SAM9G20_OHCI_VA_BASE, AT91SAM9G20_OHCI_BASE, - AT91SAM9G20_OHCI_PA_BASE, 0x00100000, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, { /* EBI CS3 256MB */ + AT91SAM9G20_NAND_VA_BASE, AT91SAM9G20_NAND_BASE, - AT91SAM9G20_NAND_PA_BASE, AT91SAM9G20_NAND_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, @@ -202,8 +188,8 @@ const struct arm_devmap_entry at91_devmap[] = { */ { /* Internal Memory 1MB */ + AT91SAM9G45_OHCI_VA_BASE, AT91SAM9G45_OHCI_BASE, - AT91SAM9G45_OHCI_PA_BASE, 0x00100000, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, @@ -211,6 +197,18 @@ const struct arm_devmap_entry at91_devmap[] = { { 0, 0, 0, 0, 0, } }; +/* Physical and virtual addresses for some global pages */ + +vm_paddr_t phys_avail[10]; +vm_paddr_t dump_avail[4]; + +struct pv_addr systempage; +struct pv_addr msgbufpv; +struct pv_addr irqstack; +struct pv_addr undstack; +struct pv_addr abtstack; +struct pv_addr kernelstack; + #ifdef LINUX_BOOT_ABI extern int membanks; extern int memstart[]; |