Commit 71e21359 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Paolo Abeni

net: ethernet: mtk_wed: make memory region optional

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: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent c6d961ae
...@@ -234,19 +234,13 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data, ...@@ -234,19 +234,13 @@ int mtk_wed_mcu_msg_update(struct mtk_wed_device *dev, int id, void *data,
} }
static int 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 mtk_wed_wo_memory_region *region)
{ {
struct reserved_mem *rmem; struct reserved_mem *rmem;
struct device_node *np; struct device_node *np;
int index;
index = of_property_match_string(wo->hw->node, "memory-region-names", np = of_parse_phandle(hw->node, "memory-region", index);
region->name);
if (index < 0)
return index;
np = of_parse_phandle(wo->hw->node, "memory-region", index);
if (!np) if (!np)
return -ENODEV; return -ENODEV;
...@@ -258,7 +252,7 @@ mtk_wed_get_memory_region(struct mtk_wed_wo *wo, ...@@ -258,7 +252,7 @@ mtk_wed_get_memory_region(struct mtk_wed_wo *wo,
region->phy_addr = rmem->base; region->phy_addr = rmem->base;
region->size = rmem->size; 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; return !region->addr ? -EINVAL : 0;
} }
...@@ -271,6 +265,9 @@ mtk_wed_mcu_run_firmware(struct mtk_wed_wo *wo, const struct firmware *fw, ...@@ -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_trailer *trailer;
const struct mtk_wed_fw_region *fw_region; 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_ptr = fw->data + fw->size - sizeof(*trailer);
trailer = (const struct mtk_wed_fw_trailer *)trailer_ptr; trailer = (const struct mtk_wed_fw_trailer *)trailer_ptr;
region_ptr = trailer_ptr - trailer->num_region * sizeof(*fw_region); region_ptr = trailer_ptr - trailer->num_region * sizeof(*fw_region);
...@@ -318,7 +315,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo) ...@@ -318,7 +315,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
/* load firmware region metadata */ /* load firmware region metadata */
for (i = 0; i < ARRAY_SIZE(mem_region); i++) { 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) if (ret)
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment