[PATCH v2 6/6] lib: utils/fdt: Disable GPIO restart and poweroff nodes in fdt_fixups()
Anup Patel
anup.patel at wdc.com
Fri Jul 9 06:10:59 PDT 2021
We now have SBI SRST extension provided via generic GPIO restart and
poweroff similar to Linux kernel so let's disable corresponding
device tree nodes in fdt_fixups().
Signed-off-by: Anup Patel <anup.patel at wdc.com>
---
include/sbi_utils/fdt/fdt_fixup.h | 17 +++++++++++++++--
lib/utils/fdt/fdt_fixup.c | 25 +++++++++++++++++++++++--
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/include/sbi_utils/fdt/fdt_fixup.h b/include/sbi_utils/fdt/fdt_fixup.h
index c38e5d9..cc86440 100644
--- a/include/sbi_utils/fdt/fdt_fixup.h
+++ b/include/sbi_utils/fdt/fdt_fixup.h
@@ -21,6 +21,18 @@
*/
void fdt_cpu_fixup(void *fdt);
+/**
+ * Fix up the GPIO restart and poweroff nodes in the device tree
+ *
+ * This routine disabls the GPIO restart and poweroff nodes in the device
+ * tree because OpenSBI provides SBI SRST extension based on it.
+ *
+ * It is recommended that platform codes call this helper in their final_init()
+ *
+ * @param fdt: device tree blob
+ */
+void fdt_gpio_reset_fixup(void *fdt);
+
/**
* Fix up the PLIC node in the device tree
*
@@ -64,8 +76,9 @@ int fdt_reserved_memory_nomap_fixup(void *fdt);
* General device tree fix-up
*
* This routine do all required device tree fix-ups for a typical platform.
- * It fixes up the PLIC node and the reserved memory node in the device tree
- * by calling the corresponding helper routines to accomplish the task.
+ * It fixes up the GPIO restart/poweroff node, PLIC node and the reserved
+ * memory node in the device tree by calling the corresponding helper
+ * routines to accomplish the task.
*
* It is recommended that platform codes call this helper in their final_init()
*
diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c
index 1465500..52d1a0e 100644
--- a/lib/utils/fdt/fdt_fixup.c
+++ b/lib/utils/fdt/fdt_fixup.c
@@ -51,6 +51,27 @@ void fdt_cpu_fixup(void *fdt)
}
}
+void fdt_gpio_reset_fixup(void *fdt)
+{
+ int err, nodeoff;
+
+ nodeoff = fdt_node_offset_by_compatible(fdt, 0, "gpio-poweroff");
+ if (nodeoff >= 0) {
+ err = fdt_open_into(fdt, fdt, fdt_totalsize(fdt) + 32);
+ if (err < 0)
+ return;
+ fdt_setprop_string(fdt, nodeoff, "status", "disabled");
+ }
+
+ nodeoff = fdt_node_offset_by_compatible(fdt, 0, "gpio-restart");
+ if (nodeoff >= 0) {
+ err = fdt_open_into(fdt, fdt, fdt_totalsize(fdt) + 32);
+ if (err < 0)
+ return;
+ fdt_setprop_string(fdt, nodeoff, "status", "disabled");
+ }
+}
+
void fdt_plic_fixup(void *fdt)
{
u32 *cells;
@@ -260,9 +281,9 @@ int fdt_reserved_memory_nomap_fixup(void *fdt)
void fdt_fixups(void *fdt)
{
+ fdt_gpio_reset_fixup(fdt);
+
fdt_plic_fixup(fdt);
fdt_reserved_memory_fixup(fdt);
}
-
-
--
2.25.1
More information about the opensbi
mailing list