diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-10-25 03:19:59 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-10-25 03:19:59 -0400 |
commit | bdf4e9482360a3ddc1619efbd5d1c928ede8c3fa (patch) | |
tree | b02319e809c5b8abfca85409a11472775e27f597 /arch/arm | |
parent | 06afb1a087d49ae0f676b2e5b9ffe5f4b3aba355 (diff) | |
parent | eb0474544bc16a9dab53b26abd846e86ba814eb1 (diff) |
Merge branch 'misc' into for-linus
Conflicts:
arch/arm/mach-integrator/integrator_ap.c
Diffstat (limited to 'arch/arm')
145 files changed, 771 insertions, 520 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 380e4f016654..92e695412bd5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -212,6 +212,10 @@ config ARM_PATCH_PHYS_VIRT | |||
212 | you need to shrink the kernel to the minimal size. | 212 | you need to shrink the kernel to the minimal size. |
213 | 213 | ||
214 | 214 | ||
215 | config GENERIC_BUG | ||
216 | def_bool y | ||
217 | depends on BUG | ||
218 | |||
215 | source "init/Kconfig" | 219 | source "init/Kconfig" |
216 | 220 | ||
217 | source "kernel/Kconfig.freezer" | 221 | source "kernel/Kconfig.freezer" |
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index a1edfd5a129a..176062ac7f07 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
@@ -78,7 +78,16 @@ endif | |||
78 | 78 | ||
79 | $(obj)/uImage: STARTADDR=$(LOADADDR) | 79 | $(obj)/uImage: STARTADDR=$(LOADADDR) |
80 | 80 | ||
81 | check_for_multiple_loadaddr = \ | ||
82 | if [ $(words $(LOADADDR)) -gt 1 ]; then \ | ||
83 | echo 'multiple load addresses: $(LOADADDR)'; \ | ||
84 | echo 'This is incompatible with uImages'; \ | ||
85 | echo 'Specify LOADADDR on the commandline to build an uImage'; \ | ||
86 | false; \ | ||
87 | fi | ||
88 | |||
81 | $(obj)/uImage: $(obj)/zImage FORCE | 89 | $(obj)/uImage: $(obj)/zImage FORCE |
90 | @$(check_for_multiple_loadaddr) | ||
82 | $(call if_changed,uimage) | 91 | $(call if_changed,uimage) |
83 | @echo ' Image $@ is ready' | 92 | @echo ' Image $@ is ready' |
84 | 93 | ||
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 0c74a6fab952..a6b30b35ca65 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile | |||
@@ -139,8 +139,16 @@ bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \ | |||
139 | ( echo "following symbols must have non local/private scope:" >&2; \ | 139 | ( echo "following symbols must have non local/private scope:" >&2; \ |
140 | echo "$$bad_syms" >&2; rm -f $@; false ) | 140 | echo "$$bad_syms" >&2; rm -f $@; false ) |
141 | 141 | ||
142 | check_for_multiple_zreladdr = \ | ||
143 | if [ $(words $(ZRELADDR)) -gt 1 -a "$(CONFIG_AUTO_ZRELADDR)" = "" ]; then \ | ||
144 | echo 'multiple zreladdrs: $(ZRELADDR)'; \ | ||
145 | echo 'This needs CONFIG_AUTO_ZRELADDR to be set'; \ | ||
146 | false; \ | ||
147 | fi | ||
148 | |||
142 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ | 149 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ |
143 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE | 150 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE |
151 | @$(check_for_multiple_zreladdr) | ||
144 | $(call if_changed,ld) | 152 | $(call if_changed,ld) |
145 | @$(check_for_bad_syms) | 153 | @$(check_for_bad_syms) |
146 | 154 | ||
diff --git a/arch/arm/common/pl330.c b/arch/arm/common/pl330.c index 97912fa48782..7129cfbdacd6 100644 --- a/arch/arm/common/pl330.c +++ b/arch/arm/common/pl330.c | |||
@@ -1546,7 +1546,7 @@ int pl330_chan_ctrl(void *ch_id, enum pl330_chan_op op) | |||
1546 | 1546 | ||
1547 | /* Start the next */ | 1547 | /* Start the next */ |
1548 | case PL330_OP_START: | 1548 | case PL330_OP_START: |
1549 | if (!_start(thrd)) | 1549 | if (!_thrd_active(thrd) && !_start(thrd)) |
1550 | ret = -EIO; | 1550 | ret = -EIO; |
1551 | break; | 1551 | break; |
1552 | 1552 | ||
diff --git a/arch/arm/configs/integrator_defconfig b/arch/arm/configs/integrator_defconfig index 7196ade07e27..1103f62a1964 100644 --- a/arch/arm/configs/integrator_defconfig +++ b/arch/arm/configs/integrator_defconfig | |||
@@ -1,5 +1,6 @@ | |||
1 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_TINY_RCU=y | ||
3 | CONFIG_IKCONFIG=y | 4 | CONFIG_IKCONFIG=y |
4 | CONFIG_IKCONFIG_PROC=y | 5 | CONFIG_IKCONFIG_PROC=y |
5 | CONFIG_LOG_BUF_SHIFT=14 | 6 | CONFIG_LOG_BUF_SHIFT=14 |
@@ -8,20 +9,29 @@ CONFIG_MODULES=y | |||
8 | CONFIG_MODULE_UNLOAD=y | 9 | CONFIG_MODULE_UNLOAD=y |
9 | CONFIG_ARCH_INTEGRATOR=y | 10 | CONFIG_ARCH_INTEGRATOR=y |
10 | CONFIG_ARCH_INTEGRATOR_AP=y | 11 | CONFIG_ARCH_INTEGRATOR_AP=y |
12 | CONFIG_ARCH_INTEGRATOR_CP=y | ||
11 | CONFIG_CPU_ARM720T=y | 13 | CONFIG_CPU_ARM720T=y |
12 | CONFIG_CPU_ARM920T=y | 14 | CONFIG_CPU_ARM920T=y |
15 | CONFIG_CPU_ARM922T=y | ||
16 | CONFIG_CPU_ARM926T=y | ||
17 | CONFIG_CPU_ARM1020=y | ||
18 | CONFIG_CPU_ARM1022=y | ||
19 | CONFIG_CPU_ARM1026=y | ||
13 | CONFIG_PCI=y | 20 | CONFIG_PCI=y |
21 | CONFIG_NO_HZ=y | ||
22 | CONFIG_HIGH_RES_TIMERS=y | ||
23 | CONFIG_PREEMPT=y | ||
24 | CONFIG_AEABI=y | ||
14 | CONFIG_LEDS=y | 25 | CONFIG_LEDS=y |
15 | CONFIG_LEDS_CPU=y | 26 | CONFIG_LEDS_CPU=y |
16 | CONFIG_ZBOOT_ROM_TEXT=0x0 | 27 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
17 | CONFIG_ZBOOT_ROM_BSS=0x0 | 28 | CONFIG_ZBOOT_ROM_BSS=0x0 |
18 | CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp mem=32M" | 29 | CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp" |
19 | CONFIG_CPU_FREQ=y | 30 | CONFIG_CPU_FREQ=y |
20 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y | 31 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y |
21 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | 32 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
22 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | 33 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y |
23 | CONFIG_FPE_NWFPE=y | 34 | CONFIG_FPE_NWFPE=y |
24 | CONFIG_PM=y | ||
25 | CONFIG_NET=y | 35 | CONFIG_NET=y |
26 | CONFIG_PACKET=y | 36 | CONFIG_PACKET=y |
27 | CONFIG_UNIX=y | 37 | CONFIG_UNIX=y |
@@ -32,7 +42,6 @@ CONFIG_IP_PNP_DHCP=y | |||
32 | CONFIG_IP_PNP_BOOTP=y | 42 | CONFIG_IP_PNP_BOOTP=y |
33 | # CONFIG_IPV6 is not set | 43 | # CONFIG_IPV6 is not set |
34 | CONFIG_MTD=y | 44 | CONFIG_MTD=y |
35 | CONFIG_MTD_PARTITIONS=y | ||
36 | CONFIG_MTD_CMDLINE_PARTS=y | 45 | CONFIG_MTD_CMDLINE_PARTS=y |
37 | CONFIG_MTD_AFS_PARTS=y | 46 | CONFIG_MTD_AFS_PARTS=y |
38 | CONFIG_MTD_CHAR=y | 47 | CONFIG_MTD_CHAR=y |
@@ -40,6 +49,7 @@ CONFIG_MTD_BLOCK=y | |||
40 | CONFIG_MTD_CFI=y | 49 | CONFIG_MTD_CFI=y |
41 | CONFIG_MTD_CFI_ADV_OPTIONS=y | 50 | CONFIG_MTD_CFI_ADV_OPTIONS=y |
42 | CONFIG_MTD_CFI_INTELEXT=y | 51 | CONFIG_MTD_CFI_INTELEXT=y |
52 | CONFIG_MTD_PHYSMAP=y | ||
43 | CONFIG_BLK_DEV_LOOP=y | 53 | CONFIG_BLK_DEV_LOOP=y |
44 | CONFIG_BLK_DEV_RAM=y | 54 | CONFIG_BLK_DEV_RAM=y |
45 | CONFIG_BLK_DEV_RAM_SIZE=8192 | 55 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
@@ -56,6 +66,8 @@ CONFIG_FB_MODE_HELPERS=y | |||
56 | CONFIG_FB_MATROX=y | 66 | CONFIG_FB_MATROX=y |
57 | CONFIG_FB_MATROX_MILLENIUM=y | 67 | CONFIG_FB_MATROX_MILLENIUM=y |
58 | CONFIG_FB_MATROX_MYSTIQUE=y | 68 | CONFIG_FB_MATROX_MYSTIQUE=y |
69 | CONFIG_RTC_CLASS=y | ||
70 | CONFIG_RTC_DRV_PL030=y | ||
59 | CONFIG_EXT2_FS=y | 71 | CONFIG_EXT2_FS=y |
60 | CONFIG_TMPFS=y | 72 | CONFIG_TMPFS=y |
61 | CONFIG_JFFS2_FS=y | 73 | CONFIG_JFFS2_FS=y |
@@ -68,4 +80,3 @@ CONFIG_NFSD_V3=y | |||
68 | CONFIG_PARTITION_ADVANCED=y | 80 | CONFIG_PARTITION_ADVANCED=y |
69 | CONFIG_MAGIC_SYSRQ=y | 81 | CONFIG_MAGIC_SYSRQ=y |
70 | CONFIG_DEBUG_KERNEL=y | 82 | CONFIG_DEBUG_KERNEL=y |
71 | CONFIG_DEBUG_ERRORS=y | ||
diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 6550db3aa5c7..960abceb8e14 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild | |||
@@ -1,3 +1,20 @@ | |||
1 | include include/asm-generic/Kbuild.asm | 1 | include include/asm-generic/Kbuild.asm |
2 | 2 | ||
3 | header-y += hwcap.h | 3 | header-y += hwcap.h |
4 | |||
5 | generic-y += auxvec.h | ||
6 | generic-y += bitsperlong.h | ||
7 | generic-y += cputime.h | ||
8 | generic-y += emergency-restart.h | ||
9 | generic-y += errno.h | ||
10 | generic-y += ioctl.h | ||
11 | generic-y += irq_regs.h | ||
12 | generic-y += kdebug.h | ||
13 | generic-y += local.h | ||
14 | generic-y += local64.h | ||
15 | generic-y += percpu.h | ||
16 | generic-y += poll.h | ||
17 | generic-y += resource.h | ||
18 | generic-y += sections.h | ||
19 | generic-y += siginfo.h | ||
20 | generic-y += sizes.h | ||
diff --git a/arch/arm/include/asm/auxvec.h b/arch/arm/include/asm/auxvec.h deleted file mode 100644 index c0536f6b29a7..000000000000 --- a/arch/arm/include/asm/auxvec.h +++ /dev/null | |||
@@ -1,4 +0,0 @@ | |||
1 | #ifndef __ASMARM_AUXVEC_H | ||
2 | #define __ASMARM_AUXVEC_H | ||
3 | |||
4 | #endif | ||
diff --git a/arch/arm/include/asm/bitsperlong.h b/arch/arm/include/asm/bitsperlong.h deleted file mode 100644 index 6dc0bb0c13b2..000000000000 --- a/arch/arm/include/asm/bitsperlong.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/bitsperlong.h> | ||
diff --git a/arch/arm/include/asm/bug.h b/arch/arm/include/asm/bug.h index 4d88425a4169..9abe7a07d5ac 100644 --- a/arch/arm/include/asm/bug.h +++ b/arch/arm/include/asm/bug.h | |||
@@ -3,21 +3,58 @@ | |||
3 | 3 | ||
4 | 4 | ||
5 | #ifdef CONFIG_BUG | 5 | #ifdef CONFIG_BUG |
6 | #ifdef CONFIG_DEBUG_BUGVERBOSE | ||
7 | extern void __bug(const char *file, int line) __attribute__((noreturn)); | ||
8 | |||
9 | /* give file/line information */ | ||
10 | #define BUG() __bug(__FILE__, __LINE__) | ||
11 | 6 | ||
7 | /* | ||
8 | * Use a suitable undefined instruction to use for ARM/Thumb2 bug handling. | ||
9 | * We need to be careful not to conflict with those used by other modules and | ||
10 | * the register_undef_hook() system. | ||
11 | */ | ||
12 | #ifdef CONFIG_THUMB2_KERNEL | ||
13 | #define BUG_INSTR_VALUE 0xde02 | ||
14 | #define BUG_INSTR_TYPE ".hword " | ||
12 | #else | 15 | #else |
16 | #define BUG_INSTR_VALUE 0xe7f001f2 | ||
17 | #define BUG_INSTR_TYPE ".word " | ||
18 | #endif | ||
13 | 19 | ||
14 | /* this just causes an oops */ | ||
15 | #define BUG() do { *(int *)0 = 0; } while (1) | ||
16 | 20 | ||
17 | #endif | 21 | #define BUG() _BUG(__FILE__, __LINE__, BUG_INSTR_VALUE) |
22 | #define _BUG(file, line, value) __BUG(file, line, value) | ||
23 | |||
24 | #ifdef CONFIG_DEBUG_BUGVERBOSE | ||
25 | |||
26 | /* | ||
27 | * The extra indirection is to ensure that the __FILE__ string comes through | ||
28 | * OK. Many version of gcc do not support the asm %c parameter which would be | ||
29 | * preferable to this unpleasantness. We use mergeable string sections to | ||
30 | * avoid multiple copies of the string appearing in the kernel image. | ||
31 | */ | ||
32 | |||
33 | #define __BUG(__file, __line, __value) \ | ||
34 | do { \ | ||
35 | BUILD_BUG_ON(sizeof(struct bug_entry) != 12); \ | ||
36 | asm volatile("1:\t" BUG_INSTR_TYPE #__value "\n" \ | ||
37 | ".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \ | ||
38 | "2:\t.asciz " #__file "\n" \ | ||
39 | ".popsection\n" \ | ||
40 | ".pushsection __bug_table,\"a\"\n" \ | ||
41 | "3:\t.word 1b, 2b\n" \ | ||
42 | "\t.hword " #__line ", 0\n" \ | ||
43 | ".popsection"); \ | ||
44 | unreachable(); \ | ||
45 | } while (0) | ||
46 | |||
47 | #else /* not CONFIG_DEBUG_BUGVERBOSE */ | ||
48 | |||
49 | #define __BUG(__file, __line, __value) \ | ||
50 | do { \ | ||
51 | asm volatile(BUG_INSTR_TYPE #__value); \ | ||
52 | unreachable(); \ | ||
53 | } while (0) | ||
54 | #endif /* CONFIG_DEBUG_BUGVERBOSE */ | ||
18 | 55 | ||
19 | #define HAVE_ARCH_BUG | 56 | #define HAVE_ARCH_BUG |
20 | #endif | 57 | #endif /* CONFIG_BUG */ |
21 | 58 | ||
22 | #include <asm-generic/bug.h> | 59 | #include <asm-generic/bug.h> |
23 | 60 | ||
diff --git a/arch/arm/include/asm/cachetype.h b/arch/arm/include/asm/cachetype.h index c023db09fcc1..7ea78144ae22 100644 --- a/arch/arm/include/asm/cachetype.h +++ b/arch/arm/include/asm/cachetype.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #define CACHEID_VIPT (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING) | 7 | #define CACHEID_VIPT (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING) |
8 | #define CACHEID_ASID_TAGGED (1 << 3) | 8 | #define CACHEID_ASID_TAGGED (1 << 3) |
9 | #define CACHEID_VIPT_I_ALIASING (1 << 4) | 9 | #define CACHEID_VIPT_I_ALIASING (1 << 4) |
10 | #define CACHEID_PIPT (1 << 5) | ||
10 | 11 | ||
11 | extern unsigned int cacheid; | 12 | extern unsigned int cacheid; |
12 | 13 | ||
@@ -16,6 +17,7 @@ extern unsigned int cacheid; | |||
16 | #define cache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_ALIASING) | 17 | #define cache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_ALIASING) |
17 | #define icache_is_vivt_asid_tagged() cacheid_is(CACHEID_ASID_TAGGED) | 18 | #define icache_is_vivt_asid_tagged() cacheid_is(CACHEID_ASID_TAGGED) |
18 | #define icache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_I_ALIASING) | 19 | #define icache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_I_ALIASING) |
20 | #define icache_is_pipt() cacheid_is(CACHEID_PIPT) | ||
19 | 21 | ||
20 | /* | 22 | /* |
21 | * __LINUX_ARM_ARCH__ is the minimum supported CPU architecture | 23 | * __LINUX_ARM_ARCH__ is the minimum supported CPU architecture |
@@ -26,7 +28,8 @@ extern unsigned int cacheid; | |||
26 | #if __LINUX_ARM_ARCH__ >= 7 | 28 | #if __LINUX_ARM_ARCH__ >= 7 |
27 | #define __CACHEID_ARCH_MIN (CACHEID_VIPT_NONALIASING |\ | 29 | #define __CACHEID_ARCH_MIN (CACHEID_VIPT_NONALIASING |\ |
28 | CACHEID_ASID_TAGGED |\ | 30 | CACHEID_ASID_TAGGED |\ |
29 | CACHEID_VIPT_I_ALIASING) | 31 | CACHEID_VIPT_I_ALIASING |\ |
32 | CACHEID_PIPT) | ||
30 | #elif __LINUX_ARM_ARCH__ >= 6 | 33 | #elif __LINUX_ARM_ARCH__ >= 6 |
31 | #define __CACHEID_ARCH_MIN (~CACHEID_VIVT) | 34 | #define __CACHEID_ARCH_MIN (~CACHEID_VIVT) |
32 | #else | 35 | #else |
diff --git a/arch/arm/include/asm/cputime.h b/arch/arm/include/asm/cputime.h deleted file mode 100644 index 3a8002a5fec7..000000000000 --- a/arch/arm/include/asm/cputime.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef __ARM_CPUTIME_H | ||
2 | #define __ARM_CPUTIME_H | ||
3 | |||
4 | #include <asm-generic/cputime.h> | ||
5 | |||
6 | #endif /* __ARM_CPUTIME_H */ | ||
diff --git a/arch/arm/include/asm/device.h b/arch/arm/include/asm/device.h index 9f390ce335cb..6615f03f56a5 100644 --- a/arch/arm/include/asm/device.h +++ b/arch/arm/include/asm/device.h | |||
@@ -10,6 +10,9 @@ struct dev_archdata { | |||
10 | #ifdef CONFIG_DMABOUNCE | 10 | #ifdef CONFIG_DMABOUNCE |
11 | struct dmabounce_device_info *dmabounce; | 11 | struct dmabounce_device_info *dmabounce; |
12 | #endif | 12 | #endif |
13 | #ifdef CONFIG_IOMMU_API | ||
14 | void *iommu; /* private IOMMU data */ | ||
15 | #endif | ||
13 | }; | 16 | }; |
14 | 17 | ||
15 | struct pdev_archdata { | 18 | struct pdev_archdata { |
diff --git a/arch/arm/include/asm/emergency-restart.h b/arch/arm/include/asm/emergency-restart.h deleted file mode 100644 index 108d8c48e42e..000000000000 --- a/arch/arm/include/asm/emergency-restart.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ASM_EMERGENCY_RESTART_H | ||
2 | #define _ASM_EMERGENCY_RESTART_H | ||
3 | |||
4 | #include <asm-generic/emergency-restart.h> | ||
5 | |||
6 | #endif /* _ASM_EMERGENCY_RESTART_H */ | ||
diff --git a/arch/arm/include/asm/errno.h b/arch/arm/include/asm/errno.h deleted file mode 100644 index 6e60f0612bb6..000000000000 --- a/arch/arm/include/asm/errno.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ARM_ERRNO_H | ||
2 | #define _ARM_ERRNO_H | ||
3 | |||
4 | #include <asm-generic/errno.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index dc2d5102e680..769f65d918ac 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h | |||
@@ -80,6 +80,7 @@ extern void __iomem *__arm_ioremap_caller(unsigned long, size_t, unsigned int, | |||
80 | 80 | ||
81 | extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int); | 81 | extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int); |
82 | extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int); | 82 | extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int); |
83 | extern void __iomem *__arm_ioremap_exec(unsigned long, size_t, bool cached); | ||
83 | extern void __iounmap(volatile void __iomem *addr); | 84 | extern void __iounmap(volatile void __iomem *addr); |
84 | 85 | ||
85 | /* | 86 | /* |
@@ -210,11 +211,11 @@ extern void _memset_io(volatile void __iomem *, int, size_t); | |||
210 | * IO port primitives for more information. | 211 | * IO port primitives for more information. |
211 | */ | 212 | */ |
212 | #ifdef __mem_pci | 213 | #ifdef __mem_pci |
213 | #define readb_relaxed(c) ({ u8 __v = __raw_readb(__mem_pci(c)); __v; }) | 214 | #define readb_relaxed(c) ({ u8 __r = __raw_readb(__mem_pci(c)); __r; }) |
214 | #define readw_relaxed(c) ({ u16 __v = le16_to_cpu((__force __le16) \ | 215 | #define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \ |
215 | __raw_readw(__mem_pci(c))); __v; }) | 216 | __raw_readw(__mem_pci(c))); __r; }) |
216 | #define readl_relaxed(c) ({ u32 __v = le32_to_cpu((__force __le32) \ | 217 | #define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \ |
217 | __raw_readl(__mem_pci(c))); __v; }) | 218 | __raw_readl(__mem_pci(c))); __r; }) |
218 | 219 | ||
219 | #define writeb_relaxed(v,c) ((void)__raw_writeb(v,__mem_pci(c))) | 220 | #define writeb_relaxed(v,c) ((void)__raw_writeb(v,__mem_pci(c))) |
220 | #define writew_relaxed(v,c) ((void)__raw_writew((__force u16) \ | 221 | #define writew_relaxed(v,c) ((void)__raw_writew((__force u16) \ |
diff --git a/arch/arm/include/asm/ioctl.h b/arch/arm/include/asm/ioctl.h deleted file mode 100644 index b279fe06dfe5..000000000000 --- a/arch/arm/include/asm/ioctl.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/ioctl.h> | ||
diff --git a/arch/arm/include/asm/irq_regs.h b/arch/arm/include/asm/irq_regs.h deleted file mode 100644 index 3dd9c0b70270..000000000000 --- a/arch/arm/include/asm/irq_regs.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/irq_regs.h> | ||
diff --git a/arch/arm/include/asm/kdebug.h b/arch/arm/include/asm/kdebug.h deleted file mode 100644 index 6ece1b037665..000000000000 --- a/arch/arm/include/asm/kdebug.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/kdebug.h> | ||
diff --git a/arch/arm/include/asm/local.h b/arch/arm/include/asm/local.h deleted file mode 100644 index c11c530f74d0..000000000000 --- a/arch/arm/include/asm/local.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/local.h> | ||
diff --git a/arch/arm/include/asm/local64.h b/arch/arm/include/asm/local64.h deleted file mode 100644 index 36c93b5cc239..000000000000 --- a/arch/arm/include/asm/local64.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/local64.h> | ||
diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index 217aa1911dd7..c5699987fa98 100644 --- a/arch/arm/include/asm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h | |||
@@ -34,8 +34,7 @@ struct machine_desc { | |||
34 | unsigned int reserve_lp1 :1; /* never has lp1 */ | 34 | unsigned int reserve_lp1 :1; /* never has lp1 */ |
35 | unsigned int reserve_lp2 :1; /* never has lp2 */ | 35 | unsigned int reserve_lp2 :1; /* never has lp2 */ |
36 | unsigned int soft_reboot :1; /* soft reboot */ | 36 | unsigned int soft_reboot :1; /* soft reboot */ |
37 | void (*fixup)(struct machine_desc *, | 37 | void (*fixup)(struct tag *, char **, |
38 | struct tag *, char **, | ||
39 | struct meminfo *); | 38 | struct meminfo *); |
40 | void (*reserve)(void);/* reserve mem blocks */ | 39 | void (*reserve)(void);/* reserve mem blocks */ |
41 | void (*map_io)(void);/* IO mapping function */ | 40 | void (*map_io)(void);/* IO mapping function */ |
diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h deleted file mode 100644 index b4e32d8ec072..000000000000 --- a/arch/arm/include/asm/percpu.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef __ARM_PERCPU | ||
2 | #define __ARM_PERCPU | ||
3 | |||
4 | #include <asm-generic/percpu.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/arm/include/asm/poll.h b/arch/arm/include/asm/poll.h deleted file mode 100644 index c98509d3149e..000000000000 --- a/arch/arm/include/asm/poll.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/poll.h> | ||
diff --git a/arch/arm/include/asm/resource.h b/arch/arm/include/asm/resource.h deleted file mode 100644 index 734b581b5b6a..000000000000 --- a/arch/arm/include/asm/resource.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ARM_RESOURCE_H | ||
2 | #define _ARM_RESOURCE_H | ||
3 | |||
4 | #include <asm-generic/resource.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/arm/include/asm/sections.h b/arch/arm/include/asm/sections.h deleted file mode 100644 index 2b8c5160388f..000000000000 --- a/arch/arm/include/asm/sections.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <asm-generic/sections.h> | ||
diff --git a/arch/arm/include/asm/siginfo.h b/arch/arm/include/asm/siginfo.h deleted file mode 100644 index 5e21852e6039..000000000000 --- a/arch/arm/include/asm/siginfo.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ASMARM_SIGINFO_H | ||
2 | #define _ASMARM_SIGINFO_H | ||
3 | |||
4 | #include <asm-generic/siginfo.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/arm/include/asm/sizes.h b/arch/arm/include/asm/sizes.h deleted file mode 100644 index 154b89b81d3e..000000000000 --- a/arch/arm/include/asm/sizes.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
15 | */ | ||
16 | /* Size definitions | ||
17 | * Copyright (C) ARM Limited 1998. All rights reserved. | ||
18 | */ | ||
19 | #include <asm-generic/sizes.h> | ||
20 | |||
21 | #define SZ_48M (SZ_32M + SZ_16M) | ||
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index ed6b0499a106..984014b92647 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
@@ -57,6 +57,7 @@ | |||
57 | 57 | ||
58 | #ifndef __ASSEMBLY__ | 58 | #ifndef __ASSEMBLY__ |
59 | 59 | ||
60 | #include <linux/compiler.h> | ||
60 | #include <linux/linkage.h> | 61 | #include <linux/linkage.h> |
61 | #include <linux/irqflags.h> | 62 | #include <linux/irqflags.h> |
62 | 63 | ||
@@ -90,14 +91,13 @@ void hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int, | |||
90 | #define xchg(ptr,x) \ | 91 | #define xchg(ptr,x) \ |
91 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | 92 | ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) |
92 | 93 | ||
93 | extern asmlinkage void __backtrace(void); | ||
94 | extern asmlinkage void c_backtrace(unsigned long fp, int pmode); | 94 | extern asmlinkage void c_backtrace(unsigned long fp, int pmode); |
95 | 95 | ||
96 | struct mm_struct; | 96 | struct mm_struct; |
97 | extern void show_pte(struct mm_struct *mm, unsigned long addr); | 97 | extern void show_pte(struct mm_struct *mm, unsigned long addr); |
98 | extern void __show_regs(struct pt_regs *); | 98 | extern void __show_regs(struct pt_regs *); |
99 | 99 | ||
100 | extern int cpu_architecture(void); | 100 | extern int __pure cpu_architecture(void); |
101 | extern void cpu_init(void); | 101 | extern void cpu_init(void); |
102 | 102 | ||
103 | void arm_machine_restart(char mode, const char *cmd); | 103 | void arm_machine_restart(char mode, const char *cmd); |
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index aeef960ff795..8e3c6f11b0a1 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
@@ -49,9 +49,6 @@ extern void __aeabi_ulcmp(void); | |||
49 | 49 | ||
50 | extern void fpundefinstr(void); | 50 | extern void fpundefinstr(void); |
51 | 51 | ||
52 | |||
53 | EXPORT_SYMBOL(__backtrace); | ||
54 | |||
55 | /* platform dependent support */ | 52 | /* platform dependent support */ |
56 | EXPORT_SYMBOL(__udelay); | 53 | EXPORT_SYMBOL(__udelay); |
57 | EXPORT_SYMBOL(__const_udelay); | 54 | EXPORT_SYMBOL(__const_udelay); |
diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S index bcd66e00bdbe..0f852d082fcf 100644 --- a/arch/arm/kernel/debug.S +++ b/arch/arm/kernel/debug.S | |||
@@ -151,6 +151,8 @@ printhex: adr r2, hexbuf | |||
151 | b printascii | 151 | b printascii |
152 | ENDPROC(printhex2) | 152 | ENDPROC(printhex2) |
153 | 153 | ||
154 | hexbuf: .space 16 | ||
155 | |||
154 | .ltorg | 156 | .ltorg |
155 | 157 | ||
156 | ENTRY(printascii) | 158 | ENTRY(printascii) |
@@ -175,5 +177,3 @@ ENTRY(printch) | |||
175 | mov r0, #0 | 177 | mov r0, #0 |
176 | b 1b | 178 | b 1b |
177 | ENDPROC(printch) | 179 | ENDPROC(printch) |
178 | |||
179 | hexbuf: .space 16 | ||
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index a87cbf889ff4..9ad50c4208ae 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/unwind.h> | 24 | #include <asm/unwind.h> |
25 | #include <asm/unistd.h> | 25 | #include <asm/unistd.h> |
26 | #include <asm/tls.h> | 26 | #include <asm/tls.h> |
27 | #include <asm/system.h> | ||
27 | 28 | ||
28 | #include "entry-header.S" | 29 | #include "entry-header.S" |
29 | #include <asm/entry-macro-multi.S> | 30 | #include <asm/entry-macro-multi.S> |
@@ -262,8 +263,7 @@ __und_svc: | |||
262 | ldr r0, [r4, #-4] | 263 | ldr r0, [r4, #-4] |
263 | #else | 264 | #else |
264 | ldrh r0, [r4, #-2] @ Thumb instruction at LR - 2 | 265 | ldrh r0, [r4, #-2] @ Thumb instruction at LR - 2 |
265 | and r9, r0, #0xf800 | 266 | cmp r0, #0xe800 @ 32-bit instruction if xx >= 0 |
266 | cmp r9, #0xe800 @ 32-bit instruction if xx >= 0 | ||
267 | ldrhhs r9, [r4] @ bottom 16 bits | 267 | ldrhhs r9, [r4] @ bottom 16 bits |
268 | orrhs r0, r9, r0, lsl #16 | 268 | orrhs r0, r9, r0, lsl #16 |
269 | #endif | 269 | #endif |
@@ -440,18 +440,46 @@ __und_usr: | |||
440 | #endif | 440 | #endif |
441 | beq call_fpe | 441 | beq call_fpe |
442 | @ Thumb instruction | 442 | @ Thumb instruction |
443 | #if __LINUX_ARM_ARCH__ >= 7 | 443 | #if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7 |
444 | /* | ||
445 | * Thumb-2 instruction handling. Note that because pre-v6 and >= v6 platforms | ||
446 | * can never be supported in a single kernel, this code is not applicable at | ||
447 | * all when __LINUX_ARM_ARCH__ < 6. This allows simplifying assumptions to be | ||
448 | * made about .arch directives. | ||
449 | */ | ||
450 | #if __LINUX_ARM_ARCH__ < 7 | ||
451 | /* If the target CPU may not be Thumb-2-capable, a run-time check is needed: */ | ||
452 | #define NEED_CPU_ARCHITECTURE | ||
453 | ldr r5, .LCcpu_architecture | ||
454 | ldr r5, [r5] | ||
455 | cmp r5, #CPU_ARCH_ARMv7 | ||
456 | blo __und_usr_unknown | ||
457 | /* | ||
458 | * The following code won't get run unless the running CPU really is v7, so | ||
459 | * coding round the lack of ldrht on older arches is pointless. Temporarily | ||
460 | * override the assembler target arch with the minimum required instead: | ||
461 | */ | ||
462 | .arch armv6t2 | ||
463 | #endif | ||
444 | 2: | 464 | 2: |
445 | ARM( ldrht r5, [r4], #2 ) | 465 | ARM( ldrht r5, [r4], #2 ) |
446 | THUMB( ldrht r5, [r4] ) | 466 | THUMB( ldrht r5, [r4] ) |
447 | THUMB( add r4, r4, #2 ) | 467 | THUMB( add r4, r4, #2 ) |
448 | and r0, r5, #0xf800 @ mask bits 111x x... .... .... | 468 | cmp r5, #0xe800 @ 32bit instruction if xx != 0 |
449 | cmp r0, #0xe800 @ 32bit instruction if xx != 0 | ||
450 | blo __und_usr_unknown | 469 | blo __und_usr_unknown |
451 | 3: ldrht r0, [r4] | 470 | 3: ldrht r0, [r4] |
452 | add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 | 471 | add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 |
453 | orr r0, r0, r5, lsl #16 | 472 | orr r0, r0, r5, lsl #16 |
473 | |||
474 | #if __LINUX_ARM_ARCH__ < 7 | ||
475 | /* If the target arch was overridden, change it back: */ | ||
476 | #ifdef CONFIG_CPU_32v6K | ||
477 | .arch armv6k | ||
454 | #else | 478 | #else |
479 | .arch armv6 | ||
480 | #endif | ||
481 | #endif /* __LINUX_ARM_ARCH__ < 7 */ | ||
482 | #else /* !(CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7) */ | ||
455 | b __und_usr_unknown | 483 | b __und_usr_unknown |
456 | #endif | 484 | #endif |
457 | UNWIND(.fnend ) | 485 | UNWIND(.fnend ) |
@@ -578,6 +606,12 @@ call_fpe: | |||
578 | movw_pc lr @ CP#14 (Debug) | 606 | movw_pc lr @ CP#14 (Debug) |
579 | movw_pc lr @ CP#15 (Control) | 607 | movw_pc lr @ CP#15 (Control) |
580 | 608 | ||
609 | #ifdef NEED_CPU_ARCHITECTURE | ||
610 | .align 2 | ||
611 | .LCcpu_architecture: | ||
612 | .word __cpu_architecture | ||
613 | #endif | ||
614 | |||
581 | #ifdef CONFIG_NEON | 615 | #ifdef CONFIG_NEON |
582 | .align 6 | 616 | .align 6 |
583 | 617 | ||
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index e59bbd496c39..c1b4463dcc83 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
@@ -32,6 +32,24 @@ static atomic_t waiting_for_crash_ipi; | |||
32 | 32 | ||
33 | int machine_kexec_prepare(struct kimage *image) | 33 | int machine_kexec_prepare(struct kimage *image) |
34 | { | 34 | { |
35 | unsigned long page_list; | ||
36 | void *reboot_code_buffer; | ||
37 | page_list = image->head & PAGE_MASK; | ||
38 | |||
39 | reboot_code_buffer = page_address(image->control_code_page); | ||
40 | |||
41 | /* Prepare parameters for reboot_code_buffer*/ | ||
42 | kexec_start_address = image->start; | ||
43 | kexec_indirection_page = page_list; | ||
44 | kexec_mach_type = machine_arch_type; | ||
45 | kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; | ||
46 | |||
47 | /* copy our kernel relocation code to the control code page */ | ||
48 | memcpy(reboot_code_buffer, | ||
49 | relocate_new_kernel, relocate_new_kernel_size); | ||
50 | |||
51 | flush_icache_range((unsigned long) reboot_code_buffer, | ||
52 | (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE); | ||
35 | return 0; | 53 | return 0; |
36 | } | 54 | } |
37 | 55 | ||
@@ -82,31 +100,14 @@ void (*kexec_reinit)(void); | |||
82 | 100 | ||
83 | void machine_kexec(struct kimage *image) | 101 | void machine_kexec(struct kimage *image) |
84 | { | 102 | { |
85 | unsigned long page_list; | ||
86 | unsigned long reboot_code_buffer_phys; | 103 | unsigned long reboot_code_buffer_phys; |
87 | void *reboot_code_buffer; | 104 | void *reboot_code_buffer; |
88 | 105 | ||
89 | |||
90 | page_list = image->head & PAGE_MASK; | ||
91 | |||
92 | /* we need both effective and real address here */ | 106 | /* we need both effective and real address here */ |
93 | reboot_code_buffer_phys = | 107 | reboot_code_buffer_phys = |
94 | page_to_pfn(image->control_code_page) << PAGE_SHIFT; | 108 | page_to_pfn(image->control_code_page) << PAGE_SHIFT; |
95 | reboot_code_buffer = page_address(image->control_code_page); | 109 | reboot_code_buffer = page_address(image->control_code_page); |
96 | 110 | ||
97 | /* Prepare parameters for reboot_code_buffer*/ | ||
98 | kexec_start_address = image->start; | ||
99 | kexec_indirection_page = page_list; | ||
100 | kexec_mach_type = machine_arch_type; | ||
101 | kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET; | ||
102 | |||
103 | /* copy our kernel relocation code to the control code page */ | ||
104 | memcpy(reboot_code_buffer, | ||
105 | relocate_new_kernel, relocate_new_kernel_size); | ||
106 | |||
107 | |||
108 | flush_icache_range((unsigned long) reboot_code_buffer, | ||
109 | (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE); | ||
110 | printk(KERN_INFO "Bye!\n"); | 111 | printk(KERN_INFO "Bye!\n"); |
111 | 112 | ||
112 | if (kexec_reinit) | 113 | if (kexec_reinit) |
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 1a347f481e5e..fd0814076ff6 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -319,7 +319,7 @@ void show_regs(struct pt_regs * regs) | |||
319 | printk("\n"); | 319 | printk("\n"); |
320 | printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm); | 320 | printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm); |
321 | __show_regs(regs); | 321 | __show_regs(regs); |
322 | __backtrace(); | 322 | dump_stack(); |
323 | } | 323 | } |
324 | 324 | ||
325 | ATOMIC_NOTIFIER_HEAD(thread_notify_head); | 325 | ATOMIC_NOTIFIER_HEAD(thread_notify_head); |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index e514c76043b4..3fe93f75b55a 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -29,6 +29,8 @@ | |||
29 | #include <linux/fs.h> | 29 | #include <linux/fs.h> |
30 | #include <linux/proc_fs.h> | 30 | #include <linux/proc_fs.h> |
31 | #include <linux/memblock.h> | 31 | #include <linux/memblock.h> |
32 | #include <linux/bug.h> | ||
33 | #include <linux/compiler.h> | ||
32 | 34 | ||
33 | #include <asm/unified.h> | 35 | #include <asm/unified.h> |
34 | #include <asm/cpu.h> | 36 | #include <asm/cpu.h> |
@@ -42,6 +44,7 @@ | |||
42 | #include <asm/cacheflush.h> | 44 | #include <asm/cacheflush.h> |
43 | #include <asm/cachetype.h> | 45 | #include <asm/cachetype.h> |
44 | #include <asm/tlbflush.h> | 46 | #include <asm/tlbflush.h> |
47 | #include <asm/system.h> | ||
45 | 48 | ||
46 | #include <asm/prom.h> | 49 | #include <asm/prom.h> |
47 | #include <asm/mach/arch.h> | 50 | #include <asm/mach/arch.h> |
@@ -115,6 +118,13 @@ struct outer_cache_fns outer_cache __read_mostly; | |||
115 | EXPORT_SYMBOL(outer_cache); | 118 | EXPORT_SYMBOL(outer_cache); |
116 | #endif | 119 | #endif |
117 | 120 | ||
121 | /* | ||
122 | * Cached cpu_architecture() result for use by assembler code. | ||
123 | * C code should use the cpu_architecture() function instead of accessing this | ||
124 | * variable directly. | ||
125 | */ | ||
126 | int __cpu_architecture __read_mostly = CPU_ARCH_UNKNOWN; | ||
127 | |||
118 | struct stack { | 128 | struct stack { |
119 | u32 irq[3]; | 129 | u32 irq[3]; |
120 | u32 abt[3]; | 130 | u32 abt[3]; |
@@ -210,7 +220,7 @@ static const char *proc_arch[] = { | |||
210 | "?(17)", | 220 | "?(17)", |
211 | }; | 221 | }; |
212 | 222 | ||
213 | int cpu_architecture(void) | 223 | static int __get_cpu_architecture(void) |
214 | { | 224 | { |
215 | int cpu_arch; | 225 | int cpu_arch; |
216 | 226 | ||
@@ -243,11 +253,22 @@ int cpu_architecture(void) | |||
243 | return cpu_arch; | 253 | return cpu_arch; |
244 | } | 254 | } |
245 | 255 | ||
256 | int __pure cpu_architecture(void) | ||
257 | { | ||
258 | BUG_ON(__cpu_architecture == CPU_ARCH_UNKNOWN); | ||
259 | |||
260 | return __cpu_architecture; | ||
261 | } | ||
262 | |||
246 | static int cpu_has_aliasing_icache(unsigned int arch) | 263 | static int cpu_has_aliasing_icache(unsigned int arch) |
247 | { | 264 | { |
248 | int aliasing_icache; | 265 | int aliasing_icache; |
249 | unsigned int id_reg, num_sets, line_size; | 266 | unsigned int id_reg, num_sets, line_size; |
250 | 267 | ||
268 | /* PIPT caches never alias. */ | ||
269 | if (icache_is_pipt()) | ||
270 | return 0; | ||
271 | |||
251 | /* arch specifies the register format */ | 272 | /* arch specifies the register format */ |
252 | switch (arch) { | 273 | switch (arch) { |
253 | case CPU_ARCH_ARMv7: | 274 | case CPU_ARCH_ARMv7: |
@@ -282,8 +303,14 @@ static void __init cacheid_init(void) | |||
282 | /* ARMv7 register format */ | 303 | /* ARMv7 register format */ |
283 | arch = CPU_ARCH_ARMv7; | 304 | arch = CPU_ARCH_ARMv7; |
284 | cacheid = CACHEID_VIPT_NONALIASING; | 305 | cacheid = CACHEID_VIPT_NONALIASING; |
285 | if ((cachetype & (3 << 14)) == 1 << 14) | 306 | switch (cachetype & (3 << 14)) { |
307 | case (1 << 14): | ||
286 | cacheid |= CACHEID_ASID_TAGGED; | 308 | cacheid |= CACHEID_ASID_TAGGED; |
309 | break; | ||
310 | case (3 << 14): | ||
311 | cacheid |= CACHEID_PIPT; | ||
312 | break; | ||
313 | } | ||
287 | } else { | 314 | } else { |
288 | arch = CPU_ARCH_ARMv6; | 315 | arch = CPU_ARCH_ARMv6; |
289 | if (cachetype & (1 << 23)) | 316 | if (cachetype & (1 << 23)) |
@@ -300,10 +327,11 @@ static void __init cacheid_init(void) | |||
300 | printk("CPU: %s data cache, %s instruction cache\n", | 327 | printk("CPU: %s data cache, %s instruction cache\n", |
301 | cache_is_vivt() ? "VIVT" : | 328 | cache_is_vivt() ? "VIVT" : |
302 | cache_is_vipt_aliasing() ? "VIPT aliasing" : | 329 | cache_is_vipt_aliasing() ? "VIPT aliasing" : |
303 | cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown", | 330 | cache_is_vipt_nonaliasing() ? "PIPT / VIPT nonaliasing" : "unknown", |
304 | cache_is_vivt() ? "VIVT" : | 331 | cache_is_vivt() ? "VIVT" : |
305 | icache_is_vivt_asid_tagged() ? "VIVT ASID tagged" : | 332 | icache_is_vivt_asid_tagged() ? "VIVT ASID tagged" : |
306 | icache_is_vipt_aliasing() ? "VIPT aliasing" : | 333 | icache_is_vipt_aliasing() ? "VIPT aliasing" : |
334 | icache_is_pipt() ? "PIPT" : | ||
307 | cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown"); | 335 | cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown"); |
308 | } | 336 | } |
309 | 337 | ||
@@ -414,6 +442,7 @@ static void __init setup_processor(void) | |||
414 | } | 442 | } |
415 | 443 | ||
416 | cpu_name = list->cpu_name; | 444 | cpu_name = list->cpu_name; |
445 | __cpu_architecture = __get_cpu_architecture(); | ||
417 | 446 | ||
418 | #ifdef MULTI_CPU | 447 | #ifdef MULTI_CPU |
419 | processor = *list->proc; | 448 | processor = *list->proc; |
@@ -861,7 +890,7 @@ static struct machine_desc * __init setup_machine_tags(unsigned int nr) | |||
861 | } | 890 | } |
862 | 891 | ||
863 | if (mdesc->fixup) | 892 | if (mdesc->fixup) |
864 | mdesc->fixup(mdesc, tags, &from, &meminfo); | 893 | mdesc->fixup(tags, &from, &meminfo); |
865 | 894 | ||
866 | if (tags->hdr.tag == ATAG_CORE) { | 895 | if (tags->hdr.tag == ATAG_CORE) { |
867 | if (meminfo.nr_banks != 0) | 896 | if (meminfo.nr_banks != 0) |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 35417d0fb8ab..854ce33715f4 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -319,17 +319,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
319 | */ | 319 | */ |
320 | platform_secondary_init(cpu); | 320 | platform_secondary_init(cpu); |
321 | 321 | ||
322 | /* | ||
323 | * Enable local interrupts. | ||
324 | */ | ||
325 | notify_cpu_starting(cpu); | 322 | notify_cpu_starting(cpu); |
326 | local_irq_enable(); | ||
327 | local_fiq_enable(); | ||
328 | |||
329 | /* | ||
330 | * Setup the percpu timer for this CPU. | ||
331 | */ | ||
332 | percpu_timer_setup(); | ||
333 | 323 | ||
334 | calibrate_delay(); | 324 | calibrate_delay(); |
335 | 325 | ||
@@ -341,10 +331,23 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
341 | * before we continue. | 331 | * before we continue. |
342 | */ | 332 | */ |
343 | set_cpu_online(cpu, true); | 333 | set_cpu_online(cpu, true); |
334 | |||
335 | /* | ||
336 | * Setup the percpu timer for this CPU. | ||
337 | */ | ||
338 | percpu_timer_setup(); | ||
339 | |||
344 | while (!cpu_active(cpu)) | 340 | while (!cpu_active(cpu)) |
345 | cpu_relax(); | 341 | cpu_relax(); |
346 | 342 | ||
347 | /* | 343 | /* |
344 | * cpu_active bit is set, so it's safe to enalbe interrupts | ||
345 | * now. | ||
346 | */ | ||
347 | local_irq_enable(); | ||
348 | local_fiq_enable(); | ||
349 | |||
350 | /* | ||
348 | * OK, it's off to the idle thread for us | 351 | * OK, it's off to the idle thread for us |
349 | */ | 352 | */ |
350 | cpu_idle(); | 353 | cpu_idle(); |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 210382555af1..7f5b99eb2c50 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/kdebug.h> | 21 | #include <linux/kdebug.h> |
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/kexec.h> | 23 | #include <linux/kexec.h> |
24 | #include <linux/bug.h> | ||
24 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
25 | #include <linux/init.h> | 26 | #include <linux/init.h> |
26 | #include <linux/sched.h> | 27 | #include <linux/sched.h> |
@@ -271,6 +272,8 @@ void die(const char *str, struct pt_regs *regs, int err) | |||
271 | spin_lock_irq(&die_lock); | 272 | spin_lock_irq(&die_lock); |
272 | console_verbose(); | 273 | console_verbose(); |
273 | bust_spinlocks(1); | 274 | bust_spinlocks(1); |
275 | if (!user_mode(regs)) | ||
276 | report_bug(regs->ARM_pc, regs); | ||
274 | ret = __die(str, err, thread, regs); | 277 | ret = __die(str, err, thread, regs); |
275 | 278 | ||
276 | if (regs && kexec_should_crash(thread->task)) | 279 | if (regs && kexec_should_crash(thread->task)) |
@@ -302,6 +305,24 @@ void arm_notify_die(const char *str, struct pt_regs *regs, | |||
302 | } | 305 | } |
303 | } | 306 | } |
304 | 307 | ||
308 | #ifdef CONFIG_GENERIC_BUG | ||
309 | |||
310 | int is_valid_bugaddr(unsigned long pc) | ||
311 | { | ||
312 | #ifdef CONFIG_THUMB2_KERNEL | ||
313 | unsigned short bkpt; | ||
314 | #else | ||
315 | unsigned long bkpt; | ||
316 | #endif | ||
317 | |||
318 | if (probe_kernel_address((unsigned *)pc, bkpt)) | ||
319 | return 0; | ||
320 | |||
321 | return bkpt == BUG_INSTR_VALUE; | ||
322 | } | ||
323 | |||
324 | #endif | ||
325 | |||
305 | static LIST_HEAD(undef_hook); | 326 | static LIST_HEAD(undef_hook); |
306 | static DEFINE_SPINLOCK(undef_lock); | 327 | static DEFINE_SPINLOCK(undef_lock); |
307 | 328 | ||
@@ -707,16 +728,6 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs) | |||
707 | arm_notify_die("unknown data abort code", regs, &info, instr, 0); | 728 | arm_notify_die("unknown data abort code", regs, &info, instr, 0); |
708 | } | 729 | } |
709 | 730 | ||
710 | void __attribute__((noreturn)) __bug(const char *file, int line) | ||
711 | { | ||
712 | printk(KERN_CRIT"kernel BUG at %s:%d!\n", file, line); | ||
713 | *(int *)0 = 0; | ||
714 | |||
715 | /* Avoid "noreturn function does return" */ | ||
716 | for (;;); | ||
717 | } | ||
718 | EXPORT_SYMBOL(__bug); | ||
719 | |||
720 | void __readwrite_bug(const char *fn) | 731 | void __readwrite_bug(const char *fn) |
721 | { | 732 | { |
722 | printk("%s called, but not implemented\n", fn); | 733 | printk("%s called, but not implemented\n", fn); |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 4e66f62b8d41..20b3041e0860 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -21,7 +21,8 @@ | |||
21 | #define ARM_CPU_KEEP(x) | 21 | #define ARM_CPU_KEEP(x) |
22 | #endif | 22 | #endif |
23 | 23 | ||
24 | #if defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK) | 24 | #if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \ |
25 | defined(CONFIG_GENERIC_BUG) | ||
25 | #define ARM_EXIT_KEEP(x) x | 26 | #define ARM_EXIT_KEEP(x) x |
26 | #define ARM_EXIT_DISCARD(x) | 27 | #define ARM_EXIT_DISCARD(x) |
27 | #else | 28 | #else |
diff --git a/arch/arm/lib/backtrace.S b/arch/arm/lib/backtrace.S index a673297b0cf1..cd07b5814c23 100644 --- a/arch/arm/lib/backtrace.S +++ b/arch/arm/lib/backtrace.S | |||
@@ -22,15 +22,10 @@ | |||
22 | #define mask r7 | 22 | #define mask r7 |
23 | #define offset r8 | 23 | #define offset r8 |
24 | 24 | ||
25 | ENTRY(__backtrace) | ||
26 | mov r1, #0x10 | ||
27 | mov r0, fp | ||
28 | |||
29 | ENTRY(c_backtrace) | 25 | ENTRY(c_backtrace) |
30 | 26 | ||
31 | #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK) | 27 | #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK) |
32 | mov pc, lr | 28 | mov pc, lr |
33 | ENDPROC(__backtrace) | ||
34 | ENDPROC(c_backtrace) | 29 | ENDPROC(c_backtrace) |
35 | #else | 30 | #else |
36 | stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... | 31 | stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... |
@@ -107,7 +102,6 @@ for_each_frame: tst frame, mask @ Check for address exceptions | |||
107 | mov r1, frame | 102 | mov r1, frame |
108 | bl printk | 103 | bl printk |
109 | no_frame: ldmfd sp!, {r4 - r8, pc} | 104 | no_frame: ldmfd sp!, {r4 - r8, pc} |
110 | ENDPROC(__backtrace) | ||
111 | ENDPROC(c_backtrace) | 105 | ENDPROC(c_backtrace) |
112 | 106 | ||
113 | .pushsection __ex_table,"a" | 107 | .pushsection __ex_table,"a" |
diff --git a/arch/arm/lib/div64.S b/arch/arm/lib/div64.S index faa7748142da..e55c4842c290 100644 --- a/arch/arm/lib/div64.S +++ b/arch/arm/lib/div64.S | |||
@@ -13,6 +13,7 @@ | |||
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
16 | #include <asm/unwind.h> | ||
16 | 17 | ||
17 | #ifdef __ARMEB__ | 18 | #ifdef __ARMEB__ |
18 | #define xh r0 | 19 | #define xh r0 |
@@ -44,6 +45,7 @@ | |||
44 | */ | 45 | */ |
45 | 46 | ||
46 | ENTRY(__do_div64) | 47 | ENTRY(__do_div64) |
48 | UNWIND(.fnstart) | ||
47 | 49 | ||
48 | @ Test for easy paths first. | 50 | @ Test for easy paths first. |
49 | subs ip, r4, #1 | 51 | subs ip, r4, #1 |
@@ -189,7 +191,12 @@ ENTRY(__do_div64) | |||
189 | moveq yh, xh | 191 | moveq yh, xh |
190 | moveq xh, #0 | 192 | moveq xh, #0 |
191 | moveq pc, lr | 193 | moveq pc, lr |
194 | UNWIND(.fnend) | ||
192 | 195 | ||
196 | UNWIND(.fnstart) | ||
197 | UNWIND(.pad #4) | ||
198 | UNWIND(.save {lr}) | ||
199 | Ldiv0_64: | ||
193 | @ Division by 0: | 200 | @ Division by 0: |
194 | str lr, [sp, #-8]! | 201 | str lr, [sp, #-8]! |
195 | bl __div0 | 202 | bl __div0 |
@@ -200,4 +207,5 @@ ENTRY(__do_div64) | |||
200 | mov xh, #0 | 207 | mov xh, #0 |
201 | ldr pc, [sp], #8 | 208 | ldr pc, [sp], #8 |
202 | 209 | ||
210 | UNWIND(.fnend) | ||
203 | ENDPROC(__do_div64) | 211 | ENDPROC(__do_div64) |
diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot index 3462b815054a..9ab5a3e5f4f1 100644 --- a/arch/arm/mach-at91/Makefile.boot +++ b/arch/arm/mach-at91/Makefile.boot | |||
@@ -4,15 +4,15 @@ | |||
4 | # INITRD_PHYS must be in RAM | 4 | # INITRD_PHYS must be in RAM |
5 | 5 | ||
6 | ifeq ($(CONFIG_ARCH_AT91CAP9),y) | 6 | ifeq ($(CONFIG_ARCH_AT91CAP9),y) |
7 | zreladdr-y := 0x70008000 | 7 | zreladdr-y += 0x70008000 |
8 | params_phys-y := 0x70000100 | 8 | params_phys-y := 0x70000100 |
9 | initrd_phys-y := 0x70410000 | 9 | initrd_phys-y := 0x70410000 |
10 | else ifeq ($(CONFIG_ARCH_AT91SAM9G45),y) | 10 | else ifeq ($(CONFIG_ARCH_AT91SAM9G45),y) |
11 | zreladdr-y := 0x70008000 | 11 | zreladdr-y += 0x70008000 |
12 | params_phys-y := 0x70000100 | 12 | params_phys-y := 0x70000100 |
13 | initrd_phys-y := 0x70410000 | 13 | initrd_phys-y := 0x70410000 |
14 | else | 14 | else |
15 | zreladdr-y := 0x20008000 | 15 | zreladdr-y += 0x20008000 |
16 | params_phys-y := 0x20000100 | 16 | params_phys-y := 0x20000100 |
17 | initrd_phys-y := 0x20410000 | 17 | initrd_phys-y := 0x20410000 |
18 | endif | 18 | endif |
diff --git a/arch/arm/mach-bcmring/Makefile.boot b/arch/arm/mach-bcmring/Makefile.boot index fb53b283bebb..aef2467757fa 100644 --- a/arch/arm/mach-bcmring/Makefile.boot +++ b/arch/arm/mach-bcmring/Makefile.boot | |||
@@ -1,6 +1,6 @@ | |||
1 | # Address where decompressor will be written and eventually executed. | 1 | # Address where decompressor will be written and eventually executed. |
2 | # | 2 | # |
3 | # default to SDRAM | 3 | # default to SDRAM |
4 | zreladdr-y := $(CONFIG_BCM_ZRELADDR) | 4 | zreladdr-y += $(CONFIG_BCM_ZRELADDR) |
5 | params_phys-y := 0x00000800 | 5 | params_phys-y := 0x00000800 |
6 | 6 | ||
diff --git a/arch/arm/mach-bcmring/arch.c b/arch/arm/mach-bcmring/arch.c index a604b9ebb501..31a143592c81 100644 --- a/arch/arm/mach-bcmring/arch.c +++ b/arch/arm/mach-bcmring/arch.c | |||
@@ -136,8 +136,8 @@ static void __init bcmring_init_machine(void) | |||
136 | * | 136 | * |
137 | *****************************************************************************/ | 137 | *****************************************************************************/ |
138 | 138 | ||
139 | static void __init bcmring_fixup(struct machine_desc *desc, | 139 | static void __init bcmring_fixup(struct tag *t, char **cmdline, |
140 | struct tag *t, char **cmdline, struct meminfo *mi) { | 140 | struct meminfo *mi) { |
141 | #ifdef CONFIG_BLK_DEV_INITRD | 141 | #ifdef CONFIG_BLK_DEV_INITRD |
142 | printk(KERN_NOTICE "bcmring_fixup\n"); | 142 | printk(KERN_NOTICE "bcmring_fixup\n"); |
143 | t->hdr.tag = ATAG_CORE; | 143 | t->hdr.tag = ATAG_CORE; |
diff --git a/arch/arm/mach-clps711x/Makefile.boot b/arch/arm/mach-clps711x/Makefile.boot index a51fcef64fe0..9398e859b5af 100644 --- a/arch/arm/mach-clps711x/Makefile.boot +++ b/arch/arm/mach-clps711x/Makefile.boot | |||
@@ -1,5 +1,5 @@ | |||
1 | # The standard locations for stuff on CLPS711x type processors | 1 | # The standard locations for stuff on CLPS711x type processors |
2 | zreladdr-y := 0xc0028000 | 2 | zreladdr-y += 0xc0028000 |
3 | params_phys-y := 0xc0000100 | 3 | params_phys-y := 0xc0000100 |
4 | # Should probably have some agreement on these... | 4 | # Should probably have some agreement on these... |
5 | initrd_phys-$(CONFIG_ARCH_P720T) := 0xc0400000 | 5 | initrd_phys-$(CONFIG_ARCH_P720T) := 0xc0400000 |
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/clep7312.c index 67b5abb4a60a..0a2e74feb24a 100644 --- a/arch/arm/mach-clps711x/clep7312.c +++ b/arch/arm/mach-clps711x/clep7312.c | |||
@@ -26,8 +26,7 @@ | |||
26 | #include "common.h" | 26 | #include "common.h" |
27 | 27 | ||
28 | static void __init | 28 | static void __init |
29 | fixup_clep7312(struct machine_desc *desc, struct tag *tags, | 29 | fixup_clep7312(struct tag *tags, char **cmdline, struct meminfo *mi) |
30 | char **cmdline, struct meminfo *mi) | ||
31 | { | 30 | { |
32 | mi->nr_banks=1; | 31 | mi->nr_banks=1; |
33 | mi->bank[0].start = 0xc0000000; | 32 | mi->bank[0].start = 0xc0000000; |
diff --git a/arch/arm/mach-clps711x/edb7211-arch.c b/arch/arm/mach-clps711x/edb7211-arch.c index 98ca5b2e940d..725a7a54ba42 100644 --- a/arch/arm/mach-clps711x/edb7211-arch.c +++ b/arch/arm/mach-clps711x/edb7211-arch.c | |||
@@ -37,8 +37,7 @@ static void __init edb7211_reserve(void) | |||
37 | } | 37 | } |
38 | 38 | ||
39 | static void __init | 39 | static void __init |
40 | fixup_edb7211(struct machine_desc *desc, struct tag *tags, | 40 | fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi) |
41 | char **cmdline, struct meminfo *mi) | ||
42 | { | 41 | { |
43 | /* | 42 | /* |
44 | * Bank start addresses are not present in the information | 43 | * Bank start addresses are not present in the information |
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c index b1cb479e71e9..1947b30f9b8c 100644 --- a/arch/arm/mach-clps711x/fortunet.c +++ b/arch/arm/mach-clps711x/fortunet.c | |||
@@ -57,8 +57,7 @@ typedef struct tag_IMAGE_PARAMS | |||
57 | #define IMAGE_PARAMS_PHYS 0xC01F0000 | 57 | #define IMAGE_PARAMS_PHYS 0xC01F0000 |
58 | 58 | ||
59 | static void __init | 59 | static void __init |
60 | fortunet_fixup(struct machine_desc *desc, struct tag *tags, | 60 | fortunet_fixup(struct tag *tags, char **cmdline, struct meminfo *mi) |
61 | char **cmdline, struct meminfo *mi) | ||
62 | { | 61 | { |
63 | IMAGE_PARAMS *ip = phys_to_virt(IMAGE_PARAMS_PHYS); | 62 | IMAGE_PARAMS *ip = phys_to_virt(IMAGE_PARAMS_PHYS); |
64 | *cmdline = phys_to_virt(ip->command_line); | 63 | *cmdline = phys_to_virt(ip->command_line); |
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c index cefbce0480b9..3f796e0d3284 100644 --- a/arch/arm/mach-clps711x/p720t.c +++ b/arch/arm/mach-clps711x/p720t.c | |||
@@ -56,8 +56,7 @@ static struct map_desc p720t_io_desc[] __initdata = { | |||
56 | }; | 56 | }; |
57 | 57 | ||
58 | static void __init | 58 | static void __init |
59 | fixup_p720t(struct machine_desc *desc, struct tag *tag, | 59 | fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi) |
60 | char **cmdline, struct meminfo *mi) | ||
61 | { | 60 | { |
62 | /* | 61 | /* |
63 | * Our bootloader doesn't setup any tags (yet). | 62 | * Our bootloader doesn't setup any tags (yet). |
diff --git a/arch/arm/mach-cns3xxx/Makefile.boot b/arch/arm/mach-cns3xxx/Makefile.boot index 777012865220..d079de0b6e3b 100644 --- a/arch/arm/mach-cns3xxx/Makefile.boot +++ b/arch/arm/mach-cns3xxx/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00C00000 | 3 | initrd_phys-y := 0x00C00000 |
diff --git a/arch/arm/mach-davinci/Makefile.boot b/arch/arm/mach-davinci/Makefile.boot index db97ef2c6477..04a6c4e67b14 100644 --- a/arch/arm/mach-davinci/Makefile.boot +++ b/arch/arm/mach-davinci/Makefile.boot | |||
@@ -2,12 +2,12 @@ ifeq ($(CONFIG_ARCH_DAVINCI_DA8XX),y) | |||
2 | ifeq ($(CONFIG_ARCH_DAVINCI_DMx),y) | 2 | ifeq ($(CONFIG_ARCH_DAVINCI_DMx),y) |
3 | $(error Cannot enable DaVinci and DA8XX platforms concurrently) | 3 | $(error Cannot enable DaVinci and DA8XX platforms concurrently) |
4 | else | 4 | else |
5 | zreladdr-y := 0xc0008000 | 5 | zreladdr-y += 0xc0008000 |
6 | params_phys-y := 0xc0000100 | 6 | params_phys-y := 0xc0000100 |
7 | initrd_phys-y := 0xc0800000 | 7 | initrd_phys-y := 0xc0800000 |
8 | endif | 8 | endif |
9 | else | 9 | else |
10 | zreladdr-y := 0x80008000 | 10 | zreladdr-y += 0x80008000 |
11 | params_phys-y := 0x80000100 | 11 | params_phys-y := 0x80000100 |
12 | initrd_phys-y := 0x80800000 | 12 | initrd_phys-y := 0x80800000 |
13 | endif | 13 | endif |
diff --git a/arch/arm/mach-dove/Makefile.boot b/arch/arm/mach-dove/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-dove/Makefile.boot +++ b/arch/arm/mach-dove/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-ebsa110/Makefile.boot b/arch/arm/mach-ebsa110/Makefile.boot index 232126044935..83cf07c38ada 100644 --- a/arch/arm/mach-ebsa110/Makefile.boot +++ b/arch/arm/mach-ebsa110/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000400 | 2 | params_phys-y := 0x00000400 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-ep93xx/Makefile.boot b/arch/arm/mach-ep93xx/Makefile.boot index 0ad33f15c622..d3113a71cb40 100644 --- a/arch/arm/mach-ep93xx/Makefile.boot +++ b/arch/arm/mach-ep93xx/Makefile.boot | |||
@@ -1,14 +1,14 @@ | |||
1 | zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00008000 | 1 | zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) += 0x00008000 |
2 | params_phys-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00000100 | 2 | params_phys-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00000100 |
3 | 3 | ||
4 | zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0008000 | 4 | zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) += 0xc0008000 |
5 | params_phys-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0000100 | 5 | params_phys-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0000100 |
6 | 6 | ||
7 | zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) := 0xd0008000 | 7 | zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) += 0xd0008000 |
8 | params_phys-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) := 0xd0000100 | 8 | params_phys-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) := 0xd0000100 |
9 | 9 | ||
10 | zreladdr-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET) := 0xe0008000 | 10 | zreladdr-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET) += 0xe0008000 |
11 | params_phys-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET) := 0xe0000100 | 11 | params_phys-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET) := 0xe0000100 |
12 | 12 | ||
13 | zreladdr-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET) := 0xf0008000 | 13 | zreladdr-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET) += 0xf0008000 |
14 | params_phys-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET) := 0xf0000100 | 14 | params_phys-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET) := 0xf0000100 |
diff --git a/arch/arm/mach-exynos4/Makefile.boot b/arch/arm/mach-exynos4/Makefile.boot index d65956ffb43d..b9862e22bf10 100644 --- a/arch/arm/mach-exynos4/Makefile.boot +++ b/arch/arm/mach-exynos4/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x40008000 | 1 | zreladdr-y += 0x40008000 |
2 | params_phys-y := 0x40000100 | 2 | params_phys-y := 0x40000100 |
diff --git a/arch/arm/mach-footbridge/Kconfig b/arch/arm/mach-footbridge/Kconfig index c8e7afcf14ec..f643ef819da6 100644 --- a/arch/arm/mach-footbridge/Kconfig +++ b/arch/arm/mach-footbridge/Kconfig | |||
@@ -4,8 +4,8 @@ menu "Footbridge Implementations" | |||
4 | 4 | ||
5 | config ARCH_CATS | 5 | config ARCH_CATS |
6 | bool "CATS" | 6 | bool "CATS" |
7 | select CLKSRC_I8253 | ||
8 | select CLKEVT_I8253 | 7 | select CLKEVT_I8253 |
8 | select CLKSRC_I8253 | ||
9 | select FOOTBRIDGE_HOST | 9 | select FOOTBRIDGE_HOST |
10 | select ISA | 10 | select ISA |
11 | select ISA_DMA | 11 | select ISA_DMA |
@@ -61,8 +61,8 @@ config ARCH_EBSA285_HOST | |||
61 | 61 | ||
62 | config ARCH_NETWINDER | 62 | config ARCH_NETWINDER |
63 | bool "NetWinder" | 63 | bool "NetWinder" |
64 | select CLKSRC_I8253 | ||
65 | select CLKEVT_I8253 | 64 | select CLKEVT_I8253 |
65 | select CLKSRC_I8253 | ||
66 | select FOOTBRIDGE_HOST | 66 | select FOOTBRIDGE_HOST |
67 | select ISA | 67 | select ISA |
68 | select ISA_DMA | 68 | select ISA_DMA |
diff --git a/arch/arm/mach-footbridge/Makefile.boot b/arch/arm/mach-footbridge/Makefile.boot index c7e75acfe6c9..ff0a4b5b0a82 100644 --- a/arch/arm/mach-footbridge/Makefile.boot +++ b/arch/arm/mach-footbridge/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-footbridge/cats-hw.c b/arch/arm/mach-footbridge/cats-hw.c index 5b1a8db779be..206ff2f39d6c 100644 --- a/arch/arm/mach-footbridge/cats-hw.c +++ b/arch/arm/mach-footbridge/cats-hw.c | |||
@@ -76,8 +76,7 @@ __initcall(cats_hw_init); | |||
76 | * hard reboots fail on early boards. | 76 | * hard reboots fail on early boards. |
77 | */ | 77 | */ |
78 | static void __init | 78 | static void __init |
79 | fixup_cats(struct machine_desc *desc, struct tag *tags, | 79 | fixup_cats(struct tag *tags, char **cmdline, struct meminfo *mi) |
80 | char **cmdline, struct meminfo *mi) | ||
81 | { | 80 | { |
82 | screen_info.orig_video_lines = 25; | 81 | screen_info.orig_video_lines = 25; |
83 | screen_info.orig_video_points = 16; | 82 | screen_info.orig_video_points = 16; |
diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c index 06e514f372d0..4cbc2e65ce3a 100644 --- a/arch/arm/mach-footbridge/netwinder-hw.c +++ b/arch/arm/mach-footbridge/netwinder-hw.c | |||
@@ -631,8 +631,7 @@ __initcall(nw_hw_init); | |||
631 | * the parameter page. | 631 | * the parameter page. |
632 | */ | 632 | */ |
633 | static void __init | 633 | static void __init |
634 | fixup_netwinder(struct machine_desc *desc, struct tag *tags, | 634 | fixup_netwinder(struct tag *tags, char **cmdline, struct meminfo *mi) |
635 | char **cmdline, struct meminfo *mi) | ||
636 | { | 635 | { |
637 | #ifdef CONFIG_ISAPNP | 636 | #ifdef CONFIG_ISAPNP |
638 | extern int isapnp_disable; | 637 | extern int isapnp_disable; |
diff --git a/arch/arm/mach-gemini/Makefile.boot b/arch/arm/mach-gemini/Makefile.boot index 22a52c228d93..683f52b20e3d 100644 --- a/arch/arm/mach-gemini/Makefile.boot +++ b/arch/arm/mach-gemini/Makefile.boot | |||
@@ -1,9 +1,9 @@ | |||
1 | ifeq ($(CONFIG_GEMINI_MEM_SWAP),y) | 1 | ifeq ($(CONFIG_GEMINI_MEM_SWAP),y) |
2 | zreladdr-y := 0x00008000 | 2 | zreladdr-y += 0x00008000 |
3 | params_phys-y := 0x00000100 | 3 | params_phys-y := 0x00000100 |
4 | initrd_phys-y := 0x00800000 | 4 | initrd_phys-y := 0x00800000 |
5 | else | 5 | else |
6 | zreladdr-y := 0x10008000 | 6 | zreladdr-y += 0x10008000 |
7 | params_phys-y := 0x10000100 | 7 | params_phys-y := 0x10000100 |
8 | initrd_phys-y := 0x10800000 | 8 | initrd_phys-y := 0x10800000 |
9 | endif | 9 | endif |
diff --git a/arch/arm/mach-h720x/Makefile.boot b/arch/arm/mach-h720x/Makefile.boot index 52984017bd91..d875a7094dfe 100644 --- a/arch/arm/mach-h720x/Makefile.boot +++ b/arch/arm/mach-h720x/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_H720X) := 0x40008000 | 1 | zreladdr-$(CONFIG_ARCH_H720X) += 0x40008000 |
2 | 2 | ||
diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot index ebee18b3884c..dbe61201bcd8 100644 --- a/arch/arm/mach-imx/Makefile.boot +++ b/arch/arm/mach-imx/Makefile.boot | |||
@@ -1,19 +1,19 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_MX1) := 0x08008000 | 1 | zreladdr-$(CONFIG_ARCH_MX1) += 0x08008000 |
2 | params_phys-$(CONFIG_ARCH_MX1) := 0x08000100 | 2 | params_phys-$(CONFIG_ARCH_MX1) := 0x08000100 |
3 | initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000 | 3 | initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000 |
4 | 4 | ||
5 | zreladdr-$(CONFIG_MACH_MX21) := 0xC0008000 | 5 | zreladdr-$(CONFIG_MACH_MX21) += 0xC0008000 |
6 | params_phys-$(CONFIG_MACH_MX21) := 0xC0000100 | 6 | params_phys-$(CONFIG_MACH_MX21) := 0xC0000100 |
7 | initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000 | 7 | initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000 |
8 | 8 | ||
9 | zreladdr-$(CONFIG_ARCH_MX25) := 0x80008000 | 9 | zreladdr-$(CONFIG_ARCH_MX25) += 0x80008000 |
10 | params_phys-$(CONFIG_ARCH_MX25) := 0x80000100 | 10 | params_phys-$(CONFIG_ARCH_MX25) := 0x80000100 |
11 | initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000 | 11 | initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000 |
12 | 12 | ||
13 | zreladdr-$(CONFIG_MACH_MX27) := 0xA0008000 | 13 | zreladdr-$(CONFIG_MACH_MX27) += 0xA0008000 |
14 | params_phys-$(CONFIG_MACH_MX27) := 0xA0000100 | 14 | params_phys-$(CONFIG_MACH_MX27) := 0xA0000100 |
15 | initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000 | 15 | initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000 |
16 | 16 | ||
17 | zreladdr-$(CONFIG_ARCH_MX3) := 0x80008000 | 17 | zreladdr-$(CONFIG_ARCH_MX3) += 0x80008000 |
18 | params_phys-$(CONFIG_ARCH_MX3) := 0x80000100 | 18 | params_phys-$(CONFIG_ARCH_MX3) := 0x80000100 |
19 | initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000 | 19 | initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000 |
diff --git a/arch/arm/mach-integrator/Makefile.boot b/arch/arm/mach-integrator/Makefile.boot index c7e75acfe6c9..ff0a4b5b0a82 100644 --- a/arch/arm/mach-integrator/Makefile.boot +++ b/arch/arm/mach-integrator/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index 77315b995681..82ebc8d772d3 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c | |||
@@ -126,6 +126,10 @@ static struct clk_lookup lookups[] = { | |||
126 | { /* Bus clock */ | 126 | { /* Bus clock */ |
127 | .con_id = "apb_pclk", | 127 | .con_id = "apb_pclk", |
128 | .clk = &dummy_apb_pclk, | 128 | .clk = &dummy_apb_pclk, |
129 | }, { | ||
130 | /* Integrator/AP timer frequency */ | ||
131 | .dev_id = "ap_timer", | ||
132 | .clk = &clk24mhz, | ||
129 | }, { /* UART0 */ | 133 | }, { /* UART0 */ |
130 | .dev_id = "mb:16", | 134 | .dev_id = "mb:16", |
131 | .clk = &uartclk, | 135 | .clk = &uartclk, |
diff --git a/arch/arm/mach-integrator/include/mach/platform.h b/arch/arm/mach-integrator/include/mach/platform.h index 5e6ea5cfea6e..ec467baade09 100644 --- a/arch/arm/mach-integrator/include/mach/platform.h +++ b/arch/arm/mach-integrator/include/mach/platform.h | |||
@@ -13,9 +13,6 @@ | |||
13 | * along with this program; if not, write to the Free Software | 13 | * along with this program; if not, write to the Free Software |
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
15 | */ | 15 | */ |
16 | /* DO NOT EDIT!! - this file automatically generated | ||
17 | * from .s file by awk -f s2h.awk | ||
18 | */ | ||
19 | /************************************************************************** | 16 | /************************************************************************** |
20 | * * Copyright © ARM Limited 1998. All rights reserved. | 17 | * * Copyright © ARM Limited 1998. All rights reserved. |
21 | * ***********************************************************************/ | 18 | * ***********************************************************************/ |
@@ -399,15 +396,6 @@ | |||
399 | #define INTEGRATOR_TIMER1_BASE (INTEGRATOR_CT_BASE + 0x100) | 396 | #define INTEGRATOR_TIMER1_BASE (INTEGRATOR_CT_BASE + 0x100) |
400 | #define INTEGRATOR_TIMER2_BASE (INTEGRATOR_CT_BASE + 0x200) | 397 | #define INTEGRATOR_TIMER2_BASE (INTEGRATOR_CT_BASE + 0x200) |
401 | 398 | ||
402 | #define TICKS_PER_uSEC 24 | ||
403 | |||
404 | /* | ||
405 | * These are useconds NOT ticks. | ||
406 | * | ||
407 | */ | ||
408 | #define mSEC_1 1000 | ||
409 | #define mSEC_10 (mSEC_1 * 10) | ||
410 | |||
411 | #define INTEGRATOR_CSR_BASE 0x10000000 | 399 | #define INTEGRATOR_CSR_BASE 0x10000000 |
412 | #define INTEGRATOR_CSR_SIZE 0x10000000 | 400 | #define INTEGRATOR_CSR_SIZE 0x10000000 |
413 | 401 | ||
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 8cdc730dcb3a..f2119908a0b3 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
33 | #include <linux/io.h> | 33 | #include <linux/io.h> |
34 | #include <linux/mtd/physmap.h> | 34 | #include <linux/mtd/physmap.h> |
35 | #include <linux/clk.h> | ||
35 | #include <video/vga.h> | 36 | #include <video/vga.h> |
36 | 37 | ||
37 | #include <mach/hardware.h> | 38 | #include <mach/hardware.h> |
@@ -322,27 +323,16 @@ static void __init ap_init(void) | |||
322 | #define TIMER1_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER1_BASE) | 323 | #define TIMER1_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER1_BASE) |
323 | #define TIMER2_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER2_BASE) | 324 | #define TIMER2_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER2_BASE) |
324 | 325 | ||
325 | /* | ||
326 | * How long is the timer interval? | ||
327 | */ | ||
328 | #define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10) | ||
329 | #if TIMER_INTERVAL >= 0x100000 | ||
330 | #define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC) | ||
331 | #elif TIMER_INTERVAL >= 0x10000 | ||
332 | #define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC) | ||
333 | #else | ||
334 | #define TICKS2USECS(x) ((x) / TICKS_PER_uSEC) | ||
335 | #endif | ||
336 | |||
337 | static unsigned long timer_reload; | 326 | static unsigned long timer_reload; |
338 | 327 | ||
339 | static void integrator_clocksource_init(u32 khz) | 328 | static void integrator_clocksource_init(unsigned long inrate) |
340 | { | 329 | { |
341 | void __iomem *base = (void __iomem *)TIMER2_VA_BASE; | 330 | void __iomem *base = (void __iomem *)TIMER2_VA_BASE; |
342 | u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC; | 331 | u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC; |
332 | unsigned long rate = inrate; | ||
343 | 333 | ||
344 | if (khz >= 1500) { | 334 | if (rate >= 1500000) { |
345 | khz /= 16; | 335 | rate /= 16; |
346 | ctrl |= TIMER_CTRL_DIV16; | 336 | ctrl |= TIMER_CTRL_DIV16; |
347 | } | 337 | } |
348 | 338 | ||
@@ -350,7 +340,7 @@ static void integrator_clocksource_init(u32 khz) | |||
350 | writel(ctrl, base + TIMER_CTRL); | 340 | writel(ctrl, base + TIMER_CTRL); |
351 | 341 | ||
352 | clocksource_mmio_init(base + TIMER_VALUE, "timer2", | 342 | clocksource_mmio_init(base + TIMER_VALUE, "timer2", |
353 | khz * 1000, 200, 16, clocksource_mmio_readl_down); | 343 | rate, 200, 16, clocksource_mmio_readl_down); |
354 | } | 344 | } |
355 | 345 | ||
356 | static void __iomem * const clkevt_base = (void __iomem *)TIMER1_VA_BASE; | 346 | static void __iomem * const clkevt_base = (void __iomem *)TIMER1_VA_BASE; |
@@ -374,15 +364,29 @@ static void clkevt_set_mode(enum clock_event_mode mode, struct clock_event_devic | |||
374 | { | 364 | { |
375 | u32 ctrl = readl(clkevt_base + TIMER_CTRL) & ~TIMER_CTRL_ENABLE; | 365 | u32 ctrl = readl(clkevt_base + TIMER_CTRL) & ~TIMER_CTRL_ENABLE; |
376 | 366 | ||
377 | BUG_ON(mode == CLOCK_EVT_MODE_ONESHOT); | 367 | /* Disable timer */ |
368 | writel(ctrl, clkevt_base + TIMER_CTRL); | ||
378 | 369 | ||
379 | if (mode == CLOCK_EVT_MODE_PERIODIC) { | 370 | switch (mode) { |
380 | writel(ctrl, clkevt_base + TIMER_CTRL); | 371 | case CLOCK_EVT_MODE_PERIODIC: |
372 | /* Enable the timer and start the periodic tick */ | ||
381 | writel(timer_reload, clkevt_base + TIMER_LOAD); | 373 | writel(timer_reload, clkevt_base + TIMER_LOAD); |
382 | ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE; | 374 | ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE; |
375 | writel(ctrl, clkevt_base + TIMER_CTRL); | ||
376 | break; | ||
377 | case CLOCK_EVT_MODE_ONESHOT: | ||
378 | /* Leave the timer disabled, .set_next_event will enable it */ | ||
379 | ctrl &= ~TIMER_CTRL_PERIODIC; | ||
380 | writel(ctrl, clkevt_base + TIMER_CTRL); | ||
381 | break; | ||
382 | case CLOCK_EVT_MODE_UNUSED: | ||
383 | case CLOCK_EVT_MODE_SHUTDOWN: | ||
384 | case CLOCK_EVT_MODE_RESUME: | ||
385 | default: | ||
386 | /* Just leave in disabled state */ | ||
387 | break; | ||
383 | } | 388 | } |
384 | 389 | ||
385 | writel(ctrl, clkevt_base + TIMER_CTRL); | ||
386 | } | 390 | } |
387 | 391 | ||
388 | static int clkevt_set_next_event(unsigned long next, struct clock_event_device *evt) | 392 | static int clkevt_set_next_event(unsigned long next, struct clock_event_device *evt) |
@@ -398,12 +402,10 @@ static int clkevt_set_next_event(unsigned long next, struct clock_event_device * | |||
398 | 402 | ||
399 | static struct clock_event_device integrator_clockevent = { | 403 | static struct clock_event_device integrator_clockevent = { |
400 | .name = "timer1", | 404 | .name = "timer1", |
401 | .shift = 34, | 405 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
402 | .features = CLOCK_EVT_FEAT_PERIODIC, | ||
403 | .set_mode = clkevt_set_mode, | 406 | .set_mode = clkevt_set_mode, |
404 | .set_next_event = clkevt_set_next_event, | 407 | .set_next_event = clkevt_set_next_event, |
405 | .rating = 300, | 408 | .rating = 300, |
406 | .cpumask = cpu_all_mask, | ||
407 | }; | 409 | }; |
408 | 410 | ||
409 | static struct irqaction integrator_timer_irq = { | 411 | static struct irqaction integrator_timer_irq = { |
@@ -413,29 +415,27 @@ static struct irqaction integrator_timer_irq = { | |||
413 | .dev_id = &integrator_clockevent, | 415 | .dev_id = &integrator_clockevent, |
414 | }; | 416 | }; |
415 | 417 | ||
416 | static void integrator_clockevent_init(u32 khz) | 418 | static void integrator_clockevent_init(unsigned long inrate) |
417 | { | 419 | { |
418 | struct clock_event_device *evt = &integrator_clockevent; | 420 | unsigned long rate = inrate; |
419 | unsigned int ctrl = 0; | 421 | unsigned int ctrl = 0; |
420 | 422 | ||
421 | if (khz * 1000 > 0x100000 * HZ) { | 423 | /* Calculate and program a divisor */ |
422 | khz /= 256; | 424 | if (rate > 0x100000 * HZ) { |
425 | rate /= 256; | ||
423 | ctrl |= TIMER_CTRL_DIV256; | 426 | ctrl |= TIMER_CTRL_DIV256; |
424 | } else if (khz * 1000 > 0x10000 * HZ) { | 427 | } else if (rate > 0x10000 * HZ) { |
425 | khz /= 16; | 428 | rate /= 16; |
426 | ctrl |= TIMER_CTRL_DIV16; | 429 | ctrl |= TIMER_CTRL_DIV16; |
427 | } | 430 | } |
428 | 431 | timer_reload = rate / HZ; | |
429 | timer_reload = khz * 1000 / HZ; | ||
430 | writel(ctrl, clkevt_base + TIMER_CTRL); | 432 | writel(ctrl, clkevt_base + TIMER_CTRL); |
431 | 433 | ||
432 | evt->irq = IRQ_TIMERINT1; | ||
433 | evt->mult = div_sc(khz, NSEC_PER_MSEC, evt->shift); | ||
434 | evt->max_delta_ns = clockevent_delta2ns(0xffff, evt); | ||
435 | evt->min_delta_ns = clockevent_delta2ns(0xf, evt); | ||
436 | |||
437 | setup_irq(IRQ_TIMERINT1, &integrator_timer_irq); | 434 | setup_irq(IRQ_TIMERINT1, &integrator_timer_irq); |
438 | clockevents_register_device(evt); | 435 | clockevents_config_and_register(&integrator_clockevent, |
436 | rate, | ||
437 | 1, | ||
438 | 0xffffU); | ||
439 | } | 439 | } |
440 | 440 | ||
441 | /* | 441 | /* |
@@ -443,14 +443,20 @@ static void integrator_clockevent_init(u32 khz) | |||
443 | */ | 443 | */ |
444 | static void __init ap_init_timer(void) | 444 | static void __init ap_init_timer(void) |
445 | { | 445 | { |
446 | u32 khz = TICKS_PER_uSEC * 1000; | 446 | struct clk *clk; |
447 | unsigned long rate; | ||
448 | |||
449 | clk = clk_get_sys("ap_timer", NULL); | ||
450 | BUG_ON(IS_ERR(clk)); | ||
451 | clk_enable(clk); | ||
452 | rate = clk_get_rate(clk); | ||
447 | 453 | ||
448 | writel(0, TIMER0_VA_BASE + TIMER_CTRL); | 454 | writel(0, TIMER0_VA_BASE + TIMER_CTRL); |
449 | writel(0, TIMER1_VA_BASE + TIMER_CTRL); | 455 | writel(0, TIMER1_VA_BASE + TIMER_CTRL); |
450 | writel(0, TIMER2_VA_BASE + TIMER_CTRL); | 456 | writel(0, TIMER2_VA_BASE + TIMER_CTRL); |
451 | 457 | ||
452 | integrator_clocksource_init(khz); | 458 | integrator_clocksource_init(rate); |
453 | integrator_clockevent_init(khz); | 459 | integrator_clockevent_init(rate); |
454 | } | 460 | } |
455 | 461 | ||
456 | static struct sys_timer ap_timer = { | 462 | static struct sys_timer ap_timer = { |
diff --git a/arch/arm/mach-iop13xx/Makefile.boot b/arch/arm/mach-iop13xx/Makefile.boot index 0b0e19fdfe6c..3a8c38c3189c 100644 --- a/arch/arm/mach-iop13xx/Makefile.boot +++ b/arch/arm/mach-iop13xx/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-iop32x/Makefile.boot b/arch/arm/mach-iop32x/Makefile.boot index 47000dccd61f..0a833b11e38c 100644 --- a/arch/arm/mach-iop32x/Makefile.boot +++ b/arch/arm/mach-iop32x/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0xa0008000 | 1 | zreladdr-y += 0xa0008000 |
2 | params_phys-y := 0xa0000100 | 2 | params_phys-y := 0xa0000100 |
3 | initrd_phys-y := 0xa0800000 | 3 | initrd_phys-y := 0xa0800000 |
diff --git a/arch/arm/mach-iop33x/Makefile.boot b/arch/arm/mach-iop33x/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-iop33x/Makefile.boot +++ b/arch/arm/mach-iop33x/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-ixp2000/Makefile.boot b/arch/arm/mach-ixp2000/Makefile.boot index d84c5807a43d..9c7af91d93da 100644 --- a/arch/arm/mach-ixp2000/Makefile.boot +++ b/arch/arm/mach-ixp2000/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | 3 | ||
diff --git a/arch/arm/mach-ixp23xx/Makefile.boot b/arch/arm/mach-ixp23xx/Makefile.boot index d5561ad15bad..44fb4a717c3f 100644 --- a/arch/arm/mach-ixp23xx/Makefile.boot +++ b/arch/arm/mach-ixp23xx/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
diff --git a/arch/arm/mach-ixp4xx/Makefile.boot b/arch/arm/mach-ixp4xx/Makefile.boot index d84c5807a43d..9c7af91d93da 100644 --- a/arch/arm/mach-ixp4xx/Makefile.boot +++ b/arch/arm/mach-ixp4xx/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | 3 | ||
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 2131832ee6ba..85245e48099c 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
@@ -397,7 +397,8 @@ void __init ixp4xx_pci_preinit(void) | |||
397 | local_write_config(PCI_BASE_ADDRESS_0, 4, PHYS_OFFSET); | 397 | local_write_config(PCI_BASE_ADDRESS_0, 4, PHYS_OFFSET); |
398 | local_write_config(PCI_BASE_ADDRESS_1, 4, PHYS_OFFSET + SZ_16M); | 398 | local_write_config(PCI_BASE_ADDRESS_1, 4, PHYS_OFFSET + SZ_16M); |
399 | local_write_config(PCI_BASE_ADDRESS_2, 4, PHYS_OFFSET + SZ_32M); | 399 | local_write_config(PCI_BASE_ADDRESS_2, 4, PHYS_OFFSET + SZ_32M); |
400 | local_write_config(PCI_BASE_ADDRESS_3, 4, PHYS_OFFSET + SZ_48M); | 400 | local_write_config(PCI_BASE_ADDRESS_3, 4, |
401 | PHYS_OFFSET + SZ_32M + SZ_16M); | ||
401 | 402 | ||
402 | /* | 403 | /* |
403 | * Enable CSR window at 64 MiB to allow PCI masters | 404 | * Enable CSR window at 64 MiB to allow PCI masters |
diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-kirkwood/Makefile.boot +++ b/arch/arm/mach-kirkwood/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-ks8695/Makefile.boot b/arch/arm/mach-ks8695/Makefile.boot index 48eb2cb3ac77..c9b0bebcf237 100644 --- a/arch/arm/mach-ks8695/Makefile.boot +++ b/arch/arm/mach-ks8695/Makefile.boot | |||
@@ -3,6 +3,6 @@ | |||
3 | # PARAMS_PHYS must be within 4MB of ZRELADDR | 3 | # PARAMS_PHYS must be within 4MB of ZRELADDR |
4 | # INITRD_PHYS must be in RAM | 4 | # INITRD_PHYS must be in RAM |
5 | 5 | ||
6 | zreladdr-y := 0x00008000 | 6 | zreladdr-y += 0x00008000 |
7 | params_phys-y := 0x00000100 | 7 | params_phys-y := 0x00000100 |
8 | initrd_phys-y := 0x00800000 | 8 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-lpc32xx/Makefile.boot b/arch/arm/mach-lpc32xx/Makefile.boot index b796b41ebf8f..2cfe0ee635c5 100644 --- a/arch/arm/mach-lpc32xx/Makefile.boot +++ b/arch/arm/mach-lpc32xx/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x80008000 | 1 | zreladdr-y += 0x80008000 |
2 | params_phys-y := 0x80000100 | 2 | params_phys-y := 0x80000100 |
3 | initrd_phys-y := 0x82000000 | 3 | initrd_phys-y := 0x82000000 |
4 | 4 | ||
diff --git a/arch/arm/mach-mmp/Makefile.boot b/arch/arm/mach-mmp/Makefile.boot index 574a4aa8321a..5edf03e2beed 100644 --- a/arch/arm/mach-mmp/Makefile.boot +++ b/arch/arm/mach-mmp/Makefile.boot | |||
@@ -1 +1 @@ | |||
zreladdr-y := 0x00008000 | zreladdr-y += 0x00008000 | ||
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index 06b5fa853c93..49c5d6d843d6 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c | |||
@@ -160,7 +160,7 @@ static struct mtd_partition aspenite_nand_partitions[] = { | |||
160 | }, { | 160 | }, { |
161 | .name = "filesystem", | 161 | .name = "filesystem", |
162 | .offset = MTDPART_OFS_APPEND, | 162 | .offset = MTDPART_OFS_APPEND, |
163 | .size = SZ_48M, | 163 | .size = SZ_32M + SZ_16M, |
164 | .mask_flags = 0, | 164 | .mask_flags = 0, |
165 | } | 165 | } |
166 | }; | 166 | }; |
diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c index 6bd37a27e5fc..176515a76989 100644 --- a/arch/arm/mach-mmp/ttc_dkb.c +++ b/arch/arm/mach-mmp/ttc_dkb.c | |||
@@ -93,7 +93,7 @@ static struct mtd_partition ttc_dkb_onenand_partitions[] = { | |||
93 | }, { | 93 | }, { |
94 | .name = "filesystem", | 94 | .name = "filesystem", |
95 | .offset = MTDPART_OFS_APPEND, | 95 | .offset = MTDPART_OFS_APPEND, |
96 | .size = SZ_48M, | 96 | .size = SZ_32M + SZ_16M, |
97 | .mask_flags = 0, | 97 | .mask_flags = 0, |
98 | } | 98 | } |
99 | }; | 99 | }; |
diff --git a/arch/arm/mach-msm/Makefile.boot b/arch/arm/mach-msm/Makefile.boot index 24dfbf8c07c4..9b803a578b4d 100644 --- a/arch/arm/mach-msm/Makefile.boot +++ b/arch/arm/mach-msm/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x10008000 | 1 | zreladdr-y += 0x10008000 |
2 | params_phys-y := 0x10000100 | 2 | params_phys-y := 0x10000100 |
3 | initrd_phys-y := 0x10800000 | 3 | initrd_phys-y := 0x10800000 |
diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c index 18a3c97bc863..f81ef1f9d46f 100644 --- a/arch/arm/mach-msm/board-halibut.c +++ b/arch/arm/mach-msm/board-halibut.c | |||
@@ -78,8 +78,8 @@ static void __init halibut_init(void) | |||
78 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 78 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
79 | } | 79 | } |
80 | 80 | ||
81 | static void __init halibut_fixup(struct machine_desc *desc, struct tag *tags, | 81 | static void __init halibut_fixup(struct tag *tags, char **cmdline, |
82 | char **cmdline, struct meminfo *mi) | 82 | struct meminfo *mi) |
83 | { | 83 | { |
84 | mi->nr_banks=1; | 84 | mi->nr_banks=1; |
85 | mi->bank[0].start = PHYS_OFFSET; | 85 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-msm/board-mahimahi.c b/arch/arm/mach-msm/board-mahimahi.c index 7a9a03eb189c..1df15aa3c66d 100644 --- a/arch/arm/mach-msm/board-mahimahi.c +++ b/arch/arm/mach-msm/board-mahimahi.c | |||
@@ -53,8 +53,8 @@ static void __init mahimahi_init(void) | |||
53 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 53 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
54 | } | 54 | } |
55 | 55 | ||
56 | static void __init mahimahi_fixup(struct machine_desc *desc, struct tag *tags, | 56 | static void __init mahimahi_fixup(struct tag *tags, char **cmdline, |
57 | char **cmdline, struct meminfo *mi) | 57 | struct meminfo *mi) |
58 | { | 58 | { |
59 | mi->nr_banks = 2; | 59 | mi->nr_banks = 2; |
60 | mi->bank[0].start = PHYS_OFFSET; | 60 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-msm/board-sapphire.c b/arch/arm/mach-msm/board-sapphire.c index 68f930f07d77..c6e043c896aa 100644 --- a/arch/arm/mach-msm/board-sapphire.c +++ b/arch/arm/mach-msm/board-sapphire.c | |||
@@ -77,8 +77,8 @@ static struct map_desc sapphire_io_desc[] __initdata = { | |||
77 | } | 77 | } |
78 | }; | 78 | }; |
79 | 79 | ||
80 | static void __init sapphire_fixup(struct machine_desc *desc, struct tag *tags, | 80 | static void __init sapphire_fixup(struct tag *tags, char **cmdline, |
81 | char **cmdline, struct meminfo *mi) | 81 | struct meminfo *mi) |
82 | { | 82 | { |
83 | int smi_sz = parse_tag_smi((const struct tag *)tags); | 83 | int smi_sz = parse_tag_smi((const struct tag *)tags); |
84 | 84 | ||
diff --git a/arch/arm/mach-msm/board-trout.c b/arch/arm/mach-msm/board-trout.c index 814386772c66..7acd2021ada9 100644 --- a/arch/arm/mach-msm/board-trout.c +++ b/arch/arm/mach-msm/board-trout.c | |||
@@ -48,8 +48,8 @@ static void __init trout_init_irq(void) | |||
48 | msm_init_irq(); | 48 | msm_init_irq(); |
49 | } | 49 | } |
50 | 50 | ||
51 | static void __init trout_fixup(struct machine_desc *desc, struct tag *tags, | 51 | static void __init trout_fixup(struct tag *tags, char **cmdline, |
52 | char **cmdline, struct meminfo *mi) | 52 | struct meminfo *mi) |
53 | { | 53 | { |
54 | mi->nr_banks = 1; | 54 | mi->nr_banks = 1; |
55 | mi->bank[0].start = PHYS_OFFSET; | 55 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-mv78xx0/Makefile.boot b/arch/arm/mach-mv78xx0/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-mv78xx0/Makefile.boot +++ b/arch/arm/mach-mv78xx0/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-mx5/Makefile.boot b/arch/arm/mach-mx5/Makefile.boot index e928be1b6757..ca207ca305ec 100644 --- a/arch/arm/mach-mx5/Makefile.boot +++ b/arch/arm/mach-mx5/Makefile.boot | |||
@@ -1,9 +1,9 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_MX50) := 0x70008000 | 1 | zreladdr-$(CONFIG_ARCH_MX50) += 0x70008000 |
2 | params_phys-$(CONFIG_ARCH_MX50) := 0x70000100 | 2 | params_phys-$(CONFIG_ARCH_MX50) := 0x70000100 |
3 | initrd_phys-$(CONFIG_ARCH_MX50) := 0x70800000 | 3 | initrd_phys-$(CONFIG_ARCH_MX50) := 0x70800000 |
4 | zreladdr-$(CONFIG_ARCH_MX51) := 0x90008000 | 4 | zreladdr-$(CONFIG_ARCH_MX51) += 0x90008000 |
5 | params_phys-$(CONFIG_ARCH_MX51) := 0x90000100 | 5 | params_phys-$(CONFIG_ARCH_MX51) := 0x90000100 |
6 | initrd_phys-$(CONFIG_ARCH_MX51) := 0x90800000 | 6 | initrd_phys-$(CONFIG_ARCH_MX51) := 0x90800000 |
7 | zreladdr-$(CONFIG_ARCH_MX53) := 0x70008000 | 7 | zreladdr-$(CONFIG_ARCH_MX53) += 0x70008000 |
8 | params_phys-$(CONFIG_ARCH_MX53) := 0x70000100 | 8 | params_phys-$(CONFIG_ARCH_MX53) := 0x70000100 |
9 | initrd_phys-$(CONFIG_ARCH_MX53) := 0x70800000 | 9 | initrd_phys-$(CONFIG_ARCH_MX53) := 0x70800000 |
diff --git a/arch/arm/mach-mxs/Makefile.boot b/arch/arm/mach-mxs/Makefile.boot index eb541e0291da..07b11fe6453f 100644 --- a/arch/arm/mach-mxs/Makefile.boot +++ b/arch/arm/mach-mxs/Makefile.boot | |||
@@ -1 +1 @@ | |||
zreladdr-y := 0x40008000 | zreladdr-y += 0x40008000 | ||
diff --git a/arch/arm/mach-netx/Makefile.boot b/arch/arm/mach-netx/Makefile.boot index b81cf6aff0ac..534a4d27055e 100644 --- a/arch/arm/mach-netx/Makefile.boot +++ b/arch/arm/mach-netx/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x80008000 | 1 | zreladdr-y += 0x80008000 |
2 | 2 | ||
diff --git a/arch/arm/mach-nomadik/Makefile.boot b/arch/arm/mach-nomadik/Makefile.boot index c7e75acfe6c9..ff0a4b5b0a82 100644 --- a/arch/arm/mach-nomadik/Makefile.boot +++ b/arch/arm/mach-nomadik/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-nuc93x/Makefile.boot b/arch/arm/mach-nuc93x/Makefile.boot index a057b546b6e5..6c3d421c2d11 100644 --- a/arch/arm/mach-nuc93x/Makefile.boot +++ b/arch/arm/mach-nuc93x/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | 3 | ||
diff --git a/arch/arm/mach-omap1/Makefile.boot b/arch/arm/mach-omap1/Makefile.boot index 292d56c5a888..13bda8dbd604 100644 --- a/arch/arm/mach-omap1/Makefile.boot +++ b/arch/arm/mach-omap1/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x10008000 | 1 | zreladdr-y += 0x10008000 |
2 | params_phys-y := 0x10000100 | 2 | params_phys-y := 0x10000100 |
3 | initrd_phys-y := 0x10800000 | 3 | initrd_phys-y := 0x10800000 |
diff --git a/arch/arm/mach-omap2/Makefile.boot b/arch/arm/mach-omap2/Makefile.boot index 565aff7f37a9..b03e562acc60 100644 --- a/arch/arm/mach-omap2/Makefile.boot +++ b/arch/arm/mach-omap2/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x80008000 | 1 | zreladdr-y += 0x80008000 |
2 | params_phys-y := 0x80000100 | 2 | params_phys-y := 0x80000100 |
3 | initrd_phys-y := 0x80800000 | 3 | initrd_phys-y := 0x80800000 |
diff --git a/arch/arm/mach-orion5x/Makefile.boot b/arch/arm/mach-orion5x/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-orion5x/Makefile.boot +++ b/arch/arm/mach-orion5x/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 0ab531d047fc..22ace0bf2f92 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -308,8 +308,8 @@ void __init orion5x_init(void) | |||
308 | * Many orion-based systems have buggy bootloader implementations. | 308 | * Many orion-based systems have buggy bootloader implementations. |
309 | * This is a common fixup for bogus memory tags. | 309 | * This is a common fixup for bogus memory tags. |
310 | */ | 310 | */ |
311 | void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t, | 311 | void __init tag_fixup_mem32(struct tag *t, char **from, |
312 | char **from, struct meminfo *meminfo) | 312 | struct meminfo *meminfo) |
313 | { | 313 | { |
314 | for (; t->hdr.size; t = tag_next(t)) | 314 | for (; t->hdr.size; t = tag_next(t)) |
315 | if (t->hdr.tag == ATAG_MEM && | 315 | if (t->hdr.tag == ATAG_MEM && |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index 3e5499dda49a..909489f4d23e 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -53,11 +53,9 @@ int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); | |||
53 | struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys); | 53 | struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys); |
54 | int orion5x_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); | 54 | int orion5x_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin); |
55 | 55 | ||
56 | struct machine_desc; | ||
57 | struct meminfo; | 56 | struct meminfo; |
58 | struct tag; | 57 | struct tag; |
59 | extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *, | 58 | extern void __init tag_fixup_mem32(struct tag *, char **, struct meminfo *); |
60 | char **, struct meminfo *); | ||
61 | 59 | ||
62 | 60 | ||
63 | #endif | 61 | #endif |
diff --git a/arch/arm/mach-pnx4008/Makefile.boot b/arch/arm/mach-pnx4008/Makefile.boot index 44c7117e20dd..9fa19baa7f2e 100644 --- a/arch/arm/mach-pnx4008/Makefile.boot +++ b/arch/arm/mach-pnx4008/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x80008000 | 1 | zreladdr-y += 0x80008000 |
2 | params_phys-y := 0x80000100 | 2 | params_phys-y := 0x80000100 |
3 | initrd_phys-y := 0x80800000 | 3 | initrd_phys-y := 0x80800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-prima2/Makefile.boot b/arch/arm/mach-prima2/Makefile.boot index d023db3ae4ff..c77a4883a4ee 100644 --- a/arch/arm/mach-prima2/Makefile.boot +++ b/arch/arm/mach-prima2/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-pxa/Makefile.boot b/arch/arm/mach-pxa/Makefile.boot index 1ead67178eca..2c1ae92f2106 100644 --- a/arch/arm/mach-pxa/Makefile.boot +++ b/arch/arm/mach-pxa/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0xa0008000 | 1 | zreladdr-y += 0xa0008000 |
2 | 2 | ||
diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c index b6a51340270b..d940e8a72270 100644 --- a/arch/arm/mach-pxa/cm-x300.c +++ b/arch/arm/mach-pxa/cm-x300.c | |||
@@ -839,8 +839,8 @@ static void __init cm_x300_init(void) | |||
839 | cm_x300_init_bl(); | 839 | cm_x300_init_bl(); |
840 | } | 840 | } |
841 | 841 | ||
842 | static void __init cm_x300_fixup(struct machine_desc *mdesc, struct tag *tags, | 842 | static void __init cm_x300_fixup(struct tag *tags, char **cmdline, |
843 | char **cmdline, struct meminfo *mi) | 843 | struct meminfo *mi) |
844 | { | 844 | { |
845 | /* Make sure that mi->bank[0].start = PHYS_ADDR */ | 845 | /* Make sure that mi->bank[0].start = PHYS_ADDR */ |
846 | for (; tags->hdr.size; tags = tag_next(tags)) | 846 | for (; tags->hdr.size; tags = tag_next(tags)) |
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 185a37cad254..3e9483b06053 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -705,8 +705,8 @@ static void __init corgi_init(void) | |||
705 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 705 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
706 | } | 706 | } |
707 | 707 | ||
708 | static void __init fixup_corgi(struct machine_desc *desc, | 708 | static void __init fixup_corgi(struct tag *tags, char **cmdline, |
709 | struct tag *tags, char **cmdline, struct meminfo *mi) | 709 | struct meminfo *mi) |
710 | { | 710 | { |
711 | sharpsl_save_param(); | 711 | sharpsl_save_param(); |
712 | mi->nr_banks=1; | 712 | mi->nr_banks=1; |
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index b4599ec9d619..e4a1f4dc89ff 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -41,8 +41,7 @@ | |||
41 | #include "clock.h" | 41 | #include "clock.h" |
42 | 42 | ||
43 | /* Only e800 has 128MB RAM */ | 43 | /* Only e800 has 128MB RAM */ |
44 | void __init eseries_fixup(struct machine_desc *desc, | 44 | void __init eseries_fixup(struct tag *tags, char **cmdline, struct meminfo *mi) |
45 | struct tag *tags, char **cmdline, struct meminfo *mi) | ||
46 | { | 45 | { |
47 | mi->nr_banks=1; | 46 | mi->nr_banks=1; |
48 | mi->bank[0].start = 0xa0000000; | 47 | mi->bank[0].start = 0xa0000000; |
diff --git a/arch/arm/mach-pxa/eseries.h b/arch/arm/mach-pxa/eseries.h index 5930f5e2a123..be921965e91a 100644 --- a/arch/arm/mach-pxa/eseries.h +++ b/arch/arm/mach-pxa/eseries.h | |||
@@ -1,5 +1,4 @@ | |||
1 | void __init eseries_fixup(struct machine_desc *desc, | 1 | void __init eseries_fixup(struct tag *tags, char **cmdline, struct meminfo *mi); |
2 | struct tag *tags, char **cmdline, struct meminfo *mi); | ||
3 | 2 | ||
4 | extern struct pxa2xx_udc_mach_info e7xx_udc_mach_info; | 3 | extern struct pxa2xx_udc_mach_info e7xx_udc_mach_info; |
5 | extern struct pxaficp_platform_data e7xx_ficp_platform_data; | 4 | extern struct pxaficp_platform_data e7xx_ficp_platform_data; |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index a113ea9ab4ab..948ce3e729fa 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -454,8 +454,8 @@ static void __init poodle_init(void) | |||
454 | poodle_init_spi(); | 454 | poodle_init_spi(); |
455 | } | 455 | } |
456 | 456 | ||
457 | static void __init fixup_poodle(struct machine_desc *desc, | 457 | static void __init fixup_poodle(struct tag *tags, char **cmdline, |
458 | struct tag *tags, char **cmdline, struct meminfo *mi) | 458 | struct meminfo *mi) |
459 | { | 459 | { |
460 | sharpsl_save_param(); | 460 | sharpsl_save_param(); |
461 | mi->nr_banks=1; | 461 | mi->nr_banks=1; |
diff --git a/arch/arm/mach-pxa/saar.c b/arch/arm/mach-pxa/saar.c index df4356e8acae..72001ec6e7b5 100644 --- a/arch/arm/mach-pxa/saar.c +++ b/arch/arm/mach-pxa/saar.c | |||
@@ -540,7 +540,7 @@ static struct mtd_partition saar_onenand_partitions[] = { | |||
540 | }, { | 540 | }, { |
541 | .name = "filesystem", | 541 | .name = "filesystem", |
542 | .offset = MTDPART_OFS_APPEND, | 542 | .offset = MTDPART_OFS_APPEND, |
543 | .size = SZ_48M, | 543 | .size = SZ_32M + SZ_16M, |
544 | .mask_flags = 0, | 544 | .mask_flags = 0, |
545 | } | 545 | } |
546 | }; | 546 | }; |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 438c7b5e451f..d8dec9113aad 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -970,8 +970,8 @@ static void __init spitz_init(void) | |||
970 | spitz_i2c_init(); | 970 | spitz_i2c_init(); |
971 | } | 971 | } |
972 | 972 | ||
973 | static void __init spitz_fixup(struct machine_desc *desc, | 973 | static void __init spitz_fixup(struct tag *tags, char **cmdline, |
974 | struct tag *tags, char **cmdline, struct meminfo *mi) | 974 | struct meminfo *mi) |
975 | { | 975 | { |
976 | sharpsl_save_param(); | 976 | sharpsl_save_param(); |
977 | mi->nr_banks = 1; | 977 | mi->nr_banks = 1; |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 9f69a2682693..402b0c96613b 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -960,8 +960,8 @@ static void __init tosa_init(void) | |||
960 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 960 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
961 | } | 961 | } |
962 | 962 | ||
963 | static void __init fixup_tosa(struct machine_desc *desc, | 963 | static void __init fixup_tosa(struct tag *tags, char **cmdline, |
964 | struct tag *tags, char **cmdline, struct meminfo *mi) | 964 | struct meminfo *mi) |
965 | { | 965 | { |
966 | sharpsl_save_param(); | 966 | sharpsl_save_param(); |
967 | mi->nr_banks=1; | 967 | mi->nr_banks=1; |
diff --git a/arch/arm/mach-realview/Makefile.boot b/arch/arm/mach-realview/Makefile.boot index d97e003d3df4..d2c3d788f688 100644 --- a/arch/arm/mach-realview/Makefile.boot +++ b/arch/arm/mach-realview/Makefile.boot | |||
@@ -1,9 +1,9 @@ | |||
1 | ifeq ($(CONFIG_REALVIEW_HIGH_PHYS_OFFSET),y) | 1 | ifeq ($(CONFIG_REALVIEW_HIGH_PHYS_OFFSET),y) |
2 | zreladdr-y := 0x70008000 | 2 | zreladdr-y += 0x70008000 |
3 | params_phys-y := 0x70000100 | 3 | params_phys-y := 0x70000100 |
4 | initrd_phys-y := 0x70800000 | 4 | initrd_phys-y := 0x70800000 |
5 | else | 5 | else |
6 | zreladdr-y := 0x00008000 | 6 | zreladdr-y += 0x00008000 |
7 | params_phys-y := 0x00000100 | 7 | params_phys-y := 0x00000100 |
8 | initrd_phys-y := 0x00800000 | 8 | initrd_phys-y := 0x00800000 |
9 | endif | 9 | endif |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 5c23450d2d1d..d5ed5d4f77d6 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
@@ -517,8 +517,7 @@ void __init realview_timer_init(unsigned int timer_irq) | |||
517 | /* | 517 | /* |
518 | * Setup the memory banks. | 518 | * Setup the memory banks. |
519 | */ | 519 | */ |
520 | void realview_fixup(struct machine_desc *mdesc, struct tag *tags, char **from, | 520 | void realview_fixup(struct tag *tags, char **from, struct meminfo *meminfo) |
521 | struct meminfo *meminfo) | ||
522 | { | 521 | { |
523 | /* | 522 | /* |
524 | * Most RealView platforms have 512MB contiguous RAM at 0x70000000. | 523 | * Most RealView platforms have 512MB contiguous RAM at 0x70000000. |
diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h index 5c83d1e87a03..47259c89a75e 100644 --- a/arch/arm/mach-realview/core.h +++ b/arch/arm/mach-realview/core.h | |||
@@ -63,8 +63,8 @@ extern int realview_flash_register(struct resource *res, u32 num); | |||
63 | extern int realview_eth_register(const char *name, struct resource *res); | 63 | extern int realview_eth_register(const char *name, struct resource *res); |
64 | extern int realview_usb_register(struct resource *res); | 64 | extern int realview_usb_register(struct resource *res); |
65 | extern void realview_init_early(void); | 65 | extern void realview_init_early(void); |
66 | extern void realview_fixup(struct machine_desc *mdesc, struct tag *tags, | 66 | extern void realview_fixup(struct tag *tags, char **from, |
67 | char **from, struct meminfo *meminfo); | 67 | struct meminfo *meminfo); |
68 | extern void (*realview_reset)(char); | 68 | extern void (*realview_reset)(char); |
69 | 69 | ||
70 | #endif | 70 | #endif |
diff --git a/arch/arm/mach-realview/include/mach/board-pb1176.h b/arch/arm/mach-realview/include/mach/board-pb1176.h index 002ab5d8c11c..2a15fef94730 100644 --- a/arch/arm/mach-realview/include/mach/board-pb1176.h +++ b/arch/arm/mach-realview/include/mach/board-pb1176.h | |||
@@ -70,6 +70,7 @@ | |||
70 | 70 | ||
71 | #define REALVIEW_DC1176_GIC_CPU_BASE 0x10120000 /* GIC CPU interface, on devchip */ | 71 | #define REALVIEW_DC1176_GIC_CPU_BASE 0x10120000 /* GIC CPU interface, on devchip */ |
72 | #define REALVIEW_DC1176_GIC_DIST_BASE 0x10121000 /* GIC distributor, on devchip */ | 72 | #define REALVIEW_DC1176_GIC_DIST_BASE 0x10121000 /* GIC distributor, on devchip */ |
73 | #define REALVIEW_DC1176_ROM_BASE 0x10200000 /* 16KiB NRAM preudo-ROM, on devchip */ | ||
73 | #define REALVIEW_PB1176_GIC_CPU_BASE 0x10040000 /* GIC CPU interface, on FPGA */ | 74 | #define REALVIEW_PB1176_GIC_CPU_BASE 0x10040000 /* GIC CPU interface, on FPGA */ |
74 | #define REALVIEW_PB1176_GIC_DIST_BASE 0x10041000 /* GIC distributor, on FPGA */ | 75 | #define REALVIEW_PB1176_GIC_DIST_BASE 0x10041000 /* GIC distributor, on FPGA */ |
75 | #define REALVIEW_PB1176_L220_BASE 0x10110000 /* L220 registers */ | 76 | #define REALVIEW_PB1176_L220_BASE 0x10110000 /* L220 registers */ |
diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index ad5671acb66a..865d440fcf58 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c | |||
@@ -26,6 +26,8 @@ | |||
26 | #include <linux/amba/pl061.h> | 26 | #include <linux/amba/pl061.h> |
27 | #include <linux/amba/mmci.h> | 27 | #include <linux/amba/mmci.h> |
28 | #include <linux/amba/pl022.h> | 28 | #include <linux/amba/pl022.h> |
29 | #include <linux/mtd/physmap.h> | ||
30 | #include <linux/mtd/partitions.h> | ||
29 | #include <linux/io.h> | 31 | #include <linux/io.h> |
30 | 32 | ||
31 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
@@ -204,22 +206,48 @@ static struct amba_device *amba_devs[] __initdata = { | |||
204 | * RealView PB1176 platform devices | 206 | * RealView PB1176 platform devices |
205 | */ | 207 | */ |
206 | static struct resource realview_pb1176_flash_resources[] = { | 208 | static struct resource realview_pb1176_flash_resources[] = { |
207 | [0] = { | 209 | { |
208 | .start = REALVIEW_PB1176_FLASH_BASE, | 210 | .start = REALVIEW_PB1176_FLASH_BASE, |
209 | .end = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1, | 211 | .end = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1, |
210 | .flags = IORESOURCE_MEM, | 212 | .flags = IORESOURCE_MEM, |
211 | }, | 213 | }, |
212 | [1] = { | 214 | #ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH |
215 | { | ||
213 | .start = REALVIEW_PB1176_SEC_FLASH_BASE, | 216 | .start = REALVIEW_PB1176_SEC_FLASH_BASE, |
214 | .end = REALVIEW_PB1176_SEC_FLASH_BASE + REALVIEW_PB1176_SEC_FLASH_SIZE - 1, | 217 | .end = REALVIEW_PB1176_SEC_FLASH_BASE + REALVIEW_PB1176_SEC_FLASH_SIZE - 1, |
215 | .flags = IORESOURCE_MEM, | 218 | .flags = IORESOURCE_MEM, |
216 | }, | 219 | }, |
217 | }; | ||
218 | #ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH | ||
219 | #define PB1176_FLASH_BLOCKS 2 | ||
220 | #else | ||
221 | #define PB1176_FLASH_BLOCKS 1 | ||
222 | #endif | 220 | #endif |
221 | }; | ||
222 | |||
223 | static struct physmap_flash_data pb1176_rom_pdata = { | ||
224 | .probe_type = "map_rom", | ||
225 | .width = 4, | ||
226 | .nr_parts = 0, | ||
227 | }; | ||
228 | |||
229 | static struct resource pb1176_rom_resources[] = { | ||
230 | /* | ||
231 | * This exposes the PB1176 DevChip ROM as an MTD ROM mapping. | ||
232 | * The reference manual states that this is actually a pseudo-ROM | ||
233 | * programmed in NVRAM. | ||
234 | */ | ||
235 | { | ||
236 | .start = REALVIEW_DC1176_ROM_BASE, | ||
237 | .end = REALVIEW_DC1176_ROM_BASE + SZ_16K - 1, | ||
238 | .flags = IORESOURCE_MEM, | ||
239 | } | ||
240 | }; | ||
241 | |||
242 | static struct platform_device pb1176_rom_device = { | ||
243 | .name = "physmap-flash", | ||
244 | .id = -1, | ||
245 | .num_resources = ARRAY_SIZE(pb1176_rom_resources), | ||
246 | .resource = pb1176_rom_resources, | ||
247 | .dev = { | ||
248 | .platform_data = &pb1176_rom_pdata, | ||
249 | }, | ||
250 | }; | ||
223 | 251 | ||
224 | static struct resource realview_pb1176_smsc911x_resources[] = { | 252 | static struct resource realview_pb1176_smsc911x_resources[] = { |
225 | [0] = { | 253 | [0] = { |
@@ -316,8 +344,7 @@ static void realview_pb1176_reset(char mode) | |||
316 | __raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl); | 344 | __raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl); |
317 | } | 345 | } |
318 | 346 | ||
319 | static void realview_pb1176_fixup(struct machine_desc *mdesc, | 347 | static void realview_pb1176_fixup(struct tag *tags, char **from, |
320 | struct tag *tags, char **from, | ||
321 | struct meminfo *meminfo) | 348 | struct meminfo *meminfo) |
322 | { | 349 | { |
323 | /* | 350 | /* |
@@ -338,7 +365,8 @@ static void __init realview_pb1176_init(void) | |||
338 | #endif | 365 | #endif |
339 | 366 | ||
340 | realview_flash_register(realview_pb1176_flash_resources, | 367 | realview_flash_register(realview_pb1176_flash_resources, |
341 | PB1176_FLASH_BLOCKS); | 368 | ARRAY_SIZE(realview_pb1176_flash_resources)); |
369 | platform_device_register(&pb1176_rom_device); | ||
342 | realview_eth_register(NULL, realview_pb1176_smsc911x_resources); | 370 | realview_eth_register(NULL, realview_pb1176_smsc911x_resources); |
343 | platform_device_register(&realview_i2c_device); | 371 | platform_device_register(&realview_i2c_device); |
344 | realview_usb_register(realview_pb1176_isp1761_resources); | 372 | realview_usb_register(realview_pb1176_isp1761_resources); |
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index 363b0ab56150..3e1eb2eb8132 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
@@ -319,8 +319,8 @@ static struct sys_timer realview_pbx_timer = { | |||
319 | .init = realview_pbx_timer_init, | 319 | .init = realview_pbx_timer_init, |
320 | }; | 320 | }; |
321 | 321 | ||
322 | static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags, | 322 | static void realview_pbx_fixup(struct tag *tags, char **from, |
323 | char **from, struct meminfo *meminfo) | 323 | struct meminfo *meminfo) |
324 | { | 324 | { |
325 | #ifdef CONFIG_SPARSEMEM | 325 | #ifdef CONFIG_SPARSEMEM |
326 | /* | 326 | /* |
@@ -335,7 +335,7 @@ static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags, | |||
335 | meminfo->bank[2].size = SZ_256M; | 335 | meminfo->bank[2].size = SZ_256M; |
336 | meminfo->nr_banks = 3; | 336 | meminfo->nr_banks = 3; |
337 | #else | 337 | #else |
338 | realview_fixup(mdesc, tags, from, meminfo); | 338 | realview_fixup(tags, from, meminfo); |
339 | #endif | 339 | #endif |
340 | } | 340 | } |
341 | 341 | ||
diff --git a/arch/arm/mach-rpc/Makefile.boot b/arch/arm/mach-rpc/Makefile.boot index 9c9e7685ec7c..ae2df0d7d037 100644 --- a/arch/arm/mach-rpc/Makefile.boot +++ b/arch/arm/mach-rpc/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x10008000 | 1 | zreladdr-y += 0x10008000 |
2 | params_phys-y := 0x10000100 | 2 | params_phys-y := 0x10000100 |
3 | initrd_phys-y := 0x18000000 | 3 | initrd_phys-y := 0x18000000 |
4 | 4 | ||
diff --git a/arch/arm/mach-s3c2410/Makefile.boot b/arch/arm/mach-s3c2410/Makefile.boot index 58c1dd7f8e1d..4457605ba04a 100644 --- a/arch/arm/mach-s3c2410/Makefile.boot +++ b/arch/arm/mach-s3c2410/Makefile.boot | |||
@@ -1,7 +1,7 @@ | |||
1 | ifeq ($(CONFIG_PM_H1940),y) | 1 | ifeq ($(CONFIG_PM_H1940),y) |
2 | zreladdr-y := 0x30108000 | 2 | zreladdr-y += 0x30108000 |
3 | params_phys-y := 0x30100100 | 3 | params_phys-y := 0x30100100 |
4 | else | 4 | else |
5 | zreladdr-y := 0x30008000 | 5 | zreladdr-y += 0x30008000 |
6 | params_phys-y := 0x30000100 | 6 | params_phys-y := 0x30000100 |
7 | endif | 7 | endif |
diff --git a/arch/arm/mach-s3c2412/mach-smdk2413.c b/arch/arm/mach-s3c2412/mach-smdk2413.c index 834cfb61bcfe..3391713e0c92 100644 --- a/arch/arm/mach-s3c2412/mach-smdk2413.c +++ b/arch/arm/mach-s3c2412/mach-smdk2413.c | |||
@@ -92,8 +92,7 @@ static struct platform_device *smdk2413_devices[] __initdata = { | |||
92 | &s3c_device_usbgadget, | 92 | &s3c_device_usbgadget, |
93 | }; | 93 | }; |
94 | 94 | ||
95 | static void __init smdk2413_fixup(struct machine_desc *desc, | 95 | static void __init smdk2413_fixup(struct tag *tags, char **cmdline, |
96 | struct tag *tags, char **cmdline, | ||
97 | struct meminfo *mi) | 96 | struct meminfo *mi) |
98 | { | 97 | { |
99 | if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) { | 98 | if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) { |
diff --git a/arch/arm/mach-s3c2412/mach-vstms.c b/arch/arm/mach-s3c2412/mach-vstms.c index 83544ebe20ac..b6ed4573553a 100644 --- a/arch/arm/mach-s3c2412/mach-vstms.c +++ b/arch/arm/mach-s3c2412/mach-vstms.c | |||
@@ -129,9 +129,8 @@ static struct platform_device *vstms_devices[] __initdata = { | |||
129 | &s3c_device_nand, | 129 | &s3c_device_nand, |
130 | }; | 130 | }; |
131 | 131 | ||
132 | static void __init vstms_fixup(struct machine_desc *desc, | 132 | static void __init vstms_fixup(struct tag *tags, char **cmdline, |
133 | struct tag *tags, char **cmdline, | 133 | struct meminfo *mi) |
134 | struct meminfo *mi) | ||
135 | { | 134 | { |
136 | if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) { | 135 | if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) { |
137 | mi->nr_banks=1; | 136 | mi->nr_banks=1; |
diff --git a/arch/arm/mach-s3c64xx/Makefile.boot b/arch/arm/mach-s3c64xx/Makefile.boot index ba41fdc0a586..c642333af3ed 100644 --- a/arch/arm/mach-s3c64xx/Makefile.boot +++ b/arch/arm/mach-s3c64xx/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x50008000 | 1 | zreladdr-y += 0x50008000 |
2 | params_phys-y := 0x50000100 | 2 | params_phys-y := 0x50000100 |
diff --git a/arch/arm/mach-s5p64x0/Makefile.boot b/arch/arm/mach-s5p64x0/Makefile.boot index ff90aa13bd67..79ece4055b02 100644 --- a/arch/arm/mach-s5p64x0/Makefile.boot +++ b/arch/arm/mach-s5p64x0/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x20008000 | 1 | zreladdr-y += 0x20008000 |
2 | params_phys-y := 0x20000100 | 2 | params_phys-y := 0x20000100 |
diff --git a/arch/arm/mach-s5pc100/Makefile.boot b/arch/arm/mach-s5pc100/Makefile.boot index ff90aa13bd67..79ece4055b02 100644 --- a/arch/arm/mach-s5pc100/Makefile.boot +++ b/arch/arm/mach-s5pc100/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x20008000 | 1 | zreladdr-y += 0x20008000 |
2 | params_phys-y := 0x20000100 | 2 | params_phys-y := 0x20000100 |
diff --git a/arch/arm/mach-s5pv210/Makefile.boot b/arch/arm/mach-s5pv210/Makefile.boot index ff90aa13bd67..79ece4055b02 100644 --- a/arch/arm/mach-s5pv210/Makefile.boot +++ b/arch/arm/mach-s5pv210/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x20008000 | 1 | zreladdr-y += 0x20008000 |
2 | params_phys-y := 0x20000100 | 2 | params_phys-y := 0x20000100 |
diff --git a/arch/arm/mach-sa1100/Makefile b/arch/arm/mach-sa1100/Makefile index 41252d22e659..00631787e80a 100644 --- a/arch/arm/mach-sa1100/Makefile +++ b/arch/arm/mach-sa1100/Makefile | |||
@@ -45,7 +45,6 @@ obj-$(CONFIG_SA1100_PLEB) += pleb.o | |||
45 | obj-$(CONFIG_SA1100_SHANNON) += shannon.o | 45 | obj-$(CONFIG_SA1100_SHANNON) += shannon.o |
46 | 46 | ||
47 | obj-$(CONFIG_SA1100_SIMPAD) += simpad.o | 47 | obj-$(CONFIG_SA1100_SIMPAD) += simpad.o |
48 | led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o | ||
49 | 48 | ||
50 | # LEDs support | 49 | # LEDs support |
51 | obj-$(CONFIG_LEDS) += $(led-y) | 50 | obj-$(CONFIG_LEDS) += $(led-y) |
diff --git a/arch/arm/mach-sa1100/Makefile.boot b/arch/arm/mach-sa1100/Makefile.boot index a56ad0417cf2..5a616f6e5612 100644 --- a/arch/arm/mach-sa1100/Makefile.boot +++ b/arch/arm/mach-sa1100/Makefile.boot | |||
@@ -1,6 +1,7 @@ | |||
1 | zreladdr-y := 0xc0008000 | ||
2 | ifeq ($(CONFIG_ARCH_SA1100),y) | 1 | ifeq ($(CONFIG_ARCH_SA1100),y) |
3 | zreladdr-$(CONFIG_SA1111) := 0xc0208000 | 2 | zreladdr-$(CONFIG_SA1111) += 0xc0208000 |
3 | else | ||
4 | zreladdr-y += 0xc0008000 | ||
4 | endif | 5 | endif |
5 | params_phys-y := 0xc0000100 | 6 | params_phys-y := 0xc0000100 |
6 | initrd_phys-y := 0xc0800000 | 7 | initrd_phys-y := 0xc0800000 |
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index 26257df19b63..6290ce28b883 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c | |||
@@ -301,8 +301,7 @@ static void __init get_assabet_scr(void) | |||
301 | } | 301 | } |
302 | 302 | ||
303 | static void __init | 303 | static void __init |
304 | fixup_assabet(struct machine_desc *desc, struct tag *tags, | 304 | fixup_assabet(struct tag *tags, char **cmdline, struct meminfo *mi) |
305 | char **cmdline, struct meminfo *mi) | ||
306 | { | 305 | { |
307 | /* This must be done before any call to machine_has_neponset() */ | 306 | /* This must be done before any call to machine_has_neponset() */ |
308 | map_sa1100_gpio_regs(); | 307 | map_sa1100_gpio_regs(); |
diff --git a/arch/arm/mach-sa1100/include/mach/simpad.h b/arch/arm/mach-sa1100/include/mach/simpad.h index 9296c4513ce1..db28118103eb 100644 --- a/arch/arm/mach-sa1100/include/mach/simpad.h +++ b/arch/arm/mach-sa1100/include/mach/simpad.h | |||
@@ -48,32 +48,80 @@ | |||
48 | #define GPIO_SMART_CARD GPIO_GPIO10 | 48 | #define GPIO_SMART_CARD GPIO_GPIO10 |
49 | #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10 | 49 | #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10 |
50 | 50 | ||
51 | // CS3 Latch is write only, a shadow is necessary | 51 | /*--- ucb1x00 GPIO ---*/ |
52 | #define SIMPAD_UCB1X00_GPIO_BASE (GPIO_MAX + 1) | ||
53 | #define SIMPAD_UCB1X00_GPIO_PROG1 (SIMPAD_UCB1X00_GPIO_BASE) | ||
54 | #define SIMPAD_UCB1X00_GPIO_PROG2 (SIMPAD_UCB1X00_GPIO_BASE + 1) | ||
55 | #define SIMPAD_UCB1X00_GPIO_UP (SIMPAD_UCB1X00_GPIO_BASE + 2) | ||
56 | #define SIMPAD_UCB1X00_GPIO_DOWN (SIMPAD_UCB1X00_GPIO_BASE + 3) | ||
57 | #define SIMPAD_UCB1X00_GPIO_LEFT (SIMPAD_UCB1X00_GPIO_BASE + 4) | ||
58 | #define SIMPAD_UCB1X00_GPIO_RIGHT (SIMPAD_UCB1X00_GPIO_BASE + 5) | ||
59 | #define SIMPAD_UCB1X00_GPIO_6 (SIMPAD_UCB1X00_GPIO_BASE + 6) | ||
60 | #define SIMPAD_UCB1X00_GPIO_7 (SIMPAD_UCB1X00_GPIO_BASE + 7) | ||
61 | #define SIMPAD_UCB1X00_GPIO_HEADSET (SIMPAD_UCB1X00_GPIO_BASE + 8) | ||
62 | #define SIMPAD_UCB1X00_GPIO_SPEAKER (SIMPAD_UCB1X00_GPIO_BASE + 9) | ||
63 | |||
64 | /*--- CS3 Latch ---*/ | ||
65 | #define SIMPAD_CS3_GPIO_BASE (GPIO_MAX + 11) | ||
66 | #define SIMPAD_CS3_VCC_5V_EN (SIMPAD_CS3_GPIO_BASE) | ||
67 | #define SIMPAD_CS3_VCC_3V_EN (SIMPAD_CS3_GPIO_BASE + 1) | ||
68 | #define SIMPAD_CS3_EN1 (SIMPAD_CS3_GPIO_BASE + 2) | ||
69 | #define SIMPAD_CS3_EN0 (SIMPAD_CS3_GPIO_BASE + 3) | ||
70 | #define SIMPAD_CS3_DISPLAY_ON (SIMPAD_CS3_GPIO_BASE + 4) | ||
71 | #define SIMPAD_CS3_PCMCIA_BUFF_DIS (SIMPAD_CS3_GPIO_BASE + 5) | ||
72 | #define SIMPAD_CS3_MQ_RESET (SIMPAD_CS3_GPIO_BASE + 6) | ||
73 | #define SIMPAD_CS3_PCMCIA_RESET (SIMPAD_CS3_GPIO_BASE + 7) | ||
74 | #define SIMPAD_CS3_DECT_POWER_ON (SIMPAD_CS3_GPIO_BASE + 8) | ||
75 | #define SIMPAD_CS3_IRDA_SD (SIMPAD_CS3_GPIO_BASE + 9) | ||
76 | #define SIMPAD_CS3_RS232_ON (SIMPAD_CS3_GPIO_BASE + 10) | ||
77 | #define SIMPAD_CS3_SD_MEDIAQ (SIMPAD_CS3_GPIO_BASE + 11) | ||
78 | #define SIMPAD_CS3_LED2_ON (SIMPAD_CS3_GPIO_BASE + 12) | ||
79 | #define SIMPAD_CS3_IRDA_MODE (SIMPAD_CS3_GPIO_BASE + 13) | ||
80 | #define SIMPAD_CS3_ENABLE_5V (SIMPAD_CS3_GPIO_BASE + 14) | ||
81 | #define SIMPAD_CS3_RESET_SIMCARD (SIMPAD_CS3_GPIO_BASE + 15) | ||
82 | |||
83 | #define SIMPAD_CS3_PCMCIA_BVD1 (SIMPAD_CS3_GPIO_BASE + 16) | ||
84 | #define SIMPAD_CS3_PCMCIA_BVD2 (SIMPAD_CS3_GPIO_BASE + 17) | ||
85 | #define SIMPAD_CS3_PCMCIA_VS1 (SIMPAD_CS3_GPIO_BASE + 18) | ||
86 | #define SIMPAD_CS3_PCMCIA_VS2 (SIMPAD_CS3_GPIO_BASE + 19) | ||
87 | #define SIMPAD_CS3_LOCK_IND (SIMPAD_CS3_GPIO_BASE + 20) | ||
88 | #define SIMPAD_CS3_CHARGING_STATE (SIMPAD_CS3_GPIO_BASE + 21) | ||
89 | #define SIMPAD_CS3_PCMCIA_SHORT (SIMPAD_CS3_GPIO_BASE + 22) | ||
90 | #define SIMPAD_CS3_GPIO_23 (SIMPAD_CS3_GPIO_BASE + 23) | ||
52 | 91 | ||
53 | #define CS3BUSTYPE unsigned volatile long | ||
54 | #define CS3_BASE 0xf1000000 | 92 | #define CS3_BASE 0xf1000000 |
55 | 93 | ||
56 | #define VCC_5V_EN 0x0001 // For 5V PCMCIA | 94 | long simpad_get_cs3_ro(void); |
57 | #define VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA | 95 | long simpad_get_cs3_shadow(void); |
58 | #define EN1 0x0004 // This is only for EPROM's | 96 | void simpad_set_cs3_bit(int value); |
59 | #define EN0 0x0008 // Both should be enable for 3.3V or 5V | 97 | void simpad_clear_cs3_bit(int value); |
60 | #define DISPLAY_ON 0x0010 | 98 | |
61 | #define PCMCIA_BUFF_DIS 0x0020 | 99 | #define VCC_5V_EN 0x0001 /* For 5V PCMCIA */ |
62 | #define MQ_RESET 0x0040 | 100 | #define VCC_3V_EN 0x0002 /* FOR 3.3V PCMCIA */ |
63 | #define PCMCIA_RESET 0x0080 | 101 | #define EN1 0x0004 /* This is only for EPROM's */ |
64 | #define DECT_POWER_ON 0x0100 | 102 | #define EN0 0x0008 /* Both should be enable for 3.3V or 5V */ |
65 | #define IRDA_SD 0x0200 // Shutdown for powersave | 103 | #define DISPLAY_ON 0x0010 |
66 | #define RS232_ON 0x0400 | 104 | #define PCMCIA_BUFF_DIS 0x0020 |
67 | #define SD_MEDIAQ 0x0800 // Shutdown for powersave | 105 | #define MQ_RESET 0x0040 |
68 | #define LED2_ON 0x1000 | 106 | #define PCMCIA_RESET 0x0080 |
69 | #define IRDA_MODE 0x2000 // Fast/Slow IrDA mode | 107 | #define DECT_POWER_ON 0x0100 |
70 | #define ENABLE_5V 0x4000 // Enable 5V circuit | 108 | #define IRDA_SD 0x0200 /* Shutdown for powersave */ |
71 | #define RESET_SIMCARD 0x8000 | 109 | #define RS232_ON 0x0400 |
72 | 110 | #define SD_MEDIAQ 0x0800 /* Shutdown for powersave */ | |
73 | #define RS232_ENABLE 0x0440 | 111 | #define LED2_ON 0x1000 |
74 | #define PCMCIAMASK 0x402f | 112 | #define IRDA_MODE 0x2000 /* Fast/Slow IrDA mode */ |
75 | 113 | #define ENABLE_5V 0x4000 /* Enable 5V circuit */ | |
76 | 114 | #define RESET_SIMCARD 0x8000 | |
115 | |||
116 | #define PCMCIA_BVD1 0x01 | ||
117 | #define PCMCIA_BVD2 0x02 | ||
118 | #define PCMCIA_VS1 0x04 | ||
119 | #define PCMCIA_VS2 0x08 | ||
120 | #define LOCK_IND 0x10 | ||
121 | #define CHARGING_STATE 0x20 | ||
122 | #define PCMCIA_SHORT 0x40 | ||
123 | |||
124 | /*--- Battery ---*/ | ||
77 | struct simpad_battery { | 125 | struct simpad_battery { |
78 | unsigned char ac_status; /* line connected yes/no */ | 126 | unsigned char ac_status; /* line connected yes/no */ |
79 | unsigned char status; /* battery loading yes/no */ | 127 | unsigned char status; /* battery loading yes/no */ |
diff --git a/arch/arm/mach-sa1100/leds-simpad.c b/arch/arm/mach-sa1100/leds-simpad.c deleted file mode 100644 index d50f4eeaa12e..000000000000 --- a/arch/arm/mach-sa1100/leds-simpad.c +++ /dev/null | |||
@@ -1,100 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-sa1100/leds-simpad.c | ||
3 | * | ||
4 | * Author: Juergen Messerer <juergen.messerer@siemens.ch> | ||
5 | */ | ||
6 | #include <linux/init.h> | ||
7 | |||
8 | #include <mach/hardware.h> | ||
9 | #include <asm/leds.h> | ||
10 | #include <asm/system.h> | ||
11 | #include <mach/simpad.h> | ||
12 | |||
13 | #include "leds.h" | ||
14 | |||
15 | |||
16 | #define LED_STATE_ENABLED 1 | ||
17 | #define LED_STATE_CLAIMED 2 | ||
18 | |||
19 | static unsigned int led_state; | ||
20 | static unsigned int hw_led_state; | ||
21 | |||
22 | #define LED_GREEN (1) | ||
23 | #define LED_MASK (1) | ||
24 | |||
25 | extern void set_cs3_bit(int value); | ||
26 | extern void clear_cs3_bit(int value); | ||
27 | |||
28 | void simpad_leds_event(led_event_t evt) | ||
29 | { | ||
30 | switch (evt) | ||
31 | { | ||
32 | case led_start: | ||
33 | hw_led_state = LED_GREEN; | ||
34 | led_state = LED_STATE_ENABLED; | ||
35 | break; | ||
36 | |||
37 | case led_stop: | ||
38 | led_state &= ~LED_STATE_ENABLED; | ||
39 | break; | ||
40 | |||
41 | case led_claim: | ||
42 | led_state |= LED_STATE_CLAIMED; | ||
43 | hw_led_state = LED_GREEN; | ||
44 | break; | ||
45 | |||
46 | case led_release: | ||
47 | led_state &= ~LED_STATE_CLAIMED; | ||
48 | hw_led_state = LED_GREEN; | ||
49 | break; | ||
50 | |||
51 | #ifdef CONFIG_LEDS_TIMER | ||
52 | case led_timer: | ||
53 | if (!(led_state & LED_STATE_CLAIMED)) | ||
54 | hw_led_state ^= LED_GREEN; | ||
55 | break; | ||
56 | #endif | ||
57 | |||
58 | #ifdef CONFIG_LEDS_CPU | ||
59 | case led_idle_start: | ||
60 | break; | ||
61 | |||
62 | case led_idle_end: | ||
63 | break; | ||
64 | #endif | ||
65 | |||
66 | case led_halted: | ||
67 | break; | ||
68 | |||
69 | case led_green_on: | ||
70 | if (led_state & LED_STATE_CLAIMED) | ||
71 | hw_led_state |= LED_GREEN; | ||
72 | break; | ||
73 | |||
74 | case led_green_off: | ||
75 | if (led_state & LED_STATE_CLAIMED) | ||
76 | hw_led_state &= ~LED_GREEN; | ||
77 | break; | ||
78 | |||
79 | case led_amber_on: | ||
80 | break; | ||
81 | |||
82 | case led_amber_off: | ||
83 | break; | ||
84 | |||
85 | case led_red_on: | ||
86 | break; | ||
87 | |||
88 | case led_red_off: | ||
89 | break; | ||
90 | |||
91 | default: | ||
92 | break; | ||
93 | } | ||
94 | |||
95 | if (led_state & LED_STATE_ENABLED) | ||
96 | set_cs3_bit(LED2_ON); | ||
97 | else | ||
98 | clear_cs3_bit(LED2_ON); | ||
99 | } | ||
100 | |||
diff --git a/arch/arm/mach-sa1100/leds.c b/arch/arm/mach-sa1100/leds.c index bbfe197fb4d6..5fe71a0f1053 100644 --- a/arch/arm/mach-sa1100/leds.c +++ b/arch/arm/mach-sa1100/leds.c | |||
@@ -42,8 +42,6 @@ sa1100_leds_init(void) | |||
42 | leds_event = adsbitsy_leds_event; | 42 | leds_event = adsbitsy_leds_event; |
43 | if (machine_is_pt_system3()) | 43 | if (machine_is_pt_system3()) |
44 | leds_event = system3_leds_event; | 44 | leds_event = system3_leds_event; |
45 | if (machine_is_simpad()) | ||
46 | leds_event = simpad_leds_event; /* what about machine registry? including led, apm... -zecke */ | ||
47 | 45 | ||
48 | leds_event(led_start); | 46 | leds_event(led_start); |
49 | return 0; | 47 | return 0; |
diff --git a/arch/arm/mach-sa1100/leds.h b/arch/arm/mach-sa1100/leds.h index 68cc9f773d6d..776b6020f550 100644 --- a/arch/arm/mach-sa1100/leds.h +++ b/arch/arm/mach-sa1100/leds.h | |||
@@ -11,4 +11,3 @@ extern void pfs168_leds_event(led_event_t evt); | |||
11 | extern void graphicsmaster_leds_event(led_event_t evt); | 11 | extern void graphicsmaster_leds_event(led_event_t evt); |
12 | extern void adsbitsy_leds_event(led_event_t evt); | 12 | extern void adsbitsy_leds_event(led_event_t evt); |
13 | extern void system3_leds_event(led_event_t evt); | 13 | extern void system3_leds_event(led_event_t evt); |
14 | extern void simpad_leds_event(led_event_t evt); | ||
diff --git a/arch/arm/mach-sa1100/simpad.c b/arch/arm/mach-sa1100/simpad.c index cfb76077bd25..34659f354bef 100644 --- a/arch/arm/mach-sa1100/simpad.c +++ b/arch/arm/mach-sa1100/simpad.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/mtd/mtd.h> | 13 | #include <linux/mtd/mtd.h> |
14 | #include <linux/mtd/partitions.h> | 14 | #include <linux/mtd/partitions.h> |
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/gpio.h> | ||
16 | 17 | ||
17 | #include <asm/irq.h> | 18 | #include <asm/irq.h> |
18 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
@@ -28,35 +29,92 @@ | |||
28 | 29 | ||
29 | #include <linux/serial_core.h> | 30 | #include <linux/serial_core.h> |
30 | #include <linux/ioport.h> | 31 | #include <linux/ioport.h> |
32 | #include <linux/input.h> | ||
33 | #include <linux/gpio_keys.h> | ||
34 | #include <linux/leds.h> | ||
35 | #include <linux/i2c-gpio.h> | ||
31 | 36 | ||
32 | #include "generic.h" | 37 | #include "generic.h" |
33 | 38 | ||
34 | long cs3_shadow; | 39 | /* |
40 | * CS3 support | ||
41 | */ | ||
35 | 42 | ||
36 | long get_cs3_shadow(void) | 43 | static long cs3_shadow; |
44 | static spinlock_t cs3_lock; | ||
45 | static struct gpio_chip cs3_gpio; | ||
46 | |||
47 | long simpad_get_cs3_ro(void) | ||
48 | { | ||
49 | return readl(CS3_BASE); | ||
50 | } | ||
51 | EXPORT_SYMBOL(simpad_get_cs3_ro); | ||
52 | |||
53 | long simpad_get_cs3_shadow(void) | ||
37 | { | 54 | { |
38 | return cs3_shadow; | 55 | return cs3_shadow; |
39 | } | 56 | } |
57 | EXPORT_SYMBOL(simpad_get_cs3_shadow); | ||
40 | 58 | ||
41 | void set_cs3(long value) | 59 | static void __simpad_write_cs3(void) |
42 | { | 60 | { |
43 | *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow = value; | 61 | writel(cs3_shadow, CS3_BASE); |
44 | } | 62 | } |
45 | 63 | ||
46 | void set_cs3_bit(int value) | 64 | void simpad_set_cs3_bit(int value) |
47 | { | 65 | { |
66 | unsigned long flags; | ||
67 | |||
68 | spin_lock_irqsave(&cs3_lock, flags); | ||
48 | cs3_shadow |= value; | 69 | cs3_shadow |= value; |
49 | *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; | 70 | __simpad_write_cs3(); |
71 | spin_unlock_irqrestore(&cs3_lock, flags); | ||
50 | } | 72 | } |
73 | EXPORT_SYMBOL(simpad_set_cs3_bit); | ||
51 | 74 | ||
52 | void clear_cs3_bit(int value) | 75 | void simpad_clear_cs3_bit(int value) |
53 | { | 76 | { |
77 | unsigned long flags; | ||
78 | |||
79 | spin_lock_irqsave(&cs3_lock, flags); | ||
54 | cs3_shadow &= ~value; | 80 | cs3_shadow &= ~value; |
55 | *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; | 81 | __simpad_write_cs3(); |
82 | spin_unlock_irqrestore(&cs3_lock, flags); | ||
56 | } | 83 | } |
84 | EXPORT_SYMBOL(simpad_clear_cs3_bit); | ||
85 | |||
86 | static void cs3_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | ||
87 | { | ||
88 | if (offset > 15) | ||
89 | return; | ||
90 | if (value) | ||
91 | simpad_set_cs3_bit(1 << offset); | ||
92 | else | ||
93 | simpad_clear_cs3_bit(1 << offset); | ||
94 | }; | ||
95 | |||
96 | static int cs3_gpio_get(struct gpio_chip *chip, unsigned offset) | ||
97 | { | ||
98 | if (offset > 15) | ||
99 | return simpad_get_cs3_ro() & (1 << (offset - 16)); | ||
100 | return simpad_get_cs3_shadow() & (1 << offset); | ||
101 | }; | ||
57 | 102 | ||
58 | EXPORT_SYMBOL(set_cs3_bit); | 103 | static int cs3_gpio_direction_input(struct gpio_chip *chip, unsigned offset) |
59 | EXPORT_SYMBOL(clear_cs3_bit); | 104 | { |
105 | if (offset > 15) | ||
106 | return 0; | ||
107 | return -EINVAL; | ||
108 | }; | ||
109 | |||
110 | static int cs3_gpio_direction_output(struct gpio_chip *chip, unsigned offset, | ||
111 | int value) | ||
112 | { | ||
113 | if (offset > 15) | ||
114 | return -EINVAL; | ||
115 | cs3_gpio_set(chip, offset, value); | ||
116 | return 0; | ||
117 | }; | ||
60 | 118 | ||
61 | static struct map_desc simpad_io_desc[] __initdata = { | 119 | static struct map_desc simpad_io_desc[] __initdata = { |
62 | { /* MQ200 */ | 120 | { /* MQ200 */ |
@@ -64,9 +122,9 @@ static struct map_desc simpad_io_desc[] __initdata = { | |||
64 | .pfn = __phys_to_pfn(0x4b800000), | 122 | .pfn = __phys_to_pfn(0x4b800000), |
65 | .length = 0x00800000, | 123 | .length = 0x00800000, |
66 | .type = MT_DEVICE | 124 | .type = MT_DEVICE |
67 | }, { /* Paules CS3, write only */ | 125 | }, { /* Simpad CS3 */ |
68 | .virtual = 0xf1000000, | 126 | .virtual = CS3_BASE, |
69 | .pfn = __phys_to_pfn(0x18000000), | 127 | .pfn = __phys_to_pfn(SA1100_CS3_PHYS), |
70 | .length = 0x00100000, | 128 | .length = 0x00100000, |
71 | .type = MT_DEVICE | 129 | .type = MT_DEVICE |
72 | }, | 130 | }, |
@@ -78,12 +136,12 @@ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate) | |||
78 | if (port->mapbase == (u_int)&Ser1UTCR0) { | 136 | if (port->mapbase == (u_int)&Ser1UTCR0) { |
79 | if (state) | 137 | if (state) |
80 | { | 138 | { |
81 | clear_cs3_bit(RS232_ON); | 139 | simpad_clear_cs3_bit(RS232_ON); |
82 | clear_cs3_bit(DECT_POWER_ON); | 140 | simpad_clear_cs3_bit(DECT_POWER_ON); |
83 | }else | 141 | }else |
84 | { | 142 | { |
85 | set_cs3_bit(RS232_ON); | 143 | simpad_set_cs3_bit(RS232_ON); |
86 | set_cs3_bit(DECT_POWER_ON); | 144 | simpad_set_cs3_bit(DECT_POWER_ON); |
87 | } | 145 | } |
88 | } | 146 | } |
89 | } | 147 | } |
@@ -132,6 +190,7 @@ static struct resource simpad_flash_resources [] = { | |||
132 | static struct mcp_plat_data simpad_mcp_data = { | 190 | static struct mcp_plat_data simpad_mcp_data = { |
133 | .mccr0 = MCCR0_ADM, | 191 | .mccr0 = MCCR0_ADM, |
134 | .sclk_rate = 11981000, | 192 | .sclk_rate = 11981000, |
193 | .gpio_base = SIMPAD_UCB1X00_GPIO_BASE, | ||
135 | }; | 194 | }; |
136 | 195 | ||
137 | 196 | ||
@@ -142,9 +201,10 @@ static void __init simpad_map_io(void) | |||
142 | 201 | ||
143 | iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); | 202 | iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); |
144 | 203 | ||
145 | set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | | 204 | /* Initialize CS3 */ |
146 | ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); | 205 | cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | |
147 | 206 | RS232_ON | ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); | |
207 | __simpad_write_cs3(); /* Spinlocks not yet initialized */ | ||
148 | 208 | ||
149 | sa1100_register_uart_fns(&simpad_port_fns); | 209 | sa1100_register_uart_fns(&simpad_port_fns); |
150 | sa1100_register_uart(0, 3); /* serial interface */ | 210 | sa1100_register_uart(0, 3); /* serial interface */ |
@@ -170,13 +230,14 @@ static void __init simpad_map_io(void) | |||
170 | 230 | ||
171 | static void simpad_power_off(void) | 231 | static void simpad_power_off(void) |
172 | { | 232 | { |
173 | local_irq_disable(); // was cli | 233 | local_irq_disable(); |
174 | set_cs3(0x800); /* only SD_MEDIAQ */ | 234 | cs3_shadow = SD_MEDIAQ; |
235 | __simpad_write_cs3(); /* Bypass spinlock here */ | ||
175 | 236 | ||
176 | /* disable internal oscillator, float CS lines */ | 237 | /* disable internal oscillator, float CS lines */ |
177 | PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); | 238 | PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); |
178 | /* enable wake-up on GPIO0 (Assabet...) */ | 239 | /* enable wake-up on GPIO0 */ |
179 | PWER = GFER = GRER = 1; | 240 | PWER = GFER = GRER = PWER_GPIO0; |
180 | /* | 241 | /* |
181 | * set scratchpad to zero, just in case it is used as a | 242 | * set scratchpad to zero, just in case it is used as a |
182 | * restart address by the bootloader. | 243 | * restart address by the bootloader. |
@@ -192,6 +253,91 @@ static void simpad_power_off(void) | |||
192 | 253 | ||
193 | } | 254 | } |
194 | 255 | ||
256 | /* | ||
257 | * gpio_keys | ||
258 | */ | ||
259 | |||
260 | static struct gpio_keys_button simpad_button_table[] = { | ||
261 | { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 1, "power button" }, | ||
262 | }; | ||
263 | |||
264 | static struct gpio_keys_platform_data simpad_keys_data = { | ||
265 | .buttons = simpad_button_table, | ||
266 | .nbuttons = ARRAY_SIZE(simpad_button_table), | ||
267 | }; | ||
268 | |||
269 | static struct platform_device simpad_keys = { | ||
270 | .name = "gpio-keys", | ||
271 | .dev = { | ||
272 | .platform_data = &simpad_keys_data, | ||
273 | }, | ||
274 | }; | ||
275 | |||
276 | static struct gpio_keys_button simpad_polled_button_table[] = { | ||
277 | { KEY_PROG1, SIMPAD_UCB1X00_GPIO_PROG1, 1, "prog1 button" }, | ||
278 | { KEY_PROG2, SIMPAD_UCB1X00_GPIO_PROG2, 1, "prog2 button" }, | ||
279 | { KEY_UP, SIMPAD_UCB1X00_GPIO_UP, 1, "up button" }, | ||
280 | { KEY_DOWN, SIMPAD_UCB1X00_GPIO_DOWN, 1, "down button" }, | ||
281 | { KEY_LEFT, SIMPAD_UCB1X00_GPIO_LEFT, 1, "left button" }, | ||
282 | { KEY_RIGHT, SIMPAD_UCB1X00_GPIO_RIGHT, 1, "right button" }, | ||
283 | }; | ||
284 | |||
285 | static struct gpio_keys_platform_data simpad_polled_keys_data = { | ||
286 | .buttons = simpad_polled_button_table, | ||
287 | .nbuttons = ARRAY_SIZE(simpad_polled_button_table), | ||
288 | .poll_interval = 50, | ||
289 | }; | ||
290 | |||
291 | static struct platform_device simpad_polled_keys = { | ||
292 | .name = "gpio-keys-polled", | ||
293 | .dev = { | ||
294 | .platform_data = &simpad_polled_keys_data, | ||
295 | }, | ||
296 | }; | ||
297 | |||
298 | /* | ||
299 | * GPIO LEDs | ||
300 | */ | ||
301 | |||
302 | static struct gpio_led simpad_leds[] = { | ||
303 | { | ||
304 | .name = "simpad:power", | ||
305 | .gpio = SIMPAD_CS3_LED2_ON, | ||
306 | .active_low = 0, | ||
307 | .default_trigger = "default-on", | ||
308 | }, | ||
309 | }; | ||
310 | |||
311 | static struct gpio_led_platform_data simpad_led_data = { | ||
312 | .num_leds = ARRAY_SIZE(simpad_leds), | ||
313 | .leds = simpad_leds, | ||
314 | }; | ||
315 | |||
316 | static struct platform_device simpad_gpio_leds = { | ||
317 | .name = "leds-gpio", | ||
318 | .id = 0, | ||
319 | .dev = { | ||
320 | .platform_data = &simpad_led_data, | ||
321 | }, | ||
322 | }; | ||
323 | |||
324 | /* | ||
325 | * i2c | ||
326 | */ | ||
327 | static struct i2c_gpio_platform_data simpad_i2c_data = { | ||
328 | .sda_pin = GPIO_GPIO21, | ||
329 | .scl_pin = GPIO_GPIO25, | ||
330 | .udelay = 10, | ||
331 | .timeout = HZ, | ||
332 | }; | ||
333 | |||
334 | static struct platform_device simpad_i2c = { | ||
335 | .name = "i2c-gpio", | ||
336 | .id = 0, | ||
337 | .dev = { | ||
338 | .platform_data = &simpad_i2c_data, | ||
339 | }, | ||
340 | }; | ||
195 | 341 | ||
196 | /* | 342 | /* |
197 | * MediaQ Video Device | 343 | * MediaQ Video Device |
@@ -202,7 +348,11 @@ static struct platform_device simpad_mq200fb = { | |||
202 | }; | 348 | }; |
203 | 349 | ||
204 | static struct platform_device *devices[] __initdata = { | 350 | static struct platform_device *devices[] __initdata = { |
205 | &simpad_mq200fb | 351 | &simpad_keys, |
352 | &simpad_polled_keys, | ||
353 | &simpad_mq200fb, | ||
354 | &simpad_gpio_leds, | ||
355 | &simpad_i2c, | ||
206 | }; | 356 | }; |
207 | 357 | ||
208 | 358 | ||
@@ -211,6 +361,19 @@ static int __init simpad_init(void) | |||
211 | { | 361 | { |
212 | int ret; | 362 | int ret; |
213 | 363 | ||
364 | spin_lock_init(&cs3_lock); | ||
365 | |||
366 | cs3_gpio.label = "simpad_cs3"; | ||
367 | cs3_gpio.base = SIMPAD_CS3_GPIO_BASE; | ||
368 | cs3_gpio.ngpio = 24; | ||
369 | cs3_gpio.set = cs3_gpio_set; | ||
370 | cs3_gpio.get = cs3_gpio_get; | ||
371 | cs3_gpio.direction_input = cs3_gpio_direction_input; | ||
372 | cs3_gpio.direction_output = cs3_gpio_direction_output; | ||
373 | ret = gpiochip_add(&cs3_gpio); | ||
374 | if (ret) | ||
375 | printk(KERN_WARNING "simpad: Unable to register cs3 GPIO device"); | ||
376 | |||
214 | pm_power_off = simpad_power_off; | 377 | pm_power_off = simpad_power_off; |
215 | 378 | ||
216 | sa11x0_register_mtd(&simpad_flash_data, simpad_flash_resources, | 379 | sa11x0_register_mtd(&simpad_flash_data, simpad_flash_resources, |
diff --git a/arch/arm/mach-shark/Makefile.boot b/arch/arm/mach-shark/Makefile.boot index 4320f8b92771..e40e24e4ca34 100644 --- a/arch/arm/mach-shark/Makefile.boot +++ b/arch/arm/mach-shark/Makefile.boot | |||
@@ -1,2 +1,2 @@ | |||
1 | zreladdr-y := 0x08008000 | 1 | zreladdr-y += 0x08008000 |
2 | 2 | ||
diff --git a/arch/arm/mach-shmobile/Makefile.boot b/arch/arm/mach-shmobile/Makefile.boot index 1c08ee9de86a..498efd99338d 100644 --- a/arch/arm/mach-shmobile/Makefile.boot +++ b/arch/arm/mach-shmobile/Makefile.boot | |||
@@ -1,7 +1,7 @@ | |||
1 | __ZRELADDR := $(shell /bin/bash -c 'printf "0x%08x" \ | 1 | __ZRELADDR := $(shell /bin/bash -c 'printf "0x%08x" \ |
2 | $$[$(CONFIG_MEMORY_START) + 0x8000]') | 2 | $$[$(CONFIG_MEMORY_START) + 0x8000]') |
3 | 3 | ||
4 | zreladdr-y := $(__ZRELADDR) | 4 | zreladdr-y += $(__ZRELADDR) |
5 | 5 | ||
6 | # Unsupported legacy stuff | 6 | # Unsupported legacy stuff |
7 | # | 7 | # |
diff --git a/arch/arm/mach-spear3xx/Makefile.boot b/arch/arm/mach-spear3xx/Makefile.boot index 7a1f3c0eadb8..4674a4c221db 100644 --- a/arch/arm/mach-spear3xx/Makefile.boot +++ b/arch/arm/mach-spear3xx/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-spear6xx/Makefile.boot b/arch/arm/mach-spear6xx/Makefile.boot index 7a1f3c0eadb8..4674a4c221db 100644 --- a/arch/arm/mach-spear6xx/Makefile.boot +++ b/arch/arm/mach-spear6xx/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mach-tcc8k/Makefile.boot b/arch/arm/mach-tcc8k/Makefile.boot index f135c9deae10..5e02d4156b04 100644 --- a/arch/arm/mach-tcc8k/Makefile.boot +++ b/arch/arm/mach-tcc8k/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x20008000 | 1 | zreladdr-y += 0x20008000 |
2 | params_phys-y := 0x20000100 | 2 | params_phys-y := 0x20000100 |
3 | initrd_phys-y := 0x20800000 | 3 | initrd_phys-y := 0x20800000 |
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot index 428ad122be03..5e870d29eca1 100644 --- a/arch/arm/mach-tegra/Makefile.boot +++ b/arch/arm/mach-tegra/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00008000 | 1 | zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) += 0x00008000 |
2 | params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 | 2 | params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 |
3 | initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 | 3 | initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-tegra/board-harmony.c b/arch/arm/mach-tegra/board-harmony.c index 846cd7d69e3e..c78ce41cca16 100644 --- a/arch/arm/mach-tegra/board-harmony.c +++ b/arch/arm/mach-tegra/board-harmony.c | |||
@@ -123,8 +123,8 @@ static struct platform_device *harmony_devices[] __initdata = { | |||
123 | &harmony_audio_device, | 123 | &harmony_audio_device, |
124 | }; | 124 | }; |
125 | 125 | ||
126 | static void __init tegra_harmony_fixup(struct machine_desc *desc, | 126 | static void __init tegra_harmony_fixup(struct tag *tags, char **cmdline, |
127 | struct tag *tags, char **cmdline, struct meminfo *mi) | 127 | struct meminfo *mi) |
128 | { | 128 | { |
129 | mi->nr_banks = 2; | 129 | mi->nr_banks = 2; |
130 | mi->bank[0].start = PHYS_OFFSET; | 130 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-tegra/board-paz00.c b/arch/arm/mach-tegra/board-paz00.c index ea2f79c9879b..5e6bc7719642 100644 --- a/arch/arm/mach-tegra/board-paz00.c +++ b/arch/arm/mach-tegra/board-paz00.c | |||
@@ -84,8 +84,8 @@ static void paz00_usb_init(void) | |||
84 | platform_device_register(&tegra_ehci3_device); | 84 | platform_device_register(&tegra_ehci3_device); |
85 | } | 85 | } |
86 | 86 | ||
87 | static void __init tegra_paz00_fixup(struct machine_desc *desc, | 87 | static void __init tegra_paz00_fixup(struct tag *tags, char **cmdline, |
88 | struct tag *tags, char **cmdline, struct meminfo *mi) | 88 | struct meminfo *mi) |
89 | { | 89 | { |
90 | mi->nr_banks = 1; | 90 | mi->nr_banks = 1; |
91 | mi->bank[0].start = PHYS_OFFSET; | 91 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-tegra/board-trimslice.c b/arch/arm/mach-tegra/board-trimslice.c index 89a6d2adc1de..652c3404d0e2 100644 --- a/arch/arm/mach-tegra/board-trimslice.c +++ b/arch/arm/mach-tegra/board-trimslice.c | |||
@@ -126,8 +126,8 @@ static void trimslice_usb_init(void) | |||
126 | platform_device_register(&tegra_ehci1_device); | 126 | platform_device_register(&tegra_ehci1_device); |
127 | } | 127 | } |
128 | 128 | ||
129 | static void __init tegra_trimslice_fixup(struct machine_desc *desc, | 129 | static void __init tegra_trimslice_fixup(struct tag *tags, char **cmdline, |
130 | struct tag *tags, char **cmdline, struct meminfo *mi) | 130 | struct meminfo *mi) |
131 | { | 131 | { |
132 | mi->nr_banks = 2; | 132 | mi->nr_banks = 2; |
133 | mi->bank[0].start = PHYS_OFFSET; | 133 | mi->bank[0].start = PHYS_OFFSET; |
diff --git a/arch/arm/mach-u300/Makefile.boot b/arch/arm/mach-u300/Makefile.boot index 6fbfc6ea2d35..69357affbd77 100644 --- a/arch/arm/mach-u300/Makefile.boot +++ b/arch/arm/mach-u300/Makefile.boot | |||
@@ -4,10 +4,10 @@ | |||
4 | # INITRD_PHYS must be in RAM | 4 | # INITRD_PHYS must be in RAM |
5 | 5 | ||
6 | ifdef CONFIG_MACH_U300_SINGLE_RAM | 6 | ifdef CONFIG_MACH_U300_SINGLE_RAM |
7 | zreladdr-y := 0x28E08000 | 7 | zreladdr-y += 0x28E08000 |
8 | params_phys-y := 0x28E00100 | 8 | params_phys-y := 0x28E00100 |
9 | else | 9 | else |
10 | zreladdr-y := 0x48008000 | 10 | zreladdr-y += 0x48008000 |
11 | params_phys-y := 0x48000100 | 11 | params_phys-y := 0x48000100 |
12 | endif | 12 | endif |
13 | 13 | ||
diff --git a/arch/arm/mach-ux500/Makefile.boot b/arch/arm/mach-ux500/Makefile.boot index c7e75acfe6c9..ff0a4b5b0a82 100644 --- a/arch/arm/mach-ux500/Makefile.boot +++ b/arch/arm/mach-ux500/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-versatile/Makefile.boot b/arch/arm/mach-versatile/Makefile.boot index c7e75acfe6c9..ff0a4b5b0a82 100644 --- a/arch/arm/mach-versatile/Makefile.boot +++ b/arch/arm/mach-versatile/Makefile.boot | |||
@@ -1,4 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
4 | 4 | ||
diff --git a/arch/arm/mach-vexpress/Makefile.boot b/arch/arm/mach-vexpress/Makefile.boot index 07c2d9c457ec..8630b3d10a4d 100644 --- a/arch/arm/mach-vexpress/Makefile.boot +++ b/arch/arm/mach-vexpress/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x60008000 | 1 | zreladdr-y += 0x60008000 |
2 | params_phys-y := 0x60000100 | 2 | params_phys-y := 0x60000100 |
3 | initrd_phys-y := 0x60800000 | 3 | initrd_phys-y := 0x60800000 |
diff --git a/arch/arm/mach-vexpress/hotplug.c b/arch/arm/mach-vexpress/hotplug.c index ea4cbfb90a66..3668cf91d2de 100644 --- a/arch/arm/mach-vexpress/hotplug.c +++ b/arch/arm/mach-vexpress/hotplug.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
14 | 14 | ||
15 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
16 | #include <asm/system.h> | ||
16 | 17 | ||
17 | extern volatile int pen_release; | 18 | extern volatile int pen_release; |
18 | 19 | ||
@@ -62,13 +63,7 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | |||
62 | * code will have already disabled interrupts | 63 | * code will have already disabled interrupts |
63 | */ | 64 | */ |
64 | for (;;) { | 65 | for (;;) { |
65 | /* | 66 | wfi(); |
66 | * here's the WFI | ||
67 | */ | ||
68 | asm(".word 0xe320f003\n" | ||
69 | : | ||
70 | : | ||
71 | : "memory", "cc"); | ||
72 | 67 | ||
73 | if (pen_release == cpu) { | 68 | if (pen_release == cpu) { |
74 | /* | 69 | /* |
diff --git a/arch/arm/mach-vt8500/Makefile.boot b/arch/arm/mach-vt8500/Makefile.boot index a8acc4e24902..b79c41cdfdff 100644 --- a/arch/arm/mach-vt8500/Makefile.boot +++ b/arch/arm/mach-vt8500/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x01000000 | 3 | initrd_phys-y := 0x01000000 |
diff --git a/arch/arm/mach-w90x900/Makefile.boot b/arch/arm/mach-w90x900/Makefile.boot index a057b546b6e5..6c3d421c2d11 100644 --- a/arch/arm/mach-w90x900/Makefile.boot +++ b/arch/arm/mach-w90x900/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | 3 | ||
diff --git a/arch/arm/mach-zynq/Makefile.boot b/arch/arm/mach-zynq/Makefile.boot index 67039c3e0c48..760a0efe7580 100644 --- a/arch/arm/mach-zynq/Makefile.boot +++ b/arch/arm/mach-zynq/Makefile.boot | |||
@@ -1,3 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | 1 | zreladdr-y += 0x00008000 |
2 | params_phys-y := 0x00000100 | 2 | params_phys-y := 0x00000100 |
3 | initrd_phys-y := 0x00800000 | 3 | initrd_phys-y := 0x00800000 |
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index ab506272b2d3..bdb248c4f55c 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
@@ -289,6 +289,27 @@ __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype) | |||
289 | } | 289 | } |
290 | EXPORT_SYMBOL(__arm_ioremap); | 290 | EXPORT_SYMBOL(__arm_ioremap); |
291 | 291 | ||
292 | /* | ||
293 | * Remap an arbitrary physical address space into the kernel virtual | ||
294 | * address space as memory. Needed when the kernel wants to execute | ||
295 | * code in external memory. This is needed for reprogramming source | ||
296 | * clocks that would affect normal memory for example. Please see | ||
297 | * CONFIG_GENERIC_ALLOCATOR for allocating external memory. | ||
298 | */ | ||
299 | void __iomem * | ||
300 | __arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached) | ||
301 | { | ||
302 | unsigned int mtype; | ||
303 | |||
304 | if (cached) | ||
305 | mtype = MT_MEMORY; | ||
306 | else | ||
307 | mtype = MT_MEMORY_NONCACHED; | ||
308 | |||
309 | return __arm_ioremap_caller(phys_addr, size, mtype, | ||
310 | __builtin_return_address(0)); | ||
311 | } | ||
312 | |||
292 | void __iounmap(volatile void __iomem *io_addr) | 313 | void __iounmap(volatile void __iomem *io_addr) |
293 | { | 314 | { |
294 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); | 315 | void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr); |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 62cc8f981171..5bdeef969847 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
@@ -12,10 +12,9 @@ | |||
12 | # | 12 | # |
13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
14 | # | 14 | # |
15 | # XXX: This is a cut-down version of the file; it contains only machines that | 15 | # This is a cut-down version of the file; it contains only machines that |
16 | # XXX: are in mainline or have been submitted to the machine database within | 16 | # are merged into mainline or have been edited in the machine database |
17 | # XXX: the last 12 months. If your entry is missing please email rmk at | 17 | # within the last 12 months. References to machine_is_NAME() do not count! |
18 | # XXX: <linux@arm.linux.org.uk> | ||
19 | # | 18 | # |
20 | # Last update: Sat May 7 08:48:24 2011 | 19 | # Last update: Sat May 7 08:48:24 2011 |
21 | # | 20 | # |
@@ -65,6 +64,7 @@ h7201 ARCH_H7201 H7201 161 | |||
65 | h7202 ARCH_H7202 H7202 162 | 64 | h7202 ARCH_H7202 H7202 162 |
66 | iq80321 ARCH_IQ80321 IQ80321 169 | 65 | iq80321 ARCH_IQ80321 IQ80321 169 |
67 | ks8695 ARCH_KS8695 KS8695 180 | 66 | ks8695 ARCH_KS8695 KS8695 180 |
67 | karo ARCH_KARO KARO 190 | ||
68 | smdk2410 ARCH_SMDK2410 SMDK2410 193 | 68 | smdk2410 ARCH_SMDK2410 SMDK2410 193 |
69 | ceiva ARCH_CEIVA CEIVA 200 | 69 | ceiva ARCH_CEIVA CEIVA 200 |
70 | voiceblue MACH_VOICEBLUE VOICEBLUE 218 | 70 | voiceblue MACH_VOICEBLUE VOICEBLUE 218 |
@@ -188,6 +188,7 @@ omap_2430sdp MACH_OMAP_2430SDP OMAP_2430SDP 900 | |||
188 | davinci_evm MACH_DAVINCI_EVM DAVINCI_EVM 901 | 188 | davinci_evm MACH_DAVINCI_EVM DAVINCI_EVM 901 |
189 | palmz72 MACH_PALMZ72 PALMZ72 904 | 189 | palmz72 MACH_PALMZ72 PALMZ72 904 |
190 | nxdb500 MACH_NXDB500 NXDB500 905 | 190 | nxdb500 MACH_NXDB500 NXDB500 905 |
191 | apf9328 MACH_APF9328 APF9328 906 | ||
191 | palmt5 MACH_PALMT5 PALMT5 917 | 192 | palmt5 MACH_PALMT5 PALMT5 917 |
192 | palmtc MACH_PALMTC PALMTC 918 | 193 | palmtc MACH_PALMTC PALMTC 918 |
193 | omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919 | 194 | omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919 |
@@ -271,10 +272,12 @@ pcm038 MACH_PCM038 PCM038 1551 | |||
271 | ts_x09 MACH_TS209 TS209 1565 | 272 | ts_x09 MACH_TS209 TS209 1565 |
272 | at91cap9adk MACH_AT91CAP9ADK AT91CAP9ADK 1566 | 273 | at91cap9adk MACH_AT91CAP9ADK AT91CAP9ADK 1566 |
273 | mx31moboard MACH_MX31MOBOARD MX31MOBOARD 1574 | 274 | mx31moboard MACH_MX31MOBOARD MX31MOBOARD 1574 |
275 | vision_ep9307 MACH_VISION_EP9307 VISION_EP9307 1578 | ||
274 | terastation_pro2 MACH_TERASTATION_PRO2 TERASTATION_PRO2 1584 | 276 | terastation_pro2 MACH_TERASTATION_PRO2 TERASTATION_PRO2 1584 |
275 | linkstation_pro MACH_LINKSTATION_PRO LINKSTATION_PRO 1585 | 277 | linkstation_pro MACH_LINKSTATION_PRO LINKSTATION_PRO 1585 |
276 | e350 MACH_E350 E350 1596 | 278 | e350 MACH_E350 E350 1596 |
277 | ts409 MACH_TS409 TS409 1601 | 279 | ts409 MACH_TS409 TS409 1601 |
280 | rsi_ews MACH_RSI_EWS RSI_EWS 1609 | ||
278 | cm_x300 MACH_CM_X300 CM_X300 1616 | 281 | cm_x300 MACH_CM_X300 CM_X300 1616 |
279 | at91sam9g20ek MACH_AT91SAM9G20EK AT91SAM9G20EK 1624 | 282 | at91sam9g20ek MACH_AT91SAM9G20EK AT91SAM9G20EK 1624 |
280 | smdk6410 MACH_SMDK6410 SMDK6410 1626 | 283 | smdk6410 MACH_SMDK6410 SMDK6410 1626 |
@@ -331,6 +334,7 @@ smdkc100 MACH_SMDKC100 SMDKC100 1826 | |||
331 | tavorevb MACH_TAVOREVB TAVOREVB 1827 | 334 | tavorevb MACH_TAVOREVB TAVOREVB 1827 |
332 | saar MACH_SAAR SAAR 1828 | 335 | saar MACH_SAAR SAAR 1828 |
333 | at91sam9m10g45ek MACH_AT91SAM9M10G45EK AT91SAM9M10G45EK 1830 | 336 | at91sam9m10g45ek MACH_AT91SAM9M10G45EK AT91SAM9M10G45EK 1830 |
337 | usb_a9g20 MACH_USB_A9G20 USB_A9G20 1841 | ||
334 | mxlads MACH_MXLADS MXLADS 1851 | 338 | mxlads MACH_MXLADS MXLADS 1851 |
335 | linkstation_mini MACH_LINKSTATION_MINI LINKSTATION_MINI 1858 | 339 | linkstation_mini MACH_LINKSTATION_MINI LINKSTATION_MINI 1858 |
336 | afeb9260 MACH_AFEB9260 AFEB9260 1859 | 340 | afeb9260 MACH_AFEB9260 AFEB9260 1859 |
@@ -369,6 +373,7 @@ pcm043 MACH_PCM043 PCM043 2072 | |||
369 | sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097 | 373 | sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097 |
370 | avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104 | 374 | avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104 |
371 | mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125 | 375 | mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125 |
376 | tx37 MACH_TX37 TX37 2127 | ||
372 | rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135 | 377 | rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135 |
373 | dm355_leopard MACH_DM355_LEOPARD DM355_LEOPARD 2138 | 378 | dm355_leopard MACH_DM355_LEOPARD DM355_LEOPARD 2138 |
374 | ts219 MACH_TS219 TS219 2139 | 379 | ts219 MACH_TS219 TS219 2139 |
@@ -379,6 +384,7 @@ omap_4430sdp MACH_OMAP_4430SDP OMAP_4430SDP 2160 | |||
379 | magx_zn5 MACH_MAGX_ZN5 MAGX_ZN5 2162 | 384 | magx_zn5 MACH_MAGX_ZN5 MAGX_ZN5 2162 |
380 | btmavb101 MACH_BTMAVB101 BTMAVB101 2172 | 385 | btmavb101 MACH_BTMAVB101 BTMAVB101 2172 |
381 | btmawb101 MACH_BTMAWB101 BTMAWB101 2173 | 386 | btmawb101 MACH_BTMAWB101 BTMAWB101 2173 |
387 | tx25 MACH_TX25 TX25 2177 | ||
382 | omap3_torpedo MACH_OMAP3_TORPEDO OMAP3_TORPEDO 2178 | 388 | omap3_torpedo MACH_OMAP3_TORPEDO OMAP3_TORPEDO 2178 |
383 | anw6410 MACH_ANW6410 ANW6410 2183 | 389 | anw6410 MACH_ANW6410 ANW6410 2183 |
384 | imx27_visstrim_m10 MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10 2187 | 390 | imx27_visstrim_m10 MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10 2187 |
@@ -423,6 +429,7 @@ raumfeld_rc MACH_RAUMFELD_RC RAUMFELD_RC 2413 | |||
423 | raumfeld_connector MACH_RAUMFELD_CONNECTOR RAUMFELD_CONNECTOR 2414 | 429 | raumfeld_connector MACH_RAUMFELD_CONNECTOR RAUMFELD_CONNECTOR 2414 |
424 | raumfeld_speaker MACH_RAUMFELD_SPEAKER RAUMFELD_SPEAKER 2415 | 430 | raumfeld_speaker MACH_RAUMFELD_SPEAKER RAUMFELD_SPEAKER 2415 |
425 | tnetv107x MACH_TNETV107X TNETV107X 2418 | 431 | tnetv107x MACH_TNETV107X TNETV107X 2418 |
432 | mx51_m2id MACH_MX51_M2ID MX51_M2ID 2428 | ||
426 | smdkv210 MACH_SMDKV210 SMDKV210 2456 | 433 | smdkv210 MACH_SMDKV210 SMDKV210 2456 |
427 | omap_zoom3 MACH_OMAP_ZOOM3 OMAP_ZOOM3 2464 | 434 | omap_zoom3 MACH_OMAP_ZOOM3 OMAP_ZOOM3 2464 |
428 | omap_3630sdp MACH_OMAP_3630SDP OMAP_3630SDP 2465 | 435 | omap_3630sdp MACH_OMAP_3630SDP OMAP_3630SDP 2465 |
@@ -433,14 +440,17 @@ omapl138_hawkboard MACH_OMAPL138_HAWKBOARD OMAPL138_HAWKBOARD 2495 | |||
433 | ts41x MACH_TS41X TS41X 2502 | 440 | ts41x MACH_TS41X TS41X 2502 |
434 | phy3250 MACH_PHY3250 PHY3250 2511 | 441 | phy3250 MACH_PHY3250 PHY3250 2511 |
435 | mini6410 MACH_MINI6410 MINI6410 2520 | 442 | mini6410 MACH_MINI6410 MINI6410 2520 |
443 | tx51 MACH_TX51 TX51 2529 | ||
436 | mx28evk MACH_MX28EVK MX28EVK 2531 | 444 | mx28evk MACH_MX28EVK MX28EVK 2531 |
437 | smartq5 MACH_SMARTQ5 SMARTQ5 2534 | 445 | smartq5 MACH_SMARTQ5 SMARTQ5 2534 |
438 | davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 | 446 | davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 |
439 | mxt_td60 MACH_MXT_TD60 MXT_TD60 2550 | 447 | mxt_td60 MACH_MXT_TD60 MXT_TD60 2550 |
440 | riot_bei2 MACH_RIOT_BEI2 RIOT_BEI2 2576 | 448 | riot_bei2 MACH_RIOT_BEI2 RIOT_BEI2 2576 |
441 | riot_x37 MACH_RIOT_X37 RIOT_X37 2578 | 449 | riot_x37 MACH_RIOT_X37 RIOT_X37 2578 |
450 | pca101 MACH_PCA101 PCA101 2595 | ||
442 | capc7117 MACH_CAPC7117 CAPC7117 2612 | 451 | capc7117 MACH_CAPC7117 CAPC7117 2612 |
443 | icontrol MACH_ICONTROL ICONTROL 2624 | 452 | icontrol MACH_ICONTROL ICONTROL 2624 |
453 | gplugd MACH_GPLUGD GPLUGD 2625 | ||
444 | qsd8x50a_st1_5 MACH_QSD8X50A_ST1_5 QSD8X50A_ST1_5 2627 | 454 | qsd8x50a_st1_5 MACH_QSD8X50A_ST1_5 QSD8X50A_ST1_5 2627 |
445 | mx23evk MACH_MX23EVK MX23EVK 2629 | 455 | mx23evk MACH_MX23EVK MX23EVK 2629 |
446 | ap4evb MACH_AP4EVB AP4EVB 2630 | 456 | ap4evb MACH_AP4EVB AP4EVB 2630 |
@@ -1113,3 +1123,5 @@ blissc MACH_BLISSC BLISSC 3491 | |||
1113 | thales_adc MACH_THALES_ADC THALES_ADC 3492 | 1123 | thales_adc MACH_THALES_ADC THALES_ADC 3492 |
1114 | ubisys_p9d_evp MACH_UBISYS_P9D_EVP UBISYS_P9D_EVP 3493 | 1124 | ubisys_p9d_evp MACH_UBISYS_P9D_EVP UBISYS_P9D_EVP 3493 |
1115 | atdgp318 MACH_ATDGP318 ATDGP318 3494 | 1125 | atdgp318 MACH_ATDGP318 ATDGP318 3494 |
1126 | smdk4212 MACH_SMDK4212 SMDK4212 3638 | ||
1127 | smdk4412 MACH_SMDK4412 SMDK4412 3765 | ||