Commit 41a74af7 authored by Russell King's avatar Russell King

[ARM] Clean up map_desc structure

- remove LAST_DESC in favour of passing the array size to iotable_init
- replace domain and permission bits/cache attributes with a generic
  "type", which can be easily converted to the required domain and
  permission bits/cache attributes at run time.  It also removes the
  possibility for getting such things wrong and (accidentally)
  allowing all user space to fiddle with devices directly.
parent 0d899e26
/* /*
* linux/arch/arm/mach-xscale/mm.c * linux/arch/arm/mach-xscale/mm.c
*/ */
#include <linux/kernel.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -14,11 +14,10 @@ ...@@ -14,11 +14,10 @@
static struct map_desc adifcc_io_desc[] __initdata = { static struct map_desc adifcc_io_desc[] __initdata = {
/* on-board devices */ /* on-board devices */
{ 0xff400000, 0x00400000, 0x00300000, DOMAIN_IO, 0, 1, 0, 0}, { 0xff400000, 0x00400000, 0x00300000, MT_DEVICE }
LAST_DESC
}; };
void __init adifcc_map_io(void) void __init adifcc_map_io(void)
{ {
iotable_init(adifcc_io_desc); iotable_init(adifcc_io_desc, ARRAY_SIZE(adifcc_io_desc));
} }
...@@ -10,8 +10,7 @@ ...@@ -10,8 +10,7 @@
* Changelog: * Changelog:
* 09-Apr-2001 W/TTC Created * 09-Apr-2001 W/TTC Created
*/ */
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -19,14 +18,13 @@ ...@@ -19,14 +18,13 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
static struct map_desc anakin_io_desc[] __initdata = { static struct map_desc anakin_io_desc[] __initdata = {
{ IO_BASE, IO_START, IO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { IO_BASE, IO_START, IO_SIZE, MT_DEVICE },
{ FLASH_BASE, FLASH_START, FLASH_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { FLASH_BASE, FLASH_START, FLASH_SIZE, MT_DEVICE },
{ VGA_BASE, VGA_START, VGA_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { VGA_BASE, VGA_START, VGA_SIZE, MT_DEVICE }
LAST_DESC
}; };
void __init void __init
anakin_map_io(void) anakin_map_io(void)
{ {
iotable_init(anakin_io_desc); iotable_init(anakin_io_desc, ARRAY_SIZE(anakin_io_desc));
} }
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -48,18 +49,16 @@ extern void clps711x_init_irq(void); ...@@ -48,18 +49,16 @@ extern void clps711x_init_irq(void);
*/ */
static struct map_desc autcpu12_io_desc[] __initdata = { static struct map_desc autcpu12_io_desc[] __initdata = {
/* virtual, physical, length, domain, r, w, c, b */ /* virtual, physical, length, type */
/* memory-mapped extra io and CS8900A Ethernet chip */ /* memory-mapped extra io and CS8900A Ethernet chip */
/* ethernet chip */ /* ethernet chip */
{ AUTCPU12_VIRT_CS8900A, AUTCPU12_PHYS_CS8900A, SZ_1M, DOMAIN_IO, 0, 1, 0, 0 }, { AUTCPU12_VIRT_CS8900A, AUTCPU12_PHYS_CS8900A, SZ_1M, MT_DEVICE }
LAST_DESC
}; };
void __init autcpu12_map_io(void) void __init autcpu12_map_io(void)
{ {
clps711x_map_io(); clps711x_map_io();
iotable_init(autcpu12_io_desc); iotable_init(autcpu12_io_desc, ARRAY_SIZE(autcpu12_io_desc));
} }
MACHINE_START(AUTCPU12, "autronix autcpu12") MACHINE_START(AUTCPU12, "autronix autcpu12")
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -40,14 +41,13 @@ extern void clps711x_map_io(void); ...@@ -40,14 +41,13 @@ extern void clps711x_map_io(void);
* ethernet driver, perhaps. * ethernet driver, perhaps.
*/ */
static struct map_desc cdb89712_io_desc[] __initdata = { static struct map_desc cdb89712_io_desc[] __initdata = {
{ ETHER_BASE, ETHER_START, ETHER_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { ETHER_BASE, ETHER_START, ETHER_SIZE, MT_DEVICE }
LAST_DESC
}; };
static void __init cdb89712_map_io(void) static void __init cdb89712_map_io(void)
{ {
clps711x_map_io(); clps711x_map_io();
iotable_init(cdb89712_io_desc); iotable_init(cdb89712_io_desc, ARRAY_SIZE(cdb89712_io_desc));
} }
MACHINE_START(CDB89712, "Cirrus-CDB89712") MACHINE_START(CDB89712, "Cirrus-CDB89712")
......
...@@ -19,13 +19,12 @@ ...@@ -19,13 +19,12 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/sched.h> #include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/pgtable.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgtable.h>
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -52,22 +51,20 @@ extern void clps711x_map_io(void); ...@@ -52,22 +51,20 @@ extern void clps711x_map_io(void);
* happens). * happens).
*/ */
static struct map_desc edb7211_io_desc[] __initdata = { static struct map_desc edb7211_io_desc[] __initdata = {
/* virtual, physical, length, domain, r, w, c, b */ /* virtual, physical, length, type */
/* memory-mapped extra keyboard row and CS8900A Ethernet chip */ /* memory-mapped extra keyboard row and CS8900A Ethernet chip */
{ EP7211_VIRT_EXTKBD, EP7211_PHYS_EXTKBD, SZ_1M, DOMAIN_IO, 0, 1, 0, 0 }, { EP7211_VIRT_EXTKBD, EP7211_PHYS_EXTKBD, SZ_1M, MT_DEVICE },
{ EP7211_VIRT_CS8900A, EP7211_PHYS_CS8900A, SZ_1M, DOMAIN_IO, 0, 1, 0, 0 }, { EP7211_VIRT_CS8900A, EP7211_PHYS_CS8900A, SZ_1M, MT_DEVICE },
/* flash banks */ /* flash banks */
{ EP7211_VIRT_FLASH1, EP7211_PHYS_FLASH1, SZ_8M, DOMAIN_KERNEL, 0, 1, 0, 0 }, { EP7211_VIRT_FLASH1, EP7211_PHYS_FLASH1, SZ_8M, MT_DEVICE },
{ EP7211_VIRT_FLASH2, EP7211_PHYS_FLASH2, SZ_8M, DOMAIN_KERNEL, 0, 1, 0, 0 }, { EP7211_VIRT_FLASH2, EP7211_PHYS_FLASH2, SZ_8M, MT_DEVICE }
LAST_DESC
}; };
void __init edb7211_map_io(void) void __init edb7211_map_io(void)
{ {
clps711x_map_io(); clps711x_map_io();
iotable_init(edb7211_io_desc); iotable_init(edb7211_io_desc, ARRAY_SIZE(edb7211_io_desc));
} }
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -31,40 +32,14 @@ ...@@ -31,40 +32,14 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/hardware/clps7111.h> #include <asm/hardware/clps7111.h>
#if 0 //def CONFIG_DISCONTIGMEM
/*
* The assumption of maximum 4 discontiguous memory banks is present
* in several places in the ARM kernel, including the parameter block
* (this affects boot loaders, too). Banks do not necessarily
* correspond 1:1 with NUMA nodes, although they usually will,
* especially if they are widely discontiguous.
*
* - note that the parameter block is depreciated for new implementations
* - also note that discontig_node_data is actually used
* -- rmk
*/
static bootmem_data_t node_bootmem_data[4];
pg_data_t clps711x_node_data[4] = {
{ bdata: &node_bootmem_data[0] },
{ bdata: &node_bootmem_data[1] },
{ bdata: &node_bootmem_data[2] },
{ bdata: &node_bootmem_data[3] },
};
#endif
/* /*
* This maps the generic CLPS711x registers * This maps the generic CLPS711x registers
*/ */
static struct map_desc clps711x_io_desc[] __initdata = { static struct map_desc clps711x_io_desc[] __initdata = {
{ CLPS7111_VIRT_BASE, CLPS7111_PHYS_BASE, 1048576, DOMAIN_IO, 0, 1 }, { CLPS7111_VIRT_BASE, CLPS7111_PHYS_BASE, 1048576, MT_DEVICE }
LAST_DESC
}; };
void __init clps711x_map_io(void) void __init clps711x_map_io(void)
{ {
iotable_init(clps711x_io_desc); iotable_init(clps711x_io_desc, ARRAY_SIZE(clps711x_io_desc));
} }
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -43,9 +44,8 @@ extern void clps711x_map_io(void); ...@@ -43,9 +44,8 @@ extern void clps711x_map_io(void);
* We map both here. * We map both here.
*/ */
static struct map_desc p720t_io_desc[] __initdata = { static struct map_desc p720t_io_desc[] __initdata = {
{ SYSPLD_VIRT_BASE, SYSPLD_PHYS_BASE, 1048576, DOMAIN_IO, 0, 1 }, { SYSPLD_VIRT_BASE, SYSPLD_PHYS_BASE, 1048576, MT_DEVICE },
{ 0xfe400000, 0x10400000, 1048576, DOMAIN_IO, 0, 1 }, { 0xfe400000, 0x10400000, 1048576, MT_DEVICE }
LAST_DESC
}; };
static void __init static void __init
...@@ -77,7 +77,7 @@ fixup_p720t(struct machine_desc *desc, struct tag *tag, ...@@ -77,7 +77,7 @@ fixup_p720t(struct machine_desc *desc, struct tag *tag,
static void __init p720t_map_io(void) static void __init p720t_map_io(void)
{ {
clps711x_map_io(); clps711x_map_io();
iotable_init(p720t_io_desc); iotable_init(p720t_io_desc, ARRAY_SIZE(p720t_io_desc));
} }
MACHINE_START(P720T, "ARM-Prospector720T") MACHINE_START(P720T, "ARM-Prospector720T")
......
/* /*
* linux/arch/arm/mm/mm-cl7500.c * linux/arch/arm/mach-clps7500/core.c
* *
* Copyright (C) 1998 Russell King * Copyright (C) 1998 Russell King
* Copyright (C) 1999 Nexus Electronics Ltd * Copyright (C) 1999 Nexus Electronics Ltd
* *
* Extra MM routines for CL7500 architecture * Extra MM routines for CL7500 architecture
*/ */
#include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -215,16 +216,15 @@ static void __init clps7500_init_irq(void) ...@@ -215,16 +216,15 @@ static void __init clps7500_init_irq(void)
} }
static struct map_desc cl7500_io_desc[] __initdata = { static struct map_desc cl7500_io_desc[] __initdata = {
{ IO_BASE, IO_START, IO_SIZE , DOMAIN_IO, 0, 1 }, /* IO space */ { IO_BASE, IO_START, IO_SIZE, MT_DEVICE }, /* IO space */
{ ISA_BASE, ISA_START, ISA_SIZE , DOMAIN_IO, 0, 1 }, /* ISA space */ { ISA_BASE, ISA_START, ISA_SIZE, MT_DEVICE }, /* ISA space */
{ FLASH_BASE, FLASH_START, FLASH_SIZE, DOMAIN_IO, 0, 1 }, /* Flash */ { FLASH_BASE, FLASH_START, FLASH_SIZE, MT_DEVICE }, /* Flash */
{ LED_BASE, LED_START, LED_SIZE , DOMAIN_IO, 0, 1 }, /* LED */ { LED_BASE, LED_START, LED_SIZE, MT_DEVICE } /* LED */
LAST_DESC
}; };
static void __init clps7500_map_io(void) static void __init clps7500_map_io(void)
{ {
iotable_init(cl7500_io_desc); iotable_init(cl7500_io_desc, ARRAY_SIZE(cl7500_io_desc));
} }
MACHINE_START(CLPS7500, "CL-PS7500") MACHINE_START(CLPS7500, "CL-PS7500")
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* *
* Extra MM routines for the EBSA-110 architecture * Extra MM routines for the EBSA-110 architecture
*/ */
#include <linux/kernel.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -71,22 +72,21 @@ static struct map_desc ebsa110_io_desc[] __initdata = { ...@@ -71,22 +72,21 @@ static struct map_desc ebsa110_io_desc[] __initdata = {
/* /*
* sparse external-decode ISAIO space * sparse external-decode ISAIO space
*/ */
{ IRQ_STAT, TRICK4_PHYS, PGDIR_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, /* IRQ_STAT/IRQ_MCLR */ { IRQ_STAT, TRICK4_PHYS, PGDIR_SIZE, MT_DEVICE }, /* IRQ_STAT/IRQ_MCLR */
{ IRQ_MASK, TRICK3_PHYS, PGDIR_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, /* IRQ_MASK/IRQ_MSET */ { IRQ_MASK, TRICK3_PHYS, PGDIR_SIZE, MT_DEVICE }, /* IRQ_MASK/IRQ_MSET */
{ SOFT_BASE, TRICK1_PHYS, PGDIR_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, /* SOFT_BASE */ { SOFT_BASE, TRICK1_PHYS, PGDIR_SIZE, MT_DEVICE }, /* SOFT_BASE */
{ PIT_BASE, TRICK0_PHYS, PGDIR_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, /* PIT_BASE */ { PIT_BASE, TRICK0_PHYS, PGDIR_SIZE, MT_DEVICE }, /* PIT_BASE */
/* /*
* self-decode ISAIO space * self-decode ISAIO space
*/ */
{ ISAIO_BASE, ISAIO_PHYS, ISAIO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { ISAIO_BASE, ISAIO_PHYS, ISAIO_SIZE, MT_DEVICE },
{ ISAMEM_BASE, ISAMEM_PHYS, ISAMEM_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { ISAMEM_BASE, ISAMEM_PHYS, ISAMEM_SIZE, MT_DEVICE }
LAST_DESC
}; };
static void __init ebsa110_map_io(void) static void __init ebsa110_map_io(void)
{ {
iotable_init(ebsa110_io_desc); iotable_init(ebsa110_io_desc, ARRAY_SIZE(ebsa110_io_desc));
} }
MACHINE_START(EBSA110, "EBSA110") MACHINE_START(EBSA110, "EBSA110")
......
...@@ -19,14 +19,11 @@ ...@@ -19,14 +19,11 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/sched.h> #include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -34,16 +31,15 @@ ...@@ -34,16 +31,15 @@
/* Page table mapping for I/O region */ /* Page table mapping for I/O region */
static struct map_desc epxa10db_io_desc[] __initdata = { static struct map_desc epxa10db_io_desc[] __initdata = {
{ IO_ADDRESS(EXC_REGISTERS_BASE), EXC_REGISTERS_BASE, SZ_16K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(EXC_REGISTERS_BASE), EXC_REGISTERS_BASE, SZ_16K, MT_DEVICE },
{IO_ADDRESS(EXC_PLD_BLOCK0_BASE), EXC_PLD_BLOCK0_BASE, SZ_16K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(EXC_PLD_BLOCK0_BASE), EXC_PLD_BLOCK0_BASE, SZ_16K, MT_DEVICE },
{IO_ADDRESS(EXC_PLD_BLOCK1_BASE), EXC_PLD_BLOCK1_BASE, SZ_16K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(EXC_PLD_BLOCK1_BASE), EXC_PLD_BLOCK1_BASE, SZ_16K, MT_DEVICE },
{IO_ADDRESS(EXC_PLD_BLOCK2_BASE), EXC_PLD_BLOCK2_BASE, SZ_16K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(EXC_PLD_BLOCK2_BASE), EXC_PLD_BLOCK2_BASE, SZ_16K, MT_DEVICE },
{IO_ADDRESS(EXC_PLD_BLOCK3_BASE), EXC_PLD_BLOCK3_BASE, SZ_16K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(EXC_PLD_BLOCK3_BASE), EXC_PLD_BLOCK3_BASE, SZ_16K, MT_DEVICE },
{ FLASH_VADDR(EXC_EBI_BLOCK0_BASE), EXC_EBI_BLOCK0_BASE, SZ_16M , DOMAIN_IO, 0, 1}, { FLASH_VADDR(EXC_EBI_BLOCK0_BASE), EXC_EBI_BLOCK0_BASE, SZ_16M, MT_DEVICE }
LAST_DESC
}; };
void __init epxa10db_map_io(void) void __init epxa10db_map_io(void)
{ {
iotable_init(epxa10db_io_desc); iotable_init(epxa10db_io_desc, ARRAY_SIZE(epxa10db_io_desc));
} }
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
* Extra MM routines for the EBSA285 architecture * Extra MM routines for the EBSA285 architecture
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -28,9 +29,8 @@ ...@@ -28,9 +29,8 @@
* it means that we have extra bullet protection on our feet. * it means that we have extra bullet protection on our feet.
*/ */
static struct map_desc fb_common_io_desc[] __initdata = { static struct map_desc fb_common_io_desc[] __initdata = {
{ ARMCSR_BASE, DC21285_ARMCSR_BASE, ARMCSR_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { ARMCSR_BASE, DC21285_ARMCSR_BASE, ARMCSR_SIZE, MT_DEVICE },
{ XBUS_BASE, 0x40000000, XBUS_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { XBUS_BASE, 0x40000000, XBUS_SIZE, MT_DEVICE }
LAST_DESC
}; };
/* /*
...@@ -39,13 +39,12 @@ static struct map_desc fb_common_io_desc[] __initdata = { ...@@ -39,13 +39,12 @@ static struct map_desc fb_common_io_desc[] __initdata = {
*/ */
static struct map_desc ebsa285_host_io_desc[] __initdata = { static struct map_desc ebsa285_host_io_desc[] __initdata = {
#if defined(CONFIG_ARCH_FOOTBRIDGE) && defined(CONFIG_FOOTBRIDGE_HOST) #if defined(CONFIG_ARCH_FOOTBRIDGE) && defined(CONFIG_FOOTBRIDGE_HOST)
{ PCIMEM_BASE, DC21285_PCI_MEM, PCIMEM_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCIMEM_BASE, DC21285_PCI_MEM, PCIMEM_SIZE, MT_DEVICE },
{ PCICFG0_BASE, DC21285_PCI_TYPE_0_CONFIG, PCICFG0_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCICFG0_BASE, DC21285_PCI_TYPE_0_CONFIG, PCICFG0_SIZE, MT_DEVICE },
{ PCICFG1_BASE, DC21285_PCI_TYPE_1_CONFIG, PCICFG1_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCICFG1_BASE, DC21285_PCI_TYPE_1_CONFIG, PCICFG1_SIZE, MT_DEVICE },
{ PCIIACK_BASE, DC21285_PCI_IACK, PCIIACK_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCIIACK_BASE, DC21285_PCI_IACK, PCIIACK_SIZE, MT_DEVICE },
{ PCIO_BASE, DC21285_PCI_IO, PCIO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCIO_BASE, DC21285_PCI_IO, PCIO_SIZE, MT_DEVICE }
#endif #endif
LAST_DESC
}; };
/* /*
...@@ -53,33 +52,27 @@ static struct map_desc ebsa285_host_io_desc[] __initdata = { ...@@ -53,33 +52,27 @@ static struct map_desc ebsa285_host_io_desc[] __initdata = {
*/ */
static struct map_desc co285_io_desc[] __initdata = { static struct map_desc co285_io_desc[] __initdata = {
#ifdef CONFIG_ARCH_CO285 #ifdef CONFIG_ARCH_CO285
{ PCIO_BASE, DC21285_PCI_IO, PCIO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCIO_BASE, DC21285_PCI_IO, PCIO_SIZE, MT_DEVICE },
{ PCIMEM_BASE, DC21285_PCI_MEM, PCIMEM_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, { PCIMEM_BASE, DC21285_PCI_MEM, PCIMEM_SIZE, MT_DEVICE }
#endif #endif
LAST_DESC
}; };
void __init footbridge_map_io(void) void __init footbridge_map_io(void)
{ {
struct map_desc *desc = NULL;
/* /*
* Set up the common mapping first; we need this to * Set up the common mapping first; we need this to
* determine whether we're in host mode or not. * determine whether we're in host mode or not.
*/ */
iotable_init(fb_common_io_desc); iotable_init(fb_common_io_desc, ARRAY_SIZE(fb_common_io_desc));
/* /*
* Now, work out what we've got to map in addition on this * Now, work out what we've got to map in addition on this
* platform. * platform.
*/ */
if (machine_is_co285()) if (machine_is_co285())
desc = co285_io_desc; iotable_init(co285_io_desc, ARRAY_SIZE(co285_io_desc));
else if (footbridge_cfn_mode()) if (footbridge_cfn_mode())
desc = ebsa285_host_io_desc; iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
if (desc)
iotable_init(desc);
} }
#ifdef CONFIG_FOOTBRIDGE_ADDIN #ifdef CONFIG_FOOTBRIDGE_ADDIN
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* as published by the Free Software Foundation; either version * as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
#include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -76,17 +77,16 @@ static void __init ftvpci_init_irq(void) ...@@ -76,17 +77,16 @@ static void __init ftvpci_init_irq(void)
} }
static struct map_desc ftvpci_io_desc[] __initdata = { static struct map_desc ftvpci_io_desc[] __initdata = {
{ INTCONT_BASE, INTCONT_START, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, { INTCONT_BASE, INTCONT_START, 0x00001000, MT_DEVICE },
{ PLX_BASE, PLX_START, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, { PLX_BASE, PLX_START, 0x00001000, MT_DEVICE },
{ PCIO_BASE, PLX_IO_START, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, { PCIO_BASE, PLX_IO_START, 0x00100000, MT_DEVICE },
{ DUART_BASE, DUART_START, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, { DUART_BASE, DUART_START, 0x00001000, MT_DEVICE },
{ STATUS_BASE, STATUS_START, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, { STATUS_BASE, STATUS_START, 0x00001000, MT_DEVICE }
LAST_DESC
}; };
static void __init ftvpci_map_io(void) static void __init ftvpci_map_io(void)
{ {
iotable_init(ftvpci_io_desc); iotable_init(ftvpci_io_desc, ARRAY_SIZE(ftvpci_io_desc));
} }
MACHINE_START(NEXUSPCI, "FTV/PCI") MACHINE_START(NEXUSPCI, "FTV/PCI")
......
...@@ -20,14 +20,11 @@ ...@@ -20,14 +20,11 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/sched.h> #include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -53,26 +50,25 @@ ...@@ -53,26 +50,25 @@
*/ */
static struct map_desc integrator_io_desc[] __initdata = { static struct map_desc integrator_io_desc[] __initdata = {
{ IO_ADDRESS(INTEGRATOR_HDR_BASE), INTEGRATOR_HDR_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_HDR_BASE), INTEGRATOR_HDR_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_SC_BASE), INTEGRATOR_SC_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_SC_BASE), INTEGRATOR_SC_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_EBI_BASE), INTEGRATOR_EBI_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_EBI_BASE), INTEGRATOR_EBI_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_CT_BASE), INTEGRATOR_CT_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_CT_BASE), INTEGRATOR_CT_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_IC_BASE), INTEGRATOR_IC_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_IC_BASE), INTEGRATOR_IC_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_RTC_BASE), INTEGRATOR_RTC_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_RTC_BASE), INTEGRATOR_RTC_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_UART0_BASE), INTEGRATOR_UART0_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_UART0_BASE), INTEGRATOR_UART0_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_KBD_BASE), INTEGRATOR_KBD_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_KBD_BASE), INTEGRATOR_KBD_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_MOUSE_BASE), INTEGRATOR_MOUSE_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_MOUSE_BASE), INTEGRATOR_MOUSE_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_DBG_BASE), INTEGRATOR_DBG_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_DBG_BASE), INTEGRATOR_DBG_BASE, SZ_4K, MT_DEVICE },
{ IO_ADDRESS(INTEGRATOR_GPIO_BASE), INTEGRATOR_GPIO_BASE, SZ_4K , DOMAIN_IO, 0, 1}, { IO_ADDRESS(INTEGRATOR_GPIO_BASE), INTEGRATOR_GPIO_BASE, SZ_4K, MT_DEVICE },
{ PCI_MEMORY_VADDR, PHYS_PCI_MEM_BASE, SZ_16M , DOMAIN_IO, 0, 1}, { PCI_MEMORY_VADDR, PHYS_PCI_MEM_BASE, SZ_16M, MT_DEVICE },
{ PCI_CONFIG_VADDR, PHYS_PCI_CONFIG_BASE, SZ_16M , DOMAIN_IO, 0, 1}, { PCI_CONFIG_VADDR, PHYS_PCI_CONFIG_BASE, SZ_16M, MT_DEVICE },
{ PCI_V3_VADDR, PHYS_PCI_V3_BASE, SZ_64K , DOMAIN_IO, 0, 1}, { PCI_V3_VADDR, PHYS_PCI_V3_BASE, SZ_64K, MT_DEVICE },
{ PCI_IO_VADDR, PHYS_PCI_IO_BASE, SZ_64K , DOMAIN_IO, 0, 1}, { PCI_IO_VADDR, PHYS_PCI_IO_BASE, SZ_64K, MT_DEVICE }
LAST_DESC
}; };
void __init integrator_map_io(void) void __init integrator_map_io(void)
{ {
iotable_init(integrator_io_desc); iotable_init(integrator_io_desc, ARRAY_SIZE(integrator_io_desc));
} }
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
* *
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -32,17 +33,16 @@ ...@@ -32,17 +33,16 @@
* Standard IO mapping for all IOP310 based systems * Standard IO mapping for all IOP310 based systems
*/ */
static struct map_desc iop80310_std_desc[] __initdata = { static struct map_desc iop80310_std_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
// IOP310 Memory Mapped Registers // IOP310 Memory Mapped Registers
{ 0xe8001000, 0x00001000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, { 0xe8001000, 0x00001000, 0x00001000, MT_DEVICE },
// PCI I/O Space // PCI I/O Space
{ 0xfe000000, 0x90000000, 0x00020000, DOMAIN_IO, 0, 1, 0, 0 }, { 0xfe000000, 0x90000000, 0x00020000, MT_DEVICE }
LAST_DESC
}; };
void __init iop310_map_io(void) void __init iop310_map_io(void)
{ {
iotable_init(iop80310_std_desc); iotable_init(iop80310_std_desc, ARRAY_SIZE(iop80310_std_desc));
} }
/* /*
...@@ -50,10 +50,9 @@ void __init iop310_map_io(void) ...@@ -50,10 +50,9 @@ void __init iop310_map_io(void)
*/ */
#ifdef CONFIG_ARCH_IQ80310 #ifdef CONFIG_ARCH_IQ80310
static struct map_desc iq80310_io_desc[] __initdata = { static struct map_desc iq80310_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
// IQ80310 On-Board Devices // IQ80310 On-Board Devices
{ 0xfe800000, 0xfe800000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, { 0xfe800000, 0xfe800000, 0x00100000, MT_DEVICE }
LAST_DESC
}; };
void __init iq80310_map_io(void) void __init iq80310_map_io(void)
...@@ -65,7 +64,7 @@ void __init iq80310_map_io(void) ...@@ -65,7 +64,7 @@ void __init iq80310_map_io(void)
iop310_map_io(); iop310_map_io();
iotable_init(iq80310_io_desc); iotable_init(iq80310_io_desc, ARRAY_SIZE(iq80310_io_desc));
} }
#endif // CONFIG_ARCH_IQ80310 #endif // CONFIG_ARCH_IQ80310
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
* Extra MM routines for L7200 architecture * Extra MM routines for L7200 architecture
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/hardware.h> #include <asm/hardware.h>
...@@ -69,17 +70,16 @@ static void __init l7200_init_irq(void) ...@@ -69,17 +70,16 @@ static void __init l7200_init_irq(void)
} }
static struct map_desc l7200_io_desc[] __initdata = { static struct map_desc l7200_io_desc[] __initdata = {
{ IO_BASE, IO_START, IO_SIZE, DOMAIN_IO, 0, 1 ,0 ,0}, { IO_BASE, IO_START, IO_SIZE, MT_DEVICE },
{ IO_BASE_2, IO_START_2, IO_SIZE_2, DOMAIN_IO, 0, 1 ,0 ,0}, { IO_BASE_2, IO_START_2, IO_SIZE_2, MT_DEVICE },
{ AUX_BASE, AUX_START, AUX_SIZE, DOMAIN_IO, 0, 1 ,0 ,0}, { AUX_BASE, AUX_START, AUX_SIZE, MT_DEVICE },
{ FLASH1_BASE, FLASH1_START, FLASH1_SIZE, DOMAIN_IO, 0, 1 ,0 ,0}, { FLASH1_BASE, FLASH1_START, FLASH1_SIZE, MT_DEVICE },
{ FLASH2_BASE, FLASH2_START, FLASH2_SIZE, DOMAIN_IO, 0, 1 ,0 ,0}, { FLASH2_BASE, FLASH2_START, FLASH2_SIZE, MT_DEVICE }
LAST_DESC
}; };
static void __init l7200_map_io(void) static void __init l7200_map_io(void)
{ {
iotable_init(l7200_io_desc); iotable_init(l7200_io_desc, ARRAY_SIZE(l7200_io_desc));
} }
MACHINE_START(L7200, "LinkUp Systems L7200") MACHINE_START(L7200, "LinkUp Systems L7200")
......
...@@ -88,16 +88,15 @@ EXPORT_SYMBOL(pxa_gpio_mode); ...@@ -88,16 +88,15 @@ EXPORT_SYMBOL(pxa_gpio_mode);
* cache flush area. * cache flush area.
*/ */
static struct map_desc standard_io_desc[] __initdata = { static struct map_desc standard_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf6000000, 0x20000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA0 IO */ { 0xf6000000, 0x20000000, 0x01000000, MT_DEVICE }, /* PCMCIA0 IO */
{ 0xf7000000, 0x30000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA1 IO */ { 0xf7000000, 0x30000000, 0x01000000, MT_DEVICE }, /* PCMCIA1 IO */
{ 0xfc000000, 0x40000000, 0x01400000, DOMAIN_IO, 0, 1, 0, 0 }, /* Devs */ { 0xfc000000, 0x40000000, 0x01400000, MT_DEVICE }, /* Devs */
{ 0xfe000000, 0x44000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD */ { 0xfe000000, 0x44000000, 0x00200000, MT_DEVICE }, /* LCD */
{ 0xff000000, 0x48000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* Mem Ctl */ { 0xff000000, 0x48000000, 0x00200000, MT_DEVICE } /* Mem Ctl */
LAST_DESC
}; };
void __init pxa_map_io(void) void __init pxa_map_io(void)
{ {
iotable_init(standard_io_desc); iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
} }
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
* 2001-09-13: Cliff Brake <cbrake@accelent.com> * 2001-09-13: Cliff Brake <cbrake@accelent.com>
* Initial code * Initial code
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/fs.h> #include <linux/fs.h>
...@@ -69,45 +70,38 @@ static void __init idp_init_irq(void) ...@@ -69,45 +70,38 @@ static void __init idp_init_irq(void)
} }
static struct map_desc idp_io_desc[] __initdata = { static struct map_desc idp_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
#ifndef PXA_IDP_REV02 #ifndef PXA_IDP_REV02
{ IDP_CTRL_PORT_BASE, { IDP_CTRL_PORT_BASE,
IDP_CTRL_PORT_PHYS, IDP_CTRL_PORT_PHYS,
IDP_CTRL_PORT_SIZE, IDP_CTRL_PORT_SIZE,
DOMAIN_IO, MT_DEVICE },
0, 1, 0, 0 },
#endif #endif
{ IDP_IDE_BASE, { IDP_IDE_BASE,
IDP_IDE_PHYS, IDP_IDE_PHYS,
IDP_IDE_SIZE, IDP_IDE_SIZE,
DOMAIN_IO, MT_DEVICE },
0, 1, 0, 0 },
{ IDP_ETH_BASE, { IDP_ETH_BASE,
IDP_ETH_PHYS, IDP_ETH_PHYS,
IDP_ETH_SIZE, IDP_ETH_SIZE,
DOMAIN_IO, MT_DEVICE },
0, 1, 0, 0 },
{ IDP_COREVOLT_BASE, { IDP_COREVOLT_BASE,
IDP_COREVOLT_PHYS, IDP_COREVOLT_PHYS,
IDP_COREVOLT_SIZE, IDP_COREVOLT_SIZE,
DOMAIN_IO, MT_DEVICE },
0, 1, 0, 0 },
{ IDP_CPLD_BASE, { IDP_CPLD_BASE,
IDP_CPLD_PHYS, IDP_CPLD_PHYS,
IDP_CPLD_SIZE, IDP_CPLD_SIZE,
DOMAIN_IO, MT_DEVICE }
0, 1, 0, 0 },
LAST_DESC
}; };
static void __init idp_map_io(void) static void __init idp_map_io(void)
{ {
pxa_map_io(); pxa_map_io();
iotable_init(idp_io_desc); iotable_init(idp_io_desc, ARRAY_SIZE(idp_io_desc));
set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(TOUCH_PANEL_IRQ), TOUCH_PANEL_IRQ_EDGE); set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(TOUCH_PANEL_IRQ), TOUCH_PANEL_IRQ_EDGE);
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/fs.h> #include <linux/fs.h>
...@@ -120,18 +121,17 @@ static int __init lubbock_init(void) ...@@ -120,18 +121,17 @@ static int __init lubbock_init(void)
__initcall(lubbock_init); __initcall(lubbock_init);
static struct map_desc lubbock_io_desc[] __initdata = { static struct map_desc lubbock_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD */ { 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE }, /* CPLD */
{ 0xf1000000, 0x0c000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* LAN91C96 IO */ { 0xf1000000, 0x0c000000, 0x00100000, MT_DEVICE }, /* LAN91C96 IO */
{ 0xf1100000, 0x0e000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* LAN91C96 Attr */ { 0xf1100000, 0x0e000000, 0x00100000, MT_DEVICE }, /* LAN91C96 Attr */
{ 0xf4000000, 0x10000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA1111 */ { 0xf4000000, 0x10000000, 0x00400000, MT_DEVICE } /* SA1111 */
LAST_DESC
}; };
static void __init lubbock_map_io(void) static void __init lubbock_map_io(void)
{ {
pxa_map_io(); pxa_map_io();
iotable_init(lubbock_io_desc); iotable_init(lubbock_io_desc, ARRAY_SIZE(lubbock_io_desc));
/* This enables the BTUART */ /* This enables the BTUART */
CKEN |= CKEN7_BTUART; CKEN |= CKEN7_BTUART;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* *
* Architecture specific fixups. * Architecture specific fixups.
*/ */
#include <linux/kernel.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pm.h> #include <linux/pm.h>
...@@ -61,15 +62,14 @@ __tagtable(ATAG_ACORN, parse_tag_acorn); ...@@ -61,15 +62,14 @@ __tagtable(ATAG_ACORN, parse_tag_acorn);
#endif #endif
static struct map_desc rpc_io_desc[] __initdata = { static struct map_desc rpc_io_desc[] __initdata = {
{ SCREEN_BASE, SCREEN_START, 2*1048576, DOMAIN_IO, 0, 1, 0, 0 }, /* VRAM */ { SCREEN_BASE, SCREEN_START, 2*1048576, MT_DEVICE }, /* VRAM */
{ IO_BASE, IO_START, IO_SIZE , DOMAIN_IO, 0, 1, 0, 0 }, /* IO space */ { IO_BASE, IO_START, IO_SIZE , MT_DEVICE }, /* IO space */
{ EASI_BASE, EASI_START, EASI_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, /* EASI space */ { EASI_BASE, EASI_START, EASI_SIZE, MT_DEVICE } /* EASI space */
LAST_DESC
}; };
void __init rpc_map_io(void) void __init rpc_map_io(void)
{ {
iotable_init(rpc_io_desc); iotable_init(rpc_io_desc, ARRAY_SIZE(rpc_io_desc));
/* /*
* RiscPC can't handle half-word loads and stores * RiscPC can't handle half-word loads and stores
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -77,9 +77,8 @@ static void __init adsbitsy_init_irq(void) ...@@ -77,9 +77,8 @@ static void __init adsbitsy_init_irq(void)
} }
static struct map_desc adsbitsy_io_desc[] __initdata = { static struct map_desc adsbitsy_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf4000000, 0x18000000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA1111 */ { 0xf4000000, 0x18000000, 0x00800000, MT_DEVICE } /* SA1111 */
LAST_DESC
}; };
static int adsbitsy_uart_open(struct uart_port *port, struct uart_info *info) static int adsbitsy_uart_open(struct uart_port *port, struct uart_info *info)
...@@ -106,7 +105,7 @@ static struct sa1100_port_fns adsbitsy_port_fns __initdata = { ...@@ -106,7 +105,7 @@ static struct sa1100_port_fns adsbitsy_port_fns __initdata = {
static void __init adsbitsy_map_io(void) static void __init adsbitsy_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(adsbitsy_io_desc); iotable_init(adsbitsy_io_desc, ARRAY_SIZE(adsbitsy_io_desc));
sa1100_register_uart_fns(&adsbitsy_port_fns); sa1100_register_uart_fns(&adsbitsy_port_fns);
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
......
...@@ -171,15 +171,6 @@ fixup_assabet(struct machine_desc *desc, struct tag *tags, ...@@ -171,15 +171,6 @@ fixup_assabet(struct machine_desc *desc, struct tag *tags,
} }
static struct map_desc assabet_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xf1000000, 0x12000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Board Control Register */
{ 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* MQ200 */
/* f3000000 - neponset system registers */
/* f4000000 - neponset SA1111 registers */
LAST_DESC
};
static void assabet_uart_pm(struct uart_port *port, u_int state, u_int oldstate) static void assabet_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
{ {
if (port->mapbase == _Ser1UTCR0) { if (port->mapbase == _Ser1UTCR0) {
...@@ -255,12 +246,18 @@ static struct sa1100_port_fns assabet_port_fns __initdata = { ...@@ -255,12 +246,18 @@ static struct sa1100_port_fns assabet_port_fns __initdata = {
pm: assabet_uart_pm, pm: assabet_uart_pm,
}; };
static struct map_desc assabet_io_desc[] __initdata = {
/* virtual physical length type */
{ 0xf1000000, 0x12000000, 0x00100000, MT_DEVICE }, /* Board Control Register */
{ 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE } /* MQ200 */
};
static void __init assabet_map_io(void) static void __init assabet_map_io(void)
{ {
extern void neponset_map_io(void); extern void neponset_map_io(void);
sa1100_map_io(); sa1100_map_io();
iotable_init(assabet_io_desc); iotable_init(assabet_io_desc, ARRAY_SIZE(assabet_io_desc));
if (machine_has_neponset()) { if (machine_has_neponset()) {
#ifdef CONFIG_ASSABET_NEPONSET #ifdef CONFIG_ASSABET_NEPONSET
......
...@@ -145,17 +145,16 @@ EXPORT_SYMBOL(badge4_set_5V); ...@@ -145,17 +145,16 @@ EXPORT_SYMBOL(badge4_set_5V);
static struct map_desc badge4_io_desc[] __initdata = { static struct map_desc badge4_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{0xf1000000, 0x08000000, 0x00100000, DOMAIN_IO, 0,1,0,0},/* SRAM bank 1 */ {0xf1000000, 0x08000000, 0x00100000, MT_DEVICE },/* SRAM bank 1 */
{0xf2000000, 0x10000000, 0x00100000, DOMAIN_IO, 0,1,0,0},/* SRAM bank 2 */ {0xf2000000, 0x10000000, 0x00100000, MT_DEVICE },/* SRAM bank 2 */
{0xf4000000, 0x48000000, 0x00100000, DOMAIN_IO, 0,1,0,0},/* SA-1111 */ {0xf4000000, 0x48000000, 0x00100000, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
static void __init badge4_map_io(void) static void __init badge4_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(badge4_io_desc); iotable_init(badge4_io_desc, ARRAY_SIZE(badge4_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -36,20 +36,19 @@ static void __init cerf_init_irq(void) ...@@ -36,20 +36,19 @@ static void __init cerf_init_irq(void)
} }
static struct map_desc cerf_io_desc[] __initdata = { static struct map_desc cerf_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Crystal Ethernet Chip */ { 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE } /* Crystal Ethernet Chip */
#ifdef CONFIG_SA1100_CERF_CPLD #ifdef CONFIG_SA1100_CERF_CPLD
{ 0xf1000000, 0x40000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD Chip */ ,{ 0xf1000000, 0x40000000, 0x00100000, MT_DEVICE }, /* CPLD Chip */
{ 0xf2000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* CerfPDA Bluetooth */ { 0xf2000000, 0x10000000, 0x00100000, MT_DEVICE }, /* CerfPDA Bluetooth */
{ 0xf3000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* CerfPDA Serial */ { 0xf3000000, 0x18000000, 0x00100000, MT_DEVICE } /* CerfPDA Serial */
#endif #endif
LAST_DESC
}; };
static void __init cerf_map_io(void) static void __init cerf_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(cerf_io_desc); iotable_init(cerf_io_desc, ARRAY_SIZE(cerf_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
#ifdef CONFIG_SA1100_CERF_IRDA_ENABLED #ifdef CONFIG_SA1100_CERF_IRDA_ENABLED
......
...@@ -16,15 +16,14 @@ ...@@ -16,15 +16,14 @@
#include "generic.h" #include "generic.h"
static struct map_desc empeg_io_desc[] __initdata = { static struct map_desc empeg_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ EMPEG_FLASHBASE, 0x00000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash */ { EMPEG_FLASHBASE, 0x00000000, 0x00200000, MT_DEVICE } /* Flash */
LAST_DESC
}; };
static void __init empeg_map_io(void) static void __init empeg_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(empeg_io_desc); iotable_init(empeg_io_desc, ARRAY_SIZE(empeg_io_desc));
sa1100_register_uart(0, 1); sa1100_register_uart(0, 1);
sa1100_register_uart(1, 3); sa1100_register_uart(1, 3);
......
...@@ -152,18 +152,17 @@ __initcall(flexanet_init); ...@@ -152,18 +152,17 @@ __initcall(flexanet_init);
static struct map_desc flexanet_io_desc[] __initdata = { static struct map_desc flexanet_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x10000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* Board Control Register */ { 0xf0000000, 0x10000000, 0x00001000, MT_DEVICE }, /* Board Control Register */
{ 0xf1000000, 0x18000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Ethernet controller */ { 0xf1000000, 0x18000000, 0x01000000, MT_DEVICE }, /* Ethernet controller */
{ 0xD0000000, 0x40000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Instrument boards */ { 0xD0000000, 0x40000000, 0x01000000, MT_DEVICE }, /* Instrument boards */
{ 0xD8000000, 0x48000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* External peripherals */ { 0xD8000000, 0x48000000, 0x01000000, MT_DEVICE } /* External peripherals */
LAST_DESC
}; };
static void __init flexanet_map_io(void) static void __init flexanet_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(flexanet_io_desc); iotable_init(flexanet_io_desc, ARRAY_SIZE(flexanet_io_desc));
flexanet_serial_init(); flexanet_serial_init();
/* wakeup source is GPIO-0 only */ /* wakeup source is GPIO-0 only */
......
...@@ -43,8 +43,6 @@ static int __init freebird_init(void) ...@@ -43,8 +43,6 @@ static int __init freebird_init(void)
if (machine_is_freebird()) { if (machine_is_freebird()) {
sa1100fb_backlight_power = freebird_backlight_power; sa1100fb_backlight_power = freebird_backlight_power;
sa1100fb_lcd_power = freebird_lcd_power; sa1100fb_lcd_power = freebird_lcd_power;
set_GPIO_IRQ_edge(GPIO_FREEBIRD_UCB1300, GPIO_RISING_EDGE);
} }
return 0; return 0;
} }
...@@ -52,16 +50,15 @@ static int __init freebird_init(void) ...@@ -52,16 +50,15 @@ static int __init freebird_init(void)
__initcall(freebird_init); __initcall(freebird_init);
static struct map_desc freebird_io_desc[] __initdata = { static struct map_desc freebird_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x12000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Board Control Register */ { 0xf0000000, 0x12000000, 0x00100000, MT_DEVICE }, /* Board Control Register */
{ 0xf2000000, 0x19000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0}, { 0xf2000000, 0x19000000, 0x00100000, MT_DEVICE }
LAST_DESC
}; };
static void __init freebird_map_io(void) static void __init freebird_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(freebird_io_desc); iotable_init(freebird_io_desc, ARRAY_SIZE(freebird_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -134,8 +134,6 @@ EXPORT_SYMBOL(sa1100fb_lcd_power); ...@@ -134,8 +134,6 @@ EXPORT_SYMBOL(sa1100fb_lcd_power);
* *
* Typically, static virtual address mappings are as follow: * Typically, static virtual address mappings are as follow:
* *
* 0xe8000000-0xefffffff: flash memory (especially when multiple flash
* banks need to be mapped contigously)
* 0xf0000000-0xf3ffffff: miscellaneous stuff (CPLDs, etc.) * 0xf0000000-0xf3ffffff: miscellaneous stuff (CPLDs, etc.)
* 0xf4000000-0xf4ffffff: SA-1111 * 0xf4000000-0xf4ffffff: SA-1111
* 0xf5000000-0xf5ffffff: reserved (used by cache flushing area) * 0xf5000000-0xf5ffffff: reserved (used by cache flushing area)
...@@ -150,17 +148,16 @@ EXPORT_SYMBOL(sa1100fb_lcd_power); ...@@ -150,17 +148,16 @@ EXPORT_SYMBOL(sa1100fb_lcd_power);
*/ */
static struct map_desc standard_io_desc[] __initdata = { static struct map_desc standard_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf8000000, 0x80000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCM */ { 0xf8000000, 0x80000000, 0x00100000, MT_DEVICE }, /* PCM */
{ 0xfa000000, 0x90000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SCM */ { 0xfa000000, 0x90000000, 0x00100000, MT_DEVICE }, /* SCM */
{ 0xfc000000, 0xa0000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* MER */ { 0xfc000000, 0xa0000000, 0x00100000, MT_DEVICE }, /* MER */
{ 0xfe000000, 0xb0000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD + DMA */ { 0xfe000000, 0xb0000000, 0x00200000, MT_DEVICE } /* LCD + DMA */
LAST_DESC
}; };
void __init sa1100_map_io(void) void __init sa1100_map_io(void)
{ {
iotable_init(standard_io_desc); iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
} }
/* /*
...@@ -203,3 +200,4 @@ void __init sa1110_mb_enable(void) ...@@ -203,3 +200,4 @@ void __init sa1110_mb_enable(void)
local_irq_restore(flags); local_irq_restore(flags);
} }
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -121,10 +121,9 @@ static void __init graphicsclient_init_irq(void) ...@@ -121,10 +121,9 @@ static void __init graphicsclient_init_irq(void)
static struct map_desc graphicsclient_io_desc[] __initdata = { static struct map_desc graphicsclient_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x10000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD */ { 0xf0000000, 0x10000000, 0x00400000, MT_DEVICE }, /* CPLD */
{ 0xf1000000, 0x18000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CAN */ { 0xf1000000, 0x18000000, 0x00400000, MT_DEVICE } /* CAN */
LAST_DESC
}; };
static u_int graphicsclient_get_mctrl(struct uart_port *port) static u_int graphicsclient_get_mctrl(struct uart_port *port)
...@@ -187,7 +186,7 @@ static struct sa1100_port_fns graphicsclient_port_fns __initdata = { ...@@ -187,7 +186,7 @@ static struct sa1100_port_fns graphicsclient_port_fns __initdata = {
static void __init graphicsclient_map_io(void) static void __init graphicsclient_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(graphicsclient_io_desc); iotable_init(graphicsclient_io_desc, ARRAY_SIZE(graphicsclient_io_desc));
sa1100_register_uart_fns(&graphicsclient_port_fns); sa1100_register_uart_fns(&graphicsclient_port_fns);
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -153,11 +153,10 @@ static void __init graphicsmaster_init_irq(void) ...@@ -153,11 +153,10 @@ static void __init graphicsmaster_init_irq(void)
static struct map_desc graphicsmaster_io_desc[] __initdata = { static struct map_desc graphicsmaster_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x10000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD */ { 0xf0000000, 0x10000000, 0x00400000, MT_DEVICE }, /* CPLD */
{ 0xf1000000, 0x40000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CAN */ { 0xf1000000, 0x40000000, 0x00400000, MT_DEVICE }, /* CAN */
{ 0xf4000000, 0x18000000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */ { 0xf4000000, 0x18000000, 0x00800000, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
#error Old code. Someone needs to decide what to do about this. #error Old code. Someone needs to decide what to do about this.
...@@ -244,7 +243,7 @@ static struct sa1100_port_fns graphicsmaster_port_fns __initdata = { ...@@ -244,7 +243,7 @@ static struct sa1100_port_fns graphicsmaster_port_fns __initdata = {
static void __init graphicsmaster_map_io(void) static void __init graphicsmaster_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(graphicsmaster_io_desc); iotable_init(graphicsmaster_io_desc, ARRAY_SIZE(graphicsmaster_io_desc));
sa1100_register_uart_fns(&graphicsmaster_port_fns); sa1100_register_uart_fns(&graphicsmaster_port_fns);
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
......
...@@ -434,17 +434,16 @@ static struct sa1100_port_fns h3600_port_fns __initdata = { ...@@ -434,17 +434,16 @@ static struct sa1100_port_fns h3600_port_fns __initdata = {
}; };
static struct map_desc h3600_io_desc[] __initdata = { static struct map_desc h3600_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ H3600_EGPIO_VIRT, 0x49000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO 0 CS#5 */ { H3600_EGPIO_VIRT, 0x49000000, 0x01000000, MT_DEVICE }, /* EGPIO 0 CS#5 */
{ H3600_BANK_2_VIRT, 0x10000000, 0x02800000, DOMAIN_IO, 0, 1, 0, 0 }, /* static memory bank 2 CS#2 */ { H3600_BANK_2_VIRT, 0x10000000, 0x02800000, MT_DEVICE }, /* static memory bank 2 CS#2 */
{ H3600_BANK_4_VIRT, 0x40000000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* static memory bank 4 CS#4 */ { H3600_BANK_4_VIRT, 0x40000000, 0x00800000, MT_DEVICE } /* static memory bank 4 CS#4 */
LAST_DESC
}; };
static void __init h3600_map_io(void) static void __init h3600_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(h3600_io_desc); iotable_init(h3600_io_desc, ARRAY_SIZE(h3600_io_desc));
sa1100_register_uart_fns(&h3600_port_fns); sa1100_register_uart_fns(&h3600_port_fns);
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
......
...@@ -60,16 +60,15 @@ __initcall(init_huw_cs3); ...@@ -60,16 +60,15 @@ __initcall(init_huw_cs3);
area size = 288 kByte (0x48000 Bytes) area size = 288 kByte (0x48000 Bytes)
**/ **/
static struct map_desc huw_webpanel_io_desc[] __initdata = { static struct map_desc huw_webpanel_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0xc1fb8000, 0x00048000, DOMAIN_IO, 0, 1, 0, 0 }, /* Parameter */ { 0xf0000000, 0xc1fb8000, 0x00048000, MT_DEVICE }, /* Parameter */
{ 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */ { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE } /* Paules CS3, write only */
LAST_DESC
}; };
static void __init huw_webpanel_map_io(void) static void __init huw_webpanel_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(huw_webpanel_io_desc); iotable_init(huw_webpanel_io_desc, ARRAY_SIZE(huw_webpanel_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -18,16 +18,14 @@ ...@@ -18,16 +18,14 @@
/* BRADFIXME The egpio addresses aren't verifiably correct. (i.e. they're most /* BRADFIXME The egpio addresses aren't verifiably correct. (i.e. they're most
likely wrong. */ likely wrong. */
static struct map_desc itsy_io_desc[] __initdata = { static struct map_desc itsy_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash bank 0 */ { 0xf0000000, 0x49000000, 0x01000000, MT_DEVICE } /* EGPIO 0 */
{ 0xf0000000, 0x49000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO 0 */
LAST_DESC
}; };
static void __init itsy_map_io(void) static void __init itsy_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(itsy_io_desc); iotable_init(itsy_io_desc, ARRAY_SIZE(itsy_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -56,17 +56,16 @@ static int __init jornada720_init(void) ...@@ -56,17 +56,16 @@ static int __init jornada720_init(void)
__initcall(jornada720_init); __initcall(jornada720_init);
static struct map_desc jornada720_io_desc[] __initdata = { static struct map_desc jornada720_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x48000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Epson registers */ { 0xf0000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Epson registers */
{ 0xf1000000, 0x48200000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Epson frame buffer */ { 0xf1000000, 0x48200000, 0x00100000, MT_DEVICE }, /* Epson frame buffer */
{ 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */ { 0xf4000000, 0x40000000, 0x00100000, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
static void __init jornada720_map_io(void) static void __init jornada720_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(jornada720_io_desc); iotable_init(jornada720_io_desc, ARRAY_SIZE(jornada720_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -17,16 +17,15 @@ ...@@ -17,16 +17,15 @@
static struct map_desc lart_io_desc[] __initdata = { static struct map_desc lart_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* main flash memory */ { 0xe8000000, 0x00000000, 0x00400000, MT_DEVICE }, /* main flash memory */
{ 0xec000000, 0x08000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* main flash, alternative location */ { 0xec000000, 0x08000000, 0x00400000, MT_DEVICE } /* main flash, alternative location */
LAST_DESC
}; };
static void __init lart_map_io(void) static void __init lart_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(lart_io_desc); iotable_init(lart_io_desc, ARRAY_SIZE(lart_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -25,17 +25,15 @@ fixup_nanoengine(struct machine_desc *desc, struct tag *tags, ...@@ -25,17 +25,15 @@ fixup_nanoengine(struct machine_desc *desc, struct tag *tags,
} }
static struct map_desc nanoengine_io_desc[] __initdata = { static struct map_desc nanoengine_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash bank 0 */ { 0xf0000000, 0x10000000, 0x00100000, MT_DEVICE }, /* System Registers */
{ 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* System Registers */ { 0xf1000000, 0x18A00000, 0x00100000, MT_DEVICE } /* Internal PCI Config Space */
{ 0xf1000000, 0x18A00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Internal PCI Config Space */
LAST_DESC
}; };
static void __init nanoengine_map_io(void) static void __init nanoengine_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(nanoengine_io_desc); iotable_init(nanoengine_io_desc, ARRAY_SIZE(nanoengine_io_desc));
sa1100_register_uart(0, 1); sa1100_register_uart(0, 1);
sa1100_register_uart(1, 2); sa1100_register_uart(1, 2);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* linux/arch/arm/mach-sa1100/neponset.c * linux/arch/arm/mach-sa1100/neponset.c
* *
*/ */
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/serial_sa1100.h> #include <asm/mach/serial_sa1100.h>
#include <asm/arch/assabet.h> #include <asm/arch/assabet.h>
#include <asm/arch/neponset.h>
#include <asm/hardware/sa1111.h> #include <asm/hardware/sa1111.h>
#include <asm/sizes.h>
#include "sa1111.h" #include "sa1111.h"
...@@ -216,13 +218,12 @@ static int __init neponset_init(void) ...@@ -216,13 +218,12 @@ static int __init neponset_init(void)
__initcall(neponset_init); __initcall(neponset_init);
static struct map_desc neponset_io_desc[] __initdata = { static struct map_desc neponset_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf3000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* System Registers */ { 0xf3000000, 0x10000000, SZ_1M, MT_DEVICE }, /* System Registers */
{ 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */ { 0xf4000000, 0x40000000, SZ_1M, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
void __init neponset_map_io(void) void __init neponset_map_io(void)
{ {
iotable_init(neponset_io_desc); iotable_init(neponset_io_desc, ARRAY_SIZE(neponset_io_desc));
} }
...@@ -41,15 +41,14 @@ static int __init omnimeter_init(void) ...@@ -41,15 +41,14 @@ static int __init omnimeter_init(void)
__initcall(omnimeter_init); __initcall(omnimeter_init);
static struct map_desc omnimeter_io_desc[] __initdata = { static struct map_desc omnimeter_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xd2000000, 0x10000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* TS */ { 0xd2000000, 0x10000000, 0x02000000, MT_DEVICE } /* TS */
LAST_DESC
}; };
static void __init omnimeter_map_io(void) static void __init omnimeter_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(omnimeter_io_desc); iotable_init(omnimeter_io_desc, ARRAY_SIZE(omnimeter_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -16,15 +16,14 @@ ...@@ -16,15 +16,14 @@
#include "generic.h" #include "generic.h"
static struct map_desc pangolin_io_desc[] __initdata = { static struct map_desc pangolin_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* MQ200 */ { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE } /* MQ200 */
LAST_DESC
}; };
static void __init pangolin_map_io(void) static void __init pangolin_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(pangolin_io_desc); iotable_init(pangolin_io_desc, ARRAY_SIZE(pangolin_io_desc));
sa1100_register_uart(0, 1); sa1100_register_uart(0, 1);
sa1100_register_uart(1, 3); sa1100_register_uart(1, 3);
......
...@@ -56,28 +56,26 @@ static void __init pfs168_init_irq(void) ...@@ -56,28 +56,26 @@ static void __init pfs168_init_irq(void)
} }
static struct map_desc pfs168_io_desc[] __initdata = { static struct map_desc pfs168_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash bank 0 */ { 0xf0000000, 0x10000000, 0x00001000, MT_DEVICE }, /* 16C752 DUART port A (COM5) */
{ 0xf0000000, 0x10000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* 16C752 DUART port A (COM5) */ { 0xf0001000, 0x10800000, 0x00001000, MT_DEVICE }, /* 16C752 DUART port B (COM6) */
{ 0xf0001000, 0x10800000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* 16C752 DUART port B (COM6) */ { 0xf0002000, 0x11000000, 0x00001000, MT_DEVICE }, /* COM1 RTS control (SYSC1RTS) */
{ 0xf0002000, 0x11000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* COM1 RTS control (SYSC1RTS) */ { 0xf0003000, 0x11400000, 0x00001000, MT_DEVICE }, /* Status LED control (SYSLED) */
{ 0xf0003000, 0x11400000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* Status LED control (SYSLED) */ { 0xf0004000, 0x11800000, 0x00001000, MT_DEVICE }, /* DTMF code read (SYSDTMF) */
{ 0xf0004000, 0x11800000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* DTMF code read (SYSDTMF) */ { 0xf0005000, 0x11c00000, 0x00001000, MT_DEVICE }, /* LCD configure, enable (SYSLCDDE) */
{ 0xf0005000, 0x11c00000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD configure, enable (SYSLCDDE) */ { 0xf0006000, 0x12000000, 0x00001000, MT_DEVICE }, /* COM1 DSR and motion sense (SYSC1DSR) */
{ 0xf0006000, 0x12000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* COM1 DSR and motion sense (SYSC1DSR) */ { 0xf0007000, 0x12800000, 0x00001000, MT_DEVICE }, /* COM3 xmit enable (SYSC3TEN) */
{ 0xf0007000, 0x12800000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* COM3 xmit enable (SYSC3TEN) */ { 0xf0008000, 0x13000000, 0x00001000, MT_DEVICE }, /* Control register A (SYSCTLA) */
{ 0xf0008000, 0x13000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* Control register A (SYSCTLA) */ { 0xf0009000, 0x13800000, 0x00001000, MT_DEVICE }, /* Control register B (SYSCTLB) */
{ 0xf0009000, 0x13800000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* Control register B (SYSCTLB) */ { 0xf000a000, 0x18000000, 0x00001000, MT_DEVICE }, /* SMC91C96 */
{ 0xf000a000, 0x18000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* SMC91C96 */ { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, /* MQ200 */
{ 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* MQ200 */ { 0xf4000000, 0x40000000, 0x00100000, MT_DEVICE } /* SA-1111 */
{ 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */
LAST_DESC
}; };
static void __init pfs168_map_io(void) static void __init pfs168_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(pfs168_io_desc); iotable_init(pfs168_io_desc, ARRAY_SIZE(pfs168_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
#include "generic.h" #include "generic.h"
static struct map_desc pleb_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xe8000000, 0x00000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* main flash memory */
{ 0xe8400000, 0x08000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* main flash, alternative location */
LAST_DESC
};
static void __init pleb_map_io(void) static void __init pleb_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(pleb_io_desc);
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
/* /*
* linux/arch/arm/mach-sa1100/simpad.c * linux/arch/arm/mach-sa1100/simpad.c
*
*/ */
#include <linux/config.h> #include <linux/config.h>
...@@ -41,10 +40,9 @@ void clear_cs3_bit(int value) ...@@ -41,10 +40,9 @@ void clear_cs3_bit(int value)
} }
static struct map_desc simpad_io_desc[] __initdata = { static struct map_desc simpad_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* MQ200 */ { 0xf2800000, 0x4b800000, 0x00800000, MT_DEVICE }, /* MQ200 */
{ 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */ { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE } /* Paules CS3, write only */
LAST_DESC
}; };
...@@ -65,7 +63,7 @@ static struct sa1100_port_fns simpad_port_fns __initdata = { ...@@ -65,7 +63,7 @@ static struct sa1100_port_fns simpad_port_fns __initdata = {
static void __init simpad_map_io(void) static void __init simpad_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(simpad_io_desc); iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc));
PSPR = 0xc0008000; PSPR = 0xc0008000;
GPDR &= ~GPIO_GPIO0; GPDR &= ~GPIO_GPIO0;
......
...@@ -304,19 +304,17 @@ stork_kbd_unexpected_up(unsigned char code) ...@@ -304,19 +304,17 @@ stork_kbd_unexpected_up(unsigned char code)
struct map_desc stork_io_desc[] __initdata = { struct map_desc stork_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash bank 0 */ { STORK_VM_BASE_CS1, STORK_VM_OFF_CS1, 0x01000000, MT_DEVICE }, /* EGPIO 0 */
{ STORK_VM_BASE_CS1, STORK_VM_OFF_CS1, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO 0 */ { 0xf1000000, 0x10000000, 0x02800000, MT_DEVICE }, /* static memory bank 2 */
{ 0xf1000000, 0x10000000, 0x02800000, DOMAIN_IO, 0, 1, 0, 0 }, /* static memory bank 2 */ { 0xf3800000, 0x40000000, 0x00800000, MT_DEVICE } /* static memory bank 4 */
{ 0xf3800000, 0x40000000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* static memory bank 4 */
LAST_DESC
}; };
int __init int __init
stork_map_io(void) stork_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(stork_io_desc); iotable_init(stork_io_desc, ARRAY_SIZE(stork_io_desc));
sa1100_register_uart(0, 1); /* com port */ sa1100_register_uart(0, 1); /* com port */
sa1100_register_uart(1, 2); sa1100_register_uart(1, 2);
......
...@@ -95,10 +95,9 @@ static void system3_backlight_power(int on); ...@@ -95,10 +95,9 @@ static void system3_backlight_power(int on);
*/ */
static struct map_desc system3_io_desc[] __initdata = { static struct map_desc system3_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf3000000, PT_CPLD_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* System Registers */ { 0xf3000000, PT_CPLD_BASE, 0x00100000, MT_DEVICE }, /* System Registers */
{ 0xf4000000, PT_SA1111_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */ { 0xf4000000, PT_SA1111_BASE, 0x00100000, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
static struct sa1100_port_fns system3_port_fns __initdata = { static struct sa1100_port_fns system3_port_fns __initdata = {
...@@ -119,7 +118,7 @@ static void __init system3_map_io(void) ...@@ -119,7 +118,7 @@ static void __init system3_map_io(void)
{ {
DPRINTK( "%s\n", "START" ); DPRINTK( "%s\n", "START" );
sa1100_map_io(); sa1100_map_io();
iotable_init(system3_io_desc); iotable_init(system3_io_desc, ARRAY_SIZE(system3_io_desc));
sa1100_register_uart_fns(&system3_port_fns); sa1100_register_uart_fns(&system3_port_fns);
sa1100_register_uart(0, 1); /* com port */ sa1100_register_uart(0, 1); /* com port */
......
...@@ -57,17 +57,16 @@ static int __init xp860_init(void) ...@@ -57,17 +57,16 @@ static int __init xp860_init(void)
__initcall(xp860_init); __initcall(xp860_init);
static struct map_desc xp860_io_desc[] __initdata = { static struct map_desc xp860_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SCSI */ { 0xf0000000, 0x10000000, 0x00100000, MT_DEVICE }, /* SCSI */
{ 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* LAN */ { 0xf1000000, 0x18000000, 0x00100000, MT_DEVICE }, /* LAN */
{ 0xf4000000, 0x40000000, 0x00800000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */ { 0xf4000000, 0x40000000, 0x00800000, MT_DEVICE } /* SA-1111 */
LAST_DESC
}; };
static void __init xp860_map_io(void) static void __init xp860_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(xp860_io_desc); iotable_init(xp860_io_desc, ARRAY_SIZE(xp860_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
sa1100_register_uart(1, 1); sa1100_register_uart(1, 1);
......
...@@ -68,18 +68,15 @@ __initcall(yopy_hw_init); ...@@ -68,18 +68,15 @@ __initcall(yopy_hw_init);
static struct map_desc yopy_io_desc[] __initdata = { static struct map_desc yopy_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length type */
{ 0xe8000000, 0x00000000, 0x04000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash 0 */ { 0xf0000000, 0x48000000, 0x00300000, MT_DEVICE }, /* LCD */
{ 0xec000000, 0x08000000, 0x04000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash 1 */ { 0xf1000000, 0x10000000, 0x00100000, MT_DEVICE } /* EGPIO */
{ 0xf0000000, 0x48000000, 0x00300000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD */
{ 0xf1000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO */
LAST_DESC
}; };
static void __init yopy_map_io(void) static void __init yopy_map_io(void)
{ {
sa1100_map_io(); sa1100_map_io();
iotable_init(yopy_io_desc); iotable_init(yopy_io_desc, ARRAY_SIZE(yopy_io_desc));
sa1100_register_uart(0, 3); sa1100_register_uart(0, 3);
......
...@@ -3,18 +3,11 @@ ...@@ -3,18 +3,11 @@
* *
* Architecture specific stuff. * Architecture specific stuff.
*/ */
#include <linux/tty.h> #include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/elf.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -23,13 +16,12 @@ ...@@ -23,13 +16,12 @@
extern void shark_init_irq(void); extern void shark_init_irq(void);
static struct map_desc shark_io_desc[] __initdata = { static struct map_desc shark_io_desc[] __initdata = {
{ IO_BASE , IO_START , IO_SIZE , DOMAIN_IO, 0, 1, 0, 0 }, { IO_BASE , IO_START , IO_SIZE , MT_DEVICE }
LAST_DESC
}; };
static void __init shark_map_io(void) static void __init shark_map_io(void)
{ {
iotable_init(shark_io_desc); iotable_init(shark_io_desc, ARRAY_SIZE(shark_io_desc));
} }
MACHINE_START(SHARK, "Shark") MACHINE_START(SHARK, "Shark")
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
* *
* Extra MM routines for the Tbox architecture * Extra MM routines for the Tbox architecture
*/ */
#include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -57,13 +58,12 @@ static void tbox_init_irq(void) ...@@ -57,13 +58,12 @@ static void tbox_init_irq(void)
static struct map_desc tbox_io_desc[] __initdata = { static struct map_desc tbox_io_desc[] __initdata = {
/* See hardware.h for details */ /* See hardware.h for details */
{ IO_BASE, IO_START, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, { IO_BASE, IO_START, 0x00100000, MT_DEVICE }
LAST_DESC
}; };
static void __init tbox_map_io(void) static void __init tbox_map_io(void)
{ {
iotable_init(tbox_io_desc); iotable_init(tbox_io_desc, ARRAY_SIZE(tbox_io_desc));
} }
MACHINE_START(TBOX, "unknown-TBOX") MACHINE_START(TBOX, "unknown-TBOX")
......
...@@ -220,16 +220,9 @@ static inline void clear_mapping(unsigned long virt) ...@@ -220,16 +220,9 @@ static inline void clear_mapping(unsigned long virt)
static void __init create_mapping(struct map_desc *md) static void __init create_mapping(struct map_desc *md)
{ {
unsigned long virt, length; unsigned long virt, length;
int prot_sect, prot_pte; int prot_sect, prot_pte, domain;
long off; long off;
if (md->prot_read && md->prot_write &&
!md->cacheable && !md->bufferable) {
printk(KERN_WARNING "Security risk: creating user "
"accessible mapping for 0x%08lx at 0x%08lx\n",
md->physical, md->virtual);
}
if (md->virtual != vectors_base() && md->virtual < PAGE_OFFSET) { if (md->virtual != vectors_base() && md->virtual < PAGE_OFFSET) {
printk(KERN_WARNING "MM: not creating mapping for " printk(KERN_WARNING "MM: not creating mapping for "
"0x%08lx at 0x%08lx in user region\n", "0x%08lx at 0x%08lx in user region\n",
...@@ -237,24 +230,49 @@ static void __init create_mapping(struct map_desc *md) ...@@ -237,24 +230,49 @@ static void __init create_mapping(struct map_desc *md)
return; return;
} }
prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY;
(md->prot_read ? L_PTE_USER : 0) | prot_sect = PMD_TYPE_SECT;
(md->prot_write ? L_PTE_WRITE : 0) |
(md->cacheable ? L_PTE_CACHEABLE : 0) | switch (md->type) {
(md->bufferable ? L_PTE_BUFFERABLE : 0); case MT_DEVICE:
prot_pte |= L_PTE_WRITE;
prot_sect |= PMD_SECT_AP_WRITE;
domain = DOMAIN_IO;
break;
case MT_CACHECLEAN:
prot_pte |= L_PTE_CACHEABLE | L_PTE_BUFFERABLE;
prot_sect |= PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE;
domain = DOMAIN_KERNEL;
break;
case MT_MINICLEAN:
prot_pte |= L_PTE_CACHEABLE;
prot_sect |= PMD_SECT_CACHEABLE;
domain = DOMAIN_KERNEL;
break;
case MT_VECTORS:
prot_pte |= L_PTE_EXEC | L_PTE_CACHEABLE | L_PTE_BUFFERABLE;
prot_sect |= PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE;
domain = DOMAIN_USER;
break;
case MT_MEMORY:
prot_pte |= L_PTE_WRITE | L_PTE_EXEC | L_PTE_CACHEABLE | L_PTE_BUFFERABLE;
prot_sect |= PMD_SECT_AP_WRITE | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE;
domain = DOMAIN_KERNEL;
break;
}
prot_sect = PMD_TYPE_SECT | PMD_DOMAIN(md->domain) | prot_sect |= PMD_DOMAIN(domain);
(md->prot_read ? PMD_SECT_AP_READ : 0) |
(md->prot_write ? PMD_SECT_AP_WRITE : 0) |
(md->cacheable ? PMD_SECT_CACHEABLE : 0) |
(md->bufferable ? PMD_SECT_BUFFERABLE : 0);
virt = md->virtual; virt = md->virtual;
off = md->physical - virt; off = md->physical - virt;
length = md->length; length = md->length;
while ((virt & 0xfffff || (virt + off) & 0xfffff) && length >= PAGE_SIZE) { while ((virt & 0xfffff || (virt + off) & 0xfffff) && length >= PAGE_SIZE) {
alloc_init_page(virt, virt + off, md->domain, prot_pte); alloc_init_page(virt, virt + off, domain, prot_pte);
virt += PAGE_SIZE; virt += PAGE_SIZE;
length -= PAGE_SIZE; length -= PAGE_SIZE;
...@@ -268,7 +286,7 @@ static void __init create_mapping(struct map_desc *md) ...@@ -268,7 +286,7 @@ static void __init create_mapping(struct map_desc *md)
} }
while (length >= PAGE_SIZE) { while (length >= PAGE_SIZE) {
alloc_init_page(virt, virt + off, md->domain, prot_pte); alloc_init_page(virt, virt + off, domain, prot_pte);
virt += PAGE_SIZE; virt += PAGE_SIZE;
length -= PAGE_SIZE; length -= PAGE_SIZE;
...@@ -319,12 +337,7 @@ void __init memtable_init(struct meminfo *mi) ...@@ -319,12 +337,7 @@ void __init memtable_init(struct meminfo *mi)
p->physical = mi->bank[i].start; p->physical = mi->bank[i].start;
p->virtual = __phys_to_virt(p->physical); p->virtual = __phys_to_virt(p->physical);
p->length = mi->bank[i].size; p->length = mi->bank[i].size;
p->domain = DOMAIN_KERNEL; p->type = MT_MEMORY;
p->prot_read = 0;
p->prot_write = 1;
p->cacheable = 1;
p->bufferable = 1;
p ++; p ++;
} }
...@@ -332,12 +345,7 @@ void __init memtable_init(struct meminfo *mi) ...@@ -332,12 +345,7 @@ void __init memtable_init(struct meminfo *mi)
p->physical = FLUSH_BASE_PHYS; p->physical = FLUSH_BASE_PHYS;
p->virtual = FLUSH_BASE; p->virtual = FLUSH_BASE;
p->length = PGDIR_SIZE; p->length = PGDIR_SIZE;
p->domain = DOMAIN_KERNEL; p->type = MT_CACHECLEAN;
p->prot_read = 1;
p->prot_write = 0;
p->cacheable = 1;
p->bufferable = 1;
p ++; p ++;
#endif #endif
...@@ -345,12 +353,7 @@ void __init memtable_init(struct meminfo *mi) ...@@ -345,12 +353,7 @@ void __init memtable_init(struct meminfo *mi)
p->physical = FLUSH_BASE_PHYS + PGDIR_SIZE; p->physical = FLUSH_BASE_PHYS + PGDIR_SIZE;
p->virtual = FLUSH_BASE_MINICACHE; p->virtual = FLUSH_BASE_MINICACHE;
p->length = PGDIR_SIZE; p->length = PGDIR_SIZE;
p->domain = DOMAIN_KERNEL; p->type = MT_MINICLEAN;
p->prot_read = 1;
p->prot_write = 0;
p->cacheable = 1;
p->bufferable = 0;
p ++; p ++;
#endif #endif
...@@ -380,25 +383,22 @@ void __init memtable_init(struct meminfo *mi) ...@@ -380,25 +383,22 @@ void __init memtable_init(struct meminfo *mi)
init_maps->physical = virt_to_phys(init_maps); init_maps->physical = virt_to_phys(init_maps);
init_maps->virtual = vectors_base(); init_maps->virtual = vectors_base();
init_maps->length = PAGE_SIZE; init_maps->length = PAGE_SIZE;
init_maps->domain = DOMAIN_USER; init_maps->type = MT_VECTORS;
init_maps->prot_read = 0;
init_maps->prot_write = 0;
init_maps->cacheable = 1;
init_maps->bufferable = 0;
create_mapping(init_maps); create_mapping(init_maps);
flush_cache_all(); flush_cache_all();
flush_tlb_all();
} }
/* /*
* Create the architecture specific mappings * Create the architecture specific mappings
*/ */
void __init iotable_init(struct map_desc *io_desc) void __init iotable_init(struct map_desc *io_desc, int nr)
{ {
int i; int i;
for (i = 0; io_desc[i].last == 0; i++) for (i = 0; i < nr; i++)
create_mapping(io_desc + i); create_mapping(io_desc + i);
} }
......
...@@ -13,20 +13,18 @@ struct map_desc { ...@@ -13,20 +13,18 @@ struct map_desc {
unsigned long virtual; unsigned long virtual;
unsigned long physical; unsigned long physical;
unsigned long length; unsigned long length;
int domain:4, unsigned int type;
prot_read:1,
prot_write:1,
cacheable:1,
bufferable:1,
last:1;
}; };
#define LAST_DESC \
{ last: 1 }
struct meminfo; struct meminfo;
#define MT_DEVICE 0
#define MT_CACHECLEAN 1
#define MT_MINICLEAN 2
#define MT_VECTORS 3
#define MT_MEMORY 4
extern void create_memmap_holes(struct meminfo *); extern void create_memmap_holes(struct meminfo *);
extern void memtable_init(struct meminfo *); extern void memtable_init(struct meminfo *);
extern void iotable_init(struct map_desc *); extern void iotable_init(struct map_desc *, int);
extern void setup_io_desc(void); extern void setup_io_desc(void);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment