Loading arch/arm/kernel/entry-armv.S +3 −0 Original line number Diff line number Diff line Loading @@ -1226,6 +1226,9 @@ vector_fiq: .krait_fixup: .word msm_krait_need_wfe_fixup .globl vector_fiq_offset .equ vector_fiq_offset, vector_fiq .section .vectors, "ax", %progbits __vectors_start: W(b) vector_rst Loading arch/arm/kernel/fiq.c +14 −5 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ #include <asm/irq.h> #include <asm/traps.h> #define FIQ_OFFSET ({ \ extern void *vector_fiq_offset; \ (unsigned)&vector_fiq_offset; \ }) static unsigned long no_fiq_insn; /* Default reacquire function Loading Loading @@ -81,13 +86,16 @@ int show_fiq_list(struct seq_file *p, int prec) void set_fiq_handler(void *start, unsigned int length) { #if defined(CONFIG_CPU_USE_DOMAINS) memcpy((void *)0xffff001c, start, length); void *base = (void *)0xffff0000; #else memcpy(vectors_page + 0x1c, start, length); void *base = vectors_page; #endif flush_icache_range(0xffff001c, 0xffff001c + length); unsigned offset = FIQ_OFFSET; memcpy(base + offset, start, length); flush_icache_range(0xffff0000 + offset, 0xffff0000 + offset + length); if (!vectors_high()) flush_icache_range(0x1c, 0x1c + length); flush_icache_range(offset, offset + length); } int claim_fiq(struct fiq_handler *f) Loading Loading @@ -151,6 +159,7 @@ EXPORT_SYMBOL(fiq_set_type); void __init init_FIQ(int start) { no_fiq_insn = *(unsigned long *)0xffff001c; unsigned offset = FIQ_OFFSET; no_fiq_insn = *(unsigned long *)(0xffff0000 + offset); fiq_start = start; } Loading
arch/arm/kernel/entry-armv.S +3 −0 Original line number Diff line number Diff line Loading @@ -1226,6 +1226,9 @@ vector_fiq: .krait_fixup: .word msm_krait_need_wfe_fixup .globl vector_fiq_offset .equ vector_fiq_offset, vector_fiq .section .vectors, "ax", %progbits __vectors_start: W(b) vector_rst Loading
arch/arm/kernel/fiq.c +14 −5 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ #include <asm/irq.h> #include <asm/traps.h> #define FIQ_OFFSET ({ \ extern void *vector_fiq_offset; \ (unsigned)&vector_fiq_offset; \ }) static unsigned long no_fiq_insn; /* Default reacquire function Loading Loading @@ -81,13 +86,16 @@ int show_fiq_list(struct seq_file *p, int prec) void set_fiq_handler(void *start, unsigned int length) { #if defined(CONFIG_CPU_USE_DOMAINS) memcpy((void *)0xffff001c, start, length); void *base = (void *)0xffff0000; #else memcpy(vectors_page + 0x1c, start, length); void *base = vectors_page; #endif flush_icache_range(0xffff001c, 0xffff001c + length); unsigned offset = FIQ_OFFSET; memcpy(base + offset, start, length); flush_icache_range(0xffff0000 + offset, 0xffff0000 + offset + length); if (!vectors_high()) flush_icache_range(0x1c, 0x1c + length); flush_icache_range(offset, offset + length); } int claim_fiq(struct fiq_handler *f) Loading Loading @@ -151,6 +159,7 @@ EXPORT_SYMBOL(fiq_set_type); void __init init_FIQ(int start) { no_fiq_insn = *(unsigned long *)0xffff001c; unsigned offset = FIQ_OFFSET; no_fiq_insn = *(unsigned long *)(0xffff0000 + offset); fiq_start = start; }