|
@@ -27,9 +27,18 @@
|
|
|
|
|
|
#define SUNXI_NMI_IRQ_BIT BIT(0)
|
|
|
|
|
|
-#define SUN6I_NMI_CTRL 0x00
|
|
|
-#define SUN6I_NMI_PENDING 0x04
|
|
|
-#define SUN6I_NMI_ENABLE 0x34
|
|
|
+#define SUN6I_R_INTC_CTRL 0x0c
|
|
|
+#define SUN6I_R_INTC_PENDING 0x10
|
|
|
+#define SUN6I_R_INTC_ENABLE 0x40
|
|
|
+
|
|
|
+/*
|
|
|
+ * For deprecated sun6i-a31-sc-nmi compatible.
|
|
|
+ * Registers are offset by 0x0c.
|
|
|
+ */
|
|
|
+#define SUN6I_R_INTC_NMI_OFFSET 0x0c
|
|
|
+#define SUN6I_NMI_CTRL (SUN6I_R_INTC_CTRL - SUN6I_R_INTC_NMI_OFFSET)
|
|
|
+#define SUN6I_NMI_PENDING (SUN6I_R_INTC_PENDING - SUN6I_R_INTC_NMI_OFFSET)
|
|
|
+#define SUN6I_NMI_ENABLE (SUN6I_R_INTC_ENABLE - SUN6I_R_INTC_NMI_OFFSET)
|
|
|
|
|
|
#define SUN7I_NMI_CTRL 0x00
|
|
|
#define SUN7I_NMI_PENDING 0x04
|
|
@@ -52,6 +61,12 @@ struct sunxi_sc_nmi_reg_offs {
|
|
|
u32 enable;
|
|
|
};
|
|
|
|
|
|
+static const struct sunxi_sc_nmi_reg_offs sun6i_r_intc_reg_offs __initconst = {
|
|
|
+ .ctrl = SUN6I_R_INTC_CTRL,
|
|
|
+ .pend = SUN6I_R_INTC_PENDING,
|
|
|
+ .enable = SUN6I_R_INTC_ENABLE,
|
|
|
+};
|
|
|
+
|
|
|
static const struct sunxi_sc_nmi_reg_offs sun6i_reg_offs __initconst = {
|
|
|
.ctrl = SUN6I_NMI_CTRL,
|
|
|
.pend = SUN6I_NMI_PENDING,
|
|
@@ -217,6 +232,14 @@ fail_irqd_remove:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int __init sun6i_r_intc_irq_init(struct device_node *node,
|
|
|
+ struct device_node *parent)
|
|
|
+{
|
|
|
+ return sunxi_sc_nmi_irq_init(node, &sun6i_r_intc_reg_offs);
|
|
|
+}
|
|
|
+IRQCHIP_DECLARE(sun6i_r_intc, "allwinner,sun6i-a31-r-intc",
|
|
|
+ sun6i_r_intc_irq_init);
|
|
|
+
|
|
|
static int __init sun6i_sc_nmi_irq_init(struct device_node *node,
|
|
|
struct device_node *parent)
|
|
|
{
|