diff options
author | Andrew Victor <andrew@sanpeople.com> | 2006-01-10 11:59:28 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-01-10 11:59:28 -0500 |
commit | f0a13854be269357ff70022524ec503d3cba6a32 (patch) | |
tree | a04ea749fcd945127d29647e1c87c624ad49ed45 /arch/arm/mach-at91rm9200 | |
parent | 1e6c9c2878c9c1f301449c78551e0b7c5f3e3ae5 (diff) |
[ARM] 3243/2: AT91RM9200 support for 2.6 (Atmel DK & EK boards)
Patch from Andrew Victor
This patch adds support to the 2.6 kernel series for the Atmel
AT91RM9200 processor.
This patch is the support for Atmel's DK and EK boards.
Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-at91rm9200')
-rw-r--r-- | arch/arm/mach-at91rm9200/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/mach-at91rm9200/board-dk.c | 138 | ||||
-rw-r--r-- | arch/arm/mach-at91rm9200/board-ek.c | 131 |
3 files changed, 271 insertions, 2 deletions
diff --git a/arch/arm/mach-at91rm9200/Makefile b/arch/arm/mach-at91rm9200/Makefile index 1f2805ca6e21..a1b4ea3ec470 100644 --- a/arch/arm/mach-at91rm9200/Makefile +++ b/arch/arm/mach-at91rm9200/Makefile | |||
@@ -8,8 +8,8 @@ obj-n := | |||
8 | obj- := | 8 | obj- := |
9 | 9 | ||
10 | # Board-specific support | 10 | # Board-specific support |
11 | #obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o | 11 | obj-$(CONFIG_ARCH_AT91RM9200DK) += board-dk.o |
12 | #obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o | 12 | obj-$(CONFIG_MACH_AT91RM9200EK) += board-ek.o |
13 | #obj-$(CONFIG_MACH_CSB337) += board-csb337.o | 13 | #obj-$(CONFIG_MACH_CSB337) += board-csb337.o |
14 | #obj-$(CONFIG_MACH_CSB637) += board-csb637.o | 14 | #obj-$(CONFIG_MACH_CSB637) += board-csb637.o |
15 | #obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o | 15 | #obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o |
diff --git a/arch/arm/mach-at91rm9200/board-dk.c b/arch/arm/mach-at91rm9200/board-dk.c new file mode 100644 index 000000000000..8c747a31b95a --- /dev/null +++ b/arch/arm/mach-at91rm9200/board-dk.c | |||
@@ -0,0 +1,138 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91rm9200/board-dk.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * | ||
6 | * Epson S1D framebuffer glue code is: | ||
7 | * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #include <linux/config.h> | ||
25 | #include <linux/types.h> | ||
26 | #include <linux/init.h> | ||
27 | #include <linux/mm.h> | ||
28 | #include <linux/module.h> | ||
29 | #include <linux/platform_device.h> | ||
30 | |||
31 | #include <asm/hardware.h> | ||
32 | #include <asm/setup.h> | ||
33 | #include <asm/mach-types.h> | ||
34 | #include <asm/irq.h> | ||
35 | |||
36 | #include <asm/mach/arch.h> | ||
37 | #include <asm/mach/map.h> | ||
38 | #include <asm/mach/irq.h> | ||
39 | |||
40 | #include <asm/arch/hardware.h> | ||
41 | #include <asm/mach/serial_at91rm9200.h> | ||
42 | #include <asm/arch/board.h> | ||
43 | |||
44 | #include "generic.h" | ||
45 | |||
46 | static void __init dk_init_irq(void) | ||
47 | { | ||
48 | /* Initialize AIC controller */ | ||
49 | at91rm9200_init_irq(NULL); | ||
50 | |||
51 | /* Set up the GPIO interrupts */ | ||
52 | at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * Serial port configuration. | ||
57 | * 0 .. 3 = USART0 .. USART3 | ||
58 | * 4 = DBGU | ||
59 | */ | ||
60 | #define DK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
61 | #define DK_SERIAL_CONSOLE 0 /* ttyS0 */ | ||
62 | |||
63 | static void __init dk_map_io(void) | ||
64 | { | ||
65 | int serial[AT91_NR_UART] = DK_UART_MAP; | ||
66 | int i; | ||
67 | |||
68 | at91rm9200_map_io(); | ||
69 | |||
70 | /* Initialize clocks: 18.432 MHz crystal */ | ||
71 | at91_clock_init(18432000); | ||
72 | |||
73 | #ifdef CONFIG_SERIAL_AT91 | ||
74 | at91_console_port = DK_SERIAL_CONSOLE; | ||
75 | memcpy(at91_serial_map, serial, sizeof(serial)); | ||
76 | |||
77 | /* Register UARTs */ | ||
78 | for (i = 0; i < AT91_NR_UART; i++) { | ||
79 | if (at91_serial_map[i] >= 0) | ||
80 | at91_register_uart(i, at91_serial_map[i]); | ||
81 | } | ||
82 | #endif | ||
83 | } | ||
84 | |||
85 | static struct at91_eth_data __initdata dk_eth_data = { | ||
86 | .phy_irq_pin = AT91_PIN_PC4, | ||
87 | .is_rmii = 1, | ||
88 | }; | ||
89 | |||
90 | static struct at91_usbh_data __initdata dk_usbh_data = { | ||
91 | .ports = 2, | ||
92 | }; | ||
93 | |||
94 | static struct at91_udc_data __initdata dk_udc_data = { | ||
95 | .vbus_pin = AT91_PIN_PD4, | ||
96 | .pullup_pin = AT91_PIN_PD5, | ||
97 | }; | ||
98 | |||
99 | static struct at91_cf_data __initdata dk_cf_data = { | ||
100 | .det_pin = AT91_PIN_PB0, | ||
101 | .rst_pin = AT91_PIN_PC5, | ||
102 | // .irq_pin = ... not connected | ||
103 | // .vcc_pin = ... always powered | ||
104 | }; | ||
105 | |||
106 | static struct at91_mmc_data __initdata dk_mmc_data = { | ||
107 | .is_b = 0, | ||
108 | .wire4 = 1, | ||
109 | }; | ||
110 | |||
111 | static void __init dk_board_init(void) | ||
112 | { | ||
113 | /* Ethernet */ | ||
114 | at91_add_device_eth(&dk_eth_data); | ||
115 | /* USB Host */ | ||
116 | at91_add_device_usbh(&dk_usbh_data); | ||
117 | /* USB Device */ | ||
118 | at91_add_device_udc(&dk_udc_data); | ||
119 | /* Compact Flash */ | ||
120 | at91_add_device_cf(&dk_cf_data); | ||
121 | /* MMC */ | ||
122 | at91_set_gpio_output(AT91_PIN_PB7, 1); /* this MMC card slot can optionally use SPI signaling (CS3). default: MMC */ | ||
123 | at91_add_device_mmc(&dk_mmc_data); | ||
124 | /* VGA */ | ||
125 | // dk_add_device_video(); | ||
126 | } | ||
127 | |||
128 | MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK") | ||
129 | /* Maintainer: SAN People/Atmel */ | ||
130 | .phys_ram = AT91_SDRAM_BASE, | ||
131 | .phys_io = AT91_BASE_SYS, | ||
132 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
133 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
134 | .timer = &at91rm9200_timer, | ||
135 | .map_io = dk_map_io, | ||
136 | .init_irq = dk_init_irq, | ||
137 | .init_machine = dk_board_init, | ||
138 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91rm9200/board-ek.c b/arch/arm/mach-at91rm9200/board-ek.c new file mode 100644 index 000000000000..d140645711be --- /dev/null +++ b/arch/arm/mach-at91rm9200/board-ek.c | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91rm9200/board-ek.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * | ||
6 | * Epson S1D framebuffer glue code is: | ||
7 | * Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #include <linux/config.h> | ||
25 | #include <linux/types.h> | ||
26 | #include <linux/init.h> | ||
27 | #include <linux/mm.h> | ||
28 | #include <linux/module.h> | ||
29 | #include <linux/platform_device.h> | ||
30 | |||
31 | #include <asm/hardware.h> | ||
32 | #include <asm/setup.h> | ||
33 | #include <asm/mach-types.h> | ||
34 | #include <asm/irq.h> | ||
35 | |||
36 | #include <asm/mach/arch.h> | ||
37 | #include <asm/mach/map.h> | ||
38 | #include <asm/mach/irq.h> | ||
39 | |||
40 | #include <asm/arch/hardware.h> | ||
41 | #include <asm/mach/serial_at91rm9200.h> | ||
42 | #include <asm/arch/board.h> | ||
43 | |||
44 | #include "generic.h" | ||
45 | |||
46 | static void __init ek_init_irq(void) | ||
47 | { | ||
48 | /* Initialize AIC controller */ | ||
49 | at91rm9200_init_irq(NULL); | ||
50 | |||
51 | /* Set up the GPIO interrupts */ | ||
52 | at91_gpio_irq_setup(BGA_GPIO_BANKS); | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * Serial port configuration. | ||
57 | * 0 .. 3 = USART0 .. USART3 | ||
58 | * 4 = DBGU | ||
59 | */ | ||
60 | #define EK_UART_MAP { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
61 | #define EK_SERIAL_CONSOLE 0 /* ttyS0 */ | ||
62 | |||
63 | static void __init ek_map_io(void) | ||
64 | { | ||
65 | int serial[AT91_NR_UART] = EK_UART_MAP; | ||
66 | int i; | ||
67 | |||
68 | at91rm9200_map_io(); | ||
69 | |||
70 | /* Initialize clocks: 18.432 MHz crystal */ | ||
71 | at91_clock_init(18432000); | ||
72 | |||
73 | #ifdef CONFIG_SERIAL_AT91 | ||
74 | at91_console_port = EK_SERIAL_CONSOLE; | ||
75 | memcpy(at91_serial_map, serial, sizeof(serial)); | ||
76 | |||
77 | /* Register UARTs */ | ||
78 | for (i = 0; i < AT91_NR_UART; i++) { | ||
79 | if (serial[i] >= 0) | ||
80 | at91_register_uart(i, serial[i]); | ||
81 | } | ||
82 | #endif | ||
83 | } | ||
84 | |||
85 | static struct at91_eth_data __initdata ek_eth_data = { | ||
86 | .phy_irq_pin = AT91_PIN_PC4, | ||
87 | .is_rmii = 1, | ||
88 | }; | ||
89 | |||
90 | static struct at91_usbh_data __initdata ek_usbh_data = { | ||
91 | .ports = 2, | ||
92 | }; | ||
93 | |||
94 | static struct at91_udc_data __initdata ek_udc_data = { | ||
95 | .vbus_pin = AT91_PIN_PD4, | ||
96 | .pullup_pin = AT91_PIN_PD5, | ||
97 | }; | ||
98 | |||
99 | static struct at91_mmc_data __initdata ek_mmc_data = { | ||
100 | .det_pin = AT91_PIN_PB27, | ||
101 | .is_b = 0, | ||
102 | .wire4 = 1, | ||
103 | .wp_pin = AT91_PIN_PA17, | ||
104 | }; | ||
105 | |||
106 | static void __init ek_board_init(void) | ||
107 | { | ||
108 | /* Ethernet */ | ||
109 | at91_add_device_eth(&ek_eth_data); | ||
110 | /* USB Host */ | ||
111 | at91_add_device_usbh(&ek_usbh_data); | ||
112 | /* USB Device */ | ||
113 | at91_add_device_udc(&ek_udc_data); | ||
114 | /* MMC */ | ||
115 | at91_set_gpio_output(AT91_PIN_PB22, 1); /* this MMC card slot can optionally use SPI signaling (CS3). default: MMC */ | ||
116 | at91_add_device_mmc(&ek_mmc_data); | ||
117 | /* VGA */ | ||
118 | // ek_add_device_video(); | ||
119 | } | ||
120 | |||
121 | MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK") | ||
122 | /* Maintainer: SAN People/Atmel */ | ||
123 | .phys_ram = AT91_SDRAM_BASE, | ||
124 | .phys_io = AT91_BASE_SYS, | ||
125 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
126 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
127 | .timer = &at91rm9200_timer, | ||
128 | .map_io = ek_map_io, | ||
129 | .init_irq = ek_init_irq, | ||
130 | .init_machine = ek_board_init, | ||
131 | MACHINE_END | ||