Commit 54f481a2 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Ard Biesheuvel

ARM: remove old-style irq entry

The last user of arch_irq_handler_default is gone now, so the
entry-macro-multi.S file and all references to mach/entry-macro.S can
be removed, as well as the asm_do_IRQ() entrypoint into the interrupt
handling routines implemented in C.

Note: The ARMv7-M entry still uses its own top-level IRQ entry, calling
nvic_handle_irq() from assembly. This could be changed to go through
generic_handle_arch_irq() as well, but it's unclear to me if there are
any benefits.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
[ardb: keep irq_handler macro as it carries all the IRQ stack handling]
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Tested-by: default avatarMarc Zyngier <maz@kernel.org>
Tested-by: Vladimir Murzin <vladimir.murzin@arm.com> # ARMv7M
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 6f5d248d
...@@ -58,6 +58,7 @@ config ARM ...@@ -58,6 +58,7 @@ config ARM
select GENERIC_CPU_AUTOPROBE select GENERIC_CPU_AUTOPROBE
select GENERIC_EARLY_IOREMAP select GENERIC_EARLY_IOREMAP
select GENERIC_IDLE_POLL_SETUP select GENERIC_IDLE_POLL_SETUP
select GENERIC_IRQ_MULTI_HANDLER if MMU
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_IRQ_SHOW_LEVEL select GENERIC_IRQ_SHOW_LEVEL
...@@ -320,7 +321,6 @@ config ARCH_MULTIPLATFORM ...@@ -320,7 +321,6 @@ config ARCH_MULTIPLATFORM
select AUTO_ZRELADDR select AUTO_ZRELADDR
select TIMER_OF select TIMER_OF
select COMMON_CLK select COMMON_CLK
select GENERIC_IRQ_MULTI_HANDLER
select HAVE_PCI select HAVE_PCI
select PCI_DOMAINS_GENERIC if PCI select PCI_DOMAINS_GENERIC if PCI
select SPARSE_IRQ select SPARSE_IRQ
...@@ -344,7 +344,6 @@ config ARCH_EP93XX ...@@ -344,7 +344,6 @@ config ARCH_EP93XX
select ARM_AMBA select ARM_AMBA
imply ARM_PATCH_PHYS_VIRT imply ARM_PATCH_PHYS_VIRT
select ARM_VIC select ARM_VIC
select GENERIC_IRQ_MULTI_HANDLER
select AUTO_ZRELADDR select AUTO_ZRELADDR
select CLKSRC_MMIO select CLKSRC_MMIO
select CPU_ARM920T select CPU_ARM920T
...@@ -359,7 +358,6 @@ config ARCH_FOOTBRIDGE ...@@ -359,7 +358,6 @@ config ARCH_FOOTBRIDGE
select FOOTBRIDGE select FOOTBRIDGE
select NEED_MACH_IO_H if !MMU select NEED_MACH_IO_H if !MMU
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
select GENERIC_IRQ_MULTI_HANDLER
help help
Support for systems based on the DC21285 companion chip Support for systems based on the DC21285 companion chip
("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
...@@ -368,7 +366,6 @@ config ARCH_IOP32X ...@@ -368,7 +366,6 @@ config ARCH_IOP32X
bool "IOP32x-based" bool "IOP32x-based"
depends on MMU depends on MMU
select CPU_XSCALE select CPU_XSCALE
select GENERIC_IRQ_MULTI_HANDLER
select GPIO_IOP select GPIO_IOP
select GPIOLIB select GPIOLIB
select FORCE_PCI select FORCE_PCI
...@@ -384,7 +381,6 @@ config ARCH_IXP4XX ...@@ -384,7 +381,6 @@ config ARCH_IXP4XX
select ARCH_SUPPORTS_BIG_ENDIAN select ARCH_SUPPORTS_BIG_ENDIAN
select CPU_XSCALE select CPU_XSCALE
select DMABOUNCE if PCI select DMABOUNCE if PCI
select GENERIC_IRQ_MULTI_HANDLER
select GPIO_IXP4XX select GPIO_IXP4XX
select GPIOLIB select GPIOLIB
select HAVE_PCI select HAVE_PCI
...@@ -400,7 +396,6 @@ config ARCH_IXP4XX ...@@ -400,7 +396,6 @@ config ARCH_IXP4XX
config ARCH_DOVE config ARCH_DOVE
bool "Marvell Dove" bool "Marvell Dove"
select CPU_PJ4 select CPU_PJ4
select GENERIC_IRQ_MULTI_HANDLER
select GPIOLIB select GPIOLIB
select HAVE_PCI select HAVE_PCI
select MVEBU_MBUS select MVEBU_MBUS
...@@ -423,7 +418,6 @@ config ARCH_PXA ...@@ -423,7 +418,6 @@ config ARCH_PXA
select CLKSRC_MMIO select CLKSRC_MMIO
select TIMER_OF select TIMER_OF
select CPU_XSCALE if !CPU_XSC3 select CPU_XSCALE if !CPU_XSC3
select GENERIC_IRQ_MULTI_HANDLER
select GPIO_PXA select GPIO_PXA
select GPIOLIB select GPIOLIB
select IRQ_DOMAIN select IRQ_DOMAIN
...@@ -442,7 +436,6 @@ config ARCH_RPC ...@@ -442,7 +436,6 @@ config ARCH_RPC
select ARM_HAS_SG_CHAIN select ARM_HAS_SG_CHAIN
select CPU_SA110 select CPU_SA110
select FIQ select FIQ
select GENERIC_IRQ_MULTI_HANDLER
select HAVE_PATA_PLATFORM select HAVE_PATA_PLATFORM
select ISA_DMA_API select ISA_DMA_API
select LEGACY_TIMER_TICK select LEGACY_TIMER_TICK
...@@ -463,7 +456,6 @@ config ARCH_SA1100 ...@@ -463,7 +456,6 @@ config ARCH_SA1100
select COMMON_CLK select COMMON_CLK
select CPU_FREQ select CPU_FREQ
select CPU_SA1100 select CPU_SA1100
select GENERIC_IRQ_MULTI_HANDLER
select GPIOLIB select GPIOLIB
select IRQ_DOMAIN select IRQ_DOMAIN
select ISA select ISA
...@@ -478,7 +470,6 @@ config ARCH_S3C24XX ...@@ -478,7 +470,6 @@ config ARCH_S3C24XX
select CLKSRC_SAMSUNG_PWM select CLKSRC_SAMSUNG_PWM
select GPIO_SAMSUNG select GPIO_SAMSUNG
select GPIOLIB select GPIOLIB
select GENERIC_IRQ_MULTI_HANDLER
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C
select NEED_MACH_IO_H select NEED_MACH_IO_H
select S3C2410_WATCHDOG select S3C2410_WATCHDOG
...@@ -497,7 +488,6 @@ config ARCH_OMAP1 ...@@ -497,7 +488,6 @@ config ARCH_OMAP1
select ARCH_OMAP select ARCH_OMAP
select CLKSRC_MMIO select CLKSRC_MMIO
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select GENERIC_IRQ_MULTI_HANDLER
select GPIOLIB select GPIOLIB
select HAVE_LEGACY_CLK select HAVE_LEGACY_CLK
select IRQ_DOMAIN select IRQ_DOMAIN
...@@ -1168,7 +1158,7 @@ config CURRENT_POINTER_IN_TPIDRURO ...@@ -1168,7 +1158,7 @@ config CURRENT_POINTER_IN_TPIDRURO
config IRQSTACKS config IRQSTACKS
def_bool y def_bool y
depends on GENERIC_IRQ_MULTI_HANDLER && THREAD_INFO_IN_TASK depends on THREAD_INFO_IN_TASK
select HAVE_IRQ_EXIT_ON_IRQ_STACK select HAVE_IRQ_EXIT_ON_IRQ_STACK
select HAVE_SOFTIRQ_ON_OWN_STACK select HAVE_SOFTIRQ_ON_OWN_STACK
......
/* SPDX-License-Identifier: GPL-2.0 */
#include <asm/assembler.h>
/*
* Interrupt handling. Preserves r7, r8, r9
*/
.macro arch_irq_handler_default
get_irqnr_preamble r6, lr
1: get_irqnr_and_base r0, r2, r6, lr
movne r1, sp
@
@ routine called with r0 = irq number, r1 = struct pt_regs *
@
badrne lr, 1b
bne asm_do_IRQ
.endm
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
struct irqaction; struct irqaction;
struct pt_regs; struct pt_regs;
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
void handle_IRQ(unsigned int, struct pt_regs *); void handle_IRQ(unsigned int, struct pt_regs *);
void init_IRQ(void); void init_IRQ(void);
......
...@@ -56,9 +56,7 @@ struct machine_desc { ...@@ -56,9 +56,7 @@ struct machine_desc {
void (*init_time)(void); void (*init_time)(void);
void (*init_machine)(void); void (*init_machine)(void);
void (*init_late)(void); void (*init_late)(void);
#ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
void (*handle_irq)(struct pt_regs *); void (*handle_irq)(struct pt_regs *);
#endif
void (*restart)(enum reboot_mode, const char *); void (*restart)(enum reboot_mode, const char *);
}; };
......
...@@ -19,9 +19,6 @@ ...@@ -19,9 +19,6 @@
#include <asm/glue-df.h> #include <asm/glue-df.h>
#include <asm/glue-pf.h> #include <asm/glue-pf.h>
#include <asm/vfpmacros.h> #include <asm/vfpmacros.h>
#ifndef CONFIG_GENERIC_IRQ_MULTI_HANDLER
#include <mach/entry-macro.S>
#endif
#include <asm/thread_notify.h> #include <asm/thread_notify.h>
#include <asm/unwind.h> #include <asm/unwind.h>
#include <asm/unistd.h> #include <asm/unistd.h>
...@@ -30,14 +27,12 @@ ...@@ -30,14 +27,12 @@
#include <asm/uaccess-asm.h> #include <asm/uaccess-asm.h>
#include "entry-header.S" #include "entry-header.S"
#include <asm/entry-macro-multi.S>
#include <asm/probes.h> #include <asm/probes.h>
/* /*
* Interrupt handling. * Interrupt handling.
*/ */
.macro irq_handler, from_user:req .macro irq_handler, from_user:req
#ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
mov r0, sp mov r0, sp
#ifdef CONFIG_IRQSTACKS #ifdef CONFIG_IRQSTACKS
mov_l r2, irq_stack_ptr @ Take base address mov_l r2, irq_stack_ptr @ Take base address
...@@ -92,9 +87,6 @@ UNWIND( .setfp fpreg, sp ) ...@@ -92,9 +87,6 @@ UNWIND( .setfp fpreg, sp )
mov sp, r9 @ Restore original SP mov sp, r9 @ Restore original SP
#endif // CONFIG_UNWINDER_ARM #endif // CONFIG_UNWINDER_ARM
#endif // CONFIG_IRQSTACKS #endif // CONFIG_IRQSTACKS
#else
arch_irq_handler_default
#endif
.endm .endm
.macro pabt_helper .macro pabt_helper
......
...@@ -120,23 +120,6 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs) ...@@ -120,23 +120,6 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs)
ack_bad_irq(irq); ack_bad_irq(irq);
} }
/*
* asm_do_IRQ is the interface to be used from assembly code.
*/
asmlinkage void __exception_irq_entry
asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
{
struct pt_regs *old_regs;
irq_enter();
old_regs = set_irq_regs(regs);
handle_IRQ(irq, regs);
set_irq_regs(old_regs);
irq_exit();
}
void __init init_IRQ(void) void __init init_IRQ(void)
{ {
int ret; int ret;
......
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