summaryrefslogtreecommitdiffstats
path: root/sys/arm/at91/at91_machdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arm/at91/at91_machdep.c')
-rw-r--r--sys/arm/at91/at91_machdep.c46
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[];
OpenPOWER on IntegriCloud