aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-at91')
-rw-r--r--arch/arm/mach-at91/Kconfig24
-rw-r--r--arch/arm/mach-at91/Makefile2
-rw-r--r--arch/arm/mach-at91/board-stamp9g20.c315
-rw-r--r--arch/arm/mach-at91/include/mach/board.h8
-rw-r--r--arch/arm/mach-at91/include/mach/cpu.h4
-rw-r--r--arch/arm/mach-at91/include/mach/system.h7
6 files changed, 343 insertions, 17 deletions
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 2db43a5ddd9b..841eaf8f27e2 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -23,14 +23,12 @@ choice
23config ARCH_AT91RM9200 23config ARCH_AT91RM9200
24 bool "AT91RM9200" 24 bool "AT91RM9200"
25 select CPU_ARM920T 25 select CPU_ARM920T
26 select GENERIC_TIME
27 select GENERIC_CLOCKEVENTS 26 select GENERIC_CLOCKEVENTS
28 select HAVE_AT91_USART3 27 select HAVE_AT91_USART3
29 28
30config ARCH_AT91SAM9260 29config ARCH_AT91SAM9260
31 bool "AT91SAM9260 or AT91SAM9XE" 30 bool "AT91SAM9260 or AT91SAM9XE"
32 select CPU_ARM926T 31 select CPU_ARM926T
33 select GENERIC_TIME
34 select GENERIC_CLOCKEVENTS 32 select GENERIC_CLOCKEVENTS
35 select HAVE_AT91_USART3 33 select HAVE_AT91_USART3
36 select HAVE_AT91_USART4 34 select HAVE_AT91_USART4
@@ -39,28 +37,24 @@ config ARCH_AT91SAM9260
39config ARCH_AT91SAM9261 37config ARCH_AT91SAM9261
40 bool "AT91SAM9261" 38 bool "AT91SAM9261"
41 select CPU_ARM926T 39 select CPU_ARM926T
42 select GENERIC_TIME
43 select GENERIC_CLOCKEVENTS 40 select GENERIC_CLOCKEVENTS
44 select HAVE_FB_ATMEL 41 select HAVE_FB_ATMEL
45 42
46config ARCH_AT91SAM9G10 43config ARCH_AT91SAM9G10
47 bool "AT91SAM9G10" 44 bool "AT91SAM9G10"
48 select CPU_ARM926T 45 select CPU_ARM926T
49 select GENERIC_TIME
50 select GENERIC_CLOCKEVENTS 46 select GENERIC_CLOCKEVENTS
51 select HAVE_FB_ATMEL 47 select HAVE_FB_ATMEL
52 48
53config ARCH_AT91SAM9263 49config ARCH_AT91SAM9263
54 bool "AT91SAM9263" 50 bool "AT91SAM9263"
55 select CPU_ARM926T 51 select CPU_ARM926T
56 select GENERIC_TIME
57 select GENERIC_CLOCKEVENTS 52 select GENERIC_CLOCKEVENTS
58 select HAVE_FB_ATMEL 53 select HAVE_FB_ATMEL
59 54
60config ARCH_AT91SAM9RL 55config ARCH_AT91SAM9RL
61 bool "AT91SAM9RL" 56 bool "AT91SAM9RL"
62 select CPU_ARM926T 57 select CPU_ARM926T
63 select GENERIC_TIME
64 select GENERIC_CLOCKEVENTS 58 select GENERIC_CLOCKEVENTS
65 select HAVE_AT91_USART3 59 select HAVE_AT91_USART3
66 select HAVE_FB_ATMEL 60 select HAVE_FB_ATMEL
@@ -68,7 +62,6 @@ config ARCH_AT91SAM9RL
68config ARCH_AT91SAM9G20 62config ARCH_AT91SAM9G20
69 bool "AT91SAM9G20" 63 bool "AT91SAM9G20"
70 select CPU_ARM926T 64 select CPU_ARM926T
71 select GENERIC_TIME
72 select GENERIC_CLOCKEVENTS 65 select GENERIC_CLOCKEVENTS
73 select HAVE_AT91_USART3 66 select HAVE_AT91_USART3
74 select HAVE_AT91_USART4 67 select HAVE_AT91_USART4
@@ -77,7 +70,6 @@ config ARCH_AT91SAM9G20
77config ARCH_AT91SAM9G45 70config ARCH_AT91SAM9G45
78 bool "AT91SAM9G45" 71 bool "AT91SAM9G45"
79 select CPU_ARM926T 72 select CPU_ARM926T
80 select GENERIC_TIME
81 select GENERIC_CLOCKEVENTS 73 select GENERIC_CLOCKEVENTS
82 select HAVE_AT91_USART3 74 select HAVE_AT91_USART3
83 select HAVE_FB_ATMEL 75 select HAVE_FB_ATMEL
@@ -85,18 +77,17 @@ config ARCH_AT91SAM9G45
85config ARCH_AT91CAP9 77config ARCH_AT91CAP9
86 bool "AT91CAP9" 78 bool "AT91CAP9"
87 select CPU_ARM926T 79 select CPU_ARM926T
88 select GENERIC_TIME
89 select GENERIC_CLOCKEVENTS 80 select GENERIC_CLOCKEVENTS
90 select HAVE_FB_ATMEL 81 select HAVE_FB_ATMEL
91 82
92config ARCH_AT572D940HF 83config ARCH_AT572D940HF
93 bool "AT572D940HF" 84 bool "AT572D940HF"
94 select CPU_ARM926T 85 select CPU_ARM926T
95 select GENERIC_TIME
96 select GENERIC_CLOCKEVENTS 86 select GENERIC_CLOCKEVENTS
97 87
98config ARCH_AT91X40 88config ARCH_AT91X40
99 bool "AT91x40" 89 bool "AT91x40"
90 select ARCH_USES_GETTIMEOFFSET
100 91
101endchoice 92endchoice
102 93
@@ -360,6 +351,19 @@ config MACH_CPU9G20
360 Select this if you are using a Eukrea Electromatique's 351 Select this if you are using a Eukrea Electromatique's
361 CPU9G20 Board <http://www.eukrea.com/> 352 CPU9G20 Board <http://www.eukrea.com/>
362 353
354config MACH_PORTUXG20
355 bool "taskit PortuxG20"
356 help
357 Select this if you are using taskit's PortuxG20.
358 <http://www.taskit.de/en/>
359
360config MACH_STAMP9G20
361 bool "taskit Stamp9G20 CPU module"
362 help
363 Select this if you are using taskit's Stamp9G20 CPU module on its
364 evaluation board.
365 <http://www.taskit.de/en/>
366
363endif 367endif
364 368
365# ---------------------------------------------------------- 369# ----------------------------------------------------------
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index d4004557532a..c1f821e58222 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -63,6 +63,8 @@ obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
63obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o 63obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o
64obj-$(CONFIG_MACH_AT91SAM9G20EK_2MMC) += board-sam9g20ek-2slot-mmc.o 64obj-$(CONFIG_MACH_AT91SAM9G20EK_2MMC) += board-sam9g20ek-2slot-mmc.o
65obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o 65obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o
66obj-$(CONFIG_MACH_STAMP9G20) += board-stamp9g20.o
67obj-$(CONFIG_MACH_PORTUXG20) += board-stamp9g20.o
66 68
67# AT91SAM9G45 board-specific support 69# AT91SAM9G45 board-specific support
68obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o 70obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o
diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c
new file mode 100644
index 000000000000..87958274290f
--- /dev/null
+++ b/arch/arm/mach-at91/board-stamp9g20.c
@@ -0,0 +1,315 @@
1/*
2 * Copyright (C) 2010 Christian Glindkamp <christian.glindkamp@taskit.de>
3 * taskit GmbH
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include <linux/mm.h>
21#include <linux/platform_device.h>
22#include <linux/gpio.h>
23#include <linux/w1-gpio.h>
24
25#include <asm/mach-types.h>
26#include <asm/mach/arch.h>
27
28#include <mach/board.h>
29#include <mach/at91sam9_smc.h>
30
31#include "sam9_smc.h"
32#include "generic.h"
33
34
35static void __init portuxg20_map_io(void)
36{
37 /* Initialize processor: 18.432 MHz crystal */
38 at91sam9260_initialize(18432000);
39
40 /* DGBU on ttyS0. (Rx & Tx only) */
41 at91_register_uart(0, 0, 0);
42
43 /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
44 at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
45 | ATMEL_UART_DTR | ATMEL_UART_DSR
46 | ATMEL_UART_DCD | ATMEL_UART_RI);
47
48 /* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */
49 at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
50
51 /* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */
52 at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
53
54 /* USART4 on ttyS5. (Rx, Tx only) */
55 at91_register_uart(AT91SAM9260_ID_US4, 5, 0);
56
57 /* USART5 on ttyS6. (Rx, Tx only) */
58 at91_register_uart(AT91SAM9260_ID_US5, 6, 0);
59
60 /* set serial console to ttyS0 (ie, DBGU) */
61 at91_set_serial_console(0);
62}
63
64static void __init stamp9g20_map_io(void)
65{
66 /* Initialize processor: 18.432 MHz crystal */
67 at91sam9260_initialize(18432000);
68
69 /* DGBU on ttyS0. (Rx & Tx only) */
70 at91_register_uart(0, 0, 0);
71
72 /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
73 at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
74 | ATMEL_UART_DTR | ATMEL_UART_DSR
75 | ATMEL_UART_DCD | ATMEL_UART_RI);
76
77 /* set serial console to ttyS0 (ie, DBGU) */
78 at91_set_serial_console(0);
79}
80
81static void __init init_irq(void)
82{
83 at91sam9260_init_interrupts(NULL);
84}
85
86
87/*
88 * NAND flash
89 */
90static struct atmel_nand_data __initdata nand_data = {
91 .ale = 21,
92 .cle = 22,
93 .rdy_pin = AT91_PIN_PC13,
94 .enable_pin = AT91_PIN_PC14,
95 .bus_width_16 = 0,
96};
97
98static struct sam9_smc_config __initdata nand_smc_config = {
99 .ncs_read_setup = 0,
100 .nrd_setup = 2,
101 .ncs_write_setup = 0,
102 .nwe_setup = 2,
103
104 .ncs_read_pulse = 4,
105 .nrd_pulse = 4,
106 .ncs_write_pulse = 4,
107 .nwe_pulse = 4,
108
109 .read_cycle = 7,
110 .write_cycle = 7,
111
112 .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
113 .tdf_cycles = 3,
114};
115
116static void __init add_device_nand(void)
117{
118 /* configure chip-select 3 (NAND) */
119 sam9_smc_configure(3, &nand_smc_config);
120
121 at91_add_device_nand(&nand_data);
122}
123
124
125/*
126 * MCI (SD/MMC)
127 * det_pin, wp_pin and vcc_pin are not connected
128 */
129#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
130static struct mci_platform_data __initdata mmc_data = {
131 .slot[0] = {
132 .bus_width = 4,
133 },
134};
135#else
136static struct at91_mmc_data __initdata mmc_data = {
137 .slot_b = 0,
138 .wire4 = 1,
139};
140#endif
141
142
143/*
144 * USB Host port
145 */
146static struct at91_usbh_data __initdata usbh_data = {
147 .ports = 2,
148};
149
150
151/*
152 * USB Device port
153 */
154static struct at91_udc_data __initdata portuxg20_udc_data = {
155 .vbus_pin = AT91_PIN_PC7,
156 .pullup_pin = 0, /* pull-up driven by UDC */
157};
158
159static struct at91_udc_data __initdata stamp9g20_udc_data = {
160 .vbus_pin = AT91_PIN_PA22,
161 .pullup_pin = 0, /* pull-up driven by UDC */
162};
163
164
165/*
166 * MACB Ethernet device
167 */
168static struct at91_eth_data __initdata macb_data = {
169 .phy_irq_pin = AT91_PIN_PA28,
170 .is_rmii = 1,
171};
172
173
174/*
175 * LEDs
176 */
177static struct gpio_led portuxg20_leds[] = {
178 {
179 .name = "LED2",
180 .gpio = AT91_PIN_PC5,
181 .default_trigger = "none",
182 }, {
183 .name = "LED3",
184 .gpio = AT91_PIN_PC4,
185 .default_trigger = "none",
186 }, {
187 .name = "LED4",
188 .gpio = AT91_PIN_PC10,
189 .default_trigger = "heartbeat",
190 }
191};
192
193static struct gpio_led stamp9g20_leds[] = {
194 {
195 .name = "D8",
196 .gpio = AT91_PIN_PB18,
197 .active_low = 1,
198 .default_trigger = "none",
199 }, {
200 .name = "D9",
201 .gpio = AT91_PIN_PB19,
202 .active_low = 1,
203 .default_trigger = "none",
204 }, {
205 .name = "D10",
206 .gpio = AT91_PIN_PB20,
207 .active_low = 1,
208 .default_trigger = "heartbeat",
209 }
210};
211
212
213/*
214 * SPI devices
215 */
216static struct spi_board_info portuxg20_spi_devices[] = {
217 {
218 .modalias = "spidev",
219 .chip_select = 0,
220 .max_speed_hz = 1 * 1000 * 1000,
221 .bus_num = 0,
222 }, {
223 .modalias = "spidev",
224 .chip_select = 0,
225 .max_speed_hz = 1 * 1000 * 1000,
226 .bus_num = 1,
227 },
228};
229
230
231/*
232 * Dallas 1-Wire
233 */
234static struct w1_gpio_platform_data w1_gpio_pdata = {
235 .pin = AT91_PIN_PA29,
236 .is_open_drain = 1,
237};
238
239static struct platform_device w1_device = {
240 .name = "w1-gpio",
241 .id = -1,
242 .dev.platform_data = &w1_gpio_pdata,
243};
244
245void add_w1(void)
246{
247 at91_set_GPIO_periph(w1_gpio_pdata.pin, 1);
248 at91_set_multi_drive(w1_gpio_pdata.pin, 1);
249 platform_device_register(&w1_device);
250}
251
252
253static void __init generic_board_init(void)
254{
255 /* Serial */
256 at91_add_device_serial();
257 /* NAND */
258 add_device_nand();
259 /* MMC */
260#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
261 at91_add_device_mci(0, &mmc_data);
262#else
263 at91_add_device_mmc(0, &mmc_data);
264#endif
265 /* USB Host */
266 at91_add_device_usbh(&usbh_data);
267 /* Ethernet */
268 at91_add_device_eth(&macb_data);
269 /* I2C */
270 at91_add_device_i2c(NULL, 0);
271 /* W1 */
272 add_w1();
273}
274
275static void __init portuxg20_board_init(void)
276{
277 generic_board_init();
278 /* SPI */
279 at91_add_device_spi(portuxg20_spi_devices, ARRAY_SIZE(portuxg20_spi_devices));
280 /* USB Device */
281 at91_add_device_udc(&portuxg20_udc_data);
282 /* LEDs */
283 at91_gpio_leds(portuxg20_leds, ARRAY_SIZE(portuxg20_leds));
284}
285
286static void __init stamp9g20_board_init(void)
287{
288 generic_board_init();
289 /* USB Device */
290 at91_add_device_udc(&stamp9g20_udc_data);
291 /* LEDs */
292 at91_gpio_leds(stamp9g20_leds, ARRAY_SIZE(stamp9g20_leds));
293}
294
295MACHINE_START(PORTUXG20, "taskit PortuxG20")
296 /* Maintainer: taskit GmbH */
297 .phys_io = AT91_BASE_SYS,
298 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
299 .boot_params = AT91_SDRAM_BASE + 0x100,
300 .timer = &at91sam926x_timer,
301 .map_io = portuxg20_map_io,
302 .init_irq = init_irq,
303 .init_machine = portuxg20_board_init,
304MACHINE_END
305
306MACHINE_START(STAMP9G20, "taskit Stamp9G20")
307 /* Maintainer: taskit GmbH */
308 .phys_io = AT91_BASE_SYS,
309 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
310 .boot_params = AT91_SDRAM_BASE + 0x100,
311 .timer = &at91sam926x_timer,
312 .map_io = stamp9g20_map_io,
313 .init_irq = init_irq,
314 .init_machine = stamp9g20_board_init,
315MACHINE_END
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
index ceaec6c16eb2..df2ed848c9f8 100644
--- a/arch/arm/mach-at91/include/mach/board.h
+++ b/arch/arm/mach-at91/include/mach/board.h
@@ -39,6 +39,7 @@
39#include <linux/usb/atmel_usba_udc.h> 39#include <linux/usb/atmel_usba_udc.h>
40#include <linux/atmel-mci.h> 40#include <linux/atmel-mci.h>
41#include <sound/atmel-ac97c.h> 41#include <sound/atmel-ac97c.h>
42#include <linux/serial.h>
42 43
43 /* USB Device */ 44 /* USB Device */
44struct at91_udc_data { 45struct at91_udc_data {
@@ -143,9 +144,10 @@ extern struct platform_device *atmel_default_console_device;
143extern void __init __deprecated at91_init_serial(struct at91_uart_config *config); 144extern void __init __deprecated at91_init_serial(struct at91_uart_config *config);
144 145
145struct atmel_uart_data { 146struct atmel_uart_data {
146 short use_dma_tx; /* use transmit DMA? */ 147 short use_dma_tx; /* use transmit DMA? */
147 short use_dma_rx; /* use receive DMA? */ 148 short use_dma_rx; /* use receive DMA? */
148 void __iomem *regs; /* virtual base address, if any */ 149 void __iomem *regs; /* virt. base address, if any */
150 struct serial_rs485 rs485; /* rs485 settings */
149}; 151};
150extern void __init at91_add_device_serial(void); 152extern void __init at91_add_device_serial(void);
151 153
diff --git a/arch/arm/mach-at91/include/mach/cpu.h b/arch/arm/mach-at91/include/mach/cpu.h
index 5a0650101d45..833659d1200a 100644
--- a/arch/arm/mach-at91/include/mach/cpu.h
+++ b/arch/arm/mach-at91/include/mach/cpu.h
@@ -21,7 +21,7 @@
21#define ARCH_ID_AT91SAM9260 0x019803a0 21#define ARCH_ID_AT91SAM9260 0x019803a0
22#define ARCH_ID_AT91SAM9261 0x019703a0 22#define ARCH_ID_AT91SAM9261 0x019703a0
23#define ARCH_ID_AT91SAM9263 0x019607a0 23#define ARCH_ID_AT91SAM9263 0x019607a0
24#define ARCH_ID_AT91SAM9G10 0x819903a0 24#define ARCH_ID_AT91SAM9G10 0x019903a0
25#define ARCH_ID_AT91SAM9G20 0x019905a0 25#define ARCH_ID_AT91SAM9G20 0x019905a0
26#define ARCH_ID_AT91SAM9RL64 0x019b03a0 26#define ARCH_ID_AT91SAM9RL64 0x019b03a0
27#define ARCH_ID_AT91SAM9G45 0x819b05a0 27#define ARCH_ID_AT91SAM9G45 0x819b05a0
@@ -108,7 +108,7 @@ static inline unsigned long at91cap9_rev_identify(void)
108#endif 108#endif
109 109
110#ifdef CONFIG_ARCH_AT91SAM9G10 110#ifdef CONFIG_ARCH_AT91SAM9G10
111#define cpu_is_at91sam9g10() (at91_cpu_identify() == ARCH_ID_AT91SAM9G10) 111#define cpu_is_at91sam9g10() ((at91_cpu_identify() & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10)
112#else 112#else
113#define cpu_is_at91sam9g10() (0) 113#define cpu_is_at91sam9g10() (0)
114#endif 114#endif
diff --git a/arch/arm/mach-at91/include/mach/system.h b/arch/arm/mach-at91/include/mach/system.h
index 5268af3933c2..c80e090b3670 100644
--- a/arch/arm/mach-at91/include/mach/system.h
+++ b/arch/arm/mach-at91/include/mach/system.h
@@ -24,21 +24,24 @@
24#include <mach/hardware.h> 24#include <mach/hardware.h>
25#include <mach/at91_st.h> 25#include <mach/at91_st.h>
26#include <mach/at91_dbgu.h> 26#include <mach/at91_dbgu.h>
27#include <mach/at91_pmc.h>
27 28
28static inline void arch_idle(void) 29static inline void arch_idle(void)
29{ 30{
31#ifndef CONFIG_DEBUG_KERNEL
30 /* 32 /*
31 * Disable the processor clock. The processor will be automatically 33 * Disable the processor clock. The processor will be automatically
32 * re-enabled by an interrupt or by a reset. 34 * re-enabled by an interrupt or by a reset.
33 */ 35 */
34// at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK); 36 at91_sys_write(AT91_PMC_SCDR, AT91_PMC_PCK);
35 37#else
36 /* 38 /*
37 * Set the processor (CP15) into 'Wait for Interrupt' mode. 39 * Set the processor (CP15) into 'Wait for Interrupt' mode.
38 * Unlike disabling the processor clock via the PMC (above) 40 * Unlike disabling the processor clock via the PMC (above)
39 * this allows the processor to be woken via JTAG. 41 * this allows the processor to be woken via JTAG.
40 */ 42 */
41 cpu_do_idle(); 43 cpu_do_idle();
44#endif
42} 45}
43 46
44void (*at91_arch_reset)(void); 47void (*at91_arch_reset)(void);