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:
commit
3573d3869d
1
arch/arc/boot/.gitignore
vendored
1
arch/arc/boot/.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
*.dtb*
|
*.dtb*
|
||||||
|
uImage
|
||||||
|
@ -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 {
|
||||||
|
@ -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"
|
|
@ -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 @@
|
|||||||
|
|
||||||
#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:
|
|||||||
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)
|
|||||||
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 ):
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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 @@
|
|||||||
#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 --------------------------------*/
|
||||||
|
@ -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
|
|
||||||
|
@ -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)
|
|||||||
* 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,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user