summaryrefslogtreecommitdiffstats
path: root/configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch')
-rw-r--r--configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch b/configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch
new file mode 100644
index 0000000..142cb90
--- /dev/null
+++ b/configs/platform-energymicro-efm32gg-dk3750/patches/linux-3.12-rc4/0006-ARM-DEBUG_LL-on-efm32-SoCs.patch
@@ -0,0 +1,116 @@
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Tue, 24 Sep 2013 15:52:44 +0200
+Subject: [PATCH] ARM: DEBUG_LL on efm32 SoCs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This implements output of debug messages on efm32 SoCs.
+
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+---
+ arch/arm/Kconfig.debug | 17 ++++++++++++++++
+ arch/arm/include/debug/efm32.S | 45 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 62 insertions(+)
+ create mode 100644 arch/arm/include/debug/efm32.S
+
+diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
+index 9762c84..2b32068 100644
+--- a/arch/arm/Kconfig.debug
++++ b/arch/arm/Kconfig.debug
+@@ -834,6 +834,20 @@ choice
+ options; the platform specific options are deprecated
+ and will be soon removed.
+
++ config DEBUG_LL_UART_EFM32
++ bool "Kernel low-level debugging via efm32 UART"
++ depends on ARCH_EFM32
++ help
++ Say Y here if you want the debug print routines to direct
++ their output to an UART or USART port on efm32 based
++ machines. Use the following addresses for DEBUG_UART_PHYS:
++
++ 0x4000c000 | USART0
++ 0x4000c400 | USART1
++ 0x4000c800 | USART2
++ 0x4000e000 | UART0
++ 0x4000e400 | UART1
++
+ config DEBUG_LL_UART_PL01X
+ bool "Kernel low-level debugging via ARM Ltd PL01x Primecell UART"
+ help
+@@ -885,6 +899,7 @@ config DEBUG_LL_INCLUDE
+ default "debug/8250.S" if DEBUG_LL_UART_8250 || DEBUG_UART_8250
+ default "debug/pl01x.S" if DEBUG_LL_UART_PL01X || DEBUG_UART_PL01X
+ default "debug/exynos.S" if DEBUG_EXYNOS_UART
++ default "debug/efm32.S" if DEBUG_LL_UART_EFM32
+ default "debug/icedcc.S" if DEBUG_ICEDCC
+ default "debug/imx.S" if DEBUG_IMX1_UART || \
+ DEBUG_IMX25_UART || \
+@@ -951,6 +966,7 @@ config DEBUG_UART_PHYS
+ default 0x20064000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2
+ default 0x20068000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3
+ default 0x20201000 if DEBUG_BCM2835
++ default 0x4000e400 if DEBUG_LL_UART_EFM32
+ default 0x40090000 if ARCH_LPC32XX
+ default 0x40100000 if DEBUG_PXA_UART1
+ default 0x42000000 if ARCH_GEMINI
+@@ -981,6 +997,7 @@ config DEBUG_UART_PHYS
+ default 0xfff36000 if DEBUG_HIGHBANK_UART
+ default 0xfffff700 if ARCH_IOP33X
+ depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
++ DEBUG_LL_UART_EFM32 || \
+ DEBUG_UART_8250 || DEBUG_UART_PL01X
+
+ config DEBUG_UART_VIRT
+diff --git a/arch/arm/include/debug/efm32.S b/arch/arm/include/debug/efm32.S
+new file mode 100644
+index 0000000..2265a19
+--- /dev/null
++++ b/arch/arm/include/debug/efm32.S
+@@ -0,0 +1,45 @@
++/*
++ * Copyright (C) 2013 Pengutronix
++ * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#define UARTn_CMD 0x000c
++#define UARTn_CMD_TXEN 0x0004
++
++#define UARTn_STATUS 0x0010
++#define UARTn_STATUS_TXC 0x0020
++#define UARTn_STATUS_TXBL 0x0040
++
++#define UARTn_TXDATA 0x0034
++
++ .macro addruart, rx, tmp
++ ldr \rx, =(CONFIG_DEBUG_UART_PHYS)
++
++ /*
++ * enable TX. The driver might disable it to save energy. We
++ * don't care about disabling at the end as during debug power
++ * consumption isn't that important.
++ */
++ ldr \tmp, =(UARTn_CMD_TXEN)
++ str \tmp, [\rx, #UARTn_CMD]
++ .endm
++
++ .macro senduart,rd,rx
++ strb \rd, [\rx, #UARTn_TXDATA]
++ .endm
++
++ .macro waituart,rd,rx
++1001: ldr \rd, [\rx, #UARTn_STATUS]
++ tst \rd, #UARTn_STATUS_TXBL
++ beq 1001b
++ .endm
++
++ .macro busyuart,rd,rx
++1001: ldr \rd, [\rx, UARTn_STATUS]
++ tst \rd, #UARTn_STATUS_TXC
++ bne 1001b
++ .endm