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); |
