752-11-v6.7-net-ethernet-mtk_wed-make-memory-region-optional.patch 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Mon, 18 Sep 2023 12:29:10 +0200
  3. Subject: [PATCH] net: ethernet: mtk_wed: make memory region optional
  4. Make mtk_wed_wo_memory_region optionals.
  5. This is a preliminary patch to introduce Wireless Ethernet Dispatcher
  6. support for MT7988 SoC since MT7988 WED fw image will have a different
  7. layout.
  8. Signed-off-by: Lorenzo Bianconi <[email protected]>
  9. Signed-off-by: Paolo Abeni <[email protected]>
  10. ---
  11. --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  12. +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  13. @@ -234,19 +234,13 @@ int mtk_wed_mcu_msg_update(struct mtk_we
  14. }
  15. static int
  16. -mtk_wed_get_memory_region(struct mtk_wed_wo *wo,
  17. +mtk_wed_get_memory_region(struct mtk_wed_hw *hw, int index,
  18. struct mtk_wed_wo_memory_region *region)
  19. {
  20. struct reserved_mem *rmem;
  21. struct device_node *np;
  22. - int index;
  23. - index = of_property_match_string(wo->hw->node, "memory-region-names",
  24. - region->name);
  25. - if (index < 0)
  26. - return index;
  27. -
  28. - np = of_parse_phandle(wo->hw->node, "memory-region", index);
  29. + np = of_parse_phandle(hw->node, "memory-region", index);
  30. if (!np)
  31. return -ENODEV;
  32. @@ -258,7 +252,7 @@ mtk_wed_get_memory_region(struct mtk_wed
  33. region->phy_addr = rmem->base;
  34. region->size = rmem->size;
  35. - region->addr = devm_ioremap(wo->hw->dev, region->phy_addr, region->size);
  36. + region->addr = devm_ioremap(hw->dev, region->phy_addr, region->size);
  37. return !region->addr ? -EINVAL : 0;
  38. }
  39. @@ -271,6 +265,9 @@ mtk_wed_mcu_run_firmware(struct mtk_wed_
  40. const struct mtk_wed_fw_trailer *trailer;
  41. const struct mtk_wed_fw_region *fw_region;
  42. + if (!region->phy_addr || !region->size)
  43. + return 0;
  44. +
  45. trailer_ptr = fw->data + fw->size - sizeof(*trailer);
  46. trailer = (const struct mtk_wed_fw_trailer *)trailer_ptr;
  47. region_ptr = trailer_ptr - trailer->num_region * sizeof(*fw_region);
  48. @@ -318,7 +315,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
  49. /* load firmware region metadata */
  50. for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
  51. - ret = mtk_wed_get_memory_region(wo, &mem_region[i]);
  52. + int index = of_property_match_string(wo->hw->node,
  53. + "memory-region-names",
  54. + mem_region[i].name);
  55. + if (index < 0)
  56. + continue;
  57. +
  58. + ret = mtk_wed_get_memory_region(wo->hw, index, &mem_region[i]);
  59. if (ret)
  60. return ret;
  61. }