From 849369d6c66d3054688672f97d31fceb8e8230fb Mon Sep 17 00:00:00 2001 From: root Date: Fri, 25 Dec 2015 04:40:36 +0000 Subject: initial_commit --- arch/arm/mach-at91/Kconfig | 524 +++++++ arch/arm/mach-at91/Makefile | 93 ++ arch/arm/mach-at91/Makefile.boot | 18 + arch/arm/mach-at91/at91cap9.c | 422 ++++++ arch/arm/mach-at91/at91cap9_devices.c | 1259 ++++++++++++++++ arch/arm/mach-at91/at91rm9200.c | 396 +++++ arch/arm/mach-at91/at91rm9200_devices.c | 1176 +++++++++++++++ arch/arm/mach-at91/at91rm9200_time.c | 209 +++ arch/arm/mach-at91/at91sam9260.c | 434 ++++++ arch/arm/mach-at91/at91sam9260_devices.c | 1328 ++++++++++++++++ arch/arm/mach-at91/at91sam9261.c | 385 +++++ arch/arm/mach-at91/at91sam9261_devices.c | 1053 +++++++++++++ arch/arm/mach-at91/at91sam9263.c | 390 +++++ arch/arm/mach-at91/at91sam9263_devices.c | 1434 ++++++++++++++++++ arch/arm/mach-at91/at91sam926x_time.c | 188 +++ arch/arm/mach-at91/at91sam9_alt_reset.S | 48 + arch/arm/mach-at91/at91sam9g45.c | 406 +++++ arch/arm/mach-at91/at91sam9g45_devices.c | 1591 ++++++++++++++++++++ arch/arm/mach-at91/at91sam9rl.c | 383 +++++ arch/arm/mach-at91/at91sam9rl_devices.c | 1210 +++++++++++++++ arch/arm/mach-at91/at91x40.c | 78 + arch/arm/mach-at91/at91x40_time.c | 80 + arch/arm/mach-at91/board-1arm.c | 104 ++ arch/arm/mach-at91/board-afeb-9260v1.c | 227 +++ arch/arm/mach-at91/board-cam60.c | 206 +++ arch/arm/mach-at91/board-cap9adk.c | 404 +++++ arch/arm/mach-at91/board-carmeva.c | 170 +++ arch/arm/mach-at91/board-cpu9krea.c | 383 +++++ arch/arm/mach-at91/board-cpuat91.c | 187 +++ arch/arm/mach-at91/board-csb337.c | 265 ++++ arch/arm/mach-at91/board-csb637.c | 146 ++ arch/arm/mach-at91/board-eb01.c | 49 + arch/arm/mach-at91/board-eb9200.c | 128 ++ arch/arm/mach-at91/board-ecbat91.c | 180 +++ arch/arm/mach-at91/board-eco920.c | 142 ++ arch/arm/mach-at91/board-flexibity.c | 162 ++ arch/arm/mach-at91/board-foxg20.c | 274 ++++ arch/arm/mach-at91/board-gsia18s.c | 584 +++++++ arch/arm/mach-at91/board-kafa.c | 106 ++ arch/arm/mach-at91/board-kb9202.c | 147 ++ arch/arm/mach-at91/board-neocore926.c | 395 +++++ arch/arm/mach-at91/board-pcontrol-g20.c | 230 +++ arch/arm/mach-at91/board-picotux200.c | 131 ++ arch/arm/mach-at91/board-qil-a9260.c | 276 ++++ arch/arm/mach-at91/board-rm9200dk.c | 235 +++ arch/arm/mach-at91/board-rm9200ek.c | 201 +++ arch/arm/mach-at91/board-sam9-l9260.c | 220 +++ arch/arm/mach-at91/board-sam9260ek.c | 361 +++++ arch/arm/mach-at91/board-sam9261ek.c | 628 ++++++++ arch/arm/mach-at91/board-sam9263ek.c | 459 ++++++ arch/arm/mach-at91/board-sam9g20ek.c | 420 ++++++ arch/arm/mach-at91/board-sam9m10g45ek.c | 429 ++++++ arch/arm/mach-at91/board-sam9rlek.c | 337 +++++ arch/arm/mach-at91/board-snapper9260.c | 188 +++ arch/arm/mach-at91/board-stamp9g20.c | 315 ++++ arch/arm/mach-at91/board-usb-a9260.c | 236 +++ arch/arm/mach-at91/board-usb-a9263.c | 252 ++++ arch/arm/mach-at91/board-yl-9200.c | 606 ++++++++ arch/arm/mach-at91/clock.c | 778 ++++++++++ arch/arm/mach-at91/clock.h | 47 + arch/arm/mach-at91/cpuidle.c | 94 ++ arch/arm/mach-at91/generic.h | 87 ++ arch/arm/mach-at91/gpio.c | 632 ++++++++ arch/arm/mach-at91/include/mach/at91_adc.h | 61 + arch/arm/mach-at91/include/mach/at91_aic.h | 53 + arch/arm/mach-at91/include/mach/at91_dbgu.h | 66 + arch/arm/mach-at91/include/mach/at91_mci.h | 115 ++ arch/arm/mach-at91/include/mach/at91_pio.h | 49 + arch/arm/mach-at91/include/mach/at91_pit.h | 32 + arch/arm/mach-at91/include/mach/at91_pmc.h | 133 ++ arch/arm/mach-at91/include/mach/at91_rstc.h | 41 + arch/arm/mach-at91/include/mach/at91_rtc.h | 75 + arch/arm/mach-at91/include/mach/at91_rtt.h | 35 + arch/arm/mach-at91/include/mach/at91_shdwc.h | 38 + arch/arm/mach-at91/include/mach/at91_spi.h | 81 + arch/arm/mach-at91/include/mach/at91_ssc.h | 106 ++ arch/arm/mach-at91/include/mach/at91_st.h | 49 + arch/arm/mach-at91/include/mach/at91_tc.h | 146 ++ arch/arm/mach-at91/include/mach/at91_twi.h | 68 + arch/arm/mach-at91/include/mach/at91_wdt.h | 37 + arch/arm/mach-at91/include/mach/at91cap9.h | 124 ++ arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h | 108 ++ arch/arm/mach-at91/include/mach/at91cap9_matrix.h | 137 ++ arch/arm/mach-at91/include/mach/at91rm9200.h | 113 ++ arch/arm/mach-at91/include/mach/at91rm9200_emac.h | 138 ++ arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 160 ++ arch/arm/mach-at91/include/mach/at91sam9260.h | 136 ++ .../mach-at91/include/mach/at91sam9260_matrix.h | 80 + arch/arm/mach-at91/include/mach/at91sam9261.h | 106 ++ .../mach-at91/include/mach/at91sam9261_matrix.h | 64 + arch/arm/mach-at91/include/mach/at91sam9263.h | 125 ++ .../mach-at91/include/mach/at91sam9263_matrix.h | 129 ++ arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h | 130 ++ arch/arm/mach-at91/include/mach/at91sam9_sdramc.h | 91 ++ arch/arm/mach-at91/include/mach/at91sam9_smc.h | 76 + arch/arm/mach-at91/include/mach/at91sam9g45.h | 151 ++ .../mach-at91/include/mach/at91sam9g45_matrix.h | 153 ++ arch/arm/mach-at91/include/mach/at91sam9rl.h | 113 ++ .../arm/mach-at91/include/mach/at91sam9rl_matrix.h | 96 ++ arch/arm/mach-at91/include/mach/at91x40.h | 59 + arch/arm/mach-at91/include/mach/at_hdmac.h | 102 ++ arch/arm/mach-at91/include/mach/atmel-mci.h | 24 + arch/arm/mach-at91/include/mach/board.h | 210 +++ arch/arm/mach-at91/include/mach/clkdev.h | 7 + arch/arm/mach-at91/include/mach/cpu.h | 195 +++ arch/arm/mach-at91/include/mach/debug-macro.S | 37 + arch/arm/mach-at91/include/mach/entry-macro.S | 32 + arch/arm/mach-at91/include/mach/gpio.h | 228 +++ arch/arm/mach-at91/include/mach/gsia18s.h | 33 + arch/arm/mach-at91/include/mach/hardware.h | 93 ++ arch/arm/mach-at91/include/mach/io.h | 48 + arch/arm/mach-at91/include/mach/irqs.h | 48 + arch/arm/mach-at91/include/mach/memory.h | 26 + arch/arm/mach-at91/include/mach/stamp9g20.h | 7 + arch/arm/mach-at91/include/mach/system.h | 59 + arch/arm/mach-at91/include/mach/system_rev.h | 25 + arch/arm/mach-at91/include/mach/timex.h | 87 ++ arch/arm/mach-at91/include/mach/uncompress.h | 76 + arch/arm/mach-at91/include/mach/vmalloc.h | 26 + arch/arm/mach-at91/irq.c | 166 ++ arch/arm/mach-at91/leds.c | 197 +++ arch/arm/mach-at91/pm.c | 329 ++++ arch/arm/mach-at91/pm.h | 107 ++ arch/arm/mach-at91/pm_slowclock.S | 326 ++++ arch/arm/mach-at91/sam9_smc.c | 47 + arch/arm/mach-at91/sam9_smc.h | 33 + 126 files changed, 30568 insertions(+) create mode 100644 arch/arm/mach-at91/Kconfig create mode 100644 arch/arm/mach-at91/Makefile create mode 100644 arch/arm/mach-at91/Makefile.boot create mode 100644 arch/arm/mach-at91/at91cap9.c create mode 100644 arch/arm/mach-at91/at91cap9_devices.c create mode 100644 arch/arm/mach-at91/at91rm9200.c create mode 100644 arch/arm/mach-at91/at91rm9200_devices.c create mode 100644 arch/arm/mach-at91/at91rm9200_time.c create mode 100644 arch/arm/mach-at91/at91sam9260.c create mode 100644 arch/arm/mach-at91/at91sam9260_devices.c create mode 100644 arch/arm/mach-at91/at91sam9261.c create mode 100644 arch/arm/mach-at91/at91sam9261_devices.c create mode 100644 arch/arm/mach-at91/at91sam9263.c create mode 100644 arch/arm/mach-at91/at91sam9263_devices.c create mode 100644 arch/arm/mach-at91/at91sam926x_time.c create mode 100644 arch/arm/mach-at91/at91sam9_alt_reset.S create mode 100644 arch/arm/mach-at91/at91sam9g45.c create mode 100644 arch/arm/mach-at91/at91sam9g45_devices.c create mode 100644 arch/arm/mach-at91/at91sam9rl.c create mode 100644 arch/arm/mach-at91/at91sam9rl_devices.c create mode 100644 arch/arm/mach-at91/at91x40.c create mode 100644 arch/arm/mach-at91/at91x40_time.c create mode 100644 arch/arm/mach-at91/board-1arm.c create mode 100644 arch/arm/mach-at91/board-afeb-9260v1.c create mode 100644 arch/arm/mach-at91/board-cam60.c create mode 100644 arch/arm/mach-at91/board-cap9adk.c create mode 100644 arch/arm/mach-at91/board-carmeva.c create mode 100644 arch/arm/mach-at91/board-cpu9krea.c create mode 100644 arch/arm/mach-at91/board-cpuat91.c create mode 100644 arch/arm/mach-at91/board-csb337.c create mode 100644 arch/arm/mach-at91/board-csb637.c create mode 100644 arch/arm/mach-at91/board-eb01.c create mode 100644 arch/arm/mach-at91/board-eb9200.c create mode 100644 arch/arm/mach-at91/board-ecbat91.c create mode 100644 arch/arm/mach-at91/board-eco920.c create mode 100644 arch/arm/mach-at91/board-flexibity.c create mode 100644 arch/arm/mach-at91/board-foxg20.c create mode 100644 arch/arm/mach-at91/board-gsia18s.c create mode 100644 arch/arm/mach-at91/board-kafa.c create mode 100644 arch/arm/mach-at91/board-kb9202.c create mode 100644 arch/arm/mach-at91/board-neocore926.c create mode 100644 arch/arm/mach-at91/board-pcontrol-g20.c create mode 100644 arch/arm/mach-at91/board-picotux200.c create mode 100644 arch/arm/mach-at91/board-qil-a9260.c create mode 100644 arch/arm/mach-at91/board-rm9200dk.c create mode 100644 arch/arm/mach-at91/board-rm9200ek.c create mode 100644 arch/arm/mach-at91/board-sam9-l9260.c create mode 100644 arch/arm/mach-at91/board-sam9260ek.c create mode 100644 arch/arm/mach-at91/board-sam9261ek.c create mode 100644 arch/arm/mach-at91/board-sam9263ek.c create mode 100644 arch/arm/mach-at91/board-sam9g20ek.c create mode 100644 arch/arm/mach-at91/board-sam9m10g45ek.c create mode 100644 arch/arm/mach-at91/board-sam9rlek.c create mode 100644 arch/arm/mach-at91/board-snapper9260.c create mode 100644 arch/arm/mach-at91/board-stamp9g20.c create mode 100644 arch/arm/mach-at91/board-usb-a9260.c create mode 100644 arch/arm/mach-at91/board-usb-a9263.c create mode 100644 arch/arm/mach-at91/board-yl-9200.c create mode 100644 arch/arm/mach-at91/clock.c create mode 100644 arch/arm/mach-at91/clock.h create mode 100644 arch/arm/mach-at91/cpuidle.c create mode 100644 arch/arm/mach-at91/generic.h create mode 100644 arch/arm/mach-at91/gpio.c create mode 100644 arch/arm/mach-at91/include/mach/at91_adc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_aic.h create mode 100644 arch/arm/mach-at91/include/mach/at91_dbgu.h create mode 100644 arch/arm/mach-at91/include/mach/at91_mci.h create mode 100644 arch/arm/mach-at91/include/mach/at91_pio.h create mode 100644 arch/arm/mach-at91/include/mach/at91_pit.h create mode 100644 arch/arm/mach-at91/include/mach/at91_pmc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_rstc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_rtc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_rtt.h create mode 100644 arch/arm/mach-at91/include/mach/at91_shdwc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_spi.h create mode 100644 arch/arm/mach-at91/include/mach/at91_ssc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_st.h create mode 100644 arch/arm/mach-at91/include/mach/at91_tc.h create mode 100644 arch/arm/mach-at91/include/mach/at91_twi.h create mode 100644 arch/arm/mach-at91/include/mach/at91_wdt.h create mode 100644 arch/arm/mach-at91/include/mach/at91cap9.h create mode 100644 arch/arm/mach-at91/include/mach/at91cap9_ddrsdr.h create mode 100644 arch/arm/mach-at91/include/mach/at91cap9_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91rm9200.h create mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_emac.h create mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9260.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9260_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9261.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9261_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9263.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9263_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9_ddrsdr.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9_sdramc.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9g45.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9rl.h create mode 100644 arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h create mode 100644 arch/arm/mach-at91/include/mach/at91x40.h create mode 100644 arch/arm/mach-at91/include/mach/at_hdmac.h create mode 100644 arch/arm/mach-at91/include/mach/atmel-mci.h create mode 100644 arch/arm/mach-at91/include/mach/board.h create mode 100644 arch/arm/mach-at91/include/mach/clkdev.h create mode 100644 arch/arm/mach-at91/include/mach/cpu.h create mode 100644 arch/arm/mach-at91/include/mach/debug-macro.S create mode 100644 arch/arm/mach-at91/include/mach/entry-macro.S create mode 100644 arch/arm/mach-at91/include/mach/gpio.h create mode 100644 arch/arm/mach-at91/include/mach/gsia18s.h create mode 100644 arch/arm/mach-at91/include/mach/hardware.h create mode 100644 arch/arm/mach-at91/include/mach/io.h create mode 100644 arch/arm/mach-at91/include/mach/irqs.h create mode 100644 arch/arm/mach-at91/include/mach/memory.h create mode 100644 arch/arm/mach-at91/include/mach/stamp9g20.h create mode 100644 arch/arm/mach-at91/include/mach/system.h create mode 100644 arch/arm/mach-at91/include/mach/system_rev.h create mode 100644 arch/arm/mach-at91/include/mach/timex.h create mode 100644 arch/arm/mach-at91/include/mach/uncompress.h create mode 100644 arch/arm/mach-at91/include/mach/vmalloc.h create mode 100644 arch/arm/mach-at91/irq.c create mode 100644 arch/arm/mach-at91/leds.c create mode 100644 arch/arm/mach-at91/pm.c create mode 100644 arch/arm/mach-at91/pm.h create mode 100644 arch/arm/mach-at91/pm_slowclock.S create mode 100644 arch/arm/mach-at91/sam9_smc.c create mode 100644 arch/arm/mach-at91/sam9_smc.h (limited to 'arch/arm/mach-at91') diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig new file mode 100644 index 00000000..22484670 --- /dev/null +++ b/arch/arm/mach-at91/Kconfig @@ -0,0 +1,524 @@ +if ARCH_AT91 + +config HAVE_AT91_DATAFLASH_CARD + bool + +config HAVE_AT91_USART3 + bool + +config HAVE_AT91_USART4 + bool + +config HAVE_AT91_USART5 + bool + +menu "Atmel AT91 System-on-Chip" + +choice + prompt "Atmel AT91 Processor" + +config ARCH_AT91RM9200 + bool "AT91RM9200" + select CPU_ARM920T + select GENERIC_CLOCKEVENTS + select HAVE_AT91_USART3 + +config ARCH_AT91SAM9260 + bool "AT91SAM9260 or AT91SAM9XE" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_AT91_USART3 + select HAVE_AT91_USART4 + select HAVE_AT91_USART5 + select HAVE_NET_MACB + +config ARCH_AT91SAM9261 + bool "AT91SAM9261" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_FB_ATMEL + +config ARCH_AT91SAM9G10 + bool "AT91SAM9G10" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_FB_ATMEL + +config ARCH_AT91SAM9263 + bool "AT91SAM9263" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_FB_ATMEL + select HAVE_NET_MACB + +config ARCH_AT91SAM9RL + bool "AT91SAM9RL" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_AT91_USART3 + select HAVE_FB_ATMEL + +config ARCH_AT91SAM9G20 + bool "AT91SAM9G20" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_AT91_USART3 + select HAVE_AT91_USART4 + select HAVE_AT91_USART5 + select HAVE_NET_MACB + +config ARCH_AT91SAM9G45 + bool "AT91SAM9G45" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_AT91_USART3 + select HAVE_FB_ATMEL + select HAVE_NET_MACB + +config ARCH_AT91CAP9 + bool "AT91CAP9" + select CPU_ARM926T + select GENERIC_CLOCKEVENTS + select HAVE_FB_ATMEL + select HAVE_NET_MACB + +config ARCH_AT91X40 + bool "AT91x40" + select ARCH_USES_GETTIMEOFFSET + +endchoice + +config AT91_PMC_UNIT + bool + default !ARCH_AT91X40 + +# ---------------------------------------------------------- + +if ARCH_AT91RM9200 + +comment "AT91RM9200 Board Type" + +config MACH_ONEARM + bool "Ajeco 1ARM Single Board Computer" + help + Select this if you are using Ajeco's 1ARM Single Board Computer. + + +config ARCH_AT91RM9200DK + bool "Atmel AT91RM9200-DK Development board" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91RM9200-DK Development board. + (Discontinued) + +config MACH_AT91RM9200EK + bool "Atmel AT91RM9200-EK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit. + + +config MACH_CSB337 + bool "Cogent CSB337" + help + Select this if you are using Cogent's CSB337 board. + + +config MACH_CSB637 + bool "Cogent CSB637" + help + Select this if you are using Cogent's CSB637 board. + + +config MACH_CARMEVA + bool "Conitec ARM&EVA" + help + Select this if you are using Conitec's AT91RM9200-MCU-Module. + + +config MACH_ATEB9200 + bool "Embest ATEB9200" + help + Select this if you are using Embest's ATEB9200 board. + + +config MACH_KB9200 + bool "KwikByte KB920x" + help + Select this if you are using KwikByte's KB920x board. + + +config MACH_PICOTUX2XX + bool "picotux 200" + help + Select this if you are using a picotux 200. + + +config MACH_KAFA + bool "Sperry-Sun KAFA board" + help + Select this if you are using Sperry-Sun's KAFA board. + +config MACH_ECBAT91 + bool "emQbit ECB_AT91 SBC" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using emQbit's ECB_AT91 board. + + +config MACH_YL9200 + bool "ucDragon YL-9200" + help + Select this if you are using the ucDragon YL-9200 board. + +config MACH_CPUAT91 + bool "Eukrea CPUAT91" + help + Select this if you are using the Eukrea Electromatique's + CPUAT91 board . + +config MACH_ECO920 + bool "eco920" + help + Select this if you are using the eco920 board + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9260 + +comment "AT91SAM9260 Variants" + +config ARCH_AT91SAM9260_SAM9XE + bool "AT91SAM9XE" + help + Select this if you are using Atmel's AT91SAM9XE System-on-Chip. + They are basically AT91SAM9260s with various sizes of embedded Flash. + +comment "AT91SAM9260 / AT91SAM9XE Board Type" + +config MACH_AT91SAM9260EK + bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit + + +config MACH_CAM60 + bool "KwikByte KB9260 (CAM60) board" + help + Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260. + + +config MACH_SAM9_L9260 + bool "Olimex SAM9-L9260 board" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. + + +config MACH_AFEB9260 + bool "Custom afeb9260 board v1" + help + Select this if you are using custom afeb9260 board based on + open hardware design. Select this for revision 1 of the board. + + + +config MACH_USB_A9260 + bool "CALAO USB-A9260" + help + Select this if you are using a Calao Systems USB-A9260. + + +config MACH_QIL_A9260 + bool "CALAO QIL-A9260 board" + help + Select this if you are using a Calao Systems QIL-A9260 Board. + + +config MACH_CPU9260 + bool "Eukrea CPU9260 board" + help + Select this if you are using a Eukrea Electromatique's + CPU9260 Board + +config MACH_FLEXIBITY + bool "Flexibity Connect board" + help + Select this if you are using Flexibity Connect board + + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9261 + +comment "AT91SAM9261 Board Type" + +config MACH_AT91SAM9261EK + bool "Atmel AT91SAM9261-EK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. + + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G10 + +comment "AT91SAM9G10 Board Type" + +config MACH_AT91SAM9G10EK + bool "Atmel AT91SAM9G10-EK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit. + + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9263 + +comment "AT91SAM9263 Board Type" + +config MACH_AT91SAM9263EK + bool "Atmel AT91SAM9263-EK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. + + +config MACH_USB_A9263 + bool "CALAO USB-A9263" + help + Select this if you are using a Calao Systems USB-A9263. + + +config MACH_NEOCORE926 + bool "Adeneo NEOCORE926" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using the Adeneo Neocore 926 board. + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9RL + +comment "AT91SAM9RL Board Type" + +config MACH_AT91SAM9RLEK + bool "Atmel AT91SAM9RL-EK Evaluation Kit" + help + Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit. + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G20 + +comment "AT91SAM9G20 Board Type" + +config MACH_AT91SAM9G20EK + bool "Atmel AT91SAM9G20-EK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit + that embeds only one SD/MMC slot. + +config MACH_AT91SAM9G20EK_2MMC + depends on MACH_AT91SAM9G20EK + bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots" + help + Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit + with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and + onwards. + +config MACH_CPU9G20 + bool "Eukrea CPU9G20 board" + help + Select this if you are using a Eukrea Electromatique's + CPU9G20 Board + +config MACH_ACMENETUSFOXG20 + bool "Acme Systems srl FOX Board G20" + help + Select this if you are using Acme Systems + FOX Board G20 + +config MACH_PORTUXG20 + bool "taskit PortuxG20" + help + Select this if you are using taskit's PortuxG20. + + +config MACH_STAMP9G20 + bool "taskit Stamp9G20 CPU module" + help + Select this if you are using taskit's Stamp9G20 CPU module on its + evaluation board. + + +config MACH_PCONTROL_G20 + bool "PControl G20 CPU module" + help + Select this if you are using taskit's Stamp9G20 CPU module on this + carrier board, beeing the decentralized unit of a building automation + system; featuring nvram, eth-switch, iso-rs485, display, io + +config MACH_GSIA18S + bool "GS_IA18_S board" + help + This enables support for the GS_IA18_S board + produced by GeoSIG Ltd company. This is an internet accelerograph. + +endif + +if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20) +comment "AT91SAM9260/AT91SAM9G20 boards" + +config MACH_SNAPPER_9260 + bool "Bluewater Systems Snapper 9260/9G20 module" + help + Select this if you are using the Bluewater Systems Snapper 9260 or + Snapper 9G20 modules. + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G45 + +comment "AT91SAM9G45 Board Type" + +config MACH_AT91SAM9M10G45EK + bool "Atmel AT91SAM9M10G45-EK Evaluation Kits" + help + Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit. + "ES" at the end of the name means that this board is an + Engineering Sample. + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91CAP9 + +comment "AT91CAP9 Board Type" + +config MACH_AT91CAP9ADK + bool "Atmel AT91CAP9A-DK Evaluation Kit" + select HAVE_AT91_DATAFLASH_CARD + help + Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit. + + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91X40 + +comment "AT91X40 Board Type" + +config MACH_AT91EB01 + bool "Atmel AT91EB01 Evaluation Kit" + help + Select this if you are using Atmel's AT91EB01 Evaluation Kit. + It is also a popular target for simulators such as GDB's + ARM simulator (commonly known as the ARMulator) and the + Skyeye simulator. + +endif + +# ---------------------------------------------------------- + +comment "AT91 Board Options" + +config MTD_AT91_DATAFLASH_CARD + bool "Enable DataFlash Card support" + depends on HAVE_AT91_DATAFLASH_CARD + help + Enable support for the DataFlash card. + +# ---------------------------------------------------------- + +comment "AT91 Feature Selections" + +config AT91_PROGRAMMABLE_CLOCKS + bool "Programmable Clocks" + help + Select this if you need to program one or more of the PCK0..PCK3 + programmable clock outputs. + +config AT91_SLOW_CLOCK + bool "Suspend-to-RAM disables main oscillator" + depends on SUSPEND + help + Select this if you want Suspend-to-RAM to save the most power + possible (without powering off the CPU) by disabling the PLLs + and main oscillator so that only the 32 KiHz clock is available. + + When only that slow-clock is available, some peripherals lose + functionality. Many can't issue wakeup events unless faster + clocks are available. Some lose their operating state and + need to be completely re-initialized. + +config AT91_TIMER_HZ + int "Kernel HZ (jiffies per second)" + range 32 1024 + depends on ARCH_AT91 + default "128" if ARCH_AT91RM9200 + default "100" + help + On AT91rm9200 chips where you're using a system clock derived + from the 32768 Hz hardware clock, this tick rate should divide + it exactly: use a power-of-two value, such as 128 or 256, to + reduce timing errors caused by rounding. + + On AT91sam926x chips, or otherwise when using a higher precision + system clock (of at least several MHz), rounding is less of a + problem so it can be safer to use a decimal values like 100. + +choice + prompt "Select a UART for early kernel messages" + +config AT91_EARLY_DBGU + bool "DBGU" + +config AT91_EARLY_USART0 + bool "USART0" + +config AT91_EARLY_USART1 + bool "USART1" + +config AT91_EARLY_USART2 + bool "USART2" + depends on ! ARCH_AT91X40 + +config AT91_EARLY_USART3 + bool "USART3" + depends on HAVE_AT91_USART3 + +config AT91_EARLY_USART4 + bool "USART4" + depends on HAVE_AT91_USART4 + +config AT91_EARLY_USART5 + bool "USART5" + depends on HAVE_AT91_USART5 + +endchoice + +endmenu + +endif diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile new file mode 100644 index 00000000..96966231 --- /dev/null +++ b/arch/arm/mach-at91/Makefile @@ -0,0 +1,93 @@ +# +# Makefile for the linux kernel. +# + +obj-y := irq.o gpio.o +obj-m := +obj-n := +obj- := + +obj-$(CONFIG_AT91_PMC_UNIT) += clock.o + +# CPU-specific support +obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o +obj-$(CONFIG_ARCH_AT91SAM9260) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9G10) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o +obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o +obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o +obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o + +# AT91RM9200 board-specific support +obj-$(CONFIG_MACH_ONEARM) += board-1arm.o +obj-$(CONFIG_ARCH_AT91RM9200DK) += board-rm9200dk.o +obj-$(CONFIG_MACH_AT91RM9200EK) += board-rm9200ek.o +obj-$(CONFIG_MACH_CSB337) += board-csb337.o +obj-$(CONFIG_MACH_CSB637) += board-csb637.o +obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o +obj-$(CONFIG_MACH_KB9200) += board-kb9202.o +obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o +obj-$(CONFIG_MACH_KAFA) += board-kafa.o +obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o +obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o +obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o +obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o +obj-$(CONFIG_MACH_ECO920) += board-eco920.o + +# AT91SAM9260 board-specific support +obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o +obj-$(CONFIG_MACH_CAM60) += board-cam60.o +obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o +obj-$(CONFIG_MACH_USB_A9260) += board-usb-a9260.o +obj-$(CONFIG_MACH_QIL_A9260) += board-qil-a9260.o +obj-$(CONFIG_MACH_AFEB9260) += board-afeb-9260v1.o +obj-$(CONFIG_MACH_CPU9260) += board-cpu9krea.o +obj-$(CONFIG_MACH_FLEXIBITY) += board-flexibity.o + +# AT91SAM9261 board-specific support +obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o +obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o + +# AT91SAM9263 board-specific support +obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o +obj-$(CONFIG_MACH_USB_A9263) += board-usb-a9263.o +obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o + +# AT91SAM9RL board-specific support +obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o + +# AT91SAM9G20 board-specific support +obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o +obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o +obj-$(CONFIG_MACH_ACMENETUSFOXG20) += board-foxg20.o +obj-$(CONFIG_MACH_STAMP9G20) += board-stamp9g20.o +obj-$(CONFIG_MACH_PORTUXG20) += board-stamp9g20.o +obj-$(CONFIG_MACH_PCONTROL_G20) += board-pcontrol-g20.o board-stamp9g20.o +obj-$(CONFIG_MACH_GSIA18S) += board-gsia18s.o board-stamp9g20.o + +# AT91SAM9260/AT91SAM9G20 board-specific support +obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o + +# AT91SAM9G45 board-specific support +obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o + +# AT91CAP9 board-specific support +obj-$(CONFIG_MACH_AT91CAP9ADK) += board-cap9adk.o + +# AT91X40 board-specific support +obj-$(CONFIG_MACH_AT91EB01) += board-eb01.o + +# Drivers +obj-y += leds.o + +# Power Management +obj-$(CONFIG_PM) += pm.o +obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o +obj-$(CONFIG_CPU_IDLE) += cpuidle.o + +ifeq ($(CONFIG_PM_DEBUG),y) +CFLAGS_pm.o += -DDEBUG +endif diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot new file mode 100644 index 00000000..3462b815 --- /dev/null +++ b/arch/arm/mach-at91/Makefile.boot @@ -0,0 +1,18 @@ +# Note: the following conditions must always be true: +# ZRELADDR == virt_to_phys(TEXTADDR) +# PARAMS_PHYS must be within 4MB of ZRELADDR +# INITRD_PHYS must be in RAM + +ifeq ($(CONFIG_ARCH_AT91CAP9),y) + zreladdr-y := 0x70008000 +params_phys-y := 0x70000100 +initrd_phys-y := 0x70410000 +else ifeq ($(CONFIG_ARCH_AT91SAM9G45),y) + zreladdr-y := 0x70008000 +params_phys-y := 0x70000100 +initrd_phys-y := 0x70410000 +else + zreladdr-y := 0x20008000 +params_phys-y := 0x20000100 +initrd_phys-y := 0x20410000 +endif diff --git a/arch/arm/mach-at91/at91cap9.c b/arch/arm/mach-at91/at91cap9.c new file mode 100644 index 00000000..f1013d08 --- /dev/null +++ b/arch/arm/mach-at91/at91cap9.c @@ -0,0 +1,422 @@ +/* + * arch/arm/mach-at91/at91cap9.c + * + * Copyright (C) 2007 Stelian Pop + * Copyright (C) 2007 Lead Tech Design + * Copyright (C) 2007 Atmel Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "generic.h" +#include "clock.h" + +static struct map_desc at91cap9_io_desc[] __initdata = { + { + .virtual = AT91_VA_BASE_SYS, + .pfn = __phys_to_pfn(AT91_BASE_SYS), + .length = SZ_16K, + .type = MT_DEVICE, + }, { + .virtual = AT91_IO_VIRT_BASE - AT91CAP9_SRAM_SIZE, + .pfn = __phys_to_pfn(AT91CAP9_SRAM_BASE), + .length = AT91CAP9_SRAM_SIZE, + .type = MT_DEVICE, + }, +}; + +/* -------------------------------------------------------------------- + * Clocks + * -------------------------------------------------------------------- */ + +/* + * The peripheral clocks. + */ +static struct clk pioABCD_clk = { + .name = "pioABCD_clk", + .pmc_mask = 1 << AT91CAP9_ID_PIOABCD, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mpb0_clk = { + .name = "mpb0_clk", + .pmc_mask = 1 << AT91CAP9_ID_MPB0, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mpb1_clk = { + .name = "mpb1_clk", + .pmc_mask = 1 << AT91CAP9_ID_MPB1, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mpb2_clk = { + .name = "mpb2_clk", + .pmc_mask = 1 << AT91CAP9_ID_MPB2, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mpb3_clk = { + .name = "mpb3_clk", + .pmc_mask = 1 << AT91CAP9_ID_MPB3, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mpb4_clk = { + .name = "mpb4_clk", + .pmc_mask = 1 << AT91CAP9_ID_MPB4, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk usart0_clk = { + .name = "usart0_clk", + .pmc_mask = 1 << AT91CAP9_ID_US0, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk usart1_clk = { + .name = "usart1_clk", + .pmc_mask = 1 << AT91CAP9_ID_US1, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk usart2_clk = { + .name = "usart2_clk", + .pmc_mask = 1 << AT91CAP9_ID_US2, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mmc0_clk = { + .name = "mci0_clk", + .pmc_mask = 1 << AT91CAP9_ID_MCI0, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk mmc1_clk = { + .name = "mci1_clk", + .pmc_mask = 1 << AT91CAP9_ID_MCI1, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk can_clk = { + .name = "can_clk", + .pmc_mask = 1 << AT91CAP9_ID_CAN, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk twi_clk = { + .name = "twi_clk", + .pmc_mask = 1 << AT91CAP9_ID_TWI, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk spi0_clk = { + .name = "spi0_clk", + .pmc_mask = 1 << AT91CAP9_ID_SPI0, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk spi1_clk = { + .name = "spi1_clk", + .pmc_mask = 1 << AT91CAP9_ID_SPI1, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk ssc0_clk = { + .name = "ssc0_clk", + .pmc_mask = 1 << AT91CAP9_ID_SSC0, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk ssc1_clk = { + .name = "ssc1_clk", + .pmc_mask = 1 << AT91CAP9_ID_SSC1, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk ac97_clk = { + .name = "ac97_clk", + .pmc_mask = 1 << AT91CAP9_ID_AC97C, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk tcb_clk = { + .name = "tcb_clk", + .pmc_mask = 1 << AT91CAP9_ID_TCB, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk pwm_clk = { + .name = "pwm_clk", + .pmc_mask = 1 << AT91CAP9_ID_PWMC, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk macb_clk = { + .name = "macb_clk", + .pmc_mask = 1 << AT91CAP9_ID_EMAC, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk aestdes_clk = { + .name = "aestdes_clk", + .pmc_mask = 1 << AT91CAP9_ID_AESTDES, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk adc_clk = { + .name = "adc_clk", + .pmc_mask = 1 << AT91CAP9_ID_ADC, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk isi_clk = { + .name = "isi_clk", + .pmc_mask = 1 << AT91CAP9_ID_ISI, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk lcdc_clk = { + .name = "lcdc_clk", + .pmc_mask = 1 << AT91CAP9_ID_LCDC, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk dma_clk = { + .name = "dma_clk", + .pmc_mask = 1 << AT91CAP9_ID_DMA, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk udphs_clk = { + .name = "udphs_clk", + .pmc_mask = 1 << AT91CAP9_ID_UDPHS, + .type = CLK_TYPE_PERIPHERAL, +}; +static struct clk ohci_clk = { + .name = "ohci_clk", + .pmc_mask = 1 << AT91CAP9_ID_UHP, + .type = CLK_TYPE_PERIPHERAL, +}; + +static struct clk *periph_clocks[] __initdata = { + &pioABCD_clk, + &mpb0_clk, + &mpb1_clk, + &mpb2_clk, + &mpb3_clk, + &mpb4_clk, + &usart0_clk, + &usart1_clk, + &usart2_clk, + &mmc0_clk, + &mmc1_clk, + &can_clk, + &twi_clk, + &spi0_clk, + &spi1_clk, + &ssc0_clk, + &ssc1_clk, + &ac97_clk, + &tcb_clk, + &pwm_clk, + &macb_clk, + &aestdes_clk, + &adc_clk, + &isi_clk, + &lcdc_clk, + &dma_clk, + &udphs_clk, + &ohci_clk, + // irq0 .. irq1 +}; + +static struct clk_lookup periph_clocks_lookups[] = { + CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), + CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), + CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), + CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), + CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), + CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), + CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), + CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), + CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), +}; + +static struct clk_lookup usart_clocks_lookups[] = { + CLKDEV_CON_DEV_ID("usart", "atmel_usart.0", &mck), + CLKDEV_CON_DEV_ID("usart", "atmel_usart.1", &usart0_clk), + CLKDEV_CON_DEV_ID("usart", "atmel_usart.2", &usart1_clk), + CLKDEV_CON_DEV_ID("usart", "atmel_usart.3", &usart2_clk), +}; + +/* + * The four programmable clocks. + * You must configure pin multiplexing to bring these signals out. + */ +static struct clk pck0 = { + .name = "pck0", + .pmc_mask = AT91_PMC_PCK0, + .type = CLK_TYPE_PROGRAMMABLE, + .id = 0, +}; +static struct clk pck1 = { + .name = "pck1", + .pmc_mask = AT91_PMC_PCK1, + .type = CLK_TYPE_PROGRAMMABLE, + .id = 1, +}; +static struct clk pck2 = { + .name = "pck2", + .pmc_mask = AT91_PMC_PCK2, + .type = CLK_TYPE_PROGRAMMABLE, + .id = 2, +}; +static struct clk pck3 = { + .name = "pck3", + .pmc_mask = AT91_PMC_PCK3, + .type = CLK_TYPE_PROGRAMMABLE, + .id = 3, +}; + +static void __init at91cap9_register_clocks(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(periph_clocks); i++) + clk_register(periph_clocks[i]); + + clkdev_add_table(periph_clocks_lookups, + ARRAY_SIZE(periph_clocks_lookups)); + clkdev_add_table(usart_clocks_lookups, + ARRAY_SIZE(usart_clocks_lookups)); + + clk_register(&pck0); + clk_register(&pck1); + clk_register(&pck2); + clk_register(&pck3); +} + +static struct clk_lookup console_clock_lookup; + +void __init at91cap9_set_console_clock(int id) +{ + if (id >= ARRAY_SIZE(usart_clocks_lookups)) + return; + + console_clock_lookup.con_id = "usart"; + console_clock_lookup.clk = usart_clocks_lookups[id].clk; + clkdev_add(&console_clock_lookup); +} + +/* -------------------------------------------------------------------- + * GPIO + * -------------------------------------------------------------------- */ + +static struct at91_gpio_bank at91cap9_gpio[] = { + { + .id = AT91CAP9_ID_PIOABCD, + .offset = AT91_PIOA, + .clock = &pioABCD_clk, + }, { + .id = AT91CAP9_ID_PIOABCD, + .offset = AT91_PIOB, + .clock = &pioABCD_clk, + }, { + .id = AT91CAP9_ID_PIOABCD, + .offset = AT91_PIOC, + .clock = &pioABCD_clk, + }, { + .id = AT91CAP9_ID_PIOABCD, + .offset = AT91_PIOD, + .clock = &pioABCD_clk, + } +}; + +static void at91cap9_reset(void) +{ + at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST); +} + +static void at91cap9_poweroff(void) +{ + at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW); +} + + +/* -------------------------------------------------------------------- + * AT91CAP9 processor initialization + * -------------------------------------------------------------------- */ + +void __init at91cap9_map_io(void) +{ + /* Map peripherals */ + iotable_init(at91cap9_io_desc, ARRAY_SIZE(at91cap9_io_desc)); +} + +void __init at91cap9_initialize(unsigned long main_clock) +{ + at91_arch_reset = at91cap9_reset; + pm_power_off = at91cap9_poweroff; + at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1); + + /* Init clock subsystem */ + at91_clock_init(main_clock); + + /* Register the processor-specific clocks */ + at91cap9_register_clocks(); + + /* Register GPIO subsystem */ + at91_gpio_init(at91cap9_gpio, 4); + + /* Remember the silicon revision */ + if (cpu_is_at91cap9_revB()) + system_rev = 0xB; + else if (cpu_is_at91cap9_revC()) + system_rev = 0xC; +} + +/* -------------------------------------------------------------------- + * Interrupt initialization + * -------------------------------------------------------------------- */ + +/* + * The default interrupt priority levels (0 = lowest, 7 = highest). + */ +static unsigned int at91cap9_default_irq_priority[NR_AIC_IRQS] __initdata = { + 7, /* Advanced Interrupt Controller (FIQ) */ + 7, /* System Peripherals */ + 1, /* Parallel IO Controller A, B, C and D */ + 0, /* MP Block Peripheral 0 */ + 0, /* MP Block Peripheral 1 */ + 0, /* MP Block Peripheral 2 */ + 0, /* MP Block Peripheral 3 */ + 0, /* MP Block Peripheral 4 */ + 5, /* USART 0 */ + 5, /* USART 1 */ + 5, /* USART 2 */ + 0, /* Multimedia Card Interface 0 */ + 0, /* Multimedia Card Interface 1 */ + 3, /* CAN */ + 6, /* Two-Wire Interface */ + 5, /* Serial Peripheral Interface 0 */ + 5, /* Serial Peripheral Interface 1 */ + 4, /* Serial Synchronous Controller 0 */ + 4, /* Serial Synchronous Controller 1 */ + 5, /* AC97 Controller */ + 0, /* Timer Counter 0, 1 and 2 */ + 0, /* Pulse Width Modulation Controller */ + 3, /* Ethernet */ + 0, /* Advanced Encryption Standard, Triple DES*/ + 0, /* Analog-to-Digital Converter */ + 0, /* Image Sensor Interface */ + 3, /* LCD Controller */ + 0, /* DMA Controller */ + 2, /* USB Device Port */ + 2, /* USB Host port */ + 0, /* Advanced Interrupt Controller (IRQ0) */ + 0, /* Advanced Interrupt Controller (IRQ1) */ +}; + +void __init at91cap9_init_interrupts(unsigned int priority[NR_AIC_IRQS]) +{ + if (!priority) + priority = at91cap9_default_irq_priority; + + /* Initialize the AIC interrupt controller */ + at91_aic_init(priority); + + /* Enable GPIO interrupts */ + at91_gpio_irq_setup(); +} diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c new file mode 100644 index 00000000..dba0d8d8 --- /dev/null +++ b/arch/arm/mach-at91/at91cap9_devices.c @@ -0,0 +1,1259 @@ +/* + * arch/arm/mach-at91/at91cap9_devices.c + * + * Copyright (C) 2007 Stelian Pop + * Copyright (C) 2007 Lead Tech Design + * Copyright (C) 2007 Atmel Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ +#include +#include +#include + +#include +#include +#include + +#include