Skip to content

Commit d9e7035

Browse files
chenhuacaiThomas Gleixner
authored andcommitted
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
1 parent 95a8ddd commit d9e7035

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

drivers/irqchip/irq-loongarch-avec.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,13 @@ struct avecintc_data {
5858

5959
static inline void avecintc_enable(void)
6060
{
61+
#ifdef CONFIG_MACH_LOONGSON64
6162
u64 value;
6263

6364
value = iocsr_read64(LOONGARCH_IOCSR_MISC_FUNC);
6465
value |= IOCSR_MISC_FUNC_AVEC_EN;
6566
iocsr_write64(value, LOONGARCH_IOCSR_MISC_FUNC);
67+
#endif
6668
}
6769

6870
static inline void avecintc_ack_irq(struct irq_data *d)
@@ -167,7 +169,7 @@ void complete_irq_moving(void)
167169
struct pending_list *plist = this_cpu_ptr(&pending_list);
168170
struct avecintc_data *adata, *tdata;
169171
int cpu, vector, bias;
170-
uint64_t isr;
172+
unsigned long isr;
171173

172174
guard(raw_spinlock)(&loongarch_avec.lock);
173175

@@ -177,16 +179,16 @@ void complete_irq_moving(void)
177179
bias = vector / VECTORS_PER_REG;
178180
switch (bias) {
179181
case 0:
180-
isr = csr_read64(LOONGARCH_CSR_ISR0);
182+
isr = csr_read(LOONGARCH_CSR_ISR0);
181183
break;
182184
case 1:
183-
isr = csr_read64(LOONGARCH_CSR_ISR1);
185+
isr = csr_read(LOONGARCH_CSR_ISR1);
184186
break;
185187
case 2:
186-
isr = csr_read64(LOONGARCH_CSR_ISR2);
188+
isr = csr_read(LOONGARCH_CSR_ISR2);
187189
break;
188190
case 3:
189-
isr = csr_read64(LOONGARCH_CSR_ISR3);
191+
isr = csr_read(LOONGARCH_CSR_ISR3);
190192
break;
191193
}
192194

@@ -234,7 +236,7 @@ static void avecintc_irq_dispatch(struct irq_desc *desc)
234236
chained_irq_enter(chip, desc);
235237

236238
while (true) {
237-
unsigned long vector = csr_read64(LOONGARCH_CSR_IRR);
239+
unsigned long vector = csr_read(LOONGARCH_CSR_IRR);
238240
if (vector & IRR_INVALID_MASK)
239241
break;
240242

0 commit comments

Comments
 (0)