Commit 3573d386 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arc-v3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC changes from Vineet Gupta:
 - Support for external initrd from Noam
 - Fix broken serial console in nsimosci Virtual Platform
 - Reuse of ENTRY/END assembler macros across hand asm code
 - Other minor fixes here and there

* tag 'arc-v3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
  ARC: [nsimosci] Unbork console
  ARC: [nsimosci] Change .dts to use generic 8250 UART
  ARC: [SMP] General Fixes
  ARC: Remove unused DT template file
  ARC: [clockevent] simplify timer ISR
  ARC: [clockevent] can't be SoC specific
  ARC: Remove ARC_HAS_COH_RTSC
  ARC: switch to generic ENTRY/END assembler annotations
  ARC: support external initrd
  ARC: add uImage to .gitignore
  ARC: [arcfpga] Fix __initconst data const-correctness
parents c8d9762a 61fb4bfc
...@@ -11,13 +11,16 @@ ...@@ -11,13 +11,16 @@
/ { / {
compatible = "snps,nsimosci"; compatible = "snps,nsimosci";
clock-frequency = <80000000>; /* 80 MHZ */ clock-frequency = <20000000>; /* 20 MHZ */
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
chosen { chosen {
bootargs = "console=tty0 consoleblank=0"; /* this is for console on PGU */
/* bootargs = "console=tty0 consoleblank=0"; */
/* this is for console on serial */
bootargs = "earlycon=uart8250,mmio32,0xc0000000,115200n8 console=ttyS0,115200n8 consoleblank=0 debug";
}; };
aliases { aliases {
...@@ -44,15 +47,14 @@ intc: interrupt-controller { ...@@ -44,15 +47,14 @@ intc: interrupt-controller {
}; };
uart0: serial@c0000000 { uart0: serial@c0000000 {
compatible = "snps,dw-apb-uart"; compatible = "ns8250";
reg = <0xc0000000 0x2000>; reg = <0xc0000000 0x2000>;
interrupts = <11>; interrupts = <11>;
#clock-frequency = <80000000>;
clock-frequency = <3686400>; clock-frequency = <3686400>;
baud = <115200>; baud = <115200>;
reg-shift = <2>; reg-shift = <2>;
reg-io-width = <4>; reg-io-width = <4>;
status = "okay"; no-loopback-test = <1>;
}; };
pgu0: pgu@c9000000 { pgu0: pgu@c9000000 {
......
/*
* Copyright (C) 2012 Synopsys, Inc. (www.synopsys.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
/include/ "skeleton.dtsi"
...@@ -54,6 +54,7 @@ CONFIG_SERIO_ARC_PS2=y ...@@ -54,6 +54,7 @@ CONFIG_SERIO_ARC_PS2=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DW=y CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_ARC=y CONFIG_SERIAL_ARC=y
CONFIG_SERIAL_ARC_CONSOLE=y CONFIG_SERIAL_ARC_CONSOLE=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
......
...@@ -13,20 +13,6 @@ ...@@ -13,20 +13,6 @@
#define ASM_NL ` /* use '`' to mark new line in macro */ #define ASM_NL ` /* use '`' to mark new line in macro */
/* Can't use the ENTRY macro in linux/linkage.h
* gas considers ';' as comment vs. newline
*/
.macro ARC_ENTRY name
.global \name
.align 4
\name:
.endm
.macro ARC_EXIT name
#define ASM_PREV_SYM_ADDR(name) .-##name
.size \ name, ASM_PREV_SYM_ADDR(\name)
.endm
/* annotation for data we want in DCCM - if enabled in .config */ /* annotation for data we want in DCCM - if enabled in .config */
.macro ARCFP_DATA nm .macro ARCFP_DATA nm
#ifdef CONFIG_ARC_HAS_DCCM #ifdef CONFIG_ARC_HAS_DCCM
......
...@@ -62,4 +62,4 @@ __switch_to: ...@@ -62,4 +62,4 @@ __switch_to:
ld.ab blink, [sp, 4] ld.ab blink, [sp, 4]
j [blink] j [blink]
ARC_EXIT __switch_to END(__switch_to)
...@@ -141,7 +141,7 @@ VECTOR EV_Extension ; 0x130, Extn Intruction Excp (0x26) ...@@ -141,7 +141,7 @@ VECTOR EV_Extension ; 0x130, Extn Intruction Excp (0x26)
VECTOR reserved ; Reserved Exceptions VECTOR reserved ; Reserved Exceptions
.endr .endr
#include <linux/linkage.h> /* ARC_{EXTRY,EXIT} */ #include <linux/linkage.h> /* {EXTRY,EXIT} */
#include <asm/entry.h> /* SAVE_ALL_{INT1,INT2,SYS...} */ #include <asm/entry.h> /* SAVE_ALL_{INT1,INT2,SYS...} */
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/arcregs.h> #include <asm/arcregs.h>
...@@ -184,7 +184,7 @@ reserved: ; processor restart ...@@ -184,7 +184,7 @@ reserved: ; processor restart
; --------------------------------------------- ; ---------------------------------------------
; Level 2 ISR: Can interrupt a Level 1 ISR ; Level 2 ISR: Can interrupt a Level 1 ISR
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY handle_interrupt_level2 ENTRY(handle_interrupt_level2)
; TODO-vineetg for SMP this wont work ; TODO-vineetg for SMP this wont work
; free up r9 as scratchpad ; free up r9 as scratchpad
...@@ -225,14 +225,14 @@ ARC_ENTRY handle_interrupt_level2 ...@@ -225,14 +225,14 @@ ARC_ENTRY handle_interrupt_level2
b ret_from_exception b ret_from_exception
ARC_EXIT handle_interrupt_level2 END(handle_interrupt_level2)
#endif #endif
; --------------------------------------------- ; ---------------------------------------------
; Level 1 ISR ; Level 1 ISR
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY handle_interrupt_level1 ENTRY(handle_interrupt_level1)
/* free up r9 as scratchpad */ /* free up r9 as scratchpad */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
...@@ -265,7 +265,7 @@ ARC_ENTRY handle_interrupt_level1 ...@@ -265,7 +265,7 @@ ARC_ENTRY handle_interrupt_level1
sr r8, [AUX_IRQ_LV12] ; clear bit in Sticky Status Reg sr r8, [AUX_IRQ_LV12] ; clear bit in Sticky Status Reg
b ret_from_exception b ret_from_exception
ARC_EXIT handle_interrupt_level1 END(handle_interrupt_level1)
;################### Non TLB Exception Handling ############################# ;################### Non TLB Exception Handling #############################
...@@ -273,7 +273,7 @@ ARC_EXIT handle_interrupt_level1 ...@@ -273,7 +273,7 @@ ARC_EXIT handle_interrupt_level1
; Instruction Error Exception Handler ; Instruction Error Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY instr_service ENTRY(instr_service)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -284,13 +284,13 @@ ARC_ENTRY instr_service ...@@ -284,13 +284,13 @@ ARC_ENTRY instr_service
bl do_insterror_or_kprobe bl do_insterror_or_kprobe
b ret_from_exception b ret_from_exception
ARC_EXIT instr_service END(instr_service)
; --------------------------------------------- ; ---------------------------------------------
; Memory Error Exception Handler ; Memory Error Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY mem_service ENTRY(mem_service)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -301,13 +301,13 @@ ARC_ENTRY mem_service ...@@ -301,13 +301,13 @@ ARC_ENTRY mem_service
bl do_memory_error bl do_memory_error
b ret_from_exception b ret_from_exception
ARC_EXIT mem_service END(mem_service)
; --------------------------------------------- ; ---------------------------------------------
; Machine Check Exception Handler ; Machine Check Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY EV_MachineCheck ENTRY(EV_MachineCheck)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -331,13 +331,13 @@ ARC_ENTRY EV_MachineCheck ...@@ -331,13 +331,13 @@ ARC_ENTRY EV_MachineCheck
j do_machine_check_fault j do_machine_check_fault
ARC_EXIT EV_MachineCheck END(EV_MachineCheck)
; --------------------------------------------- ; ---------------------------------------------
; Protection Violation Exception Handler ; Protection Violation Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY EV_TLBProtV ENTRY(EV_TLBProtV)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -385,12 +385,12 @@ ARC_ENTRY EV_TLBProtV ...@@ -385,12 +385,12 @@ ARC_ENTRY EV_TLBProtV
b ret_from_exception b ret_from_exception
ARC_EXIT EV_TLBProtV END(EV_TLBProtV)
; --------------------------------------------- ; ---------------------------------------------
; Privilege Violation Exception Handler ; Privilege Violation Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY EV_PrivilegeV ENTRY(EV_PrivilegeV)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -401,12 +401,12 @@ ARC_ENTRY EV_PrivilegeV ...@@ -401,12 +401,12 @@ ARC_ENTRY EV_PrivilegeV
bl do_privilege_fault bl do_privilege_fault
b ret_from_exception b ret_from_exception
ARC_EXIT EV_PrivilegeV END(EV_PrivilegeV)
; --------------------------------------------- ; ---------------------------------------------
; Extension Instruction Exception Handler ; Extension Instruction Exception Handler
; --------------------------------------------- ; ---------------------------------------------
ARC_ENTRY EV_Extension ENTRY(EV_Extension)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -417,7 +417,7 @@ ARC_ENTRY EV_Extension ...@@ -417,7 +417,7 @@ ARC_ENTRY EV_Extension
bl do_extension_fault bl do_extension_fault
b ret_from_exception b ret_from_exception
ARC_EXIT EV_Extension END(EV_Extension)
;######################### System Call Tracing ######################### ;######################### System Call Tracing #########################
...@@ -504,7 +504,7 @@ trap_with_param: ...@@ -504,7 +504,7 @@ trap_with_param:
; (2) Break Points ; (2) Break Points
;------------------------------------------------------------------ ;------------------------------------------------------------------
ARC_ENTRY EV_Trap ENTRY(EV_Trap)
EXCEPTION_PROLOGUE EXCEPTION_PROLOGUE
...@@ -534,9 +534,9 @@ ARC_ENTRY EV_Trap ...@@ -534,9 +534,9 @@ ARC_ENTRY EV_Trap
jl [r9] ; Entry into Sys Call Handler jl [r9] ; Entry into Sys Call Handler
; fall through to ret_from_system_call ; fall through to ret_from_system_call
ARC_EXIT EV_Trap END(EV_Trap)
ARC_ENTRY ret_from_system_call ENTRY(ret_from_system_call)
st r0, [sp, PT_r0] ; sys call return value in pt_regs st r0, [sp, PT_r0] ; sys call return value in pt_regs
...@@ -546,7 +546,7 @@ ARC_ENTRY ret_from_system_call ...@@ -546,7 +546,7 @@ ARC_ENTRY ret_from_system_call
; ;
; If ret to user mode do we need to handle signals, schedule() et al. ; If ret to user mode do we need to handle signals, schedule() et al.
ARC_ENTRY ret_from_exception ENTRY(ret_from_exception)
; Pre-{IRQ,Trap,Exception} K/U mode from pt_regs->status32 ; Pre-{IRQ,Trap,Exception} K/U mode from pt_regs->status32
ld r8, [sp, PT_status32] ; returning to User/Kernel Mode ld r8, [sp, PT_status32] ; returning to User/Kernel Mode
...@@ -726,9 +726,9 @@ not_level1_interrupt: ...@@ -726,9 +726,9 @@ not_level1_interrupt:
debug_marker_syscall: debug_marker_syscall:
rtie rtie
ARC_EXIT ret_from_exception END(ret_from_exception)
ARC_ENTRY ret_from_fork ENTRY(ret_from_fork)
; when the forked child comes here from the __switch_to function ; when the forked child comes here from the __switch_to function
; r0 has the last task pointer. ; r0 has the last task pointer.
; put last task in scheduler queue ; put last task in scheduler queue
...@@ -745,11 +745,11 @@ ARC_ENTRY ret_from_fork ...@@ -745,11 +745,11 @@ ARC_ENTRY ret_from_fork
; special case of kernel_thread entry point returning back due to ; special case of kernel_thread entry point returning back due to
; kernel_execve() - pretend return from syscall to ret to userland ; kernel_execve() - pretend return from syscall to ret to userland
b ret_from_exception b ret_from_exception
ARC_EXIT ret_from_fork END(ret_from_fork)
;################### Special Sys Call Wrappers ########################## ;################### Special Sys Call Wrappers ##########################
ARC_ENTRY sys_clone_wrapper ENTRY(sys_clone_wrapper)
SAVE_CALLEE_SAVED_USER SAVE_CALLEE_SAVED_USER
bl @sys_clone bl @sys_clone
DISCARD_CALLEE_SAVED_USER DISCARD_CALLEE_SAVED_USER
...@@ -759,7 +759,7 @@ ARC_ENTRY sys_clone_wrapper ...@@ -759,7 +759,7 @@ ARC_ENTRY sys_clone_wrapper
bnz tracesys_exit bnz tracesys_exit
b ret_from_system_call b ret_from_system_call
ARC_EXIT sys_clone_wrapper END(sys_clone_wrapper)
#ifdef CONFIG_ARC_DW2_UNWIND #ifdef CONFIG_ARC_DW2_UNWIND
; Workaround for bug 94179 (STAR ): ; Workaround for bug 94179 (STAR ):
......
...@@ -24,13 +24,13 @@ ...@@ -24,13 +24,13 @@
.globl stext .globl stext
stext: stext:
;------------------------------------------------------------------- ;-------------------------------------------------------------------
; Don't clobber r0-r4 yet. It might have bootloader provided info ; Don't clobber r0-r2 yet. It might have bootloader provided info
;------------------------------------------------------------------- ;-------------------------------------------------------------------
sr @_int_vec_base_lds, [AUX_INTR_VEC_BASE] sr @_int_vec_base_lds, [AUX_INTR_VEC_BASE]
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
; Only Boot (Master) proceeds. Others wait in platform dependent way ; Ensure Boot (Master) proceeds. Others wait in platform dependent way
; IDENTITY Reg [ 3 2 1 0 ] ; IDENTITY Reg [ 3 2 1 0 ]
; (cpu-id) ^^^ => Zero for UP ARC700 ; (cpu-id) ^^^ => Zero for UP ARC700
; => #Core-ID if SMP (Master 0) ; => #Core-ID if SMP (Master 0)
...@@ -39,7 +39,8 @@ stext: ...@@ -39,7 +39,8 @@ stext:
; need to make sure only boot cpu takes this path. ; need to make sure only boot cpu takes this path.
GET_CPU_ID r5 GET_CPU_ID r5
cmp r5, 0 cmp r5, 0
jnz arc_platform_smp_wait_to_boot mov.ne r0, r5
jne arc_platform_smp_wait_to_boot
#endif #endif
; Clear BSS before updating any globals ; Clear BSS before updating any globals
; XXX: use ZOL here ; XXX: use ZOL here
......
...@@ -155,22 +155,6 @@ static void arc_timer_event_setup(unsigned int limit) ...@@ -155,22 +155,6 @@ static void arc_timer_event_setup(unsigned int limit)
write_aux_reg(ARC_REG_TIMER0_CTRL, TIMER_CTRL_IE | TIMER_CTRL_NH); write_aux_reg(ARC_REG_TIMER0_CTRL, TIMER_CTRL_IE | TIMER_CTRL_NH);
} }
/*
* Acknowledge the interrupt (oneshot) and optionally re-arm it (periodic)
* -Any write to CTRL Reg will ack the intr (NH bit: Count when not halted)
* -Rearming is done by setting the IE bit
*
* Small optimisation: Normal code would have been
* if (irq_reenable)
* CTRL_REG = (IE | NH);
* else
* CTRL_REG = NH;
* However since IE is BIT0 we can fold the branch
*/
static void arc_timer_event_ack(unsigned int irq_reenable)
{
write_aux_reg(ARC_REG_TIMER0_CTRL, irq_reenable | TIMER_CTRL_NH);
}
static int arc_clkevent_set_next_event(unsigned long delta, static int arc_clkevent_set_next_event(unsigned long delta,
struct clock_event_device *dev) struct clock_event_device *dev)
...@@ -207,10 +191,22 @@ static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = { ...@@ -207,10 +191,22 @@ static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = {
static irqreturn_t timer_irq_handler(int irq, void *dev_id) static irqreturn_t timer_irq_handler(int irq, void *dev_id)
{ {
struct clock_event_device *clk = this_cpu_ptr(&arc_clockevent_device); /*
* Note that generic IRQ core could have passed @evt for @dev_id if
* irq_set_chip_and_handler() asked for handle_percpu_devid_irq()
*/
struct clock_event_device *evt = this_cpu_ptr(&arc_clockevent_device);
int irq_reenable = evt->mode == CLOCK_EVT_MODE_PERIODIC;
/*
* Any write to CTRL reg ACks the interrupt, we rewrite the
* Count when [N]ot [H]alted bit.
* And re-arm it if perioid by [I]nterrupt [E]nable bit
*/
write_aux_reg(ARC_REG_TIMER0_CTRL, irq_reenable | TIMER_CTRL_NH);
evt->event_handler(evt);
arc_timer_event_ack(clk->mode == CLOCK_EVT_MODE_PERIODIC);
clk->event_handler(clk);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -222,9 +218,8 @@ static struct irqaction arc_timer_irq = { ...@@ -222,9 +218,8 @@ static struct irqaction arc_timer_irq = {
/* /*
* Setup the local event timer for @cpu * Setup the local event timer for @cpu
* N.B. weak so that some exotic ARC SoCs can completely override it
*/ */
void __weak arc_local_timer_setup(unsigned int cpu) void arc_local_timer_setup(unsigned int cpu)
{ {
struct clock_event_device *clk = &per_cpu(arc_clockevent_device, cpu); struct clock_event_device *clk = &per_cpu(arc_clockevent_device, cpu);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/linkage.h> #include <linux/linkage.h>
#ifdef __LITTLE_ENDIAN__ #ifdef __LITTLE_ENDIAN__
#define WORD2 r2 #define WORD2 r2
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#define SHIFT r2 #define SHIFT r2
#endif #endif
ARC_ENTRY memcmp ENTRY(memcmp)
or r12,r0,r1 or r12,r0,r1
asl_s r12,r12,30 asl_s r12,r12,30
sub r3,r2,1 sub r3,r2,1
...@@ -121,4 +121,4 @@ ARC_ENTRY memcmp ...@@ -121,4 +121,4 @@ ARC_ENTRY memcmp
.Lnil: .Lnil:
j_s.d [blink] j_s.d [blink]
mov r0,0 mov r0,0
ARC_EXIT memcmp END(memcmp)
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/linkage.h> #include <linux/linkage.h>
ARC_ENTRY memcpy ENTRY(memcpy)
or r3,r0,r1 or r3,r0,r1
asl_s r3,r3,30 asl_s r3,r3,30
mov_s r5,r0 mov_s r5,r0
...@@ -63,4 +63,4 @@ ARC_ENTRY memcpy ...@@ -63,4 +63,4 @@ ARC_ENTRY memcpy
.Lendbloop: .Lendbloop:
j_s.d [blink] j_s.d [blink]
stb r12,[r5,0] stb r12,[r5,0]
ARC_EXIT memcpy END(memcpy)
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/linkage.h> #include <linux/linkage.h>
#define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */ #define SMALL 7 /* Must be at least 6 to deal with alignment/loop issues. */
ARC_ENTRY memset ENTRY(memset)
mov_s r4,r0 mov_s r4,r0
or r12,r0,r2 or r12,r0,r2
bmsk.f r12,r12,1 bmsk.f r12,r12,1
...@@ -46,14 +46,14 @@ ARC_ENTRY memset ...@@ -46,14 +46,14 @@ ARC_ENTRY memset
stb.ab r1,[r4,1] stb.ab r1,[r4,1]
.Ltiny_end: .Ltiny_end:
j_s [blink] j_s [blink]
ARC_EXIT memset END(memset)
; memzero: @r0 = mem, @r1 = size_t ; memzero: @r0 = mem, @r1 = size_t
; memset: @r0 = mem, @r1 = char, @r2 = size_t ; memset: @r0 = mem, @r1 = char, @r2 = size_t
ARC_ENTRY memzero ENTRY(memzero)
; adjust bzero args to memset args ; adjust bzero args to memset args
mov r2, r1 mov r2, r1
mov r1, 0 mov r1, 0
b memset ;tail call so need to tinker with blink b memset ;tail call so need to tinker with blink
ARC_EXIT memzero END(memzero)
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
presence of the norm instruction makes it easier to operate on whole presence of the norm instruction makes it easier to operate on whole
words branch-free. */ words branch-free. */
#include <asm/linkage.h> #include <linux/linkage.h>
ARC_ENTRY strchr ENTRY(strchr)
extb_s r1,r1 extb_s r1,r1
asl r5,r1,8 asl r5,r1,8
bmsk r2,r0,1 bmsk r2,r0,1
...@@ -130,4 +130,4 @@ ARC_ENTRY strchr ...@@ -130,4 +130,4 @@ ARC_ENTRY strchr
j_s.d [blink] j_s.d [blink]
mov.mi r0,0 mov.mi r0,0
#endif /* ENDIAN */ #endif /* ENDIAN */
ARC_EXIT strchr END(strchr)
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
source 1; however, that would increase the overhead for loop setup / finish, source 1; however, that would increase the overhead for loop setup / finish,
and strcmp might often terminate early. */ and strcmp might often terminate early. */
#include <asm/linkage.h> #include <linux/linkage.h>
ARC_ENTRY strcmp ENTRY(strcmp)
or r2,r0,r1 or r2,r0,r1
bmsk_s r2,r2,1 bmsk_s r2,r2,1
brne r2,0,.Lcharloop brne r2,0,.Lcharloop
...@@ -93,4 +93,4 @@ ARC_ENTRY strcmp ...@@ -93,4 +93,4 @@ ARC_ENTRY strcmp
.Lcmpend: .Lcmpend:
j_s.d [blink] j_s.d [blink]
sub r0,r2,r3 sub r0,r2,r3
ARC_EXIT strcmp END(strcmp)
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
there, but the it is not likely to be taken often, and it there, but the it is not likely to be taken often, and it
would also be likey to cost an unaligned mispredict at the next call. */ would also be likey to cost an unaligned mispredict at the next call. */
#include <asm/linkage.h> #include <linux/linkage.h>
ARC_ENTRY strcpy ENTRY(strcpy)
or r2,r0,r1 or r2,r0,r1
bmsk_s r2,r2,1 bmsk_s r2,r2,1
brne.d r2,0,charloop brne.d r2,0,charloop
...@@ -67,4 +67,4 @@ charloop: ...@@ -67,4 +67,4 @@ charloop:
brne.d r3,0,charloop brne.d r3,0,charloop
stb.ab r3,[r10,1] stb.ab r3,[r10,1]
j [blink] j [blink]
ARC_EXIT strcpy END(strcpy)
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/linkage.h> #include <linux/linkage.h>
ARC_ENTRY strlen ENTRY(strlen)
or r3,r0,7 or r3,r0,7
ld r2,[r3,-7] ld r2,[r3,-7]
ld.a r6,[r3,-3] ld.a r6,[r3,-3]
...@@ -80,4 +80,4 @@ ARC_ENTRY strlen ...@@ -80,4 +80,4 @@ ARC_ENTRY strlen
.Learly_end: .Learly_end:
b.d .Lend b.d .Lend
sub_s.ne r1,r1,r1 sub_s.ne r1,r1,r1
ARC_EXIT strlen END(strlen)
...@@ -100,10 +100,9 @@ ...@@ -100,10 +100,9 @@
#define DC_CTRL_INV_MODE_FLUSH 0x40 #define DC_CTRL_INV_MODE_FLUSH 0x40
#define DC_CTRL_FLUSH_STATUS 0x100 #define DC_CTRL_FLUSH_STATUS 0x100
char *arc_cache_mumbojumbo(int cpu_id, char *buf, int len) char *arc_cache_mumbojumbo(int c, char *buf, int len)
{ {
int n = 0; int n = 0;
unsigned int c = smp_processor_id();
#define PR_CACHE(p, enb, str) \ #define PR_CACHE(p, enb, str) \
{ \ { \
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#ifdef CONFIG_BLK_DEV_INITRD
#include <linux/initrd.h>
#endif
#include <linux/swap.h> #include <linux/swap.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -42,6 +45,24 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size) ...@@ -42,6 +45,24 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
pr_info("Memory size set via devicetree %ldM\n", TO_MB(arc_mem_sz)); pr_info("Memory size set via devicetree %ldM\n", TO_MB(arc_mem_sz));
} }
#ifdef CONFIG_BLK_DEV_INITRD
static int __init early_initrd(char *p)
{
unsigned long start, size;
char *endp;
start = memparse(p, &endp);
if (*endp == ',') {
size = memparse(endp + 1, NULL);
initrd_start = (unsigned long)__va(start);
initrd_end = (unsigned long)__va(start + size);
}
return 0;
}
early_param("initrd", early_initrd);
#endif
/* /*
* First memory setup routine called from setup_arch() * First memory setup routine called from setup_arch()
* 1. setup swapper's mm @init_mm * 1. setup swapper's mm @init_mm
...@@ -80,6 +101,12 @@ void __init setup_arch_memory(void) ...@@ -80,6 +101,12 @@ void __init setup_arch_memory(void)
memblock_reserve(CONFIG_LINUX_LINK_BASE, memblock_reserve(CONFIG_LINUX_LINK_BASE,
__pa(_end) - CONFIG_LINUX_LINK_BASE); __pa(_end) - CONFIG_LINUX_LINK_BASE);
#ifdef CONFIG_BLK_DEV_INITRD
/*------------- reserve initrd image -----------------------*/
if (initrd_start)
memblock_reserve(__pa(initrd_start), initrd_end - initrd_start);
#endif
memblock_dump_all(); memblock_dump_all();
/*-------------- node setup --------------------------------*/ /*-------------- node setup --------------------------------*/
......
...@@ -260,7 +260,7 @@ ARCFP_CODE ;Fast Path Code, candidate for ICCM ...@@ -260,7 +260,7 @@ ARCFP_CODE ;Fast Path Code, candidate for ICCM
; I-TLB Miss Exception Handler ; I-TLB Miss Exception Handler
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
ARC_ENTRY EV_TLBMissI ENTRY(EV_TLBMissI)
TLBMISS_FREEUP_REGS TLBMISS_FREEUP_REGS
...@@ -293,13 +293,13 @@ ARC_ENTRY EV_TLBMissI ...@@ -293,13 +293,13 @@ ARC_ENTRY EV_TLBMissI
TLBMISS_RESTORE_REGS TLBMISS_RESTORE_REGS
rtie rtie
ARC_EXIT EV_TLBMissI END(EV_TLBMissI)
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
; D-TLB Miss Exception Handler ; D-TLB Miss Exception Handler
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
ARC_ENTRY EV_TLBMissD ENTRY(EV_TLBMissD)
TLBMISS_FREEUP_REGS TLBMISS_FREEUP_REGS
...@@ -381,6 +381,4 @@ do_slow_path_pf: ...@@ -381,6 +381,4 @@ do_slow_path_pf:
bl do_page_fault bl do_page_fault
b ret_from_exception b ret_from_exception
ARC_EXIT EV_TLBMissD END(EV_TLBMissD)
ARC_ENTRY EV_TLBMissB ; Bogus entry to measure sz of DTLBMiss hdlr
...@@ -33,7 +33,6 @@ config ISS_SMP_EXTN ...@@ -33,7 +33,6 @@ config ISS_SMP_EXTN
bool "ARC SMP Extensions (ISS Models only)" bool "ARC SMP Extensions (ISS Models only)"
default n default n
depends on SMP depends on SMP
select ARC_HAS_COH_RTSC
help help
SMP Extensions to ARC700, in a "simulation only" Model, supported in SMP Extensions to ARC700, in a "simulation only" Model, supported in
ARC ISS (Instruction Set Simulator). ARC ISS (Instruction Set Simulator).
......
...@@ -201,7 +201,7 @@ static void __init plat_fpga_populate_dev(void) ...@@ -201,7 +201,7 @@ static void __init plat_fpga_populate_dev(void)
* callback set, by matching the DT compatible name. * callback set, by matching the DT compatible name.
*/ */
static const char *aa4_compat[] __initdata = { static const char *aa4_compat[] __initconst = {
"snps,arc-angel4", "snps,arc-angel4",
NULL, NULL,
}; };
...@@ -216,7 +216,7 @@ MACHINE_START(ANGEL4, "angel4") ...@@ -216,7 +216,7 @@ MACHINE_START(ANGEL4, "angel4")
#endif #endif
MACHINE_END MACHINE_END
static const char *ml509_compat[] __initdata = { static const char *ml509_compat[] __initconst = {
"snps,arc-ml509", "snps,arc-ml509",
NULL, NULL,
}; };
...@@ -231,7 +231,7 @@ MACHINE_START(ML509, "ml509") ...@@ -231,7 +231,7 @@ MACHINE_START(ML509, "ml509")
#endif #endif
MACHINE_END MACHINE_END
static const char *nsimosci_compat[] __initdata = { static const char *nsimosci_compat[] __initconst = {
"snps,nsimosci", "snps,nsimosci",
NULL, NULL,
}; };
......
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