metag: Internal and external irqchips
Meta core internal interrupts (from HWSTATMETA and friends) are vectored onto the TR1 core trigger for the current thread. This is demultiplexed in irq-metag.c to individual Linux IRQs for each internal interrupt. External SoC interrupts (from HWSTATEXT and friends) are vectored onto the TR2 core trigger for the current thread. This is demultiplexed in irq-metag-ext.c to individual Linux IRQs for each external SoC interrupt. The external irqchip has devicetree bindings for configuring the number of irq banks and the type of masking available. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Rob Landley <rob@landley.net> Cc: Dom Cobley <popcornmix@gmail.com> Cc: Simon Arlott <simon@fire.lp0.eu> Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Maxime Ripard <maxime.ripard@free-electrons.com> Cc: devicetree-discuss@lists.ozlabs.org Cc: linux-doc@vger.kernel.org
This commit is contained in:
parent
63047ea360
commit
5698c50d9d
8 changed files with 1359 additions and 0 deletions
33
include/linux/irqchip/metag-ext.h
Normal file
33
include/linux/irqchip/metag-ext.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright (C) 2012 Imagination Technologies
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_IRQCHIP_METAG_EXT_H_
|
||||
#define _LINUX_IRQCHIP_METAG_EXT_H_
|
||||
|
||||
struct irq_data;
|
||||
struct platform_device;
|
||||
|
||||
/* called from core irq code at init */
|
||||
int init_external_IRQ(void);
|
||||
|
||||
/*
|
||||
* called from SoC init_irq() callback to dynamically indicate the lack of
|
||||
* HWMASKEXT registers.
|
||||
*/
|
||||
void meta_intc_no_mask(void);
|
||||
|
||||
/*
|
||||
* These allow SoCs to specialise the interrupt controller from their init_irq
|
||||
* callbacks.
|
||||
*/
|
||||
|
||||
extern struct irq_chip meta_intc_edge_chip;
|
||||
extern struct irq_chip meta_intc_level_chip;
|
||||
|
||||
/* this should be called in the mask callback */
|
||||
void meta_intc_mask_irq_simple(struct irq_data *data);
|
||||
/* this should be called in the unmask callback */
|
||||
void meta_intc_unmask_irq_simple(struct irq_data *data);
|
||||
|
||||
#endif /* _LINUX_IRQCHIP_METAG_EXT_H_ */
|
24
include/linux/irqchip/metag.h
Normal file
24
include/linux/irqchip/metag.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2011 Imagination Technologies
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_IRQCHIP_METAG_H_
|
||||
#define _LINUX_IRQCHIP_METAG_H_
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
||||
#ifdef CONFIG_METAG_PERFCOUNTER_IRQS
|
||||
extern int init_internal_IRQ(void);
|
||||
extern int internal_irq_map(unsigned int hw);
|
||||
#else
|
||||
static inline int init_internal_IRQ(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int internal_irq_map(unsigned int hw)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IRQCHIP_METAG_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue