diff options
Diffstat (limited to 'arch/arm')
40 files changed, 183 insertions, 150 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 34ef016626ff..d423d58f938d 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -109,9 +109,6 @@ config MIGHT_HAVE_PCI | |||
109 | config SYS_SUPPORTS_APM_EMULATION | 109 | config SYS_SUPPORTS_APM_EMULATION |
110 | bool | 110 | bool |
111 | 111 | ||
112 | config GENERIC_GPIO | ||
113 | bool | ||
114 | |||
115 | config HAVE_TCM | 112 | config HAVE_TCM |
116 | bool | 113 | bool |
117 | select GENERIC_ALLOCATOR | 114 | select GENERIC_ALLOCATOR |
@@ -900,7 +897,6 @@ config ARCH_MULTI_V7 | |||
900 | bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)" | 897 | bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)" |
901 | default y | 898 | default y |
902 | select ARCH_MULTI_V6_V7 | 899 | select ARCH_MULTI_V6_V7 |
903 | select ARCH_VEXPRESS | ||
904 | select CPU_V7 | 900 | select CPU_V7 |
905 | 901 | ||
906 | config ARCH_MULTI_V6_V7 | 902 | config ARCH_MULTI_V6_V7 |
@@ -1794,6 +1790,7 @@ config XEN | |||
1794 | depends on ARM && AEABI && OF | 1790 | depends on ARM && AEABI && OF |
1795 | depends on CPU_V7 && !CPU_V6 | 1791 | depends on CPU_V7 && !CPU_V6 |
1796 | depends on !GENERIC_ATOMIC64 | 1792 | depends on !GENERIC_ATOMIC64 |
1793 | select ARM_PSCI | ||
1797 | help | 1794 | help |
1798 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1795 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
1799 | 1796 | ||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 8562af4fe8fd..b9f7121e6ecf 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -200,8 +200,8 @@ dtb-$(CONFIG_ARCH_VERSATILE) += versatile-ab.dtb \ | |||
200 | dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \ | 200 | dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \ |
201 | vexpress-v2p-ca9.dtb \ | 201 | vexpress-v2p-ca9.dtb \ |
202 | vexpress-v2p-ca15-tc1.dtb \ | 202 | vexpress-v2p-ca15-tc1.dtb \ |
203 | vexpress-v2p-ca15_a7.dtb \ | 203 | vexpress-v2p-ca15_a7.dtb |
204 | xenvm-4.2.dtb | 204 | dtb-$(CONFIG_ARCH_VIRT) += xenvm-4.2.dtb |
205 | dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \ | 205 | dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \ |
206 | wm8505-ref.dtb \ | 206 | wm8505-ref.dtb \ |
207 | wm8650-mid.dtb \ | 207 | wm8650-mid.dtb \ |
diff --git a/arch/arm/boot/dts/cros5250-common.dtsi b/arch/arm/boot/dts/cros5250-common.dtsi index 0a61bbb9102f..3f0239ec1bc5 100644 --- a/arch/arm/boot/dts/cros5250-common.dtsi +++ b/arch/arm/boot/dts/cros5250-common.dtsi | |||
@@ -175,6 +175,14 @@ | |||
175 | i2c@12C70000 { | 175 | i2c@12C70000 { |
176 | samsung,i2c-sda-delay = <100>; | 176 | samsung,i2c-sda-delay = <100>; |
177 | samsung,i2c-max-bus-freq = <378000>; | 177 | samsung,i2c-max-bus-freq = <378000>; |
178 | |||
179 | trackpad { | ||
180 | reg = <0x67>; | ||
181 | compatible = "cypress,cyapa"; | ||
182 | interrupts = <2 0>; | ||
183 | interrupt-parent = <&gpx1>; | ||
184 | wakeup-source; | ||
185 | }; | ||
178 | }; | 186 | }; |
179 | 187 | ||
180 | i2c@12C80000 { | 188 | i2c@12C80000 { |
diff --git a/arch/arm/boot/dts/xenvm-4.2.dts b/arch/arm/boot/dts/xenvm-4.2.dts index ec3f9528e180..336915151398 100644 --- a/arch/arm/boot/dts/xenvm-4.2.dts +++ b/arch/arm/boot/dts/xenvm-4.2.dts | |||
@@ -29,6 +29,19 @@ | |||
29 | compatible = "arm,cortex-a15"; | 29 | compatible = "arm,cortex-a15"; |
30 | reg = <0>; | 30 | reg = <0>; |
31 | }; | 31 | }; |
32 | |||
33 | cpu@1 { | ||
34 | device_type = "cpu"; | ||
35 | compatible = "arm,cortex-a15"; | ||
36 | reg = <1>; | ||
37 | }; | ||
38 | }; | ||
39 | |||
40 | psci { | ||
41 | compatible = "arm,psci"; | ||
42 | method = "hvc"; | ||
43 | cpu_off = <1>; | ||
44 | cpu_on = <2>; | ||
32 | }; | 45 | }; |
33 | 46 | ||
34 | memory@80000000 { | 47 | memory@80000000 { |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index 33903ca0d879..c1ef64bc5abd 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -137,6 +137,8 @@ CONFIG_SERIAL_8250_DETECT_IRQ=y | |||
137 | CONFIG_SERIAL_8250_RSA=y | 137 | CONFIG_SERIAL_8250_RSA=y |
138 | CONFIG_SERIAL_AMBA_PL011=y | 138 | CONFIG_SERIAL_AMBA_PL011=y |
139 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | 139 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y |
140 | CONFIG_SERIAL_OMAP=y | ||
141 | CONFIG_SERIAL_OMAP_CONSOLE=y | ||
140 | CONFIG_HW_RANDOM=y | 142 | CONFIG_HW_RANDOM=y |
141 | CONFIG_I2C_CHARDEV=y | 143 | CONFIG_I2C_CHARDEV=y |
142 | CONFIG_SPI=y | 144 | CONFIG_SPI=y |
@@ -153,6 +155,7 @@ CONFIG_OMAP_WATCHDOG=y | |||
153 | CONFIG_TWL4030_WATCHDOG=y | 155 | CONFIG_TWL4030_WATCHDOG=y |
154 | CONFIG_MFD_TPS65217=y | 156 | CONFIG_MFD_TPS65217=y |
155 | CONFIG_MFD_TPS65910=y | 157 | CONFIG_MFD_TPS65910=y |
158 | CONFIG_TWL6040_CORE=y | ||
156 | CONFIG_REGULATOR_TWL4030=y | 159 | CONFIG_REGULATOR_TWL4030=y |
157 | CONFIG_REGULATOR_TPS65023=y | 160 | CONFIG_REGULATOR_TPS65023=y |
158 | CONFIG_REGULATOR_TPS6507X=y | 161 | CONFIG_REGULATOR_TPS6507X=y |
@@ -195,6 +198,7 @@ CONFIG_SND_USB_AUDIO=m | |||
195 | CONFIG_SND_SOC=m | 198 | CONFIG_SND_SOC=m |
196 | CONFIG_SND_OMAP_SOC=m | 199 | CONFIG_SND_OMAP_SOC=m |
197 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m | 200 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m |
201 | CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m | ||
198 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m | 202 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m |
199 | CONFIG_USB=y | 203 | CONFIG_USB=y |
200 | CONFIG_USB_DEBUG=y | 204 | CONFIG_USB_DEBUG=y |
diff --git a/arch/arm/include/asm/xen/hypercall.h b/arch/arm/include/asm/xen/hypercall.h index 8a823253d775..799f42ecca63 100644 --- a/arch/arm/include/asm/xen/hypercall.h +++ b/arch/arm/include/asm/xen/hypercall.h | |||
@@ -46,6 +46,7 @@ int HYPERVISOR_event_channel_op(int cmd, void *arg); | |||
46 | unsigned long HYPERVISOR_hvm_op(int op, void *arg); | 46 | unsigned long HYPERVISOR_hvm_op(int op, void *arg); |
47 | int HYPERVISOR_memory_op(unsigned int cmd, void *arg); | 47 | int HYPERVISOR_memory_op(unsigned int cmd, void *arg); |
48 | int HYPERVISOR_physdev_op(int cmd, void *arg); | 48 | int HYPERVISOR_physdev_op(int cmd, void *arg); |
49 | int HYPERVISOR_vcpu_op(int cmd, int vcpuid, void *extra_args); | ||
49 | 50 | ||
50 | static inline void | 51 | static inline void |
51 | MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va, | 52 | MULTI_update_va_mapping(struct multicall_entry *mcl, unsigned long va, |
diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index 70f1bdeb241b..5af04f6daa33 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c | |||
@@ -180,6 +180,13 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) | |||
180 | unsigned long dt_root; | 180 | unsigned long dt_root; |
181 | const char *model; | 181 | const char *model; |
182 | 182 | ||
183 | #ifdef CONFIG_ARCH_MULTIPLATFORM | ||
184 | DT_MACHINE_START(GENERIC_DT, "Generic DT based system") | ||
185 | MACHINE_END | ||
186 | |||
187 | mdesc_best = (struct machine_desc *)&__mach_desc_GENERIC_DT; | ||
188 | #endif | ||
189 | |||
183 | if (!dt_phys) | 190 | if (!dt_phys) |
184 | return NULL; | 191 | return NULL; |
185 | 192 | ||
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 728007c4a2b7..1522c7ae31b0 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/bootmem.h> | 18 | #include <linux/bootmem.h> |
19 | #include <linux/seq_file.h> | 19 | #include <linux/seq_file.h> |
20 | #include <linux/screen_info.h> | 20 | #include <linux/screen_info.h> |
21 | #include <linux/of_platform.h> | ||
21 | #include <linux/init.h> | 22 | #include <linux/init.h> |
22 | #include <linux/kexec.h> | 23 | #include <linux/kexec.h> |
23 | #include <linux/of_fdt.h> | 24 | #include <linux/of_fdt.h> |
@@ -659,9 +660,19 @@ struct screen_info screen_info = { | |||
659 | 660 | ||
660 | static int __init customize_machine(void) | 661 | static int __init customize_machine(void) |
661 | { | 662 | { |
662 | /* customizes platform devices, or adds new ones */ | 663 | /* |
664 | * customizes platform devices, or adds new ones | ||
665 | * On DT based machines, we fall back to populating the | ||
666 | * machine from the device tree, if no callback is provided, | ||
667 | * otherwise we would always need an init_machine callback. | ||
668 | */ | ||
663 | if (machine_desc->init_machine) | 669 | if (machine_desc->init_machine) |
664 | machine_desc->init_machine(); | 670 | machine_desc->init_machine(); |
671 | #ifdef CONFIG_OF | ||
672 | else | ||
673 | of_platform_populate(NULL, of_default_bus_match_table, | ||
674 | NULL, NULL); | ||
675 | #endif | ||
665 | return 0; | 676 | return 0; |
666 | } | 677 | } |
667 | arch_initcall(customize_machine); | 678 | arch_initcall(customize_machine); |
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 78f795d73cb6..ba44328464f3 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
@@ -5,6 +5,7 @@ config ARCH_MXC | |||
5 | select AUTO_ZRELADDR if !ZBOOT_ROM | 5 | select AUTO_ZRELADDR if !ZBOOT_ROM |
6 | select CLKDEV_LOOKUP | 6 | select CLKDEV_LOOKUP |
7 | select CLKSRC_MMIO | 7 | select CLKSRC_MMIO |
8 | select GENERIC_ALLOCATOR | ||
8 | select GENERIC_CLOCKEVENTS | 9 | select GENERIC_CLOCKEVENTS |
9 | select GENERIC_IRQ_CHIP | 10 | select GENERIC_IRQ_CHIP |
10 | select MULTI_IRQ_HANDLER | 11 | select MULTI_IRQ_HANDLER |
@@ -61,10 +62,6 @@ config MXC_ULPI | |||
61 | config ARCH_HAS_RNGA | 62 | config ARCH_HAS_RNGA |
62 | bool | 63 | bool |
63 | 64 | ||
64 | config IRAM_ALLOC | ||
65 | bool | ||
66 | select GENERIC_ALLOCATOR | ||
67 | |||
68 | config HAVE_IMX_ANATOP | 65 | config HAVE_IMX_ANATOP |
69 | bool | 66 | bool |
70 | 67 | ||
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 930958973f81..70ae7c490ac0 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile | |||
@@ -23,7 +23,6 @@ obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o | |||
23 | obj-$(CONFIG_MXC_TZIC) += tzic.o | 23 | obj-$(CONFIG_MXC_TZIC) += tzic.o |
24 | obj-$(CONFIG_MXC_AVIC) += avic.o | 24 | obj-$(CONFIG_MXC_AVIC) += avic.o |
25 | 25 | ||
26 | obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o | ||
27 | obj-$(CONFIG_MXC_ULPI) += ulpi.o | 26 | obj-$(CONFIG_MXC_ULPI) += ulpi.o |
28 | obj-$(CONFIG_MXC_USE_EPIT) += epit.o | 27 | obj-$(CONFIG_MXC_USE_EPIT) += epit.o |
29 | obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o | 28 | obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o |
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index 4cba7dbb079f..c08ae3f99cee 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define __ASM_ARCH_MXC_COMMON_H__ | 12 | #define __ASM_ARCH_MXC_COMMON_H__ |
13 | 13 | ||
14 | struct platform_device; | 14 | struct platform_device; |
15 | struct pt_regs; | ||
15 | struct clk; | 16 | struct clk; |
16 | enum mxc_cpu_pwr_mode; | 17 | enum mxc_cpu_pwr_mode; |
17 | 18 | ||
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S index a58c8b0527cc..67b9c48dcafe 100644 --- a/arch/arm/mach-imx/headsmp.S +++ b/arch/arm/mach-imx/headsmp.S | |||
@@ -24,7 +24,7 @@ ENTRY(v7_secondary_startup) | |||
24 | ENDPROC(v7_secondary_startup) | 24 | ENDPROC(v7_secondary_startup) |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #ifdef CONFIG_PM | 27 | #ifdef CONFIG_ARM_CPU_SUSPEND |
28 | /* | 28 | /* |
29 | * The following code must assume it is running from physical address | 29 | * The following code must assume it is running from physical address |
30 | * where absolute virtual addresses to the data section have to be | 30 | * where absolute virtual addresses to the data section have to be |
diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 5e91112dcbee..3daf1ed90579 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c | |||
@@ -11,7 +11,9 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
14 | #include <linux/jiffies.h> | ||
14 | #include <asm/cp15.h> | 15 | #include <asm/cp15.h> |
16 | #include <asm/proc-fns.h> | ||
15 | 17 | ||
16 | #include "common.h" | 18 | #include "common.h" |
17 | 19 | ||
diff --git a/arch/arm/mach-imx/iram_alloc.c b/arch/arm/mach-imx/iram_alloc.c deleted file mode 100644 index e05cf407db65..000000000000 --- a/arch/arm/mach-imx/iram_alloc.c +++ /dev/null | |||
@@ -1,73 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version 2 | ||
7 | * of the License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
17 | * MA 02110-1301, USA. | ||
18 | */ | ||
19 | |||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/io.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/spinlock.h> | ||
24 | #include <linux/genalloc.h> | ||
25 | #include "linux/platform_data/imx-iram.h" | ||
26 | |||
27 | static unsigned long iram_phys_base; | ||
28 | static void __iomem *iram_virt_base; | ||
29 | static struct gen_pool *iram_pool; | ||
30 | |||
31 | static inline void __iomem *iram_phys_to_virt(unsigned long p) | ||
32 | { | ||
33 | return iram_virt_base + (p - iram_phys_base); | ||
34 | } | ||
35 | |||
36 | void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr) | ||
37 | { | ||
38 | if (!iram_pool) | ||
39 | return NULL; | ||
40 | |||
41 | *dma_addr = gen_pool_alloc(iram_pool, size); | ||
42 | pr_debug("iram alloc - %dB@0x%lX\n", size, *dma_addr); | ||
43 | if (!*dma_addr) | ||
44 | return NULL; | ||
45 | return iram_phys_to_virt(*dma_addr); | ||
46 | } | ||
47 | EXPORT_SYMBOL(iram_alloc); | ||
48 | |||
49 | void iram_free(unsigned long addr, unsigned int size) | ||
50 | { | ||
51 | if (!iram_pool) | ||
52 | return; | ||
53 | |||
54 | gen_pool_free(iram_pool, addr, size); | ||
55 | } | ||
56 | EXPORT_SYMBOL(iram_free); | ||
57 | |||
58 | int __init iram_init(unsigned long base, unsigned long size) | ||
59 | { | ||
60 | iram_phys_base = base; | ||
61 | |||
62 | iram_pool = gen_pool_create(PAGE_SHIFT, -1); | ||
63 | if (!iram_pool) | ||
64 | return -ENOMEM; | ||
65 | |||
66 | gen_pool_add(iram_pool, base, size, -1); | ||
67 | iram_virt_base = ioremap(iram_phys_base, size); | ||
68 | if (!iram_virt_base) | ||
69 | return -EIO; | ||
70 | |||
71 | pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, iram_virt_base); | ||
72 | return 0; | ||
73 | } | ||
diff --git a/arch/arm/mach-msm/last_radio_log.c b/arch/arm/mach-msm/last_radio_log.c index 7777767ee89a..9c392a29fc7e 100644 --- a/arch/arm/mach-msm/last_radio_log.c +++ b/arch/arm/mach-msm/last_radio_log.c | |||
@@ -66,6 +66,6 @@ void msm_init_last_radio_log(struct module *owner) | |||
66 | pr_err("%s: last radio log is %d bytes long\n", __func__, | 66 | pr_err("%s: last radio log is %d bytes long\n", __func__, |
67 | radio_log_size); | 67 | radio_log_size); |
68 | last_radio_log_fops.owner = owner; | 68 | last_radio_log_fops.owner = owner; |
69 | entry->size = radio_log_size; | 69 | proc_set_size(entry, radio_log_size); |
70 | } | 70 | } |
71 | EXPORT_SYMBOL(msm_init_last_radio_log); | 71 | EXPORT_SYMBOL(msm_init_last_radio_log); |
diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c index 1a4e887f028d..68ab858e27b7 100644 --- a/arch/arm/mach-omap1/dma.c +++ b/arch/arm/mach-omap1/dma.c | |||
@@ -301,7 +301,7 @@ static int __init omap1_system_dma_init(void) | |||
301 | if (ret) { | 301 | if (ret) { |
302 | dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n", | 302 | dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n", |
303 | __func__, pdev->name, pdev->id); | 303 | __func__, pdev->name, pdev->id); |
304 | goto exit_device_put; | 304 | goto exit_iounmap; |
305 | } | 305 | } |
306 | 306 | ||
307 | p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL); | 307 | p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL); |
@@ -309,7 +309,7 @@ static int __init omap1_system_dma_init(void) | |||
309 | dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n", | 309 | dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n", |
310 | __func__, pdev->name); | 310 | __func__, pdev->name); |
311 | ret = -ENOMEM; | 311 | ret = -ENOMEM; |
312 | goto exit_device_del; | 312 | goto exit_iounmap; |
313 | } | 313 | } |
314 | 314 | ||
315 | d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL); | 315 | d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL); |
@@ -402,8 +402,8 @@ exit_release_d: | |||
402 | kfree(d); | 402 | kfree(d); |
403 | exit_release_p: | 403 | exit_release_p: |
404 | kfree(p); | 404 | kfree(p); |
405 | exit_device_del: | 405 | exit_iounmap: |
406 | platform_device_del(pdev); | 406 | iounmap(dma_base); |
407 | exit_device_put: | 407 | exit_device_put: |
408 | platform_device_put(pdev); | 408 | platform_device_put(pdev); |
409 | 409 | ||
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 857b1f097fd8..f49cd51e162a 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -37,8 +37,6 @@ config ARCH_OMAP2PLUS_TYPICAL | |||
37 | select NEON if ARCH_OMAP3 || ARCH_OMAP4 || SOC_OMAP5 | 37 | select NEON if ARCH_OMAP3 || ARCH_OMAP4 || SOC_OMAP5 |
38 | select PM_RUNTIME | 38 | select PM_RUNTIME |
39 | select REGULATOR | 39 | select REGULATOR |
40 | select SERIAL_OMAP | ||
41 | select SERIAL_OMAP_CONSOLE | ||
42 | select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 | 40 | select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 |
43 | select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4 | 41 | select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4 |
44 | select VFP | 42 | select VFP |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 62bb352c2d37..55a9d6777683 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -32,12 +32,12 @@ obj-$(CONFIG_SOC_HAS_OMAP2_SDRC) += sdrc.o | |||
32 | 32 | ||
33 | # SMP support ONLY available for OMAP4 | 33 | # SMP support ONLY available for OMAP4 |
34 | 34 | ||
35 | obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o | 35 | smp-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o |
36 | obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o | 36 | smp-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o |
37 | omap-4-5-common = omap4-common.o omap-wakeupgen.o \ | 37 | omap-4-5-common = omap4-common.o omap-wakeupgen.o \ |
38 | sleep44xx.o | 38 | sleep44xx.o |
39 | obj-$(CONFIG_ARCH_OMAP4) += $(omap-4-5-common) | 39 | obj-$(CONFIG_ARCH_OMAP4) += $(omap-4-5-common) $(smp-y) |
40 | obj-$(CONFIG_SOC_OMAP5) += $(omap-4-5-common) | 40 | obj-$(CONFIG_SOC_OMAP5) += $(omap-4-5-common) $(smp-y) |
41 | 41 | ||
42 | plus_sec := $(call as-instr,.arch_extension sec,+sec) | 42 | plus_sec := $(call as-instr,.arch_extension sec,+sec) |
43 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) | 43 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 6de78605c0af..04c116555412 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -112,13 +112,13 @@ static u8 omap3_beagle_version; | |||
112 | */ | 112 | */ |
113 | static struct { | 113 | static struct { |
114 | int mmc1_gpio_wp; | 114 | int mmc1_gpio_wp; |
115 | int usb_pwr_level; | 115 | bool usb_pwr_level; /* 0 - Active Low, 1 - Active High */ |
116 | int dvi_pd_gpio; | 116 | int dvi_pd_gpio; |
117 | int usr_button_gpio; | 117 | int usr_button_gpio; |
118 | int mmc_caps; | 118 | int mmc_caps; |
119 | } beagle_config = { | 119 | } beagle_config = { |
120 | .mmc1_gpio_wp = -EINVAL, | 120 | .mmc1_gpio_wp = -EINVAL, |
121 | .usb_pwr_level = GPIOF_OUT_INIT_LOW, | 121 | .usb_pwr_level = 0, |
122 | .dvi_pd_gpio = -EINVAL, | 122 | .dvi_pd_gpio = -EINVAL, |
123 | .usr_button_gpio = 4, | 123 | .usr_button_gpio = 4, |
124 | .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 124 | .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
@@ -178,7 +178,7 @@ static void __init omap3_beagle_init_rev(void) | |||
178 | case 0: | 178 | case 0: |
179 | printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n"); | 179 | printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n"); |
180 | omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; | 180 | omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; |
181 | beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH; | 181 | beagle_config.usb_pwr_level = 1; |
182 | beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA; | 182 | beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA; |
183 | break; | 183 | break; |
184 | case 2: | 184 | case 2: |
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index 1a884670a6c4..18ca61e300b3 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
@@ -73,11 +73,11 @@ | |||
73 | #define LIS302_IRQ1_GPIO 181 | 73 | #define LIS302_IRQ1_GPIO 181 |
74 | #define LIS302_IRQ2_GPIO 180 /* Not yet in use */ | 74 | #define LIS302_IRQ2_GPIO 180 /* Not yet in use */ |
75 | 75 | ||
76 | /* list all spi devices here */ | 76 | /* List all SPI devices here. Note that the list/probe order seems to matter! */ |
77 | enum { | 77 | enum { |
78 | RX51_SPI_WL1251, | 78 | RX51_SPI_WL1251, |
79 | RX51_SPI_MIPID, /* LCD panel */ | ||
80 | RX51_SPI_TSC2005, /* Touch Controller */ | 79 | RX51_SPI_TSC2005, /* Touch Controller */ |
80 | RX51_SPI_MIPID, /* LCD panel */ | ||
81 | }; | 81 | }; |
82 | 82 | ||
83 | static struct wl12xx_platform_data wl1251_pdata; | 83 | static struct wl12xx_platform_data wl1251_pdata; |
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index dab9fc014b97..49fd0d501c9b 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/init.h> | 28 | #include <linux/init.h> |
29 | #include <linux/device.h> | 29 | #include <linux/device.h> |
30 | #include <linux/dma-mapping.h> | 30 | #include <linux/dma-mapping.h> |
31 | #include <linux/of.h> | ||
31 | #include <linux/omap-dma.h> | 32 | #include <linux/omap-dma.h> |
32 | 33 | ||
33 | #include "soc.h" | 34 | #include "soc.h" |
@@ -304,6 +305,9 @@ static int __init omap2_system_dma_init(void) | |||
304 | if (res) | 305 | if (res) |
305 | return res; | 306 | return res; |
306 | 307 | ||
308 | if (of_have_populated_dt()) | ||
309 | return res; | ||
310 | |||
307 | pdev = platform_device_register_full(&omap_dma_dev_info); | 311 | pdev = platform_device_register_full(&omap_dma_dev_info); |
308 | if (IS_ERR(pdev)) | 312 | if (IS_ERR(pdev)) |
309 | return PTR_ERR(pdev); | 313 | return PTR_ERR(pdev); |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index ed946df5ad8a..6c4da1254f53 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -1520,36 +1520,22 @@ static int gpmc_probe_dt(struct platform_device *pdev) | |||
1520 | return ret; | 1520 | return ret; |
1521 | } | 1521 | } |
1522 | 1522 | ||
1523 | for_each_node_by_name(child, "nand") { | 1523 | for_each_child_of_node(pdev->dev.of_node, child) { |
1524 | ret = gpmc_probe_nand_child(pdev, child); | ||
1525 | if (ret < 0) { | ||
1526 | of_node_put(child); | ||
1527 | return ret; | ||
1528 | } | ||
1529 | } | ||
1530 | 1524 | ||
1531 | for_each_node_by_name(child, "onenand") { | 1525 | if (!child->name) |
1532 | ret = gpmc_probe_onenand_child(pdev, child); | 1526 | continue; |
1533 | if (ret < 0) { | ||
1534 | of_node_put(child); | ||
1535 | return ret; | ||
1536 | } | ||
1537 | } | ||
1538 | 1527 | ||
1539 | for_each_node_by_name(child, "nor") { | 1528 | if (of_node_cmp(child->name, "nand") == 0) |
1540 | ret = gpmc_probe_generic_child(pdev, child); | 1529 | ret = gpmc_probe_nand_child(pdev, child); |
1541 | if (ret < 0) { | 1530 | else if (of_node_cmp(child->name, "onenand") == 0) |
1542 | of_node_put(child); | 1531 | ret = gpmc_probe_onenand_child(pdev, child); |
1543 | return ret; | 1532 | else if (of_node_cmp(child->name, "ethernet") == 0 || |
1544 | } | 1533 | of_node_cmp(child->name, "nor") == 0) |
1545 | } | 1534 | ret = gpmc_probe_generic_child(pdev, child); |
1546 | 1535 | ||
1547 | for_each_node_by_name(child, "ethernet") { | 1536 | if (WARN(ret < 0, "%s: probing gpmc child %s failed\n", |
1548 | ret = gpmc_probe_generic_child(pdev, child); | 1537 | __func__, child->full_name)) |
1549 | if (ret < 0) { | ||
1550 | of_node_put(child); | 1538 | of_node_put(child); |
1551 | return ret; | ||
1552 | } | ||
1553 | } | 1539 | } |
1554 | 1540 | ||
1555 | return 0; | 1541 | return 0; |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 0f4c18e6e60c..1272c41d4749 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -419,11 +419,15 @@ void __init omap3xxx_check_revision(void) | |||
419 | cpu_rev = "1.0"; | 419 | cpu_rev = "1.0"; |
420 | break; | 420 | break; |
421 | case 1: | 421 | case 1: |
422 | /* FALLTHROUGH */ | ||
423 | default: | ||
424 | omap_revision = AM335X_REV_ES2_0; | 422 | omap_revision = AM335X_REV_ES2_0; |
425 | cpu_rev = "2.0"; | 423 | cpu_rev = "2.0"; |
426 | break; | 424 | break; |
425 | case 2: | ||
426 | /* FALLTHROUGH */ | ||
427 | default: | ||
428 | omap_revision = AM335X_REV_ES2_1; | ||
429 | cpu_rev = "2.1"; | ||
430 | break; | ||
427 | } | 431 | } |
428 | break; | 432 | break; |
429 | case 0xb8f2: | 433 | case 0xb8f2: |
@@ -644,13 +648,12 @@ void __init omap_soc_device_init(void) | |||
644 | soc_dev_attr->revision = soc_rev; | 648 | soc_dev_attr->revision = soc_rev; |
645 | 649 | ||
646 | soc_dev = soc_device_register(soc_dev_attr); | 650 | soc_dev = soc_device_register(soc_dev_attr); |
647 | if (IS_ERR_OR_NULL(soc_dev)) { | 651 | if (IS_ERR(soc_dev)) { |
648 | kfree(soc_dev_attr); | 652 | kfree(soc_dev_attr); |
649 | return; | 653 | return; |
650 | } | 654 | } |
651 | 655 | ||
652 | parent = soc_device_to_device(soc_dev); | 656 | parent = soc_device_to_device(soc_dev); |
653 | if (!IS_ERR_OR_NULL(parent)) | 657 | device_create_file(parent, &omap_soc_attr); |
654 | device_create_file(parent, &omap_soc_attr); | ||
655 | } | 658 | } |
656 | #endif /* CONFIG_SOC_BUS */ | 659 | #endif /* CONFIG_SOC_BUS */ |
diff --git a/arch/arm/mach-omap2/mux34xx.h b/arch/arm/mach-omap2/mux34xx.h index 6543ebf8ecfc..3f26d297c082 100644 --- a/arch/arm/mach-omap2/mux34xx.h +++ b/arch/arm/mach-omap2/mux34xx.h | |||
@@ -393,6 +393,10 @@ | |||
393 | #define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c | 393 | #define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c |
394 | #define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e | 394 | #define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e |
395 | #define OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET 0xa20 | 395 | #define OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET 0xa20 |
396 | #define OMAP3_CONTROL_PADCONF_GPIO_127 0xa24 | ||
397 | #define OMAP3_CONTROL_PADCONF_GPIO_126 0xa26 | ||
398 | #define OMAP3_CONTROL_PADCONF_GPIO_128 0xa28 | ||
399 | #define OMAP3_CONTROL_PADCONF_GPIO_129 0xa2a | ||
396 | 400 | ||
397 | #define OMAP3_CONTROL_PADCONF_MUX_SIZE \ | 401 | #define OMAP3_CONTROL_PADCONF_MUX_SIZE \ |
398 | (OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET + 0x2) | 402 | (OMAP3_CONTROL_PADCONF_GPIO_129 + 0x2) |
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index eeea4fa28fbc..e6d230700b2b 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c | |||
@@ -876,4 +876,4 @@ static int __init omap_device_late_init(void) | |||
876 | bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle); | 876 | bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle); |
877 | return 0; | 877 | return 0; |
878 | } | 878 | } |
879 | omap_late_initcall(omap_device_late_init); | 879 | omap_late_initcall_sync(omap_device_late_init); |
diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index 18fdeeb3a44a..197cc16870d9 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h | |||
@@ -396,6 +396,7 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
396 | #define AM335X_CLASS 0x33500033 | 396 | #define AM335X_CLASS 0x33500033 |
397 | #define AM335X_REV_ES1_0 AM335X_CLASS | 397 | #define AM335X_REV_ES1_0 AM335X_CLASS |
398 | #define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8)) | 398 | #define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8)) |
399 | #define AM335X_REV_ES2_1 (AM335X_CLASS | (0x2 << 8)) | ||
399 | 400 | ||
400 | #define OMAP443X_CLASS 0x44300044 | 401 | #define OMAP443X_CLASS 0x44300044 |
401 | #define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8)) | 402 | #define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8)) |
@@ -496,6 +497,7 @@ level(__##fn); | |||
496 | #define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn) | 497 | #define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn) |
497 | #define omap_device_initcall(fn) omap_initcall(device_initcall, fn) | 498 | #define omap_device_initcall(fn) omap_initcall(device_initcall, fn) |
498 | #define omap_late_initcall(fn) omap_initcall(late_initcall, fn) | 499 | #define omap_late_initcall(fn) omap_initcall(late_initcall, fn) |
500 | #define omap_late_initcall_sync(fn) omap_initcall(late_initcall_sync, fn) | ||
499 | 501 | ||
500 | #endif /* __ASSEMBLY__ */ | 502 | #endif /* __ASSEMBLY__ */ |
501 | 503 | ||
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 05481490a508..f8b23b8040d9 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
@@ -553,6 +553,8 @@ static inline void __init realtime_counter_init(void) | |||
553 | clksrc_nr, clksrc_src, clksrc_prop) \ | 553 | clksrc_nr, clksrc_src, clksrc_prop) \ |
554 | void __init omap##name##_gptimer_timer_init(void) \ | 554 | void __init omap##name##_gptimer_timer_init(void) \ |
555 | { \ | 555 | { \ |
556 | if (omap_clk_init) \ | ||
557 | omap_clk_init(); \ | ||
556 | omap_dmtimer_init(); \ | 558 | omap_dmtimer_init(); \ |
557 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ | 559 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ |
558 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ | 560 | omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \ |
@@ -563,6 +565,8 @@ void __init omap##name##_gptimer_timer_init(void) \ | |||
563 | clksrc_nr, clksrc_src, clksrc_prop) \ | 565 | clksrc_nr, clksrc_src, clksrc_prop) \ |
564 | void __init omap##name##_sync32k_timer_init(void) \ | 566 | void __init omap##name##_sync32k_timer_init(void) \ |
565 | { \ | 567 | { \ |
568 | if (omap_clk_init) \ | ||
569 | omap_clk_init(); \ | ||
566 | omap_dmtimer_init(); \ | 570 | omap_dmtimer_init(); \ |
567 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ | 571 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ |
568 | /* Enable the use of clocksource="gp_timer" kernel parameter */ \ | 572 | /* Enable the use of clocksource="gp_timer" kernel parameter */ \ |
diff --git a/arch/arm/mach-prima2/Kconfig b/arch/arm/mach-prima2/Kconfig index 80ca974b2f82..6988b117fc17 100644 --- a/arch/arm/mach-prima2/Kconfig +++ b/arch/arm/mach-prima2/Kconfig | |||
@@ -38,7 +38,7 @@ config ARCH_MARCO | |||
38 | select CPU_V7 | 38 | select CPU_V7 |
39 | select HAVE_ARM_SCU if SMP | 39 | select HAVE_ARM_SCU if SMP |
40 | select HAVE_SMP | 40 | select HAVE_SMP |
41 | select SMP_ON_UP | 41 | select SMP_ON_UP if SMP |
42 | help | 42 | help |
43 | Support for CSR SiRFSoC ARM Cortex A9 Platform | 43 | Support for CSR SiRFSoC ARM Cortex A9 Platform |
44 | 44 | ||
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 9075461999c1..96100dbf5a2e 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -162,7 +162,6 @@ config MACH_XCEP | |||
162 | select MTD | 162 | select MTD |
163 | select MTD_CFI | 163 | select MTD_CFI |
164 | select MTD_CFI_INTELEXT | 164 | select MTD_CFI_INTELEXT |
165 | select MTD_CHAR | ||
166 | select MTD_PHYSMAP | 165 | select MTD_PHYSMAP |
167 | select PXA25x | 166 | select PXA25x |
168 | select SMC91X | 167 | select SMC91X |
diff --git a/arch/arm/mach-spear/spear13xx.c b/arch/arm/mach-spear/spear13xx.c index 3621599c38ad..7aa6e8cf830f 100644 --- a/arch/arm/mach-spear/spear13xx.c +++ b/arch/arm/mach-spear/spear13xx.c | |||
@@ -35,6 +35,8 @@ void __init spear13xx_l2x0_init(void) | |||
35 | * write alloc and 'Full line of zero' options | 35 | * write alloc and 'Full line of zero' options |
36 | * | 36 | * |
37 | */ | 37 | */ |
38 | if (!IS_ENABLED(CONFIG_CACHE_L2X0)) | ||
39 | return; | ||
38 | 40 | ||
39 | writel_relaxed(0x06, VA_L2CC_BASE + L2X0_PREFETCH_CTRL); | 41 | writel_relaxed(0x06, VA_L2CC_BASE + L2X0_PREFETCH_CTRL); |
40 | 42 | ||
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 20c3b372cdf5..84d72fc36dfe 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig | |||
@@ -63,6 +63,7 @@ config ARCH_TEGRA_114_SOC | |||
63 | select ARM_ARCH_TIMER | 63 | select ARM_ARCH_TIMER |
64 | select ARM_GIC | 64 | select ARM_GIC |
65 | select ARM_L1_CACHE_SHIFT_6 | 65 | select ARM_L1_CACHE_SHIFT_6 |
66 | select CPU_FREQ_TABLE if CPU_FREQ | ||
66 | select CPU_V7 | 67 | select CPU_V7 |
67 | select PINCTRL | 68 | select PINCTRL |
68 | select PINCTRL_TEGRA114 | 69 | select PINCTRL_TEGRA114 |
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index f66d7deae46d..6a4387e39df8 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -19,6 +19,8 @@ if ARCH_U8500 | |||
19 | config UX500_SOC_COMMON | 19 | config UX500_SOC_COMMON |
20 | bool | 20 | bool |
21 | default y | 21 | default y |
22 | select ABX500_CORE | ||
23 | select AB8500_CORE | ||
22 | select ARM_ERRATA_754322 | 24 | select ARM_ERRATA_754322 |
23 | select ARM_ERRATA_764369 if SMP | 25 | select ARM_ERRATA_764369 if SMP |
24 | select ARM_GIC | 26 | select ARM_GIC |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index a15dd6b63a8f..3cd555ac6d0a 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -403,8 +403,8 @@ static int mop500_prox_activate(struct device *dev) | |||
403 | "no regulator\n"); | 403 | "no regulator\n"); |
404 | return PTR_ERR(prox_regulator); | 404 | return PTR_ERR(prox_regulator); |
405 | } | 405 | } |
406 | regulator_enable(prox_regulator); | 406 | |
407 | return 0; | 407 | return regulator_enable(prox_regulator); |
408 | } | 408 | } |
409 | 409 | ||
410 | static void mop500_prox_deactivate(struct device *dev) | 410 | static void mop500_prox_deactivate(struct device *dev) |
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 995928ba22fd..e90b5ab23b6d 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -191,7 +191,7 @@ static const char *db8500_read_soc_id(void) | |||
191 | /* Throw these device-specific numbers into the entropy pool */ | 191 | /* Throw these device-specific numbers into the entropy pool */ |
192 | add_device_randomness(uid, 0x14); | 192 | add_device_randomness(uid, 0x14); |
193 | return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x", | 193 | return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x", |
194 | readl((u32 *)uid+1), | 194 | readl((u32 *)uid+0), |
195 | readl((u32 *)uid+1), readl((u32 *)uid+2), | 195 | readl((u32 *)uid+1), readl((u32 *)uid+2), |
196 | readl((u32 *)uid+3), readl((u32 *)uid+4)); | 196 | readl((u32 *)uid+3), readl((u32 *)uid+4)); |
197 | } | 197 | } |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index b6083bb1eb8c..8802030df98d 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
@@ -450,7 +450,6 @@ static void __init v2m_dt_init(void) | |||
450 | 450 | ||
451 | static const char * const v2m_dt_match[] __initconst = { | 451 | static const char * const v2m_dt_match[] __initconst = { |
452 | "arm,vexpress", | 452 | "arm,vexpress", |
453 | "xen,xenvm", | ||
454 | NULL, | 453 | NULL, |
455 | }; | 454 | }; |
456 | 455 | ||
diff --git a/arch/arm/mach-virt/virt.c b/arch/arm/mach-virt/virt.c index adc0945255ae..061f283f579e 100644 --- a/arch/arm/mach-virt/virt.c +++ b/arch/arm/mach-virt/virt.c | |||
@@ -32,6 +32,7 @@ static void __init virt_init(void) | |||
32 | 32 | ||
33 | static const char *virt_dt_match[] = { | 33 | static const char *virt_dt_match[] = { |
34 | "linux,dummy-virt", | 34 | "linux,dummy-virt", |
35 | "xen,xenvm", | ||
35 | NULL | 36 | NULL |
36 | }; | 37 | }; |
37 | 38 | ||
diff --git a/arch/arm/plat-orion/Makefile b/arch/arm/plat-orion/Makefile index 2eca54b65906..9433605cd290 100644 --- a/arch/arm/plat-orion/Makefile +++ b/arch/arm/plat-orion/Makefile | |||
@@ -3,6 +3,6 @@ | |||
3 | # | 3 | # |
4 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include | 4 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include |
5 | 5 | ||
6 | orion-gpio-$(CONFIG_GENERIC_GPIO) += gpio.o | 6 | orion-gpio-$(CONFIG_GPIOLIB) += gpio.o |
7 | obj-$(CONFIG_PLAT_ORION_LEGACY) += irq.o pcie.o time.o common.o mpp.o | 7 | obj-$(CONFIG_PLAT_ORION_LEGACY) += irq.o pcie.o time.o common.o mpp.o |
8 | obj-$(CONFIG_PLAT_ORION_LEGACY) += $(orion-gpio-y) | 8 | obj-$(CONFIG_PLAT_ORION_LEGACY) += $(orion-gpio-y) |
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index e39c2ba6e2fb..249fe6333e18 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c | |||
@@ -150,7 +150,7 @@ err_out: | |||
150 | } | 150 | } |
151 | 151 | ||
152 | /* | 152 | /* |
153 | * GENERIC_GPIO primitives. | 153 | * GPIO primitives. |
154 | */ | 154 | */ |
155 | static int orion_gpio_request(struct gpio_chip *chip, unsigned pin) | 155 | static int orion_gpio_request(struct gpio_chip *chip, unsigned pin) |
156 | { | 156 | { |
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 8dc0605a9ce9..d30042e39974 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <xen/events.h> | 2 | #include <xen/events.h> |
3 | #include <xen/grant_table.h> | 3 | #include <xen/grant_table.h> |
4 | #include <xen/hvm.h> | 4 | #include <xen/hvm.h> |
5 | #include <xen/interface/vcpu.h> | ||
5 | #include <xen/interface/xen.h> | 6 | #include <xen/interface/xen.h> |
6 | #include <xen/interface/memory.h> | 7 | #include <xen/interface/memory.h> |
7 | #include <xen/interface/hvm/params.h> | 8 | #include <xen/interface/hvm/params.h> |
@@ -9,9 +10,11 @@ | |||
9 | #include <xen/platform_pci.h> | 10 | #include <xen/platform_pci.h> |
10 | #include <xen/xenbus.h> | 11 | #include <xen/xenbus.h> |
11 | #include <xen/page.h> | 12 | #include <xen/page.h> |
13 | #include <xen/interface/sched.h> | ||
12 | #include <xen/xen-ops.h> | 14 | #include <xen/xen-ops.h> |
13 | #include <asm/xen/hypervisor.h> | 15 | #include <asm/xen/hypervisor.h> |
14 | #include <asm/xen/hypercall.h> | 16 | #include <asm/xen/hypercall.h> |
17 | #include <asm/system_misc.h> | ||
15 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
16 | #include <linux/irqreturn.h> | 19 | #include <linux/irqreturn.h> |
17 | #include <linux/module.h> | 20 | #include <linux/module.h> |
@@ -32,6 +35,7 @@ struct shared_info xen_dummy_shared_info; | |||
32 | struct shared_info *HYPERVISOR_shared_info = (void *)&xen_dummy_shared_info; | 35 | struct shared_info *HYPERVISOR_shared_info = (void *)&xen_dummy_shared_info; |
33 | 36 | ||
34 | DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu); | 37 | DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu); |
38 | static struct vcpu_info __percpu *xen_vcpu_info; | ||
35 | 39 | ||
36 | /* These are unused until we support booting "pre-ballooned" */ | 40 | /* These are unused until we support booting "pre-ballooned" */ |
37 | unsigned long xen_released_pages; | 41 | unsigned long xen_released_pages; |
@@ -148,6 +152,47 @@ int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, | |||
148 | } | 152 | } |
149 | EXPORT_SYMBOL_GPL(xen_unmap_domain_mfn_range); | 153 | EXPORT_SYMBOL_GPL(xen_unmap_domain_mfn_range); |
150 | 154 | ||
155 | static int __init xen_secondary_init(unsigned int cpu) | ||
156 | { | ||
157 | struct vcpu_register_vcpu_info info; | ||
158 | struct vcpu_info *vcpup; | ||
159 | int err; | ||
160 | |||
161 | pr_info("Xen: initializing cpu%d\n", cpu); | ||
162 | vcpup = per_cpu_ptr(xen_vcpu_info, cpu); | ||
163 | |||
164 | info.mfn = __pa(vcpup) >> PAGE_SHIFT; | ||
165 | info.offset = offset_in_page(vcpup); | ||
166 | |||
167 | err = HYPERVISOR_vcpu_op(VCPUOP_register_vcpu_info, cpu, &info); | ||
168 | if (err) { | ||
169 | pr_debug("register_vcpu_info failed: err=%d\n", err); | ||
170 | } else { | ||
171 | /* This cpu is using the registered vcpu info, even if | ||
172 | later ones fail to. */ | ||
173 | per_cpu(xen_vcpu, cpu) = vcpup; | ||
174 | } | ||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | static void xen_restart(char str, const char *cmd) | ||
179 | { | ||
180 | struct sched_shutdown r = { .reason = SHUTDOWN_reboot }; | ||
181 | int rc; | ||
182 | rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &r); | ||
183 | if (rc) | ||
184 | BUG(); | ||
185 | } | ||
186 | |||
187 | static void xen_power_off(void) | ||
188 | { | ||
189 | struct sched_shutdown r = { .reason = SHUTDOWN_poweroff }; | ||
190 | int rc; | ||
191 | rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &r); | ||
192 | if (rc) | ||
193 | BUG(); | ||
194 | } | ||
195 | |||
151 | /* | 196 | /* |
152 | * see Documentation/devicetree/bindings/arm/xen.txt for the | 197 | * see Documentation/devicetree/bindings/arm/xen.txt for the |
153 | * documentation of the Xen Device Tree format. | 198 | * documentation of the Xen Device Tree format. |
@@ -163,6 +208,7 @@ static int __init xen_guest_init(void) | |||
163 | const char *version = NULL; | 208 | const char *version = NULL; |
164 | const char *xen_prefix = "xen,xen-"; | 209 | const char *xen_prefix = "xen,xen-"; |
165 | struct resource res; | 210 | struct resource res; |
211 | int i; | ||
166 | 212 | ||
167 | node = of_find_compatible_node(NULL, NULL, "xen,xen"); | 213 | node = of_find_compatible_node(NULL, NULL, "xen,xen"); |
168 | if (!node) { | 214 | if (!node) { |
@@ -209,18 +255,26 @@ static int __init xen_guest_init(void) | |||
209 | 255 | ||
210 | /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info | 256 | /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info |
211 | * page, we use it in the event channel upcall and in some pvclock | 257 | * page, we use it in the event channel upcall and in some pvclock |
212 | * related functions. We don't need the vcpu_info placement | 258 | * related functions. |
213 | * optimizations because we don't use any pv_mmu or pv_irq op on | ||
214 | * HVM. | ||
215 | * The shared info contains exactly 1 CPU (the boot CPU). The guest | 259 | * The shared info contains exactly 1 CPU (the boot CPU). The guest |
216 | * is required to use VCPUOP_register_vcpu_info to place vcpu info | 260 | * is required to use VCPUOP_register_vcpu_info to place vcpu info |
217 | * for secondary CPUs as they are brought up. */ | 261 | * for secondary CPUs as they are brought up. |
218 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; | 262 | * For uniformity we use VCPUOP_register_vcpu_info even on cpu0. |
263 | */ | ||
264 | xen_vcpu_info = __alloc_percpu(sizeof(struct vcpu_info), | ||
265 | sizeof(struct vcpu_info)); | ||
266 | if (xen_vcpu_info == NULL) | ||
267 | return -ENOMEM; | ||
268 | for_each_online_cpu(i) | ||
269 | xen_secondary_init(i); | ||
219 | 270 | ||
220 | gnttab_init(); | 271 | gnttab_init(); |
221 | if (!xen_initial_domain()) | 272 | if (!xen_initial_domain()) |
222 | xenbus_probe(NULL); | 273 | xenbus_probe(NULL); |
223 | 274 | ||
275 | pm_power_off = xen_power_off; | ||
276 | arm_pm_restart = xen_restart; | ||
277 | |||
224 | return 0; | 278 | return 0; |
225 | } | 279 | } |
226 | core_initcall(xen_guest_init); | 280 | core_initcall(xen_guest_init); |
@@ -231,6 +285,11 @@ static irqreturn_t xen_arm_callback(int irq, void *arg) | |||
231 | return IRQ_HANDLED; | 285 | return IRQ_HANDLED; |
232 | } | 286 | } |
233 | 287 | ||
288 | static __init void xen_percpu_enable_events(void *unused) | ||
289 | { | ||
290 | enable_percpu_irq(xen_events_irq, 0); | ||
291 | } | ||
292 | |||
234 | static int __init xen_init_events(void) | 293 | static int __init xen_init_events(void) |
235 | { | 294 | { |
236 | if (!xen_domain() || xen_events_irq < 0) | 295 | if (!xen_domain() || xen_events_irq < 0) |
@@ -239,12 +298,12 @@ static int __init xen_init_events(void) | |||
239 | xen_init_IRQ(); | 298 | xen_init_IRQ(); |
240 | 299 | ||
241 | if (request_percpu_irq(xen_events_irq, xen_arm_callback, | 300 | if (request_percpu_irq(xen_events_irq, xen_arm_callback, |
242 | "events", xen_vcpu)) { | 301 | "events", &xen_vcpu)) { |
243 | pr_err("Error requesting IRQ %d\n", xen_events_irq); | 302 | pr_err("Error requesting IRQ %d\n", xen_events_irq); |
244 | return -EINVAL; | 303 | return -EINVAL; |
245 | } | 304 | } |
246 | 305 | ||
247 | enable_percpu_irq(xen_events_irq, 0); | 306 | on_each_cpu(xen_percpu_enable_events, NULL, 0); |
248 | 307 | ||
249 | return 0; | 308 | return 0; |
250 | } | 309 | } |
@@ -259,4 +318,5 @@ EXPORT_SYMBOL_GPL(HYPERVISOR_sched_op); | |||
259 | EXPORT_SYMBOL_GPL(HYPERVISOR_hvm_op); | 318 | EXPORT_SYMBOL_GPL(HYPERVISOR_hvm_op); |
260 | EXPORT_SYMBOL_GPL(HYPERVISOR_memory_op); | 319 | EXPORT_SYMBOL_GPL(HYPERVISOR_memory_op); |
261 | EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op); | 320 | EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op); |
321 | EXPORT_SYMBOL_GPL(HYPERVISOR_vcpu_op); | ||
262 | EXPORT_SYMBOL_GPL(privcmd_call); | 322 | EXPORT_SYMBOL_GPL(privcmd_call); |
diff --git a/arch/arm/xen/hypercall.S b/arch/arm/xen/hypercall.S index 71f723984cbd..199cb2da7663 100644 --- a/arch/arm/xen/hypercall.S +++ b/arch/arm/xen/hypercall.S | |||
@@ -87,6 +87,7 @@ HYPERCALL2(event_channel_op); | |||
87 | HYPERCALL2(hvm_op); | 87 | HYPERCALL2(hvm_op); |
88 | HYPERCALL2(memory_op); | 88 | HYPERCALL2(memory_op); |
89 | HYPERCALL2(physdev_op); | 89 | HYPERCALL2(physdev_op); |
90 | HYPERCALL3(vcpu_op); | ||
90 | 91 | ||
91 | ENTRY(privcmd_call) | 92 | ENTRY(privcmd_call) |
92 | stmdb sp!, {r4} | 93 | stmdb sp!, {r4} |