On Tue, Mar 10, 2026 at 03:53:37PM +0800, [email protected] wrote:
>From: Alice Guo <[email protected]>
>
>Replace hardcoded watchdog base addresses with dynamic address lookup
>from device tree.
>
>Signed-off-by: Alice Guo <[email protected]>
>---
> arch/arm/mach-imx/imx8ulp/soc.c   | 15 ++++++++++++++-
> arch/arm/mach-imx/imx9/scmi/soc.c | 16 ++++++++++++++--
> arch/arm/mach-imx/imx9/soc.c      | 17 ++++++++++++++---
> arch/arm/mach-imx/mx7ulp/soc.c    | 16 ++++++++++++++--
> 4 files changed, 56 insertions(+), 8 deletions(-)
>
>diff --git a/arch/arm/mach-imx/imx8ulp/soc.c b/arch/arm/mach-imx/imx8ulp/soc.c
>index 1ee483065e8..081ba9d60b6 100644
>--- a/arch/arm/mach-imx/imx8ulp/soc.c
>+++ b/arch/arm/mach-imx/imx8ulp/soc.c
>@@ -341,9 +341,22 @@ static void disable_wdog(void __iomem *wdog_base)
>               ;
> }
> 
>+static char *wdog_list[] = {"wdog3"};
>+
> void init_wdog(void)
> {
>-      disable_wdog((void __iomem *)WDG3_RBASE);
>+      fdt_addr_t addr;
>+      int i;
>+
>+      for (i = 0; i < ARRAY_SIZE(wdog_list); i++) {
>+              addr = imx_wdog_alias_to_addr(wdog_list[i], false);
>+              if (addr == FDT_ADDR_T_NONE) {
>+                      debug("watchdog alias %s not found\n", wdog_list[i]);
>+                      continue;
>+              }
>+
>+              disable_wdog((void __iomem *)addr);
>+      }
> }
> 
> static struct mm_region imx8ulp_arm64_mem_map[] = {
>diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c 
>b/arch/arm/mach-imx/imx9/scmi/soc.c
>index c1458ccca3c..692c6743418 100644
>--- a/arch/arm/mach-imx/imx9/scmi/soc.c
>+++ b/arch/arm/mach-imx/imx9/scmi/soc.c
>@@ -734,11 +734,23 @@ static void gpio_reset(ulong gpio_base)
>       writel(0, gpio_base + 0x1c);
> }
> 
>+static char *wdog_list[] = {"wdog3", "wdog4"};
>+
> int arch_cpu_init(void)
> {
>       if (IS_ENABLED(CONFIG_SPL_BUILD)) {
>-              disable_wdog((void __iomem *)WDG3_BASE_ADDR);
>-              disable_wdog((void __iomem *)WDG4_BASE_ADDR);
>+              fdt_addr_t addr;
>+              int i;
>+
>+              for (i = 0; i < ARRAY_SIZE(wdog_list); i++) {
>+                      addr = imx_wdog_alias_to_addr(wdog_list[i], false);
>+                      if (addr == FDT_ADDR_T_NONE) {
>+                              debug("watchdog alias %s not found\n", 
>wdog_list[i]);
>+                              continue;
>+                      }
>+
>+                      disable_wdog((void __iomem *)addr);
>+              }
> 
>               gpio_reset(GPIO2_BASE_ADDR);
>               gpio_reset(GPIO3_BASE_ADDR);
>diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
>index 583c3a5a464..031226ec97f 100644
>--- a/arch/arm/mach-imx/imx9/soc.c
>+++ b/arch/arm/mach-imx/imx9/soc.c
>@@ -279,11 +279,22 @@ static void disable_wdog(void __iomem *wdog_base)
>               ;
> }
> 
>+static char *wdog_list[] = {"wdog3", "wdog4", "wdog5"};
>+
> void init_wdog(void)
> {
>-      disable_wdog((void __iomem *)WDG3_BASE_ADDR);
>-      disable_wdog((void __iomem *)WDG4_BASE_ADDR);
>-      disable_wdog((void __iomem *)WDG5_BASE_ADDR);
>+      fdt_addr_t addr;
>+      int i;
>+
>+      for (i = 0; i < ARRAY_SIZE(wdog_list); i++) {
>+              addr = imx_wdog_alias_to_addr(wdog_list[i], false);
>+              if (addr == FDT_ADDR_T_NONE) {
>+                      debug("watchdog alias %s not found\n", wdog_list[i]);
>+                      continue;
>+              }
>+
>+              disable_wdog((void __iomem *)addr);
>+      }
> }
> 
> static struct mm_region imx93_mem_map[] = {
>diff --git a/arch/arm/mach-imx/mx7ulp/soc.c b/arch/arm/mach-imx/mx7ulp/soc.c
>index 5306e76223f..27ba8a37162 100644
>--- a/arch/arm/mach-imx/mx7ulp/soc.c
>+++ b/arch/arm/mach-imx/mx7ulp/soc.c
>@@ -146,6 +146,8 @@ static void disable_wdog(u32 wdog_base)
>       while (!(readl(wdog_base + 0x00) & 0x400));
> }
> 
>+static char *wdog_list[] = {"wdog1", "wdog2"};
>+
> void init_wdog(void)
> {
>       /*
>@@ -161,8 +163,18 @@ void init_wdog(void)
>        * In this function, we will disable both WDOG1 and WDOG2,
>        * and set update bit for both. So that kernel can reconfigure them.
>        */
>-      disable_wdog(WDG1_RBASE);
>-      disable_wdog(WDG2_RBASE);
>+      fdt_addr_t addr;
>+      int i;
>+
>+      for (i = 0; i < ARRAY_SIZE(wdog_list); i++) {
>+              addr = imx_wdog_alias_to_addr(wdog_list[i], false);
>+              if (addr == FDT_ADDR_T_NONE) {
>+                      debug("watchdog alias %s not found\n", wdog_list[i]);
>+                      continue;
>+              }
>+
>+              disable_wdog((u32)addr);
>+      }

It should be better to use
fdt_for_each_comaptible_node or ofnode_for_each_compatible_node


Regards
Peng

> }
> 
> static bool ldo_mode_is_enabled(void)
>
>-- 
>2.43.0
>

Reply via email to