diff options
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r-- | arch/arm/mach-ux500/board-mop500-uib.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-mop500.c | 13 | ||||
-rw-r--r-- | arch/arm/mach-ux500/cache-l2x0.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-ux500/cpu-db8500.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-ux500/cpu.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-ux500/id.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-ux500/id.h (renamed from arch/arm/mach-ux500/include/mach/id.h) | 21 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/hardware.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/setup.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-ux500/platsmp.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-ux500/timer.c | 15 |
11 files changed, 47 insertions, 41 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-uib.c b/arch/arm/mach-ux500/board-mop500-uib.c index 1f47d962e3a1..7037d3687e9f 100644 --- a/arch/arm/mach-ux500/board-mop500-uib.c +++ b/arch/arm/mach-ux500/board-mop500-uib.c | |||
@@ -13,6 +13,7 @@ | |||
13 | 13 | ||
14 | #include <mach/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include "board-mop500.h" | 15 | #include "board-mop500.h" |
16 | #include "id.h" | ||
16 | 17 | ||
17 | enum mop500_uib { | 18 | enum mop500_uib { |
18 | STUIB, | 19 | STUIB, |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index d453522edb0d..0e928d281759 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -40,7 +40,6 @@ | |||
40 | 40 | ||
41 | #include <asm/mach-types.h> | 41 | #include <asm/mach-types.h> |
42 | #include <asm/mach/arch.h> | 42 | #include <asm/mach/arch.h> |
43 | #include <asm/hardware/gic.h> | ||
44 | 43 | ||
45 | #include <mach/hardware.h> | 44 | #include <mach/hardware.h> |
46 | #include <mach/setup.h> | 45 | #include <mach/setup.h> |
@@ -751,8 +750,7 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | |||
751 | .map_io = u8500_map_io, | 750 | .map_io = u8500_map_io, |
752 | .init_irq = ux500_init_irq, | 751 | .init_irq = ux500_init_irq, |
753 | /* we re-use nomadik timer here */ | 752 | /* we re-use nomadik timer here */ |
754 | .timer = &ux500_timer, | 753 | .init_time = ux500_timer_init, |
755 | .handle_irq = gic_handle_irq, | ||
756 | .init_machine = mop500_init_machine, | 754 | .init_machine = mop500_init_machine, |
757 | .init_late = ux500_init_late, | 755 | .init_late = ux500_init_late, |
758 | MACHINE_END | 756 | MACHINE_END |
@@ -761,8 +759,7 @@ MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520") | |||
761 | .atag_offset = 0x100, | 759 | .atag_offset = 0x100, |
762 | .map_io = u8500_map_io, | 760 | .map_io = u8500_map_io, |
763 | .init_irq = ux500_init_irq, | 761 | .init_irq = ux500_init_irq, |
764 | .timer = &ux500_timer, | 762 | .init_time = ux500_timer_init, |
765 | .handle_irq = gic_handle_irq, | ||
766 | .init_machine = mop500_init_machine, | 763 | .init_machine = mop500_init_machine, |
767 | .init_late = ux500_init_late, | 764 | .init_late = ux500_init_late, |
768 | MACHINE_END | 765 | MACHINE_END |
@@ -772,8 +769,7 @@ MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | |||
772 | .smp = smp_ops(ux500_smp_ops), | 769 | .smp = smp_ops(ux500_smp_ops), |
773 | .map_io = u8500_map_io, | 770 | .map_io = u8500_map_io, |
774 | .init_irq = ux500_init_irq, | 771 | .init_irq = ux500_init_irq, |
775 | .timer = &ux500_timer, | 772 | .init_time = ux500_timer_init, |
776 | .handle_irq = gic_handle_irq, | ||
777 | .init_machine = hrefv60_init_machine, | 773 | .init_machine = hrefv60_init_machine, |
778 | .init_late = ux500_init_late, | 774 | .init_late = ux500_init_late, |
779 | MACHINE_END | 775 | MACHINE_END |
@@ -784,8 +780,7 @@ MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") | |||
784 | .map_io = u8500_map_io, | 780 | .map_io = u8500_map_io, |
785 | .init_irq = ux500_init_irq, | 781 | .init_irq = ux500_init_irq, |
786 | /* we re-use nomadik timer here */ | 782 | /* we re-use nomadik timer here */ |
787 | .timer = &ux500_timer, | 783 | .init_time = ux500_timer_init, |
788 | .handle_irq = gic_handle_irq, | ||
789 | .init_machine = snowball_init_machine, | 784 | .init_machine = snowball_init_machine, |
790 | .init_late = NULL, | 785 | .init_late = NULL, |
791 | MACHINE_END | 786 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/cache-l2x0.c b/arch/arm/mach-ux500/cache-l2x0.c index 75d5b512a3d5..1c1609da76ce 100644 --- a/arch/arm/mach-ux500/cache-l2x0.c +++ b/arch/arm/mach-ux500/cache-l2x0.c | |||
@@ -10,7 +10,8 @@ | |||
10 | #include <asm/cacheflush.h> | 10 | #include <asm/cacheflush.h> |
11 | #include <asm/hardware/cache-l2x0.h> | 11 | #include <asm/hardware/cache-l2x0.h> |
12 | #include <mach/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <mach/id.h> | 13 | |
14 | #include "id.h" | ||
14 | 15 | ||
15 | static void __iomem *l2x0_base; | 16 | static void __iomem *l2x0_base; |
16 | 17 | ||
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index db0bb75e2c76..d614d7150dcb 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <asm/pmu.h> | 27 | #include <asm/pmu.h> |
28 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
29 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
30 | #include <asm/hardware/gic.h> | ||
31 | 30 | ||
32 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
33 | #include <mach/setup.h> | 32 | #include <mach/setup.h> |
@@ -37,7 +36,9 @@ | |||
37 | 36 | ||
38 | #include "devices-db8500.h" | 37 | #include "devices-db8500.h" |
39 | #include "ste-dma40-db8500.h" | 38 | #include "ste-dma40-db8500.h" |
39 | |||
40 | #include "board-mop500.h" | 40 | #include "board-mop500.h" |
41 | #include "id.h" | ||
41 | 42 | ||
42 | /* minimum static i/o mapping required to boot U8500 platforms */ | 43 | /* minimum static i/o mapping required to boot U8500 platforms */ |
43 | static struct map_desc u8500_uart_io_desc[] __initdata = { | 44 | static struct map_desc u8500_uart_io_desc[] __initdata = { |
@@ -285,7 +286,8 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = { | |||
285 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL), | 286 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL), |
286 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), | 287 | OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL), |
287 | /* Requires device name bindings. */ | 288 | /* Requires device name bindings. */ |
288 | OF_DEV_AUXDATA("stericsson,nmk_pinctrl", 0, "pinctrl-db8500", NULL), | 289 | OF_DEV_AUXDATA("stericsson,nmk_pinctrl", U8500_PRCMU_BASE, |
290 | "pinctrl-db8500", NULL), | ||
289 | /* Requires clock name and DMA bindings. */ | 291 | /* Requires clock name and DMA bindings. */ |
290 | OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000, | 292 | OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000, |
291 | "ux500-msp-i2s.0", &msp0_platform_data), | 293 | "ux500-msp-i2s.0", &msp0_platform_data), |
@@ -340,8 +342,7 @@ DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)") | |||
340 | .map_io = u8500_map_io, | 342 | .map_io = u8500_map_io, |
341 | .init_irq = ux500_init_irq, | 343 | .init_irq = ux500_init_irq, |
342 | /* we re-use nomadik timer here */ | 344 | /* we re-use nomadik timer here */ |
343 | .timer = &ux500_timer, | 345 | .init_time = ux500_timer_init, |
344 | .handle_irq = gic_handle_irq, | ||
345 | .init_machine = u8500_init_machine, | 346 | .init_machine = u8500_init_machine, |
346 | .init_late = NULL, | 347 | .init_late = NULL, |
347 | .dt_compat = stericsson_dt_platform_compat, | 348 | .dt_compat = stericsson_dt_platform_compat, |
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index 721e7b4275f3..506c5b2d0fad 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
@@ -17,9 +17,10 @@ | |||
17 | #include <linux/of.h> | 17 | #include <linux/of.h> |
18 | #include <linux/of_irq.h> | 18 | #include <linux/of_irq.h> |
19 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
20 | #include <linux/irqchip.h> | ||
21 | #include <linux/irqchip/arm-gic.h> | ||
20 | #include <linux/platform_data/clk-ux500.h> | 22 | #include <linux/platform_data/clk-ux500.h> |
21 | 23 | ||
22 | #include <asm/hardware/gic.h> | ||
23 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
24 | 25 | ||
25 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
@@ -27,6 +28,7 @@ | |||
27 | #include <mach/devices.h> | 28 | #include <mach/devices.h> |
28 | 29 | ||
29 | #include "board-mop500.h" | 30 | #include "board-mop500.h" |
31 | #include "id.h" | ||
30 | 32 | ||
31 | void __iomem *_PRCMU_BASE; | 33 | void __iomem *_PRCMU_BASE; |
32 | 34 | ||
@@ -42,11 +44,6 @@ void __iomem *_PRCMU_BASE; | |||
42 | * This feels fragile because it depends on the gpio device getting probed | 44 | * This feels fragile because it depends on the gpio device getting probed |
43 | * _before_ any device uses the gpio interrupts. | 45 | * _before_ any device uses the gpio interrupts. |
44 | */ | 46 | */ |
45 | static const struct of_device_id ux500_dt_irq_match[] = { | ||
46 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
47 | {}, | ||
48 | }; | ||
49 | |||
50 | void __init ux500_init_irq(void) | 47 | void __init ux500_init_irq(void) |
51 | { | 48 | { |
52 | void __iomem *dist_base; | 49 | void __iomem *dist_base; |
@@ -62,7 +59,7 @@ void __init ux500_init_irq(void) | |||
62 | 59 | ||
63 | #ifdef CONFIG_OF | 60 | #ifdef CONFIG_OF |
64 | if (of_have_populated_dt()) | 61 | if (of_have_populated_dt()) |
65 | of_irq_init(ux500_dt_irq_match); | 62 | irqchip_init(); |
66 | else | 63 | else |
67 | #endif | 64 | #endif |
68 | gic_init(0, 29, dist_base, cpu_base); | 65 | gic_init(0, 29, dist_base, cpu_base); |
diff --git a/arch/arm/mach-ux500/id.c b/arch/arm/mach-ux500/id.c index d1579920139f..9f951842e1e5 100644 --- a/arch/arm/mach-ux500/id.c +++ b/arch/arm/mach-ux500/id.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/setup.h> | 18 | #include <mach/setup.h> |
19 | 19 | ||
20 | #include "id.h" | ||
21 | |||
20 | struct dbx500_asic_id dbx500_id; | 22 | struct dbx500_asic_id dbx500_id; |
21 | 23 | ||
22 | static unsigned int ux500_read_asicid(phys_addr_t addr) | 24 | static unsigned int ux500_read_asicid(phys_addr_t addr) |
diff --git a/arch/arm/mach-ux500/include/mach/id.h b/arch/arm/mach-ux500/id.h index 9c42642ab168..bcc58a8cccbc 100644 --- a/arch/arm/mach-ux500/include/mach/id.h +++ b/arch/arm/mach-ux500/id.h | |||
@@ -61,9 +61,14 @@ static inline bool __attribute_const__ cpu_is_u8540(void) | |||
61 | return dbx500_partnumber() == 0x8540; | 61 | return dbx500_partnumber() == 0x8540; |
62 | } | 62 | } |
63 | 63 | ||
64 | static inline bool __attribute_const__ cpu_is_u8580(void) | ||
65 | { | ||
66 | return dbx500_partnumber() == 0x8580; | ||
67 | } | ||
68 | |||
64 | static inline bool cpu_is_ux540_family(void) | 69 | static inline bool cpu_is_ux540_family(void) |
65 | { | 70 | { |
66 | return cpu_is_u9540() || cpu_is_u8540(); | 71 | return cpu_is_u9540() || cpu_is_u8540() || cpu_is_u8580(); |
67 | } | 72 | } |
68 | 73 | ||
69 | /* | 74 | /* |
@@ -115,6 +120,20 @@ static inline bool cpu_is_u8500v20_or_later(void) | |||
115 | return (cpu_is_u8500() && !cpu_is_u8500v10() && !cpu_is_u8500v11()); | 120 | return (cpu_is_u8500() && !cpu_is_u8500v10() && !cpu_is_u8500v11()); |
116 | } | 121 | } |
117 | 122 | ||
123 | /* | ||
124 | * 8540 revisions | ||
125 | */ | ||
126 | |||
127 | static inline bool __attribute_const__ cpu_is_u8540v10(void) | ||
128 | { | ||
129 | return cpu_is_u8540() && dbx500_revision() == 0xA0; | ||
130 | } | ||
131 | |||
132 | static inline bool __attribute_const__ cpu_is_u8580v10(void) | ||
133 | { | ||
134 | return cpu_is_u8580() && dbx500_revision() == 0xA0; | ||
135 | } | ||
136 | |||
118 | static inline bool ux500_is_svp(void) | 137 | static inline bool ux500_is_svp(void) |
119 | { | 138 | { |
120 | return false; | 139 | return false; |
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h index 28d16e744bfd..5201ddace503 100644 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -39,7 +39,6 @@ | |||
39 | 39 | ||
40 | #ifndef __ASSEMBLY__ | 40 | #ifndef __ASSEMBLY__ |
41 | 41 | ||
42 | #include <mach/id.h> | ||
43 | extern void __iomem *_PRCMU_BASE; | 42 | extern void __iomem *_PRCMU_BASE; |
44 | 43 | ||
45 | #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) | 44 | #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) |
diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h index 6be4c4d2ab88..bddce2b49372 100644 --- a/arch/arm/mach-ux500/include/mach/setup.h +++ b/arch/arm/mach-ux500/include/mach/setup.h | |||
@@ -28,8 +28,7 @@ extern struct device *ux500_soc_device_init(const char *soc_id); | |||
28 | struct amba_device; | 28 | struct amba_device; |
29 | extern void __init amba_add_devices(struct amba_device *devs[], int num); | 29 | extern void __init amba_add_devices(struct amba_device *devs[], int num); |
30 | 30 | ||
31 | struct sys_timer; | 31 | extern void ux500_timer_init(void); |
32 | extern struct sys_timer ux500_timer; | ||
33 | 32 | ||
34 | #define __IO_DEV_DESC(x, sz) { \ | 33 | #define __IO_DEV_DESC(x, sz) { \ |
35 | .virtual = IO_ADDRESS(x), \ | 34 | .virtual = IO_ADDRESS(x), \ |
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index 3db7782f3afb..18f7af339dc9 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
@@ -16,14 +16,17 @@ | |||
16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | #include <linux/irqchip/arm-gic.h> | ||
19 | 20 | ||
20 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
21 | #include <asm/hardware/gic.h> | ||
22 | #include <asm/smp_plat.h> | 22 | #include <asm/smp_plat.h> |
23 | #include <asm/smp_scu.h> | 23 | #include <asm/smp_scu.h> |
24 | |||
24 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
25 | #include <mach/setup.h> | 26 | #include <mach/setup.h> |
26 | 27 | ||
28 | #include "id.h" | ||
29 | |||
27 | /* This is called from headsmp.S to wakeup the secondary core */ | 30 | /* This is called from headsmp.S to wakeup the secondary core */ |
28 | extern void u8500_secondary_startup(void); | 31 | extern void u8500_secondary_startup(void); |
29 | 32 | ||
@@ -91,7 +94,7 @@ static int __cpuinit ux500_boot_secondary(unsigned int cpu, struct task_struct * | |||
91 | */ | 94 | */ |
92 | write_pen_release(cpu_logical_map(cpu)); | 95 | write_pen_release(cpu_logical_map(cpu)); |
93 | 96 | ||
94 | smp_send_reschedule(cpu); | 97 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
95 | 98 | ||
96 | timeout = jiffies + (1 * HZ); | 99 | timeout = jiffies + (1 * HZ); |
97 | while (time_before(jiffies, timeout)) { | 100 | while (time_before(jiffies, timeout)) { |
@@ -155,8 +158,6 @@ static void __init ux500_smp_init_cpus(void) | |||
155 | 158 | ||
156 | for (i = 0; i < ncores; i++) | 159 | for (i = 0; i < ncores; i++) |
157 | set_cpu_possible(i, true); | 160 | set_cpu_possible(i, true); |
158 | |||
159 | set_smp_cross_call(gic_raise_softirq); | ||
160 | } | 161 | } |
161 | 162 | ||
162 | static void __init ux500_smp_prepare_cpus(unsigned int max_cpus) | 163 | static void __init ux500_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-ux500/timer.c b/arch/arm/mach-ux500/timer.c index 875309acb022..a6af0b8732ba 100644 --- a/arch/arm/mach-ux500/timer.c +++ b/arch/arm/mach-ux500/timer.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <mach/irqs.h> | 18 | #include <mach/irqs.h> |
19 | 19 | ||
20 | #include "id.h" | ||
21 | |||
20 | #ifdef CONFIG_HAVE_ARM_TWD | 22 | #ifdef CONFIG_HAVE_ARM_TWD |
21 | static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer, | 23 | static DEFINE_TWD_LOCAL_TIMER(u8500_twd_local_timer, |
22 | U8500_TWD_BASE, IRQ_LOCALTIMER); | 24 | U8500_TWD_BASE, IRQ_LOCALTIMER); |
@@ -46,7 +48,7 @@ const static struct of_device_id prcmu_timer_of_match[] __initconst = { | |||
46 | { }, | 48 | { }, |
47 | }; | 49 | }; |
48 | 50 | ||
49 | static void __init ux500_timer_init(void) | 51 | void __init ux500_timer_init(void) |
50 | { | 52 | { |
51 | void __iomem *mtu_timer_base; | 53 | void __iomem *mtu_timer_base; |
52 | void __iomem *prcmu_timer_base; | 54 | void __iomem *prcmu_timer_base; |
@@ -99,14 +101,3 @@ dt_fail: | |||
99 | clksrc_dbx500_prcmu_init(prcmu_timer_base); | 101 | clksrc_dbx500_prcmu_init(prcmu_timer_base); |
100 | ux500_twd_init(); | 102 | ux500_twd_init(); |
101 | } | 103 | } |
102 | |||
103 | static void ux500_timer_reset(void) | ||
104 | { | ||
105 | nmdk_clkevt_reset(); | ||
106 | nmdk_clksrc_reset(); | ||
107 | } | ||
108 | |||
109 | struct sys_timer ux500_timer = { | ||
110 | .init = ux500_timer_init, | ||
111 | .resume = ux500_timer_reset, | ||
112 | }; | ||