diff options
author | Rabin Vincent <rabin.vincent@stericsson.com> | 2010-05-03 03:46:51 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-05-04 12:50:06 -0400 |
commit | 591d8dd71cc265465ac706ac11e5f613c6181a43 (patch) | |
tree | 8304dacd18915ba63279413e7cd77c456a1fee98 | |
parent | cb165c52561fd5947747fdbdb0c7ad22c6138175 (diff) |
ARM: 6090/1: ux500: add U5500 support
Add basic support for the U5500 platform.
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Acked-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/mach-ux500/Kconfig | 17 | ||||
-rw-r--r-- | arch/arm/mach-ux500/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-u5500.c | 41 | ||||
-rw-r--r-- | arch/arm/mach-ux500/clock.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-ux500/cpu-db5500.c | 50 | ||||
-rw-r--r-- | arch/arm/mach-ux500/devices-db5500.c | 46 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/devices.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/hardware.h | 9 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/setup.h | 2 |
9 files changed, 166 insertions, 6 deletions
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index 8ad5ee8107ae..6625e5bbf4d6 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -13,19 +13,24 @@ config UX500_SOC_DB8500 | |||
13 | config UX500_SOC_DB5500 | 13 | config UX500_SOC_DB5500 |
14 | bool | 14 | bool |
15 | 15 | ||
16 | menu "ST-Ericsson platform type" | 16 | choice |
17 | 17 | prompt "Ux500 target platform" | |
18 | comment "ST-Ericsson Multicore Mobile Platforms" | 18 | default MACH_U8500_MOP |
19 | 19 | ||
20 | config MACH_U8500_MOP | 20 | config MACH_U8500_MOP |
21 | bool "U8500 Early Development platform" | 21 | bool "U8500 Development platform" |
22 | default y | ||
23 | select UX500_SOC_DB8500 | 22 | select UX500_SOC_DB8500 |
24 | help | 23 | help |
25 | Include support for mop500 development platform | 24 | Include support for mop500 development platform |
26 | based on U8500 architecture. The platform is based | 25 | based on U8500 architecture. The platform is based |
27 | on early drop silicon version of 8500. | 26 | on early drop silicon version of 8500. |
28 | endmenu | 27 | |
28 | config MACH_U5500 | ||
29 | bool "U5500 Development platform" | ||
30 | select UX500_SOC_DB5500 | ||
31 | help | ||
32 | Include support for the U5500 development platform. | ||
33 | endchoice | ||
29 | 34 | ||
30 | config UX500_DEBUG_UART | 35 | config UX500_DEBUG_UART |
31 | int "Ux500 UART to use for low-level debug" | 36 | int "Ux500 UART to use for low-level debug" |
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile index 2eb768583e21..c7bc4199e3a8 100644 --- a/arch/arm/mach-ux500/Makefile +++ b/arch/arm/mach-ux500/Makefile | |||
@@ -3,6 +3,8 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := clock.o cpu.o devices.o | 5 | obj-y := clock.o cpu.o devices.o |
6 | obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o devices-db5500.o | ||
6 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o | 7 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o |
7 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o | 8 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o |
9 | obj-$(CONFIG_MACH_U5500) += board-u5500.o | ||
8 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o | 10 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o |
diff --git a/arch/arm/mach-ux500/board-u5500.c b/arch/arm/mach-ux500/board-u5500.c new file mode 100644 index 000000000000..4430e69cf538 --- /dev/null +++ b/arch/arm/mach-ux500/board-u5500.c | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson SA 2010 | ||
3 | * | ||
4 | * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson | ||
5 | * License terms: GNU General Public License (GPL) version 2 | ||
6 | */ | ||
7 | |||
8 | #include <linux/init.h> | ||
9 | #include <linux/platform_device.h> | ||
10 | #include <linux/amba/bus.h> | ||
11 | #include <linux/gpio.h> | ||
12 | |||
13 | #include <asm/mach/arch.h> | ||
14 | #include <asm/mach-types.h> | ||
15 | |||
16 | #include <mach/hardware.h> | ||
17 | #include <mach/devices.h> | ||
18 | #include <mach/setup.h> | ||
19 | |||
20 | static struct amba_device *amba_board_devs[] __initdata = { | ||
21 | &ux500_uart0_device, | ||
22 | &ux500_uart1_device, | ||
23 | &ux500_uart2_device, | ||
24 | }; | ||
25 | |||
26 | static void __init u5500_init_machine(void) | ||
27 | { | ||
28 | u5500_init_devices(); | ||
29 | |||
30 | amba_add_devices(amba_board_devs, ARRAY_SIZE(amba_board_devs)); | ||
31 | } | ||
32 | |||
33 | MACHINE_START(U8500, "ST-Ericsson U5500 Platform") | ||
34 | .phys_io = UX500_UART0_BASE, | ||
35 | .io_pg_offst = (IO_ADDRESS(UX500_UART0_BASE) >> 18) & 0xfffc, | ||
36 | .boot_params = 0x00000100, | ||
37 | .map_io = u5500_map_io, | ||
38 | .init_irq = ux500_init_irq, | ||
39 | .timer = &ux500_timer, | ||
40 | .init_machine = u5500_init_machine, | ||
41 | MACHINE_END | ||
diff --git a/arch/arm/mach-ux500/clock.c b/arch/arm/mach-ux500/clock.c index d16b8b5ca8c7..c325dad1679c 100644 --- a/arch/arm/mach-ux500/clock.c +++ b/arch/arm/mach-ux500/clock.c | |||
@@ -502,6 +502,10 @@ static int __init clk_init(void) | |||
502 | if (cpu_is_u8500ed()) { | 502 | if (cpu_is_u8500ed()) { |
503 | clk_prcmu_ops.enable = clk_prcmu_ed_enable; | 503 | clk_prcmu_ops.enable = clk_prcmu_ed_enable; |
504 | clk_prcmu_ops.disable = clk_prcmu_ed_disable; | 504 | clk_prcmu_ops.disable = clk_prcmu_ed_disable; |
505 | } else if (cpu_is_u5500()) { | ||
506 | /* Clock tree for U5500 not implemented yet */ | ||
507 | clk_prcc_ops.enable = clk_prcc_ops.disable = NULL; | ||
508 | clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL; | ||
505 | } | 509 | } |
506 | 510 | ||
507 | clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); | 511 | clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); |
diff --git a/arch/arm/mach-ux500/cpu-db5500.c b/arch/arm/mach-ux500/cpu-db5500.c new file mode 100644 index 000000000000..6a3ac4539f16 --- /dev/null +++ b/arch/arm/mach-ux500/cpu-db5500.c | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson SA 2010 | ||
3 | * | ||
4 | * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson | ||
5 | * License terms: GNU General Public License (GPL) version 2 | ||
6 | */ | ||
7 | |||
8 | #include <linux/platform_device.h> | ||
9 | #include <linux/amba/bus.h> | ||
10 | #include <linux/io.h> | ||
11 | |||
12 | #include <asm/mach/map.h> | ||
13 | |||
14 | #include <mach/hardware.h> | ||
15 | #include <mach/devices.h> | ||
16 | #include <mach/setup.h> | ||
17 | |||
18 | static struct map_desc u5500_io_desc[] __initdata = { | ||
19 | __IO_DEV_DESC(U5500_GPIO0_BASE, SZ_4K), | ||
20 | __IO_DEV_DESC(U5500_GPIO1_BASE, SZ_4K), | ||
21 | __IO_DEV_DESC(U5500_GPIO2_BASE, SZ_4K), | ||
22 | __IO_DEV_DESC(U5500_GPIO3_BASE, SZ_4K), | ||
23 | __IO_DEV_DESC(U5500_GPIO4_BASE, SZ_4K), | ||
24 | }; | ||
25 | |||
26 | static struct platform_device *u5500_platform_devs[] __initdata = { | ||
27 | &u5500_gpio_devs[0], | ||
28 | &u5500_gpio_devs[1], | ||
29 | &u5500_gpio_devs[2], | ||
30 | &u5500_gpio_devs[3], | ||
31 | &u5500_gpio_devs[4], | ||
32 | &u5500_gpio_devs[5], | ||
33 | &u5500_gpio_devs[6], | ||
34 | &u5500_gpio_devs[7], | ||
35 | }; | ||
36 | |||
37 | void __init u5500_map_io(void) | ||
38 | { | ||
39 | ux500_map_io(); | ||
40 | |||
41 | iotable_init(u5500_io_desc, ARRAY_SIZE(u5500_io_desc)); | ||
42 | } | ||
43 | |||
44 | void __init u5500_init_devices(void) | ||
45 | { | ||
46 | ux500_init_devices(); | ||
47 | |||
48 | platform_add_devices(u5500_platform_devs, | ||
49 | ARRAY_SIZE(u5500_platform_devs)); | ||
50 | } | ||
diff --git a/arch/arm/mach-ux500/devices-db5500.c b/arch/arm/mach-ux500/devices-db5500.c new file mode 100644 index 000000000000..33e5b56bebb6 --- /dev/null +++ b/arch/arm/mach-ux500/devices-db5500.c | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson SA 2010 | ||
3 | * | ||
4 | * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson | ||
5 | * License terms: GNU General Public License (GPL) version 2 | ||
6 | */ | ||
7 | |||
8 | #include <linux/platform_device.h> | ||
9 | #include <linux/interrupt.h> | ||
10 | #include <linux/gpio.h> | ||
11 | |||
12 | #include <mach/hardware.h> | ||
13 | #include <mach/devices.h> | ||
14 | |||
15 | static struct nmk_gpio_platform_data u5500_gpio_data[] = { | ||
16 | GPIO_DATA("GPIO-0-31", 0), | ||
17 | GPIO_DATA("GPIO-32-63", 32), /* 36..63 not routed to pin */ | ||
18 | GPIO_DATA("GPIO-64-95", 64), /* 83..95 not routed to pin */ | ||
19 | GPIO_DATA("GPIO-96-127", 96), /* 102..127 not routed to pin */ | ||
20 | GPIO_DATA("GPIO-128-159", 128), /* 149..159 not routed to pin */ | ||
21 | GPIO_DATA("GPIO-160-191", 160), | ||
22 | GPIO_DATA("GPIO-192-223", 192), | ||
23 | GPIO_DATA("GPIO-224-255", 224), /* 228..255 not routed to pin */ | ||
24 | }; | ||
25 | |||
26 | static struct resource u5500_gpio_resources[] = { | ||
27 | GPIO_RESOURCE(0), | ||
28 | GPIO_RESOURCE(1), | ||
29 | GPIO_RESOURCE(2), | ||
30 | GPIO_RESOURCE(3), | ||
31 | GPIO_RESOURCE(4), | ||
32 | GPIO_RESOURCE(5), | ||
33 | GPIO_RESOURCE(6), | ||
34 | GPIO_RESOURCE(7), | ||
35 | }; | ||
36 | |||
37 | struct platform_device u5500_gpio_devs[] = { | ||
38 | GPIO_DEVICE(0), | ||
39 | GPIO_DEVICE(1), | ||
40 | GPIO_DEVICE(2), | ||
41 | GPIO_DEVICE(3), | ||
42 | GPIO_DEVICE(4), | ||
43 | GPIO_DEVICE(5), | ||
44 | GPIO_DEVICE(6), | ||
45 | GPIO_DEVICE(7), | ||
46 | }; | ||
diff --git a/arch/arm/mach-ux500/include/mach/devices.h b/arch/arm/mach-ux500/include/mach/devices.h index 76b3569f055e..0422af00a56e 100644 --- a/arch/arm/mach-ux500/include/mach/devices.h +++ b/arch/arm/mach-ux500/include/mach/devices.h | |||
@@ -10,6 +10,7 @@ | |||
10 | struct platform_device; | 10 | struct platform_device; |
11 | struct amba_device; | 11 | struct amba_device; |
12 | 12 | ||
13 | extern struct platform_device u5500_gpio_devs[]; | ||
13 | extern struct platform_device u8500_gpio_devs[]; | 14 | extern struct platform_device u8500_gpio_devs[]; |
14 | 15 | ||
15 | extern struct amba_device ux500_pl031_device; | 16 | extern struct amba_device ux500_pl031_device; |
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h index 1353f1757057..8656379a8309 100644 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -114,6 +114,15 @@ static inline bool cpu_is_u8500v1(void) | |||
114 | return cpu_is_u8500() && (read_cpuid_id() & 15) == 1; | 114 | return cpu_is_u8500() && (read_cpuid_id() & 15) == 1; |
115 | } | 115 | } |
116 | 116 | ||
117 | static inline bool cpu_is_u5500(void) | ||
118 | { | ||
119 | #ifdef CONFIG_UX500_SOC_DB5500 | ||
120 | return 1; | ||
121 | #else | ||
122 | return 0; | ||
123 | #endif | ||
124 | } | ||
125 | |||
117 | #endif | 126 | #endif |
118 | 127 | ||
119 | #endif /* __MACH_HARDWARE_H */ | 128 | #endif /* __MACH_HARDWARE_H */ |
diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h index c730d078f9ab..e978dbd9e210 100644 --- a/arch/arm/mach-ux500/include/mach/setup.h +++ b/arch/arm/mach-ux500/include/mach/setup.h | |||
@@ -15,9 +15,11 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | 16 | ||
17 | extern void __init ux500_map_io(void); | 17 | extern void __init ux500_map_io(void); |
18 | extern void __init u5500_map_io(void); | ||
18 | extern void __init u8500_map_io(void); | 19 | extern void __init u8500_map_io(void); |
19 | 20 | ||
20 | extern void __init ux500_init_devices(void); | 21 | extern void __init ux500_init_devices(void); |
22 | extern void __init u5500_init_devices(void); | ||
21 | extern void __init u8500_init_devices(void); | 23 | extern void __init u8500_init_devices(void); |
22 | 24 | ||
23 | extern void __init ux500_init_irq(void); | 25 | extern void __init ux500_init_irq(void); |