net: ethernet: mtk_wed: make memory region optional
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 18 Sep 2023 10:29:10 +0000 (12:29 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 19 Sep 2023 16:27:55 +0000 (18:27 +0200)
Make mtk_wed_wo_memory_region optionals.
This is a preliminary patch to introduce Wireless Ethernet Dispatcher
support for MT7988 SoC since MT7988 WED fw image will have a different
layout.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mediatek/mtk_wed_mcu.c

index cc54fbd7380aea926e3d5a43d97dd71e62e47125..e53531252bd936149bd5be3f248d3e7b142e312b 100644 (file)
@@ -234,19 +234,13 @@ 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_wo *wo,
+mtk_wed_get_memory_region(struct mtk_wed_hw *hw, int index,
                          struct mtk_wed_wo_memory_region *region)
 {
        struct reserved_mem *rmem;
        struct device_node *np;
-       int index;
 
-       index = of_property_match_string(wo->hw->node, "memory-region-names",
-                                        region->name);
-       if (index < 0)
-               return index;
-
-       np = of_parse_phandle(wo->hw->node, "memory-region", index);
+       np = of_parse_phandle(hw->node, "memory-region", index);
        if (!np)
                return -ENODEV;
 
@@ -258,7 +252,7 @@ mtk_wed_get_memory_region(struct mtk_wed_wo *wo,
 
        region->phy_addr = rmem->base;
        region->size = rmem->size;
-       region->addr = devm_ioremap(wo->hw->dev, region->phy_addr, region->size);
+       region->addr = devm_ioremap(hw->dev, region->phy_addr, region->size);
 
        return !region->addr ? -EINVAL : 0;
 }
@@ -271,6 +265,9 @@ mtk_wed_mcu_run_firmware(struct mtk_wed_wo *wo, const struct firmware *fw,
        const struct mtk_wed_fw_trailer *trailer;
        const struct mtk_wed_fw_region *fw_region;
 
+       if (!region->phy_addr || !region->size)
+               return 0;
+
        trailer_ptr = fw->data + fw->size - sizeof(*trailer);
        trailer = (const struct mtk_wed_fw_trailer *)trailer_ptr;
        region_ptr = trailer_ptr - trailer->num_region * sizeof(*fw_region);
@@ -318,7 +315,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
 
        /* load firmware region metadata */
        for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
-               ret = mtk_wed_get_memory_region(wo, &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]);
                if (ret)
                        return ret;
        }