diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2011-11-17 08:36:23 -0500 |
---|---|---|
committer | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2013-12-16 11:51:33 -0500 |
commit | 6d85e2b0b6bed6ae7070426d5e43174c593e075c (patch) | |
tree | 43025c22a958a6634adcae71d336f9f8dde09cf4 | |
parent | 319e2e3f63c348a9b66db4667efa73178e18b17d (diff) |
ARM: new platform for Energy Micro's EFM32 Cortex-M3 SoCs
There are still some missing parts (e.g. board support, device trees),
but with these bits added on top of this patch I can successfully boot a
EFM32GG-DK3750 board that uses an EFM32GG990F1024.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
-rw-r--r-- | arch/arm/Kconfig | 22 | ||||
-rw-r--r-- | arch/arm/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/configs/efm32_defconfig | 102 | ||||
-rw-r--r-- | arch/arm/mach-efm32/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-efm32/Makefile.boot | 3 | ||||
-rw-r--r-- | arch/arm/mach-efm32/dtmachine.c | 15 | ||||
-rw-r--r-- | arch/arm/mach-efm32/include/mach/entry-macro.S | 4 | ||||
-rw-r--r-- | arch/arm/mach-efm32/include/mach/timex.h | 3 |
8 files changed, 150 insertions, 1 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index c1f1a7eee953..6808460a48ba 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -410,6 +410,26 @@ config ARCH_EBSA110 | |||
410 | Ethernet interface, two PCMCIA sockets, two serial ports and a | 410 | Ethernet interface, two PCMCIA sockets, two serial ports and a |
411 | parallel port. | 411 | parallel port. |
412 | 412 | ||
413 | config ARCH_EFM32 | ||
414 | bool "Energy Micro efm32" | ||
415 | depends on !MMU | ||
416 | select ARCH_REQUIRE_GPIOLIB | ||
417 | select ARM_NVIC | ||
418 | # CLKSRC_MMIO is wrong here, but needed until a proper fix is merged, | ||
419 | # i.e. CLKSRC_EFM32 selecting CLKSRC_MMIO | ||
420 | select CLKSRC_MMIO | ||
421 | select CLKSRC_OF | ||
422 | select COMMON_CLK | ||
423 | select CPU_V7M | ||
424 | select GENERIC_CLOCKEVENTS | ||
425 | select NO_DMA | ||
426 | select NO_IOPORT | ||
427 | select SPARSE_IRQ | ||
428 | select USE_OF | ||
429 | help | ||
430 | Support for Energy Micro's (now Silicon Labs) efm32 Giant Gecko | ||
431 | processors. | ||
432 | |||
413 | config ARCH_EP93XX | 433 | config ARCH_EP93XX |
414 | bool "EP93xx-based" | 434 | bool "EP93xx-based" |
415 | select ARCH_HAS_HOLES_MEMORYMODEL | 435 | select ARCH_HAS_HOLES_MEMORYMODEL |
@@ -1799,7 +1819,7 @@ config FORCE_MAX_ZONEORDER | |||
1799 | int "Maximum zone order" if ARCH_SHMOBILE | 1819 | int "Maximum zone order" if ARCH_SHMOBILE |
1800 | range 11 64 if ARCH_SHMOBILE | 1820 | range 11 64 if ARCH_SHMOBILE |
1801 | default "12" if SOC_AM33XX | 1821 | default "12" if SOC_AM33XX |
1802 | default "9" if SA1111 | 1822 | default "9" if SA1111 || ARCH_EFM32 |
1803 | default "11" | 1823 | default "11" |
1804 | help | 1824 | help |
1805 | The kernel memory allocator divides physically contiguous memory | 1825 | The kernel memory allocator divides physically contiguous memory |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index c99b1086d83d..6da9abb30460 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -153,6 +153,7 @@ machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx | |||
153 | machine-$(CONFIG_ARCH_DAVINCI) += davinci | 153 | machine-$(CONFIG_ARCH_DAVINCI) += davinci |
154 | machine-$(CONFIG_ARCH_DOVE) += dove | 154 | machine-$(CONFIG_ARCH_DOVE) += dove |
155 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 | 155 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 |
156 | machine-$(CONFIG_ARCH_EFM32) += efm32 | ||
156 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx | 157 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx |
157 | machine-$(CONFIG_ARCH_EXYNOS) += exynos | 158 | machine-$(CONFIG_ARCH_EXYNOS) += exynos |
158 | machine-$(CONFIG_ARCH_GEMINI) += gemini | 159 | machine-$(CONFIG_ARCH_GEMINI) += gemini |
diff --git a/arch/arm/configs/efm32_defconfig b/arch/arm/configs/efm32_defconfig new file mode 100644 index 000000000000..f59fffb3d0c6 --- /dev/null +++ b/arch/arm/configs/efm32_defconfig | |||
@@ -0,0 +1,102 @@ | |||
1 | CONFIG_HIGH_RES_TIMERS=y | ||
2 | CONFIG_LOG_BUF_SHIFT=12 | ||
3 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
4 | # CONFIG_UID16 is not set | ||
5 | # CONFIG_BASE_FULL is not set | ||
6 | # CONFIG_FUTEX is not set | ||
7 | # CONFIG_EPOLL is not set | ||
8 | # CONFIG_SIGNALFD is not set | ||
9 | # CONFIG_EVENTFD is not set | ||
10 | # CONFIG_AIO is not set | ||
11 | CONFIG_EMBEDDED=y | ||
12 | # CONFIG_VM_EVENT_COUNTERS is not set | ||
13 | # CONFIG_SLUB_DEBUG is not set | ||
14 | # CONFIG_LBDAF is not set | ||
15 | # CONFIG_BLK_DEV_BSG is not set | ||
16 | # CONFIG_IOSCHED_DEADLINE is not set | ||
17 | # CONFIG_IOSCHED_CFQ is not set | ||
18 | # CONFIG_MMU is not set | ||
19 | CONFIG_ARCH_EFM32=y | ||
20 | # CONFIG_KUSER_HELPERS is not set | ||
21 | CONFIG_SET_MEM_PARAM=y | ||
22 | CONFIG_DRAM_BASE=0x88000000 | ||
23 | CONFIG_DRAM_SIZE=0x00400000 | ||
24 | CONFIG_FLASH_MEM_BASE=0x8c000000 | ||
25 | CONFIG_FLASH_SIZE=0x01000000 | ||
26 | CONFIG_PREEMPT=y | ||
27 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
28 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
29 | CONFIG_XIP_KERNEL=y | ||
30 | CONFIG_XIP_PHYS_ADDR=0x8c000000 | ||
31 | CONFIG_BINFMT_FLAT=y | ||
32 | CONFIG_BINFMT_SHARED_FLAT=y | ||
33 | # CONFIG_COREDUMP is not set | ||
34 | CONFIG_NET=y | ||
35 | CONFIG_PACKET=y | ||
36 | CONFIG_UNIX=y | ||
37 | CONFIG_INET=y | ||
38 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
39 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
40 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
41 | # CONFIG_INET_LRO is not set | ||
42 | # CONFIG_INET_DIAG is not set | ||
43 | # CONFIG_IPV6 is not set | ||
44 | # CONFIG_WIRELESS is not set | ||
45 | CONFIG_DEVTMPFS=y | ||
46 | CONFIG_DEVTMPFS_MOUNT=y | ||
47 | # CONFIG_FW_LOADER is not set | ||
48 | CONFIG_MTD=y | ||
49 | CONFIG_MTD_BLOCK_RO=y | ||
50 | CONFIG_MTD_ROM=y | ||
51 | CONFIG_MTD_UCLINUX=y | ||
52 | CONFIG_PROC_DEVICETREE=y | ||
53 | # CONFIG_BLK_DEV is not set | ||
54 | CONFIG_NETDEVICES=y | ||
55 | # CONFIG_NET_VENDOR_ARC is not set | ||
56 | # CONFIG_NET_CADENCE is not set | ||
57 | # CONFIG_NET_VENDOR_BROADCOM is not set | ||
58 | # CONFIG_NET_VENDOR_CIRRUS is not set | ||
59 | # CONFIG_NET_VENDOR_FARADAY is not set | ||
60 | # CONFIG_NET_VENDOR_INTEL is not set | ||
61 | # CONFIG_NET_VENDOR_MARVELL is not set | ||
62 | CONFIG_KS8851=y | ||
63 | # CONFIG_NET_VENDOR_MICROCHIP is not set | ||
64 | # CONFIG_NET_VENDOR_NATSEMI is not set | ||
65 | # CONFIG_NET_VENDOR_SEEQ is not set | ||
66 | # CONFIG_NET_VENDOR_SMSC is not set | ||
67 | # CONFIG_NET_VENDOR_STMICRO is not set | ||
68 | # CONFIG_NET_VENDOR_VIA is not set | ||
69 | # CONFIG_NET_VENDOR_WIZNET is not set | ||
70 | # CONFIG_WLAN is not set | ||
71 | # CONFIG_INPUT is not set | ||
72 | # CONFIG_SERIO is not set | ||
73 | # CONFIG_VT is not set | ||
74 | # CONFIG_UNIX98_PTYS is not set | ||
75 | # CONFIG_LEGACY_PTYS is not set | ||
76 | CONFIG_SERIAL_NONSTANDARD=y | ||
77 | # CONFIG_DEVKMEM is not set | ||
78 | CONFIG_SERIAL_EFM32_UART=y | ||
79 | CONFIG_SERIAL_EFM32_UART_CONSOLE=y | ||
80 | # CONFIG_HW_RANDOM is not set | ||
81 | CONFIG_SPI=y | ||
82 | CONFIG_SPI_EFM32=y | ||
83 | CONFIG_GPIO_SYSFS=y | ||
84 | # CONFIG_USB_SUPPORT is not set | ||
85 | CONFIG_MMC=y | ||
86 | CONFIG_MMC_SPI=y | ||
87 | # CONFIG_IOMMU_SUPPORT is not set | ||
88 | CONFIG_EXT2_FS=y | ||
89 | # CONFIG_FILE_LOCKING is not set | ||
90 | # CONFIG_DNOTIFY is not set | ||
91 | # CONFIG_INOTIFY_USER is not set | ||
92 | CONFIG_ROMFS_FS=y | ||
93 | CONFIG_ROMFS_BACKED_BY_MTD=y | ||
94 | # CONFIG_NETWORK_FILESYSTEMS is not set | ||
95 | CONFIG_PRINTK_TIME=y | ||
96 | CONFIG_DEBUG_INFO=y | ||
97 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
98 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
99 | CONFIG_MAGIC_SYSRQ=y | ||
100 | # CONFIG_SCHED_DEBUG is not set | ||
101 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
102 | # CONFIG_FTRACE is not set | ||
diff --git a/arch/arm/mach-efm32/Makefile b/arch/arm/mach-efm32/Makefile new file mode 100644 index 000000000000..3a74af7413e8 --- /dev/null +++ b/arch/arm/mach-efm32/Makefile | |||
@@ -0,0 +1 @@ | |||
obj-y += dtmachine.o | |||
diff --git a/arch/arm/mach-efm32/Makefile.boot b/arch/arm/mach-efm32/Makefile.boot new file mode 100644 index 000000000000..eacfc3f5c33e --- /dev/null +++ b/arch/arm/mach-efm32/Makefile.boot | |||
@@ -0,0 +1,3 @@ | |||
1 | # Empty file waiting for deletion once Makefile.boot isn't needed any more. | ||
2 | # Patch waits for application at | ||
3 | # http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=7889/1 . | ||
diff --git a/arch/arm/mach-efm32/dtmachine.c b/arch/arm/mach-efm32/dtmachine.c new file mode 100644 index 000000000000..2367495193c1 --- /dev/null +++ b/arch/arm/mach-efm32/dtmachine.c | |||
@@ -0,0 +1,15 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | |||
3 | #include <asm/v7m.h> | ||
4 | |||
5 | #include <asm/mach/arch.h> | ||
6 | |||
7 | static const char *const efm32gg_compat[] __initconst = { | ||
8 | "efm32,dk3750", | ||
9 | NULL | ||
10 | }; | ||
11 | |||
12 | DT_MACHINE_START(EFM32DT, "EFM32 (Device Tree Support)") | ||
13 | .dt_compat = efm32gg_compat, | ||
14 | .restart = armv7m_restart, | ||
15 | MACHINE_END | ||
diff --git a/arch/arm/mach-efm32/include/mach/entry-macro.S b/arch/arm/mach-efm32/include/mach/entry-macro.S new file mode 100644 index 000000000000..322159d5ed91 --- /dev/null +++ b/arch/arm/mach-efm32/include/mach/entry-macro.S | |||
@@ -0,0 +1,4 @@ | |||
1 | /* | ||
2 | * Empty file waiting for deletion once <mach/entry-macro.S> isn't needed any | ||
3 | * more. Patch "ARM: v7-M: drop using mach/entry-macro.S" sitting in next. | ||
4 | */ | ||
diff --git a/arch/arm/mach-efm32/include/mach/timex.h b/arch/arm/mach-efm32/include/mach/timex.h new file mode 100644 index 000000000000..7a8b26da6599 --- /dev/null +++ b/arch/arm/mach-efm32/include/mach/timex.h | |||
@@ -0,0 +1,3 @@ | |||
1 | /* | ||
2 | * Empty file waiting for deletion once <mach/timex.h> isn't needed any more. | ||
3 | */ | ||