* [PATCH] net: airoha: npu: use coherent DMA for mailbox messages
@ 2026-08-05 7:08 Daniel Pawlik
2026-08-05 9:59 ` Lorenzo Bianconi
2026-08-06 7:26 ` [PATCH v2] " Daniel Pawlik
0 siblings, 2 replies; 5+ messages in thread
From: Daniel Pawlik @ 2026-08-05 7:08 UTC (permalink / raw)
To: netdev; +Cc: lorenzo, win847, linux-arm-kernel, linux-mediatek, Daniel Pawlik
Commit 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox
buffer") switched airoha_npu_send_msg() to DMA_BIDIRECTIONAL so
non-coherent CPUs invalidate caches before reading NPU GET responses.
On EN7581 + MT7996 that change regresses probe: the mailbox completes
successfully, but WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0 and
mt76 never binds NPU offload. Healthy boards report 0.1111.
Mailbox messages are tiny and already copied by the caller. Bounce
through dma_alloc_coherent() so the CPU observes the NPU-written
response without relying on streaming DMA direction.
Verified on Quantum Fiber W1700K (EN7581 + MT7996).
Fixes: 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer")
Assisted-by: Cursor:composer-2
Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com>
---
drivers/net/ethernet/airoha/airoha_npu.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c
index b679bed952de..d2f6c9c084b8 100644
--- a/drivers/net/ethernet/airoha/airoha_npu.c
+++ b/drivers/net/ethernet/airoha/airoha_npu.c
@@ -166,12 +166,21 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
u16 core = 0; /* FIXME */
u32 val, offset = core << 4;
dma_addr_t dma_addr;
+ void *dma_buf;
int ret;
- dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL);
- ret = dma_mapping_error(npu->dev, dma_addr);
- if (ret)
- return ret;
+ /*
+ * Mailbox payloads are small and bidirectional (CPU sets the
+ * request, NPU writes the response). Streaming DMA_BIDIRECTIONAL
+ * mapping regresses EN7581+MT7996: MBOX reports success but
+ * WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0. Use a
+ * coherent bounce buffer so the CPU always sees the NPU response.
+ */
+ dma_buf = dma_alloc_coherent(npu->dev, size, &dma_addr, GFP_ATOMIC);
+ if (!dma_buf)
+ return -ENOMEM;
+
+ memcpy(dma_buf, p, size);
spin_lock_bh(&npu->cores[core].lock);
@@ -191,7 +200,9 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
spin_unlock_bh(&npu->cores[core].lock);
- dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL);
+ if (!ret)
+ memcpy(p, dma_buf, size);
+ dma_free_coherent(npu->dev, size, dma_buf, dma_addr);
return ret;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] net: airoha: npu: use coherent DMA for mailbox messages 2026-08-05 7:08 [PATCH] net: airoha: npu: use coherent DMA for mailbox messages Daniel Pawlik @ 2026-08-05 9:59 ` Lorenzo Bianconi 2026-08-05 12:15 ` Daniel Pawlik 2026-08-06 7:26 ` [PATCH v2] " Daniel Pawlik 1 sibling, 1 reply; 5+ messages in thread From: Lorenzo Bianconi @ 2026-08-05 9:59 UTC (permalink / raw) To: Daniel Pawlik; +Cc: netdev, win847, linux-arm-kernel, linux-mediatek [-- Attachment #1: Type: text/plain, Size: 2863 bytes --] > Commit 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox > buffer") switched airoha_npu_send_msg() to DMA_BIDIRECTIONAL so > non-coherent CPUs invalidate caches before reading NPU GET responses. > > On EN7581 + MT7996 that change regresses probe: the mailbox completes > successfully, but WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0 and > mt76 never binds NPU offload. Healthy boards report 0.1111. > > Mailbox messages are tiny and already copied by the caller. Bounce > through dma_alloc_coherent() so the CPU observes the NPU-written > response without relying on streaming DMA direction. > > Verified on Quantum Fiber W1700K (EN7581 + MT7996). > > Fixes: 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer") > Assisted-by: Cursor:composer-2 > Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com> > --- > drivers/net/ethernet/airoha/airoha_npu.c | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c > index b679bed952de..d2f6c9c084b8 100644 > --- a/drivers/net/ethernet/airoha/airoha_npu.c > +++ b/drivers/net/ethernet/airoha/airoha_npu.c > @@ -166,12 +166,21 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > u16 core = 0; /* FIXME */ > u32 val, offset = core << 4; > dma_addr_t dma_addr; > + void *dma_buf; > int ret; > > - dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL); > - ret = dma_mapping_error(npu->dev, dma_addr); > - if (ret) > - return ret; > + /* > + * Mailbox payloads are small and bidirectional (CPU sets the > + * request, NPU writes the response). Streaming DMA_BIDIRECTIONAL > + * mapping regresses EN7581+MT7996: MBOX reports success but > + * WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0. Use a > + * coherent bounce buffer so the CPU always sees the NPU response. > + */ > + dma_buf = dma_alloc_coherent(npu->dev, size, &dma_addr, GFP_ATOMIC); > + if (!dma_buf) > + return -ENOMEM; I tried to reproduce the issue locally, but it does not occur for me. Moreover, I guess dma_alloc_coherent() is not the right approach since it is usually used for long-standing descriptors (e.g. tx/rx DMA descriptor rings). Can you please provide more details about the hw you are running? Regards, Lorenzo > + > + memcpy(dma_buf, p, size); > > spin_lock_bh(&npu->cores[core].lock); > > @@ -191,7 +200,9 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > > spin_unlock_bh(&npu->cores[core].lock); > > - dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL); > + if (!ret) > + memcpy(p, dma_buf, size); > + dma_free_coherent(npu->dev, size, dma_buf, dma_addr); > > return ret; > } > -- > 2.55.0 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] net: airoha: npu: use coherent DMA for mailbox messages 2026-08-05 9:59 ` Lorenzo Bianconi @ 2026-08-05 12:15 ` Daniel Pawlik 0 siblings, 0 replies; 5+ messages in thread From: Daniel Pawlik @ 2026-08-05 12:15 UTC (permalink / raw) To: Lorenzo Bianconi; +Cc: netdev, win847, linux-arm-kernel, linux-mediatek Hi Lorenzo, thanks for taking a look. Hardware where I see the regression: - Board: Gemtek W1700K (OpenWrt U-Boot layout), aka Quantum Fiber W1700K - Airoha EN7581 - WiFi: MT7996 (eagle), NPU firmware - Tree: OpenWrt main branch + patch related to update kernel to 6.18.42 - https://github.com/openwrt/openwrt/pull/24551 Please let me know what you need next (dmesg, DT snippet, etc.). Thanks, Daniel śr., 5 sie 2026 o 11:59 Lorenzo Bianconi <lorenzo@kernel.org> napisał(a): > > > Commit 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox > > buffer") switched airoha_npu_send_msg() to DMA_BIDIRECTIONAL so > > non-coherent CPUs invalidate caches before reading NPU GET responses. > > > > On EN7581 + MT7996 that change regresses probe: the mailbox completes > > successfully, but WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0 and > > mt76 never binds NPU offload. Healthy boards report 0.1111. > > > > Mailbox messages are tiny and already copied by the caller. Bounce > > through dma_alloc_coherent() so the CPU observes the NPU-written > > response without relying on streaming DMA direction. > > > > Verified on Quantum Fiber W1700K (EN7581 + MT7996). > > > > Fixes: 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer") > > Assisted-by: Cursor:composer-2 > > Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com> > > --- > > drivers/net/ethernet/airoha/airoha_npu.c | 21 ++++++++++++++++----- > > 1 file changed, 16 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c > > index b679bed952de..d2f6c9c084b8 100644 > > --- a/drivers/net/ethernet/airoha/airoha_npu.c > > +++ b/drivers/net/ethernet/airoha/airoha_npu.c > > @@ -166,12 +166,21 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > > u16 core = 0; /* FIXME */ > > u32 val, offset = core << 4; > > dma_addr_t dma_addr; > > + void *dma_buf; > > int ret; > > > > - dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL); > > - ret = dma_mapping_error(npu->dev, dma_addr); > > - if (ret) > > - return ret; > > + /* > > + * Mailbox payloads are small and bidirectional (CPU sets the > > + * request, NPU writes the response). Streaming DMA_BIDIRECTIONAL > > + * mapping regresses EN7581+MT7996: MBOX reports success but > > + * WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0. Use a > > + * coherent bounce buffer so the CPU always sees the NPU response. > > + */ > > + dma_buf = dma_alloc_coherent(npu->dev, size, &dma_addr, GFP_ATOMIC); > > + if (!dma_buf) > > + return -ENOMEM; > > I tried to reproduce the issue locally, but it does not occur for me. > Moreover, I guess dma_alloc_coherent() is not the right approach since it is > usually used for long-standing descriptors (e.g. tx/rx DMA descriptor rings). > Can you please provide more details about the hw you are running? > > Regards, > Lorenzo > > > + > > + memcpy(dma_buf, p, size); > > > > spin_lock_bh(&npu->cores[core].lock); > > > > @@ -191,7 +200,9 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > > > > spin_unlock_bh(&npu->cores[core].lock); > > > > - dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL); > > + if (!ret) > > + memcpy(p, dma_buf, size); > > + dma_free_coherent(npu->dev, size, dma_buf, dma_addr); > > > > return ret; > > } > > -- > > 2.55.0 > > -- Z poważaniem, Daniel Pawlik ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] net: airoha: npu: use coherent DMA for mailbox messages 2026-08-05 7:08 [PATCH] net: airoha: npu: use coherent DMA for mailbox messages Daniel Pawlik 2026-08-05 9:59 ` Lorenzo Bianconi @ 2026-08-06 7:26 ` Daniel Pawlik 2026-08-06 8:02 ` Lorenzo Bianconi 1 sibling, 1 reply; 5+ messages in thread From: Daniel Pawlik @ 2026-08-06 7:26 UTC (permalink / raw) To: netdev; +Cc: lorenzo, win847, linux-arm-kernel, linux-mediatek, Daniel Pawlik Commit 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer") switched airoha_npu_send_msg() to DMA_BIDIRECTIONAL so non-coherent CPUs invalidate caches before reading NPU GET responses. On EN7581 + MT7996 that change regresses probe: the mailbox completes successfully, but WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0 and mt76 never binds NPU offload. Healthy boards report 0.1111. airoha_npu_send_msg() is also used from PPE foe_commit under spin_lock_bh(), so per-message dma_alloc_coherent(GFP_ATOMIC) is a poor fit. Allocate one device-managed coherent bounce buffer at probe and reuse it under the existing per-core mailbox lock. That also keeps the buffer valid if the NPU completes a write after a mailbox timeout. Verified on Quantum Fiber / Gemtek W1700K (EN7581 + MT7996). Fixes: 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer") Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20260805070851.2885888-1-pawlik.dan@gmail.com/ Assisted-by: Cursor:composer-2 Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com> --- v2: - allocate one coherent mailbox buffer at probe and reuse it under the per-core lock instead of per-message dma_alloc_coherent(GFP_ATOMIC) drivers/net/ethernet/airoha/airoha_npu.c | 31 +++++++++++++++++------ include/linux/soc/airoha/airoha_offload.h | 4 +++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c index b679bed952de..dfa09fed907e 100644 --- a/drivers/net/ethernet/airoha/airoha_npu.c +++ b/drivers/net/ethernet/airoha/airoha_npu.c @@ -23,6 +23,8 @@ #define NPU_EN7581_FIRMWARE_RV32_MAX_SIZE 0x200000 #define NPU_EN7581_FIRMWARE_DATA_MAX_SIZE 0x10000 #define NPU_DUMP_SIZE 512 +/* Enough for struct ppe_mbox_data and small WLAN TLV payloads */ +#define AIROHA_NPU_MBOX_SIZE 256 #define REG_NPU_LOCAL_SRAM 0x0 @@ -165,17 +167,24 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, { u16 core = 0; /* FIXME */ u32 val, offset = core << 4; - dma_addr_t dma_addr; int ret; - dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL); - ret = dma_mapping_error(npu->dev, dma_addr); - if (ret) - return ret; + if (size > AIROHA_NPU_MBOX_SIZE) + return -EINVAL; + /* + * Mailbox payloads are bidirectional (CPU request, NPU response). + * On EN7581+MT7996, streaming DMA_BIDIRECTIONAL against the + * caller kzalloc() buffer can leave WLAN_FUNC_GET_WAIT_NPU_VERSION + * reading as 0.0 despite MBOX success. Reuse a probe-time coherent + * bounce buffer under the per-core lock (also used from PPE + * foe_commit under atomic context). + */ spin_lock_bh(&npu->cores[core].lock); - regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, dma_addr); + memcpy(npu->mbox_buf, p, size); + + regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, npu->mbox_dma); regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(1) + offset, size); regmap_read(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, &val); regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, val + 1); @@ -189,9 +198,10 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, if (!ret && FIELD_GET(MBOX_MSG_STATUS, val) != NPU_MBOX_SUCCESS) ret = -EINVAL; - spin_unlock_bh(&npu->cores[core].lock); + if (!ret) + memcpy(p, npu->mbox_buf, size); - dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL); + spin_unlock_bh(&npu->cores[core].lock); return ret; } @@ -770,6 +780,11 @@ static int airoha_npu_probe(struct platform_device *pdev) if (err) return err; + npu->mbox_buf = dmam_alloc_coherent(dev, AIROHA_NPU_MBOX_SIZE, + &npu->mbox_dma, GFP_KERNEL); + if (!npu->mbox_buf) + return -ENOMEM; + err = airoha_npu_run_firmware(dev, base, &res); if (err) return dev_err_probe(dev, err, "failed to run npu firmware\n"); diff --git a/include/linux/soc/airoha/airoha_offload.h b/include/linux/soc/airoha/airoha_offload.h index 7589fccfeef6..afd481233489 100644 --- a/include/linux/soc/airoha/airoha_offload.h +++ b/include/linux/soc/airoha/airoha_offload.h @@ -179,6 +179,10 @@ struct airoha_npu { struct airoha_foe_stats __iomem *stats; + /* Coherent bounce buffer for mailbox cmd/rsp (airoha_npu_send_msg) */ + void *mbox_buf; + dma_addr_t mbox_dma; + struct { int (*ppe_init)(struct airoha_npu *npu); int (*ppe_deinit)(struct airoha_npu *npu); -- 2.55.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] net: airoha: npu: use coherent DMA for mailbox messages 2026-08-06 7:26 ` [PATCH v2] " Daniel Pawlik @ 2026-08-06 8:02 ` Lorenzo Bianconi 0 siblings, 0 replies; 5+ messages in thread From: Lorenzo Bianconi @ 2026-08-06 8:02 UTC (permalink / raw) To: Daniel Pawlik Cc: netdev, win847, linux-arm-kernel, linux-mediatek, Christian Marangi [-- Attachment #1: Type: text/plain, Size: 5673 bytes --] On Aug 06, Daniel Pawlik wrote: > Commit 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox > buffer") switched airoha_npu_send_msg() to DMA_BIDIRECTIONAL so > non-coherent CPUs invalidate caches before reading NPU GET responses. > > On EN7581 + MT7996 that change regresses probe: the mailbox completes > successfully, but WLAN_FUNC_GET_WAIT_NPU_VERSION still reads as 0.0 and > mt76 never binds NPU offload. Healthy boards report 0.1111. > > airoha_npu_send_msg() is also used from PPE foe_commit under > spin_lock_bh(), so per-message dma_alloc_coherent(GFP_ATOMIC) is a poor > fit. Allocate one device-managed coherent bounce buffer at probe and > reuse it under the existing per-core mailbox lock. That also keeps the > buffer valid if the NPU completes a write after a mailbox timeout. > > Verified on Quantum Fiber / Gemtek W1700K (EN7581 + MT7996). Hi Daniel, I tested the issue you reported on a very similar hw (reported below) and it works fine for me - EN7581-mmc - MT7996 SoC @Christian: Is the issue occurring for you? I guess we should debug it a bit more. > > Fixes: 6f884eb87a79 ("net: airoha: Fix DMA direction for NPU mailbox buffer") > Link: https://patchwork.kernel.org/project/linux-mediatek/patch/20260805070851.2885888-1-pawlik.dan@gmail.com/ > Assisted-by: Cursor:composer-2 > Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com> > --- > v2: > - allocate one coherent mailbox buffer at probe and reuse it under the > per-core lock instead of per-message dma_alloc_coherent(GFP_ATOMIC) > > drivers/net/ethernet/airoha/airoha_npu.c | 31 +++++++++++++++++------ > include/linux/soc/airoha/airoha_offload.h | 4 +++ > 2 files changed, 27 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c > index b679bed952de..dfa09fed907e 100644 > --- a/drivers/net/ethernet/airoha/airoha_npu.c > +++ b/drivers/net/ethernet/airoha/airoha_npu.c > @@ -23,6 +23,8 @@ > #define NPU_EN7581_FIRMWARE_RV32_MAX_SIZE 0x200000 > #define NPU_EN7581_FIRMWARE_DATA_MAX_SIZE 0x10000 > #define NPU_DUMP_SIZE 512 > +/* Enough for struct ppe_mbox_data and small WLAN TLV payloads */ > +#define AIROHA_NPU_MBOX_SIZE 256 Are you sure this is enough for all possible messages? > > #define REG_NPU_LOCAL_SRAM 0x0 > > @@ -165,17 +167,24 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > { > u16 core = 0; /* FIXME */ > u32 val, offset = core << 4; > - dma_addr_t dma_addr; > int ret; > > - dma_addr = dma_map_single(npu->dev, p, size, DMA_BIDIRECTIONAL); > - ret = dma_mapping_error(npu->dev, dma_addr); > - if (ret) > - return ret; > + if (size > AIROHA_NPU_MBOX_SIZE) > + return -EINVAL; > > + /* > + * Mailbox payloads are bidirectional (CPU request, NPU response). > + * On EN7581+MT7996, streaming DMA_BIDIRECTIONAL against the > + * caller kzalloc() buffer can leave WLAN_FUNC_GET_WAIT_NPU_VERSION > + * reading as 0.0 despite MBOX success. Reuse a probe-time coherent > + * bounce buffer under the per-core lock (also used from PPE > + * foe_commit under atomic context). > + */ > spin_lock_bh(&npu->cores[core].lock); > > - regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, dma_addr); > + memcpy(npu->mbox_buf, p, size); Even if it is a just a theoretical issue (we just use core 0 at the moment), we should have a per-core buffer since we can theoretically have concurrent messages on different cores. > + > + regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(0) + offset, npu->mbox_dma); > regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(1) + offset, size); > regmap_read(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, &val); > regmap_write(npu->regmap, REG_CR_MBQ0_CTRL(2) + offset, val + 1); > @@ -189,9 +198,10 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, > if (!ret && FIELD_GET(MBOX_MSG_STATUS, val) != NPU_MBOX_SUCCESS) > ret = -EINVAL; > > - spin_unlock_bh(&npu->cores[core].lock); > + if (!ret) > + memcpy(p, npu->mbox_buf, size); I do not like this double copy here. I guess we could pass a pointer for the reply buffer to airoha_npu_send_msg() and avoid the copy in airoha_npu_wlan_msg_get(). What do you think? > > - dma_unmap_single(npu->dev, dma_addr, size, DMA_BIDIRECTIONAL); > + spin_unlock_bh(&npu->cores[core].lock); > > return ret; > } > @@ -770,6 +780,11 @@ static int airoha_npu_probe(struct platform_device *pdev) > if (err) > return err; > > + npu->mbox_buf = dmam_alloc_coherent(dev, AIROHA_NPU_MBOX_SIZE, > + &npu->mbox_dma, GFP_KERNEL); > + if (!npu->mbox_buf) > + return -ENOMEM; > + > err = airoha_npu_run_firmware(dev, base, &res); > if (err) > return dev_err_probe(dev, err, "failed to run npu firmware\n"); > diff --git a/include/linux/soc/airoha/airoha_offload.h b/include/linux/soc/airoha/airoha_offload.h > index 7589fccfeef6..afd481233489 100644 > --- a/include/linux/soc/airoha/airoha_offload.h > +++ b/include/linux/soc/airoha/airoha_offload.h > @@ -179,6 +179,10 @@ struct airoha_npu { > > struct airoha_foe_stats __iomem *stats; > > + /* Coherent bounce buffer for mailbox cmd/rsp (airoha_npu_send_msg) */ > + void *mbox_buf; > + dma_addr_t mbox_dma; you need to move them in airoha_npu_core struct. Please rename them to: struct airoha_npu_core { ... void *buf; dma_addr_t addr; ... }; Regards, Lorenzo > + > struct { > int (*ppe_init)(struct airoha_npu *npu); > int (*ppe_deinit)(struct airoha_npu *npu); > -- > 2.55.0 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-06 8:02 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-05 7:08 [PATCH] net: airoha: npu: use coherent DMA for mailbox messages Daniel Pawlik 2026-08-05 9:59 ` Lorenzo Bianconi 2026-08-05 12:15 ` Daniel Pawlik 2026-08-06 7:26 ` [PATCH v2] " Daniel Pawlik 2026-08-06 8:02 ` Lorenzo Bianconi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox