[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 6/6] hw/intc/loongarch_extioi: Add irq routing support from physic
From: |
Bibo Mao |
Subject: |
[PULL 6/6] hw/intc/loongarch_extioi: Add irq routing support from physical id |
Date: |
Thu, 9 Jan 2025 14:58:04 +0800 |
The simliar with IPI interrupt controller, physical cpu id is used
for irq routing for extioi interrupt controller.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
---
hw/intc/loongarch_extioi.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
index d18f47def7..f3055ec4d2 100644
--- a/hw/intc/loongarch_extioi.c
+++ b/hw/intc/loongarch_extioi.c
@@ -15,6 +15,23 @@
#include "hw/intc/loongarch_extioi.h"
#include "trace.h"
+static int extioi_get_index_from_archid(LoongArchExtIOICommonState *s,
+ uint64_t arch_id)
+{
+ int i;
+
+ for (i = 0; i < s->num_cpu; i++) {
+ if (s->cpu[i].arch_id == arch_id) {
+ break;
+ }
+ }
+
+ if ((i < s->num_cpu) && s->cpu[i].cpu) {
+ return i;
+ }
+
+ return -1;
+}
static void extioi_update_irq(LoongArchExtIOICommonState *s, int irq, int
level)
{
@@ -125,7 +142,7 @@ static inline void
extioi_enable_irq(LoongArchExtIOICommonState *s, int index,\
static inline void extioi_update_sw_coremap(LoongArchExtIOICommonState *s,
int irq, uint64_t val, bool notify)
{
- int i, cpu;
+ int i, cpu, cpuid;
/*
* loongarch only support little endian,
@@ -134,12 +151,17 @@ static inline void
extioi_update_sw_coremap(LoongArchExtIOICommonState *s,
val = cpu_to_le64(val);
for (i = 0; i < 4; i++) {
- cpu = val & 0xff;
+ cpuid = val & 0xff;
val = val >> 8;
if (!(s->status & BIT(EXTIOI_ENABLE_CPU_ENCODE))) {
- cpu = ctz32(cpu);
- cpu = (cpu >= 4) ? 0 : cpu;
+ cpuid = ctz32(cpuid);
+ cpuid = (cpuid >= 4) ? 0 : cpuid;
+ }
+
+ cpu = extioi_get_index_from_archid(s, cpuid);
+ if (cpu < 0) {
+ continue;
}
if (s->sw_coremap[irq + i] == cpu) {
--
2.43.5
- [PULL 0/6] loongarch-to-apply queue, Bibo Mao, 2025/01/09
- [PULL 6/6] hw/intc/loongarch_extioi: Add irq routing support from physical id,
Bibo Mao <=
- [PULL 1/6] hw/core/loader: Use ssize_t for efi zboot unpacker, Bibo Mao, 2025/01/09
- [PULL 4/6] hw/intc/loongarch_extioi: Get cpu number from possible_cpu_arch_ids, Bibo Mao, 2025/01/09
- [PULL 5/6] hw/intc/loongarch_extioi: Remove num-cpu property, Bibo Mao, 2025/01/09
- [PULL 2/6] hw/loongarch/boot: Support Linux raw boot image, Bibo Mao, 2025/01/09
- [PULL 3/6] target/loongarch: Only support 64bit pte width, Bibo Mao, 2025/01/09
- Re: [PULL 0/6] loongarch-to-apply queue, Stefan Hajnoczi, 2025/01/09