[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