diff options
37 files changed, 295 insertions, 172 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 299bc0468702..64cf480b0b02 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | # Copyright (C) 1995-2001 by Russell King | 8 | # Copyright (C) 1995-2001 by Russell King |
| 9 | 9 | ||
| 10 | LDFLAGS_vmlinux :=-p --no-undefined -X | 10 | LDFLAGS_vmlinux :=-p --no-undefined -X |
| 11 | CPPFLAGS_vmlinux.lds = -DTEXTADDR=$(TEXTADDR) -DDATAADDR=$(DATAADDR) | 11 | CPPFLAGS_vmlinux.lds = -DKERNEL_RAM_ADDR=$(TEXTADDR) |
| 12 | OBJCOPYFLAGS :=-O binary -R .note -R .comment -S | 12 | OBJCOPYFLAGS :=-O binary -R .note -R .comment -S |
| 13 | GZFLAGS :=-9 | 13 | GZFLAGS :=-9 |
| 14 | #CFLAGS +=-pipe | 14 | #CFLAGS +=-pipe |
| @@ -108,27 +108,19 @@ export CFLAGS_3c589_cs.o | |||
| 108 | endif | 108 | endif |
| 109 | 109 | ||
| 110 | TEXTADDR := $(textaddr-y) | 110 | TEXTADDR := $(textaddr-y) |
| 111 | ifeq ($(CONFIG_XIP_KERNEL),y) | ||
| 112 | DATAADDR := $(TEXTADDR) | ||
| 113 | xipaddr-$(CONFIG_ARCH_CO285) := 0x5f000000 | ||
| 114 | xipaddr-y ?= 0xbf000000 | ||
| 115 | # Replace phys addr with virt addr while keeping offset from base. | ||
| 116 | TEXTADDR := $(shell echo $(CONFIG_XIP_PHYS_ADDR) $(xipaddr-y) | \ | ||
| 117 | awk --non-decimal-data '/[:xdigit:]/ \ | ||
| 118 | { printf("0x%x\n", and($$1, 0x000fffff) + $$2) }' ) | ||
| 119 | endif | ||
| 120 | 111 | ||
| 121 | ifeq ($(incdir-y),) | 112 | ifeq ($(incdir-y),) |
| 122 | incdir-y := $(machine-y) | 113 | incdir-y := $(machine-y) |
| 123 | endif | 114 | endif |
| 124 | INCDIR := arch-$(incdir-y) | 115 | INCDIR := arch-$(incdir-y) |
| 116 | |||
| 125 | ifneq ($(machine-y),) | 117 | ifneq ($(machine-y),) |
| 126 | MACHINE := arch/arm/mach-$(machine-y)/ | 118 | MACHINE := arch/arm/mach-$(machine-y)/ |
| 127 | else | 119 | else |
| 128 | MACHINE := | 120 | MACHINE := |
| 129 | endif | 121 | endif |
| 130 | 122 | ||
| 131 | export TEXTADDR DATAADDR GZFLAGS | 123 | export TEXTADDR GZFLAGS |
| 132 | 124 | ||
| 133 | # Do we have FASTFPE? | 125 | # Do we have FASTFPE? |
| 134 | FASTFPE :=arch/arm/fastfpe | 126 | FASTFPE :=arch/arm/fastfpe |
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 3e1b0327e4d7..c11169b5ed9a 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | AFLAGS_head.o := -DTEXTADDR=$(TEXTADDR) -DDATAADDR=$(DATAADDR) | 5 | AFLAGS_head.o := -DKERNEL_RAM_ADDR=$(TEXTADDR) |
| 6 | 6 | ||
| 7 | # Object file lists. | 7 | # Object file lists. |
| 8 | 8 | ||
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index c1ff4d1f1bfd..04d3082a7b94 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c | |||
| @@ -94,7 +94,6 @@ int main(void) | |||
| 94 | DEFINE(VM_EXEC, VM_EXEC); | 94 | DEFINE(VM_EXEC, VM_EXEC); |
| 95 | BLANK(); | 95 | BLANK(); |
| 96 | DEFINE(PAGE_SZ, PAGE_SIZE); | 96 | DEFINE(PAGE_SZ, PAGE_SIZE); |
| 97 | DEFINE(VIRT_OFFSET, PAGE_OFFSET); | ||
| 98 | BLANK(); | 97 | BLANK(); |
| 99 | DEFINE(SYS_ERROR0, 0x9f0000); | 98 | DEFINE(SYS_ERROR0, 0x9f0000); |
| 100 | BLANK(); | 99 | BLANK(); |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 93b5e8e5292e..be439cab92c6 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | */ | 15 | */ |
| 16 | #include <linux/config.h> | 16 | #include <linux/config.h> |
| 17 | 17 | ||
| 18 | #include <asm/memory.h> | ||
| 18 | #include <asm/glue.h> | 19 | #include <asm/glue.h> |
| 19 | #include <asm/vfpmacros.h> | 20 | #include <asm/vfpmacros.h> |
| 20 | #include <asm/hardware.h> /* should be moved into entry-macro.S */ | 21 | #include <asm/hardware.h> /* should be moved into entry-macro.S */ |
| @@ -310,7 +311,7 @@ __pabt_svc: | |||
| 310 | 311 | ||
| 311 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) | 312 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
| 312 | @ make sure our user space atomic helper is aborted | 313 | @ make sure our user space atomic helper is aborted |
| 313 | cmp r2, #VIRT_OFFSET | 314 | cmp r2, #TASK_SIZE |
| 314 | bichs r3, r3, #PSR_Z_BIT | 315 | bichs r3, r3, #PSR_Z_BIT |
| 315 | #endif | 316 | #endif |
| 316 | 317 | ||
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 539626351348..8d8748407cbe 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <asm/procinfo.h> | 21 | #include <asm/procinfo.h> |
| 22 | #include <asm/ptrace.h> | 22 | #include <asm/ptrace.h> |
| 23 | #include <asm/asm-offsets.h> | 23 | #include <asm/asm-offsets.h> |
| 24 | #include <asm/memory.h> | ||
| 24 | #include <asm/thread_info.h> | 25 | #include <asm/thread_info.h> |
| 25 | #include <asm/system.h> | 26 | #include <asm/system.h> |
| 26 | 27 | ||
| @@ -33,52 +34,28 @@ | |||
| 33 | #define MACHINFO_PGOFFIO 12 | 34 | #define MACHINFO_PGOFFIO 12 |
| 34 | #define MACHINFO_NAME 16 | 35 | #define MACHINFO_NAME 16 |
| 35 | 36 | ||
| 36 | #ifndef CONFIG_XIP_KERNEL | ||
| 37 | /* | 37 | /* |
| 38 | * We place the page tables 16K below TEXTADDR. Therefore, we must make sure | 38 | * swapper_pg_dir is the virtual address of the initial page table. |
| 39 | * that TEXTADDR is correctly set. Currently, we expect the least significant | 39 | * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must |
| 40 | * 16 bits to be 0x8000, but we could probably relax this restriction to | 40 | * make sure that KERNEL_RAM_ADDR is correctly set. Currently, we expect |
| 41 | * TEXTADDR >= PAGE_OFFSET + 0x4000 | 41 | * the least significant 16 bits to be 0x8000, but we could probably |
| 42 | * | 42 | * relax this restriction to KERNEL_RAM_ADDR >= PAGE_OFFSET + 0x4000. |
| 43 | * Note that swapper_pg_dir is the virtual address of the page tables, and | ||
| 44 | * pgtbl gives us a position-independent reference to these tables. We can | ||
| 45 | * do this because stext == TEXTADDR | ||
| 46 | */ | 43 | */ |
| 47 | #if (TEXTADDR & 0xffff) != 0x8000 | 44 | #if (KERNEL_RAM_ADDR & 0xffff) != 0x8000 |
| 48 | #error TEXTADDR must start at 0xXXXX8000 | 45 | #error KERNEL_RAM_ADDR must start at 0xXXXX8000 |
| 49 | #endif | 46 | #endif |
| 50 | 47 | ||
| 51 | .globl swapper_pg_dir | 48 | .globl swapper_pg_dir |
| 52 | .equ swapper_pg_dir, TEXTADDR - 0x4000 | 49 | .equ swapper_pg_dir, KERNEL_RAM_ADDR - 0x4000 |
| 53 | 50 | ||
| 54 | .macro pgtbl, rd, phys | 51 | .macro pgtbl, rd |
| 55 | adr \rd, stext | 52 | ldr \rd, =(__virt_to_phys(KERNEL_RAM_ADDR - 0x4000)) |
| 56 | sub \rd, \rd, #0x4000 | ||
| 57 | .endm | 53 | .endm |
| 58 | #else | ||
| 59 | /* | ||
| 60 | * XIP Kernel: | ||
| 61 | * | ||
| 62 | * We place the page tables 16K below DATAADDR. Therefore, we must make sure | ||
| 63 | * that DATAADDR is correctly set. Currently, we expect the least significant | ||
| 64 | * 16 bits to be 0x8000, but we could probably relax this restriction to | ||
| 65 | * DATAADDR >= PAGE_OFFSET + 0x4000 | ||
| 66 | * | ||
| 67 | * Note that pgtbl is meant to return the physical address of swapper_pg_dir. | ||
| 68 | * We can't make it relative to the kernel position in this case since | ||
| 69 | * the kernel can physically be anywhere. | ||
| 70 | */ | ||
| 71 | #if (DATAADDR & 0xffff) != 0x8000 | ||
| 72 | #error DATAADDR must start at 0xXXXX8000 | ||
| 73 | #endif | ||
| 74 | |||
| 75 | .globl swapper_pg_dir | ||
| 76 | .equ swapper_pg_dir, DATAADDR - 0x4000 | ||
| 77 | 54 | ||
| 78 | .macro pgtbl, rd, phys | 55 | #ifdef CONFIG_XIP_KERNEL |
| 79 | ldr \rd, =((DATAADDR - 0x4000) - VIRT_OFFSET) | 56 | #define TEXTADDR XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) |
| 80 | add \rd, \rd, \phys | 57 | #else |
| 81 | .endm | 58 | #define TEXTADDR KERNEL_RAM_ADDR |
| 82 | #endif | 59 | #endif |
| 83 | 60 | ||
| 84 | /* | 61 | /* |
| @@ -279,7 +256,7 @@ __turn_mmu_on: | |||
| 279 | .type __create_page_tables, %function | 256 | .type __create_page_tables, %function |
| 280 | __create_page_tables: | 257 | __create_page_tables: |
| 281 | ldr r5, [r8, #MACHINFO_PHYSRAM] @ physram | 258 | ldr r5, [r8, #MACHINFO_PHYSRAM] @ physram |
| 282 | pgtbl r4, r5 @ page table address | 259 | pgtbl r4 @ page table address |
| 283 | 260 | ||
| 284 | /* | 261 | /* |
| 285 | * Clear the 16K level 1 swapper page table | 262 | * Clear the 16K level 1 swapper page table |
| @@ -324,7 +301,7 @@ __create_page_tables: | |||
| 324 | /* | 301 | /* |
| 325 | * Then map first 1MB of ram in case it contains our boot params. | 302 | * Then map first 1MB of ram in case it contains our boot params. |
| 326 | */ | 303 | */ |
| 327 | add r0, r4, #VIRT_OFFSET >> 18 | 304 | add r0, r4, #PAGE_OFFSET >> 18 |
| 328 | orr r6, r5, r7 | 305 | orr r6, r5, r7 |
| 329 | str r6, [r0] | 306 | str r6, [r0] |
| 330 | 307 | ||
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 0d5db5279c5c..80c8e4c8cefa 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
| @@ -6,14 +6,23 @@ | |||
| 6 | #include <asm-generic/vmlinux.lds.h> | 6 | #include <asm-generic/vmlinux.lds.h> |
| 7 | #include <linux/config.h> | 7 | #include <linux/config.h> |
| 8 | #include <asm/thread_info.h> | 8 | #include <asm/thread_info.h> |
| 9 | #include <asm/memory.h> | ||
| 9 | 10 | ||
| 10 | OUTPUT_ARCH(arm) | 11 | OUTPUT_ARCH(arm) |
| 11 | ENTRY(stext) | 12 | ENTRY(stext) |
| 13 | |||
| 12 | #ifndef __ARMEB__ | 14 | #ifndef __ARMEB__ |
| 13 | jiffies = jiffies_64; | 15 | jiffies = jiffies_64; |
| 14 | #else | 16 | #else |
| 15 | jiffies = jiffies_64 + 4; | 17 | jiffies = jiffies_64 + 4; |
| 16 | #endif | 18 | #endif |
| 19 | |||
| 20 | #ifdef CONFIG_XIP_KERNEL | ||
| 21 | #define TEXTADDR XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) | ||
| 22 | #else | ||
| 23 | #define TEXTADDR KERNEL_RAM_ADDR | ||
| 24 | #endif | ||
| 25 | |||
| 17 | SECTIONS | 26 | SECTIONS |
| 18 | { | 27 | { |
| 19 | . = TEXTADDR; | 28 | . = TEXTADDR; |
| @@ -95,7 +104,7 @@ SECTIONS | |||
| 95 | 104 | ||
| 96 | #ifdef CONFIG_XIP_KERNEL | 105 | #ifdef CONFIG_XIP_KERNEL |
| 97 | __data_loc = ALIGN(4); /* location in binary */ | 106 | __data_loc = ALIGN(4); /* location in binary */ |
| 98 | . = DATAADDR; | 107 | . = KERNEL_RAM_ADDR; |
| 99 | #else | 108 | #else |
| 100 | . = ALIGN(THREAD_SIZE); | 109 | . = ALIGN(THREAD_SIZE); |
| 101 | __data_loc = .; | 110 | __data_loc = .; |
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 93619497779c..f94b0fbcdcc8 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <asm/system.h> | 23 | #include <asm/system.h> |
| 24 | #include <asm/pgtable.h> | 24 | #include <asm/pgtable.h> |
| 25 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 26 | #include <asm/mach/flash.h> | ||
| 26 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
| 27 | 28 | ||
| 28 | #include "generic.h" | 29 | #include "generic.h" |
| @@ -283,6 +284,7 @@ static struct platform_device sa11x0mtd_device = { | |||
| 283 | void sa11x0_set_flash_data(struct flash_platform_data *flash, | 284 | void sa11x0_set_flash_data(struct flash_platform_data *flash, |
| 284 | struct resource *res, int nr) | 285 | struct resource *res, int nr) |
| 285 | { | 286 | { |
| 287 | flash->name = "sa1100"; | ||
| 286 | sa11x0mtd_device.dev.platform_data = flash; | 288 | sa11x0mtd_device.dev.platform_data = flash; |
| 287 | sa11x0mtd_device.resource = res; | 289 | sa11x0mtd_device.resource = res; |
| 288 | sa11x0mtd_device.num_resources = nr; | 290 | sa11x0mtd_device.num_resources = nr; |
diff --git a/arch/arm/mach-sa1100/jornada720.c b/arch/arm/mach-sa1100/jornada720.c index 9c363bfcf310..89af0c831e8f 100644 --- a/arch/arm/mach-sa1100/jornada720.c +++ b/arch/arm/mach-sa1100/jornada720.c | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #include <linux/delay.h> | 8 | #include <linux/delay.h> |
| 9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
| 10 | #include <linux/ioport.h> | 10 | #include <linux/ioport.h> |
| 11 | #include <linux/mtd/mtd.h> | ||
| 12 | #include <linux/mtd/partitions.h> | ||
| 11 | 13 | ||
| 12 | #include <asm/hardware.h> | 14 | #include <asm/hardware.h> |
| 13 | #include <asm/hardware/sa1111.h> | 15 | #include <asm/hardware/sa1111.h> |
| @@ -16,6 +18,7 @@ | |||
| 16 | #include <asm/setup.h> | 18 | #include <asm/setup.h> |
| 17 | 19 | ||
| 18 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | #include <asm/mach/flash.h> | ||
| 19 | #include <asm/mach/map.h> | 22 | #include <asm/mach/map.h> |
| 20 | #include <asm/mach/serial_sa1100.h> | 23 | #include <asm/mach/serial_sa1100.h> |
| 21 | 24 | ||
| @@ -108,6 +111,66 @@ static void __init jornada720_map_io(void) | |||
| 108 | sa1100_register_uart(1, 1); | 111 | sa1100_register_uart(1, 1); |
| 109 | } | 112 | } |
| 110 | 113 | ||
| 114 | static struct mtd_partition jornada720_partitions[] = { | ||
| 115 | { | ||
| 116 | .name = "JORNADA720 boot firmware", | ||
| 117 | .size = 0x00040000, | ||
| 118 | .offset = 0, | ||
| 119 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
| 120 | }, { | ||
| 121 | .name = "JORNADA720 kernel", | ||
| 122 | .size = 0x000c0000, | ||
| 123 | .offset = 0x00040000, | ||
| 124 | }, { | ||
| 125 | .name = "JORNADA720 params", | ||
| 126 | .size = 0x00040000, | ||
| 127 | .offset = 0x00100000, | ||
| 128 | }, { | ||
| 129 | .name = "JORNADA720 initrd", | ||
| 130 | .size = 0x00100000, | ||
| 131 | .offset = 0x00140000, | ||
| 132 | }, { | ||
| 133 | .name = "JORNADA720 root cramfs", | ||
| 134 | .size = 0x00300000, | ||
| 135 | .offset = 0x00240000, | ||
| 136 | }, { | ||
| 137 | .name = "JORNADA720 usr cramfs", | ||
| 138 | .size = 0x00800000, | ||
| 139 | .offset = 0x00540000, | ||
| 140 | }, { | ||
| 141 | .name = "JORNADA720 usr local", | ||
| 142 | .size = 0, /* will expand to the end of the flash */ | ||
| 143 | .offset = 0x00d00000, | ||
| 144 | } | ||
| 145 | }; | ||
| 146 | |||
| 147 | static void jornada720_set_vpp(int vpp) | ||
| 148 | { | ||
| 149 | if (vpp) | ||
| 150 | PPSR |= 0x80; | ||
| 151 | else | ||
| 152 | PPSR &= ~0x80; | ||
| 153 | PPDR |= 0x80; | ||
| 154 | } | ||
| 155 | |||
| 156 | static struct flash_platform_data jornada720_flash_data = { | ||
| 157 | .map_name = "cfi_probe", | ||
| 158 | .set_vpp = jornada720_set_vpp, | ||
| 159 | .parts = jornada720_partitions, | ||
| 160 | .nr_parts = ARRAY_SIZE(jornada720_partitions), | ||
| 161 | }; | ||
| 162 | |||
| 163 | static struct resource jornada720_flash_resource = { | ||
| 164 | .start = SA1100_CS0_PHYS, | ||
| 165 | .end = SA1100_CS0_PHYS + SZ_32M - 1, | ||
| 166 | .flags = IORESOURCE_MEM, | ||
| 167 | }; | ||
| 168 | |||
| 169 | static void __init jornada720_mach_init(void) | ||
| 170 | { | ||
| 171 | sa11x0_set_flash_data(&jornada720_flash_data, &jornada720_flash_resource, 1); | ||
| 172 | } | ||
| 173 | |||
| 111 | MACHINE_START(JORNADA720, "HP Jornada 720") | 174 | MACHINE_START(JORNADA720, "HP Jornada 720") |
| 112 | /* Maintainer: Michael Gernoth <michael@gernoth.net> */ | 175 | /* Maintainer: Michael Gernoth <michael@gernoth.net> */ |
| 113 | .phys_ram = 0xc0000000, | 176 | .phys_ram = 0xc0000000, |
| @@ -117,4 +180,5 @@ MACHINE_START(JORNADA720, "HP Jornada 720") | |||
| 117 | .map_io = jornada720_map_io, | 180 | .map_io = jornada720_map_io, |
| 118 | .init_irq = sa1100_init_irq, | 181 | .init_irq = sa1100_init_irq, |
| 119 | .timer = &sa1100_timer, | 182 | .timer = &sa1100_timer, |
| 183 | .init_machine = jornada720_mach_init, | ||
| 120 | MACHINE_END | 184 | MACHINE_END |
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index f4496813615a..fd079ff1fc53 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
| @@ -363,20 +363,16 @@ static void __init bootmem_init(struct meminfo *mi) | |||
| 363 | 363 | ||
| 364 | memcpy(&meminfo, mi, sizeof(meminfo)); | 364 | memcpy(&meminfo, mi, sizeof(meminfo)); |
| 365 | 365 | ||
| 366 | #ifdef CONFIG_XIP_KERNEL | ||
| 367 | #error needs fixing | ||
| 368 | p->pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & PMD_MASK); | ||
| 369 | p->virtual = (unsigned long)&_stext & PMD_MASK; | ||
| 370 | p->length = ((unsigned long)&_etext - p->virtual + ~PMD_MASK) & PMD_MASK; | ||
| 371 | p->type = MT_ROM; | ||
| 372 | p ++; | ||
| 373 | #endif | ||
| 374 | |||
| 375 | /* | 366 | /* |
| 376 | * Clear out all the mappings below the kernel image. | 367 | * Clear out all the mappings below the kernel image. |
| 377 | * FIXME: what about XIP? | ||
| 378 | */ | 368 | */ |
| 379 | for (addr = 0; addr < PAGE_OFFSET; addr += PGDIR_SIZE) | 369 | for (addr = 0; addr < MODULE_START; addr += PGDIR_SIZE) |
| 370 | pmd_clear(pmd_off_k(addr)); | ||
| 371 | #ifdef CONFIG_XIP_KERNEL | ||
| 372 | /* The XIP kernel is mapped in the module area -- skip over it */ | ||
| 373 | addr = ((unsigned long)&_etext + PGDIR_SIZE - 1) & PGDIR_MASK; | ||
| 374 | #endif | ||
| 375 | for ( ; addr < PAGE_OFFSET; addr += PGDIR_SIZE) | ||
| 380 | pmd_clear(pmd_off_k(addr)); | 376 | pmd_clear(pmd_off_k(addr)); |
| 381 | 377 | ||
| 382 | /* | 378 | /* |
| @@ -436,6 +432,18 @@ static void __init devicemaps_init(struct machine_desc *mdesc) | |||
| 436 | pmd_clear(pmd_off_k(addr)); | 432 | pmd_clear(pmd_off_k(addr)); |
| 437 | 433 | ||
| 438 | /* | 434 | /* |
| 435 | * Map the kernel if it is XIP. | ||
| 436 | * It is always first in the modulearea. | ||
| 437 | */ | ||
| 438 | #ifdef CONFIG_XIP_KERNEL | ||
| 439 | map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & PGDIR_MASK); | ||
| 440 | map.virtual = MODULE_START; | ||
| 441 | map.length = ((unsigned long)&_etext - map.virtual + ~PGDIR_MASK) & PGDIR_MASK; | ||
| 442 | map.type = MT_ROM; | ||
| 443 | create_mapping(&map); | ||
| 444 | #endif | ||
| 445 | |||
| 446 | /* | ||
| 439 | * Map the cache flushing regions. | 447 | * Map the cache flushing regions. |
| 440 | */ | 448 | */ |
| 441 | #ifdef FLUSH_BASE | 449 | #ifdef FLUSH_BASE |
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c index 6a8e0caf9fdc..c81bec7b14d5 100644 --- a/drivers/mtd/maps/sa1100-flash.c +++ b/drivers/mtd/maps/sa1100-flash.c | |||
| @@ -130,20 +130,21 @@ struct sa_subdev_info { | |||
| 130 | char name[16]; | 130 | char name[16]; |
| 131 | struct map_info map; | 131 | struct map_info map; |
| 132 | struct mtd_info *mtd; | 132 | struct mtd_info *mtd; |
| 133 | struct flash_platform_data *data; | 133 | struct flash_platform_data *plat; |
| 134 | }; | 134 | }; |
| 135 | 135 | ||
| 136 | struct sa_info { | 136 | struct sa_info { |
| 137 | struct mtd_partition *parts; | 137 | struct mtd_partition *parts; |
| 138 | struct mtd_info *mtd; | 138 | struct mtd_info *mtd; |
| 139 | int num_subdev; | 139 | int num_subdev; |
| 140 | unsigned int nr_parts; | ||
| 140 | struct sa_subdev_info subdev[0]; | 141 | struct sa_subdev_info subdev[0]; |
| 141 | }; | 142 | }; |
| 142 | 143 | ||
| 143 | static void sa1100_set_vpp(struct map_info *map, int on) | 144 | static void sa1100_set_vpp(struct map_info *map, int on) |
| 144 | { | 145 | { |
| 145 | struct sa_subdev_info *subdev = container_of(map, struct sa_subdev_info, map); | 146 | struct sa_subdev_info *subdev = container_of(map, struct sa_subdev_info, map); |
| 146 | subdev->data->set_vpp(on); | 147 | subdev->plat->set_vpp(on); |
| 147 | } | 148 | } |
| 148 | 149 | ||
| 149 | static void sa1100_destroy_subdev(struct sa_subdev_info *subdev) | 150 | static void sa1100_destroy_subdev(struct sa_subdev_info *subdev) |
| @@ -187,7 +188,7 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r | |||
| 187 | goto out; | 188 | goto out; |
| 188 | } | 189 | } |
| 189 | 190 | ||
| 190 | if (subdev->data->set_vpp) | 191 | if (subdev->plat->set_vpp) |
| 191 | subdev->map.set_vpp = sa1100_set_vpp; | 192 | subdev->map.set_vpp = sa1100_set_vpp; |
| 192 | 193 | ||
| 193 | subdev->map.phys = phys; | 194 | subdev->map.phys = phys; |
| @@ -204,7 +205,7 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r | |||
| 204 | * Now let's probe for the actual flash. Do it here since | 205 | * Now let's probe for the actual flash. Do it here since |
| 205 | * specific machine settings might have been set above. | 206 | * specific machine settings might have been set above. |
| 206 | */ | 207 | */ |
| 207 | subdev->mtd = do_map_probe(subdev->data->map_name, &subdev->map); | 208 | subdev->mtd = do_map_probe(subdev->plat->map_name, &subdev->map); |
| 208 | if (subdev->mtd == NULL) { | 209 | if (subdev->mtd == NULL) { |
| 209 | ret = -ENXIO; | 210 | ret = -ENXIO; |
| 210 | goto err; | 211 | goto err; |
| @@ -223,13 +224,17 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r | |||
| 223 | return ret; | 224 | return ret; |
| 224 | } | 225 | } |
| 225 | 226 | ||
| 226 | static void sa1100_destroy(struct sa_info *info) | 227 | static void sa1100_destroy(struct sa_info *info, struct flash_platform_data *plat) |
| 227 | { | 228 | { |
| 228 | int i; | 229 | int i; |
| 229 | 230 | ||
| 230 | if (info->mtd) { | 231 | if (info->mtd) { |
| 231 | del_mtd_partitions(info->mtd); | 232 | if (info->nr_parts == 0) |
| 232 | 233 | del_mtd_device(info->mtd); | |
| 234 | #ifdef CONFIG_MTD_PARTITIONS | ||
| 235 | else | ||
| 236 | del_mtd_partitions(info->mtd); | ||
| 237 | #endif | ||
| 233 | #ifdef CONFIG_MTD_CONCAT | 238 | #ifdef CONFIG_MTD_CONCAT |
| 234 | if (info->mtd != info->subdev[0].mtd) | 239 | if (info->mtd != info->subdev[0].mtd) |
| 235 | mtd_concat_destroy(info->mtd); | 240 | mtd_concat_destroy(info->mtd); |
| @@ -242,10 +247,13 @@ static void sa1100_destroy(struct sa_info *info) | |||
| 242 | for (i = info->num_subdev - 1; i >= 0; i--) | 247 | for (i = info->num_subdev - 1; i >= 0; i--) |
| 243 | sa1100_destroy_subdev(&info->subdev[i]); | 248 | sa1100_destroy_subdev(&info->subdev[i]); |
| 244 | kfree(info); | 249 | kfree(info); |
| 250 | |||
| 251 | if (plat->exit) | ||
| 252 | plat->exit(); | ||
| 245 | } | 253 | } |
| 246 | 254 | ||
| 247 | static struct sa_info *__init | 255 | static struct sa_info *__init |
| 248 | sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash) | 256 | sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat) |
| 249 | { | 257 | { |
| 250 | struct sa_info *info; | 258 | struct sa_info *info; |
| 251 | int nr, size, i, ret = 0; | 259 | int nr, size, i, ret = 0; |
| @@ -275,6 +283,12 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash | |||
| 275 | 283 | ||
| 276 | memset(info, 0, size); | 284 | memset(info, 0, size); |
| 277 | 285 | ||
| 286 | if (plat->init) { | ||
| 287 | ret = plat->init(); | ||
| 288 | if (ret) | ||
| 289 | goto err; | ||
| 290 | } | ||
| 291 | |||
| 278 | /* | 292 | /* |
| 279 | * Claim and then map the memory regions. | 293 | * Claim and then map the memory regions. |
| 280 | */ | 294 | */ |
| @@ -287,8 +301,8 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash | |||
| 287 | break; | 301 | break; |
| 288 | 302 | ||
| 289 | subdev->map.name = subdev->name; | 303 | subdev->map.name = subdev->name; |
| 290 | sprintf(subdev->name, "sa1100-%d", i); | 304 | sprintf(subdev->name, "%s-%d", plat->name, i); |
| 291 | subdev->data = flash; | 305 | subdev->plat = plat; |
| 292 | 306 | ||
| 293 | ret = sa1100_probe_subdev(subdev, res); | 307 | ret = sa1100_probe_subdev(subdev, res); |
| 294 | if (ret) | 308 | if (ret) |
| @@ -309,7 +323,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash | |||
| 309 | * otherwise fail. Either way, it'll be called "sa1100". | 323 | * otherwise fail. Either way, it'll be called "sa1100". |
| 310 | */ | 324 | */ |
| 311 | if (info->num_subdev == 1) { | 325 | if (info->num_subdev == 1) { |
| 312 | strcpy(info->subdev[0].name, "sa1100"); | 326 | strcpy(info->subdev[0].name, plat->name); |
| 313 | info->mtd = info->subdev[0].mtd; | 327 | info->mtd = info->subdev[0].mtd; |
| 314 | ret = 0; | 328 | ret = 0; |
| 315 | } else if (info->num_subdev > 1) { | 329 | } else if (info->num_subdev > 1) { |
| @@ -322,7 +336,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash | |||
| 322 | cdev[i] = info->subdev[i].mtd; | 336 | cdev[i] = info->subdev[i].mtd; |
| 323 | 337 | ||
| 324 | info->mtd = mtd_concat_create(cdev, info->num_subdev, | 338 | info->mtd = mtd_concat_create(cdev, info->num_subdev, |
| 325 | "sa1100"); | 339 | plat->name); |
| 326 | if (info->mtd == NULL) | 340 | if (info->mtd == NULL) |
| 327 | ret = -ENXIO; | 341 | ret = -ENXIO; |
| 328 | #else | 342 | #else |
| @@ -336,7 +350,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *flash | |||
| 336 | return info; | 350 | return info; |
| 337 | 351 | ||
| 338 | err: | 352 | err: |
| 339 | sa1100_destroy(info); | 353 | sa1100_destroy(info, plat); |
| 340 | out: | 354 | out: |
| 341 | return ERR_PTR(ret); | 355 | return ERR_PTR(ret); |
| 342 | } | 356 | } |
| @@ -346,16 +360,16 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; | |||
| 346 | static int __init sa1100_mtd_probe(struct device *dev) | 360 | static int __init sa1100_mtd_probe(struct device *dev) |
| 347 | { | 361 | { |
| 348 | struct platform_device *pdev = to_platform_device(dev); | 362 | struct platform_device *pdev = to_platform_device(dev); |
| 349 | struct flash_platform_data *flash = pdev->dev.platform_data; | 363 | struct flash_platform_data *plat = pdev->dev.platform_data; |
| 350 | struct mtd_partition *parts; | 364 | struct mtd_partition *parts; |
| 351 | const char *part_type = NULL; | 365 | const char *part_type = NULL; |
| 352 | struct sa_info *info; | 366 | struct sa_info *info; |
| 353 | int err, nr_parts = 0; | 367 | int err, nr_parts = 0; |
| 354 | 368 | ||
| 355 | if (!flash) | 369 | if (!plat) |
| 356 | return -ENODEV; | 370 | return -ENODEV; |
| 357 | 371 | ||
| 358 | info = sa1100_setup_mtd(pdev, flash); | 372 | info = sa1100_setup_mtd(pdev, plat); |
| 359 | if (IS_ERR(info)) { | 373 | if (IS_ERR(info)) { |
| 360 | err = PTR_ERR(info); | 374 | err = PTR_ERR(info); |
| 361 | goto out; | 375 | goto out; |
| @@ -372,8 +386,8 @@ static int __init sa1100_mtd_probe(struct device *dev) | |||
| 372 | } else | 386 | } else |
| 373 | #endif | 387 | #endif |
| 374 | { | 388 | { |
| 375 | parts = flash->parts; | 389 | parts = plat->parts; |
| 376 | nr_parts = flash->nr_parts; | 390 | nr_parts = plat->nr_parts; |
| 377 | part_type = "static"; | 391 | part_type = "static"; |
| 378 | } | 392 | } |
| 379 | 393 | ||
| @@ -387,6 +401,8 @@ static int __init sa1100_mtd_probe(struct device *dev) | |||
| 387 | add_mtd_partitions(info->mtd, parts, nr_parts); | 401 | add_mtd_partitions(info->mtd, parts, nr_parts); |
| 388 | } | 402 | } |
| 389 | 403 | ||
| 404 | info->nr_parts = nr_parts; | ||
| 405 | |||
| 390 | dev_set_drvdata(dev, info); | 406 | dev_set_drvdata(dev, info); |
| 391 | err = 0; | 407 | err = 0; |
| 392 | 408 | ||
| @@ -397,8 +413,11 @@ static int __init sa1100_mtd_probe(struct device *dev) | |||
| 397 | static int __exit sa1100_mtd_remove(struct device *dev) | 413 | static int __exit sa1100_mtd_remove(struct device *dev) |
| 398 | { | 414 | { |
| 399 | struct sa_info *info = dev_get_drvdata(dev); | 415 | struct sa_info *info = dev_get_drvdata(dev); |
| 416 | struct flash_platform_data *plat = dev->platform_data; | ||
| 417 | |||
| 400 | dev_set_drvdata(dev, NULL); | 418 | dev_set_drvdata(dev, NULL); |
| 401 | sa1100_destroy(info); | 419 | sa1100_destroy(info, plat); |
| 420 | |||
| 402 | return 0; | 421 | return 0; |
| 403 | } | 422 | } |
| 404 | 423 | ||
| @@ -421,9 +440,17 @@ static int sa1100_mtd_resume(struct device *dev) | |||
| 421 | info->mtd->resume(info->mtd); | 440 | info->mtd->resume(info->mtd); |
| 422 | return 0; | 441 | return 0; |
| 423 | } | 442 | } |
| 443 | |||
| 444 | static void sa1100_mtd_shutdown(struct device *dev) | ||
| 445 | { | ||
| 446 | struct sa_info *info = dev_get_drvdata(dev); | ||
| 447 | if (info && info->mtd->suspend(info->mtd) == 0) | ||
| 448 | info->mtd->resume(info->mtd); | ||
| 449 | } | ||
| 424 | #else | 450 | #else |
| 425 | #define sa1100_mtd_suspend NULL | 451 | #define sa1100_mtd_suspend NULL |
| 426 | #define sa1100_mtd_resume NULL | 452 | #define sa1100_mtd_resume NULL |
| 453 | #define sa1100_mtd_shutdown NULL | ||
| 427 | #endif | 454 | #endif |
| 428 | 455 | ||
| 429 | static struct device_driver sa1100_mtd_driver = { | 456 | static struct device_driver sa1100_mtd_driver = { |
| @@ -433,6 +460,7 @@ static struct device_driver sa1100_mtd_driver = { | |||
| 433 | .remove = __exit_p(sa1100_mtd_remove), | 460 | .remove = __exit_p(sa1100_mtd_remove), |
| 434 | .suspend = sa1100_mtd_suspend, | 461 | .suspend = sa1100_mtd_suspend, |
| 435 | .resume = sa1100_mtd_resume, | 462 | .resume = sa1100_mtd_resume, |
| 463 | .shutdown = sa1100_mtd_shutdown, | ||
| 436 | }; | 464 | }; |
| 437 | 465 | ||
| 438 | static int __init sa1100_mtd_init(void) | 466 | static int __init sa1100_mtd_init(void) |
diff --git a/include/asm-arm/arch-aaec2000/memory.h b/include/asm-arm/arch-aaec2000/memory.h index 79c90813bc3e..d8209f8911d6 100644 --- a/include/asm-arm/arch-aaec2000/memory.h +++ b/include/asm-arm/arch-aaec2000/memory.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/config.h> | 14 | #include <linux/config.h> |
| 15 | 15 | ||
| 16 | #define PHYS_OFFSET (0xf0000000UL) | 16 | #define PHYS_OFFSET UL(0xf0000000) |
| 17 | 17 | ||
| 18 | #define __virt_to_bus(x) __virt_to_phys(x) | 18 | #define __virt_to_bus(x) __virt_to_phys(x) |
| 19 | #define __bus_to_virt(x) __phys_to_virt(x) | 19 | #define __bus_to_virt(x) __phys_to_virt(x) |
diff --git a/include/asm-arm/arch-cl7500/memory.h b/include/asm-arm/arch-cl7500/memory.h index 9776bba8e585..34f40a6cec30 100644 --- a/include/asm-arm/arch-cl7500/memory.h +++ b/include/asm-arm/arch-cl7500/memory.h | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | /* | 17 | /* |
| 18 | * Physical DRAM offset. | 18 | * Physical DRAM offset. |
| 19 | */ | 19 | */ |
| 20 | #define PHYS_OFFSET (0x10000000UL) | 20 | #define PHYS_OFFSET UL(0x10000000) |
| 21 | 21 | ||
| 22 | /* | 22 | /* |
| 23 | * These are exactly the same on the RiscPC as the | 23 | * These are exactly the same on the RiscPC as the |
diff --git a/include/asm-arm/arch-clps711x/memory.h b/include/asm-arm/arch-clps711x/memory.h index bd978947db42..61d8717406ce 100644 --- a/include/asm-arm/arch-clps711x/memory.h +++ b/include/asm-arm/arch-clps711x/memory.h | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | /* | 25 | /* |
| 26 | * Physical DRAM offset. | 26 | * Physical DRAM offset. |
| 27 | */ | 27 | */ |
| 28 | #define PHYS_OFFSET (0xc0000000UL) | 28 | #define PHYS_OFFSET UL(0xc0000000) |
| 29 | 29 | ||
| 30 | /* | 30 | /* |
| 31 | * Virtual view <-> DMA view memory address translations | 31 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-ebsa110/memory.h b/include/asm-arm/arch-ebsa110/memory.h index 5a9493e12275..02f144520c10 100644 --- a/include/asm-arm/arch-ebsa110/memory.h +++ b/include/asm-arm/arch-ebsa110/memory.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | /* | 19 | /* |
| 20 | * Physical DRAM offset. | 20 | * Physical DRAM offset. |
| 21 | */ | 21 | */ |
| 22 | #define PHYS_OFFSET (0x00000000UL) | 22 | #define PHYS_OFFSET UL(0x00000000) |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
| 25 | * We keep this 1:1 so that we don't interfere | 25 | * We keep this 1:1 so that we don't interfere |
diff --git a/include/asm-arm/arch-ebsa285/memory.h b/include/asm-arm/arch-ebsa285/memory.h index d0466f9987d3..09e335cd687d 100644 --- a/include/asm-arm/arch-ebsa285/memory.h +++ b/include/asm-arm/arch-ebsa285/memory.h | |||
| @@ -46,14 +46,14 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
| 46 | #if defined(CONFIG_ARCH_FOOTBRIDGE) | 46 | #if defined(CONFIG_ARCH_FOOTBRIDGE) |
| 47 | 47 | ||
| 48 | /* Task size and page offset at 3GB */ | 48 | /* Task size and page offset at 3GB */ |
| 49 | #define TASK_SIZE (0xbf000000UL) | 49 | #define TASK_SIZE UL(0xbf000000) |
| 50 | #define PAGE_OFFSET (0xc0000000UL) | 50 | #define PAGE_OFFSET UL(0xc0000000) |
| 51 | 51 | ||
| 52 | #elif defined(CONFIG_ARCH_CO285) | 52 | #elif defined(CONFIG_ARCH_CO285) |
| 53 | 53 | ||
| 54 | /* Task size and page offset at 1.5GB */ | 54 | /* Task size and page offset at 1.5GB */ |
| 55 | #define TASK_SIZE (0x5f000000UL) | 55 | #define TASK_SIZE UL(0x5f000000) |
| 56 | #define PAGE_OFFSET (0x60000000UL) | 56 | #define PAGE_OFFSET UL(0x60000000) |
| 57 | 57 | ||
| 58 | #else | 58 | #else |
| 59 | 59 | ||
| @@ -64,7 +64,7 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
| 64 | /* | 64 | /* |
| 65 | * Physical DRAM offset. | 65 | * Physical DRAM offset. |
| 66 | */ | 66 | */ |
| 67 | #define PHYS_OFFSET (0x00000000UL) | 67 | #define PHYS_OFFSET UL(0x00000000) |
| 68 | 68 | ||
| 69 | /* | 69 | /* |
| 70 | * This decides where the kernel will search for a free chunk of vm | 70 | * This decides where the kernel will search for a free chunk of vm |
diff --git a/include/asm-arm/arch-epxa10db/memory.h b/include/asm-arm/arch-epxa10db/memory.h index 3f86bf7f67f0..999541b6a9f5 100644 --- a/include/asm-arm/arch-epxa10db/memory.h +++ b/include/asm-arm/arch-epxa10db/memory.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | /* | 23 | /* |
| 24 | * Physical DRAM offset. | 24 | * Physical DRAM offset. |
| 25 | */ | 25 | */ |
| 26 | #define PHYS_OFFSET (0x00000000UL) | 26 | #define PHYS_OFFSET UL(0x00000000) |
| 27 | 27 | ||
| 28 | /* | 28 | /* |
| 29 | * Virtual view <-> DMA view memory address translations | 29 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-h720x/memory.h b/include/asm-arm/arch-h720x/memory.h index 5633447af268..4a1bfd78a0fe 100644 --- a/include/asm-arm/arch-h720x/memory.h +++ b/include/asm-arm/arch-h720x/memory.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | * Page offset: | 11 | * Page offset: |
| 12 | * ( 0xc0000000UL ) | 12 | * ( 0xc0000000UL ) |
| 13 | */ | 13 | */ |
| 14 | #define PHYS_OFFSET (0x40000000UL) | 14 | #define PHYS_OFFSET UL(0x40000000) |
| 15 | 15 | ||
| 16 | /* | 16 | /* |
| 17 | * Virtual view <-> DMA view memory address translations | 17 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-imx/memory.h b/include/asm-arm/arch-imx/memory.h index 116a91fa14f1..d09ae32cd2f4 100644 --- a/include/asm-arm/arch-imx/memory.h +++ b/include/asm-arm/arch-imx/memory.h | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | #ifndef __ASM_ARCH_MMU_H | 21 | #ifndef __ASM_ARCH_MMU_H |
| 22 | #define __ASM_ARCH_MMU_H | 22 | #define __ASM_ARCH_MMU_H |
| 23 | 23 | ||
| 24 | #define PHYS_OFFSET (0x08000000UL) | 24 | #define PHYS_OFFSET UL(0x08000000) |
| 25 | 25 | ||
| 26 | /* | 26 | /* |
| 27 | * Virtual view <-> DMA view memory address translations | 27 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-integrator/memory.h b/include/asm-arm/arch-integrator/memory.h index 2087ea7d28a9..1ab56d783e7c 100644 --- a/include/asm-arm/arch-integrator/memory.h +++ b/include/asm-arm/arch-integrator/memory.h | |||
| @@ -23,8 +23,8 @@ | |||
| 23 | /* | 23 | /* |
| 24 | * Physical DRAM offset. | 24 | * Physical DRAM offset. |
| 25 | */ | 25 | */ |
| 26 | #define PHYS_OFFSET (0x00000000UL) | 26 | #define PHYS_OFFSET UL(0x00000000) |
| 27 | #define BUS_OFFSET (0x80000000UL) | 27 | #define BUS_OFFSET UL(0x80000000) |
| 28 | 28 | ||
| 29 | /* | 29 | /* |
| 30 | * Virtual view <-> DMA view memory address translations | 30 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-iop3xx/memory.h b/include/asm-arm/arch-iop3xx/memory.h index 45351f5cd904..bc62f4b13235 100644 --- a/include/asm-arm/arch-iop3xx/memory.h +++ b/include/asm-arm/arch-iop3xx/memory.h | |||
| @@ -12,9 +12,9 @@ | |||
| 12 | * Physical DRAM offset. | 12 | * Physical DRAM offset. |
| 13 | */ | 13 | */ |
| 14 | #ifndef CONFIG_ARCH_IOP331 | 14 | #ifndef CONFIG_ARCH_IOP331 |
| 15 | #define PHYS_OFFSET (0xa0000000UL) | 15 | #define PHYS_OFFSET UL(0xa0000000) |
| 16 | #else | 16 | #else |
| 17 | #define PHYS_OFFSET (0x00000000UL) | 17 | #define PHYS_OFFSET UL(0x00000000) |
| 18 | #endif | 18 | #endif |
| 19 | 19 | ||
| 20 | /* | 20 | /* |
diff --git a/include/asm-arm/arch-ixp2000/memory.h b/include/asm-arm/arch-ixp2000/memory.h index d0f415c6dae9..21e1de51e3f6 100644 --- a/include/asm-arm/arch-ixp2000/memory.h +++ b/include/asm-arm/arch-ixp2000/memory.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #ifndef __ASM_ARCH_MEMORY_H | 13 | #ifndef __ASM_ARCH_MEMORY_H |
| 14 | #define __ASM_ARCH_MEMORY_H | 14 | #define __ASM_ARCH_MEMORY_H |
| 15 | 15 | ||
| 16 | #define PHYS_OFFSET (0x00000000UL) | 16 | #define PHYS_OFFSET UL(0x00000000) |
| 17 | 17 | ||
| 18 | /* | 18 | /* |
| 19 | * Virtual view <-> DMA view memory address translations | 19 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-ixp2000/platform.h b/include/asm-arm/arch-ixp2000/platform.h index abdcf51bd283..a66317ab2071 100644 --- a/include/asm-arm/arch-ixp2000/platform.h +++ b/include/asm-arm/arch-ixp2000/platform.h | |||
| @@ -15,40 +15,40 @@ | |||
| 15 | 15 | ||
| 16 | #ifndef __ASSEMBLY__ | 16 | #ifndef __ASSEMBLY__ |
| 17 | 17 | ||
| 18 | static inline unsigned long ixp2000_reg_read(volatile void *reg) | ||
| 19 | { | ||
| 20 | return *((volatile unsigned long *)reg); | ||
| 21 | } | ||
| 22 | |||
| 23 | static inline void ixp2000_reg_write(volatile void *reg, unsigned long val) | ||
| 24 | { | ||
| 25 | *((volatile unsigned long *)reg) = val; | ||
| 26 | } | ||
| 27 | |||
| 18 | /* | 28 | /* |
| 19 | * The IXP2400 B0 silicon contains an erratum (#66) that causes writes | 29 | * On the IXP2400, we can't use XCB=000 due to chip bugs. We use |
| 20 | * to on-chip I/O register to not complete fully. What this means is | 30 | * XCB=101 instead, but that makes all I/O accesses bufferable. This |
| 21 | * that if you have a write to on-chip I/O followed by a back-to-back | 31 | * is not a problem in general, but we do have to be slightly more |
| 22 | * read or write, the first write will happen twice. OR...if it's | 32 | * careful because I/O writes are no longer automatically flushed out |
| 23 | * not a back-to-back transaction, the read or write will generate | 33 | * of the write buffer. |
| 24 | * incorrect data. | ||
| 25 | * | ||
| 26 | * The official work around for this is to set the on-chip I/O regions | ||
| 27 | * as XCB=101 and then force a read-back from the register. | ||
| 28 | * | 34 | * |
| 35 | * In cases where we want to make sure that a write has been flushed | ||
| 36 | * out of the write buffer before we proceed, for example when masking | ||
| 37 | * a device interrupt before re-enabling IRQs in CPSR, we can use this | ||
| 38 | * function, ixp2000_reg_wrb, which performs a write, a readback, and | ||
| 39 | * issues a dummy instruction dependent on the value of the readback | ||
| 40 | * (mov rX, rX) to make sure that the readback has completed before we | ||
| 41 | * continue. | ||
| 29 | */ | 42 | */ |
| 30 | #if defined(CONFIG_ARCH_ENP2611) || defined(CONFIG_ARCH_IXDP2400) || defined(CONFIG_ARCH_IXDP2401) | 43 | static inline void ixp2000_reg_wrb(volatile void *reg, unsigned long val) |
| 31 | |||
| 32 | #include <asm/system.h> /* Pickup local_irq_ functions */ | ||
| 33 | |||
| 34 | static inline void ixp2000_reg_write(volatile void *reg, unsigned long val) | ||
| 35 | { | 44 | { |
| 36 | unsigned long dummy; | 45 | unsigned long dummy; |
| 37 | unsigned long flags; | ||
| 38 | 46 | ||
| 39 | local_irq_save(flags); | ||
| 40 | *((volatile unsigned long *)reg) = val; | 47 | *((volatile unsigned long *)reg) = val; |
| 41 | barrier(); | 48 | |
| 42 | dummy = *((volatile unsigned long *)reg); | 49 | dummy = *((volatile unsigned long *)reg); |
| 43 | local_irq_restore(flags); | 50 | __asm__ __volatile__("mov %0, %0" : "+r" (dummy)); |
| 44 | } | ||
| 45 | #else | ||
| 46 | static inline void ixp2000_reg_write(volatile void *reg, unsigned long val) | ||
| 47 | { | ||
| 48 | *((volatile unsigned long *)reg) = val; | ||
| 49 | } | 51 | } |
| 50 | #endif /* IXDP2400 || IXDP2401 */ | ||
| 51 | #define ixp2000_reg_read(reg) (*((volatile unsigned long *)reg)) | ||
| 52 | 52 | ||
| 53 | /* | 53 | /* |
| 54 | * Boards may multiplex different devices on the 2nd channel of | 54 | * Boards may multiplex different devices on the 2nd channel of |
diff --git a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h index 004696a95bdb..2b149ed59149 100644 --- a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h +++ b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h | |||
| @@ -36,11 +36,11 @@ | |||
| 36 | * | 36 | * |
| 37 | * 0x6000000 0x00004000 ioremap'd QMgr | 37 | * 0x6000000 0x00004000 ioremap'd QMgr |
| 38 | * | 38 | * |
| 39 | * 0xC0000000 0x00001000 0xffbfe000 PCI CFG | 39 | * 0xC0000000 0x00001000 0xffbff000 PCI CFG |
| 40 | * | 40 | * |
| 41 | * 0xC4000000 0x00001000 0xffbfd000 EXP CFG | 41 | * 0xC4000000 0x00001000 0xffbfe000 EXP CFG |
| 42 | * | 42 | * |
| 43 | * 0xC8000000 0x0000C000 0xffbf2000 On-Chip Peripherals | 43 | * 0xC8000000 0x00013000 0xffbeb000 On-Chip Peripherals |
| 44 | */ | 44 | */ |
| 45 | 45 | ||
| 46 | /* | 46 | /* |
| @@ -52,22 +52,22 @@ | |||
| 52 | * Expansion BUS Configuration registers | 52 | * Expansion BUS Configuration registers |
| 53 | */ | 53 | */ |
| 54 | #define IXP4XX_EXP_CFG_BASE_PHYS (0xC4000000) | 54 | #define IXP4XX_EXP_CFG_BASE_PHYS (0xC4000000) |
| 55 | #define IXP4XX_EXP_CFG_BASE_VIRT (0xFFBFD000) | 55 | #define IXP4XX_EXP_CFG_BASE_VIRT (0xFFBFE000) |
| 56 | #define IXP4XX_EXP_CFG_REGION_SIZE (0x00001000) | 56 | #define IXP4XX_EXP_CFG_REGION_SIZE (0x00001000) |
| 57 | 57 | ||
| 58 | /* | 58 | /* |
| 59 | * PCI Config registers | 59 | * PCI Config registers |
| 60 | */ | 60 | */ |
| 61 | #define IXP4XX_PCI_CFG_BASE_PHYS (0xC0000000) | 61 | #define IXP4XX_PCI_CFG_BASE_PHYS (0xC0000000) |
| 62 | #define IXP4XX_PCI_CFG_BASE_VIRT (0xFFBFE000) | 62 | #define IXP4XX_PCI_CFG_BASE_VIRT (0xFFBFF000) |
| 63 | #define IXP4XX_PCI_CFG_REGION_SIZE (0x00001000) | 63 | #define IXP4XX_PCI_CFG_REGION_SIZE (0x00001000) |
| 64 | 64 | ||
| 65 | /* | 65 | /* |
| 66 | * Peripheral space | 66 | * Peripheral space |
| 67 | */ | 67 | */ |
| 68 | #define IXP4XX_PERIPHERAL_BASE_PHYS (0xC8000000) | 68 | #define IXP4XX_PERIPHERAL_BASE_PHYS (0xC8000000) |
| 69 | #define IXP4XX_PERIPHERAL_BASE_VIRT (0xFFBF2000) | 69 | #define IXP4XX_PERIPHERAL_BASE_VIRT (0xFFBEB000) |
| 70 | #define IXP4XX_PERIPHERAL_REGION_SIZE (0x0000C000) | 70 | #define IXP4XX_PERIPHERAL_REGION_SIZE (0x00013000) |
| 71 | 71 | ||
| 72 | /* | 72 | /* |
| 73 | * Debug UART | 73 | * Debug UART |
| @@ -115,25 +115,48 @@ | |||
| 115 | /* | 115 | /* |
| 116 | * Peripheral Space Register Region Base Addresses | 116 | * Peripheral Space Register Region Base Addresses |
| 117 | */ | 117 | */ |
| 118 | #define IXP4XX_UART1_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x0000) | 118 | #define IXP4XX_UART1_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x0000) |
| 119 | #define IXP4XX_UART2_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x1000) | 119 | #define IXP4XX_UART2_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x1000) |
| 120 | #define IXP4XX_PMU_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x2000) | 120 | #define IXP4XX_PMU_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x2000) |
| 121 | #define IXP4XX_INTC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x3000) | 121 | #define IXP4XX_INTC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x3000) |
| 122 | #define IXP4XX_GPIO_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x4000) | 122 | #define IXP4XX_GPIO_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x4000) |
| 123 | #define IXP4XX_TIMER_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x5000) | 123 | #define IXP4XX_TIMER_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x5000) |
| 124 | #define IXP4XX_EthA_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x9000) | 124 | #define IXP4XX_NPEA_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x6000) |
| 125 | #define IXP4XX_EthB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xA000) | 125 | #define IXP4XX_NPEB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x7000) |
| 126 | #define IXP4XX_USB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xB000) | 126 | #define IXP4XX_NPEC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x8000) |
| 127 | 127 | #define IXP4XX_EthB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x9000) | |
| 128 | #define IXP4XX_UART1_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x0000) | 128 | #define IXP4XX_EthC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xA000) |
| 129 | #define IXP4XX_UART2_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x1000) | 129 | #define IXP4XX_USB_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xB000) |
| 130 | #define IXP4XX_PMU_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x2000) | 130 | /* ixp46X only */ |
| 131 | #define IXP4XX_INTC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000) | 131 | #define IXP4XX_EthA_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xC000) |
| 132 | #define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000) | 132 | #define IXP4XX_EthB1_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xD000) |
| 133 | #define IXP4XX_TIMER_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000) | 133 | #define IXP4XX_EthB2_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xE000) |
| 134 | #define IXP4XX_EthA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x9000) | 134 | #define IXP4XX_EthB3_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0xF000) |
| 135 | #define IXP4XX_EthB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xA000) | 135 | #define IXP4XX_TIMESYNC_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x10000) |
| 136 | #define IXP4XX_USB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xB000) | 136 | #define IXP4XX_I2C_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x11000) |
| 137 | #define IXP4XX_SSP_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x12000) | ||
| 138 | |||
| 139 | |||
| 140 | #define IXP4XX_UART1_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x0000) | ||
| 141 | #define IXP4XX_UART2_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x1000) | ||
| 142 | #define IXP4XX_PMU_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x2000) | ||
| 143 | #define IXP4XX_INTC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000) | ||
| 144 | #define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000) | ||
| 145 | #define IXP4XX_TIMER_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000) | ||
| 146 | #define IXP4XX_NPEA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x6000) | ||
| 147 | #define IXP4XX_NPEB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x7000) | ||
| 148 | #define IXP4XX_NPEC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_PHYS + 0x8000) | ||
| 149 | #define IXP4XX_EthB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x9000) | ||
| 150 | #define IXP4XX_EthC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xA000) | ||
| 151 | #define IXP4XX_USB_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xB000) | ||
| 152 | /* ixp46X only */ | ||
| 153 | #define IXP4XX_EthA_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xC000) | ||
| 154 | #define IXP4XX_EthB1_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xD000) | ||
| 155 | #define IXP4XX_EthB2_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xE000) | ||
| 156 | #define IXP4XX_EthB3_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0xF000) | ||
| 157 | #define IXP4XX_TIMESYNC_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x10000) | ||
| 158 | #define IXP4XX_I2C_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x11000) | ||
| 159 | #define IXP4XX_SSP_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x12000) | ||
| 137 | 160 | ||
| 138 | /* | 161 | /* |
| 139 | * Constants to make it easy to access Interrupt Controller registers | 162 | * Constants to make it easy to access Interrupt Controller registers |
diff --git a/include/asm-arm/arch-ixp4xx/memory.h b/include/asm-arm/arch-ixp4xx/memory.h index d348548b592b..e024d0a1a669 100644 --- a/include/asm-arm/arch-ixp4xx/memory.h +++ b/include/asm-arm/arch-ixp4xx/memory.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | /* | 12 | /* |
| 13 | * Physical DRAM offset. | 13 | * Physical DRAM offset. |
| 14 | */ | 14 | */ |
| 15 | #define PHYS_OFFSET (0x00000000UL) | 15 | #define PHYS_OFFSET UL(0x00000000) |
| 16 | 16 | ||
| 17 | #ifndef __ASSEMBLY__ | 17 | #ifndef __ASSEMBLY__ |
| 18 | 18 | ||
diff --git a/include/asm-arm/arch-l7200/memory.h b/include/asm-arm/arch-l7200/memory.h index c5b9608cb137..9e50a171f78a 100644 --- a/include/asm-arm/arch-l7200/memory.h +++ b/include/asm-arm/arch-l7200/memory.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | /* | 15 | /* |
| 16 | * Physical DRAM offset on the L7200 SDB. | 16 | * Physical DRAM offset on the L7200 SDB. |
| 17 | */ | 17 | */ |
| 18 | #define PHYS_OFFSET (0xf0000000UL) | 18 | #define PHYS_OFFSET UL(0xf0000000) |
| 19 | 19 | ||
| 20 | #define __virt_to_bus(x) __virt_to_phys(x) | 20 | #define __virt_to_bus(x) __virt_to_phys(x) |
| 21 | #define __bus_to_virt(x) __phys_to_virt(x) | 21 | #define __bus_to_virt(x) __phys_to_virt(x) |
diff --git a/include/asm-arm/arch-lh7a40x/memory.h b/include/asm-arm/arch-lh7a40x/memory.h index c650e6feb9d5..c92bcb837629 100644 --- a/include/asm-arm/arch-lh7a40x/memory.h +++ b/include/asm-arm/arch-lh7a40x/memory.h | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | /* | 17 | /* |
| 18 | * Physical DRAM offset. | 18 | * Physical DRAM offset. |
| 19 | */ | 19 | */ |
| 20 | #define PHYS_OFFSET (0xc0000000UL) | 20 | #define PHYS_OFFSET UL(0xc0000000) |
| 21 | 21 | ||
| 22 | /* | 22 | /* |
| 23 | * Virtual view <-> DMA view memory address translations | 23 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-omap/memory.h b/include/asm-arm/arch-omap/memory.h index ef32d61eec7a..bf545b6e0a26 100644 --- a/include/asm-arm/arch-omap/memory.h +++ b/include/asm-arm/arch-omap/memory.h | |||
| @@ -37,9 +37,9 @@ | |||
| 37 | * Physical DRAM offset. | 37 | * Physical DRAM offset. |
| 38 | */ | 38 | */ |
| 39 | #if defined(CONFIG_ARCH_OMAP1) | 39 | #if defined(CONFIG_ARCH_OMAP1) |
| 40 | #define PHYS_OFFSET (0x10000000UL) | 40 | #define PHYS_OFFSET UL(0x10000000) |
| 41 | #elif defined(CONFIG_ARCH_OMAP2) | 41 | #elif defined(CONFIG_ARCH_OMAP2) |
| 42 | #define PHYS_OFFSET (0x80000000UL) | 42 | #define PHYS_OFFSET UL(0x80000000) |
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
| 45 | /* | 45 | /* |
| @@ -66,7 +66,7 @@ | |||
| 66 | /* | 66 | /* |
| 67 | * OMAP-1510 Local Bus address offset | 67 | * OMAP-1510 Local Bus address offset |
| 68 | */ | 68 | */ |
| 69 | #define OMAP1510_LB_OFFSET (0x30000000UL) | 69 | #define OMAP1510_LB_OFFSET UL(0x30000000) |
| 70 | 70 | ||
| 71 | #define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET) | 71 | #define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET) |
| 72 | #define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET) | 72 | #define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET) |
diff --git a/include/asm-arm/arch-pxa/memory.h b/include/asm-arm/arch-pxa/memory.h index 58bad9748b5c..eaf6d43939e9 100644 --- a/include/asm-arm/arch-pxa/memory.h +++ b/include/asm-arm/arch-pxa/memory.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | /* | 15 | /* |
| 16 | * Physical DRAM offset. | 16 | * Physical DRAM offset. |
| 17 | */ | 17 | */ |
| 18 | #define PHYS_OFFSET (0xa0000000UL) | 18 | #define PHYS_OFFSET UL(0xa0000000) |
| 19 | 19 | ||
| 20 | /* | 20 | /* |
| 21 | * Virtual view <-> DMA view memory address translations | 21 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/arch-rpc/memory.h b/include/asm-arm/arch-rpc/memory.h index 33fc75cdead0..0592cb3f0c74 100644 --- a/include/asm-arm/arch-rpc/memory.h +++ b/include/asm-arm/arch-rpc/memory.h | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | /* | 21 | /* |
| 22 | * Physical DRAM offset. | 22 | * Physical DRAM offset. |
| 23 | */ | 23 | */ |
| 24 | #define PHYS_OFFSET (0x10000000UL) | 24 | #define PHYS_OFFSET UL(0x10000000) |
| 25 | 25 | ||
| 26 | /* | 26 | /* |
| 27 | * These are exactly the same on the RiscPC as the | 27 | * These are exactly the same on the RiscPC as the |
diff --git a/include/asm-arm/arch-s3c2410/memory.h b/include/asm-arm/arch-s3c2410/memory.h index 3380ab1d0749..6ab834a14c8e 100644 --- a/include/asm-arm/arch-s3c2410/memory.h +++ b/include/asm-arm/arch-s3c2410/memory.h | |||
| @@ -28,9 +28,9 @@ | |||
| 28 | * and at 0x0C000000 for S3C2400 | 28 | * and at 0x0C000000 for S3C2400 |
| 29 | */ | 29 | */ |
| 30 | #ifdef CONFIG_CPU_S3C2400 | 30 | #ifdef CONFIG_CPU_S3C2400 |
| 31 | #define PHYS_OFFSET (0x0C000000UL) | 31 | #define PHYS_OFFSET UL(0x0C000000) |
| 32 | #else | 32 | #else |
| 33 | #define PHYS_OFFSET (0x30000000UL) | 33 | #define PHYS_OFFSET UL(0x30000000) |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
| 36 | /* | 36 | /* |
diff --git a/include/asm-arm/arch-sa1100/memory.h b/include/asm-arm/arch-sa1100/memory.h index 8743ff5c1b23..0fc555b4c912 100644 --- a/include/asm-arm/arch-sa1100/memory.h +++ b/include/asm-arm/arch-sa1100/memory.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | /* | 13 | /* |
| 14 | * Physical DRAM offset is 0xc0000000 on the SA1100 | 14 | * Physical DRAM offset is 0xc0000000 on the SA1100 |
| 15 | */ | 15 | */ |
| 16 | #define PHYS_OFFSET (0xc0000000UL) | 16 | #define PHYS_OFFSET UL(0xc0000000) |
| 17 | 17 | ||
| 18 | #ifndef __ASSEMBLY__ | 18 | #ifndef __ASSEMBLY__ |
| 19 | 19 | ||
diff --git a/include/asm-arm/arch-shark/memory.h b/include/asm-arm/arch-shark/memory.h index 8ff956d25463..95a29b4bc5d0 100644 --- a/include/asm-arm/arch-shark/memory.h +++ b/include/asm-arm/arch-shark/memory.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | /* | 15 | /* |
| 16 | * Physical DRAM offset. | 16 | * Physical DRAM offset. |
| 17 | */ | 17 | */ |
| 18 | #define PHYS_OFFSET (0x08000000UL) | 18 | #define PHYS_OFFSET UL(0x08000000) |
| 19 | 19 | ||
| 20 | #ifndef __ASSEMBLY__ | 20 | #ifndef __ASSEMBLY__ |
| 21 | 21 | ||
diff --git a/include/asm-arm/arch-versatile/memory.h b/include/asm-arm/arch-versatile/memory.h index 7b8b7cc422fa..a9370976cc5e 100644 --- a/include/asm-arm/arch-versatile/memory.h +++ b/include/asm-arm/arch-versatile/memory.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | /* | 23 | /* |
| 24 | * Physical DRAM offset. | 24 | * Physical DRAM offset. |
| 25 | */ | 25 | */ |
| 26 | #define PHYS_OFFSET (0x00000000UL) | 26 | #define PHYS_OFFSET UL(0x00000000) |
| 27 | 27 | ||
| 28 | /* | 28 | /* |
| 29 | * Virtual view <-> DMA view memory address translations | 29 | * Virtual view <-> DMA view memory address translations |
diff --git a/include/asm-arm/mach/arch.h b/include/asm-arm/mach/arch.h index 7273c6fd95b5..eb262e078c46 100644 --- a/include/asm-arm/mach/arch.h +++ b/include/asm-arm/mach/arch.h | |||
| @@ -50,6 +50,7 @@ struct machine_desc { | |||
| 50 | */ | 50 | */ |
| 51 | #define MACHINE_START(_type,_name) \ | 51 | #define MACHINE_START(_type,_name) \ |
| 52 | static const struct machine_desc __mach_desc_##_type \ | 52 | static const struct machine_desc __mach_desc_##_type \ |
| 53 | __attribute_used__ \ | ||
| 53 | __attribute__((__section__(".arch.info.init"))) = { \ | 54 | __attribute__((__section__(".arch.info.init"))) = { \ |
| 54 | .nr = MACH_TYPE_##_type, \ | 55 | .nr = MACH_TYPE_##_type, \ |
| 55 | .name = _name, | 56 | .name = _name, |
diff --git a/include/asm-arm/mach/flash.h b/include/asm-arm/mach/flash.h index a92887d4b2cb..cd57436d9874 100644 --- a/include/asm-arm/mach/flash.h +++ b/include/asm-arm/mach/flash.h | |||
| @@ -14,6 +14,7 @@ struct mtd_partition; | |||
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * map_name: the map probe function name | 16 | * map_name: the map probe function name |
| 17 | * name: flash device name (eg, as used with mtdparts=) | ||
| 17 | * width: width of mapped device | 18 | * width: width of mapped device |
| 18 | * init: method called at driver/device initialisation | 19 | * init: method called at driver/device initialisation |
| 19 | * exit: method called at driver/device removal | 20 | * exit: method called at driver/device removal |
| @@ -23,6 +24,7 @@ struct mtd_partition; | |||
| 23 | */ | 24 | */ |
| 24 | struct flash_platform_data { | 25 | struct flash_platform_data { |
| 25 | const char *map_name; | 26 | const char *map_name; |
| 27 | const char *name; | ||
| 26 | unsigned int width; | 28 | unsigned int width; |
| 27 | int (*init)(void); | 29 | int (*init)(void); |
| 28 | void (*exit)(void); | 30 | void (*exit)(void); |
diff --git a/include/asm-arm/mach/map.h b/include/asm-arm/mach/map.h index 0619522bd926..b338936bde4f 100644 --- a/include/asm-arm/mach/map.h +++ b/include/asm-arm/mach/map.h | |||
| @@ -27,8 +27,8 @@ struct meminfo; | |||
| 27 | #define MT_ROM 6 | 27 | #define MT_ROM 6 |
| 28 | #define MT_IXP2000_DEVICE 7 | 28 | #define MT_IXP2000_DEVICE 7 |
| 29 | 29 | ||
| 30 | #define __phys_to_pfn(paddr) (paddr >> PAGE_SHIFT) | 30 | #define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) |
| 31 | #define __pfn_to_phys(pfn) (pfn << PAGE_SHIFT) | 31 | #define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) |
| 32 | 32 | ||
| 33 | extern void create_memmap_holes(struct meminfo *); | 33 | extern void create_memmap_holes(struct meminfo *); |
| 34 | extern void memtable_init(struct meminfo *); | 34 | extern void memtable_init(struct meminfo *); |
diff --git a/include/asm-arm/memory.h b/include/asm-arm/memory.h index a8a933a775db..a547ee598c6c 100644 --- a/include/asm-arm/memory.h +++ b/include/asm-arm/memory.h | |||
| @@ -12,6 +12,16 @@ | |||
| 12 | #ifndef __ASM_ARM_MEMORY_H | 12 | #ifndef __ASM_ARM_MEMORY_H |
| 13 | #define __ASM_ARM_MEMORY_H | 13 | #define __ASM_ARM_MEMORY_H |
| 14 | 14 | ||
| 15 | /* | ||
| 16 | * Allow for constants defined here to be used from assembly code | ||
| 17 | * by prepending the UL suffix only with actual C code compilation. | ||
| 18 | */ | ||
| 19 | #ifndef __ASSEMBLY__ | ||
| 20 | #define UL(x) (x##UL) | ||
| 21 | #else | ||
| 22 | #define UL(x) (x) | ||
| 23 | #endif | ||
| 24 | |||
| 15 | #include <linux/config.h> | 25 | #include <linux/config.h> |
| 16 | #include <linux/compiler.h> | 26 | #include <linux/compiler.h> |
| 17 | #include <asm/arch/memory.h> | 27 | #include <asm/arch/memory.h> |
| @@ -21,20 +31,20 @@ | |||
| 21 | * TASK_SIZE - the maximum size of a user space task. | 31 | * TASK_SIZE - the maximum size of a user space task. |
| 22 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area | 32 | * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area |
| 23 | */ | 33 | */ |
| 24 | #define TASK_SIZE (0xbf000000UL) | 34 | #define TASK_SIZE UL(0xbf000000) |
| 25 | #define TASK_UNMAPPED_BASE (0x40000000UL) | 35 | #define TASK_UNMAPPED_BASE UL(0x40000000) |
| 26 | #endif | 36 | #endif |
| 27 | 37 | ||
| 28 | /* | 38 | /* |
| 29 | * The maximum size of a 26-bit user space task. | 39 | * The maximum size of a 26-bit user space task. |
| 30 | */ | 40 | */ |
| 31 | #define TASK_SIZE_26 (0x04000000UL) | 41 | #define TASK_SIZE_26 UL(0x04000000) |
| 32 | 42 | ||
| 33 | /* | 43 | /* |
| 34 | * Page offset: 3GB | 44 | * Page offset: 3GB |
| 35 | */ | 45 | */ |
| 36 | #ifndef PAGE_OFFSET | 46 | #ifndef PAGE_OFFSET |
| 37 | #define PAGE_OFFSET (0xc0000000UL) | 47 | #define PAGE_OFFSET UL(0xc0000000) |
| 38 | #endif | 48 | #endif |
| 39 | 49 | ||
| 40 | /* | 50 | /* |
| @@ -58,6 +68,13 @@ | |||
| 58 | #error Top of user space clashes with start of module space | 68 | #error Top of user space clashes with start of module space |
| 59 | #endif | 69 | #endif |
| 60 | 70 | ||
| 71 | /* | ||
| 72 | * The XIP kernel gets mapped at the bottom of the module vm area. | ||
| 73 | * Since we use sections to map it, this macro replaces the physical address | ||
| 74 | * with its virtual address while keeping offset from the base section. | ||
| 75 | */ | ||
| 76 | #define XIP_VIRT_ADDR(physaddr) (MODULE_START + ((physaddr) & 0x000fffff)) | ||
| 77 | |||
| 61 | #ifndef __ASSEMBLY__ | 78 | #ifndef __ASSEMBLY__ |
| 62 | 79 | ||
| 63 | /* | 80 | /* |
