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

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
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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;
	}