Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / sh / boards / mach-sdk7786 / irq.c
diff --git a/kernel/arch/sh/boards/mach-sdk7786/irq.c b/kernel/arch/sh/boards/mach-sdk7786/irq.c
new file mode 100644 (file)
index 0000000..46943a0
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * SDK7786 FPGA IRQ Controller Support.
+ *
+ * Copyright (C) 2010  Matt Fleming
+ * Copyright (C) 2010  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/irq.h>
+#include <mach/fpga.h>
+#include <mach/irq.h>
+
+enum {
+       ATA_IRQ_BIT             = 1,
+       SPI_BUSY_BIT            = 2,
+       LIRQ5_BIT               = 3,
+       LIRQ6_BIT               = 4,
+       LIRQ7_BIT               = 5,
+       LIRQ8_BIT               = 6,
+       KEY_IRQ_BIT             = 7,
+       PEN_IRQ_BIT             = 8,
+       ETH_IRQ_BIT             = 9,
+       RTC_ALARM_BIT           = 10,
+       CRYSTAL_FAIL_BIT        = 12,
+       ETH_PME_BIT             = 14,
+};
+
+void __init sdk7786_init_irq(void)
+{
+       unsigned int tmp;
+
+       /* Enable priority encoding for all IRLs */
+       fpga_write_reg(fpga_read_reg(INTMSR) | 0x0303, INTMSR);
+
+       /* Clear FPGA interrupt status registers */
+       fpga_write_reg(0x0000, INTASR);
+       fpga_write_reg(0x0000, INTBSR);
+
+       /* Unmask FPGA interrupts */
+       tmp = fpga_read_reg(INTAMR);
+       tmp &= ~(1 << ETH_IRQ_BIT);
+       fpga_write_reg(tmp, INTAMR);
+
+       plat_irq_setup_pins(IRQ_MODE_IRL7654_MASK);
+       plat_irq_setup_pins(IRQ_MODE_IRL3210_MASK);
+}