summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-imx/imx9/scmi/soc.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c b/arch/arm/mach-imx/imx9/scmi/soc.c
index 0cba2d92abb..6561de205d0 100644
--- a/arch/arm/mach-imx/imx9/scmi/soc.c
+++ b/arch/arm/mach-imx/imx9/scmi/soc.c
@@ -14,6 +14,7 @@
#include <asm/setup.h>
#include <dm/uclass.h>
#include <dm/device.h>
+#include <dm/ofnode.h>
#include <env_internal.h>
#include <fuse.h>
#include <imx_thermal.h>
@@ -1051,6 +1052,22 @@ static void gpio_reset(ulong gpio_base)
writel(0, gpio_base + 0x1c);
}
+static int gpio_available(const char *nodes_path)
+{
+ ofnode gpio_node = ofnode_path(nodes_path);
+ const char *status;
+
+ if (!ofnode_valid(gpio_node))
+ return false;
+
+ status = ofnode_read_string(gpio_node, "status");
+
+ if (status && !strcmp(status, "disabled"))
+ return false;
+
+ return true;
+}
+
int arch_cpu_init(void)
{
if (IS_ENABLED(CONFIG_SPL_BUILD)) {
@@ -1066,7 +1083,9 @@ int arch_cpu_init(void)
disable_wdog((void __iomem *)base);
}
- gpio_reset(GPIO2_BASE_ADDR);
+ if (gpio_available("/soc/gpio@43810000"))
+ gpio_reset(GPIO2_BASE_ADDR);
+
gpio_reset(GPIO3_BASE_ADDR);
gpio_reset(GPIO4_BASE_ADDR);
gpio_reset(GPIO5_BASE_ADDR);