diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2009-06-04 05:32:12 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-08-14 06:40:42 -0400 |
commit | 8c25c36f33157a2e2a1fcd60b6dc00feace80631 (patch) | |
tree | 8647a0a59c6ed009a90618cd16ac524e2038fcaf /arch/arm/plat-mxc | |
parent | a058cbc17901108de9179dccdb29dff0e00c79fe (diff) |
Add i.MX25 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/plat-mxc')
-rw-r--r-- | arch/arm/plat-mxc/Kconfig | 8 | ||||
-rw-r--r-- | arch/arm/plat-mxc/gpio.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/common.h | 3 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/debug-macro.S | 9 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/hardware.h | 4 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/irqs.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/memory.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/mx25.h | 44 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/mxc.h | 13 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/timex.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/uncompress.h | 1 |
11 files changed, 89 insertions, 1 deletions
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig index 0617c19f85cb..e342a2e61601 100644 --- a/arch/arm/plat-mxc/Kconfig +++ b/arch/arm/plat-mxc/Kconfig | |||
@@ -20,6 +20,13 @@ config ARCH_MX2 | |||
20 | help | 20 | help |
21 | This enables support for systems based on the Freescale i.MX2 family | 21 | This enables support for systems based on the Freescale i.MX2 family |
22 | 22 | ||
23 | config ARCH_MX25 | ||
24 | bool "MX25-based" | ||
25 | select CPU_ARM926T | ||
26 | select COMMON_CLKDEV | ||
27 | help | ||
28 | This enables support for systems based on the Freescale i.MX25 family | ||
29 | |||
23 | config ARCH_MX3 | 30 | config ARCH_MX3 |
24 | bool "MX3-based" | 31 | bool "MX3-based" |
25 | select CPU_V6 | 32 | select CPU_V6 |
@@ -32,6 +39,7 @@ endchoice | |||
32 | source "arch/arm/mach-mx1/Kconfig" | 39 | source "arch/arm/mach-mx1/Kconfig" |
33 | source "arch/arm/mach-mx2/Kconfig" | 40 | source "arch/arm/mach-mx2/Kconfig" |
34 | source "arch/arm/mach-mx3/Kconfig" | 41 | source "arch/arm/mach-mx3/Kconfig" |
42 | source "arch/arm/mach-mx25/Kconfig" | ||
35 | 43 | ||
36 | endmenu | 44 | endmenu |
37 | 45 | ||
diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index f0315edb3eb9..cfc4a8b43e6a 100644 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c | |||
@@ -297,7 +297,7 @@ int __init mxc_gpio_init(struct mxc_gpio_port *port, int cnt) | |||
297 | /* its a serious configuration bug when it fails */ | 297 | /* its a serious configuration bug when it fails */ |
298 | BUG_ON( gpiochip_add(&port[i].chip) < 0 ); | 298 | BUG_ON( gpiochip_add(&port[i].chip) < 0 ); |
299 | 299 | ||
300 | if (cpu_is_mx1() || cpu_is_mx3()) { | 300 | if (cpu_is_mx1() || cpu_is_mx3() || cpu_is_mx25()) { |
301 | /* setup one handler for each entry */ | 301 | /* setup one handler for each entry */ |
302 | set_irq_chained_handler(port[i].irq, mx3_gpio_irq_handler); | 302 | set_irq_chained_handler(port[i].irq, mx3_gpio_irq_handler); |
303 | set_irq_data(port[i].irq, &port[i]); | 303 | set_irq_data(port[i].irq, &port[i]); |
diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/plat-mxc/include/mach/common.h index cd8f215c1ad2..4e7af7412396 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/plat-mxc/include/mach/common.h | |||
@@ -16,18 +16,21 @@ struct clk; | |||
16 | 16 | ||
17 | extern void mx1_map_io(void); | 17 | extern void mx1_map_io(void); |
18 | extern void mx21_map_io(void); | 18 | extern void mx21_map_io(void); |
19 | extern void mx25_map_io(void); | ||
19 | extern void mx27_map_io(void); | 20 | extern void mx27_map_io(void); |
20 | extern void mx31_map_io(void); | 21 | extern void mx31_map_io(void); |
21 | extern void mx35_map_io(void); | 22 | extern void mx35_map_io(void); |
22 | extern void mxc_init_irq(void __iomem *); | 23 | extern void mxc_init_irq(void __iomem *); |
23 | extern void mx1_init_irq(void); | 24 | extern void mx1_init_irq(void); |
24 | extern void mx21_init_irq(void); | 25 | extern void mx21_init_irq(void); |
26 | extern void mx25_init_irq(void); | ||
25 | extern void mx27_init_irq(void); | 27 | extern void mx27_init_irq(void); |
26 | extern void mx31_init_irq(void); | 28 | extern void mx31_init_irq(void); |
27 | extern void mx35_init_irq(void); | 29 | extern void mx35_init_irq(void); |
28 | extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int); | 30 | extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int); |
29 | extern int mx1_clocks_init(unsigned long fref); | 31 | extern int mx1_clocks_init(unsigned long fref); |
30 | extern int mx21_clocks_init(unsigned long lref, unsigned long fref); | 32 | extern int mx21_clocks_init(unsigned long lref, unsigned long fref); |
33 | extern int mx25_clocks_init(unsigned long fref); | ||
31 | extern int mx27_clocks_init(unsigned long fref); | 34 | extern int mx27_clocks_init(unsigned long fref); |
32 | extern int mx31_clocks_init(unsigned long fref); | 35 | extern int mx31_clocks_init(unsigned long fref); |
33 | extern int mx35_clocks_init(void); | 36 | extern int mx35_clocks_init(void); |
diff --git a/arch/arm/plat-mxc/include/mach/debug-macro.S b/arch/arm/plat-mxc/include/mach/debug-macro.S index 4f85acd74afe..bf683de56b76 100644 --- a/arch/arm/plat-mxc/include/mach/debug-macro.S +++ b/arch/arm/plat-mxc/include/mach/debug-macro.S | |||
@@ -17,6 +17,15 @@ | |||
17 | #define UART_VADDR IO_ADDRESS(UART1_BASE_ADDR) | 17 | #define UART_VADDR IO_ADDRESS(UART1_BASE_ADDR) |
18 | #endif | 18 | #endif |
19 | 19 | ||
20 | #ifdef CONFIG_ARCH_MX25 | ||
21 | #ifdef UART_PADDR | ||
22 | #error "CONFIG_DEBUG_LL is incompatible with multiple archs" | ||
23 | #endif | ||
24 | #include <mach/mx25.h> | ||
25 | #define UART_PADDR UART1_BASE_ADDR | ||
26 | #define UART_VADDR MX25_AIPS1_IO_ADDRESS(UART1_BASE_ADDR) | ||
27 | #endif | ||
28 | |||
20 | #ifdef CONFIG_ARCH_MX2 | 29 | #ifdef CONFIG_ARCH_MX2 |
21 | #ifdef UART_PADDR | 30 | #ifdef UART_PADDR |
22 | #error "CONFIG_DEBUG_LL is incompatible with multiple archs" | 31 | #error "CONFIG_DEBUG_LL is incompatible with multiple archs" |
diff --git a/arch/arm/plat-mxc/include/mach/hardware.h b/arch/arm/plat-mxc/include/mach/hardware.h index 42e4ee37ca1f..569af3239c3c 100644 --- a/arch/arm/plat-mxc/include/mach/hardware.h +++ b/arch/arm/plat-mxc/include/mach/hardware.h | |||
@@ -42,6 +42,10 @@ | |||
42 | # include <mach/mx1.h> | 42 | # include <mach/mx1.h> |
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #ifdef CONFIG_ARCH_MX25 | ||
46 | # include <mach/mx25.h> | ||
47 | #endif | ||
48 | |||
45 | #include <mach/mxc.h> | 49 | #include <mach/mxc.h> |
46 | 50 | ||
47 | #endif /* __ASM_ARCH_MXC_HARDWARE_H__ */ | 51 | #endif /* __ASM_ARCH_MXC_HARDWARE_H__ */ |
diff --git a/arch/arm/plat-mxc/include/mach/irqs.h b/arch/arm/plat-mxc/include/mach/irqs.h index 518a36504b88..f39e016c1cc5 100644 --- a/arch/arm/plat-mxc/include/mach/irqs.h +++ b/arch/arm/plat-mxc/include/mach/irqs.h | |||
@@ -24,6 +24,8 @@ | |||
24 | #define MXC_GPIO_IRQS (32 * 6) | 24 | #define MXC_GPIO_IRQS (32 * 6) |
25 | #elif defined CONFIG_ARCH_MX3 | 25 | #elif defined CONFIG_ARCH_MX3 |
26 | #define MXC_GPIO_IRQS (32 * 3) | 26 | #define MXC_GPIO_IRQS (32 * 3) |
27 | #elif defined CONFIG_ARCH_MX25 | ||
28 | #define MXC_GPIO_IRQS (32 * 4) | ||
27 | #endif | 29 | #endif |
28 | 30 | ||
29 | /* | 31 | /* |
diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index 6065e00176ed..42db73941118 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h | |||
@@ -22,6 +22,8 @@ | |||
22 | #endif | 22 | #endif |
23 | #elif defined CONFIG_ARCH_MX3 | 23 | #elif defined CONFIG_ARCH_MX3 |
24 | #define PHYS_OFFSET UL(0x80000000) | 24 | #define PHYS_OFFSET UL(0x80000000) |
25 | #elif defined CONFIG_ARCH_MX25 | ||
26 | #define PHYS_OFFSET UL(0x80000000) | ||
25 | #endif | 27 | #endif |
26 | 28 | ||
27 | #if defined(CONFIG_MX1_VIDEO) | 29 | #if defined(CONFIG_MX1_VIDEO) |
diff --git a/arch/arm/plat-mxc/include/mach/mx25.h b/arch/arm/plat-mxc/include/mach/mx25.h new file mode 100644 index 000000000000..ec64bd9a8ab1 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx25.h | |||
@@ -0,0 +1,44 @@ | |||
1 | #ifndef __MACH_MX25_H__ | ||
2 | #define __MACH_MX25_H__ | ||
3 | |||
4 | #define MX25_AIPS1_BASE_ADDR 0x43F00000 | ||
5 | #define MX25_AIPS1_BASE_ADDR_VIRT 0xFC000000 | ||
6 | #define MX25_AIPS1_SIZE SZ_1M | ||
7 | #define MX25_AIPS2_BASE_ADDR 0x53F00000 | ||
8 | #define MX25_AIPS2_BASE_ADDR_VIRT 0xFC200000 | ||
9 | #define MX25_AIPS2_SIZE SZ_1M | ||
10 | #define MX25_AVIC_BASE_ADDR 0x68000000 | ||
11 | #define MX25_AVIC_BASE_ADDR_VIRT 0xFC400000 | ||
12 | #define MX25_AVIC_SIZE SZ_1M | ||
13 | |||
14 | #define MX25_IOMUXC_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0xac000) | ||
15 | |||
16 | #define MX25_CRM_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x80000) | ||
17 | #define MX25_GPT1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x90000) | ||
18 | #define MX25_WDOG_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xdc000) | ||
19 | |||
20 | #define MX25_GPIO1_BASE_ADDR_VIRT (MX25_AIPS2_BASE_ADDR_VIRT + 0xcc000) | ||
21 | #define MX25_GPIO2_BASE_ADDR_VIRT (MX25_AIPS2_BASE_ADDR_VIRT + 0xd0000) | ||
22 | #define MX25_GPIO3_BASE_ADDR_VIRT (MX25_AIPS2_BASE_ADDR_VIRT + 0xa4000) | ||
23 | #define MX25_GPIO4_BASE_ADDR_VIRT (MX25_AIPS2_BASE_ADDR_VIRT + 0x9c000) | ||
24 | |||
25 | #define MX25_AIPS1_IO_ADDRESS(x) \ | ||
26 | (((x) - MX25_AIPS1_BASE_ADDR) + MX25_AIPS1_BASE_ADDR_VIRT) | ||
27 | #define MX25_AIPS2_IO_ADDRESS(x) \ | ||
28 | (((x) - MX25_AIPS2_BASE_ADDR) + MX25_AIPS2_BASE_ADDR_VIRT) | ||
29 | #define MX25_AVIC_IO_ADDRESS(x) \ | ||
30 | (((x) - MX25_AVIC_BASE_ADDR) + MX25_AVIC_BASE_ADDR_VIRT) | ||
31 | |||
32 | #define __in_range(addr, name) ((addr) >= name##_BASE_ADDR && (addr) < name##_BASE_ADDR + name##_SIZE) | ||
33 | |||
34 | #define MX25_IO_ADDRESS(x) \ | ||
35 | (void __force __iomem *) \ | ||
36 | (__in_range(x, MX25_AIPS1) ? MX25_AIPS1_IO_ADDRESS(x) : \ | ||
37 | __in_range(x, MX25_AIPS2) ? MX25_AIPS2_IO_ADDRESS(x) : \ | ||
38 | __in_range(x, MX25_AVIC) ? MX25_AVIC_IO_ADDRESS(x) : \ | ||
39 | 0xDEADBEEF) | ||
40 | |||
41 | #define UART1_BASE_ADDR 0x43f90000 | ||
42 | #define UART2_BASE_ADDR 0x43f94000 | ||
43 | |||
44 | #endif /* __MACH_MX25_H__ */ | ||
diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/plat-mxc/include/mach/mxc.h index 5fa2a07f4eaf..882b816729bd 100644 --- a/arch/arm/plat-mxc/include/mach/mxc.h +++ b/arch/arm/plat-mxc/include/mach/mxc.h | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #define MXC_CPU_MX1 1 | 27 | #define MXC_CPU_MX1 1 |
28 | #define MXC_CPU_MX21 21 | 28 | #define MXC_CPU_MX21 21 |
29 | #define MXC_CPU_MX25 25 | ||
29 | #define MXC_CPU_MX27 27 | 30 | #define MXC_CPU_MX27 27 |
30 | #define MXC_CPU_MX31 31 | 31 | #define MXC_CPU_MX31 31 |
31 | #define MXC_CPU_MX35 35 | 32 | #define MXC_CPU_MX35 35 |
@@ -58,6 +59,18 @@ extern unsigned int __mxc_cpu_type; | |||
58 | # define cpu_is_mx21() (0) | 59 | # define cpu_is_mx21() (0) |
59 | #endif | 60 | #endif |
60 | 61 | ||
62 | #ifdef CONFIG_ARCH_MX25 | ||
63 | # ifdef mxc_cpu_type | ||
64 | # undef mxc_cpu_type | ||
65 | # define mxc_cpu_type __mxc_cpu_type | ||
66 | # else | ||
67 | # define mxc_cpu_type MXC_CPU_MX25 | ||
68 | # endif | ||
69 | # define cpu_is_mx25() (mxc_cpu_type == MXC_CPU_MX25) | ||
70 | #else | ||
71 | # define cpu_is_mx25() (0) | ||
72 | #endif | ||
73 | |||
61 | #ifdef CONFIG_MACH_MX27 | 74 | #ifdef CONFIG_MACH_MX27 |
62 | # ifdef mxc_cpu_type | 75 | # ifdef mxc_cpu_type |
63 | # undef mxc_cpu_type | 76 | # undef mxc_cpu_type |
diff --git a/arch/arm/plat-mxc/include/mach/timex.h b/arch/arm/plat-mxc/include/mach/timex.h index 07b4a73c9d2f..0707b7d5b5ce 100644 --- a/arch/arm/plat-mxc/include/mach/timex.h +++ b/arch/arm/plat-mxc/include/mach/timex.h | |||
@@ -26,6 +26,8 @@ | |||
26 | #define CLOCK_TICK_RATE 13300000 | 26 | #define CLOCK_TICK_RATE 13300000 |
27 | #elif defined CONFIG_ARCH_MX3 | 27 | #elif defined CONFIG_ARCH_MX3 |
28 | #define CLOCK_TICK_RATE 16625000 | 28 | #define CLOCK_TICK_RATE 16625000 |
29 | #elif defined CONFIG_ARCH_MX25 | ||
30 | #define CLOCK_TICK_RATE 16000000 | ||
29 | #endif | 31 | #endif |
30 | 32 | ||
31 | #endif /* __ASM_ARCH_MXC_TIMEX_H__ */ | 33 | #endif /* __ASM_ARCH_MXC_TIMEX_H__ */ |
diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h index 98c8a60214d6..b6650e705e31 100644 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ b/arch/arm/plat-mxc/include/mach/uncompress.h | |||
@@ -63,6 +63,7 @@ static void putc(int ch) | |||
63 | #define flush() do { } while (0) | 63 | #define flush() do { } while (0) |
64 | 64 | ||
65 | #define MX1_UART1_BASE_ADDR 0x00206000 | 65 | #define MX1_UART1_BASE_ADDR 0x00206000 |
66 | #define MX25_UART1_BASE_ADDR 0x43f90000 | ||
66 | #define MX2X_UART1_BASE_ADDR 0x1000a000 | 67 | #define MX2X_UART1_BASE_ADDR 0x1000a000 |
67 | #define MX3X_UART1_BASE_ADDR 0x43F90000 | 68 | #define MX3X_UART1_BASE_ADDR 0x43F90000 |
68 | 69 | ||