* [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT
@ 2026-01-13 8:59 Huacai Chen
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
` (6 more replies)
0 siblings, 7 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
Linux-6.19 adds basic LoongArch32 support:
https://git.kernel.org/torvalds/c/9551a26f17d9445eed497bd7c639d48dfc3c0af4
On the basis, this series adjust the LoongArch-specific irqchip drivers
for both 32BIT and 64BIT.
V1 -> V2:
1. Use if IS_ENABLED() instead of ifdeffery.
2. Add Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>.
V2 -> V3:
1. Still use ifdeffery to avoid build errors.
Jiaxun Yang & Huacai Chen (7):
irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT.
irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT.
irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT.
irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT.
irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT.
irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT.
irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT.
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/Kconfig | 11 +++++------
drivers/irqchip/irq-loongarch-avec.c | 14 +++++++------
drivers/irqchip/irq-loongson-eiointc.c | 36 ++++++++++++++++++++++++++++------
drivers/irqchip/irq-loongson-htvec.c | 6 +++---
drivers/irqchip/irq-loongson-liointc.c | 5 +++--
drivers/irqchip/irq-loongson-pch-msi.c | 7 ++++---
drivers/irqchip/irq-loongson-pch-pic.c | 7 ++++---
7 files changed, 57 insertions(+), 29 deletions(-)
---
2.27.0
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 2/7] irqchip/loongson-liointc: " Huacai Chen
` (5 subsequent siblings)
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
csr_read64() is only available on 64BIT LoongArch platform, so use
recently added adaptive csr_read() instead, so as to make the driver
work on both 32BIT and 64BIT platform.
BTW, make avecintc_enable() be a no-op since it is only needed by 64BIT
platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongarch-avec.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index ba556c008cf3..fb8efde95393 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -58,11 +58,13 @@ struct avecintc_data {
static inline void avecintc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
u64 value;
value = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
value |= IOCSR_MISC_FUNC_AVEC_EN;
iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static inline void avecintc_ack_irq(struct irq_data *d)
@@ -167,7 +169,7 @@ void complete_irq_moving(void)
struct pending_list *plist = this_cpu_ptr(&pending_list);
struct avecintc_data *adata, *tdata;
int cpu, vector, bias;
- uint64_t isr;
+ unsigned long isr;
guard(raw_spinlock)(&loongarch_avec.lock);
@@ -177,16 +179,16 @@ void complete_irq_moving(void)
bias = vector / VECTORS_PER_REG;
switch (bias) {
case 0:
- isr = csr_read64(LOONGARCH_CSR_ISR0);
+ isr = csr_read(LOONGARCH_CSR_ISR0);
break;
case 1:
- isr = csr_read64(LOONGARCH_CSR_ISR1);
+ isr = csr_read(LOONGARCH_CSR_ISR1);
break;
case 2:
- isr = csr_read64(LOONGARCH_CSR_ISR2);
+ isr = csr_read(LOONGARCH_CSR_ISR2);
break;
case 3:
- isr = csr_read64(LOONGARCH_CSR_ISR3);
+ isr = csr_read(LOONGARCH_CSR_ISR3);
break;
}
@@ -234,7 +236,7 @@ static void avecintc_irq_dispatch(struct irq_desc *desc)
chained_irq_enter(chip, desc);
while (true) {
- unsigned long vector = csr_read64(LOONGARCH_CSR_IRR);
+ unsigned long vector = csr_read(LOONGARCH_CSR_IRR);
if (vector & IRR_INVALID_MASK)
break;
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 2/7] irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type tip-bot2 for Huacai Chen
2026-01-18 13:41 ` [tip: irq/drivers] irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 3/7] irqchip/loongson-eiointc: " Huacai Chen
` (4 subsequent siblings)
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_liointc->address to it. This can only work on
64BIT platform because its type is u64, so cast it to phys_addr_t and
then the driver works on both 32BIT and 64BIT platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongson-liointc.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loongson-liointc.c
index 0033c2188abc..f001a34878ba 100644
--- a/drivers/irqchip/irq-loongson-liointc.c
+++ b/drivers/irqchip/irq-loongson-liointc.c
@@ -394,8 +394,9 @@ static int __init acpi_cascade_irqdomain_init(void)
int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic *acpi_liointc)
{
- int ret;
+ phys_addr_t addr = acpi_liointc->address;
struct fwnode_handle *domain_handle;
+ int ret;
parent_int_map[0] = acpi_liointc->cascade_map[0];
parent_int_map[1] = acpi_liointc->cascade_map[1];
@@ -403,7 +404,7 @@ int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic
parent_irq[0] = irq_create_mapping(parent, acpi_liointc->cascade[0]);
parent_irq[1] = irq_create_mapping(parent, acpi_liointc->cascade[1]);
- domain_handle = irq_domain_alloc_fwnode(&acpi_liointc->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 3/7] irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
2026-01-13 8:59 ` [PATCH V3 2/7] irqchip/loongson-liointc: " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 4/7] irqchip/loongson-htvec: " Huacai Chen
` (3 subsequent siblings)
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
iocsr_read64()/iocsr_write64() are only available on 64BIT LoongArch
platform, so add and use a pair of helpers, i.e. read_isr()/write_isr()
instead, so as to make the driver work on both 32BIT and 64BIT platform.
BTW, make eiointc_enable() be a no-op since it is only needed by 64BIT
platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongson-eiointc.c | 36 +++++++++++++++++++++-----
1 file changed, 30 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index ad2105685b48..e2eb4cd27f78 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -37,9 +37,9 @@
#define EXTIOI_ENABLE_INT_ENCODE BIT(2)
#define EXTIOI_ENABLE_CPU_ENCODE BIT(3)
-#define VEC_REG_COUNT 4
-#define VEC_COUNT_PER_REG 64
-#define VEC_COUNT (VEC_REG_COUNT * VEC_COUNT_PER_REG)
+#define VEC_COUNT 256
+#define VEC_COUNT_PER_REG BITS_PER_LONG
+#define VEC_REG_COUNT (VEC_COUNT / BITS_PER_LONG)
#define VEC_REG_IDX(irq_id) ((irq_id) / VEC_COUNT_PER_REG)
#define VEC_REG_BIT(irq_id) ((irq_id) % VEC_COUNT_PER_REG)
#define EIOINTC_ALL_ENABLE 0xffffffff
@@ -85,11 +85,13 @@ static struct eiointc_priv *eiointc_priv[MAX_IO_PICS];
static void eiointc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
uint64_t misc;
misc = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
misc |= IOCSR_MISC_FUNC_EXT_IOI_EN;
iocsr_write64(misc, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static int cpu_to_eio_node(int cpu)
@@ -281,12 +283,34 @@ static int eiointc_router_init(unsigned int cpu)
return 0;
}
+#if VEC_COUNT_PER_REG == 32
+static unsigned long read_isr(int i)
+{
+ return iocsr_read32(EIOINTC_REG_ISR + (i << 2));
+}
+
+static void write_isr(int i, unsigned long val)
+{
+ iocsr_write32(val, EIOINTC_REG_ISR + (i << 2));
+}
+#else
+static unsigned long read_isr(int i)
+{
+ return iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+}
+
+static void write_isr(int i, unsigned long val)
+{
+ iocsr_write64(val, EIOINTC_REG_ISR + (i << 3));
+}
+#endif
+
static void eiointc_irq_dispatch(struct irq_desc *desc)
{
struct eiointc_ip_route *info = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc);
bool handled = false;
- u64 pending;
+ unsigned long pending;
int i;
chained_irq_enter(chip, desc);
@@ -299,14 +323,14 @@ static void eiointc_irq_dispatch(struct irq_desc *desc)
* read ISR for these 64 interrupt vectors rather than all vectors
*/
for (i = info->start; i < info->end; i++) {
- pending = iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+ pending = read_isr(i);
/* Skip handling if pending bitmap is zero */
if (!pending)
continue;
/* Clear the IRQs */
- iocsr_write64(pending, EIOINTC_REG_ISR + (i << 3));
+ write_isr(i, pending);
while (pending) {
int bit = __ffs(pending);
int irq = bit + VEC_COUNT_PER_REG * i;
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 4/7] irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
` (2 preceding siblings ...)
2026-01-13 8:59 ` [PATCH V3 3/7] irqchip/loongson-eiointc: " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 5/7] irqchip/loongson-pch-msi: " Huacai Chen
` (2 subsequent siblings)
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_htvec->address to it. This can only work on 64BIT
platform because its type is u64, so cast it to phys_addr_t and then the
driver works on both 32BIT and 64BIT platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongson-htvec.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c
index d2be8e954e92..03c3992b39c8 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -298,8 +298,8 @@ static int __init acpi_cascade_irqdomain_init(void)
int __init htvec_acpi_init(struct irq_domain *parent,
struct acpi_madt_ht_pic *acpi_htvec)
{
- int i, ret;
- int num_parents, parent_irq[8];
+ int i, ret, num_parents, parent_irq[8];
+ phys_addr_t addr = acpi_htvec->address;
struct fwnode_handle *domain_handle;
if (!acpi_htvec)
@@ -307,7 +307,7 @@ int __init htvec_acpi_init(struct irq_domain *parent,
num_parents = HTVEC_MAX_PARENT_IRQ;
- domain_handle = irq_domain_alloc_fwnode(&acpi_htvec->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 5/7] irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
` (3 preceding siblings ...)
2026-01-13 8:59 ` [PATCH V3 4/7] irqchip/loongson-htvec: " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 6/7] irqchip/loongson-pch-pic: " Huacai Chen
2026-01-13 8:59 ` [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT Huacai Chen
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_pchmsi->msg_address to it. This can only work on
64BIT platform because its type is u64, so cast it to phys_addr_t and
then the driver works on both 32BIT and 64BIT platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongson-pch-msi.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index 4aedc9b90ff7..8500662bdb33 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -263,11 +263,12 @@ struct fwnode_handle *get_pch_msi_handle(int pci_segment)
int __init pch_msi_acpi_init(struct irq_domain *parent, struct acpi_madt_msi_pic *acpi_pchmsi)
{
- int ret;
+ phys_addr_t msg_address = acpi_pchmsi->msg_address;
struct fwnode_handle *domain_handle;
+ int ret;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchmsi->msg_address);
- ret = pch_msi_init(acpi_pchmsi->msg_address, acpi_pchmsi->start,
+ domain_handle = irq_domain_alloc_fwnode(&msg_address);
+ ret = pch_msi_init(msg_address, acpi_pchmsi->start,
acpi_pchmsi->count, parent, domain_handle);
if (ret < 0)
irq_domain_free_fwnode(domain_handle);
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 6/7] irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
` (4 preceding siblings ...)
2026-01-13 8:59 ` [PATCH V3 5/7] irqchip/loongson-pch-msi: " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT Huacai Chen
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_pchpic->address to it. This can only work on
64BIT platform because its type is u64, so cast it to phys_addr_t and
then the driver works on both 32BIT and 64BIT platform.
BTW, use readl() to get vec_count because readq() is only available on
64BIT platform.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/irq-loongson-pch-pic.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c
index c6b369a974a7..2ac7e3245b72 100644
--- a/drivers/irqchip/irq-loongson-pch-pic.c
+++ b/drivers/irqchip/irq-loongson-pch-pic.c
@@ -343,7 +343,7 @@ static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base,
priv->table[i] = PIC_UNDEF_VECTOR;
priv->ht_vec_base = vec_base;
- priv->vec_count = ((readq(priv->base) >> 48) & 0xff) + 1;
+ priv->vec_count = ((readl(priv->base + 4) >> 16) & 0xff) + 1;
priv->gsi_base = gsi_base;
priv->pic_domain = irq_domain_create_hierarchy(parent_domain, 0,
@@ -449,13 +449,14 @@ static int __init acpi_cascade_irqdomain_init(void)
int __init pch_pic_acpi_init(struct irq_domain *parent,
struct acpi_madt_bio_pic *acpi_pchpic)
{
- int ret;
+ phys_addr_t addr = acpi_pchpic->address;
struct fwnode_handle *domain_handle;
+ int ret;
if (find_pch_pic(acpi_pchpic->gsi_base) >= 0)
return 0;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchpic->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
` (5 preceding siblings ...)
2026-01-13 8:59 ` [PATCH V3 6/7] irqchip/loongson-pch-pic: " Huacai Chen
@ 2026-01-13 8:59 ` Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
6 siblings, 2 replies; 23+ messages in thread
From: Huacai Chen @ 2026-01-13 8:59 UTC (permalink / raw)
To: Thomas Gleixner
Cc: loongarch, linux-kernel, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen
All LoongArch irqchip drivers are adjusted, allow them be built on both
32BIT and 64BIT platforms.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/irqchip/Kconfig | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index f334f49c9791..270f1c4783e3 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -698,7 +698,7 @@ config IRQ_LOONGARCH_CPU
config LOONGSON_LIOINTC
bool "Loongson Local I/O Interrupt Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default y
select IRQ_DOMAIN
select GENERIC_IRQ_CHIP
@@ -708,7 +708,6 @@ config LOONGSON_LIOINTC
config LOONGSON_EIOINTC
bool "Loongson Extend I/O Interrupt Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select GENERIC_IRQ_CHIP
@@ -726,7 +725,7 @@ config LOONGSON_HTPIC
config LOONGSON_HTVEC
bool "Loongson HyperTransport Interrupt Vector Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
@@ -734,7 +733,7 @@ config LOONGSON_HTVEC
config LOONGSON_PCH_PIC
bool "Loongson PCH PIC Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select IRQ_FASTEOI_HIERARCHY_HANDLERS
@@ -743,7 +742,7 @@ config LOONGSON_PCH_PIC
config LOONGSON_PCH_MSI
bool "Loongson PCH MSI Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
depends on PCI
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
@@ -755,7 +754,7 @@ config LOONGSON_PCH_MSI
config LOONGSON_PCH_LPC
bool "Loongson PCH LPC Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
--
2.47.3
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT Huacai Chen
@ 2026-01-18 10:02 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:02 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 03e1c81f05240354921b15806e6b8db5f75198c1
Gitweb: https://git.kernel.org/tip/03e1c81f05240354921b15806e6b8db5f75198c1
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:40 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:02 +01:00
irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT
All LoongArch irqchip drivers are adjusted, allow them to be built on both
32BIT and 64BIT platforms.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-8-chenhuacai@loongson.cn
---
drivers/irqchip/Kconfig | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 118d0c1..f07b00d 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -706,7 +706,7 @@ config IRQ_LOONGARCH_CPU
config LOONGSON_LIOINTC
bool "Loongson Local I/O Interrupt Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default y
select IRQ_DOMAIN
select GENERIC_IRQ_CHIP
@@ -716,7 +716,6 @@ config LOONGSON_LIOINTC
config LOONGSON_EIOINTC
bool "Loongson Extend I/O Interrupt Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select GENERIC_IRQ_CHIP
@@ -734,7 +733,7 @@ config LOONGSON_HTPIC
config LOONGSON_HTVEC
bool "Loongson HyperTransport Interrupt Vector Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
@@ -742,7 +741,7 @@ config LOONGSON_HTVEC
config LOONGSON_PCH_PIC
bool "Loongson PCH PIC Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select IRQ_FASTEOI_HIERARCHY_HANDLERS
@@ -751,7 +750,7 @@ config LOONGSON_PCH_PIC
config LOONGSON_PCH_MSI
bool "Loongson PCH MSI Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
depends on PCI
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
@@ -763,7 +762,7 @@ config LOONGSON_PCH_MSI
config LOONGSON_PCH_LPC
bool "Loongson PCH LPC Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 6/7] irqchip/loongson-pch-pic: " Huacai Chen
@ 2026-01-18 10:02 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:02 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 6e419473461bda5be6888de436d89753c1d260b3
Gitweb: https://git.kernel.org/tip/6e419473461bda5be6888de436d89753c1d260b3
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:39 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:02 +01:00
irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_pchpic->address to it. This can only work on
64BIT platform because its type is u64, so cast it to phys_addr_t and
then the driver works on both 32BIT and 64BIT platforms.
Also use readl() to read vec_count because readq() is only available on
64BIT platform.
[ tglx: Make the cast explicit and use the casted address as argument for
pch_pic_init() which takes a phys_addr_t as well. Fixup coding
style. More sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-7-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-pch-pic.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c
index c6b369a..23f94cd 100644
--- a/drivers/irqchip/irq-loongson-pch-pic.c
+++ b/drivers/irqchip/irq-loongson-pch-pic.c
@@ -343,7 +343,7 @@ static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base,
priv->table[i] = PIC_UNDEF_VECTOR;
priv->ht_vec_base = vec_base;
- priv->vec_count = ((readq(priv->base) >> 48) & 0xff) + 1;
+ priv->vec_count = ((readl(priv->base + 4) >> 16) & 0xff) + 1;
priv->gsi_base = gsi_base;
priv->pic_domain = irq_domain_create_hierarchy(parent_domain, 0,
@@ -446,23 +446,23 @@ static int __init acpi_cascade_irqdomain_init(void)
return 0;
}
-int __init pch_pic_acpi_init(struct irq_domain *parent,
- struct acpi_madt_bio_pic *acpi_pchpic)
+int __init pch_pic_acpi_init(struct irq_domain *parent, struct acpi_madt_bio_pic *acpi_pchpic)
{
- int ret;
+ phys_addr_t addr = (physaddr_t)acpi_pchpic->address;
struct fwnode_handle *domain_handle;
+ int ret;
if (find_pch_pic(acpi_pchpic->gsi_base) >= 0)
return 0;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchpic->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
}
- ret = pch_pic_init(acpi_pchpic->address, acpi_pchpic->size,
- 0, parent, domain_handle, acpi_pchpic->gsi_base);
+ ret = pch_pic_init(addr, acpi_pchpic->size, 0, parent,
+ domain_handle, acpi_pchpic->gsi_base);
if (ret < 0) {
irq_domain_free_fwnode(domain_handle);
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 5/7] irqchip/loongson-pch-msi: " Huacai Chen
@ 2026-01-18 10:03 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: f2d406614b74dd8adad8291a1687357377ff050d
Gitweb: https://git.kernel.org/tip/f2d406614b74dd8adad8291a1687357377ff050d
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:38 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:02 +01:00
irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passe acpi_pchmsi->msg_address to it.
This can only work on 64BIT platform because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platform.
[ tglx: Make the cast explicit and fixup coding style. ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-6-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-pch-msi.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index 4aedc9b..91c856c 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -263,12 +263,13 @@ struct fwnode_handle *get_pch_msi_handle(int pci_segment)
int __init pch_msi_acpi_init(struct irq_domain *parent, struct acpi_madt_msi_pic *acpi_pchmsi)
{
- int ret;
+ phys_addr_t msg_address = (phys_addr_t)acpi_pchmsi->msg_address;
struct fwnode_handle *domain_handle;
+ int ret;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchmsi->msg_address);
- ret = pch_msi_init(acpi_pchmsi->msg_address, acpi_pchmsi->start,
- acpi_pchmsi->count, parent, domain_handle);
+ domain_handle = irq_domain_alloc_fwnode(&msg_address);
+ ret = pch_msi_init(msg_address, acpi_pchmsi->start, acpi_pchmsi->count,
+ parent, domain_handle);
if (ret < 0)
irq_domain_free_fwnode(domain_handle);
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 4/7] irqchip/loongson-htvec: " Huacai Chen
@ 2026-01-18 10:03 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: b74d64e65b775ab05efe7bb4a6ca1b4edb923351
Gitweb: https://git.kernel.org/tip/b74d64e65b775ab05efe7bb4a6ca1b4edb923351
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:37 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:02 +01:00
irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passes acpi_htvec->address to it.
This can only work on 64BIT platform because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platforms.
[ tglx: Dereference _after_ the NULL pointer check, make the cast explicit
and use the casted address as argument for htvec_init() which takes
a phys_addr_t as well. Sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-5-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-htvec.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c
index d2be8e9..5a3339d 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -295,19 +295,19 @@ static int __init acpi_cascade_irqdomain_init(void)
return 0;
}
-int __init htvec_acpi_init(struct irq_domain *parent,
- struct acpi_madt_ht_pic *acpi_htvec)
+int __init htvec_acpi_init(struct irq_domain *parent, struct acpi_madt_ht_pic *acpi_htvec)
{
- int i, ret;
- int num_parents, parent_irq[8];
+ int i, ret, num_parents, parent_irq[8];
struct fwnode_handle *domain_handle;
+ phys_addr_t addr;
if (!acpi_htvec)
return -EINVAL;
num_parents = HTVEC_MAX_PARENT_IRQ;
+ addr = (phys_addr_t)acpi_htvec->address;
- domain_handle = irq_domain_alloc_fwnode(&acpi_htvec->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
@@ -317,9 +317,7 @@ int __init htvec_acpi_init(struct irq_domain *parent,
for (i = 0; i < HTVEC_MAX_PARENT_IRQ; i++)
parent_irq[i] = irq_create_mapping(parent, acpi_htvec->cascade[i]);
- ret = htvec_init(acpi_htvec->address, acpi_htvec->size,
- num_parents, parent_irq, domain_handle);
-
+ ret = htvec_init(addr, acpi_htvec->size, num_parents, parent_irq, domain_handle);
if (ret == 0)
ret = acpi_cascade_irqdomain_init();
else
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 3/7] irqchip/loongson-eiointc: " Huacai Chen
@ 2026-01-18 10:03 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: c7f2d13b35333b5fb8e7007513c0f778356b4d82
Gitweb: https://git.kernel.org/tip/c7f2d13b35333b5fb8e7007513c0f778356b4d82
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:36 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:01 +01:00
irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
iocsr_read64()/iocsr_write64() are only available on 64BIT LoongArch
platform, so add and use a pair of helpers, i.e. read_isr()/write_isr()
instead to make the driver work on both 32BIT and 64BIT platforms.
This makes eoiintc_enable() a no-op for 32-bit as it is only required on
64-bit systems.
[ tglx: Make the helpers inline and fixup the variable declaration order ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-4-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-eiointc.c | 36 ++++++++++++++++++++-----
1 file changed, 30 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index ad21056..37e7e1f 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -37,9 +37,9 @@
#define EXTIOI_ENABLE_INT_ENCODE BIT(2)
#define EXTIOI_ENABLE_CPU_ENCODE BIT(3)
-#define VEC_REG_COUNT 4
-#define VEC_COUNT_PER_REG 64
-#define VEC_COUNT (VEC_REG_COUNT * VEC_COUNT_PER_REG)
+#define VEC_COUNT 256
+#define VEC_COUNT_PER_REG BITS_PER_LONG
+#define VEC_REG_COUNT (VEC_COUNT / BITS_PER_LONG)
#define VEC_REG_IDX(irq_id) ((irq_id) / VEC_COUNT_PER_REG)
#define VEC_REG_BIT(irq_id) ((irq_id) % VEC_COUNT_PER_REG)
#define EIOINTC_ALL_ENABLE 0xffffffff
@@ -85,11 +85,13 @@ static struct eiointc_priv *eiointc_priv[MAX_IO_PICS];
static void eiointc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
uint64_t misc;
misc = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
misc |= IOCSR_MISC_FUNC_EXT_IOI_EN;
iocsr_write64(misc, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static int cpu_to_eio_node(int cpu)
@@ -281,12 +283,34 @@ static int eiointc_router_init(unsigned int cpu)
return 0;
}
+#if VEC_COUNT_PER_REG == 32
+static inline unsigned long read_isr(int i)
+{
+ return iocsr_read32(EIOINTC_REG_ISR + (i << 2));
+}
+
+static inline void write_isr(int i, unsigned long val)
+{
+ iocsr_write32(val, EIOINTC_REG_ISR + (i << 2));
+}
+#else
+static inline unsigned long read_isr(int i)
+{
+ return iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+}
+
+static inline void write_isr(int i, unsigned long val)
+{
+ iocsr_write64(val, EIOINTC_REG_ISR + (i << 3));
+}
+#endif
+
static void eiointc_irq_dispatch(struct irq_desc *desc)
{
struct eiointc_ip_route *info = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc);
+ unsigned long pending;
bool handled = false;
- u64 pending;
int i;
chained_irq_enter(chip, desc);
@@ -299,14 +323,14 @@ static void eiointc_irq_dispatch(struct irq_desc *desc)
* read ISR for these 64 interrupt vectors rather than all vectors
*/
for (i = info->start; i < info->end; i++) {
- pending = iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+ pending = read_isr(i);
/* Skip handling if pending bitmap is zero */
if (!pending)
continue;
/* Clear the IRQs */
- iocsr_write64(pending, EIOINTC_REG_ISR + (i << 3));
+ write_isr(i, pending);
while (pending) {
int bit = __ffs(pending);
int irq = bit + VEC_COUNT_PER_REG * i;
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
2026-01-13 8:59 ` [PATCH V3 2/7] irqchip/loongson-liointc: " Huacai Chen
@ 2026-01-18 10:03 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` [tip: irq/drivers] irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 2d12143e5983b9f037f439ae994c454337ef889b
Gitweb: https://git.kernel.org/tip/2d12143e5983b9f037f439ae994c454337ef889b
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:35 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:01 +01:00
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passes acpi_liointc->address to it.
This can only work on 64BIT platforms because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platform.
[ tglx: Make the cast explicit and use the casted address as argument for
liointc_init() which takes a phys_addr_t as well. Sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-3-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-liointc.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loongson-liointc.c
index 0033c21..551597e 100644
--- a/drivers/irqchip/irq-loongson-liointc.c
+++ b/drivers/irqchip/irq-loongson-liointc.c
@@ -394,8 +394,9 @@ static int __init acpi_cascade_irqdomain_init(void)
int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic *acpi_liointc)
{
- int ret;
+ phys_addr_t addr = (phys_addr_t)acpi_liointc->address;
struct fwnode_handle *domain_handle;
+ int ret;
parent_int_map[0] = acpi_liointc->cascade_map[0];
parent_int_map[1] = acpi_liointc->cascade_map[1];
@@ -403,14 +404,13 @@ int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic
parent_irq[0] = irq_create_mapping(parent, acpi_liointc->cascade[0]);
parent_irq[1] = irq_create_mapping(parent, acpi_liointc->cascade[1]);
- domain_handle = irq_domain_alloc_fwnode(&acpi_liointc->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
}
- ret = liointc_init(acpi_liointc->address, acpi_liointc->size,
- 1, domain_handle, NULL);
+ ret = liointc_init(addr, acpi_liointc->size, 1, domain_handle, NULL);
if (ret == 0)
ret = acpi_cascade_irqdomain_init();
else
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
@ 2026-01-18 10:03 ` tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 10:03 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 717ce893786b4fd0f11375b76e48a6e2d35e6b2d
Gitweb: https://git.kernel.org/tip/717ce893786b4fd0f11375b76e48a6e2d35e6b2d
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:34 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 13 Jan 2026 19:32:01 +01:00
irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT
csr_read64() is only available on 64BIT LoongArch platform, so use the
recently added adaptive csr_read() instead to make the driver work on both
32BIT and 64BIT platforms.
This makes avecintc_enable() a no-op for 32-bit as it is only required on
64-bit systems.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-2-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongarch-avec.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index ba556c0..fb8efde 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -58,11 +58,13 @@ struct avecintc_data {
static inline void avecintc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
u64 value;
value = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
value |= IOCSR_MISC_FUNC_AVEC_EN;
iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static inline void avecintc_ack_irq(struct irq_data *d)
@@ -167,7 +169,7 @@ void complete_irq_moving(void)
struct pending_list *plist = this_cpu_ptr(&pending_list);
struct avecintc_data *adata, *tdata;
int cpu, vector, bias;
- uint64_t isr;
+ unsigned long isr;
guard(raw_spinlock)(&loongarch_avec.lock);
@@ -177,16 +179,16 @@ void complete_irq_moving(void)
bias = vector / VECTORS_PER_REG;
switch (bias) {
case 0:
- isr = csr_read64(LOONGARCH_CSR_ISR0);
+ isr = csr_read(LOONGARCH_CSR_ISR0);
break;
case 1:
- isr = csr_read64(LOONGARCH_CSR_ISR1);
+ isr = csr_read(LOONGARCH_CSR_ISR1);
break;
case 2:
- isr = csr_read64(LOONGARCH_CSR_ISR2);
+ isr = csr_read(LOONGARCH_CSR_ISR2);
break;
case 3:
- isr = csr_read64(LOONGARCH_CSR_ISR3);
+ isr = csr_read(LOONGARCH_CSR_ISR3);
break;
}
@@ -234,7 +236,7 @@ static void avecintc_irq_dispatch(struct irq_desc *desc)
chained_irq_enter(chip, desc);
while (true) {
- unsigned long vector = csr_read64(LOONGARCH_CSR_IRR);
+ unsigned long vector = csr_read(LOONGARCH_CSR_IRR);
if (vector & IRR_INVALID_MASK)
break;
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: a34d398c83a4a4bc00513c00f6eecc34267f834f
Gitweb: https://git.kernel.org/tip/a34d398c83a4a4bc00513c00f6eecc34267f834f
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:40 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:18 +01:00
irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT
All LoongArch irqchip drivers are adjusted, allow them to be built on both
32BIT and 64BIT platforms.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-8-chenhuacai@loongson.cn
---
drivers/irqchip/Kconfig | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 118d0c1..f07b00d 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -706,7 +706,7 @@ config IRQ_LOONGARCH_CPU
config LOONGSON_LIOINTC
bool "Loongson Local I/O Interrupt Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default y
select IRQ_DOMAIN
select GENERIC_IRQ_CHIP
@@ -716,7 +716,6 @@ config LOONGSON_LIOINTC
config LOONGSON_EIOINTC
bool "Loongson Extend I/O Interrupt Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select GENERIC_IRQ_CHIP
@@ -734,7 +733,7 @@ config LOONGSON_HTPIC
config LOONGSON_HTVEC
bool "Loongson HyperTransport Interrupt Vector Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
@@ -742,7 +741,7 @@ config LOONGSON_HTVEC
config LOONGSON_PCH_PIC
bool "Loongson PCH PIC Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
select IRQ_FASTEOI_HIERARCHY_HANDLERS
@@ -751,7 +750,7 @@ config LOONGSON_PCH_PIC
config LOONGSON_PCH_MSI
bool "Loongson PCH MSI Controller"
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
depends on PCI
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
@@ -763,7 +762,7 @@ config LOONGSON_PCH_MSI
config LOONGSON_PCH_LPC
bool "Loongson PCH LPC Controller"
depends on LOONGARCH
- depends on MACH_LOONGSON64
+ depends on MACH_LOONGSON64 || LOONGARCH
default MACH_LOONGSON64
select IRQ_DOMAIN_HIERARCHY
help
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 6/7] irqchip/loongson-pch-pic: " Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 0370a5e740f2a078ac3cd3e20dae2dc95c6b92f3
Gitweb: https://git.kernel.org/tip/0370a5e740f2a078ac3cd3e20dae2dc95c6b92f3
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:39 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:18 +01:00
irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently we pass acpi_pchpic->address to it. This can only work on
64BIT platform because its type is u64, so cast it to phys_addr_t and
then the driver works on both 32BIT and 64BIT platforms.
Also use readl() to read vec_count because readq() is only available on
64BIT platform.
[ tglx: Make the cast explicit and use the casted address as argument for
pch_pic_init() which takes a phys_addr_t as well. Fixup coding
style. More sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-7-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-pch-pic.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c
index c6b369a..f2acaf9 100644
--- a/drivers/irqchip/irq-loongson-pch-pic.c
+++ b/drivers/irqchip/irq-loongson-pch-pic.c
@@ -343,7 +343,7 @@ static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base,
priv->table[i] = PIC_UNDEF_VECTOR;
priv->ht_vec_base = vec_base;
- priv->vec_count = ((readq(priv->base) >> 48) & 0xff) + 1;
+ priv->vec_count = ((readl(priv->base + 4) >> 16) & 0xff) + 1;
priv->gsi_base = gsi_base;
priv->pic_domain = irq_domain_create_hierarchy(parent_domain, 0,
@@ -446,23 +446,23 @@ static int __init acpi_cascade_irqdomain_init(void)
return 0;
}
-int __init pch_pic_acpi_init(struct irq_domain *parent,
- struct acpi_madt_bio_pic *acpi_pchpic)
+int __init pch_pic_acpi_init(struct irq_domain *parent, struct acpi_madt_bio_pic *acpi_pchpic)
{
- int ret;
+ phys_addr_t addr = (phys_addr_t)acpi_pchpic->address;
struct fwnode_handle *domain_handle;
+ int ret;
if (find_pch_pic(acpi_pchpic->gsi_base) >= 0)
return 0;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchpic->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
}
- ret = pch_pic_init(acpi_pchpic->address, acpi_pchpic->size,
- 0, parent, domain_handle, acpi_pchpic->gsi_base);
+ ret = pch_pic_init(addr, acpi_pchpic->size, 0, parent,
+ domain_handle, acpi_pchpic->gsi_base);
if (ret < 0) {
irq_domain_free_fwnode(domain_handle);
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 5/7] irqchip/loongson-pch-msi: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 4093b0e55b39422bbdae108a1be06292714a994d
Gitweb: https://git.kernel.org/tip/4093b0e55b39422bbdae108a1be06292714a994d
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:38 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:17 +01:00
irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passe acpi_pchmsi->msg_address to it.
This can only work on 64BIT platform because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platform.
[ tglx: Make the cast explicit and fixup coding style. ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-6-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-pch-msi.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
index 4aedc9b..91c856c 100644
--- a/drivers/irqchip/irq-loongson-pch-msi.c
+++ b/drivers/irqchip/irq-loongson-pch-msi.c
@@ -263,12 +263,13 @@ struct fwnode_handle *get_pch_msi_handle(int pci_segment)
int __init pch_msi_acpi_init(struct irq_domain *parent, struct acpi_madt_msi_pic *acpi_pchmsi)
{
- int ret;
+ phys_addr_t msg_address = (phys_addr_t)acpi_pchmsi->msg_address;
struct fwnode_handle *domain_handle;
+ int ret;
- domain_handle = irq_domain_alloc_fwnode(&acpi_pchmsi->msg_address);
- ret = pch_msi_init(acpi_pchmsi->msg_address, acpi_pchmsi->start,
- acpi_pchmsi->count, parent, domain_handle);
+ domain_handle = irq_domain_alloc_fwnode(&msg_address);
+ ret = pch_msi_init(msg_address, acpi_pchmsi->start, acpi_pchmsi->count,
+ parent, domain_handle);
if (ret < 0)
irq_domain_free_fwnode(domain_handle);
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 4/7] irqchip/loongson-htvec: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 04f1f17d28ce24a7b40039c8d8ee053a777661a7
Gitweb: https://git.kernel.org/tip/04f1f17d28ce24a7b40039c8d8ee053a777661a7
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:37 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:17 +01:00
irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passes acpi_htvec->address to it.
This can only work on 64BIT platform because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platforms.
[ tglx: Dereference _after_ the NULL pointer check, make the cast explicit
and use the casted address as argument for htvec_init() which takes
a phys_addr_t as well. Sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-5-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-htvec.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c
index d2be8e9..5a3339d 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -295,19 +295,19 @@ static int __init acpi_cascade_irqdomain_init(void)
return 0;
}
-int __init htvec_acpi_init(struct irq_domain *parent,
- struct acpi_madt_ht_pic *acpi_htvec)
+int __init htvec_acpi_init(struct irq_domain *parent, struct acpi_madt_ht_pic *acpi_htvec)
{
- int i, ret;
- int num_parents, parent_irq[8];
+ int i, ret, num_parents, parent_irq[8];
struct fwnode_handle *domain_handle;
+ phys_addr_t addr;
if (!acpi_htvec)
return -EINVAL;
num_parents = HTVEC_MAX_PARENT_IRQ;
+ addr = (phys_addr_t)acpi_htvec->address;
- domain_handle = irq_domain_alloc_fwnode(&acpi_htvec->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
@@ -317,9 +317,7 @@ int __init htvec_acpi_init(struct irq_domain *parent,
for (i = 0; i < HTVEC_MAX_PARENT_IRQ; i++)
parent_irq[i] = irq_create_mapping(parent, acpi_htvec->cascade[i]);
- ret = htvec_init(acpi_htvec->address, acpi_htvec->size,
- num_parents, parent_irq, domain_handle);
-
+ ret = htvec_init(addr, acpi_htvec->size, num_parents, parent_irq, domain_handle);
if (ret == 0)
ret = acpi_cascade_irqdomain_init();
else
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 3/7] irqchip/loongson-eiointc: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-18 13:53 ` 陈华才
1 sibling, 1 reply; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 61fb5e517ec457c76211f03ab0b379882248706d
Gitweb: https://git.kernel.org/tip/61fb5e517ec457c76211f03ab0b379882248706d
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:36 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:17 +01:00
irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
iocsr_read64()/iocsr_write64() are only available on 64BIT LoongArch
platform, so add and use a pair of helpers, i.e. read_isr()/write_isr()
instead to make the driver work on both 32BIT and 64BIT platforms.
This makes eoiintc_enable() a no-op for 32-bit as it is only required on
64-bit systems.
[ tglx: Make the helpers inline and fixup the variable declaration order ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-4-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-eiointc.c | 36 ++++++++++++++++++++-----
1 file changed, 30 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index ad21056..37e7e1f 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -37,9 +37,9 @@
#define EXTIOI_ENABLE_INT_ENCODE BIT(2)
#define EXTIOI_ENABLE_CPU_ENCODE BIT(3)
-#define VEC_REG_COUNT 4
-#define VEC_COUNT_PER_REG 64
-#define VEC_COUNT (VEC_REG_COUNT * VEC_COUNT_PER_REG)
+#define VEC_COUNT 256
+#define VEC_COUNT_PER_REG BITS_PER_LONG
+#define VEC_REG_COUNT (VEC_COUNT / BITS_PER_LONG)
#define VEC_REG_IDX(irq_id) ((irq_id) / VEC_COUNT_PER_REG)
#define VEC_REG_BIT(irq_id) ((irq_id) % VEC_COUNT_PER_REG)
#define EIOINTC_ALL_ENABLE 0xffffffff
@@ -85,11 +85,13 @@ static struct eiointc_priv *eiointc_priv[MAX_IO_PICS];
static void eiointc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
uint64_t misc;
misc = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
misc |= IOCSR_MISC_FUNC_EXT_IOI_EN;
iocsr_write64(misc, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static int cpu_to_eio_node(int cpu)
@@ -281,12 +283,34 @@ static int eiointc_router_init(unsigned int cpu)
return 0;
}
+#if VEC_COUNT_PER_REG == 32
+static inline unsigned long read_isr(int i)
+{
+ return iocsr_read32(EIOINTC_REG_ISR + (i << 2));
+}
+
+static inline void write_isr(int i, unsigned long val)
+{
+ iocsr_write32(val, EIOINTC_REG_ISR + (i << 2));
+}
+#else
+static inline unsigned long read_isr(int i)
+{
+ return iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+}
+
+static inline void write_isr(int i, unsigned long val)
+{
+ iocsr_write64(val, EIOINTC_REG_ISR + (i << 3));
+}
+#endif
+
static void eiointc_irq_dispatch(struct irq_desc *desc)
{
struct eiointc_ip_route *info = irq_desc_get_handler_data(desc);
struct irq_chip *chip = irq_desc_get_chip(desc);
+ unsigned long pending;
bool handled = false;
- u64 pending;
int i;
chained_irq_enter(chip, desc);
@@ -299,14 +323,14 @@ static void eiointc_irq_dispatch(struct irq_desc *desc)
* read ISR for these 64 interrupt vectors rather than all vectors
*/
for (i = info->start; i < info->end; i++) {
- pending = iocsr_read64(EIOINTC_REG_ISR + (i << 3));
+ pending = read_isr(i);
/* Skip handling if pending bitmap is zero */
if (!pending)
continue;
/* Clear the IRQs */
- iocsr_write64(pending, EIOINTC_REG_ISR + (i << 3));
+ write_isr(i, pending);
while (pending) {
int bit = __ffs(pending);
int irq = bit + VEC_COUNT_PER_REG * i;
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 2/7] irqchip/loongson-liointc: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: 57e05137ac3b37fd9b7b8714839d25b924073aef
Gitweb: https://git.kernel.org/tip/57e05137ac3b37fd9b7b8714839d25b924073aef
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:35 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:17 +01:00
irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT
irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type.
Currently the code passes acpi_liointc->address to it.
This can only work on 64BIT platforms because its type is u64, so cast it to
phys_addr_t and then the driver works on both 32BIT and 64BIT platform.
[ tglx: Make the cast explicit and use the casted address as argument for
liointc_init() which takes a phys_addr_t as well. Sigh... ]
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-3-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongson-liointc.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-liointc.c b/drivers/irqchip/irq-loongson-liointc.c
index 0033c21..551597e 100644
--- a/drivers/irqchip/irq-loongson-liointc.c
+++ b/drivers/irqchip/irq-loongson-liointc.c
@@ -394,8 +394,9 @@ static int __init acpi_cascade_irqdomain_init(void)
int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic *acpi_liointc)
{
- int ret;
+ phys_addr_t addr = (phys_addr_t)acpi_liointc->address;
struct fwnode_handle *domain_handle;
+ int ret;
parent_int_map[0] = acpi_liointc->cascade_map[0];
parent_int_map[1] = acpi_liointc->cascade_map[1];
@@ -403,14 +404,13 @@ int __init liointc_acpi_init(struct irq_domain *parent, struct acpi_madt_lio_pic
parent_irq[0] = irq_create_mapping(parent, acpi_liointc->cascade[0]);
parent_irq[1] = irq_create_mapping(parent, acpi_liointc->cascade[1]);
- domain_handle = irq_domain_alloc_fwnode(&acpi_liointc->address);
+ domain_handle = irq_domain_alloc_fwnode(&addr);
if (!domain_handle) {
pr_err("Unable to allocate domain handle\n");
return -ENOMEM;
}
- ret = liointc_init(acpi_liointc->address, acpi_liointc->size,
- 1, domain_handle, NULL);
+ ret = liointc_init(addr, acpi_liointc->size, 1, domain_handle, NULL);
if (ret == 0)
ret = acpi_cascade_irqdomain_init();
else
^ permalink raw reply [flat|nested] 23+ messages in thread
* [tip: irq/drivers] irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
@ 2026-01-18 13:41 ` tip-bot2 for Huacai Chen
1 sibling, 0 replies; 23+ messages in thread
From: tip-bot2 for Huacai Chen @ 2026-01-18 13:41 UTC (permalink / raw)
To: linux-tip-commits
Cc: Jiaxun Yang, Huacai Chen, Thomas Gleixner, x86, linux-kernel
The following commit has been merged into the irq/drivers branch of tip:
Commit-ID: d9e7035a51b89ef6041ce7c00b629e7877134a51
Gitweb: https://git.kernel.org/tip/d9e7035a51b89ef6041ce7c00b629e7877134a51
Author: Huacai Chen <chenhuacai@loongson.cn>
AuthorDate: Tue, 13 Jan 2026 16:59:34 +08:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Sun, 18 Jan 2026 14:39:16 +01:00
irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT
csr_read64() is only available on 64BIT LoongArch platform, so use the
recently added adaptive csr_read() instead to make the driver work on both
32BIT and 64BIT platforms.
This makes avecintc_enable() a no-op for 32-bit as it is only required on
64-bit systems.
Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260113085940.3344837-2-chenhuacai@loongson.cn
---
drivers/irqchip/irq-loongarch-avec.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index ba556c0..fb8efde 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -58,11 +58,13 @@ struct avecintc_data {
static inline void avecintc_enable(void)
{
+#ifdef CONFIG_MACH_LOONGSON64
u64 value;
value = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
value |= IOCSR_MISC_FUNC_AVEC_EN;
iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC);
+#endif
}
static inline void avecintc_ack_irq(struct irq_data *d)
@@ -167,7 +169,7 @@ void complete_irq_moving(void)
struct pending_list *plist = this_cpu_ptr(&pending_list);
struct avecintc_data *adata, *tdata;
int cpu, vector, bias;
- uint64_t isr;
+ unsigned long isr;
guard(raw_spinlock)(&loongarch_avec.lock);
@@ -177,16 +179,16 @@ void complete_irq_moving(void)
bias = vector / VECTORS_PER_REG;
switch (bias) {
case 0:
- isr = csr_read64(LOONGARCH_CSR_ISR0);
+ isr = csr_read(LOONGARCH_CSR_ISR0);
break;
case 1:
- isr = csr_read64(LOONGARCH_CSR_ISR1);
+ isr = csr_read(LOONGARCH_CSR_ISR1);
break;
case 2:
- isr = csr_read64(LOONGARCH_CSR_ISR2);
+ isr = csr_read(LOONGARCH_CSR_ISR2);
break;
case 3:
- isr = csr_read64(LOONGARCH_CSR_ISR3);
+ isr = csr_read(LOONGARCH_CSR_ISR3);
break;
}
@@ -234,7 +236,7 @@ static void avecintc_irq_dispatch(struct irq_desc *desc)
chained_irq_enter(chip, desc);
while (true) {
- unsigned long vector = csr_read64(LOONGARCH_CSR_IRR);
+ unsigned long vector = csr_read(LOONGARCH_CSR_IRR);
if (vector & IRR_INVALID_MASK)
break;
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [tip: irq/drivers] irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
@ 2026-01-18 13:53 ` 陈华才
0 siblings, 0 replies; 23+ messages in thread
From: 陈华才 @ 2026-01-18 13:53 UTC (permalink / raw)
To: linux-kernel; +Cc: linux-tip-commits, Jiaxun Yang, Thomas Gleixner, x86
Hi, Thomas,
> -----原始邮件-----
> 发件人: "tip-bot2 for Huacai Chen" <tip-bot2@linutronix.de>
> 发送时间:2026-01-18 21:41:56 (星期日)
> 收件人: linux-tip-commits@vger.kernel.org
> 抄送: "Jiaxun Yang" <jiaxun.yang@flygoat.com>, "Huacai Chen" <chenhuacai@loongson.cn>, "Thomas Gleixner" <tglx@kernel.org>, x86@kernel.org, linux-kernel@vger.kernel.org
> 主题: [tip: irq/drivers] irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
>
> The following commit has been merged into the irq/drivers branch of tip:
>
> Commit-ID: 61fb5e517ec457c76211f03ab0b379882248706d
> Gitweb: https://git.kernel.org/tip/61fb5e517ec457c76211f03ab0b379882248706d
> Author: Huacai Chen <chenhuacai@loongson.cn>
> AuthorDate: Tue, 13 Jan 2026 16:59:36 +08:00
> Committer: Thomas Gleixner <tglx@kernel.org>
> CommitterDate: Sun, 18 Jan 2026 14:39:17 +01:00
>
> irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT
>
> iocsr_read64()/iocsr_write64() are only available on 64BIT LoongArch
> platform, so add and use a pair of helpers, i.e. read_isr()/write_isr()
> instead to make the driver work on both 32BIT and 64BIT platforms.
>
> This makes eoiintc_enable() a no-op for 32-bit as it is only required on
> 64-bit systems.
Here is a typo, eoiintc should be eiointc. If it is not too late please consider to fix it...
Huacai
>
> [ tglx: Make the helpers inline and fixup the variable declaration order ]
>
> Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> Signed-off-by: Thomas Gleixner <tglx@kernel.org>
> Link: https://patch.msgid.link/20260113085940.3344837-4-chenhuacai@loongson.cn
> ---
> drivers/irqchip/irq-loongson-eiointc.c | 36 ++++++++++++++++++++-----
> 1 file changed, 30 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
> index ad21056..37e7e1f 100644
> --- a/drivers/irqchip/irq-loongson-eiointc.c
> +++ b/drivers/irqchip/irq-loongson-eiointc.c
> @@ -37,9 +37,9 @@
> #define EXTIOI_ENABLE_INT_ENCODE BIT(2)
> #define EXTIOI_ENABLE_CPU_ENCODE BIT(3)
>
> -#define VEC_REG_COUNT 4
> -#define VEC_COUNT_PER_REG 64
> -#define VEC_COUNT (VEC_REG_COUNT * VEC_COUNT_PER_REG)
> +#define VEC_COUNT 256
> +#define VEC_COUNT_PER_REG BITS_PER_LONG
> +#define VEC_REG_COUNT (VEC_COUNT / BITS_PER_LONG)
> #define VEC_REG_IDX(irq_id) ((irq_id) / VEC_COUNT_PER_REG)
> #define VEC_REG_BIT(irq_id) ((irq_id) % VEC_COUNT_PER_REG)
> #define EIOINTC_ALL_ENABLE 0xffffffff
> @@ -85,11 +85,13 @@ static struct eiointc_priv *eiointc_priv[MAX_IO_PICS];
>
> static void eiointc_enable(void)
> {
> +#ifdef CONFIG_MACH_LOONGSON64
> uint64_t misc;
>
> misc = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
> misc |= IOCSR_MISC_FUNC_EXT_IOI_EN;
> iocsr_write64(misc, LOONGARCH_IOCSR_MISC_FUNC);
> +#endif
> }
>
> static int cpu_to_eio_node(int cpu)
> @@ -281,12 +283,34 @@ static int eiointc_router_init(unsigned int cpu)
> return 0;
> }
>
> +#if VEC_COUNT_PER_REG == 32
> +static inline unsigned long read_isr(int i)
> +{
> + return iocsr_read32(EIOINTC_REG_ISR + (i << 2));
> +}
> +
> +static inline void write_isr(int i, unsigned long val)
> +{
> + iocsr_write32(val, EIOINTC_REG_ISR + (i << 2));
> +}
> +#else
> +static inline unsigned long read_isr(int i)
> +{
> + return iocsr_read64(EIOINTC_REG_ISR + (i << 3));
> +}
> +
> +static inline void write_isr(int i, unsigned long val)
> +{
> + iocsr_write64(val, EIOINTC_REG_ISR + (i << 3));
> +}
> +#endif
> +
> static void eiointc_irq_dispatch(struct irq_desc *desc)
> {
> struct eiointc_ip_route *info = irq_desc_get_handler_data(desc);
> struct irq_chip *chip = irq_desc_get_chip(desc);
> + unsigned long pending;
> bool handled = false;
> - u64 pending;
> int i;
>
> chained_irq_enter(chip, desc);
> @@ -299,14 +323,14 @@ static void eiointc_irq_dispatch(struct irq_desc *desc)
> * read ISR for these 64 interrupt vectors rather than all vectors
> */
> for (i = info->start; i < info->end; i++) {
> - pending = iocsr_read64(EIOINTC_REG_ISR + (i << 3));
> + pending = read_isr(i);
>
> /* Skip handling if pending bitmap is zero */
> if (!pending)
> continue;
>
> /* Clear the IRQs */
> - iocsr_write64(pending, EIOINTC_REG_ISR + (i << 3));
> + write_isr(i, pending);
> while (pending) {
> int bit = __ffs(pending);
> int irq = bit + VEC_COUNT_PER_REG * i;
本邮件及其附件含有龙芯中科的商业秘密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制或散发)本邮件及其附件中的信息。如果您错收本邮件,请您立即电话或邮件通知发件人并删除本邮件。
This email and its attachments contain confidential information from Loongson Technology , which is intended only for the person or entity whose address is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this email in error, please notify the sender by phone or email immediately and delete it.
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2026-01-18 13:53 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-13 8:59 [PATCH V3 0/7] irqchip: Adjust LoongArch irqchip drivers for 32BIT/64BIT Huacai Chen
2026-01-13 8:59 ` [PATCH V3 1/7] irqchip/loongarch-avec: Adjust irqchip driver " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 2/7] irqchip/loongson-liointc: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] irq_domain_alloc_fwnode() takes a parameter with the phys_addr_t type tip-bot2 for Huacai Chen
2026-01-18 13:41 ` [tip: irq/drivers] irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 3/7] irqchip/loongson-eiointc: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-18 13:53 ` 陈华才
2026-01-13 8:59 ` [PATCH V3 4/7] irqchip/loongson-htvec: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 5/7] irqchip/loongson-pch-msi: " Huacai Chen
2026-01-18 10:03 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 6/7] irqchip/loongson-pch-pic: " Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
2026-01-13 8:59 ` [PATCH V3 7/7] irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT Huacai Chen
2026-01-18 10:02 ` [tip: irq/drivers] " tip-bot2 for Huacai Chen
2026-01-18 13:41 ` tip-bot2 for Huacai Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®