From 7a1e3c60cd8b7882ac15cef5027c326319aa9604 Mon Sep 17 00:00:00 2001 From: Erdem Simsek Date: Thu, 4 Dec 2025 12:35:23 +0000 Subject: [PATCH] drivers: mbox: nrf_vevif_task_rx: Fix indexing in rx_set_enabled Fixes VEVIF task receiver driver to work correctly on both nRF7120 and nRF54h20 by correcting the mapping between Task IDs and Interrupts. Signed-off-by: Erdem Simsek --- drivers/mbox/mbox_nrf_vevif_task_rx.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/mbox/mbox_nrf_vevif_task_rx.c b/drivers/mbox/mbox_nrf_vevif_task_rx.c index 8afe9eeb50bb..1ddc023312cd 100644 --- a/drivers/mbox/mbox_nrf_vevif_task_rx.c +++ b/drivers/mbox/mbox_nrf_vevif_task_rx.c @@ -39,7 +39,7 @@ static const uint8_t vevif_irqs[VEVIF_TASKS_NUM] = { static void vevif_task_rx_isr(const void *parameter) { - uint8_t channel = *(uint8_t *)parameter; + uint8_t channel = *(const uint8_t *)parameter; uint8_t idx = channel - TASKS_IDX_MIN; nrf_vpr_csr_vevif_tasks_clear(BIT(channel)); @@ -65,12 +65,13 @@ static int vevif_task_rx_register_callback(const struct device *dev, uint32_t id mbox_callback_t cb, void *user_data) { ARG_UNUSED(dev); - uint8_t idx = id - TASKS_IDX_MIN; if (!vevif_task_rx_is_task_valid(id)) { return -EINVAL; } + uint8_t idx = id - TASKS_IDX_MIN; + cbs.cb[idx] = cb; cbs.user_data[idx] = user_data; @@ -80,12 +81,13 @@ static int vevif_task_rx_register_callback(const struct device *dev, uint32_t id static int vevif_task_rx_set_enabled(const struct device *dev, uint32_t id, bool enable) { ARG_UNUSED(dev); - uint8_t idx = id - TASKS_IDX_MIN; if (!vevif_task_rx_is_task_valid(id)) { return -EINVAL; } + uint8_t idx = id - vevif_irqs[0]; + if (enable) { if ((cbs.enabled_mask & BIT(id)) != 0U) { return -EALREADY;