mediatek: filogic: move ilm, dlm and cpu_boot in dedicated nodes
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 14 Mar 2023 11:04:53 +0000 (12:04 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 20 Mar 2023 20:28:19 +0000 (21:28 +0100)
This fixes issues with legacy boot loaders that don't process reserved memory
regions outside of system RAM

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/mediatek/patches-5.15/940-net-ethernet-mtk_wed-rename-mtk_wed_get_memory_regio.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/941-arm64-dts-mt7986-move-cpuboot-in-a-dedicated-node.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/943-net-ethernet-mtk_wed-move-ilm-a-dedicated-dts-node.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/945-arm64-dts-mt7986-move-ilm-in-a-dedicated-node.patch [new file with mode: 0644]
target/linux/mediatek/patches-5.15/946-arm64-dts-mt7986-move-dlm-in-a-dedicated-node.patch [new file with mode: 0644]

diff --git a/target/linux/mediatek/patches-5.15/940-net-ethernet-mtk_wed-rename-mtk_wed_get_memory_regio.patch b/target/linux/mediatek/patches-5.15/940-net-ethernet-mtk_wed-rename-mtk_wed_get_memory_regio.patch
new file mode 100644 (file)
index 0000000..2fe565f
--- /dev/null
@@ -0,0 +1,44 @@
+From 3cf212c4ce6cd72c09bc47f35f539ba0afd4d106 Mon Sep 17 00:00:00 2001
+Message-Id: <3cf212c4ce6cd72c09bc47f35f539ba0afd4d106.1678716918.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Sun, 12 Mar 2023 16:40:31 +0100
+Subject: [PATCH net-next 1/2] net: ethernet: mtk_wed: rename
+ mtk_wed_get_memory_region in mtk_wed_get_reserved_memory_region
+
+This is a preliminary patch to move wed ilm/dlm and cpuboot properties in
+dedicated dts nodes.
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
++++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+@@ -215,8 +215,8 @@ int mtk_wed_mcu_msg_update(struct mtk_we
+ }
+ static int
+-mtk_wed_get_memory_region(struct mtk_wed_wo *wo,
+-                        struct mtk_wed_wo_memory_region *region)
++mtk_wed_get_reserved_memory_region(struct mtk_wed_wo *wo,
++                                 struct mtk_wed_wo_memory_region *region)
+ {
+       struct reserved_mem *rmem;
+       struct device_node *np;
+@@ -311,13 +311,13 @@ mtk_wed_mcu_load_firmware(struct mtk_wed
+       /* load firmware region metadata */
+       for (i = 0; i < ARRAY_SIZE(mem_region); i++) {
+-              ret = mtk_wed_get_memory_region(wo, &mem_region[i]);
++              ret = mtk_wed_get_reserved_memory_region(wo, &mem_region[i]);
+               if (ret)
+                       return ret;
+       }
+       wo->boot.name = "wo-boot";
+-      ret = mtk_wed_get_memory_region(wo, &wo->boot);
++      ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
+       if (ret)
+               return ret;
diff --git a/target/linux/mediatek/patches-5.15/941-arm64-dts-mt7986-move-cpuboot-in-a-dedicated-node.patch b/target/linux/mediatek/patches-5.15/941-arm64-dts-mt7986-move-cpuboot-in-a-dedicated-node.patch
new file mode 100644 (file)
index 0000000..2d28717
--- /dev/null
@@ -0,0 +1,65 @@
+From 247e566e3459481f1fa98733534bfed767e18b42 Mon Sep 17 00:00:00 2001
+Message-Id: <247e566e3459481f1fa98733534bfed767e18b42.1678620342.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Sat, 11 Mar 2023 16:32:41 +0100
+Subject: [PATCH net-next] arm64: dts: mt7986: move cpuboot in a dedicated node
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
++++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+@@ -121,11 +121,6 @@
+                       reg = <0 0x151f8000 0 0x2000>;
+                       no-map;
+               };
+-
+-              wo_boot: wo-boot@15194000 {
+-                      reg = <0 0x15194000 0 0x1000>;
+-                      no-map;
+-              };
+       };
+       timer {
+@@ -625,10 +620,11 @@
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
+                       memory-region = <&wo_emi0>, <&wo_ilm0>, <&wo_dlm0>,
+-                                      <&wo_data>, <&wo_boot>;
++                                      <&wo_data>;
+                       memory-region-names = "wo-emi", "wo-ilm", "wo-dlm",
+-                                            "wo-data", "wo-boot";
++                                            "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif0>;
++                      mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+               wed1: wed@15011000 {
+@@ -638,10 +634,11 @@
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH>;
+                       memory-region = <&wo_emi1>, <&wo_ilm1>, <&wo_dlm1>,
+-                                      <&wo_data>, <&wo_boot>;
++                                      <&wo_data>;
+                       memory-region-names = "wo-emi", "wo-ilm", "wo-dlm",
+-                                            "wo-data", "wo-boot";
++                                            "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif1>;
++                      mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+               wo_ccif0: syscon@151a5000 {
+@@ -658,6 +655,11 @@
+                       interrupts = <GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH>;
+               };
++              wo_cpuboot: syscon@15194000 {
++                      compatible = "mediatek,mt7986-wo-cpuboot", "syscon";
++                      reg = <0 0x15194000 0 0x1000>;
++              };
++
+               eth: ethernet@15100000 {
+                       compatible = "mediatek,mt7986-eth";
+                       reg = <0 0x15100000 0 0x80000>;
diff --git a/target/linux/mediatek/patches-5.15/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch b/target/linux/mediatek/patches-5.15/942-net-ethernet-mtk_wed-move-cpuboot-in-a-dedicated-dts.patch
new file mode 100644 (file)
index 0000000..57f8afe
--- /dev/null
@@ -0,0 +1,96 @@
+From f292d1bf83ec160bef2532b58aa08f5b71041923 Mon Sep 17 00:00:00 2001
+Message-Id: <f292d1bf83ec160bef2532b58aa08f5b71041923.1678716918.git.lorenzo@kernel.org>
+In-Reply-To: <3cf212c4ce6cd72c09bc47f35f539ba0afd4d106.1678716918.git.lorenzo@kernel.org>
+References: <3cf212c4ce6cd72c09bc47f35f539ba0afd4d106.1678716918.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Sat, 11 Mar 2023 18:13:04 +0100
+Subject: [PATCH net-next 2/2] net: ethernet: mtk_wed: move cpuboot in a
+ dedicated dts node
+
+Since the cpuboot memory region is not part of the RAM SoC, move cpuboot
+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 cpuboot was
+defined as reserved-memory child node.
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ drivers/net/ethernet/mediatek/mtk_wed_mcu.c | 34 +++++++++++++++++----
+ drivers/net/ethernet/mediatek/mtk_wed_wo.h  |  3 +-
+ 2 files changed, 30 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+index 6624f6d6abdd..797c3b412ab6 100644
+--- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
++++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
+@@ -18,12 +18,23 @@
+ static u32 wo_r32(struct mtk_wed_wo *wo, u32 reg)
+ {
+-      return readl(wo->boot.addr + reg);
++      u32 val;
++
++      if (!wo->boot_regmap)
++              return readl(wo->boot.addr + reg);
++
++      if (regmap_read(wo->boot_regmap, reg, &val))
++              val = ~0;
++
++      return val;
+ }
+ static void wo_w32(struct mtk_wed_wo *wo, u32 reg, u32 val)
+ {
+-      writel(val, wo->boot.addr + reg);
++      if (wo->boot_regmap)
++              regmap_write(wo->boot_regmap, reg, val);
++      else
++              writel(val, wo->boot.addr + reg);
+ }
+ static struct sk_buff *
+@@ -316,10 +327,21 @@ mtk_wed_mcu_load_firmware(struct mtk_wed_wo *wo)
+                       return ret;
+       }
+-      wo->boot.name = "wo-boot";
+-      ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
+-      if (ret)
+-              return ret;
++      wo->boot_regmap = syscon_regmap_lookup_by_phandle(wo->hw->node,
++                                                        "mediatek,wo-cpuboot");
++      if (IS_ERR(wo->boot_regmap)) {
++              if (wo->boot_regmap != ERR_PTR(-ENODEV))
++                      return PTR_ERR(wo->boot_regmap);
++
++              /* For backward compatibility, we need to check if cpu_boot
++               * is defined through reserved memory property.
++               */
++              wo->boot_regmap = NULL;
++              wo->boot.name = "wo-boot";
++              ret = mtk_wed_get_reserved_memory_region(wo, &wo->boot);
++              if (ret)
++                      return ret;
++      }
+       /* set dummy cr */
+       wed_w32(wo->hw->wed_dev, MTK_WED_SCR0 + 4 * MTK_WED_DUMMY_CR_FWDL,
+diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.h b/drivers/net/ethernet/mediatek/mtk_wed_wo.h
+index dbcf42ce9173..c03071203cc0 100644
+--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.h
++++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.h
+@@ -227,7 +227,8 @@ struct mtk_wed_wo_queue {
+ struct mtk_wed_wo {
+       struct mtk_wed_hw *hw;
+-      struct mtk_wed_wo_memory_region boot;
++      struct mtk_wed_wo_memory_region boot; /* backward compatibility */
++      struct regmap *boot_regmap;
+       struct mtk_wed_wo_queue q_tx;
+       struct mtk_wed_wo_queue q_rx;
+-- 
+2.39.2
+
diff --git a/target/linux/mediatek/patches-5.15/943-net-ethernet-mtk_wed-move-ilm-a-dedicated-dts-node.patch b/target/linux/mediatek/patches-5.15/943-net-ethernet-mtk_wed-move-ilm-a-dedicated-dts-node.patch
new file mode 100644 (file)
index 0000000..e83daeb
--- /dev/null
@@ -0,0 +1,96 @@
+From f3565e6c2276411275e707a5442d3f69cc111273 Mon Sep 17 00:00:00 2001
+Message-Id: <f3565e6c2276411275e707a5442d3f69cc111273.1678718888.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Sun, 12 Mar 2023 18:51:47 +0100
+Subject: [PATCH net-next 1/3] net: ethernet: mtk_wed: move ilm a dedicated dts
+ node
+
+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@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..976946a3653a 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,
++                      &region[MTK_WED_WO_REGION_EMI]);
++      if (ret)
++              return ret;
++
++      /* firmware DATA memory region */
++      ret = mtk_wed_get_reserved_memory_region(wo,
++                      &region[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 = &region[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, res.start,
++                                              resource_size(&res));
++
++              return IS_ERR(ilm_region->addr) ? PTR_ERR(ilm_region->addr) : 0;
++      }
++
++      /* For backward compatibility, we need to check if ILM
++       * node is defined through reserved memory property.
++       */
++      return mtk_wed_get_reserved_memory_region(wo,
++                      &region[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
+
diff --git a/target/linux/mediatek/patches-5.15/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch b/target/linux/mediatek/patches-5.15/944-net-ethernet-mtk_wed-move-dlm-a-dedicated-dts-node.patch
new file mode 100644 (file)
index 0000000..fb3940f
--- /dev/null
@@ -0,0 +1,57 @@
+From b74ba226be2c45091b93bd49192bdd6d2178729e Mon Sep 17 00:00:00 2001
+Message-Id: <b74ba226be2c45091b93bd49192bdd6d2178729e.1678718888.git.lorenzo@kernel.org>
+In-Reply-To: <f3565e6c2276411275e707a5442d3f69cc111273.1678718888.git.lorenzo@kernel.org>
+References: <f3565e6c2276411275e707a5442d3f69cc111273.1678718888.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Mon, 13 Mar 2023 15:45:16 +0100
+Subject: [PATCH net-next 3/3] net: ethernet: mtk_wed: move dlm a dedicated dts
+ node
+
+Since the dlm memory region is not part of the RAM SoC, move dlm 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 dlm was defined
+as reserved-memory child node.
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ drivers/net/ethernet/mediatek/mtk_wed.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- a/drivers/net/ethernet/mediatek/mtk_wed.c
++++ b/drivers/net/ethernet/mediatek/mtk_wed.c
+@@ -806,6 +806,24 @@ mtk_wed_rro_alloc(struct mtk_wed_device
+       struct device_node *np;
+       int index;
++      np = of_parse_phandle(dev->hw->node, "mediatek,wo-dlm", 0);
++      if (np) {
++              struct resource res;
++              int ret;
++
++              ret = of_address_to_resource(np, 0, &res);
++              of_node_put(np);
++
++              if (ret < 0)
++                      return ret;
++
++              dev->rro.miod_phys = res.start;
++              goto out;
++      }
++
++      /* For backward compatibility, we need to check if DLM
++       * node is defined through reserved memory property.
++       */
+       index = of_property_match_string(dev->hw->node, "memory-region-names",
+                                        "wo-dlm");
+       if (index < 0)
+@@ -822,6 +840,7 @@ mtk_wed_rro_alloc(struct mtk_wed_device
+               return -ENODEV;
+       dev->rro.miod_phys = rmem->base;
++out:
+       dev->rro.fdbk_phys = MTK_WED_MIOD_COUNT + dev->rro.miod_phys;
+       return mtk_wed_rro_ring_alloc(dev, &dev->rro.ring,
diff --git a/target/linux/mediatek/patches-5.15/945-arm64-dts-mt7986-move-ilm-in-a-dedicated-node.patch b/target/linux/mediatek/patches-5.15/945-arm64-dts-mt7986-move-ilm-in-a-dedicated-node.patch
new file mode 100644 (file)
index 0000000..b640ed4
--- /dev/null
@@ -0,0 +1,83 @@
+From 01561065af5bf1d2a4244896d897e3a1eafbcd46 Mon Sep 17 00:00:00 2001
+Message-Id: <01561065af5bf1d2a4244896d897e3a1eafbcd46.1678717704.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Mon, 13 Mar 2023 15:10:56 +0100
+Subject: [PATCH net-next] arm64: dts: mt7986: move ilm in a dedicated node
+
+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.
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 34 +++++++++++------------
+ 1 file changed, 16 insertions(+), 18 deletions(-)
+
+--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
++++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+@@ -97,16 +97,6 @@
+                       no-map;
+               };
+-              wo_ilm0: wo-ilm@151e0000 {
+-                      reg = <0 0x151e0000 0 0x8000>;
+-                      no-map;
+-              };
+-
+-              wo_ilm1: wo-ilm@151f0000 {
+-                      reg = <0 0x151f0000 0 0x8000>;
+-                      no-map;
+-              };
+-
+               wo_data: wo-data@4fd80000 {
+                       reg = <0 0x4fd80000 0 0x240000>;
+                       no-map;
+@@ -619,11 +609,10 @@
+                       reg = <0 0x15010000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
+-                      memory-region = <&wo_emi0>, <&wo_ilm0>, <&wo_dlm0>,
+-                                      <&wo_data>;
+-                      memory-region-names = "wo-emi", "wo-ilm", "wo-dlm",
+-                                            "wo-data";
++                      memory-region = <&wo_emi0>, <&wo_dlm0>, <&wo_data>;
++                      memory-region-names = "wo-emi", "wo-dlm", "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif0>;
++                      mediatek,wo-ilm = <&wo_ilm0>;
+                       mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+@@ -633,11 +622,10 @@
+                       reg = <0 0x15011000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH>;
+-                      memory-region = <&wo_emi1>, <&wo_ilm1>, <&wo_dlm1>,
+-                                      <&wo_data>;
+-                      memory-region-names = "wo-emi", "wo-ilm", "wo-dlm",
+-                                            "wo-data";
++                      memory-region = <&wo_emi1>, <&wo_dlm1>, <&wo_data>;
++                      memory-region-names = "wo-emi", "wo-dlm", "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif1>;
++                      mediatek,wo-ilm = <&wo_ilm1>;
+                       mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+@@ -655,6 +643,16 @@
+                       interrupts = <GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH>;
+               };
++              wo_ilm0: syscon@151e0000 {
++                      compatible = "mediatek,mt7986-wo-ilm", "syscon";
++                      reg = <0 0x151e0000 0 0x8000>;
++              };
++
++              wo_ilm1: syscon@151f0000 {
++                      compatible = "mediatek,mt7986-wo-ilm", "syscon";
++                      reg = <0 0x151f0000 0 0x8000>;
++              };
++
+               wo_cpuboot: syscon@15194000 {
+                       compatible = "mediatek,mt7986-wo-cpuboot", "syscon";
+                       reg = <0 0x15194000 0 0x1000>;
diff --git a/target/linux/mediatek/patches-5.15/946-arm64-dts-mt7986-move-dlm-in-a-dedicated-node.patch b/target/linux/mediatek/patches-5.15/946-arm64-dts-mt7986-move-dlm-in-a-dedicated-node.patch
new file mode 100644 (file)
index 0000000..0523ae0
--- /dev/null
@@ -0,0 +1,81 @@
+From 9f76be683a8ec498563c294bc1cc279468058302 Mon Sep 17 00:00:00 2001
+Message-Id: <9f76be683a8ec498563c294bc1cc279468058302.1678719283.git.lorenzo@kernel.org>
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Mon, 13 Mar 2023 15:53:30 +0100
+Subject: [PATCH net-next] arm64: dts: mt7986: move dlm in a dedicated node
+
+Since the dlm memory region is not part of the RAM SoC, move dlm 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.
+
+Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
+---
+ arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 30 ++++++++++++-----------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+--- a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
++++ b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
+@@ -101,16 +101,6 @@
+                       reg = <0 0x4fd80000 0 0x240000>;
+                       no-map;
+               };
+-
+-              wo_dlm0: wo-dlm@151e8000 {
+-                      reg = <0 0x151e8000 0 0x2000>;
+-                      no-map;
+-              };
+-
+-              wo_dlm1: wo-dlm@151f8000 {
+-                      reg = <0 0x151f8000 0 0x2000>;
+-                      no-map;
+-              };
+       };
+       timer {
+@@ -609,10 +599,11 @@
+                       reg = <0 0x15010000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
+-                      memory-region = <&wo_emi0>, <&wo_dlm0>, <&wo_data>;
+-                      memory-region-names = "wo-emi", "wo-dlm", "wo-data";
++                      memory-region = <&wo_emi0>, <&wo_data>;
++                      memory-region-names = "wo-emi", "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif0>;
+                       mediatek,wo-ilm = <&wo_ilm0>;
++                      mediatek,wo-dlm = <&wo_dlm0>;
+                       mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+@@ -622,10 +613,11 @@
+                       reg = <0 0x15011000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH>;
+-                      memory-region = <&wo_emi1>, <&wo_dlm1>, <&wo_data>;
+-                      memory-region-names = "wo-emi", "wo-dlm", "wo-data";
++                      memory-region = <&wo_emi1>, <&wo_data>;
++                      memory-region-names = "wo-emi", "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif1>;
+                       mediatek,wo-ilm = <&wo_ilm1>;
++                      mediatek,wo-dlm = <&wo_dlm1>;
+                       mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+@@ -653,6 +645,16 @@
+                       reg = <0 0x151f0000 0 0x8000>;
+               };
++              wo_dlm0: syscon@151e8000 {
++                      compatible = "mediatek,mt7986-wo-dlm", "syscon";
++                      reg = <0 0x151e8000 0 0x2000>;
++              };
++
++              wo_dlm1: syscon@151f8000 {
++                      compatible = "mediatek,mt7986-wo-dlm", "syscon";
++                      reg = <0 0x151f8000 0 0x2000>;
++              };
++
+               wo_cpuboot: syscon@15194000 {
+                       compatible = "mediatek,mt7986-wo-cpuboot", "syscon";
+                       reg = <0 0x15194000 0 0x1000>;