#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/irqchip.h>
#include <linux/irqdomain.h>
#include <linux/irqchip/irq-bcm2836.h>
#include <asm/exception.h>
struct bcm2836_arm_irqchip_intc {
struct irq_domain *domain;
static struct bcm2836_arm_irqchip_intc intc __read_mostly;
static void bcm2836_arm_irqchip_mask_per_cpu_irq(unsigned int reg_offset,
void __iomem *reg = intc.base + reg_offset + 4 * cpu;
writel(readl(reg) & ~BIT(bit), reg);
static void bcm2836_arm_irqchip_unmask_per_cpu_irq(unsigned int reg_offset,
void __iomem *reg = intc.base + reg_offset + 4 * cpu;
writel(readl(reg) | BIT(bit), reg);
static void bcm2836_arm_irqchip_mask_timer_irq(struct irq_data *d)
bcm2836_arm_irqchip_mask_per_cpu_irq(LOCAL_TIMER_INT_CONTROL0,
d->hwirq - LOCAL_IRQ_CNTPSIRQ,
static void bcm2836_arm_irqchip_unmask_timer_irq(struct irq_data *d)
bcm2836_arm_irqchip_unmask_per_cpu_irq(LOCAL_TIMER_INT_CONTROL0,
d->hwirq - LOCAL_IRQ_CNTPSIRQ,
static struct irq_chip bcm2836_arm_irqchip_timer = {
.irq_mask = bcm2836_arm_irqchip_mask_timer_irq,
.irq_unmask = bcm2836_arm_irqchip_unmask_timer_irq,
static void bcm2836_arm_irqchip_mask_pmu_irq(struct irq_data *d)