diff options
Diffstat (limited to 'arch/arm/include/asm/hardware')
| -rw-r--r-- | arch/arm/include/asm/hardware/entry-macro-gic.S | 60 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/gic.h | 26 | ||||
| -rw-r--r-- | arch/arm/include/asm/hardware/vic.h | 10 | 
3 files changed, 18 insertions, 78 deletions
diff --git a/arch/arm/include/asm/hardware/entry-macro-gic.S b/arch/arm/include/asm/hardware/entry-macro-gic.S deleted file mode 100644 index 74ebc803904..00000000000 --- a/arch/arm/include/asm/hardware/entry-macro-gic.S +++ /dev/null @@ -1,60 +0,0 @@ -/* - * arch/arm/include/asm/hardware/entry-macro-gic.S - * - * Low-level IRQ helper macros for GIC - * - * This file is licensed under  the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <asm/hardware/gic.h> - -#ifndef HAVE_GET_IRQNR_PREAMBLE -	.macro	get_irqnr_preamble, base, tmp -	ldr	\base, =gic_cpu_base_addr -	ldr	\base, [\base] -	.endm -#endif - -/* - * The interrupt numbering scheme is defined in the - * interrupt controller spec.  To wit: - * - * Interrupts 0-15 are IPI - * 16-31 are local.  We allow 30 to be used for the watchdog. - * 32-1020 are global - * 1021-1022 are reserved - * 1023 is "spurious" (no interrupt) - * - * A simple read from the controller will tell us the number of the highest - * priority enabled interrupt.  We then just need to check whether it is in the - * valid range for an IRQ (30-1020 inclusive). - */ - -	.macro  get_irqnr_and_base, irqnr, irqstat, base, tmp - -	ldr     \irqstat, [\base, #GIC_CPU_INTACK] -	/* bits 12-10 = src CPU, 9-0 = int # */ - -	ldr	\tmp, =1021 -	bic     \irqnr, \irqstat, #0x1c00 -	cmp     \irqnr, #15 -	cmpcc	\irqnr, \irqnr -	cmpne	\irqnr, \tmp -	cmpcs	\irqnr, \irqnr -	.endm - -/* We assume that irqstat (the raw value of the IRQ acknowledge - * register) is preserved from the macro above. - * If there is an IPI, we immediately signal end of interrupt on the - * controller, since this requires the original irqstat value which - * we won't easily be able to recreate later. - */ - -	.macro test_for_ipi, irqnr, irqstat, base, tmp -	bic	\irqnr, \irqstat, #0x1c00 -	cmp	\irqnr, #16 -	strcc	\irqstat, [\base, #GIC_CPU_EOI] -	cmpcs	\irqnr, \irqnr -	.endm diff --git a/arch/arm/include/asm/hardware/gic.h b/arch/arm/include/asm/hardware/gic.h index 3e91f22046f..4bdfe001869 100644 --- a/arch/arm/include/asm/hardware/gic.h +++ b/arch/arm/include/asm/hardware/gic.h @@ -36,30 +36,22 @@  #include <linux/irqdomain.h>  struct device_node; -extern void __iomem *gic_cpu_base_addr;  extern struct irq_chip gic_arch_extn; -void gic_init(unsigned int, int, void __iomem *, void __iomem *); +void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, +		    u32 offset);  int gic_of_init(struct device_node *node, struct device_node *parent);  void gic_secondary_init(unsigned int); +void gic_handle_irq(struct pt_regs *regs);  void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);  void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); -struct gic_chip_data { -	void __iomem *dist_base; -	void __iomem *cpu_base; -#ifdef CONFIG_CPU_PM -	u32 saved_spi_enable[DIV_ROUND_UP(1020, 32)]; -	u32 saved_spi_conf[DIV_ROUND_UP(1020, 16)]; -	u32 saved_spi_target[DIV_ROUND_UP(1020, 4)]; -	u32 __percpu *saved_ppi_enable; -	u32 __percpu *saved_ppi_conf; -#endif -#ifdef CONFIG_IRQ_DOMAIN -	struct irq_domain domain; -#endif -	unsigned int gic_irqs; -}; +static inline void gic_init(unsigned int nr, int start, +			    void __iomem *dist , void __iomem *cpu) +{ +	gic_init_bases(nr, start, dist, cpu, 0); +} +  #endif  #endif diff --git a/arch/arm/include/asm/hardware/vic.h b/arch/arm/include/asm/hardware/vic.h index 5d72550a809..f42ebd61959 100644 --- a/arch/arm/include/asm/hardware/vic.h +++ b/arch/arm/include/asm/hardware/vic.h @@ -41,7 +41,15 @@  #define VIC_PL192_VECT_ADDR		0xF00  #ifndef __ASSEMBLY__ +#include <linux/compiler.h> +#include <linux/types.h> + +struct device_node; +struct pt_regs; +  void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); -#endif +int vic_of_init(struct device_node *node, struct device_node *parent); +void vic_handle_irq(struct pt_regs *regs); +#endif /* __ASSEMBLY__ */  #endif  |