Web lists-archives.com

[GIT PULL] RISC-V Port for Linux 4.15 v9




The following changes since commit bebc6082da0a9f5d47a1ea2edc099bf671058bd4:

  Linux 4.14 (2017-11-12 10:46:13 -0800)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/palmer/linux.git tags/riscv-for-linus-4.15-arch-v9

for you to fetch changes up to 512d88db5ef3de56f392f761657c2ab2cadc0498:

  Merge tag 'v4.14' into for-linus (2017-11-13 13:17:51 -0800)

----------------------------------------------------------------
RISC-V Port for Linux 4.15 v9

This tag contains the core RISC-V Linux port, which has been through
nine rounds of review on various mailing lists.  The port is not
complete: there's some cleanup patches moving through the review
process, a whole bunch of drivers that need some work, and a lot of
feature additions that will be needed.

The patches contained in this tag have been through nine rounds of
review on the various mailing lists.  I have some outstanding cleanup
patches, but since there's been so much review on these patches I
thought it would be best to submit them as-is and then submit explicit
cleanup patches so everyone can review them.  This first patch set is
big enough that it's a bit of a pain to constantly rewrite, and it's
caused a few headaches with various contributors.

The port is definately a work in progress.  While what's there builds
and boots with 4.14, it's a bit hard to actually see anything happen
because there are no device drivers yet.  I maintain a staging branch
that contains all the device drivers and cleanup that actually works,
but those patches won't all be ready for a while.  I'd like to get what
we currently have into your tree so everyone can start working from a
single base -- of particular importance is allowing the glibc
upstreaming process to proceed so we can sort out any possibly lingering
user-visible ABI problems we might have.

Copied below is the ChangeLog that contains the history of this patch
set:

(v9) As per suggestions on our v8 patch set, I've split the core architecture code
out from our drivers and would like to submit this patch set to be included
into linux-next, with the goal being to be merged in during the next merge
window.  This patch set is based on 4.14-rc2, but if it's better to have it
based on something else then I can change it around.

This patch set contains just the core arch code for RISC-V, so while it builds
an nominally boots, you can't print or take an interrupt so it's not that
useful.  If you're looking to actually boot a system it would probably be
better to use the full patch set listed below.

We've collected a handful of tags from reviewers, and the remainder of the
patch set only got minimal feedback last time.  Here's what changed:

 * We now use the device tree to initialize the timer driver so it's less
   tighly coupled with the arch port.
 * I cleaned up the defconfigs -- there's actually now just one, and it's
   empty.  For now I think we're OK with what the kernel sets as defaults, but
   I anticipate we'll begin to expand this as people start to use the port
   more.
 * The VDSO symbols version is sane.
 * We WFI while spinning in the boot loop.
 * A handful of comments have been added.

While there are still a handful of FIXMEs in this patch set, we've started to
get enough interest from various users and contributors that maintaining an out
of tree patch set is starting to become a big burden.  Hopefully the patches
are good enough to merge now, which will at least get everyone working in a
more reasonable manner as we clean up the remaining issues.

This patch set is also availiable on github

  https://github.com/riscv/riscv-linux/tree/riscv-for-submission-v9-arch

as is the entire patch set necessary to get a more functional RISC-V system up
and running, including a handful of patches that aren't ready for upstream yet.

  https://github.com/riscv/riscv-linux/tree/riscv-for-submission-v9

Hopefully I've managed to get everyone's feedback

Here's the change highlights from the whole patch set:

(v8) I know it may not be the ideal time to submit a patch set right now, as
it's the middle of the merge window, but things have calmed down quite a bit in
the last month so I thought it would be good to get everyone on the same page.
There's been a handful of changes since the last patch set, but most of them
are fairly minor:

* We changed PAGE_OFFSET to allowing mapping more physical memory on 64-bit
  systems.  This is user configurable, as it triggers a different code model
  that generates slightly less efficient code.
* The device tree binding documentation is back, I'd managed to lose it at some
  point.
* We now pass the atomic64 test suite.  The SBI timer driver has been
* refactored.

(v7) It's been a while since my last patch set, but the changes han been fairly
minimal:

 * The PCI cleanup patches have been dropped, we'll do them as a separate patch
   set later.
 * We've the Kconfig entries from CONFIG_ISA_* to CONFIG_RISCV_ISA_*, to make
   grep easier.
 * There have been a handful of memory model related tweaks in I/O land,
   particularly relating the PCI and the upcoming platform specification.
   There are significant comments in the relevant files.  This is still a WIP,
   but I think we're close to getting as good as we're going to get until we
   end up with some more specifications.

(v6) As it's been only a day since the v5 patch set, the changes are pretty
minimal:

 * The patch set is now based on linux-next/master, which I believe is a better
   base now that we're getting closer to upstream.
 * EARLY_PRINTK is no longer an option.  Since the SBI console is reasonable,
   there's no penalty to enabling it (and thus no benefit to disabling it).
 * The mmap syscalls were refactored a bit.

(v5) Things have really started to calm down, so this is fairly similar to the
v4 patch set.  The most interesting changes include:

 * We've moved back to a single patch set.

 * SMP support has been fixed, I was accidentally running on a non-SMP
   configuration.  There were various mistakes all over the tree as a result of
   this.

 * The cmpxchg syscalls have been removed, as they were deemed a bad idea.  As
   a result, RISC-V Linux systems mandate the A extension.  The corresponding
   Kconfig entry to enable builds on non-A systems has been removed.

 * A few more atomic fixes: mostly fence changes, but those resulted in a
   handful of additional macros that were no longer necessary.

 * riscv_early_sie has been removed.

(v4) There have only been a few changes since the v3 patch set:

 * The cmpxchg64 syscall is no longer enabled on 32-bit systems.  It's not
   possible to provide this on SMP systems, and it's not necessary as glibc
   knows not to call it.

 * We provide a ELF_HWCAP so users can determine the ISA of the machine the
   kernel is running on.

 * The multi-line comments are in a better form.

 * There were a handful of headers that could be replaced with the asm-generic
   versions, and a few unnecessary definitions.

 * We no longer use printk, but instead use pr_*.

 * A few Kconfig and defconfig entries have been cleaned up.

(v3) A highlight of the changes since the v2 patch set includes:

 * We've split out all our drivers into separate patch sets, which I've already
   sent out to the relevant maintainers.  I haven't included those patches in
   this patch set, but some of them are necessary to build our port.  A git
   tree that contains all our patch sets merged together lives at
   <https://github.com/riscv/riscv-linux/tree/riscv-for-submission-v3>.

 * The patch set is now split up differently: rather than being split per
   directory it is split per topic.  Hopefully this will make it easier to
   review the port on the mailing list.  The split is a bit rough, so you
   probably still want to look at the patch set as a whole.

 * atomic.h has been completely rewritten and is hopefully now correct.  I've
   attempted to sanitize the various other memory model related code as well,
   and I think it should all be sane now aside from a handful of FIXMEs
   commented in the code.

 * We've changed the cmpexchg syscall to always exist and to not be
   multiplexed.  There is also a VDSO entry for compare and exchange, which
   allows kernels with the A extension to execute user code without the A
   extension reasonably fast.

 * Our user-visible register state now contains enough space for the Q
   extension for 128-bit floating point, as well as a few words to allow
   extensibility to future ISA extensions like the eventual V extension for
   vectors.

 * A handful of driver cleanups, but these have been split into separate patch
   sets now so I won't duplicate them here.

(v2) A highlight of the changes since the v1 patch set includes:

  * We've split out our drivers into the right places, which means now there's
    a lot more patches.  I'll be submitting these patches to various subsystem
    maintainers and including them in any future RISC-V patch sets until
    they've been merged.

  * The SBI console driver has been completely rewritten to use the HVC helpers
    and is now significantly smaller.

  * We've begun to use weaker barriers as opposed to just the big "fence".
    There's still some work to do here, specifically:
    - We need fences in the relaxed MMIO functions.
    - The non-relaxed MMIO functions are missing R/W bits on their fences.
    - Many AMOs need the aq and rl bits set.

  * We now have thread_info in task_struct.  As a result, sscratch now contains
    TP instead of SP.  This was necessary because thread_info is no longer on
    the stack.

  * A few shared routines have been added that we use instead of creating
    another arch copy.

----------------------------------------------------------------
Jonathan Neuschäfer (1):
      MAINTAINERS: Add RISC-V

Palmer Dabbelt (12):
      lib: Add shared copies of some GCC library routines
      dt-bindings: RISC-V CPU Bindings
      RISC-V: Init and Halt Code
      RISC-V: Atomic and Locking Code
      RISC-V: Generic library routines and assembly
      RISC-V: ELF and module implementation
      RISC-V: Task implementation
      RISC-V: Device, timer, IRQs, and the SBI
      RISC-V: Paging and MMU
      RISC-V: User-facing API
      RISC-V: Build Infrastructure
      Merge tag 'v4.14' into for-linus

 Documentation/devicetree/bindings/riscv/cpus.txt | 162 +++++++
 MAINTAINERS                                      |  10 +
 Makefile                                         |   3 +-
 arch/riscv/Kconfig                               | 310 ++++++++++++++
 arch/riscv/Makefile                              |  72 ++++
 arch/riscv/configs/defconfig                     |   0
 arch/riscv/include/asm/Kbuild                    |  61 +++
 arch/riscv/include/asm/asm-offsets.h             |   1 +
 arch/riscv/include/asm/asm.h                     |  76 ++++
 arch/riscv/include/asm/atomic.h                  | 375 +++++++++++++++++
 arch/riscv/include/asm/barrier.h                 |  68 +++
 arch/riscv/include/asm/bitops.h                  | 218 ++++++++++
 arch/riscv/include/asm/bug.h                     |  88 ++++
 arch/riscv/include/asm/cache.h                   |  22 +
 arch/riscv/include/asm/cacheflush.h              |  39 ++
 arch/riscv/include/asm/cmpxchg.h                 | 134 ++++++
 arch/riscv/include/asm/compat.h                  |  29 ++
 arch/riscv/include/asm/csr.h                     | 132 ++++++
 arch/riscv/include/asm/current.h                 |  45 ++
 arch/riscv/include/asm/delay.h                   |  28 ++
 arch/riscv/include/asm/dma-mapping.h             |  38 ++
 arch/riscv/include/asm/elf.h                     |  84 ++++
 arch/riscv/include/asm/hwcap.h                   |  37 ++
 arch/riscv/include/asm/io.h                      | 303 +++++++++++++
 arch/riscv/include/asm/irq.h                     |  28 ++
 arch/riscv/include/asm/irqflags.h                |  63 +++
 arch/riscv/include/asm/kprobes.h                 |  22 +
 arch/riscv/include/asm/linkage.h                 |  20 +
 arch/riscv/include/asm/mmu.h                     |  26 ++
 arch/riscv/include/asm/mmu_context.h             |  69 +++
 arch/riscv/include/asm/page.h                    | 130 ++++++
 arch/riscv/include/asm/pci.h                     |  48 +++
 arch/riscv/include/asm/pgalloc.h                 | 124 ++++++
 arch/riscv/include/asm/pgtable-32.h              |  25 ++
 arch/riscv/include/asm/pgtable-64.h              |  84 ++++
 arch/riscv/include/asm/pgtable-bits.h            |  48 +++
 arch/riscv/include/asm/pgtable.h                 | 430 +++++++++++++++++++
 arch/riscv/include/asm/processor.h               |  97 +++++
 arch/riscv/include/asm/ptrace.h                  | 118 ++++++
 arch/riscv/include/asm/sbi.h                     | 100 +++++
 arch/riscv/include/asm/smp.h                     |  52 +++
 arch/riscv/include/asm/spinlock.h                | 165 ++++++++
 arch/riscv/include/asm/spinlock_types.h          |  33 ++
 arch/riscv/include/asm/string.h                  |  26 ++
 arch/riscv/include/asm/switch_to.h               |  69 +++
 arch/riscv/include/asm/syscall.h                 | 102 +++++
 arch/riscv/include/asm/thread_info.h             |  94 +++++
 arch/riscv/include/asm/timex.h                   |  59 +++
 arch/riscv/include/asm/tlb.h                     |  24 ++
 arch/riscv/include/asm/tlbflush.h                |  64 +++
 arch/riscv/include/asm/uaccess.h                 | 513 +++++++++++++++++++++++
 arch/riscv/include/asm/unistd.h                  |  16 +
 arch/riscv/include/asm/vdso.h                    |  41 ++
 arch/riscv/include/asm/word-at-a-time.h          |  55 +++
 arch/riscv/include/uapi/asm/Kbuild               |  27 ++
 arch/riscv/include/uapi/asm/auxvec.h             |  24 ++
 arch/riscv/include/uapi/asm/bitsperlong.h        |  25 ++
 arch/riscv/include/uapi/asm/byteorder.h          |  23 +
 arch/riscv/include/uapi/asm/elf.h                |  83 ++++
 arch/riscv/include/uapi/asm/hwcap.h              |  36 ++
 arch/riscv/include/uapi/asm/ptrace.h             |  90 ++++
 arch/riscv/include/uapi/asm/sigcontext.h         |  30 ++
 arch/riscv/include/uapi/asm/siginfo.h            |  24 ++
 arch/riscv/include/uapi/asm/ucontext.h           |  45 ++
 arch/riscv/kernel/.gitignore                     |   1 +
 arch/riscv/kernel/Makefile                       |  33 ++
 arch/riscv/kernel/asm-offsets.c                  | 322 ++++++++++++++
 arch/riscv/kernel/cacheinfo.c                    | 105 +++++
 arch/riscv/kernel/cpu.c                          | 108 +++++
 arch/riscv/kernel/cpufeature.c                   |  61 +++
 arch/riscv/kernel/entry.S                        | 464 ++++++++++++++++++++
 arch/riscv/kernel/head.S                         | 157 +++++++
 arch/riscv/kernel/irq.c                          |  39 ++
 arch/riscv/kernel/module.c                       | 217 ++++++++++
 arch/riscv/kernel/process.c                      | 129 ++++++
 arch/riscv/kernel/ptrace.c                       | 125 ++++++
 arch/riscv/kernel/reset.c                        |  36 ++
 arch/riscv/kernel/riscv_ksyms.c                  |  15 +
 arch/riscv/kernel/setup.c                        | 257 ++++++++++++
 arch/riscv/kernel/signal.c                       | 292 +++++++++++++
 arch/riscv/kernel/smp.c                          | 110 +++++
 arch/riscv/kernel/smpboot.c                      | 114 +++++
 arch/riscv/kernel/stacktrace.c                   | 177 ++++++++
 arch/riscv/kernel/sys_riscv.c                    |  49 +++
 arch/riscv/kernel/syscall_table.c                |  25 ++
 arch/riscv/kernel/time.c                         |  61 +++
 arch/riscv/kernel/traps.c                        | 180 ++++++++
 arch/riscv/kernel/vdso.c                         | 125 ++++++
 arch/riscv/kernel/vdso/.gitignore                |   2 +
 arch/riscv/kernel/vdso/Makefile                  |  63 +++
 arch/riscv/kernel/vdso/rt_sigreturn.S            |  24 ++
 arch/riscv/kernel/vdso/vdso.S                    |  27 ++
 arch/riscv/kernel/vdso/vdso.lds.S                |  77 ++++
 arch/riscv/kernel/vmlinux.lds.S                  |  92 ++++
 arch/riscv/lib/Makefile                          |   6 +
 arch/riscv/lib/delay.c                           | 110 +++++
 arch/riscv/lib/memcpy.S                          | 115 +++++
 arch/riscv/lib/memset.S                          | 120 ++++++
 arch/riscv/lib/uaccess.S                         | 117 ++++++
 arch/riscv/lib/udivdi3.S                         |  38 ++
 arch/riscv/mm/Makefile                           |   4 +
 arch/riscv/mm/extable.c                          |  37 ++
 arch/riscv/mm/fault.c                            | 282 +++++++++++++
 arch/riscv/mm/init.c                             |  70 ++++
 arch/riscv/mm/ioremap.c                          |  92 ++++
 include/lib/libgcc.h                             |  43 ++
 lib/Kconfig                                      |  18 +
 lib/Makefile                                     |   8 +
 lib/ashldi3.c                                    |  44 ++
 lib/ashrdi3.c                                    |  46 ++
 lib/cmpdi2.c                                     |  42 ++
 lib/lshrdi3.c                                    |  45 ++
 lib/muldi3.c                                     |  72 ++++
 lib/ucmpdi2.c                                    |  35 ++
 114 files changed, 10317 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/riscv/cpus.txt
 create mode 100644 arch/riscv/Kconfig
 create mode 100644 arch/riscv/Makefile
 create mode 100644 arch/riscv/configs/defconfig
 create mode 100644 arch/riscv/include/asm/Kbuild
 create mode 100644 arch/riscv/include/asm/asm-offsets.h
 create mode 100644 arch/riscv/include/asm/asm.h
 create mode 100644 arch/riscv/include/asm/atomic.h
 create mode 100644 arch/riscv/include/asm/barrier.h
 create mode 100644 arch/riscv/include/asm/bitops.h
 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/cacheflush.h
 create mode 100644 arch/riscv/include/asm/cmpxchg.h
 create mode 100644 arch/riscv/include/asm/compat.h
 create mode 100644 arch/riscv/include/asm/csr.h
 create mode 100644 arch/riscv/include/asm/current.h
 create mode 100644 arch/riscv/include/asm/delay.h
 create mode 100644 arch/riscv/include/asm/dma-mapping.h
 create mode 100644 arch/riscv/include/asm/elf.h
 create mode 100644 arch/riscv/include/asm/hwcap.h
 create mode 100644 arch/riscv/include/asm/io.h
 create mode 100644 arch/riscv/include/asm/irq.h
 create mode 100644 arch/riscv/include/asm/irqflags.h
 create mode 100644 arch/riscv/include/asm/kprobes.h
 create mode 100644 arch/riscv/include/asm/linkage.h
 create mode 100644 arch/riscv/include/asm/mmu.h
 create mode 100644 arch/riscv/include/asm/mmu_context.h
 create mode 100644 arch/riscv/include/asm/page.h
 create mode 100644 arch/riscv/include/asm/pci.h
 create mode 100644 arch/riscv/include/asm/pgalloc.h
 create mode 100644 arch/riscv/include/asm/pgtable-32.h
 create mode 100644 arch/riscv/include/asm/pgtable-64.h
 create mode 100644 arch/riscv/include/asm/pgtable-bits.h
 create mode 100644 arch/riscv/include/asm/pgtable.h
 create mode 100644 arch/riscv/include/asm/processor.h
 create mode 100644 arch/riscv/include/asm/ptrace.h
 create mode 100644 arch/riscv/include/asm/sbi.h
 create mode 100644 arch/riscv/include/asm/smp.h
 create mode 100644 arch/riscv/include/asm/spinlock.h
 create mode 100644 arch/riscv/include/asm/spinlock_types.h
 create mode 100644 arch/riscv/include/asm/string.h
 create mode 100644 arch/riscv/include/asm/switch_to.h
 create mode 100644 arch/riscv/include/asm/syscall.h
 create mode 100644 arch/riscv/include/asm/thread_info.h
 create mode 100644 arch/riscv/include/asm/timex.h
 create mode 100644 arch/riscv/include/asm/tlb.h
 create mode 100644 arch/riscv/include/asm/tlbflush.h
 create mode 100644 arch/riscv/include/asm/uaccess.h
 create mode 100644 arch/riscv/include/asm/unistd.h
 create mode 100644 arch/riscv/include/asm/vdso.h
 create mode 100644 arch/riscv/include/asm/word-at-a-time.h
 create mode 100644 arch/riscv/include/uapi/asm/Kbuild
 create mode 100644 arch/riscv/include/uapi/asm/auxvec.h
 create mode 100644 arch/riscv/include/uapi/asm/bitsperlong.h
 create mode 100644 arch/riscv/include/uapi/asm/byteorder.h
 create mode 100644 arch/riscv/include/uapi/asm/elf.h
 create mode 100644 arch/riscv/include/uapi/asm/hwcap.h
 create mode 100644 arch/riscv/include/uapi/asm/ptrace.h
 create mode 100644 arch/riscv/include/uapi/asm/sigcontext.h
 create mode 100644 arch/riscv/include/uapi/asm/siginfo.h
 create mode 100644 arch/riscv/include/uapi/asm/ucontext.h
 create mode 100644 arch/riscv/kernel/.gitignore
 create mode 100644 arch/riscv/kernel/Makefile
 create mode 100644 arch/riscv/kernel/asm-offsets.c
 create mode 100644 arch/riscv/kernel/cacheinfo.c
 create mode 100644 arch/riscv/kernel/cpu.c
 create mode 100644 arch/riscv/kernel/cpufeature.c
 create mode 100644 arch/riscv/kernel/entry.S
 create mode 100644 arch/riscv/kernel/head.S
 create mode 100644 arch/riscv/kernel/irq.c
 create mode 100644 arch/riscv/kernel/module.c
 create mode 100644 arch/riscv/kernel/process.c
 create mode 100644 arch/riscv/kernel/ptrace.c
 create mode 100644 arch/riscv/kernel/reset.c
 create mode 100644 arch/riscv/kernel/riscv_ksyms.c
 create mode 100644 arch/riscv/kernel/setup.c
 create mode 100644 arch/riscv/kernel/signal.c
 create mode 100644 arch/riscv/kernel/smp.c
 create mode 100644 arch/riscv/kernel/smpboot.c
 create mode 100644 arch/riscv/kernel/stacktrace.c
 create mode 100644 arch/riscv/kernel/sys_riscv.c
 create mode 100644 arch/riscv/kernel/syscall_table.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/kernel/vdso/.gitignore
 create mode 100644 arch/riscv/kernel/vdso/Makefile
 create mode 100644 arch/riscv/kernel/vdso/rt_sigreturn.S
 create mode 100644 arch/riscv/kernel/vdso/vdso.S
 create mode 100644 arch/riscv/kernel/vdso/vdso.lds.S
 create mode 100644 arch/riscv/kernel/vmlinux.lds.S
 create mode 100644 arch/riscv/lib/Makefile
 create mode 100644 arch/riscv/lib/delay.c
 create mode 100644 arch/riscv/lib/memcpy.S
 create mode 100644 arch/riscv/lib/memset.S
 create mode 100644 arch/riscv/lib/uaccess.S
 create mode 100644 arch/riscv/lib/udivdi3.S
 create mode 100644 arch/riscv/mm/Makefile
 create mode 100644 arch/riscv/mm/extable.c
 create mode 100644 arch/riscv/mm/fault.c
 create mode 100644 arch/riscv/mm/init.c
 create mode 100644 arch/riscv/mm/ioremap.c
 create mode 100644 include/lib/libgcc.h
 create mode 100644 lib/ashldi3.c
 create mode 100644 lib/ashrdi3.c
 create mode 100644 lib/cmpdi2.c
 create mode 100644 lib/lshrdi3.c
 create mode 100644 lib/muldi3.c
 create mode 100644 lib/ucmpdi2.c