ARC changes for 3.15

* 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
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.14 (GNU/Linux)
 
 iQIcBAABAgAGBQJTQo6NAAoJEGnX8d3iisJeNTkP/jwPKxaDx88xbyUK0+OtmB9o
 v6BLhRI/mzdXf4KX7aq+0B3II1niYvD9e65LnQlx/f+fExyiaeIucxI4rKcFsbYH
 X1MBOKe1FNcFUhu6xSeRs1IVXR9z9bU4+H9K2U38RhZHBQtb9apDFUqTJoNy6PEP
 PO0nkwB8vaeoocVdCRWD574d8eQpUYejo5pNesQG4zLClO0IafYiP0vQWXB4dGjh
 ppfq+UR0GfXYwFgO+JbSoJFg0SmQuw02LoQ6vFZbtvZ3l7nfmv+F4SJKzDQR++vq
 nV9Z++cSdBsgDD+7nFeo1VlDkFsJY3148yFSfqf79E4JIn3VQyFFmzHasDR6GjYn
 HCW7WS9OFYmcnG6WUsH5EyJK/QbuNFHRE0kxbJap2AnYsXyQkdDkAZqQWNeG4TmO
 SI8YKMAWh2CcH0FOKntcGPmlOvyi//C28mAPKKsqO/D7YShGkhhWZG1BpbX4Vb1u
 0YFuignfAk/R6RckBXKymguRA7kloj+cI7KkvzkWmfkzJzh8qSrp6UwR8A/UwiDb
 U+ZSL3WOBaA5Hc4sU+58uUDIxPcob034vgQpxNXWAmGg3QJ62j+EGinGsj9fw3XV
 EyXTIYIDByriMu5winn9Xj7KLyaI7YZb+3HAFO76whlHD+sMAiLzKMKLUKfD8z42
 5e4R9+CsDpwnK3iCi1P5
 =dmgU
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2014-04-07 17:51:34 -07:00
commit 3573d3869d
21 changed files with 114 additions and 115 deletions

View File

@ -1 +1,2 @@
*.dtb* *.dtb*
uImage

View File

@ -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 @@
}; };
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 {

View File

@ -1,10 +0,0 @@
/*
* 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"

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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
; --------------------------------------------- ; ---------------------------------------------
; 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
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
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
; 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
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
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
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
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
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
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:
; (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
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
; ;
; 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:
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
; 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
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 ):

View File

@ -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:
; 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

View File

@ -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) = {
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 = {
/* /*
* 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);

View File

@ -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 @@
#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
.Lnil: .Lnil:
j_s.d [blink] j_s.d [blink]
mov r0,0 mov r0,0
ARC_EXIT memcmp END(memcmp)

View File

@ -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
.Lendbloop: .Lendbloop:
j_s.d [blink] j_s.d [blink]
stb r12,[r5,0] stb r12,[r5,0]
ARC_EXIT memcpy END(memcpy)

View File

@ -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
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)

View File

@ -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
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)

View File

@ -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
.Lcmpend: .Lcmpend:
j_s.d [blink] j_s.d [blink]
sub r0,r2,r3 sub r0,r2,r3
ARC_EXIT strcmp END(strcmp)

View File

@ -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:
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)

View File

@ -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
.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)

View File

@ -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) \
{ \ { \

View File

@ -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)
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)
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 --------------------------------*/

View File

@ -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
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:
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

View File

@ -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).

View File

@ -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")
#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")
#endif #endif
MACHINE_END MACHINE_END
static const char *nsimosci_compat[] __initdata = { static const char *nsimosci_compat[] __initconst = {
"snps,nsimosci", "snps,nsimosci",
NULL, NULL,
}; };