[PATCH 09/17] RISC-V: Init and Halt Code

2017-07-11 Thread Palmer Dabbelt
This contains the various __init C functions, the initial assembly
kernel entry point, and the code to reset the system.  When a file was
init-related this patch contains the entire file.

Signed-off-by: Palmer Dabbelt 
---
 arch/riscv/include/asm/bug.h   |  88 +++
 arch/riscv/include/asm/cache.h |  22 
 arch/riscv/include/asm/smp.h   |  52 +
 arch/riscv/kernel/cacheinfo.c  | 105 ++
 arch/riscv/kernel/cpu.c|  89 +++
 arch/riscv/kernel/head.S   | 151 +
 arch/riscv/kernel/irq.c|  20 
 arch/riscv/kernel/reset.c  |  36 ++
 arch/riscv/kernel/setup.c  | 246 +
 arch/riscv/kernel/smp.c| 110 ++
 arch/riscv/kernel/smpboot.c| 112 +++
 arch/riscv/kernel/time.c   |  76 +
 arch/riscv/kernel/traps.c  | 180 ++
 arch/riscv/kernel/vdso.c   | 125 +
 arch/riscv/mm/init.c   |  70 
 15 files changed, 1482 insertions(+)
 create mode 100644 arch/riscv/include/asm/bug.h
 create mode 100644 arch/riscv/include/asm/cache.h
 create mode 100644 arch/riscv/include/asm/smp.h
 create mode 100644 arch/riscv/kernel/cacheinfo.c
 create mode 100644 arch/riscv/kernel/cpu.c
 create mode 100644 arch/riscv/kernel/head.S
 create mode 100644 arch/riscv/kernel/irq.c
 create mode 100644 arch/riscv/kernel/reset.c
 create mode 100644 arch/riscv/kernel/setup.c
 create mode 100644 arch/riscv/kernel/smp.c
 create mode 100644 arch/riscv/kernel/smpboot.c
 create mode 100644 arch/riscv/kernel/time.c
 create mode 100644 arch/riscv/kernel/traps.c
 create mode 100644 arch/riscv/kernel/vdso.c
 create mode 100644 arch/riscv/mm/init.c

diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h
new file mode 100644
index ..c3e13764a943
--- /dev/null
+++ b/arch/riscv/include/asm/bug.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2012 Regents of the University of California
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation, version 2.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ */
+
+#ifndef _ASM_RISCV_BUG_H
+#define _ASM_RISCV_BUG_H
+
+#include 
+#include 
+#include 
+
+#include 
+
+#ifdef CONFIG_GENERIC_BUG
+#define __BUG_INSN _AC(0x00100073, UL) /* ebreak */
+
+#ifndef __ASSEMBLY__
+typedef u32 bug_insn_t;
+
+#ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
+#define __BUG_ENTRY_ADDR   INT " 1b - 2b"
+#define __BUG_ENTRY_FILE   INT " %0 - 2b"
+#else
+#define __BUG_ENTRY_ADDR   RISCV_PTR " 1b"
+#define __BUG_ENTRY_FILE   RISCV_PTR " %0"
+#endif
+
+#ifdef CONFIG_DEBUG_BUGVERBOSE
+#define __BUG_ENTRY\
+   __BUG_ENTRY_ADDR "\n\t" \
+   __BUG_ENTRY_FILE "\n\t" \
+   SHORT " %1"
+#else
+#define __BUG_ENTRY\
+   __BUG_ENTRY_ADDR
+#endif
+
+#define BUG()  \
+do {   \
+   __asm__ __volatile__ (  \
+   "1:\n\t"\
+   "ebreak\n"  \
+   ".pushsection __bug_table,\"a\"\n\t"\
+   "2:\n\t"\
+   __BUG_ENTRY "\n\t"  \
+   ".org 2b + %2\n\t"  \
+   ".popsection"   \
+   :   \
+   : "i" (__FILE__), "i" (__LINE__),   \
+ "i" (sizeof(struct bug_entry)));  \
+   unreachable();  \
+} while (0)
+#endif /* !__ASSEMBLY__ */
+#else /* CONFIG_GENERIC_BUG */
+#ifndef __ASSEMBLY__
+#define BUG()  \
+do {   \
+   __asm__ __volatile__ ("ebreak\n");  \
+   unreachable();  \
+} while (0)
+#endif /* !__ASSEMBLY__ */
+#endif /* CONFIG_GENERIC_BUG */
+
+#define HAVE_ARCH_BUG
+
+#include 
+
+#ifndef __ASSEMBLY__
+
+struct pt_regs;
+struct task_struct;
+
+extern void die(struct pt_regs *regs, const char *str);
+extern void do_trap(struct pt_regs *regs, int signo, int code,
+   unsigned long addr, struct task_struct *tsk);
+
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _ASM_RISCV_BUG_H */
diff --git a/arch/riscv/incl

[PATCH 09/17] RISC-V: Init and Halt Code

2017-07-10 Thread Palmer Dabbelt
This contains the various __init C functions, the initial assembly
kernel entry point, and the code to reset the system.  When a file was
init-related this patch contains the entire file.

Signed-off-by: Palmer Dabbelt 
---
 arch/riscv/include/asm/bug.h   |  88 +++
 arch/riscv/include/asm/cache.h |  22 
 arch/riscv/include/asm/smp.h   |  52 +
 arch/riscv/kernel/cacheinfo.c  | 105 ++
 arch/riscv/kernel/cpu.c|  89 +++
 arch/riscv/kernel/head.S   | 151 +
 arch/riscv/kernel/irq.c|  20 
 arch/riscv/kernel/reset.c  |  36 ++
 arch/riscv/kernel/setup.c  | 246 +
 arch/riscv/kernel/smp.c| 110 ++
 arch/riscv/kernel/smpboot.c| 112 +++
 arch/riscv/kernel/time.c   |  76 +
 arch/riscv/kernel/traps.c  | 180 ++
 arch/riscv/kernel/vdso.c   | 125 +
 arch/riscv/mm/init.c   |  70 
 15 files changed, 1482 insertions(+)
 create mode 100644 arch/riscv/include/asm/bug.h
 create mode 100644 arch/riscv/include/asm/cache.h
 create mode 100644 arch/riscv/include/asm/smp.h
 create mode 100644 arch/riscv/kernel/cacheinfo.c
 create mode 100644 arch/riscv/kernel/cpu.c
 create mode 100644 arch/riscv/kernel/head.S
 create mode 100644 arch/riscv/kernel/irq.c
 create mode 100644 arch/riscv/kernel/reset.c
 create mode 100644 arch/riscv/kernel/setup.c
 create mode 100644 arch/riscv/kernel/smp.c
 create mode 100644 arch/riscv/kernel/smpboot.c
 create mode 100644 arch/riscv/kernel/time.c
 create mode 100644 arch/riscv/kernel/traps.c
 create mode 100644 arch/riscv/kernel/vdso.c
 create mode 100644 arch/riscv/mm/init.c

diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h
new file mode 100644
index ..c3e13764a943
--- /dev/null
+++ b/arch/riscv/include/asm/bug.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2012 Regents of the University of California
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation, version 2.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ */
+
+#ifndef _ASM_RISCV_BUG_H
+#define _ASM_RISCV_BUG_H
+
+#include 
+#include 
+#include 
+
+#include 
+
+#ifdef CONFIG_GENERIC_BUG
+#define __BUG_INSN _AC(0x00100073, UL) /* ebreak */
+
+#ifndef __ASSEMBLY__
+typedef u32 bug_insn_t;
+
+#ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
+#define __BUG_ENTRY_ADDR   INT " 1b - 2b"
+#define __BUG_ENTRY_FILE   INT " %0 - 2b"
+#else
+#define __BUG_ENTRY_ADDR   RISCV_PTR " 1b"
+#define __BUG_ENTRY_FILE   RISCV_PTR " %0"
+#endif
+
+#ifdef CONFIG_DEBUG_BUGVERBOSE
+#define __BUG_ENTRY\
+   __BUG_ENTRY_ADDR "\n\t" \
+   __BUG_ENTRY_FILE "\n\t" \
+   SHORT " %1"
+#else
+#define __BUG_ENTRY\
+   __BUG_ENTRY_ADDR
+#endif
+
+#define BUG()  \
+do {   \
+   __asm__ __volatile__ (  \
+   "1:\n\t"\
+   "ebreak\n"  \
+   ".pushsection __bug_table,\"a\"\n\t"\
+   "2:\n\t"\
+   __BUG_ENTRY "\n\t"  \
+   ".org 2b + %2\n\t"  \
+   ".popsection"   \
+   :   \
+   : "i" (__FILE__), "i" (__LINE__),   \
+ "i" (sizeof(struct bug_entry)));  \
+   unreachable();  \
+} while (0)
+#endif /* !__ASSEMBLY__ */
+#else /* CONFIG_GENERIC_BUG */
+#ifndef __ASSEMBLY__
+#define BUG()  \
+do {   \
+   __asm__ __volatile__ ("ebreak\n");  \
+   unreachable();  \
+} while (0)
+#endif /* !__ASSEMBLY__ */
+#endif /* CONFIG_GENERIC_BUG */
+
+#define HAVE_ARCH_BUG
+
+#include 
+
+#ifndef __ASSEMBLY__
+
+struct pt_regs;
+struct task_struct;
+
+extern void die(struct pt_regs *regs, const char *str);
+extern void do_trap(struct pt_regs *regs, int signo, int code,
+   unsigned long addr, struct task_struct *tsk);
+
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _ASM_RISCV_BUG_H */
diff --git a/arch/riscv/incl