Commit f183d269 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'csky-for-linus-5.7-rc1' of git://github.com/c-sky/csky-linux

Pull csky updates from Guo Ren:

 - Add kproobes/uprobes support

 - Add lockdep, rseq, gcov support

 - Fixup init_fpu

 - Fixup ftrace_modify deadlock

 - Fixup speculative execution on IO area

* tag 'csky-for-linus-5.7-rc1' of git://github.com/c-sky/csky-linux:
  csky: Fixup cpu speculative execution to IO area
  csky: Add uprobes support
  csky: Add kprobes supported
  csky: Enable LOCKDEP_SUPPORT
  csky: Enable the gcov function
  csky: Fixup get wrong psr value from phyical reg
  csky/ftrace: Fixup ftrace_modify_code deadlock without CPU_HAS_ICACHE_INS
  csky: Implement ftrace with regs
  csky: Add support for restartable sequence
  csky: Implement ptrace regs and stack API
  csky: Fixup init_fpu compile warning with __init
parents b6ff1070 aefd9461
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ config CSKY
	def_bool y
	select ARCH_32BIT_OFF_T
	select ARCH_HAS_DMA_PREP_COHERENT
	select ARCH_HAS_GCOV_PROFILE_ALL
	select ARCH_HAS_SYNC_DMA_FOR_CPU
	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
	select ARCH_USE_BUILTIN_BSWAP
@@ -38,16 +39,22 @@ config CSKY
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_COPY_THREAD_TLS
	select HAVE_DYNAMIC_FTRACE
	select HAVE_DYNAMIC_FTRACE_WITH_REGS
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_LZO
	select HAVE_KERNEL_LZMA
	select HAVE_KPROBES if !CPU_CK610
	select HAVE_KPROBES_ON_FTRACE if !CPU_CK610
	select HAVE_KRETPROBES if !CPU_CK610
	select HAVE_PERF_EVENTS
	select HAVE_PERF_REGS
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_DMA_CONTIGUOUS
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_RSEQ
	select HAVE_STACKPROTECTOR
	select HAVE_SYSCALL_TRACEPOINTS
	select MAY_HAVE_SPARSE_IRQ
@@ -65,6 +72,12 @@ config CSKY
	select PCI_SYSCALL if PCI
	select PCI_MSI if PCI

config LOCKDEP_SUPPORT
	def_bool y

config ARCH_SUPPORTS_UPROBES
	def_bool y if !CPU_CK610

config CPU_HAS_CACHEV2
	bool

+1 −4
Original line number Diff line number Diff line
@@ -172,10 +172,7 @@
	addi	r6, 0xe
	cpwcr	r6, cpcr30

	lsri	r6, 28
	addi	r6, 2
	lsli	r6, 28
	addi	r6, 0xe
	movi	r6, 0
	cpwcr	r6, cpcr31
.endm

+0 −5
Original line number Diff line number Diff line
@@ -10,11 +10,6 @@
#define MTCR_DIST	0xC0006420
#define MFCR_DIST	0xC0006020

void __init init_fpu(void)
{
	mtcr("cr<1, 2>", 0);
}

/*
 * fpu_libc_helper() is to help libc to excute:
 *  - mfcr %a, cr<1, 2>
+62 −5
Original line number Diff line number Diff line
@@ -100,6 +100,66 @@
	rte
.endm

.macro SAVE_REGS_FTRACE
	subi    sp, 152
	stw	tls, (sp, 0)
	stw	lr, (sp, 4)

	mfcr	lr, psr
	stw	lr, (sp, 12)

	addi    lr, sp, 152
	stw	lr, (sp, 16)

	stw     a0, (sp, 20)
	stw     a0, (sp, 24)
	stw     a1, (sp, 28)
	stw     a2, (sp, 32)
	stw     a3, (sp, 36)

	addi	sp, 40
	stm	r4-r13, (sp)

	addi    sp, 40
	stm     r16-r30, (sp)
#ifdef CONFIG_CPU_HAS_HILO
	mfhi	lr
	stw	lr, (sp, 60)
	mflo	lr
	stw	lr, (sp, 64)
	mfcr	lr, cr14
	stw	lr, (sp, 68)
#endif
	subi	sp, 80
.endm

.macro	RESTORE_REGS_FTRACE
	ldw	tls, (sp, 0)
	ldw	a0, (sp, 16)
	mtcr	a0, ss0

#ifdef CONFIG_CPU_HAS_HILO
	ldw	a0, (sp, 140)
	mthi	a0
	ldw	a0, (sp, 144)
	mtlo	a0
	ldw	a0, (sp, 148)
	mtcr	a0, cr14
#endif

	ldw     a0, (sp, 24)
	ldw     a1, (sp, 28)
	ldw     a2, (sp, 32)
	ldw     a3, (sp, 36)

	addi	sp, 40
	ldm	r4-r13, (sp)
	addi    sp, 40
	ldm     r16-r30, (sp)
	addi    sp, 72
	mfcr	sp, ss0
.endm

.macro SAVE_SWITCH_STACK
	subi    sp, 64
	stm	r4-r11, (sp)
@@ -230,11 +290,8 @@
	addi	r6, 0x1ce
	mtcr	r6, cr<30, 15> /* Set MSA0 */

	lsri	r6, 28
	addi	r6, 2
	lsli	r6, 28
	addi	r6, 0x1ce
	mtcr	r6, cr<31, 15> /* Set MSA1 */
	movi    r6, 0
	mtcr	r6, cr<31, 15> /* Clr MSA1 */

	/* enable MMU */
	mfcr    r6, cr18
+2 −1
Original line number Diff line number Diff line
@@ -9,7 +9,8 @@

int fpu_libc_helper(struct pt_regs *regs);
void fpu_fpe(struct pt_regs *regs);
void __init init_fpu(void);

static inline void init_fpu(void) { mtcr("cr<1, 2>", 0); }

void save_to_user_fp(struct user_fp *user_fp);
void restore_from_user_fp(struct user_fp *user_fp);
Loading