[PATCH net-next 05/10] net: ethernet: mtk_wed: move ilm a dedicated dts node
Lorenzo Bianconi
lorenzo at kernel.org
Mon Mar 20 09:57:59 PDT 2023
Since the ilm memory region is not part of the RAM SoC, move ilm in a
deidicated syscon node.
This patch helps to keep backward-compatibility with older version of
uboot codebase where we have a limit of 8 reserved-memory dts child
nodes.
Keep backward-compatibility with older dts version where ilm was defined
as reserved-memory child node.
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 55 ++++++++++++++++++---
1 file changed, 49 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
index 797c3b412ab6..a19db914ebd2 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
@@ -299,6 +299,52 @@ mtk_wed_mcu_run_firmware(struct mtk_wed_wo *wo, const struct firmware *fw,
return -EINVAL;
}
+static int
+mtk_wed_mcu_load_memory_regions(struct mtk_wed_wo *wo,
+ struct mtk_wed_wo_memory_region *region)
+{
+ struct device_node *np;
+ int ret;
+
+ /* firmware EMI memory region */
+ ret = mtk_wed_get_reserved_memory_region(wo,
+ ®ion[MTK_WED_WO_REGION_EMI]);
+ if (ret)
+ return ret;
+
+ /* firmware DATA memory region */
+ ret = mtk_wed_get_reserved_memory_region(wo,
+ ®ion[MTK_WED_WO_REGION_DATA]);
+ if (ret)
+ return ret;
+
+ np = of_parse_phandle(wo->hw->node, "mediatek,wo-ilm", 0);
+ if (np) {
+ struct mtk_wed_wo_memory_region *ilm_region;
+ struct resource res;
+
+ ret = of_address_to_resource(np, 0, &res);
+ of_node_put(np);
+
+ if (ret < 0)
+ return ret;
+
+ ilm_region = ®ion[MTK_WED_WO_REGION_ILM];
+ ilm_region->phy_addr = res.start;
+ ilm_region->size = resource_size(&res);
+ ilm_region->addr = devm_ioremap(wo->hw->dev, ilm_region->phy_addr,
+ ilm_region->size);
+
+ return ilm_region->addr ? 0 : -ENOMEM;
+ }
+
+ /* For backward compatibility, we need to check if ILM
+ * node is defined through reserved memory property.
+ */
+ return mtk_wed_get_reserved_memory_region(wo,
+ ®ion[MTK_WED_WO_REGION_ILM]);
+}
+
static int
mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
{
@@ -320,12 +366,9 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
u32 val, boot_cr;
int ret, i;
- /* load firmware region metadata */
- for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
- ret = mtk_wed_get_reserved_memory_region(wo, &mem_region[i]);
- if (ret)
- return ret;
- }
+ ret = mtk_wed_mcu_load_memory_regions(wo, mem_region);
+ if (ret)
+ return ret;
wo->boot_regmap = syscon_regmap_lookup_by_phandle(wo->hw->node,
"mediatek,wo-cpuboot");
--
2.39.2
More information about the Linux-mediatek
mailing list