Skip to content

Commit dd281e1

Browse files
chenhuacaiMarc Zyngier
authored andcommitted
irqchip: Add Loongson Extended I/O interrupt controller support
EIOINTC stands for "Extended I/O Interrupts" that described in Section 11.2 of "Loongson 3A5000 Processor Reference Manual". For more information please refer Documentation/loongarch/irq-chip-model.rst. Loongson-3A5000 has 4 cores per NUMA node, and each NUMA node has an EIOINTC; while Loongson-3C5000 has 16 cores per NUMA node, and each NUMA node has 4 EIOINTCs. In other words, 16 cores of one NUMA node in Loongson-3C5000 are organized in 4 groups, each group connects to an EIOINTC. We call the "group" here as an EIOINTC node, so each EIOINTC node always includes 4 cores (both in Loongson-3A5000 and Loongson- 3C5000). Co-developed-by: Jianmin Lv <lvjianmin@loongson.cn> Signed-off-by: Jianmin Lv <lvjianmin@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/1658314292-35346-12-git-send-email-lvjianmin@loongson.cn
1 parent 0858ed0 commit dd281e1

File tree

5 files changed

+408
-10
lines changed

5 files changed

+408
-10
lines changed

arch/loongarch/include/asm/irq.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,6 @@ extern struct acpi_vector_group msi_group[MAX_IO_PICS];
8787
extern int find_pch_pic(u32 gsi);
8888
extern int eiointc_get_node(int id);
8989

90-
static inline void eiointc_enable(void)
91-
{
92-
uint64_t misc;
93-
94-
misc = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
95-
misc |= IOCSR_MISC_FUNC_EXT_IOI_EN;
96-
iocsr_write64(misc, LOONGARCH_IOCSR_MISC_FUNC);
97-
}
98-
9990
struct acpi_madt_lio_pic;
10091
struct acpi_madt_eio_pic;
10192
struct acpi_madt_ht_pic;
@@ -107,7 +98,7 @@ struct irq_domain *loongarch_cpu_irq_init(void);
10798

10899
int liointc_acpi_init(struct irq_domain *parent,
109100
struct acpi_madt_lio_pic *acpi_liointc);
110-
struct irq_domain *eiointc_acpi_init(struct irq_domain *parent,
101+
int eiointc_acpi_init(struct irq_domain *parent,
111102
struct acpi_madt_eio_pic *acpi_eiointc);
112103

113104
struct irq_domain *htvec_acpi_init(struct irq_domain *parent,

drivers/irqchip/Kconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,16 @@ config LOONGSON_LIOINTC
555555
help
556556
Support for the Loongson Local I/O Interrupt Controller.
557557

558+
config LOONGSON_EIOINTC
559+
bool "Loongson Extend I/O Interrupt Controller"
560+
depends on LOONGARCH
561+
depends on MACH_LOONGSON64
562+
default MACH_LOONGSON64
563+
select IRQ_DOMAIN_HIERARCHY
564+
select GENERIC_IRQ_CHIP
565+
help
566+
Support for the Loongson3 Extend I/O Interrupt Vector Controller.
567+
558568
config LOONGSON_HTPIC
559569
bool "Loongson3 HyperTransport PIC Controller"
560570
depends on MACH_LOONGSON64 && MIPS

drivers/irqchip/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ obj-$(CONFIG_TI_SCI_INTR_IRQCHIP) += irq-ti-sci-intr.o
104104
obj-$(CONFIG_TI_SCI_INTA_IRQCHIP) += irq-ti-sci-inta.o
105105
obj-$(CONFIG_TI_PRUSS_INTC) += irq-pruss-intc.o
106106
obj-$(CONFIG_LOONGSON_LIOINTC) += irq-loongson-liointc.o
107+
obj-$(CONFIG_LOONGSON_EIOINTC) += irq-loongson-eiointc.o
107108
obj-$(CONFIG_LOONGSON_HTPIC) += irq-loongson-htpic.o
108109
obj-$(CONFIG_LOONGSON_HTVEC) += irq-loongson-htvec.o
109110
obj-$(CONFIG_LOONGSON_PCH_PIC) += irq-loongson-pch-pic.o

0 commit comments

Comments
 (0)