05 Oct, 2020

1 commit


10 Apr, 2020

1 commit

  • Pull RISC-V updates from Palmer Dabbelt:
    "This contains a handful of new features:

    - Partial support for the Kendryte K210.

    There are still a few outstanding issues that I have patches for,
    but I don't actually have a board to test them so they're not
    included yet.

    - SBI v0.2 support.

    - Fixes to support for building with LLVM-based toolchains. The
    resulting images are known not to boot yet.

    I don't anticipate a part two, but I'll probably have something early
    in the RCs to finish up the K210 support"

    * tag 'riscv-for-linus-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: (38 commits)
    riscv: create a loader.bin boot image for Kendryte SoC
    riscv: Kendryte K210 default config
    riscv: Add Kendryte K210 device tree
    riscv: Select required drivers for Kendryte SOC
    riscv: Add Kendryte K210 SoC support
    riscv: Add SOC early init support
    riscv: Unaligned load/store handling for M_MODE
    RISC-V: Support cpu hotplug
    RISC-V: Add supported for ordered booting method using HSM
    RISC-V: Add SBI HSM extension definitions
    RISC-V: Export SBI error to linux error mapping function
    RISC-V: Add cpu_ops and modify default booting method
    RISC-V: Move relocate and few other functions out of __init
    RISC-V: Implement new SBI v0.2 extensions
    RISC-V: Introduce a new config for SBI v0.1
    RISC-V: Add SBI v0.2 extension definitions
    RISC-V: Add basic support for SBI v0.2
    RISC-V: Mark existing SBI as 0.1 SBI.
    riscv: Use macro definition instead of magic number
    riscv: Add support to dump the kernel page tables
    ...

    Linus Torvalds
     

19 Mar, 2020

1 commit

  • It might have the unaligned access exception when trying to exchange data
    with user space program. In this case, it failed in tty_ioctl(). Therefore
    we should enable uaccess.S for NOMMU mode since the generic code doesn't
    handle the unaligned access cases.

    0x8013a212 : ld a5,460(s1)

    [ 0.115279] Oops - load address misaligned [#1]
    [ 0.115284] CPU: 0 PID: 29 Comm: sh Not tainted 5.4.0-rc5-00020-gb4c27160d562-dirty #36
    [ 0.115294] epc: 000000008013a212 ra : 000000008013a212 sp : 000000008f48dd50
    [ 0.115303] gp : 00000000801cac28 tp : 000000008fb80000 t0 : 00000000000000e8
    [ 0.115312] t1 : 000000008f58f108 t2 : 0000000000000009 s0 : 000000008f48ddf0
    [ 0.115321] s1 : 000000008f8c6220 a0 : 0000000000000001 a1 : 000000008f48dd28
    [ 0.115330] a2 : 000000008fb80000 a3 : 00000000801a7398 a4 : 0000000000000000
    [ 0.115339] a5 : 0000000000000000 a6 : 000000008f58f0c6 a7 : 000000000000001d
    [ 0.115348] s2 : 000000008f8c6308 s3 : 000000008f78b7c8 s4 : 000000008fb834c0
    [ 0.115357] s5 : 0000000000005413 s6 : 0000000000000000 s7 : 000000008f58f2b0
    [ 0.115366] s8 : 000000008f858008 s9 : 000000008f776818 s10: 000000008f776830
    [ 0.115375] s11: 000000008fb840a8 t3 : 1999999999999999 t4 : 000000008f78704c
    [ 0.115384] t5 : 0000000000000005 t6 : 0000000000000002
    [ 0.115391] status: 0000000200001880 badaddr: 000000008f8c63ec cause: 0000000000000004
    [ 0.115401] ---[ end trace 00d490c6a8b6c9ac ]---

    This failure could be fixed after this patch applied.

    [ 0.002282] Run /init as init process
    Initializing random number generator... [ 0.005573] random: dd: uninitialized urandom read (512 bytes read)
    done.

    Welcome to Buildroot
    buildroot login: root
    Password:
    Jan 1 00:00:00 login[62]: root login on 'ttySIF0'
    ~ #

    Signed-off-by: Greentime Hu
    Reviewed-by: Palmer Dabbelt
    Signed-off-by: Palmer Dabbelt

    Greentime Hu
     

04 Mar, 2020

1 commit

  • LLVM's integrated assembler doesn't support the LOCAL directive, which we're
    using when generating our uaccess fixup tables. Luckily the table fragment is
    small enough that there's only one internal symbol, so using a relative symbol
    reference doesn't really complicate anything.

    Signed-off-by: Palmer Dabbelt

    Palmer Dabbelt
     

23 Jan, 2020

1 commit

  • This patch ports the feature Kernel Address SANitizer (KASAN).

    Note: The start address of shadow memory is at the beginning of kernel
    space, which is 2^64 - (2^39 / 2) in SV39. The size of the kernel space is
    2^38 bytes so the size of shadow memory should be 2^38 / 8. Thus, the
    shadow memory would not overlap with the fixmap area.

    There are currently two limitations in this port,

    1. RV64 only: KASAN need large address space for extra shadow memory
    region.

    2. KASAN can't debug the modules since the modules are allocated in VMALLOC
    area. We mapped the shadow memory, which corresponding to VMALLOC area, to
    the kasan_early_shadow_page because we don't have enough physical space for
    all the shadow memory corresponding to VMALLOC area.

    Signed-off-by: Nick Hu
    Reported-by: Greentime Hu
    Signed-off-by: Palmer Dabbelt

    Nick Hu
     

19 Jan, 2020

1 commit

  • The existing __lshrti3 was really inefficient, and the other two helpers
    are also needed to compile some modules.

    Add the missing versions, and export all of the symbols like arm64
    already does.

    This code is based on the assembly generated by libgcc builds.

    This fixes a build break triggered by ubsan:

    riscv64-unknown-linux-gnu-ld: lib/ubsan.o: in function `.L2':
    ubsan.c:(.text.unlikely+0x38): undefined reference to `__ashlti3'
    riscv64-unknown-linux-gnu-ld: ubsan.c:(.text.unlikely+0x42): undefined reference to `__ashrti3'

    Signed-off-by: Olof Johansson
    [paul.walmsley@sifive.com: use SYM_FUNC_{START,END} instead of
    ENTRY/ENDPROC; note libgcc origin]
    Signed-off-by: Paul Walmsley

    Olof Johansson
     

28 Dec, 2019

1 commit

  • When support for !MMU was added, the declaration of
    __asm_copy_to_user() & __asm_copy_from_user() were #ifdefed
    out hence their EXPORT_SYMBOL() give an error message like:
    .../riscv_ksyms.c:13:15: error: '__asm_copy_to_user' undeclared here
    .../riscv_ksyms.c:14:15: error: '__asm_copy_from_user' undeclared here

    Since these symbols are not defined with !MMU it's wrong to export them.
    Same for __clear_user() (even though this one is also declared in
    include/asm-generic/uaccess.h and thus doesn't give an error message).

    Fix this by doing the EXPORT_SYMBOL() directly where these symbols
    are defined: inside lib/uaccess.S itself.

    Fixes: 6bd33e1ece52 ("riscv: fix compile failure with EXPORT_SYMBOL() & !MMU")
    Reported-by: kbuild test robot
    Cc: Christoph Hellwig
    Cc: Palmer Dabbelt
    Cc: Paul Walmsley
    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Paul Walmsley

    Luc Van Oostenryck
     

18 Nov, 2019

1 commit

  • The kernel runs in M-mode without using page tables, and thus can't run
    bare metal without help from additional firmware.

    Most of the patch is just stubbing out code not needed without page
    tables, but there is an interesting detail in the signals implementation:

    - The normal RISC-V syscall ABI only implements rt_sigreturn as VDSO
    entry point, but the ELF VDSO is not supported for nommu Linux.
    We instead copy the code to call the syscall onto the stack.

    In addition to enabling the nommu code a new defconfig for a small
    kernel image that can run in nommu mode on qemu is also provided, to run
    a kernel in qemu you can use the following command line:

    qemu-system-riscv64 -smp 2 -m 64 -machine virt -nographic \
    -kernel arch/riscv/boot/loader \
    -drive file=rootfs.ext2,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0

    Contains contributions from Damien Le Moal .

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Anup Patel
    [paul.walmsley@sifive.com: updated to apply; add CONFIG_MMU guards
    around PCI_IOBASE definition to fix build issues; fixed checkpatch
    issues; move the PCI_IO_* and VMEMMAP address space macros along
    with the others; resolve sparse warning]
    Signed-off-by: Paul Walmsley

    Christoph Hellwig
     

06 Nov, 2019

1 commit

  • Many of the privileged CSRs exist in a supervisor and machine version
    that are used very similarly. Provide versions of the CSR names and
    fields that map to either the S-mode or M-mode variant depending on
    a new CONFIG_RISCV_M_MODE kconfig symbol.

    Contains contributions from Damien Le Moal
    and Paul Walmsley .

    Signed-off-by: Christoph Hellwig
    Acked-by: Thomas Gleixner # for drivers/clocksource, drivers/irqchip
    [paul.walmsley@sifive.com: updated to apply]
    Signed-off-by: Paul Walmsley

    Christoph Hellwig
     

31 Aug, 2019

1 commit

  • Since commit a3182c91ef4e ("RISC-V: Access CSRs using CSR numbers"),
    we should prefer accessing CSRs using their CSR numbers, but there
    are several leftovers like sstatus / sptbr we missed.

    Signed-off-by: Bin Meng
    Reviewed-by: Anup Patel
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Paul Walmsley

    Bin Meng
     

09 Aug, 2019

2 commits

  • This should never have landed in the first place: it was added as part
    of 64-bit divide support for 32-bit systems, but the kernel doesn't
    allow this sort of division. I must have forgotten to remove it.

    This patch removes the support. Since this routine only worked on
    64-bit platforms but was only built on 32-bit platforms, it's
    essentially just nonsense anyway.

    Signed-off-by: Palmer Dabbelt
    Acked-by: Nicolas Pitre
    Link: https://lore.kernel.org/linux-riscv/nycvar.YSQ.7.76.1908061413360.19480@knanqh.ubzr/T/#t
    Reported-by: Eric Lin
    Signed-off-by: Paul Walmsley

    Palmer Dabbelt
     
  • In preparation for removing __udivdi3() from the RISC-V
    architecture-specific files, convert its one user to use do_div().
    This avoids breaking the RV32 build after __udivdi3() is removed.

    This second version removes the assignment of the remainder to an
    unused temporary variable. Thanks to Nicolas Pitre
    for the suggestion.

    Signed-off-by: Paul Walmsley
    Cc: Nicolas Pitre

    Paul Walmsley
     

18 Jun, 2019

1 commit

  • Pull RISC-V fixes from Paul Walmsley:
    "This contains fixes, defconfig, and DT data changes for the v5.2-rc
    series.

    The fixes are relatively straightforward:

    - Addition of a TLB fence in the vmalloc_fault path, so the CPU
    doesn't enter an infinite page fault loop

    - Readdition of the pm_power_off export, so device drivers that
    reassign it can now be built as modules

    - A udelay() fix for RV32, fixing a miscomputation of the delay time

    - Removal of deprecated smp_mb__*() barriers

    This also adds initial DT data infrastructure for arch/riscv, along
    with initial data for the SiFive FU540-C000 SoC and the corresponding
    HiFive Unleashed board.

    We also update the RV64 defconfig to include some core drivers for the
    FU540 in the build"

    * tag 'riscv-for-v5.2/fixes-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
    riscv: remove unused barrier defines
    riscv: mm: synchronize MMU after pte change
    riscv: dts: add initial board data for the SiFive HiFive Unleashed
    riscv: dts: add initial support for the SiFive FU540-C000 SoC
    dt-bindings: riscv: convert cpu binding to json-schema
    dt-bindings: riscv: sifive: add YAML documentation for the SiFive FU540
    arch: riscv: add support for building DTB files from DT source data
    riscv: Fix udelay in RV32.
    riscv: export pm_power_off again
    RISC-V: defconfig: enable clocks, serial console

    Linus Torvalds
     

11 Jun, 2019

1 commit

  • In RV32, udelay would delay the wrong cycle. When it shifts right
    "UDELAY_SHIFT" bits, it either delays 0 cycle or 1 cycle. It only works
    correctly in RV64. Because the 'ucycles' always needs to be 64 bits
    variable.

    Signed-off-by: Nick Hu
    Reviewed-by: Palmer Dabbelt
    [paul.walmsley@sifive.com: fixed minor spelling error]
    Signed-off-by: Paul Walmsley

    Nick Hu
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    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

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 97 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Alexios Zavras
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190529141901.025053186@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

21 May, 2019

1 commit


22 Dec, 2018

1 commit


13 Nov, 2018

1 commit

  • Fixes the following build error from tinyconfig:

    riscv64-unknown-linux-gnu-ld: kernel/sched/fair.o: in function `.L8':
    fair.c:(.text+0x70): undefined reference to `__lshrti3'
    riscv64-unknown-linux-gnu-ld: kernel/time/clocksource.o: in function `.L0 ':
    clocksource.c:(.text+0x334): undefined reference to `__lshrti3'

    Fixes: 7f47c73b355f ("RISC-V: Build tishift only on 64-bit")
    Signed-off-by: Olof Johansson
    Signed-off-by: Palmer Dabbelt

    Olof Johansson
     

23 Oct, 2018

1 commit


13 Aug, 2018

1 commit


12 Jun, 2018

1 commit

  • This patch set contains a handful of fixes that clean up the sparse
    results for the RISC-V port. These patches shouldn't have any
    functional difference. The patches:

    * Use NULL instead of 0.
    * Clean up __user annotations.
    * Split __copy_user into two functions, to make the __user annotations
    valid.

    Signed-off-by: Palmer Dabbelt

    Palmer Dabbelt
     

10 Jun, 2018

1 commit

  • We use a single __copy_user assembly function to copy memory both from
    and to userspace. While this works, it triggers sparse errors because
    we're implicitly casting between the kernel and user address spaces by
    calling __copy_user.

    This patch splits the C declaration into a pair of functions,
    __asm_copy_{to,from}_user, that have sane semantics WRT __user. This
    split make things fine from sparse's point of view. The assembly
    implementation keeps a single definition but add a double ENTRY() for it,
    one for __asm_copy_to_user and another one for __asm_copy_from_user.
    The result is a spare-safe implementation that pays no performance
    or code size penalty.

    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Palmer Dabbelt

    Luc Van Oostenryck
     

05 Jun, 2018

1 commit

  • A piece of fixup code is currently shared by __copy_user and
    __clear_user. It first disables the access to user-space memory
    and then returns the "n" argument, which represents #(bytes not processed).
    However,__copy_user's "n" is in register a2, while __clear_user's in a1,
    and thus it causes errors for programs like setdomainname02 testcase in LTP.

    This patch fixes this issue by separating their fixup code and returning
    the right value for the kernel to handle a relative fault properly.

    Signed-off-by: Alan Kao
    Cc: Greentime Hu
    Cc: Zong Li
    Cc: Vincent Chen
    Signed-off-by: Palmer Dabbelt

    Alan Kao
     

01 Dec, 2017

1 commit


27 Sep, 2017

3 commits

  • This patch contains all the build infrastructure that actually enables
    the RISC-V port. This includes Makefiles, linker scripts, and Kconfig
    files. It also contains the only top-level change, which adds RISC-V to
    the list of architectures that need a sed run to produce the ARCH
    variable when building locally.

    Signed-off-by: Palmer Dabbelt

    Palmer Dabbelt
     
  • This patch contains code that interfaces with devices that are mandated
    by the RISC-V supervisor specification and that don't have explicit
    drivers anywhere else in the tree. This includes the staticly defined
    interrupts, the CSR-mapped timer, and virtualized SBI devices.

    Signed-off-by: Palmer Dabbelt

    Palmer Dabbelt
     
  • This patch contains code that is more specific to the RISC-V ISA than it
    is to Linux. It contains string and math operations, C wrappers for
    various assembly instructions, stack walking code, and uaccess.

    Signed-off-by: Palmer Dabbelt

    Palmer Dabbelt