mcs814x: add kernel 4.4 support
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 18 Sep 2016 13:38:01 +0000 (15:38 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Tue, 13 Mar 2018 18:45:13 +0000 (19:45 +0100)
Add support for kernel 4.4 and make it the default.
This was only compile tested.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
14 files changed:
target/linux/mcs814x/Makefile
target/linux/mcs814x/config-4.4 [new file with mode: 0644]
target/linux/mcs814x/files/arch/arm/mach-mcs814x/timer.c
target/linux/mcs814x/files/drivers/usb/host/ohci-mcs814x.c
target/linux/mcs814x/patches-4.4/001-platform.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/003-ethernet.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/004-usb.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/005-mcs814x_rng.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/006-mcs814x_wdt.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/008-mcs814x_gpio.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/011-mcs814x_internal_phy.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/012-mtd-cfi_cmdset_0002-force-word-write.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/013-ohci_workarounds.patch [new file with mode: 0644]
target/linux/mcs814x/patches-4.4/014-debuguart.patch [new file with mode: 0644]

index 8ba58886e91ab1dc3a248f0403f4d2362b2adf5e..3c255a9e318105ea50e87297a316cef8a55fa372 100644 (file)
@@ -13,7 +13,7 @@ FEATURES:=usb squashfs low_mem
 CPU_TYPE:=arm926ej-s
 MAINTAINER:=Florian Fainelli <florian@openwrt.org>
 
-KERNEL_PATCHVER:=3.18
+KERNEL_PATCHVER:=4.4
 
 DEVICE_TYPE:=other
 
diff --git a/target/linux/mcs814x/config-4.4 b/target/linux/mcs814x/config-4.4
new file mode 100644 (file)
index 0000000..99708d8
--- /dev/null
@@ -0,0 +1,241 @@
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
+# CONFIG_ARCH_HAS_SG_CHAIN is not set
+CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_MCS814X=y
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
+CONFIG_ARCH_NR_GPIO=0
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_USES_GETTIMEOFFSET=y
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
+CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
+CONFIG_ARM=y
+CONFIG_ARM_APPENDED_DTB=y
+# CONFIG_ARM_ATAG_DTB_COMPAT is not set
+# CONFIG_ARM_CPU_SUSPEND is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_ARM_THUMB is not set
+CONFIG_BINFMT_MISC=y
+# CONFIG_CACHE_L2X0 is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_CLONE_BACKWARDS=y
+CONFIG_CMDLINE="earlyprintk"
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_ARM926T=y
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_USE_DOMAINS=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_DEBUG_ICEDCC=y
+CONFIG_DEBUG_LL=y
+CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
+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_VIRT=0xf00dc000
+# CONFIG_DEBUG_USER is not set
+CONFIG_DTC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_EDAC_SUPPORT=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+CONFIG_FIQ=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_FRAME_POINTER=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_GENERIC_ATOMIC64=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_IDLE_POLL_SETUP=y
+CONFIG_GENERIC_IO=y
+CONFIG_GENERIC_IRQ_CHIP=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
+CONFIG_GENERIC_PCI_IOMAP=y
+CONFIG_GENERIC_SCHED_CLOCK=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT_MAP=y
+# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
+# CONFIG_HAVE_ARCH_BITREVERSE is not set
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_ARCH_PFN_VALID=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
+CONFIG_HAVE_BPF_JIT=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
+CONFIG_HAVE_NET_DSA=y
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_OPTPROBES=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_PROC_CPU=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_UID16=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_MCS814X=y
+CONFIG_HZ_FIXED=0
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_IOMMU_HELPER=y
+CONFIG_IRQCHIP=y
+CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_IRQ_WORK=y
+# CONFIG_ISDN is not set
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_SUMMARY is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_KALLSYMS=y
+CONFIG_LEDS_GPIO=y
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+# CONFIG_LEDS_TRIGGER_NETDEV is not set
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LIBCRC32C=y
+CONFIG_LIBFDT=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_MACH_DLAN_USB_EXT=y
+CONFIG_MACH_RBT_832=y
+CONFIG_MCS8140=y
+CONFIG_MCS814X_PHY=y
+# CONFIG_MCS814X_WATCHDOG is not set
+CONFIG_MDIO_BOARDINFO=y
+CONFIG_MODULES_USE_ELF_REL=y
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_IMPA7 is not set
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_SPLIT_FIRMWARE=y
+CONFIG_MTD_SPLIT_FIRMWARE_NAME="linux"
+CONFIG_MTD_SPLIT_UIMAGE_FW=y
+CONFIG_MULTI_IRQ_HANDLER=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_NEED_KUSER_HELPERS=y
+CONFIG_NEED_PER_CPU_KM=y
+CONFIG_NET_KEY=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-15"
+CONFIG_NO_BOOTMEM=y
+CONFIG_NUPORT_ETHERNET_DRIVER=y
+CONFIG_OF=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_EARLY_FLATTREE=y
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_GPIO=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_MDIO=y
+CONFIG_OF_MTD=y
+CONFIG_OF_NET=y
+CONFIG_OF_RESERVED_MEM=y
+CONFIG_OLD_SIGACTION=y
+CONFIG_OLD_SIGSUSPEND3=y
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PARTITION_ADVANCED is not set
+# CONFIG_PCI_DOMAINS_GENERIC is not set
+# CONFIG_PCI_SYSCALL is not set
+CONFIG_PERF_USE_VMALLOC=y
+CONFIG_PGTABLE_LEVELS=2
+CONFIG_PHYLIB=y
+CONFIG_PHYS_OFFSET=0x00000000
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_RCU_STALL_COMMON is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_SCHED_HRTICK is not set
+# CONFIG_SCHED_INFO is not set
+# CONFIG_SCSI_DMA is not set
+CONFIG_SERIAL_8250_FSL=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+CONFIG_SRCU=y
+# CONFIG_SWAP is not set
+CONFIG_SWIOTLB=y
+# CONFIG_SYN_COOKIES is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_TICK_CPU_ACCOUNTING=y
+CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h"
+CONFIG_USB_SUPPORT=y
+CONFIG_USE_OF=y
+CONFIG_VECTORS_BASE=0xffff0000
+# CONFIG_VFP is not set
+# CONFIG_VLAN_8021Q is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_WATCHDOG_CORE=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+# CONFIG_WEXT_PRIV is not set
+# CONFIG_WEXT_SPY is not set
+# CONFIG_WIRELESS_EXT is not set
+CONFIG_XFRM_ALGO=y
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_BCJ=y
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZONE_DMA_FLAG=0
index 31d0ba65a73d8348ef6c5225bce6f54a1f53adb2..de6d508c9b9dcb8387fab9d56525131bcc8d5a92 100644 (file)
@@ -122,7 +122,7 @@ void __init mcs814x_timer_init(void)
        last_reload = timer_reload_value;
 
        if (request_irq(irq, mcs814x_timer_interrupt,
-               IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
+               IRQF_TIMER | IRQF_IRQPOLL,
                "mcs814x-timer", NULL))
                panic("unable to request timer0 irq %d", irq);
 
index 161176b0e6a30e5a58271458f56bdef85a3cbb8b..4766eaa60cd174e2616f6b6203813c5f14928bfa 100644 (file)
@@ -63,7 +63,7 @@ static int usb_hcd_mcs814x_probe(const struct hc_driver *driver,
 
        ohci_hcd_init(hcd_to_ohci(hcd));
 
-       retval = usb_add_hcd(hcd, pdev->resource[1].start, IRQF_DISABLED);
+       retval = usb_add_hcd(hcd, pdev->resource[1].start, 0);
        if (retval == 0)
                return retval;
 
diff --git a/target/linux/mcs814x/patches-4.4/001-platform.patch b/target/linux/mcs814x/patches-4.4/001-platform.patch
new file mode 100644 (file)
index 0000000..fef3477
--- /dev/null
@@ -0,0 +1,64 @@
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -278,7 +278,8 @@ config PHYS_OFFSET
+                       ARCH_INTEGRATOR || \
+                       ARCH_IOP13XX || \
+                       ARCH_KS8695 || \
+-                      (ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET)
++                      (ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET) || \
++                      ARCH_MCS814X
+       default 0x10000000 if ARCH_OMAP1 || ARCH_RPC
+       default 0x20000000 if ARCH_S5PV210
+       default 0x70000000 if REALVIEW_HIGH_PHYS_OFFSET
+@@ -742,6 +743,21 @@ config ARCH_OMAP1
+       help
+         Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx)
++config ARCH_MCS814X
++      bool "Moschip MCS814x"
++      select FIQ
++      select GENERIC_IRQ_CHIP
++      select GENERIC_GPIO
++      select ARCH_REQUIRE_GPIOLIB
++      select CLKDEV_LOOKUP
++      select ARCH_USES_GETTIMEOFFSET
++      select USB_ARCH_HAS_OHCI
++      select USB_ARCH_HAS_EHCI
++      select MULTI_IRQ_HANDLER
++      help
++        Support for Moschip MCS814x SoCs (MCS8140).
++
++
+ endchoice
+ menu "Multiple platform selection"
+@@ -888,6 +904,8 @@ source "arch/arm/mach-picoxcell/Kconfig"
+ source "arch/arm/mach-pxa/Kconfig"
+ source "arch/arm/plat-pxa/Kconfig"
++source "arch/arm/mach-mcs814x/Kconfig"
++
+ source "arch/arm/mach-mmp/Kconfig"
+ source "arch/arm/mach-qcom/Kconfig"
+--- a/arch/arm/Makefile
++++ b/arch/arm/Makefile
+@@ -186,6 +186,7 @@ machine-$(CONFIG_ARCH_KEYSTONE)            += keys
+ machine-$(CONFIG_ARCH_KS8695)         += ks8695
+ machine-$(CONFIG_ARCH_LPC18XX)                += lpc18xx
+ machine-$(CONFIG_ARCH_LPC32XX)                += lpc32xx
++machine-$(CONFIG_ARCH_MCS814X)                += mcs814x
+ machine-$(CONFIG_ARCH_MESON)          += meson
+ machine-$(CONFIG_ARCH_MMP)            += mmp
+ machine-$(CONFIG_ARCH_MOXART)         += moxart
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -226,6 +226,8 @@ dtb-$(CONFIG_ARCH_LPC18XX) += \
+       lpc4357-ea4357-devkit.dtb
+ dtb-$(CONFIG_ARCH_LPC32XX) += \
+       ea3250.dtb phy3250.dtb
++dtb-$(CONFIG_ARCH_MCS814X) += dlan-usb-extender.dtb \
++      rbt-832.dtb
+ dtb-$(CONFIG_MACH_MESON6) += \
+       meson6-atv1200.dtb
+ dtb-$(CONFIG_MACH_MESON8) += \
diff --git a/target/linux/mcs814x/patches-4.4/003-ethernet.patch b/target/linux/mcs814x/patches-4.4/003-ethernet.patch
new file mode 100644 (file)
index 0000000..2ebfd6c
--- /dev/null
@@ -0,0 +1,16 @@
+--- a/drivers/net/ethernet/Kconfig
++++ b/drivers/net/ethernet/Kconfig
+@@ -178,4 +178,6 @@ source "drivers/net/ethernet/wiznet/Kcon
+ source "drivers/net/ethernet/xilinx/Kconfig"
+ source "drivers/net/ethernet/xircom/Kconfig"
++source "drivers/net/ethernet/mcs8140/Kconfig"
++
+ endif # ETHERNET
+--- a/drivers/net/ethernet/Makefile
++++ b/drivers/net/ethernet/Makefile
+@@ -87,3 +87,4 @@ obj-$(CONFIG_NET_VENDOR_VIA) += via/
+ obj-$(CONFIG_NET_VENDOR_WIZNET) += wiznet/
+ obj-$(CONFIG_NET_VENDOR_XILINX) += xilinx/
+ obj-$(CONFIG_NET_VENDOR_XIRCOM) += xircom/
++obj-$(CONFIG_NUPORT_ETHERNET_DRIVER) += mcs8140/
diff --git a/target/linux/mcs814x/patches-4.4/004-usb.patch b/target/linux/mcs814x/patches-4.4/004-usb.patch
new file mode 100644 (file)
index 0000000..d42133a
--- /dev/null
@@ -0,0 +1,28 @@
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -1296,6 +1296,11 @@ MODULE_LICENSE ("GPL");
+ #define       PLATFORM_DRIVER         ehci_hcd_sead3_driver
+ #endif
++#ifdef CONFIG_ARCH_MCS814X
++#include "ehci-mcs814x.c"
++#define PLATFORM_DRIVER               mcs814x_ehci_driver
++#endif
++
+ static int __init ehci_hcd_init(void)
+ {
+       int retval = 0;
+--- a/drivers/usb/host/ohci-hcd.c
++++ b/drivers/usb/host/ohci-hcd.c
+@@ -1255,6 +1255,11 @@ MODULE_LICENSE ("GPL");
+ #define PLATFORM_DRIVER               ohci_hcd_tilegx_driver
+ #endif
++#ifdef CONFIG_ARCH_MCS814X
++#include "ohci-mcs814x.c"
++#define PLATFORM_DRIVER               ohci_hcd_mcs814x_driver
++#endif
++
+ static int __init ohci_hcd_mod_init(void)
+ {
+       int retval = 0;
diff --git a/target/linux/mcs814x/patches-4.4/005-mcs814x_rng.patch b/target/linux/mcs814x/patches-4.4/005-mcs814x_rng.patch
new file mode 100644 (file)
index 0000000..91fb7dc
--- /dev/null
@@ -0,0 +1,31 @@
+--- a/drivers/char/hw_random/Kconfig
++++ b/drivers/char/hw_random/Kconfig
+@@ -242,6 +242,18 @@ config HW_RANDOM_TX4939
+         If unsure, say Y.
++config HW_RANDOM_MCS814X
++      tristate "Moschip MCS814x Random Number Generator"
++      depends on HW_RANDOM && ARCH_MCS814X
++      ---help---
++        This driver provides kernel-side support for the Random Number
++        Generator hardware found on Moschip MCS814x processors.
++
++        To compile this driver as a module, choose M here: the
++        module will be called mcs814x-rng.
++
++        If unusure, say Y.
++
+ config HW_RANDOM_MXC_RNGA
+       tristate "Freescale i.MX RNGA Random Number Generator"
+       depends on ARCH_HAS_RNGA
+--- a/drivers/char/hw_random/Makefile
++++ b/drivers/char/hw_random/Makefile
+@@ -19,6 +19,7 @@ obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += oma
+ obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o
+ obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o
+ obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o
++obj-$(CONFIG_HW_RANDOM_MCS814X) += mcs814x-rng.o
+ obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o
+ obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o
+ obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o
diff --git a/target/linux/mcs814x/patches-4.4/006-mcs814x_wdt.patch b/target/linux/mcs814x/patches-4.4/006-mcs814x_wdt.patch
new file mode 100644 (file)
index 0000000..b8a5290
--- /dev/null
@@ -0,0 +1,25 @@
+--- a/drivers/watchdog/Kconfig
++++ b/drivers/watchdog/Kconfig
+@@ -578,6 +578,12 @@ config LPC18XX_WATCHDOG
+         To compile this driver as a module, choose M here: the
+         module will be called lpc18xx_wdt.
++config MCS814X_WATCHDOG
++      tristate "Moschip MCS814x watchdog"
++      depends on WATCHDOG_CORE && ARCH_MCS814X
++      help
++        Support for the Moschip MCS814x SoCs on-chip watchdog timer.
++
+ # AVR32 Architecture
+ config AT32AP700X_WDT
+--- a/drivers/watchdog/Makefile
++++ b/drivers/watchdog/Makefile
+@@ -69,6 +69,7 @@ obj-$(CONFIG_MEDIATEK_WATCHDOG) += mtk_w
+ obj-$(CONFIG_DIGICOLOR_WATCHDOG) += digicolor_wdt.o
+ obj-$(CONFIG_LPC18XX_WATCHDOG) += lpc18xx_wdt.o
+ obj-$(CONFIG_BCM7038_WDT) += bcm7038_wdt.o
++obj-$(CONFIG_MCS814X_WATCHDOG) += mcs814x_wdt.o
+ # AVR32 Architecture
+ obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
diff --git a/target/linux/mcs814x/patches-4.4/008-mcs814x_gpio.patch b/target/linux/mcs814x/patches-4.4/008-mcs814x_gpio.patch
new file mode 100644 (file)
index 0000000..15b0c01
--- /dev/null
@@ -0,0 +1,25 @@
+--- a/drivers/gpio/Kconfig
++++ b/drivers/gpio/Kconfig
+@@ -989,6 +989,12 @@ endmenu
+ menu "SPI GPIO expanders"
+       depends on SPI_MASTER
++config GPIO_MCS814X
++      tristate "Moschip MCS814x GPIO support"
++      depends on ARCH_MCS814X
++      help
++         GPIO driver for Moschip MCS814x SoC gpio controllers.
++
+ config GPIO_74X164
+       tristate "74x164 serial-in/parallel-out 8-bits shift register"
+       depends on OF
+--- a/drivers/gpio/Makefile
++++ b/drivers/gpio/Makefile
+@@ -60,6 +60,7 @@ obj-$(CONFIG_GPIO_MB86S7X)   += gpio-mb86s
+ obj-$(CONFIG_GPIO_MC33880)    += gpio-mc33880.o
+ obj-$(CONFIG_GPIO_MC9S08DZ60) += gpio-mc9s08dz60.o
+ obj-$(CONFIG_GPIO_MCP23S08)   += gpio-mcp23s08.o
++obj-$(CONFIG_GPIO_MCS814X)    += gpio-mcs814x.o
+ obj-$(CONFIG_GPIO_ML_IOH)     += gpio-ml-ioh.o
+ obj-$(CONFIG_GPIO_MM_LANTIQ)  += gpio-mm-lantiq.o
+ obj-$(CONFIG_GPIO_MOXART)     += gpio-moxart.o
diff --git a/target/linux/mcs814x/patches-4.4/011-mcs814x_internal_phy.patch b/target/linux/mcs814x/patches-4.4/011-mcs814x_internal_phy.patch
new file mode 100644 (file)
index 0000000..e3a6674
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/drivers/net/phy/Kconfig
++++ b/drivers/net/phy/Kconfig
+@@ -202,6 +202,10 @@ config RTL8306_PHY
+       tristate "Driver for Realtek RTL8306S switches"
+       select SWCONFIG
++config MCS814X_PHY
++      tristate "Driver for the Moschip MCS814x internal PHY"
++      depends on ARCH_MCS814X
++
+ config FIXED_PHY
+       tristate "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
+       depends on PHYLIB
+--- a/drivers/net/phy/Makefile
++++ b/drivers/net/phy/Makefile
+@@ -58,3 +58,4 @@ obj-$(CONFIG_MDIO_MOXART)    += mdio-moxart
+ obj-$(CONFIG_MDIO_BCM_UNIMAC) += mdio-bcm-unimac.o
+ obj-$(CONFIG_MICROCHIP_PHY)   += microchip.o
+ obj-$(CONFIG_MDIO_BCM_IPROC)  += mdio-bcm-iproc.o
++obj-$(CONFIG_MCS814X_PHY)     += mcs814x.o
diff --git a/target/linux/mcs814x/patches-4.4/012-mtd-cfi_cmdset_0002-force-word-write.patch b/target/linux/mcs814x/patches-4.4/012-mtd-cfi_cmdset_0002-force-word-write.patch
new file mode 100644 (file)
index 0000000..10593ce
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -40,9 +40,9 @@
+ #include <linux/mtd/xip.h>
+ #define AMD_BOOTLOC_BUG
+-#define FORCE_WORD_WRITE 0
++#define FORCE_WORD_WRITE 1
+-#define MAX_WORD_RETRIES 3
++#define MAX_WORD_RETRIES 10
+ #define SST49LF004B           0x0060
+ #define SST49LF040B           0x0050
diff --git a/target/linux/mcs814x/patches-4.4/013-ohci_workarounds.patch b/target/linux/mcs814x/patches-4.4/013-ohci_workarounds.patch
new file mode 100644 (file)
index 0000000..3f1992e
--- /dev/null
@@ -0,0 +1,64 @@
+--- a/drivers/usb/host/ohci.h
++++ b/drivers/usb/host/ohci.h
+@@ -122,7 +122,7 @@ struct td {
+       /* PSW is only for ISO.  Only 1 PSW entry is used, but on
+        * big-endian PPC hardware that's the second entry.
+        */
+-#define MAXPSW        2
++#define MAXPSW        8
+       __hc16          hwPSW [MAXPSW];
+       /* rest are purely for the driver's use */
+--- a/drivers/usb/host/ohci-hcd.c
++++ b/drivers/usb/host/ohci-hcd.c
+@@ -442,6 +442,7 @@ static int ohci_init (struct ohci_hcd *o
+ {
+       int ret;
+       struct usb_hcd *hcd = ohci_to_hcd(ohci);
++      u32 hcca_area;
+       /* Accept arbitrarily long scatter-gather lists */
+       hcd->self.sg_tablesize = ~0;
+@@ -502,11 +503,13 @@ static int ohci_init (struct ohci_hcd *o
+                       (unsigned long) ohci);
+       set_timer_slack(&ohci->io_watchdog, msecs_to_jiffies(20));
+-      ohci->hcca = dma_alloc_coherent (hcd->self.controller,
+-                      sizeof(*ohci->hcca), &ohci->hcca_dma, GFP_KERNEL);
++      hcca_area = ohci_readl(ohci, &ohci->regs->hcca);
++      ohci->hcca = ioremap_nocache(hcca_area, sizeof *ohci->hcca);
+       if (!ohci->hcca)
+               return -ENOMEM;
++      ohci->hcca_dma = hcca_area;
++
+       if ((ret = ohci_mem_init (ohci)) < 0)
+               ohci_stop (hcd);
+       else {
+@@ -524,6 +527,7 @@ static int ohci_init (struct ohci_hcd *o
+  */
+ static int ohci_run (struct ohci_hcd *ohci)
+ {
++      int                     i = 0;
+       u32                     mask, val;
+       int                     first = ohci->fminterval == 0;
+       struct usb_hcd          *hcd = ohci_to_hcd(ohci);
+@@ -574,6 +578,8 @@ static int ohci_run (struct ohci_hcd *oh
+       msleep(val);
+       memset (ohci->hcca, 0, sizeof (struct ohci_hcca));
++      for (i = 0; i < NUM_INTS; i++)
++              ohci->hcca->int_table[i] = 0;
+       /* 2msec timelimit here means no irqs/preempt */
+       spin_lock_irq (&ohci->lock);
+@@ -985,9 +991,6 @@ static void ohci_stop (struct usb_hcd *h
+       remove_debug_files (ohci);
+       ohci_mem_cleanup (ohci);
+       if (ohci->hcca) {
+-              dma_free_coherent (hcd->self.controller,
+-                              sizeof *ohci->hcca,
+-                              ohci->hcca, ohci->hcca_dma);
+               ohci->hcca = NULL;
+               ohci->hcca_dma = 0;
+       }
diff --git a/target/linux/mcs814x/patches-4.4/014-debuguart.patch b/target/linux/mcs814x/patches-4.4/014-debuguart.patch
new file mode 100644 (file)
index 0000000..5f93134
--- /dev/null
@@ -0,0 +1,41 @@
+--- 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
+@@ -1361,7 +1361,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
+ config DEBUG_UART_PHYS
+       hex "Physical base address of debug UART"
+@@ -1401,6 +1401,7 @@ config DEBUG_UART_PHYS
+       default 0x4000e400 if DEBUG_LL_UART_EFM32
+       default 0x40081000 if DEBUG_LPC18XX_UART0
+       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 || \
+@@ -1435,6 +1436,7 @@ config DEBUG_UART_PHYS
+       default 0xe6e58000 if DEBUG_RCAR_GEN2_SCIF2
+       default 0xe6e60000 if DEBUG_RCAR_GEN2_SCIF0
+       default 0xe8008000 if DEBUG_R7S72100_SCIF2
++      default 0xf00dc000 if ARCH_MCS814X
+       default 0xf0000be0 if ARCH_EBSA110
+       default 0xf040ab00 if DEBUG_BRCMSTB_UART
+       default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE