1 /* SMP IPI low-level handler
3 * Copyright (C) 2006-2007 Matsushita Electric Industrial Co., Ltd.
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
13 #include <linux/sys.h>
14 #include <linux/linkage.h>
16 #include <asm/system.h>
17 #include <asm/thread_info.h>
18 #include <asm/cpu-regs.h>
19 #include <proc/smp-regs.h>
20 #include <asm/asm-offsets.h>
21 #include <asm/frame.inc>
25 ###############################################################################
27 # IPI interrupt handler
29 ###############################################################################
30 .globl mn10300_low_ipi_handler
31 mn10300_low_ipi_handler:
37 #ifdef CONFIG_MN10300_CACHE_ENABLED
38 cmp FLUSH_CACHE_IPI,d0
39 beq mn10300_flush_cache_ipi
42 beq mn10300_smp_boot_ipi
47 jmp gdbstub_io_rx_handler
52 ###############################################################################
54 # Cache flush IPI interrupt handler
56 ###############################################################################
57 #ifdef CONFIG_MN10300_CACHE_ENABLED
58 mn10300_flush_cache_ipi:
66 movbu d2,(GxICR(FLUSH_CACHE_IPI)) # ACK the interrupt
67 movhu (GxICR(FLUSH_CACHE_IPI)),d2
68 call smp_cache_interrupt[],0
73 ###############################################################################
75 # SMP boot CPU IPI interrupt handler
77 ###############################################################################
80 movhu (GxICR(SMP_BOOT_IRQ)),d0
82 movhu d0,(GxICR(SMP_BOOT_IRQ))
91 mov (start_stack,a0),a0
93 jmp initialize_secondary
96 # Jump here after RTI to suppress the icache lookahead