This patchset based off-of 3.8-rc4, adds the Linux kernel port to ARC700 processor family (750D and 770D) from Synopsys. I would be greatful for further review and feedback. Salient points about v2 patchset ------------------------------- * All of the feedback from v1 RFC patchseries has been addressed. * Some of the major fixes for v1 review comments such as Device Tree support, multi-platform-image and syscall-restart issues, have not been squashed into relevent patches, but instead have been applied as slap-on patches on orig ones. This is merely to build up some revision history into the final-upstream-merged version. If people think it's too ugly, I can do the chop-n-dice-n-squash, but my preference would be the style we have now. * Unlike RFC v1 series (split into 2 part) this one includes the complete port (still the minimal kernel at halfway checkpoint, builds/runs fine). This combined with prev point, make the full patchset a touch large, for which I appologize in advance. * The entire series however is also available at git://github.com/foss-for-synopsys-dwc-arc-processors/linux.git arc-3.8-lkml-v2 About ARC Cores ---------------- ARC700 is highly configurable and power efficient 32-bit RISC core with MMU. It is embedded in SoCs deployed in TV Set Top boxes, Digital Media Players, all the way to Network-on-Chips. More information is available @ http://www.synopsys.com/IP/ProcessorIP/ARCProcessors/Pages/default.aspx The GNU tool-chain, based off of gcc 4.4 + uClibc 0.9.30.3 is also available from github. Please refer to Readme.md in "toolchain" repository also in same hierarchy as kernel above. --- v2: Changes for RFC v1 review: * Reworked arc_local_irq_enable() with WARN_ONCE for buggy drivers (tglx) * struct pt_regs wrapped under #ifdef __KERNEL__ (Jonas) * returning to user mode (Al Viro) * re-enable interrupts before handling TIF_SIGPENDING/TIF_NOTIFY_RESUME * Don't discard callee-regs after handling signal * After TIF_NOTIFY_RESUME processing, loop back to start of TIF_* checks * Reworked init_IRQ() to not use irq_modify_status() at all (tglx) * Removed legacy syscalls (Arnd) * cpu_idle to use schedule_preempt_disabled API (tglx) * clocksource/clockevent code renamed/reworked (tglx) * Removed possible live-lock in sched_clock() (tglx) * Ensured that syscalls are not restarted multiple times (Al Viro) * Support for DeviceTree based dynamic platform device registration (Arnd) * clock-speed / mem-size extracted from Device Tree (Arnd) * multi-platform-image - Non-exclusive platform selection in build (Arnd) * multi-platform-image - Non-exclusive boards selection in build (Arnd) * Fix the issue in switch to generic_execve (Al Viro) * defconfigs need to be created using savedefconfig (Arnd) * Remove support for legacy ptrace POKEUSR/PEEKUSR ABI (Arnd) * module stubs need not be defined in Arch code (Arnd) * Low Level Event Capture completely taken out (Arnd) * Unaligned access runtime controlled using 2 sysctl knobs (Arnd) * using io accessors for programming BVCI Latency Unit (Arnd) Other fixes: * 3.7 -> 3.8 upstream changes * Rebased off of 3.8-rc4 * UAPI Disintegration using scripts provided David Howells * Generic clone/fork/vfork * switch to saner kernel_execve semantics (GENERIC_KERNEL_EXECVE) * Altstack consolidation tracking changes * trace_clock.h introduction, cacheflush.h inclusion removal from io.h * bitops * test_and_clear_bit() was SETing the bit instead of CLEARing * test_and_*_bit() workaround a gas bug where a bitpos > 31 is not reported by doing __builtin_constant_p() check early * uaccess * Added support for non-inline copy_{to,from}_user() for -Os * Optimised {get,put}_user() by overriding asm-generic versions * Timers * split Process scheduling/Timers patch into two. * Add support for 64bit timestamp counter using RTSC instruction. * Others * Move the incore intc chip handler out of platform code into common code * cpu_ide() to use the rcu_idle_* calls Gilad Ben-Yossef (1): ARC: Add support for ioremap_prot API Mischa Jonker (1): ARC: kgdb support Vineet Gupta (74): ARC: Generic Headers ARC: irqflags - Interrupt enabling/disabling at in-core intc ARC: Atomic/bitops/cmpxchg/barriers asm-generic headers: uaccess.h to conditionally define segment_eq() ARC: uaccess friends asm-generic: uaccess: Allow arches to over-ride __{get,put}_user_fn() ARC: [optim] uaccess __{get,put}_user() optimised asm-generic headers: Allow yet more arch overrides in checksum.h ARC: Checksum/byteorder/swab routines ARC: Fundamental ARCH data-types/defines ARC: Spinlock/rwlock/mutex primitives ARC: String library ARC: Low level IRQ/Trap/Exception Handling ARC: Interrupt Handling ARC: Non-MMU Exception Handling ARC: Syscall support (no-legacy-syscall ABI) ARC: Process-creation/scheduling/idle-loop ARC: Timers/counters/delay management ARC: Signal handling ARC: [Review] Preparing to fix incorrect syscall restarts due to signals ARC: [Review] Prevent incorrect syscall restarts ARC: Cache Flush Management ARC: Page Table Management ARC: MMU Context Management ARC: MMU Exception Handling ARC: TLB flush Handling ARC: Page Fault handling ARC: I/O and DMA Mappings ARC: Boot #1: low-level, setup_arch(), /proc/cpuinfo, mem init ARC: [plat-arcfpga] Static platform device for CONFIG_SERIAL_ARC ARC: Build system: Makefiles, Kconfig, Linker script ARC: [DeviceTree] Basic support ARC: [DeviceTree] Convert some Kconfig items to runtime values ARC: [plat-arcfpga]: Enabling DeviceTree for Angel4 board ARC: Last bits (stubs) to get to a running kernel with UART ARC: Switch to generic kernel_thread() - split ret_from_fork ARC: Switch to generic kernel_execve() and sys_execve() ARC: Switch to saner kernel_execve() semantics #1 ARC: Switch to saner kernel_execve() semantics #2 ARC: Switch to generic sys_clone, fork, vfork ARC: [3.8 tracking] altstack consolidation, trace_clock, cacheflush.h ARC: [plat-arcfpga] defconfig ARC: [optim] Cache "current" in Register r25 ARC: ptrace support ARC: Futex support ARC: OProfile support ARC: Support for high priority interrupts in the in-core intc ARC: Module support ARC: Diagnostics: show_regs() etc ARC: SMP support ARC: DWARF2 .debug_frame based stack unwinder ARC: stacktracing APIs based on dw2 unwinder ARC: disassembly (needed by kprobes/kgdb/unaligned-access-emul) ARC: kprobes support sysctl: Enable PARISC "unaligned-trap" to be used cross-arch ARC: Unaligned access emulation ARC: Boot #2: Verbose Boot reporting / feature verification ARC: [plat-arfpga] BVCI Latency Unit setup perf, ARC: Enable building perf tools for ARC ARC: perf support (software counters only) ARC: Support for single cycle Close Coupled Mem (CCM) ARC: Hostlink Pseudo-Driver for Metaware Debugger ARC: Add self to MAINTAINERS ARC: UAPI Disintegrate arch/arc/include/asm ARC: [Review] Multi-platform image #1: Kconfig enablement ARC: Fold boards sub-menu into platform/SoC menu ARC: [Review] Multi-platform image #2: Board callback Infrastructure ARC: [Review] Multi-platform image #3: switch to board callback ARC: [Review] Multi-platform image #4: Isolate platform headers ARC: [Review] Multi-platform image #5: NR_IRQS defined by ARC core ARC: [Review] Multi-platform image #6: cpu-to-dma-addr optional ARC: [Review] Multi-platform image #7: SMP common code to use callbacks ARC: [Review] Multi-platform image #8: platform registers SMP callbacks ARC: [plat-arcfpga] defconfig for fully loaded ARC Linux .../devicetree/bindings/arc/interrupts.txt | 24 + MAINTAINERS | 6 + arch/arc/Kbuild | 2 + arch/arc/Kconfig | 461 +++++++ arch/arc/Kconfig.debug | 34 + arch/arc/Makefile | 126 ++ arch/arc/boot/Makefile | 26 + arch/arc/boot/dtb/Makefile | 22 + arch/arc/boot/dts/angel4.dts | 55 + arch/arc/boot/dts/skeleton.dts | 10 + arch/arc/boot/dts/skeleton.dtsi | 37 + arch/arc/configs/fpga_defconfig | 51 + arch/arc/include/asm/Kbuild | 49 + arch/arc/include/asm/arcregs.h | 433 +++++++ arch/arc/include/asm/asm-offsets.h | 9 + arch/arc/include/asm/atomic.h | 232 ++++ arch/arc/include/asm/barrier.h | 42 + arch/arc/include/asm/bitops.h | 516 ++++++++ arch/arc/include/asm/bug.h | 37 + arch/arc/include/asm/cache.h | 75 ++ arch/arc/include/asm/cacheflush.h | 67 + arch/arc/include/asm/checksum.h | 101 ++ arch/arc/include/asm/clk.h | 22 + arch/arc/include/asm/cmpxchg.h | 143 +++ arch/arc/include/asm/current.h | 32 + arch/arc/include/asm/defines.h | 56 + arch/arc/include/asm/delay.h | 68 + arch/arc/include/asm/disasm.h | 116 ++ arch/arc/include/asm/dma-mapping.h | 193 +++ arch/arc/include/asm/dma.h | 14 + arch/arc/include/asm/elf.h | 97 ++ arch/arc/include/asm/entry.h | 724 +++++++++++ arch/arc/include/asm/exec.h | 15 + arch/arc/include/asm/futex.h | 151 +++ arch/arc/include/asm/io.h | 28 + arch/arc/include/asm/irq.h | 25 + arch/arc/include/asm/irqflags.h | 153 +++ arch/arc/include/asm/kdebug.h | 19 + arch/arc/include/asm/kgdb.h | 61 + arch/arc/include/asm/kprobes.h | 62 + arch/arc/include/asm/linkage.h | 63 + arch/arc/include/asm/mach_desc.h | 85 ++ arch/arc/include/asm/mmu.h | 23 + arch/arc/include/asm/mmu_context.h | 213 ++++ arch/arc/include/asm/module.h | 28 + arch/arc/include/asm/mutex.h | 18 + arch/arc/include/asm/page.h | 109 ++ arch/arc/include/asm/perf_event.h | 13 + arch/arc/include/asm/pgalloc.h | 134 ++ arch/arc/include/asm/pgtable.h | 405 ++++++ arch/arc/include/asm/processor.h | 151 +++ arch/arc/include/asm/prom.h | 14 + arch/arc/include/asm/ptrace.h | 125 ++ arch/arc/include/asm/sections.h | 18 + arch/arc/include/asm/segment.h | 24 + arch/arc/include/asm/setup.h | 37 + arch/arc/include/asm/smp.h | 130 ++ arch/arc/include/asm/spinlock.h | 144 +++ arch/arc/include/asm/spinlock_types.h | 35 + arch/arc/include/asm/string.h | 40 + arch/arc/include/asm/switch_to.h | 41 + arch/arc/include/asm/syscall.h | 72 ++ arch/arc/include/asm/syscalls.h | 29 + arch/arc/include/asm/thread_info.h | 120 ++ arch/arc/include/asm/timex.h | 18 + arch/arc/include/asm/tlb-mmu1.h | 104 ++ arch/arc/include/asm/tlb.h | 58 + arch/arc/include/asm/tlbflush.h | 28 + arch/arc/include/asm/uaccess.h | 751 +++++++++++ arch/arc/include/asm/unaligned.h | 29 + arch/arc/include/asm/unwind.h | 163 +++ arch/arc/include/asm/vmlinux.lds.h | 12 + arch/arc/include/uapi/asm/Kbuild | 11 + arch/arc/include/uapi/asm/byteorder.h | 18 + arch/arc/include/uapi/asm/cachectl.h | 28 + arch/arc/include/uapi/asm/page.h | 39 + arch/arc/include/uapi/asm/ptrace.h | 46 + arch/arc/include/uapi/asm/sigcontext.h | 23 + arch/arc/include/uapi/asm/signal.h | 27 + arch/arc/include/uapi/asm/swab.h | 98 ++ arch/arc/include/uapi/asm/unistd.h | 34 + arch/arc/kernel/Makefile | 33 + arch/arc/kernel/arc_hostlink.c | 114 ++ arch/arc/kernel/arcksyms.c | 56 + arch/arc/kernel/asm-offsets.c | 49 + arch/arc/kernel/clk.c | 21 + arch/arc/kernel/ctx_sw.c | 109 ++ arch/arc/kernel/ctx_sw_asm.S | 58 + arch/arc/kernel/devtree.c | 113 ++ arch/arc/kernel/disasm.c | 538 ++++++++ arch/arc/kernel/entry.S | 844 +++++++++++++ arch/arc/kernel/fpu.c | 55 + arch/arc/kernel/head.S | 111 ++ arch/arc/kernel/irq.c | 273 ++++ arch/arc/kernel/kgdb.c | 205 +++ arch/arc/kernel/kprobes.c | 525 ++++++++ arch/arc/kernel/module.c | 145 +++ arch/arc/kernel/process.c | 228 ++++ arch/arc/kernel/ptrace.c | 158 +++ arch/arc/kernel/reset.c | 33 + arch/arc/kernel/setup.c | 471 +++++++ arch/arc/kernel/signal.c | 363 ++++++ arch/arc/kernel/smp.c | 331 +++++ arch/arc/kernel/stacktrace.c | 254 ++++ arch/arc/kernel/sys.c | 18 + arch/arc/kernel/time.c | 295 +++++ arch/arc/kernel/traps.c | 170 +++ arch/arc/kernel/troubleshoot.c | 322 +++++ arch/arc/kernel/unaligned.c | 245 ++++ arch/arc/kernel/unwind.c | 1329 ++++++++++++++++++++ arch/arc/kernel/vmlinux.lds.S | 164 +++ arch/arc/lib/Makefile | 9 + arch/arc/lib/memcmp.S | 124 ++ arch/arc/lib/memcpy-700.S | 66 + arch/arc/lib/memset.S | 59 + arch/arc/lib/strchr-700.S | 123 ++ arch/arc/lib/strcmp.S | 96 ++ arch/arc/lib/strcpy-700.S | 70 + arch/arc/lib/strlen.S | 83 ++ arch/arc/mm/Makefile | 10 + arch/arc/mm/cache_arc700.c | 771 ++++++++++++ arch/arc/mm/dma.c | 91 ++ arch/arc/mm/extable.c | 63 + arch/arc/mm/fault.c | 228 ++++ arch/arc/mm/init.c | 197 +++ arch/arc/mm/ioremap.c | 86 ++ arch/arc/mm/tlb.c | 645 ++++++++++ arch/arc/mm/tlbex.S | 408 ++++++ arch/arc/oprofile/Makefile | 9 + arch/arc/oprofile/common.c | 22 + arch/arc/plat-arcfpga/Kconfig | 83 ++ arch/arc/plat-arcfpga/Makefile | 12 + arch/arc/plat-arcfpga/include/plat/irq.h | 31 + arch/arc/plat-arcfpga/include/plat/memmap.h | 31 + arch/arc/plat-arcfpga/include/plat/smp.h | 118 ++ arch/arc/plat-arcfpga/irq.c | 25 + arch/arc/plat-arcfpga/platform.c | 235 ++++ arch/arc/plat-arcfpga/smp.c | 171 +++ arch/parisc/Kconfig | 1 + include/asm-generic/checksum.h | 4 + include/asm-generic/uaccess.h | 14 +- init/Kconfig | 8 + kernel/sysctl.c | 7 +- lib/checksum.c | 2 + tools/perf/perf.h | 6 + 145 files changed, 19488 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/arc/interrupts.txt create mode 100644 arch/arc/Kbuild create mode 100644 arch/arc/Kconfig create mode 100644 arch/arc/Kconfig.debug create mode 100644 arch/arc/Makefile create mode 100644 arch/arc/boot/Makefile create mode 100644 arch/arc/boot/dtb/Makefile create mode 100644 arch/arc/boot/dts/angel4.dts create mode 100644 arch/arc/boot/dts/skeleton.dts create mode 100644 arch/arc/boot/dts/skeleton.dtsi create mode 100644 arch/arc/configs/fpga_defconfig create mode 100644 arch/arc/include/asm/Kbuild create mode 100644 arch/arc/include/asm/arcregs.h create mode 100644 arch/arc/include/asm/asm-offsets.h create mode 100644 arch/arc/include/asm/atomic.h create mode 100644 arch/arc/include/asm/barrier.h create mode 100644 arch/arc/include/asm/bitops.h create mode 100644 arch/arc/include/asm/bug.h create mode 100644 arch/arc/include/asm/cache.h create mode 100644 arch/arc/include/asm/cacheflush.h create mode 100644 arch/arc/include/asm/checksum.h create mode 100644 arch/arc/include/asm/clk.h create mode 100644 arch/arc/include/asm/cmpxchg.h create mode 100644 arch/arc/include/asm/current.h create mode 100644 arch/arc/include/asm/defines.h create mode 100644 arch/arc/include/asm/delay.h create mode 100644 arch/arc/include/asm/disasm.h create mode 100644 arch/arc/include/asm/dma-mapping.h create mode 100644 arch/arc/include/asm/dma.h create mode 100644 arch/arc/include/asm/elf.h create mode 100644 arch/arc/include/asm/entry.h create mode 100644 arch/arc/include/asm/exec.h create mode 100644 arch/arc/include/asm/futex.h create mode 100644 arch/arc/include/asm/io.h create mode 100644 arch/arc/include/asm/irq.h create mode 100644 arch/arc/include/asm/irqflags.h create mode 100644 arch/arc/include/asm/kdebug.h create mode 100644 arch/arc/include/asm/kgdb.h create mode 100644 arch/arc/include/asm/kprobes.h create mode 100644 arch/arc/include/asm/linkage.h create mode 100644 arch/arc/include/asm/mach_desc.h create mode 100644 arch/arc/include/asm/mmu.h create mode 100644 arch/arc/include/asm/mmu_context.h create mode 100644 arch/arc/include/asm/module.h create mode 100644 arch/arc/include/asm/mutex.h create mode 100644 arch/arc/include/asm/page.h create mode 100644 arch/arc/include/asm/perf_event.h create mode 100644 arch/arc/include/asm/pgalloc.h create mode 100644 arch/arc/include/asm/pgtable.h create mode 100644 arch/arc/include/asm/processor.h create mode 100644 arch/arc/include/asm/prom.h create mode 100644 arch/arc/include/asm/ptrace.h create mode 100644 arch/arc/include/asm/sections.h create mode 100644 arch/arc/include/asm/segment.h create mode 100644 arch/arc/include/asm/setup.h create mode 100644 arch/arc/include/asm/smp.h create mode 100644 arch/arc/include/asm/spinlock.h create mode 100644 arch/arc/include/asm/spinlock_types.h create mode 100644 arch/arc/include/asm/string.h create mode 100644 arch/arc/include/asm/switch_to.h create mode 100644 arch/arc/include/asm/syscall.h create mode 100644 arch/arc/include/asm/syscalls.h create mode 100644 arch/arc/include/asm/thread_info.h create mode 100644 arch/arc/include/asm/timex.h create mode 100644 arch/arc/include/asm/tlb-mmu1.h create mode 100644 arch/arc/include/asm/tlb.h create mode 100644 arch/arc/include/asm/tlbflush.h create mode 100644 arch/arc/include/asm/uaccess.h create mode 100644 arch/arc/include/asm/unaligned.h create mode 100644 arch/arc/include/asm/unwind.h create mode 100644 arch/arc/include/asm/vmlinux.lds.h create mode 100644 arch/arc/include/uapi/asm/Kbuild create mode 100644 arch/arc/include/uapi/asm/byteorder.h create mode 100644 arch/arc/include/uapi/asm/cachectl.h create mode 100644 arch/arc/include/uapi/asm/page.h create mode 100644 arch/arc/include/uapi/asm/ptrace.h create mode 100644 arch/arc/include/uapi/asm/setup.h create mode 100644 arch/arc/include/uapi/asm/sigcontext.h create mode 100644 arch/arc/include/uapi/asm/signal.h create mode 100644 arch/arc/include/uapi/asm/swab.h create mode 100644 arch/arc/include/uapi/asm/unistd.h create mode 100644 arch/arc/kernel/Makefile create mode 100644 arch/arc/kernel/arc_hostlink.c create mode 100644 arch/arc/kernel/arcksyms.c create mode 100644 arch/arc/kernel/asm-offsets.c create mode 100644 arch/arc/kernel/clk.c create mode 100644 arch/arc/kernel/ctx_sw.c create mode 100644 arch/arc/kernel/ctx_sw_asm.S create mode 100644 arch/arc/kernel/devtree.c create mode 100644 arch/arc/kernel/disasm.c create mode 100644 arch/arc/kernel/entry.S create mode 100644 arch/arc/kernel/fpu.c create mode 100644 arch/arc/kernel/head.S create mode 100644 arch/arc/kernel/irq.c create mode 100644 arch/arc/kernel/kgdb.c create mode 100644 arch/arc/kernel/kprobes.c create mode 100644 arch/arc/kernel/module.c create mode 100644 arch/arc/kernel/process.c create mode 100644 arch/arc/kernel/ptrace.c create mode 100644 arch/arc/kernel/reset.c create mode 100644 arch/arc/kernel/setup.c create mode 100644 arch/arc/kernel/signal.c create mode 100644 arch/arc/kernel/smp.c create mode 100644 arch/arc/kernel/stacktrace.c create mode 100644 arch/arc/kernel/sys.c create mode 100644 arch/arc/kernel/time.c create mode 100644 arch/arc/kernel/traps.c create mode 100644 arch/arc/kernel/troubleshoot.c create mode 100644 arch/arc/kernel/unaligned.c create mode 100644 arch/arc/kernel/unwind.c create mode 100644 arch/arc/kernel/vmlinux.lds.S create mode 100644 arch/arc/lib/Makefile create mode 100644 arch/arc/lib/memcmp.S create mode 100644 arch/arc/lib/memcpy-700.S create mode 100644 arch/arc/lib/memset.S create mode 100644 arch/arc/lib/strchr-700.S create mode 100644 arch/arc/lib/strcmp.S create mode 100644 arch/arc/lib/strcpy-700.S create mode 100644 arch/arc/lib/strlen.S create mode 100644 arch/arc/mm/Makefile create mode 100644 arch/arc/mm/cache_arc700.c create mode 100644 arch/arc/mm/dma.c create mode 100644 arch/arc/mm/extable.c create mode 100644 arch/arc/mm/fault.c create mode 100644 arch/arc/mm/init.c create mode 100644 arch/arc/mm/ioremap.c create mode 100644 arch/arc/mm/tlb.c create mode 100644 arch/arc/mm/tlbex.S create mode 100644 arch/arc/oprofile/Makefile create mode 100644 arch/arc/oprofile/common.c create mode 100644 arch/arc/plat-arcfpga/Kconfig create mode 100644 arch/arc/plat-arcfpga/Makefile create mode 100644 arch/arc/plat-arcfpga/include/plat/irq.h create mode 100644 arch/arc/plat-arcfpga/include/plat/memmap.h create mode 100644 arch/arc/plat-arcfpga/include/plat/smp.h create mode 100644 arch/arc/plat-arcfpga/irq.c create mode 100644 arch/arc/plat-arcfpga/platform.c create mode 100644 arch/arc/plat-arcfpga/smp.c -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html