Commit bb3a4ebe authored by Jamie Iles's avatar Jamie Iles Committed by Marc Zyngier

ARM: samsung: convert to MULTI_IRQ_HANDLER

Now that there is a generic IRQ handler for multiple VIC devices use it
for samsung to help building multi platform kernels.

Cc: Kukjin Kim <kgene.kim@samsung.com>
Tested-by: default avatarThomas Abraham <thomas.abraham@linaro.org>
Signed-off-by: default avatarJamie Iles <jamie@jamieiles.com>
parent c8be7acd
...@@ -803,6 +803,7 @@ config ARCH_S5P64X0 ...@@ -803,6 +803,7 @@ config ARCH_S5P64X0
select HAVE_SCHED_CLOCK select HAVE_SCHED_CLOCK
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C
select HAVE_S3C_RTC if RTC_CLASS select HAVE_S3C_RTC if RTC_CLASS
select MULTI_IRQ_HANDLER
help help
Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440, Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
SMDK6450. SMDK6450.
...@@ -818,6 +819,7 @@ config ARCH_S5PC100 ...@@ -818,6 +819,7 @@ config ARCH_S5PC100
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C
select HAVE_S3C_RTC if RTC_CLASS select HAVE_S3C_RTC if RTC_CLASS
select HAVE_S3C2410_WATCHDOG if WATCHDOG select HAVE_S3C2410_WATCHDOG if WATCHDOG
select MULTI_IRQ_HANDLER
help help
Samsung S5PC100 series based systems Samsung S5PC100 series based systems
...@@ -838,6 +840,7 @@ config ARCH_S5PV210 ...@@ -838,6 +840,7 @@ config ARCH_S5PV210
select HAVE_S3C_RTC if RTC_CLASS select HAVE_S3C_RTC if RTC_CLASS
select HAVE_S3C2410_WATCHDOG if WATCHDOG select HAVE_S3C2410_WATCHDOG if WATCHDOG
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
select MULTI_IRQ_HANDLER
help help
Samsung S5PV210/S5PC110 series based systems Samsung S5PV210/S5PC110 series based systems
......
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <mach/map.h> .macro disable_fiq
#include <plat/irqs.h> .endm
#include <asm/entry-macro-vic2.S> .macro arch_ret_to_user, tmp1, tmp2
.endm
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <video/platform_lcd.h> #include <video/platform_lcd.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -242,6 +243,7 @@ MACHINE_START(SMDK6440, "SMDK6440") ...@@ -242,6 +243,7 @@ MACHINE_START(SMDK6440, "SMDK6440")
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5p6440_init_irq, .init_irq = s5p6440_init_irq,
.handle_irq = vic_handle_irq,
.map_io = smdk6440_map_io, .map_io = smdk6440_map_io,
.init_machine = smdk6440_machine_init, .init_machine = smdk6440_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <video/platform_lcd.h> #include <video/platform_lcd.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -262,6 +263,7 @@ MACHINE_START(SMDK6450, "SMDK6450") ...@@ -262,6 +263,7 @@ MACHINE_START(SMDK6450, "SMDK6450")
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5p6450_init_irq, .init_irq = s5p6450_init_irq,
.handle_irq = vic_handle_irq,
.map_io = smdk6450_map_io, .map_io = smdk6450_map_io,
.init_machine = smdk6450_machine_init, .init_machine = smdk6450_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -12,39 +12,14 @@ ...@@ -12,39 +12,14 @@
* warranty of any kind, whether express or implied. * warranty of any kind, whether express or implied.
*/ */
#include <asm/hardware/vic.h>
#include <mach/map.h>
#include <plat/irqs.h>
.macro disable_fiq .macro disable_fiq
.endm .endm
.macro get_irqnr_preamble, base, tmp .macro get_irqnr_preamble, base, tmp
ldr \base, =VA_VIC0
.endm .endm
.macro arch_ret_to_user, tmp1, tmp2 .macro arch_ret_to_user, tmp1, tmp2
.endm .endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
@ check the vic0
mov \irqnr, # S5P_IRQ_OFFSET + 31
ldr \irqstat, [ \base, # VIC_IRQ_STATUS ]
teq \irqstat, #0
@ otherwise try vic1
addeq \tmp, \base, #(VA_VIC1 - VA_VIC0)
addeq \irqnr, \irqnr, #32
ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
teqeq \irqstat, #0
@ otherwise try vic2
addeq \tmp, \base, #(VA_VIC2 - VA_VIC0)
addeq \irqnr, \irqnr, #32
ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
teqeq \irqstat, #0
clzne \irqstat, \irqstat
subne \irqnr, \irqnr, \irqstat
.endm .endm
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/pwm_backlight.h> #include <linux/pwm_backlight.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
...@@ -250,6 +251,7 @@ MACHINE_START(SMDKC100, "SMDKC100") ...@@ -250,6 +251,7 @@ MACHINE_START(SMDKC100, "SMDKC100")
/* Maintainer: Byungho Min <bhmin@samsung.com> */ /* Maintainer: Byungho Min <bhmin@samsung.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pc100_init_irq, .init_irq = s5pc100_init_irq,
.handle_irq = vic_handle_irq,
.map_io = smdkc100_map_io, .map_io = smdkc100_map_io,
.init_machine = smdkc100_machine_init, .init_machine = smdkc100_machine_init,
.timer = &s3c24xx_timer, .timer = &s3c24xx_timer,
......
...@@ -10,45 +10,8 @@ ...@@ -10,45 +10,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <asm/hardware/vic.h>
#include <mach/map.h>
#include <plat/irqs.h>
.macro disable_fiq .macro disable_fiq
.endm .endm
.macro get_irqnr_preamble, base, tmp
ldr \base, =VA_VIC0
.endm
.macro arch_ret_to_user, tmp1, tmp2 .macro arch_ret_to_user, tmp1, tmp2
.endm .endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp
@ check the vic0
mov \irqnr, # S5P_IRQ_OFFSET + 31
ldr \irqstat, [ \base, # VIC_IRQ_STATUS ]
teq \irqstat, #0
@ otherwise try vic1
addeq \tmp, \base, #(VA_VIC1 - VA_VIC0)
addeq \irqnr, \irqnr, #32
ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
teqeq \irqstat, #0
@ otherwise try vic2
addeq \tmp, \base, #(VA_VIC2 - VA_VIC0)
addeq \irqnr, \irqnr, #32
ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
teqeq \irqstat, #0
@ otherwise try vic3
addeq \tmp, \base, #(VA_VIC3 - VA_VIC0)
addeq \irqnr, \irqnr, #32
ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
teqeq \irqstat, #0
clzne \irqstat, \irqstat
subne \irqnr, \irqnr, \irqstat
.endm
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -680,6 +681,7 @@ MACHINE_START(AQUILA, "Aquila") ...@@ -680,6 +681,7 @@ MACHINE_START(AQUILA, "Aquila")
Kyungmin Park <kyungmin.park@samsung.com> */ Kyungmin Park <kyungmin.park@samsung.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pv210_init_irq, .init_irq = s5pv210_init_irq,
.handle_irq = vic_handle_irq,
.map_io = aquila_map_io, .map_io = aquila_map_io,
.init_machine = aquila_machine_init, .init_machine = aquila_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -956,6 +957,7 @@ MACHINE_START(GONI, "GONI") ...@@ -956,6 +957,7 @@ MACHINE_START(GONI, "GONI")
/* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */ /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pv210_init_irq, .init_irq = s5pv210_init_irq,
.handle_irq = vic_handle_irq,
.map_io = goni_map_io, .map_io = goni_map_io,
.init_machine = goni_machine_init, .init_machine = goni_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -138,6 +139,7 @@ MACHINE_START(SMDKC110, "SMDKC110") ...@@ -138,6 +139,7 @@ MACHINE_START(SMDKC110, "SMDKC110")
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pv210_init_irq, .init_irq = s5pv210_init_irq,
.handle_irq = vic_handle_irq,
.map_io = smdkc110_map_io, .map_io = smdkc110_map_io,
.init_machine = smdkc110_machine_init, .init_machine = smdkc110_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/pwm_backlight.h> #include <linux/pwm_backlight.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -315,6 +316,7 @@ MACHINE_START(SMDKV210, "SMDKV210") ...@@ -315,6 +316,7 @@ MACHINE_START(SMDKV210, "SMDKV210")
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pv210_init_irq, .init_irq = s5pv210_init_irq,
.handle_irq = vic_handle_irq,
.map_io = smdkv210_map_io, .map_io = smdkv210_map_io,
.init_machine = smdkv210_machine_init, .init_machine = smdkv210_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <asm/hardware/vic.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -127,6 +128,7 @@ MACHINE_START(TORBRECK, "TORBRECK") ...@@ -127,6 +128,7 @@ MACHINE_START(TORBRECK, "TORBRECK")
/* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */ /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */
.atag_offset = 0x100, .atag_offset = 0x100,
.init_irq = s5pv210_init_irq, .init_irq = s5pv210_init_irq,
.handle_irq = vic_handle_irq,
.map_io = torbreck_map_io, .map_io = torbreck_map_io,
.init_machine = torbreck_machine_init, .init_machine = torbreck_machine_init,
.timer = &s5p_timer, .timer = &s5p_timer,
......
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