From dd4ee63fa43cf13190891a5df62676054942b52e Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sat, 10 Jan 2015 20:12:02 +0000 Subject: mcs814x: add 3.14 kernel support Signed-off-by: Florian Fainelli SVN-Revision: 43926 --- .../arch/arm/mach-mcs814x/include/mach/cpu.h | 16 +++++++ .../arm/mach-mcs814x/include/mach/debug-macro.S | 11 +++++ .../arm/mach-mcs814x/include/mach/entry-macro.S | 6 +++ .../arch/arm/mach-mcs814x/include/mach/gpio.h | 21 +++++++++ .../arch/arm/mach-mcs814x/include/mach/hardware.h | 16 +++++++ .../arch/arm/mach-mcs814x/include/mach/io.h | 27 +++++++++++ .../arch/arm/mach-mcs814x/include/mach/irqs.h | 17 +++++++ .../arch/arm/mach-mcs814x/include/mach/mcs814x.h | 53 ++++++++++++++++++++++ .../arch/arm/mach-mcs814x/include/mach/memory.h | 16 +++++++ .../arch/arm/mach-mcs814x/include/mach/param.h | 15 ++++++ .../arch/arm/mach-mcs814x/include/mach/system.h | 18 ++++++++ .../arch/arm/mach-mcs814x/include/mach/timex.h | 18 ++++++++ .../arm/mach-mcs814x/include/mach/uncompress.h | 40 ++++++++++++++++ 13 files changed, 274 insertions(+) create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/cpu.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/debug-macro.S create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/entry-macro.S create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/gpio.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/hardware.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/io.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/irqs.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/mcs814x.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/memory.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/param.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/system.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/timex.h create mode 100644 target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/uncompress.h (limited to 'target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach') diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/cpu.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/cpu.h new file mode 100644 index 0000000000..1ef3c4a036 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/cpu.h @@ -0,0 +1,16 @@ +#ifndef __ASM_ARCH_CPU_H__ +#define __ASM_ARCH_CPU_H__ + +#include + +#define MCS8140_ID 0x41069260 /* ARM926EJ-S */ +#define MCS814X_MASK 0xff0ffff0 + +#ifdef CONFIG_MCS8140 +/* Moschip MCS8140 is based on an ARM926EJ-S core */ +#define soc_is_mcs8140() ((read_cpuid_id() & MCS814X_MASK) == MCS8140_ID) +#else +#define soc_is_mcs8140() (0) +#endif /* !CONFIG_MCS8140 */ + +#endif /* __ASM_ARCH_CPU_H__ */ diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/debug-macro.S b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/debug-macro.S new file mode 100644 index 0000000000..93ecea4ed2 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/debug-macro.S @@ -0,0 +1,11 @@ +#include + + .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 diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/entry-macro.S b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/entry-macro.S new file mode 100644 index 0000000000..16d2d6d1af --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/entry-macro.S @@ -0,0 +1,6 @@ +#include + .macro disable_fiq + .endm + + .macro arch_ret_to_user, tmp1, tmp2 + .endm diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/gpio.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/gpio.h new file mode 100644 index 0000000000..20240c2ea2 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/gpio.h @@ -0,0 +1,21 @@ +#ifndef __ASM_ARCH_GPIO_H +#define __ASM_ARCH_GPIO_H + +/* new generic GPIO API */ +#include + +#define gpio_get_value __gpio_get_value +#define gpio_set_value __gpio_set_value +#define gpio_cansleep __gpio_cansleep + +static inline int gpio_to_irq(unsigned gpio) +{ + return -EINVAL; +} + +static inline int irq_to_gpio(unsigned irq) +{ + return -EINVAL; +} + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/hardware.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/hardware.h new file mode 100644 index 0000000000..529f648ae6 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/hardware.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * + * 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. + * + */ + +#ifndef __ASM_ARCH_HARDWARE_H +#define __ASM_ARCH_HARDWARE_H + +#include "mcs814x.h" + +#endif + diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/io.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/io.h new file mode 100644 index 0000000000..80e56f6ca7 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/io.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * Copyright (C) 2012, Florian Fainelli + * + * 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. + * + */ + +#ifndef __ASM_ARM_ARCH_IO_H +#define __ASM_ARM_ARCH_IO_H + +#define IO_SPACE_LIMIT 0xffffffff + +/* + * We don't support ins[lb]/outs[lb]. Make them fault. + */ +#define __raw_readsb(p, d, l) do { *(int *)0 = 0; } while (0) +#define __raw_readsl(p, d, l) do { *(int *)0 = 0; } while (0) +#define __raw_writesb(p, d, l) do { *(int *)0 = 0; } while (0) +#define __raw_writesl(p, d, l) do { *(int *)0 = 0; } while (0) + +#define __io(a) __typesafe_io(a) +#define __mem_pci(a) (a) + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/irqs.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/irqs.h new file mode 100644 index 0000000000..7b9e07c1a7 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/irqs.h @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * + * 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. + * + */ + +#ifndef __ASM_ARCH_IRQS_H +#define __ASM_ARCH_IRQS_H + +#define FIQ_START 0 + +#define NR_IRQS 32 + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/mcs814x.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/mcs814x.h new file mode 100644 index 0000000000..8252d33a7d --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/mcs814x.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * + * 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. + * + */ + +#ifndef __ASM_ARCH_MCS814X_H +#define __ASM_ARCH_MCS814X_H + +#define MCS814X_IO_BASE 0xF0000000 +#define MCS814X_IO_START 0x40000000 +#define MCS814X_IO_SIZE 0x00100000 + +/* IRQ controller register offset */ +#define MCS814X_IRQ_ICR 0x00 +#define MCS814X_IRQ_ISR 0x04 +#define MCS814X_IRQ_MASK 0x20 +#define MCS814X_IRQ_STS0 0x40 + +#define MCS814X_PHYS_BASE 0x40000000 +#define MCS814X_VIRT_BASE MCS814X_IO_BASE + +#define MCS814X_UART 0x000DC000 +#define MCS814X_DBGLED 0x000EC000 +#define MCS814X_SYSDBG 0x000F8000 +#define MCS814X_SYSDBG_SIZE 0x50 + +/* System configuration and bootstrap registers */ +#define SYSDBG_BS1 0x00 +#define CPU_FREQ_SHIFT 27 +#define CPU_FREQ_MASK 0x0F +#define SDRAM_FREQ_BIT (1 << 22) + +#define SYSDBG_BS2 0x04 +#define LED_CFG_MASK 0x03 +#define CPU_MODE_SHIFT 23 +#define CPU_MODE_MASK 0x03 + +#define SYSDBG_SYSCTL_MAC 0x1d +#define BUF_SHIFT_BIT (1 << 0) + +#define SYSDBG_SYSCTL 0x08 +#define SYSCTL_EMAC (1 << 0) +#define SYSCTL_EPHY (1 << 0) /* active low */ +#define SYSCTL_CIPHER (1 << 16) + +#define SYSDBG_PLL_CTL 0x3C + +#endif /* __ASM_ARCH_MCS814X_H */ + diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/memory.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/memory.h new file mode 100644 index 0000000000..ad87c7ba6a --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/memory.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * Copyright (C) 2012, Florian Fainelli + * + * 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. + * + */ + +#ifndef __ASM_ARCH_MEMORY_H +#define __ASM_ARCH_MEMORY_H + +#define PLAT_PHYS_OFFSET UL(0x00000000) + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/param.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/param.h new file mode 100644 index 0000000000..7ffe70b7d5 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/param.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * + * 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. + * + */ + +#ifndef __ASM_ARCH_PARAM_H +#define __ASM_ARCH_PARAM_H + +#define HZ 100 + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/system.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/system.h new file mode 100644 index 0000000000..cf5453df25 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/system.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * Copyright (C) 2012 Florian Fainelli + * + * 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. + * + */ + +#ifndef __ASM_ARCH_SYSTEM_H +#define __ASM_ARCH_SYSTEM_H + +static inline void arch_idle(void) +{ + cpu_do_idle(); +} +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/timex.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/timex.h new file mode 100644 index 0000000000..f05c8eeb6d --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/timex.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2003 Artec Design Ltd. + * + * 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. + * + */ + +#ifndef __ASM_ARCH_TIMEX_H +#define __ASM_ARCH_TIMEX_H + +/* + * Timex specification for MCS814X + */ +#define CLOCK_TICK_RATE 100 + +#endif diff --git a/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/uncompress.h b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/uncompress.h new file mode 100644 index 0000000000..cf3ed9a1a6 --- /dev/null +++ b/target/linux/mcs814x/files-3.14/arch/arm/mach-mcs814x/include/mach/uncompress.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2012, Florian Fainelli + * + * 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. + */ + +#ifndef __ASM_ARCH_UNCOMPRESS_H +#define __ASM_ARCH_UNCOMPRESS_H + +#include +#include +#include +#include + +#define UART_SHIFT (2) + +/* cannot be static because the code will be inlined */ +void __iomem *uart_base; + +static inline void putc(int c) +{ + while (!(__raw_readb(uart_base + (UART_LSR << UART_SHIFT)) & UART_LSR_TEMT)); + __raw_writeb(c, uart_base + (UART_TX << UART_SHIFT)); +} + +static inline void flush(void) +{ +} + +static inline void arch_decomp_setup(void) +{ + if (soc_is_mcs8140()) + uart_base = (void __iomem *)(MCS814X_PHYS_BASE +MCS814X_UART); +} + +#define arch_decomp_wdog() + +#endif -- cgit v1.2.3