943-net-ethernet-mtk_wed-move-ilm-a-dedicated-dts-node.patch 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. From f3565e6c2276411275e707a5442d3f69cc111273 Mon Sep 17 00:00:00 2001
  2. Message-Id: <f3565e6c2276411275e707a5442d3f69cc111273.1678718888.git.lorenzo@kernel.org>
  3. From: Lorenzo Bianconi <[email protected]>
  4. Date: Sun, 12 Mar 2023 18:51:47 +0100
  5. Subject: [PATCH net-next 1/3] net: ethernet: mtk_wed: move ilm a dedicated dts
  6. node
  7. Since the ilm memory region is not part of the RAM SoC, move ilm in a
  8. deidicated syscon node.
  9. This patch helps to keep backward-compatibility with older version of
  10. uboot codebase where we have a limit of 8 reserved-memory dts child
  11. nodes.
  12. Keep backward-compatibility with older dts version where ilm was defined
  13. as reserved-memory child node.
  14. Signed-off-by: Lorenzo Bianconi <[email protected]>
  15. ---
  16. drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 55 ++++++++++++++++++---
  17. 1 file changed, 49 insertions(+), 6 deletions(-)
  18. --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  19. +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  20. @@ -316,6 +316,39 @@ next:
  21. }
  22. static int
  23. +mtk_wed_mcu_load_ilm(struct mtk_wed_wo *wo)
  24. +{
  25. + struct mtk_wed_wo_memory_region *ilm_region;
  26. + struct resource res;
  27. + struct device_node *np;
  28. + int ret;
  29. +
  30. + np = of_parse_phandle(wo->hw->node, "mediatek,wo-ilm", 0);
  31. + if (!np)
  32. + return 0;
  33. +
  34. + ret = of_address_to_resource(np, 0, &res);
  35. + of_node_put(np);
  36. +
  37. + if (ret < 0)
  38. + return ret;
  39. +
  40. + ilm_region = &mem_region[MTK_WED_WO_REGION_ILM];
  41. + ilm_region->phy_addr = res.start;
  42. + ilm_region->size = resource_size(&res);
  43. + ilm_region->addr = devm_ioremap(wo->hw->dev, res.start,
  44. + resource_size(&res));
  45. +
  46. + if (!IS_ERR(ilm_region->addr))
  47. + return 0;
  48. +
  49. + ret = PTR_ERR(ilm_region->addr);
  50. + ilm_region->addr = NULL;
  51. +
  52. + return ret;
  53. +}
  54. +
  55. +static int
  56. mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
  57. {
  58. const struct mtk_wed_fw_trailer *trailer;
  59. @@ -324,14 +357,20 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
  60. u32 val, boot_cr;
  61. int ret, i;
  62. + mtk_wed_mcu_load_ilm(wo);
  63. wo->boot_regmap = syscon_regmap_lookup_by_phandle(wo->hw->node,
  64. "mediatek,wo-cpuboot");
  65. /* load firmware region metadata */
  66. for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
  67. - int index = of_property_match_string(wo->hw->node,
  68. - "memory-region-names",
  69. - mem_region[i].name);
  70. + int index;
  71. +
  72. + if (mem_region[i].addr)
  73. + continue;
  74. +
  75. + index = of_property_match_string(wo->hw->node,
  76. + "memory-region-names",
  77. + mem_region[i].name);
  78. if (index < 0)
  79. continue;