[OpenWrt-Devel] [PATCH 1/2] mcs814x: Fix debug UART and timer irq

Günther Kelleter guenther.kelleter at devolo.de
Fri Jul 24 11:25:34 EDT 2015


It was broken since kernel 3.18 (irq) and 3.14 (debug).
IRQ 0 is the timer interrupt and is not illegal!

Signed-off-by: Günther Kelleter <guenther.kelleter at devolo.de>
---
 target/linux/mcs814x/config-3.18                   | 10 +++--
 .../linux/mcs814x/patches-3.18/014-debuguart.patch | 52 ++++++++++++++++++++++
 2 files changed, 59 insertions(+), 3 deletions(-)
 create mode 100644 target/linux/mcs814x/patches-3.18/014-debuguart.patch

diff --git a/target/linux/mcs814x/config-3.18 b/target/linux/mcs814x/config-3.18
index 87a8382..e57f5ff 100644
--- a/target/linux/mcs814x/config-3.18
+++ b/target/linux/mcs814x/config-3.18
@@ -49,10 +49,15 @@ CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_HASH2=y
 CONFIG_DEBUG_LL=y
-CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
+CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
 CONFIG_DEBUG_LL_UART_NONE=y
-# CONFIG_DEBUG_UART_8250 is not set
+CONFIG_DEBUG_UART_8250=y
+# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set
+CONFIG_DEBUG_UART_8250_SHIFT=2
+# CONFIG_DEBUG_UART_8250_WORD is not set
+CONFIG_DEBUG_UART_PHYS=0x400dc000
 # CONFIG_DEBUG_UART_PL01X is not set
+CONFIG_DEBUG_UART_VIRT=0xf00dc000
 # CONFIG_DEBUG_USER is not set
 CONFIG_DTC=y
 CONFIG_EARLY_PRINTK=y
@@ -157,7 +162,6 @@ CONFIG_MTD_PHYSMAP=y
 CONFIG_MULTI_IRQ_HANDLER=y
 CONFIG_NEED_DMA_MAP_STATE=y
 CONFIG_NEED_KUSER_HELPERS=y
-CONFIG_NEED_MACH_MEMORY_H=y
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_NET_KEY=y
 # CONFIG_NET_VENDOR_BROADCOM is not set
diff --git a/target/linux/mcs814x/patches-3.18/014-debuguart.patch b/target/linux/mcs814x/patches-3.18/014-debuguart.patch
new file mode 100644
index 0000000..812c05c
--- /dev/null
+++ b/target/linux/mcs814x/patches-3.18/014-debuguart.patch
@@ -0,0 +1,52 @@
+--- a/arch/arm/mach-mcs814x/include/mach/debug-macro.S
++++ /dev/null
+@@ -1,11 +0,0 @@
+-#include <mach/mcs814x.h>
+-
+-                .macro  addruart, rp, rv, tmp
+-		ldr	\rp, =MCS814X_PHYS_BASE
+-		ldr	\rv, =MCS814X_VIRT_BASE
+-		orr	\rp, \rp, #MCS814X_UART
+-		orr	\rv, \rv, #MCS814X_UART
+-                .endm
+-
+-#define UART_SHIFT	2
+-#include <asm/hardware/debug-8250.S>
+--- a/arch/arm/Kconfig.debug
++++ b/arch/arm/Kconfig.debug
+@@ -1089,7 +1089,7 @@ config DEBUG_UART_8250
+ 		(FOOTBRIDGE && !DEBUG_DC21285_PORT) || \
+ 		ARCH_GEMINI || ARCH_IOP13XX || ARCH_IOP32X || \
+ 		ARCH_IOP33X || ARCH_IXP4XX || \
+-		ARCH_LPC32XX || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC
++		ARCH_LPC32XX || ARCH_MCS814X || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC
+ 
+ # Compatibility options for BCM63xx
+ config DEBUG_UART_BCM63XX
+@@ -1124,6 +1124,7 @@ config DEBUG_UART_PHYS
+ 	default 0x3e000000 if DEBUG_BCM_KONA_UART
+ 	default 0x4000e400 if DEBUG_LL_UART_EFM32
+ 	default 0x40090000 if ARCH_LPC32XX
++	default 0x400dc000 if ARCH_MCS814X
+ 	default 0x40100000 if DEBUG_PXA_UART1
+ 	default 0x42000000 if ARCH_GEMINI
+ 	default 0x50000000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART0 || \
+@@ -1178,6 +1179,7 @@ config DEBUG_UART_VIRT
+ 	default 0xe0010fe0 if ARCH_RPC
+ 	default 0xe1000000 if DEBUG_MSM_UART
+ 	default 0xf0000be0 if ARCH_EBSA110
++	default 0xf00dc000 if ARCH_MCS814X
+ 	default 0xf01fb000 if DEBUG_NOMADIK_UART
+ 	default 0xf0201000 if DEBUG_BCM2835
+ 	default 0xf1000300 if DEBUG_BCM_5301X
+--- a/kernel/irq/irqdesc.c
++++ b/kernel/irq/irqdesc.c
+@@ -381,7 +381,7 @@ int __handle_domain_irq(struct irq_domai
+ 	 * Some hardware gives randomly wrong interrupts.  Rather
+ 	 * than crashing, do something sensible.
+ 	 */
+-	if (unlikely(!irq || irq >= nr_irqs)) {
++	if (unlikely(irq >= nr_irqs)) {
+ 		ack_bad_irq(irq);
+ 		ret = -EINVAL;
+ 	} else {
-- 
2.4.6.89.g851dcf4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list