From c750f8011d8510a57a203c94ef21ba84e34d9ed3 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 18 Sep 2016 15:38:01 +0200 Subject: [PATCH] mcs814x: add kernel 4.4 support Add support for kernel 4.4 and make it the default. This was only compile tested. Signed-off-by: Hauke Mehrtens --- target/linux/mcs814x/Makefile | 2 +- target/linux/mcs814x/config-4.4 | 241 ++++++++++++++++++ .../files/arch/arm/mach-mcs814x/timer.c | 2 +- .../files/drivers/usb/host/ohci-mcs814x.c | 2 +- .../mcs814x/patches-4.4/001-platform.patch | 64 +++++ .../mcs814x/patches-4.4/003-ethernet.patch | 16 ++ .../linux/mcs814x/patches-4.4/004-usb.patch | 28 ++ .../mcs814x/patches-4.4/005-mcs814x_rng.patch | 31 +++ .../mcs814x/patches-4.4/006-mcs814x_wdt.patch | 25 ++ .../patches-4.4/008-mcs814x_gpio.patch | 25 ++ .../011-mcs814x_internal_phy.patch | 20 ++ ...mtd-cfi_cmdset_0002-force-word-write.patch | 14 + .../patches-4.4/013-ohci_workarounds.patch | 64 +++++ .../mcs814x/patches-4.4/014-debuguart.patch | 41 +++ 14 files changed, 572 insertions(+), 3 deletions(-) create mode 100644 target/linux/mcs814x/config-4.4 create mode 100644 target/linux/mcs814x/patches-4.4/001-platform.patch create mode 100644 target/linux/mcs814x/patches-4.4/003-ethernet.patch create mode 100644 target/linux/mcs814x/patches-4.4/004-usb.patch create mode 100644 target/linux/mcs814x/patches-4.4/005-mcs814x_rng.patch create mode 100644 target/linux/mcs814x/patches-4.4/006-mcs814x_wdt.patch create mode 100644 target/linux/mcs814x/patches-4.4/008-mcs814x_gpio.patch create mode 100644 target/linux/mcs814x/patches-4.4/011-mcs814x_internal_phy.patch create mode 100644 target/linux/mcs814x/patches-4.4/012-mtd-cfi_cmdset_0002-force-word-write.patch create mode 100644 target/linux/mcs814x/patches-4.4/013-ohci_workarounds.patch create mode 100644 target/linux/mcs814x/patches-4.4/014-debuguart.patch diff --git a/target/linux/mcs814x/Makefile b/target/linux/mcs814x/Makefile index 8ba58886e9..3c255a9e31 100644 --- a/target/linux/mcs814x/Makefile +++ b/target/linux/mcs814x/Makefile @@ -13,7 +13,7 @@ FEATURES:=usb squashfs low_mem CPU_TYPE:=arm926ej-s MAINTAINER:=Florian Fainelli -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 index 0000000000..99708d8d69 --- /dev/null +++ b/target/linux/mcs814x/config-4.4 @@ -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 diff --git a/target/linux/mcs814x/files/arch/arm/mach-mcs814x/timer.c b/target/linux/mcs814x/files/arch/arm/mach-mcs814x/timer.c index 31d0ba65a7..de6d508c9b 100644 --- a/target/linux/mcs814x/files/arch/arm/mach-mcs814x/timer.c +++ b/target/linux/mcs814x/files/arch/arm/mach-mcs814x/timer.c @@ -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); diff --git a/target/linux/mcs814x/files/drivers/usb/host/ohci-mcs814x.c b/target/linux/mcs814x/files/drivers/usb/host/ohci-mcs814x.c index 161176b0e6..4766eaa60c 100644 --- a/target/linux/mcs814x/files/drivers/usb/host/ohci-mcs814x.c +++ b/target/linux/mcs814x/files/drivers/usb/host/ohci-mcs814x.c @@ -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 index 0000000000..fef34772c7 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/001-platform.patch @@ -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 index 0000000000..2ebfd6c26c --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/003-ethernet.patch @@ -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 index 0000000000..d42133ae13 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/004-usb.patch @@ -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 index 0000000000..91fb7dc907 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/005-mcs814x_rng.patch @@ -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 index 0000000000..b8a5290a41 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/006-mcs814x_wdt.patch @@ -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 index 0000000000..15b0c01070 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/008-mcs814x_gpio.patch @@ -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 index 0000000000..e3a66741bc --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/011-mcs814x_internal_phy.patch @@ -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 index 0000000000..10593ce70d --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/012-mtd-cfi_cmdset_0002-force-word-write.patch @@ -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 + + #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 index 0000000000..3f1992e650 --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/013-ohci_workarounds.patch @@ -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 index 0000000000..5f9313468f --- /dev/null +++ b/target/linux/mcs814x/patches-4.4/014-debuguart.patch @@ -0,0 +1,41 @@ +--- a/arch/arm/mach-mcs814x/include/mach/debug-macro.S ++++ /dev/null +@@ -1,11 +0,0 @@ +-#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 +--- 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 -- 2.30.2