* [PATCH net-next 0/2] Add the capability to read firmware binary names from dts for Airoha NPU driver
@ 2026-01-12 10:00 Lorenzo Bianconi
2026-01-12 10:00 ` [PATCH net-next 1/2] dt-bindings: net: airoha: npu: Add firmware-name property Lorenzo Bianconi
2026-01-12 10:00 ` [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts Lorenzo Bianconi
0 siblings, 2 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2026-01-12 10:00 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Lorenzo Bianconi
Cc: netdev, devicetree, linux-arm-kernel, linux-mediatek
This is a preliminary patch to enable NPU offloading for MT7996 (Eagle)
chipset since it requires a different binary with respect to the one
used for MT7992 on the EN7581 SoC.
---
Lorenzo Bianconi (2):
dt-bindings: net: airoha: npu: Add firmware-name property
net: airoha: npu: Add the capability to read firmware names from dts
.../devicetree/bindings/net/airoha,en7581-npu.yaml | 7 ++++
drivers/net/ethernet/airoha/airoha_npu.c | 42 ++++++++++++++++++----
2 files changed, 43 insertions(+), 6 deletions(-)
---
base-commit: bc87b14594e30720a5c1546c24e0f5f08d34eb40
change-id: 20260107-airoha-npu-firmware-name-34e5002a1a3f
Best regards,
--
Lorenzo Bianconi <lorenzo@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH net-next 1/2] dt-bindings: net: airoha: npu: Add firmware-name property 2026-01-12 10:00 [PATCH net-next 0/2] Add the capability to read firmware binary names from dts for Airoha NPU driver Lorenzo Bianconi @ 2026-01-12 10:00 ` Lorenzo Bianconi 2026-01-12 10:00 ` [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts Lorenzo Bianconi 1 sibling, 0 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2026-01-12 10:00 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lorenzo Bianconi Cc: netdev, devicetree, linux-arm-kernel, linux-mediatek Add firmware-name property in order to introduce the capability to specify the firmware names used for RiscV core/Data section binaries. This is a preliminary patch to enable NPU offloading for MT7996 (Eagle) chipset since it requires a different binary with respect to the one used for MT7992 on EN7581 SoC. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- Documentation/devicetree/bindings/net/airoha,en7581-npu.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/net/airoha,en7581-npu.yaml b/Documentation/devicetree/bindings/net/airoha,en7581-npu.yaml index 59c57f58116b568092446e6cfb7b6bd3f4f47b82..e008cf92e0975b43b433030908c35340361bc71c 100644 --- a/Documentation/devicetree/bindings/net/airoha,en7581-npu.yaml +++ b/Documentation/devicetree/bindings/net/airoha,en7581-npu.yaml @@ -58,6 +58,11 @@ properties: - const: tx-pkt - const: tx-bufid + firmware-name: + items: + - description: Firmware name of RiscV core + - description: Firmware name of Data section + required: - compatible - reg @@ -95,5 +100,7 @@ examples: memory-region = <&npu_firmware>, <&npu_pkt>, <&npu_txpkt>, <&npu_txbufid>; memory-region-names = "firmware", "pkt", "tx-pkt", "tx-bufid"; + firmware-name = "airoha/en7581_npu_rv32.bin", + "airoha/en7581_npu_data.bin"; }; }; -- 2.52.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 10:00 [PATCH net-next 0/2] Add the capability to read firmware binary names from dts for Airoha NPU driver Lorenzo Bianconi 2026-01-12 10:00 ` [PATCH net-next 1/2] dt-bindings: net: airoha: npu: Add firmware-name property Lorenzo Bianconi @ 2026-01-12 10:00 ` Lorenzo Bianconi 2026-01-12 13:30 ` Andrew Lunn 1 sibling, 1 reply; 8+ messages in thread From: Lorenzo Bianconi @ 2026-01-12 10:00 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lorenzo Bianconi Cc: netdev, devicetree, linux-arm-kernel, linux-mediatek Introduce the capability to read the firmware binary names from device-tree using the firmware-name property if available. This is a preliminary patch to enable NPU offloading for MT7996 (Eagle) chipset since it requires a different binary with respect to the one used for MT7992 on the EN7581 SoC. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- drivers/net/ethernet/airoha/airoha_npu.c | 42 +++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/airoha/airoha_npu.c b/drivers/net/ethernet/airoha/airoha_npu.c index 22f72c146065998d5450477f664ed308b1569aa3..bba30582787babd77083c7456349f0af76afc505 100644 --- a/drivers/net/ethernet/airoha/airoha_npu.c +++ b/drivers/net/ethernet/airoha/airoha_npu.c @@ -195,18 +195,18 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id, } static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr, - const struct airoha_npu_fw *fw_info) + const char *fw_name, int fw_max_size) { const struct firmware *fw; int ret; - ret = request_firmware(&fw, fw_info->name, dev); + ret = request_firmware(&fw, fw_name, dev); if (ret) return ret == -ENOENT ? -EPROBE_DEFER : ret; - if (fw->size > fw_info->max_size) { + if (fw->size > fw_max_size) { dev_err(dev, "%s: fw size too overlimit (%zu)\n", - fw_info->name, fw->size); + fw_name, fw->size); ret = -E2BIG; goto out; } @@ -218,6 +218,28 @@ static int airoha_npu_load_firmware(struct device *dev, void __iomem *addr, return ret; } +static int +airoha_npu_load_firmware_from_dts(struct device *dev, void __iomem *addr, + void __iomem *base) +{ + const char *fw_names[2]; + int ret; + + ret = of_property_read_string_array(dev->of_node, "firmware-name", + fw_names, ARRAY_SIZE(fw_names)); + if (ret != ARRAY_SIZE(fw_names)) + return -EINVAL; + + ret = airoha_npu_load_firmware(dev, addr, fw_names[0], + NPU_EN7581_FIRMWARE_RV32_MAX_SIZE); + if (ret) + return ret; + + return airoha_npu_load_firmware(dev, base + REG_NPU_LOCAL_SRAM, + fw_names[1], + NPU_EN7581_FIRMWARE_DATA_MAX_SIZE); +} + static int airoha_npu_run_firmware(struct device *dev, void __iomem *base, struct resource *res) { @@ -233,14 +255,22 @@ static int airoha_npu_run_firmware(struct device *dev, void __iomem *base, if (IS_ERR(addr)) return PTR_ERR(addr); + /* Try to load firmware images using the firmware names provided via + * dts if available. + */ + if (of_find_property(dev->of_node, "firmware-name", NULL)) + return airoha_npu_load_firmware_from_dts(dev, addr, base); + /* Load rv32 npu firmware */ - ret = airoha_npu_load_firmware(dev, addr, &soc->fw_rv32); + ret = airoha_npu_load_firmware(dev, addr, soc->fw_rv32.name, + soc->fw_rv32.max_size); if (ret) return ret; /* Load data npu firmware */ return airoha_npu_load_firmware(dev, base + REG_NPU_LOCAL_SRAM, - &soc->fw_data); + soc->fw_data.name, + soc->fw_data.max_size); } static irqreturn_t airoha_npu_mbox_handler(int irq, void *npu_instance) -- 2.52.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 10:00 ` [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts Lorenzo Bianconi @ 2026-01-12 13:30 ` Andrew Lunn 2026-01-12 13:35 ` Lorenzo Bianconi 0 siblings, 1 reply; 8+ messages in thread From: Andrew Lunn @ 2026-01-12 13:30 UTC (permalink / raw) To: Lorenzo Bianconi Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, netdev, devicetree, linux-arm-kernel, linux-mediatek On Mon, Jan 12, 2026 at 11:00:08AM +0100, Lorenzo Bianconi wrote: > Introduce the capability to read the firmware binary names from device-tree > using the firmware-name property if available. > This is a preliminary patch to enable NPU offloading for MT7996 (Eagle) > chipset since it requires a different binary with respect to the one > used for MT7992 on the EN7581 SoC. When i look at airoha_npu.c i see: #define NPU_EN7581_FIRMWARE_DATA "airoha/en7581_npu_data.bin" #define NPU_EN7581_FIRMWARE_RV32 "airoha/en7581_npu_rv32.bin" #define NPU_AN7583_FIRMWARE_DATA "airoha/an7583_npu_data.bin" #define NPU_AN7583_FIRMWARE_RV32 "airoha/an7583_npu_rv32.bin" static const struct airoha_npu_soc_data en7581_npu_soc_data = { .fw_rv32 = { .name = NPU_EN7581_FIRMWARE_RV32, .max_size = NPU_EN7581_FIRMWARE_RV32_MAX_SIZE, }, .fw_data = { .name = NPU_EN7581_FIRMWARE_DATA, .max_size = NPU_EN7581_FIRMWARE_DATA_MAX_SIZE, }, }; static const struct airoha_npu_soc_data an7583_npu_soc_data = { .fw_rv32 = { .name = NPU_AN7583_FIRMWARE_RV32, .max_size = NPU_EN7581_FIRMWARE_RV32_MAX_SIZE, }, .fw_data = { .name = NPU_AN7583_FIRMWARE_DATA, .max_size = NPU_EN7581_FIRMWARE_DATA_MAX_SIZE, }, }; static const struct of_device_id of_airoha_npu_match[] = { { .compatible = "airoha,en7581-npu", .data = &en7581_npu_soc_data }, { .compatible = "airoha,an7583-npu", .data = &an7583_npu_soc_data }, { /* sentinel */ } }; Why cannot this scheme be extended with another compatible? Andrew ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 13:30 ` Andrew Lunn @ 2026-01-12 13:35 ` Lorenzo Bianconi 2026-01-12 14:11 ` Andrew Lunn 2026-01-13 8:11 ` Krzysztof Kozlowski 0 siblings, 2 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2026-01-12 13:35 UTC (permalink / raw) To: Andrew Lunn Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, netdev, devicetree, linux-arm-kernel, linux-mediatek [-- Attachment #1: Type: text/plain, Size: 2249 bytes --] > On Mon, Jan 12, 2026 at 11:00:08AM +0100, Lorenzo Bianconi wrote: > > Introduce the capability to read the firmware binary names from device-tree > > using the firmware-name property if available. > > This is a preliminary patch to enable NPU offloading for MT7996 (Eagle) > > chipset since it requires a different binary with respect to the one > > used for MT7992 on the EN7581 SoC. > > When i look at > > airoha_npu.c > > i see: > > #define NPU_EN7581_FIRMWARE_DATA "airoha/en7581_npu_data.bin" > #define NPU_EN7581_FIRMWARE_RV32 "airoha/en7581_npu_rv32.bin" > #define NPU_AN7583_FIRMWARE_DATA "airoha/an7583_npu_data.bin" > #define NPU_AN7583_FIRMWARE_RV32 "airoha/an7583_npu_rv32.bin" > > static const struct airoha_npu_soc_data en7581_npu_soc_data = { > .fw_rv32 = { > .name = NPU_EN7581_FIRMWARE_RV32, > .max_size = NPU_EN7581_FIRMWARE_RV32_MAX_SIZE, > }, > .fw_data = { > .name = NPU_EN7581_FIRMWARE_DATA, > .max_size = NPU_EN7581_FIRMWARE_DATA_MAX_SIZE, > }, > }; > > static const struct airoha_npu_soc_data an7583_npu_soc_data = { > .fw_rv32 = { > .name = NPU_AN7583_FIRMWARE_RV32, > .max_size = NPU_EN7581_FIRMWARE_RV32_MAX_SIZE, > }, > .fw_data = { > .name = NPU_AN7583_FIRMWARE_DATA, > .max_size = NPU_EN7581_FIRMWARE_DATA_MAX_SIZE, > }, > }; > > static const struct of_device_id of_airoha_npu_match[] = { > { .compatible = "airoha,en7581-npu", .data = &en7581_npu_soc_data }, > { .compatible = "airoha,an7583-npu", .data = &an7583_npu_soc_data }, > { /* sentinel */ } > }; > > Why cannot this scheme be extended with another compatible? yes, that is another possibility I was thinking of but then I found "firwmare-name" property was quite a common approach. Something like: static const struct of_device_id of_airoha_npu_match[] = { ... { .compatible = "airoha,en7581-npu-7996", .data = &en7581_7996_npu_soc_data }, ... }; What do you think? Regards, Lorenzo > > Andrew [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 13:35 ` Lorenzo Bianconi @ 2026-01-12 14:11 ` Andrew Lunn 2026-01-12 14:40 ` Lorenzo Bianconi 2026-01-13 8:11 ` Krzysztof Kozlowski 1 sibling, 1 reply; 8+ messages in thread From: Andrew Lunn @ 2026-01-12 14:11 UTC (permalink / raw) To: Lorenzo Bianconi Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, netdev, devicetree, linux-arm-kernel, linux-mediatek > > Why cannot this scheme be extended with another compatible? > > yes, that is another possibility I was thinking of but then I found > "firwmare-name" property was quite a common approach. > Something like: Having two different ways of doing the same thing in one driver just add unneeded complexity. Please just key of the compatible like all other devices this driver supports. Andrew --- pw-bot: cr ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 14:11 ` Andrew Lunn @ 2026-01-12 14:40 ` Lorenzo Bianconi 0 siblings, 0 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2026-01-12 14:40 UTC (permalink / raw) To: Andrew Lunn Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, netdev, devicetree, linux-arm-kernel, linux-mediatek [-- Attachment #1: Type: text/plain, Size: 507 bytes --] > > > Why cannot this scheme be extended with another compatible? > > > > yes, that is another possibility I was thinking of but then I found > > "firwmare-name" property was quite a common approach. > > Something like: > > Having two different ways of doing the same thing in one driver just > add unneeded complexity. Please just key of the compatible like all > other devices this driver supports. > > Andrew ack, I will fix it in v2. Regards, Lorenzo > > --- > pw-bot: cr [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts 2026-01-12 13:35 ` Lorenzo Bianconi 2026-01-12 14:11 ` Andrew Lunn @ 2026-01-13 8:11 ` Krzysztof Kozlowski 1 sibling, 0 replies; 8+ messages in thread From: Krzysztof Kozlowski @ 2026-01-13 8:11 UTC (permalink / raw) To: Lorenzo Bianconi Cc: Andrew Lunn, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, netdev, devicetree, linux-arm-kernel, linux-mediatek On Mon, Jan 12, 2026 at 02:35:57PM +0100, Lorenzo Bianconi wrote: > > static const struct of_device_id of_airoha_npu_match[] = { > > { .compatible = "airoha,en7581-npu", .data = &en7581_npu_soc_data }, > > { .compatible = "airoha,an7583-npu", .data = &an7583_npu_soc_data }, > > { /* sentinel */ } > > }; > > > > Why cannot this scheme be extended with another compatible? > > yes, that is another possibility I was thinking of but then I found > "firwmare-name" property was quite a common approach. "firmware-name" is for cases when the firmware is per board, not per SoC. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-01-13 8:12 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-01-12 10:00 [PATCH net-next 0/2] Add the capability to read firmware binary names from dts for Airoha NPU driver Lorenzo Bianconi 2026-01-12 10:00 ` [PATCH net-next 1/2] dt-bindings: net: airoha: npu: Add firmware-name property Lorenzo Bianconi 2026-01-12 10:00 ` [PATCH net-next 2/2] net: airoha: npu: Add the capability to read firmware names from dts Lorenzo Bianconi 2026-01-12 13:30 ` Andrew Lunn 2026-01-12 13:35 ` Lorenzo Bianconi 2026-01-12 14:11 ` Andrew Lunn 2026-01-12 14:40 ` Lorenzo Bianconi 2026-01-13 8:11 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox