[PATCH v2 1/4] LongArch: KVM: Add some maccros for AVEC

Song Gao posted 4 patches 3 days, 12 hours ago
[PATCH v2 1/4] LongArch: KVM: Add some maccros for AVEC
Posted by Song Gao 3 days, 12 hours ago
Add some maccros for AVEC interrupt controller, so the dintc can use
those maccros.

Signed-off-by: Song Gao <gaosong@loongson.cn>
---
 arch/loongarch/include/asm/irq.h     | 8 ++++++++
 drivers/irqchip/irq-loongarch-avec.c | 5 +++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/irq.h
index 12bd15578c33..aaa022fcb9e3 100644
--- a/arch/loongarch/include/asm/irq.h
+++ b/arch/loongarch/include/asm/irq.h
@@ -50,6 +50,14 @@ void spurious_interrupt(void);
 #define NR_LEGACY_VECTORS	16
 #define IRQ_MATRIX_BITS		NR_VECTORS
 
+#define AVEC_VIRQ_SHIFT		4
+#define AVEC_VIRQ_BIT		8
+#define AVEC_VIRQ_MASK		GENMASK(AVEC_VIRQ_BIT - 1, 0)
+#define AVEC_CPU_SHIFT		12
+#define AVEC_CPU_BIT		16
+#define AVEC_CPU_MASK		GENMASK(AVEC_CPU_BIT - 1, 0)
+
+
 #define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
 void arch_trigger_cpumask_backtrace(const struct cpumask *mask, int exclude_cpu);
 
diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
index bf52dc8345f5..f0118cfd4363 100644
--- a/drivers/irqchip/irq-loongarch-avec.c
+++ b/drivers/irqchip/irq-loongarch-avec.c
@@ -209,8 +209,9 @@ static void avecintc_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
 	struct avecintc_data *adata = irq_data_get_irq_chip_data(d);
 
 	msg->address_hi = 0x0;
-	msg->address_lo = (loongarch_avec.msi_base_addr | (adata->vec & 0xff) << 4)
-			  | ((cpu_logical_map(adata->cpu & 0xffff)) << 12);
+	msg->address_lo = (loongarch_avec.msi_base_addr |
+			(adata->vec & AVEC_VIRQ_MASK) << AVEC_VIRQ_SHIFT) |
+			((cpu_logical_map(adata->cpu & AVEC_CPU_MASK)) << AVEC_CPU_SHIFT);
 	msg->data = 0x0;
 }
 
-- 
2.39.3
Re: [PATCH v2 1/4] LongArch: KVM: Add some maccros for AVEC
Posted by Huacai Chen 3 days, 9 hours ago
Hi, Thomas,

On Fri, Nov 28, 2025 at 5:35 PM Song Gao <gaosong@loongson.cn> wrote:
>
> Add some maccros for AVEC interrupt controller, so the dintc can use
> those maccros.
>
> Signed-off-by: Song Gao <gaosong@loongson.cn>
Would you mind if I apply this simple patch to the loongarch tree?
Later patches depend on this one, but if it is taken into the irqchip
tree, this series is not very convenient for kvm.


Huacai

> ---
>  arch/loongarch/include/asm/irq.h     | 8 ++++++++
>  drivers/irqchip/irq-loongarch-avec.c | 5 +++--
>  2 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/irq.h
> index 12bd15578c33..aaa022fcb9e3 100644
> --- a/arch/loongarch/include/asm/irq.h
> +++ b/arch/loongarch/include/asm/irq.h
> @@ -50,6 +50,14 @@ void spurious_interrupt(void);
>  #define NR_LEGACY_VECTORS      16
>  #define IRQ_MATRIX_BITS                NR_VECTORS
>
> +#define AVEC_VIRQ_SHIFT                4
> +#define AVEC_VIRQ_BIT          8
> +#define AVEC_VIRQ_MASK         GENMASK(AVEC_VIRQ_BIT - 1, 0)
> +#define AVEC_CPU_SHIFT         12
> +#define AVEC_CPU_BIT           16
> +#define AVEC_CPU_MASK          GENMASK(AVEC_CPU_BIT - 1, 0)
> +
> +
>  #define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
>  void arch_trigger_cpumask_backtrace(const struct cpumask *mask, int exclude_cpu);
>
> diff --git a/drivers/irqchip/irq-loongarch-avec.c b/drivers/irqchip/irq-loongarch-avec.c
> index bf52dc8345f5..f0118cfd4363 100644
> --- a/drivers/irqchip/irq-loongarch-avec.c
> +++ b/drivers/irqchip/irq-loongarch-avec.c
> @@ -209,8 +209,9 @@ static void avecintc_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
>         struct avecintc_data *adata = irq_data_get_irq_chip_data(d);
>
>         msg->address_hi = 0x0;
> -       msg->address_lo = (loongarch_avec.msi_base_addr | (adata->vec & 0xff) << 4)
> -                         | ((cpu_logical_map(adata->cpu & 0xffff)) << 12);
> +       msg->address_lo = (loongarch_avec.msi_base_addr |
> +                       (adata->vec & AVEC_VIRQ_MASK) << AVEC_VIRQ_SHIFT) |
> +                       ((cpu_logical_map(adata->cpu & AVEC_CPU_MASK)) << AVEC_CPU_SHIFT);
>         msg->data = 0x0;
>  }
>
> --
> 2.39.3
>