diff options
Diffstat (limited to 'arch/arc/kernel')
| -rw-r--r-- | arch/arc/kernel/entry.S | 16 | ||||
| -rw-r--r-- | arch/arc/kernel/head.S | 8 | ||||
| -rw-r--r-- | arch/arc/kernel/setup.c | 19 | 
3 files changed, 20 insertions, 23 deletions
| diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S index 60406ec62eb8..ea00c8a17f07 100644 --- a/arch/arc/kernel/entry.S +++ b/arch/arc/kernel/entry.S @@ -165,7 +165,6 @@ END(EV_Extension)  tracesys:  	; save EFA in case tracer wants the PC of traced task  	; using ERET won't work since next-PC has already committed -	lr  r12, [efa]  	GET_CURR_TASK_FIELD_PTR   TASK_THREAD, r11  	st  r12, [r11, THREAD_FAULT_ADDR]	; thread.fault_address @@ -208,15 +207,9 @@ tracesys_exit:  ; Breakpoint TRAP  ; ---------------------------------------------  trap_with_param: - -	; stop_pc info by gdb needs this info -	lr  r0, [efa] +	mov r0, r12	; EFA in case ptracer/gdb wants stop_pc  	mov r1, sp -	; Now that we have read EFA, it is safe to do "fake" rtie -	;   and get out of CPU exception mode -	FAKE_RET_FROM_EXCPN -  	; Save callee regs in case gdb wants to have a look  	; SP will grow up by size of CALLEE Reg-File  	; NOTE: clobbers r12 @@ -243,6 +236,10 @@ ENTRY(EV_Trap)  	EXCEPTION_PROLOGUE +	lr  r12, [efa] + +	FAKE_RET_FROM_EXCPN +  	;============ TRAP 1   :breakpoints  	; Check ECR for trap with arg (PROLOGUE ensures r10 has ECR)  	bmsk.f 0, r10, 7 @@ -250,9 +247,6 @@ ENTRY(EV_Trap)  	;============ TRAP  (no param): syscall top level -	; First return from Exception to pure K mode (Exception/IRQs renabled) -	FAKE_RET_FROM_EXCPN -  	; If syscall tracing ongoing, invoke pre-post-hooks  	GET_CURR_THR_INFO_FLAGS   r10  	btst r10, TIF_SYSCALL_TRACE diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S index 6eb23f1545ee..17fd1ed700cc 100644 --- a/arch/arc/kernel/head.S +++ b/arch/arc/kernel/head.S @@ -59,6 +59,14 @@  	bclr	r5, r5, STATUS_AD_BIT  #endif  	kflag	r5 + +#ifdef CONFIG_ARC_LPB_DISABLE +	lr	r5, [ARC_REG_LPB_BUILD] +	breq    r5, 0, 1f		; LPB doesn't exist +	mov	r5, 1 +	sr	r5, [ARC_REG_LPB_CTRL] +1: +#endif /* CONFIG_ARC_LPB_DISABLE */  #endif  	; Config DSP_CTRL properly, so kernel may use integer multiply,  	; multiply-accumulate, and divide operations diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c index dad8a656a2f1..41f07b3e594e 100644 --- a/arch/arc/kernel/setup.c +++ b/arch/arc/kernel/setup.c @@ -58,10 +58,12 @@ static const struct id_to_str arc_legacy_rel[] = {  	{ 0x00,		NULL   }  }; -static const struct id_to_str arc_cpu_rel[] = { +static const struct id_to_str arc_hs_ver54_rel[] = {  	/* UARCH.MAJOR,	Release */  	{  0,		"R3.10a"},  	{  1,		"R3.50a"}, +	{  2,		"R3.60a"}, +	{  3,		"R4.00a"},  	{  0xFF,	NULL   }  }; @@ -117,12 +119,6 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)  	struct bcr_uarch_build_arcv2 uarch;  	const struct id_to_str *tbl; -	/* -	 * Up until (including) the first core4 release (0x54) things were -	 * simple: AUX IDENTITY.ARCVER was sufficient to identify arc family -	 * and release: 0x50 to 0x53 was HS38, 0x54 was HS48 (dual issue) -	 */ -  	if (cpu->core.family < 0x54) { /* includes arc700 */  		for (tbl = &arc_legacy_rel[0]; tbl->id != 0; tbl++) { @@ -143,11 +139,10 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)  	}  	/* -	 * However the subsequent HS release (same 0x54) allow HS38 or HS48 -	 * configurations and encode this info in a different BCR. -	 * The BCR was introduced in 0x54 so can't be read unconditionally. +	 * Initial HS cores bumped AUX IDENTITY.ARCVER for each release until +	 * ARCVER 0x54 which introduced AUX MICRO_ARCH_BUILD and subsequent +	 * releases only update it.  	 */ -  	READ_BCR(ARC_REG_MICRO_ARCH_BCR, uarch);  	if (uarch.prod == 4) { @@ -158,7 +153,7 @@ static void decode_arc_core(struct cpuinfo_arc *cpu)  		cpu->name = "HS38";  	} -	for (tbl = &arc_cpu_rel[0]; tbl->id != 0xFF; tbl++) { +	for (tbl = &arc_hs_ver54_rel[0]; tbl->id != 0xFF; tbl++) {  		if (uarch.maj == tbl->id) {  			cpu->release = tbl->str;  			break; |