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.kelle...@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@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel