Skip to content

Commit

Permalink
ARM: tegra: irq: Move legacy_irq.c into irq.c
Browse files Browse the repository at this point in the history
Now that irq.c is just an interface layer between the gic
and legacy_irq.c, move the contents of legacy_irq.c into
irq.c.

Signed-off-by: Colin Cross <ccross@android.com>
  • Loading branch information
Colin Cross authored and Will Deacon committed May 11, 2011
1 parent 4dda2d3 commit d1d8c66
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 183 deletions.
2 changes: 1 addition & 1 deletion arch/arm/mach-tegra/Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
obj-y += common.o
obj-y += devices.o
obj-y += io.o
obj-y += irq.o legacy_irq.o
obj-y += irq.o
obj-y += clock.o
obj-y += timer.o
obj-y += gpio.o
Expand Down
32 changes: 0 additions & 32 deletions arch/arm/mach-tegra/include/mach/legacy_irq.h

This file was deleted.

77 changes: 65 additions & 12 deletions arch/arm/mach-tegra/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,49 +18,102 @@
*/

#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/io.h>

#include <asm/hardware/gic.h>

#include <mach/iomap.h>
#include <mach/legacy_irq.h>

#include "board.h"

#define INT_SYS_NR (INT_GPIO_BASE - INT_PRI_BASE)
#define INT_SYS_SZ (INT_SEC_BASE - INT_PRI_BASE)
#define PPI_NR ((INT_SYS_NR+INT_SYS_SZ-1)/INT_SYS_SZ)

#define ICTLR_CPU_IEP_VFIQ 0x08
#define ICTLR_CPU_IEP_FIR 0x14
#define ICTLR_CPU_IEP_FIR_SET 0x18
#define ICTLR_CPU_IEP_FIR_CLR 0x1c

#define ICTLR_CPU_IER 0x20
#define ICTLR_CPU_IER_SET 0x24
#define ICTLR_CPU_IER_CLR 0x28
#define ICTLR_CPU_IEP_CLASS 0x2C

#define ICTLR_COP_IER 0x30
#define ICTLR_COP_IER_SET 0x34
#define ICTLR_COP_IER_CLR 0x38
#define ICTLR_COP_IEP_CLASS 0x3c

#define NUM_ICTLRS 4
#define FIRST_LEGACY_IRQ 32

static void __iomem *ictlr_reg_base[] = {
IO_ADDRESS(TEGRA_PRIMARY_ICTLR_BASE),
IO_ADDRESS(TEGRA_SECONDARY_ICTLR_BASE),
IO_ADDRESS(TEGRA_TERTIARY_ICTLR_BASE),
IO_ADDRESS(TEGRA_QUATERNARY_ICTLR_BASE),
};

static inline void tegra_irq_write_mask(unsigned int irq, unsigned long reg)
{
void __iomem *base;
u32 mask;

BUG_ON(irq < FIRST_LEGACY_IRQ ||
irq >= FIRST_LEGACY_IRQ + NUM_ICTLRS * 32);

base = ictlr_reg_base[(irq - FIRST_LEGACY_IRQ) / 32];
mask = BIT((irq - FIRST_LEGACY_IRQ) % 32);

__raw_writel(mask, base + reg);
}

static void tegra_mask(struct irq_data *d)
{
if (d->irq >= 32)
tegra_legacy_mask_irq(d->irq);
if (d->irq < FIRST_LEGACY_IRQ)
return;

tegra_irq_write_mask(d->irq, ICTLR_CPU_IER_CLR);
}

static void tegra_unmask(struct irq_data *d)
{
if (d->irq >= 32)
tegra_legacy_unmask_irq(d->irq);
if (d->irq < FIRST_LEGACY_IRQ)
return;

tegra_irq_write_mask(d->irq, ICTLR_CPU_IER_SET);
}

static void tegra_ack(struct irq_data *d)
{
if (d->irq >= 32)
tegra_legacy_force_irq_clr(d->irq);
if (d->irq < FIRST_LEGACY_IRQ)
return;

tegra_irq_write_mask(d->irq, ICTLR_CPU_IEP_FIR_CLR);
}

static int tegra_retrigger(struct irq_data *d)
{
if (d->irq < 32)
if (d->irq < FIRST_LEGACY_IRQ)
return 0;

tegra_legacy_force_irq_set(d->irq);
tegra_irq_write_mask(d->irq, ICTLR_CPU_IEP_FIR_SET);

return 1;
}

void __init tegra_init_irq(void)
{
tegra_init_legacy_irq();
int i;

for (i = 0; i < NUM_ICTLRS; i++) {
void __iomem *ictlr = ictlr_reg_base[i];
writel(~0, ictlr + ICTLR_CPU_IER_CLR);
writel(0, ictlr + ICTLR_CPU_IEP_CLASS);
}

gic_arch_extn.irq_ack = tegra_ack;
gic_arch_extn.irq_mask = tegra_mask;
Expand Down
138 changes: 0 additions & 138 deletions arch/arm/mach-tegra/legacy_irq.c

This file was deleted.

0 comments on commit d1d8c66

Please sign in to comment.