]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: Use of_reserved_mem_region_to_resource{_byname}() for "memory-region"
authorRob Herring (Arm) <robh@kernel.org>
Thu, 3 Jul 2025 18:34:57 +0000 (13:34 -0500)
committerJakub Kicinski <kuba@kernel.org>
Tue, 8 Jul 2025 15:29:46 +0000 (08:29 -0700)
Use the newly added of_reserved_mem_region_to_resource{_byname}()
functions to handle "memory-region" properties.

The error handling is a bit different for mtk_wed_mcu_load_firmware().
A failed match of the "memory-region-names" would skip the entry, but
then other errors in the lookup and retrieval of the address would not
skip the entry. However, that distinction is not really important.
Either the region is available and usable or it is not. So now, errors
from of_reserved_mem_region_to_resource() are ignored so the region is
simply skipped.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
Link: https://patch.msgid.link/20250703183459.2074381-1-robh@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_npu.c
drivers/net/ethernet/mediatek/mtk_wed.c
drivers/net/ethernet/mediatek/mtk_wed_mcu.c
drivers/net/ipa/ipa_main.c

index 0e5b8c21b9aa8bacdfb2e1572afe4324003e8279..4e8deb87f7514b2d17d877d485ffb3bce1ae03be 100644 (file)
@@ -161,7 +161,7 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
 }
 
 static int airoha_npu_run_firmware(struct device *dev, void __iomem *base,
-                                  struct reserved_mem *rmem)
+                                  struct resource *res)
 {
        const struct firmware *fw;
        void __iomem *addr;
@@ -178,7 +178,7 @@ static int airoha_npu_run_firmware(struct device *dev, void __iomem *base,
                goto out;
        }
 
-       addr = devm_ioremap(dev, rmem->base, rmem->size);
+       addr = devm_ioremap_resource(dev, res);
        if (!addr) {
                ret = -ENOMEM;
                goto out;
@@ -474,9 +474,8 @@ static const struct regmap_config regmap_config = {
 static int airoha_npu_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
-       struct reserved_mem *rmem;
        struct airoha_npu *npu;
-       struct device_node *np;
+       struct resource res;
        void __iomem *base;
        int i, irq, err;
 
@@ -498,15 +497,9 @@ static int airoha_npu_probe(struct platform_device *pdev)
        if (IS_ERR(npu->regmap))
                return PTR_ERR(npu->regmap);
 
-       np = of_parse_phandle(dev->of_node, "memory-region", 0);
-       if (!np)
-               return -ENODEV;
-
-       rmem = of_reserved_mem_lookup(np);
-       of_node_put(np);
-
-       if (!rmem)
-               return -ENODEV;
+       err = of_reserved_mem_region_to_resource(dev->of_node, 0, &res);
+       if (err)
+               return err;
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0)
@@ -539,12 +532,12 @@ static int airoha_npu_probe(struct platform_device *pdev)
        if (err)
                return err;
 
-       err = airoha_npu_run_firmware(dev, base, rmem);
+       err = airoha_npu_run_firmware(dev, base, &res);
        if (err)
                return dev_err_probe(dev, err, "failed to run npu firmware\n");
 
        regmap_write(npu->regmap, REG_CR_NPU_MIB(10),
-                    rmem->base + NPU_EN7581_FIRMWARE_RV32_MAX_SIZE);
+                    res.start + NPU_EN7581_FIRMWARE_RV32_MAX_SIZE);
        regmap_write(npu->regmap, REG_CR_NPU_MIB(11), 0x40000); /* SRAM 256K */
        regmap_write(npu->regmap, REG_CR_NPU_MIB(12), 0);
        regmap_write(npu->regmap, REG_CR_NPU_MIB(21), 1);
@@ -552,7 +545,7 @@ static int airoha_npu_probe(struct platform_device *pdev)
 
        /* setting booting address */
        for (i = 0; i < NPU_NUM_CORES; i++)
-               regmap_write(npu->regmap, REG_CR_BOOT_BASE(i), rmem->base);
+               regmap_write(npu->regmap, REG_CR_BOOT_BASE(i), res.start);
        usleep_range(1000, 2000);
 
        /* enable NPU cores */
index 351dd152f4f36a99a1d57f8629c962df917783b5..73c26fcfd85e7be3040abea8e80ff4bee881016c 100644 (file)
@@ -1318,26 +1318,14 @@ mtk_wed_rro_ring_alloc(struct mtk_wed_device *dev, struct mtk_wed_ring *ring,
 static int
 mtk_wed_rro_alloc(struct mtk_wed_device *dev)
 {
-       struct reserved_mem *rmem;
-       struct device_node *np;
-       int index;
+       struct resource res;
+       int ret;
 
-       index = of_property_match_string(dev->hw->node, "memory-region-names",
-                                        "wo-dlm");
-       if (index < 0)
-               return index;
-
-       np = of_parse_phandle(dev->hw->node, "memory-region", index);
-       if (!np)
-               return -ENODEV;
-
-       rmem = of_reserved_mem_lookup(np);
-       of_node_put(np);
-
-       if (!rmem)
-               return -ENODEV;
+       ret = of_reserved_mem_region_to_resource_byname(dev->hw->node, "wo-dlm", &res);
+       if (ret)
+               return ret;
 
-       dev->rro.miod_phys = rmem->base;
+       dev->rro.miod_phys = res.start;
        dev->rro.fdbk_phys = MTK_WED_MIOD_COUNT + dev->rro.miod_phys;
 
        return mtk_wed_rro_ring_alloc(dev, &dev->rro.ring,
index c06e5ad18b0105c1ac63d7a63d422800316a7ae2..8498b35ec7a6a88bb62be09865fc5ba64cebf02f 100644 (file)
@@ -234,25 +234,19 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
 }
 
 static int
-mtk_wed_get_memory_region(struct mtk_wed_hw *hw, int index,
+mtk_wed_get_memory_region(struct mtk_wed_hw *hw, const char *name,
                          struct mtk_wed_wo_memory_region *region)
 {
-       struct reserved_mem *rmem;
-       struct device_node *np;
-
-       np = of_parse_phandle(hw->node, "memory-region", index);
-       if (!np)
-               return -ENODEV;
-
-       rmem = of_reserved_mem_lookup(np);
-       of_node_put(np);
+       struct resource res;
+       int ret;
 
-       if (!rmem)
-               return -ENODEV;
+       ret = of_reserved_mem_region_to_resource_byname(hw->node, name, &res);
+       if (ret)
+               return 0;
 
-       region->phy_addr = rmem->base;
-       region->size = rmem->size;
-       region->addr = devm_ioremap(hw->dev, region->phy_addr, region->size);
+       region->phy_addr = res.start;
+       region->size = resource_size(&res);
+       region->addr = devm_ioremap_resource(hw->dev, &res);
 
        return !region->addr ? -EINVAL : 0;
 }
@@ -319,13 +313,7 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
 
        /* load firmware region metadata */
        for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
-               int index = of_property_match_string(wo->hw->node,
-                                                    "memory-region-names",
-                                                    mem_region[i].name);
-               if (index < 0)
-                       continue;
-
-               ret = mtk_wed_get_memory_region(wo->hw, index, &mem_region[i]);
+               ret = mtk_wed_get_memory_region(wo->hw, mem_region[i].name, &mem_region[i]);
                if (ret)
                        return ret;
        }
index f25f6e2cf58cc30774e2414e388d3a3c69b16ae6..25500c5a6928e46053efceddb403848a50e7ae87 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_address.h>
+#include <linux/of_reserved_mem.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/types.h>
@@ -586,7 +586,6 @@ static void ipa_deconfig(struct ipa *ipa)
 static int ipa_firmware_load(struct device *dev)
 {
        const struct firmware *fw;
-       struct device_node *node;
        struct resource res;
        phys_addr_t phys;
        const char *path;
@@ -594,14 +593,7 @@ static int ipa_firmware_load(struct device *dev)
        void *virt;
        int ret;
 
-       node = of_parse_phandle(dev->of_node, "memory-region", 0);
-       if (!node) {
-               dev_err(dev, "DT error getting \"memory-region\" property\n");
-               return -EINVAL;
-       }
-
-       ret = of_address_to_resource(node, 0, &res);
-       of_node_put(node);
+       ret = of_reserved_mem_region_to_resource(dev->of_node, 0, &res);
        if (ret) {
                dev_err(dev, "error %d getting \"memory-region\" resource\n",
                        ret);