Commit 1d2cc5ac authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'riscv-for-linus-5.7-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux

Pull RISC-V fixes from Palmer Dabbelt:
 "A handful of fixes.

  Specifically:

   - fix linker argument to allow linking with lld

   - build fix for configurations without a frame pointer

   - a handful of build fixes related the SBI 0.1 vs 0.2 split

   - remove STRICT_KERNEL_RWX for !MMU, which isn't useful"

* tag 'riscv-for-linus-5.7-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
  riscv: select ARCH_HAS_STRICT_KERNEL_RWX only if MMU
  riscv: sbi: Fix undefined reference to sbi_shutdown
  tty: riscv: Using RISCV_SBI_V01 instead of RISCV_SBI
  riscv: sbi: Correct sbi_shutdown() and sbi_clear_ipi() export
  riscv: fix vdso build with lld
  RISC-V: stacktrace: Declare sp_in_global outside ifdef
parents 6c3efdc9 a5fe13c7
...@@ -60,7 +60,7 @@ config RISCV ...@@ -60,7 +60,7 @@ config RISCV
select ARCH_HAS_GIGANTIC_PAGE select ARCH_HAS_GIGANTIC_PAGE
select ARCH_HAS_SET_DIRECT_MAP select ARCH_HAS_SET_DIRECT_MAP
select ARCH_HAS_SET_MEMORY select ARCH_HAS_SET_MEMORY
select ARCH_HAS_STRICT_KERNEL_RWX select ARCH_HAS_STRICT_KERNEL_RWX if MMU
select ARCH_WANT_HUGE_PMD_SHARE if 64BIT select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
select SPARSEMEM_STATIC if 32BIT select SPARSEMEM_STATIC if 32BIT
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
......
...@@ -102,7 +102,7 @@ void sbi_shutdown(void) ...@@ -102,7 +102,7 @@ void sbi_shutdown(void)
{ {
sbi_ecall(SBI_EXT_0_1_SHUTDOWN, 0, 0, 0, 0, 0, 0, 0); sbi_ecall(SBI_EXT_0_1_SHUTDOWN, 0, 0, 0, 0, 0, 0, 0);
} }
EXPORT_SYMBOL(sbi_set_timer); EXPORT_SYMBOL(sbi_shutdown);
/** /**
* sbi_clear_ipi() - Clear any pending IPIs for the calling hart. * sbi_clear_ipi() - Clear any pending IPIs for the calling hart.
...@@ -113,7 +113,7 @@ void sbi_clear_ipi(void) ...@@ -113,7 +113,7 @@ void sbi_clear_ipi(void)
{ {
sbi_ecall(SBI_EXT_0_1_CLEAR_IPI, 0, 0, 0, 0, 0, 0, 0); sbi_ecall(SBI_EXT_0_1_CLEAR_IPI, 0, 0, 0, 0, 0, 0, 0);
} }
EXPORT_SYMBOL(sbi_shutdown); EXPORT_SYMBOL(sbi_clear_ipi);
/** /**
* sbi_set_timer_v01() - Program the timer for next timer event. * sbi_set_timer_v01() - Program the timer for next timer event.
...@@ -167,6 +167,11 @@ static int __sbi_rfence_v01(int fid, const unsigned long *hart_mask, ...@@ -167,6 +167,11 @@ static int __sbi_rfence_v01(int fid, const unsigned long *hart_mask,
return result; return result;
} }
static void sbi_set_power_off(void)
{
pm_power_off = sbi_shutdown;
}
#else #else
static void __sbi_set_timer_v01(uint64_t stime_value) static void __sbi_set_timer_v01(uint64_t stime_value)
{ {
...@@ -191,6 +196,8 @@ static int __sbi_rfence_v01(int fid, const unsigned long *hart_mask, ...@@ -191,6 +196,8 @@ static int __sbi_rfence_v01(int fid, const unsigned long *hart_mask,
return 0; return 0;
} }
static void sbi_set_power_off(void) {}
#endif /* CONFIG_RISCV_SBI_V01 */ #endif /* CONFIG_RISCV_SBI_V01 */
static void __sbi_set_timer_v02(uint64_t stime_value) static void __sbi_set_timer_v02(uint64_t stime_value)
...@@ -540,16 +547,12 @@ static inline long sbi_get_firmware_version(void) ...@@ -540,16 +547,12 @@ static inline long sbi_get_firmware_version(void)
return __sbi_base_ecall(SBI_EXT_BASE_GET_IMP_VERSION); return __sbi_base_ecall(SBI_EXT_BASE_GET_IMP_VERSION);
} }
static void sbi_power_off(void)
{
sbi_shutdown();
}
int __init sbi_init(void) int __init sbi_init(void)
{ {
int ret; int ret;
pm_power_off = sbi_power_off; sbi_set_power_off();
ret = sbi_get_spec_version(); ret = sbi_get_spec_version();
if (ret > 0) if (ret > 0)
sbi_spec_version = ret; sbi_spec_version = ret;
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include <linux/stacktrace.h> #include <linux/stacktrace.h>
#include <linux/ftrace.h> #include <linux/ftrace.h>
register unsigned long sp_in_global __asm__("sp");
#ifdef CONFIG_FRAME_POINTER #ifdef CONFIG_FRAME_POINTER
struct stackframe { struct stackframe {
...@@ -19,8 +21,6 @@ struct stackframe { ...@@ -19,8 +21,6 @@ struct stackframe {
unsigned long ra; unsigned long ra;
}; };
register unsigned long sp_in_global __asm__("sp");
void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs, void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
bool (*fn)(unsigned long, void *), void *arg) bool (*fn)(unsigned long, void *), void *arg)
{ {
......
...@@ -33,15 +33,15 @@ $(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE ...@@ -33,15 +33,15 @@ $(obj)/vdso.so.dbg: $(src)/vdso.lds $(obj-vdso) FORCE
$(call if_changed,vdsold) $(call if_changed,vdsold)
# We also create a special relocatable object that should mirror the symbol # We also create a special relocatable object that should mirror the symbol
# table and layout of the linked DSO. With ld -R we can then refer to # table and layout of the linked DSO. With ld --just-symbols we can then
# these symbols in the kernel code rather than hand-coded addresses. # refer to these symbols in the kernel code rather than hand-coded addresses.
SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \ SYSCFLAGS_vdso.so.dbg = -shared -s -Wl,-soname=linux-vdso.so.1 \
-Wl,--build-id -Wl,--hash-style=both -Wl,--build-id -Wl,--hash-style=both
$(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/rt_sigreturn.o FORCE $(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/rt_sigreturn.o FORCE
$(call if_changed,vdsold) $(call if_changed,vdsold)
LDFLAGS_vdso-syms.o := -r -R LDFLAGS_vdso-syms.o := -r --just-symbols
$(obj)/vdso-syms.o: $(obj)/vdso-dummy.o FORCE $(obj)/vdso-syms.o: $(obj)/vdso-dummy.o FORCE
$(call if_changed,ld) $(call if_changed,ld)
......
...@@ -88,7 +88,7 @@ config HVC_DCC ...@@ -88,7 +88,7 @@ config HVC_DCC
config HVC_RISCV_SBI config HVC_RISCV_SBI
bool "RISC-V SBI console support" bool "RISC-V SBI console support"
depends on RISCV_SBI depends on RISCV_SBI_V01
select HVC_DRIVER select HVC_DRIVER
help help
This enables support for console output via RISC-V SBI calls, which This enables support for console output via RISC-V SBI calls, which
......
...@@ -86,7 +86,7 @@ config SERIAL_EARLYCON_ARM_SEMIHOST ...@@ -86,7 +86,7 @@ config SERIAL_EARLYCON_ARM_SEMIHOST
config SERIAL_EARLYCON_RISCV_SBI config SERIAL_EARLYCON_RISCV_SBI
bool "Early console using RISC-V SBI" bool "Early console using RISC-V SBI"
depends on RISCV_SBI depends on RISCV_SBI_V01
select SERIAL_CORE select SERIAL_CORE
select SERIAL_CORE_CONSOLE select SERIAL_CORE_CONSOLE
select SERIAL_EARLYCON select SERIAL_EARLYCON
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment