2013-01-18 15:12:16 +05:30
/*
* Copyright ( C ) 2011 - 12 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 .
*
*/
# include <linux/interrupt.h>
2013-04-11 14:47:36 +05:30
# include <linux/irqchip.h>
2013-01-18 15:12:26 +05:30
# include <asm/mach_desc.h>
2015-10-14 14:38:02 +05:30
# include <asm/smp.h>
2013-01-18 15:12:18 +05:30
/*
* Late Interrupt system init called from start_kernel for Boot CPU only
*
* Since slab must already be initialized , platforms can start doing any
* needed request_irq ( ) s
*/
void __init init_IRQ ( void )
{
2015-10-13 08:48:54 +05:30
/*
* process the entire interrupt tree in one go
* Any external intc will be setup provided DT chains them
* properly
*/
2013-04-11 14:47:36 +05:30
irqchip_init ( ) ;
2013-01-18 15:12:23 +05:30
# ifdef CONFIG_SMP
2015-10-14 14:38:02 +05:30
/* a SMP H/w block could do IPI IRQ request here */
2015-12-16 03:10:27 +02:00
if ( plat_smp_ops . init_per_cpu )
plat_smp_ops . init_per_cpu ( smp_processor_id ( ) ) ;
2015-10-14 14:38:02 +05:30
2015-12-17 12:22:21 +05:30
if ( machine_desc - > init_per_cpu )
machine_desc - > init_per_cpu ( smp_processor_id ( ) ) ;
2013-01-18 15:12:23 +05:30
# endif
2013-01-18 15:12:18 +05:30
}
/*
* " C " Entry point for any ARC ISR , called from low level vector handler
* @ irq is the vector number read from ICAUSE reg of on - chip intc
*/
2016-01-01 15:12:54 +05:30
void arch_do_IRQ ( unsigned int hwirq , struct pt_regs * regs )
2013-01-18 15:12:18 +05:30
{
2016-01-01 15:12:54 +05:30
handle_domain_irq ( NULL , hwirq , regs ) ;
2013-01-18 15:12:18 +05:30
}