From 645af05c4b64a3dad23eafddacc86863002569a0 Mon Sep 17 00:00:00 2001 From: "tip-bot2 for GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:09 +0000 Subject: [PATCH 1/6] riscv: smp: Move enum ipi_message_type to asm/smp.h The following commit has been merged into the irq/drivers branch of tip: Commit-ID: 1ae91dc397eb1dbc0f4fc6b96f2481cbc02fe0f9 Gitweb: https://git.kernel.org/tip/1ae91dc397eb1dbc0f4fc6b96f2481cbc02fe0f9 Author: GUO Ren (XuanTie) AuthorDate: Sun, 16 Aug 2026 07:00:45 Committer: Thomas Gleixner CommitterDate: Fri, 04 Sep 2026 15:34:34 +02:00 riscv: smp: Move enum ipi_message_type to asm/smp.h The IPI message type enumeration (and therefore IPI_MAX) is currently private to arch/riscv/kernel/smp.c. Several IPI providers need to know the exact number of IPIs that the architecture requires, so move the enum into the public header. This is a pure code movement with no functional change. Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Thomas Gleixner Reviewed-by: Radu Rendec Reviewed-by: Anup Patel Link: https://patch.msgid.link/20260816070049.2097442-2-guoren@kernel.org Signed-off-by: Linux RISC-V bot --- arch/riscv/include/asm/smp.h | 12 ++++++++++++ arch/riscv/kernel/smp.c | 12 ------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/riscv/include/asm/smp.h b/arch/riscv/include/asm/smp.h index 0ecc67641b09d6..bed39fff1f8a78 100644 --- a/arch/riscv/include/asm/smp.h +++ b/arch/riscv/include/asm/smp.h @@ -15,6 +15,18 @@ struct seq_file; extern unsigned long boot_cpu_hartid; +enum ipi_message_type { + IPI_RESCHEDULE, + IPI_CALL_FUNC, + IPI_CPU_STOP, + IPI_CPU_CRASH_STOP, + IPI_IRQ_WORK, + IPI_TIMER, + IPI_CPU_BACKTRACE, + IPI_KGDB_ROUNDUP, + IPI_MAX +}; + #ifdef CONFIG_SMP #include diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c index fa66f9c97d748d..8930b62b15e742 100644 --- a/arch/riscv/kernel/smp.c +++ b/arch/riscv/kernel/smp.c @@ -28,18 +28,6 @@ #include #include -enum ipi_message_type { - IPI_RESCHEDULE, - IPI_CALL_FUNC, - IPI_CPU_STOP, - IPI_CPU_CRASH_STOP, - IPI_IRQ_WORK, - IPI_TIMER, - IPI_CPU_BACKTRACE, - IPI_KGDB_ROUNDUP, - IPI_MAX -}; - static const char * const ipi_names[] = { [IPI_RESCHEDULE] = "Rescheduling interrupts", [IPI_CALL_FUNC] = "Function call interrupts", From 735d02591196dfb551822eaec12393d9349cfdbf Mon Sep 17 00:00:00 2001 From: "tip-bot2 for GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:10 +0000 Subject: [PATCH 2/6] riscv: sbi: Use IPI_MAX for SBI IPI muxing The following commit has been merged into the irq/drivers branch of tip: Commit-ID: 2a0d49514f297baee259b19fb5553b538aa67d10 Gitweb: https://git.kernel.org/tip/2a0d49514f297baee259b19fb5553b538aa67d10 Author: GUO Ren (XuanTie) AuthorDate: Sun, 16 Aug 2026 07:00:46 Committer: Thomas Gleixner CommitterDate: Fri, 04 Sep 2026 15:34:34 +02:00 riscv: sbi: Use IPI_MAX for SBI IPI muxing Now that IPI_MAX is visible from , replace the hard-coded BITS_PER_BYTE with the proper symbolic constant in the SBI IPI extension driver. No functional change; IPI_MAX is still 8. Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Thomas Gleixner Reviewed-by: Anup Patel Link: https://patch.msgid.link/20260816070049.2097442-3-guoren@kernel.org Signed-off-by: Linux RISC-V bot --- arch/riscv/kernel/sbi-ipi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kernel/sbi-ipi.c b/arch/riscv/kernel/sbi-ipi.c index 0cc5559c08d8ff..eeec178a9b95bb 100644 --- a/arch/riscv/kernel/sbi-ipi.c +++ b/arch/riscv/kernel/sbi-ipi.c @@ -57,7 +57,7 @@ void __init sbi_ipi_init(void) return; } - virq = ipi_mux_create(BITS_PER_BYTE, sbi_send_ipi); + virq = ipi_mux_create(IPI_MAX, sbi_send_ipi); if (virq <= 0) { pr_err("unable to create muxed IPIs\n"); irq_dispose_mapping(sbi_ipi_virq); @@ -75,7 +75,7 @@ void __init sbi_ipi_init(void) "irqchip/sbi-ipi:starting", sbi_ipi_starting_cpu, NULL); - riscv_ipi_set_virq_range(virq, BITS_PER_BYTE); + riscv_ipi_set_virq_range(virq, IPI_MAX); pr_info("providing IPIs using SBI IPI extension\n"); /* From 9e3d241cdaf4c8264ea19305aa6c4f28e9fb3066 Mon Sep 17 00:00:00 2001 From: "GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:11 +0000 Subject: [PATCH 3/6] clocksource: clint: Use IPI_MAX for IPI muxing Replace the hard-coded BITS_PER_BYTE with IPI_MAX now that the constant is exported from riscv asm/smp.h. Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Linux RISC-V bot --- drivers/clocksource/timer-clint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/clocksource/timer-clint.c b/drivers/clocksource/timer-clint.c index 0bdd9d7ec54583..e56eee7e3781dd 100644 --- a/drivers/clocksource/timer-clint.c +++ b/drivers/clocksource/timer-clint.c @@ -243,7 +243,7 @@ static int __init clint_timer_init_dt(struct device_node *np) } #ifdef CONFIG_SMP - rc = ipi_mux_create(BITS_PER_BYTE, clint_send_ipi); + rc = ipi_mux_create(IPI_MAX, clint_send_ipi); if (rc <= 0) { pr_err("unable to create muxed IPIs\n"); rc = (rc < 0) ? rc : -ENODEV; @@ -251,7 +251,7 @@ static int __init clint_timer_init_dt(struct device_node *np) } irq_set_chained_handler(clint_ipi_irq, clint_ipi_interrupt); - riscv_ipi_set_virq_range(rc, BITS_PER_BYTE); + riscv_ipi_set_virq_range(rc, IPI_MAX); clint_clear_ipi(); #endif From 94206dedfa6c0c2b54d415f79af64a815961f15f Mon Sep 17 00:00:00 2001 From: "GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:12 +0000 Subject: [PATCH 4/6] irqchip/aclint-sswi: Use IPI_MAX for IPI muxing Replace the hard-coded BITS_PER_BYTE with IPI_MAX now that the constant is exported from riscv asm/smp.h. Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Linux RISC-V bot --- drivers/irqchip/irq-aclint-sswi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-aclint-sswi.c b/drivers/irqchip/irq-aclint-sswi.c index ca06efd86fa1a7..5e010fc401f7bc 100644 --- a/drivers/irqchip/irq-aclint-sswi.c +++ b/drivers/irqchip/irq-aclint-sswi.c @@ -138,7 +138,7 @@ static int __init aclint_sswi_probe(struct fwnode_handle *fwnode) } /* Register SSWI irq and handler */ - virq = ipi_mux_create(BITS_PER_BYTE, aclint_sswi_ipi_send); + virq = ipi_mux_create(IPI_MAX, aclint_sswi_ipi_send); if (virq <= 0) { pr_err("unable to create muxed IPIs\n"); irq_dispose_mapping(sswi_ipi_virq); @@ -152,7 +152,7 @@ static int __init aclint_sswi_probe(struct fwnode_handle *fwnode) aclint_sswi_starting_cpu, aclint_sswi_dying_cpu); - riscv_ipi_set_virq_range(virq, BITS_PER_BYTE); + riscv_ipi_set_virq_range(virq, IPI_MAX); return 0; } From 543b4d6557cfba2464ce03b331cf16779ad26275 Mon Sep 17 00:00:00 2001 From: "GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:13 +0000 Subject: [PATCH 5/6] irqchip/imsic: Use IPI_MAX instead of IMSIC_NR_IPI IMSIC was defining its own IMSIC_NR_IPI (= 8) which happened to match the architecture's IPI_MAX. Now that IPI_MAX is exported from riscv asm/smp.h, use the architecture constant and drop the private define. This keeps the number of multiplexed IPIs in sync with the rest of the RISC-V IPI infrastructure. Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Linux RISC-V bot --- drivers/irqchip/irq-riscv-imsic-early.c | 4 ++-- drivers/irqchip/irq-riscv-imsic-state.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-riscv-imsic-early.c b/drivers/irqchip/irq-riscv-imsic-early.c index 12efd241ce8800..823f5f2ecb3ddd 100644 --- a/drivers/irqchip/irq-riscv-imsic-early.c +++ b/drivers/irqchip/irq-riscv-imsic-early.c @@ -67,12 +67,12 @@ static int __init imsic_ipi_domain_init(void) return 0; /* Create IMSIC IPI multiplexing */ - virq = ipi_mux_create(IMSIC_NR_IPI, imsic_ipi_send); + virq = ipi_mux_create(IPI_MAX, imsic_ipi_send); if (virq <= 0) return virq < 0 ? virq : -ENOMEM; /* Set vIRQ range */ - riscv_ipi_set_virq_range(virq, IMSIC_NR_IPI); + riscv_ipi_set_virq_range(virq, IPI_MAX); /* Announce that IMSIC is providing IPIs */ pr_info("%pfwP: providing IPIs using interrupt %d\n", imsic->fwnode, IMSIC_IPI_ID); diff --git a/drivers/irqchip/irq-riscv-imsic-state.h b/drivers/irqchip/irq-riscv-imsic-state.h index c42ee180b3050c..878cc192ccecf0 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.h +++ b/drivers/irqchip/irq-riscv-imsic-state.h @@ -13,7 +13,6 @@ #include #define IMSIC_IPI_ID 1 -#define IMSIC_NR_IPI 8 struct imsic_vector { /* Fixed details of the vector */ From e4f0ddeefa6d8bd250e8cd6db75aab7bdf39b0bb Mon Sep 17 00:00:00 2001 From: "GUO Ren (XuanTie)" Date: Fri, 11 Sep 2026 03:27:14 +0000 Subject: [PATCH 6/6] media: mtk-vpu: rename IPI_MAX to IPI_VPU_MAX The last enumerator of this driver's firmware IPI id list is a bound for the VPU mailbox protocol, not a generic host IPI limit. Follow the existing naming in this header: IPI_VPU_INIT already carries a VPU prefix, so the terminator should match. The same convention is used by the SCP IPI enum, which ends with a prefixed SCP_IPI_MAX rather than a bare IPI_MAX. Rename IPI_MAX to IPI_VPU_MAX and update the descriptor table bounds and range checks. No functional change. Link: https://lore.kernel.org/linux-riscv/20260908222349.GA2324870@ax162 Cc: Nathan Chancellor Signed-off-by: GUO Ren (XuanTie) Signed-off-by: Linux RISC-V bot --- drivers/media/platform/mediatek/vpu/mtk_vpu.c | 12 ++++++------ drivers/media/platform/mediatek/vpu/mtk_vpu.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/mediatek/vpu/mtk_vpu.c b/drivers/media/platform/mediatek/vpu/mtk_vpu.c index 8d8319f0cd2219..b3e9f8c4ab7a71 100644 --- a/drivers/media/platform/mediatek/vpu/mtk_vpu.c +++ b/drivers/media/platform/mediatek/vpu/mtk_vpu.c @@ -211,7 +211,7 @@ struct mtk_vpu { struct vpu_regs reg; struct vpu_run run; struct vpu_wdt wdt; - struct vpu_ipi_desc ipi_desc[IPI_MAX]; + struct vpu_ipi_desc ipi_desc[IPI_VPU_MAX]; struct share_obj __iomem *recv_buf; struct share_obj __iomem *send_buf; struct device *dev; @@ -221,7 +221,7 @@ struct mtk_vpu { struct mutex vpu_mutex; /* for protecting vpu data data structure */ u32 wdt_refcnt; wait_queue_head_t ack_wq; - bool ipi_id_ack[IPI_MAX]; + bool ipi_id_ack[IPI_VPU_MAX]; }; static inline void vpu_cfg_writel(struct mtk_vpu *vpu, u32 val, u32 offset) @@ -296,7 +296,7 @@ int vpu_ipi_register(struct platform_device *pdev, return -EPROBE_DEFER; } - if (id < IPI_MAX && handler) { + if (id < IPI_VPU_MAX && handler) { ipi_desc = vpu->ipi_desc; ipi_desc[id].name = name; ipi_desc[id].handler = handler; @@ -319,7 +319,7 @@ int vpu_ipi_send(struct platform_device *pdev, unsigned long timeout; int ret = 0; - if (id <= IPI_VPU_INIT || id >= IPI_MAX || + if (id <= IPI_VPU_INIT || id >= IPI_VPU_MAX || len > sizeof(send_obj->share_buf) || !buf) { dev_err(vpu->dev, "failed to send ipi message\n"); return -EINVAL; @@ -748,7 +748,7 @@ static void vpu_ipi_handler(struct mtk_vpu *vpu) s32 id = readl(&rcv_obj->id); memcpy_fromio(data, rcv_obj->share_buf, sizeof(data)); - if (id < IPI_MAX && ipi_desc[id].handler) { + if (id < IPI_VPU_MAX && ipi_desc[id].handler) { ipi_desc[id].handler(data, readl(&rcv_obj->len), ipi_desc[id].priv); if (id > IPI_VPU_INIT) { @@ -934,7 +934,7 @@ static int mtk_vpu_probe(struct platform_device *pdev) #ifdef CONFIG_DEBUG_FS debugfs_remove(vpu_debugfs); #endif - memset(vpu->ipi_desc, 0, sizeof(struct vpu_ipi_desc) * IPI_MAX); + memset(vpu->ipi_desc, 0, sizeof(struct vpu_ipi_desc) * IPI_VPU_MAX); vpu_mutex_destroy: mutex_destroy(&vpu->vpu_mutex); disable_vpu_clk: diff --git a/drivers/media/platform/mediatek/vpu/mtk_vpu.h b/drivers/media/platform/mediatek/vpu/mtk_vpu.h index 3951547e9ec5be..44ab631ec904ae 100644 --- a/drivers/media/platform/mediatek/vpu/mtk_vpu.h +++ b/drivers/media/platform/mediatek/vpu/mtk_vpu.h @@ -49,7 +49,7 @@ typedef void (*ipi_handler_t) (void *data, * handle VP8 video encoder job,, and vice versa. * @IPI_MDP: The interrupt from vpu is to notify kernel to * handle MDP (Media Data Path) job, and vice versa. - * @IPI_MAX: The maximum IPI number + * @IPI_VPU_MAX: The maximum VPU IPI number */ enum ipi_id { @@ -60,7 +60,7 @@ enum ipi_id { IPI_VENC_H264, IPI_VENC_VP8, IPI_MDP, - IPI_MAX, + IPI_VPU_MAX, }; /**