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 >

