From: Alexander Sverdlin <[email protected]> Optionally populate /chosen/reset-reason using get_reset_reason() depending on CONFIG_RESET_REASON_FDT option. Currently only TI K3 AM62x and AM64x platforms provide a functional implementation.
Signed-off-by: Alexander Sverdlin <[email protected]> --- boot/fdt_support.c | 14 ++++++++++++++ include/init.h | 3 ++- lib/Kconfig | 9 +++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/boot/fdt_support.c b/boot/fdt_support.c index 1c215e548db..d6745a73d01 100644 --- a/boot/fdt_support.c +++ b/boot/fdt_support.c @@ -9,6 +9,7 @@ #include <dm.h> #include <abuf.h> #include <env.h> +#include <init.h> #include <log.h> #include <mapmem.h> #include <net.h> @@ -389,6 +390,19 @@ int fdt_chosen(void *fdt) return err; } + if (IS_ENABLED(CONFIG_RESET_REASON_FDT)) { + const char *reset_reason = get_reset_reason(); + + if (reset_reason) { + err = fdt_setprop_string(fdt, nodeoffset, + "reset-reason", + reset_reason); + if (err < 0) + printf("WARNING: could not set reset-reason %s.\n", + fdt_strerror(err)); + } + } + if (CONFIG_IS_ENABLED(GENERATE_SMBIOS_TABLE)) { /* Inject SMBIOS address when we have a valid address. * This is useful for systems using booti/bootm instead of bootefi. diff --git a/include/init.h b/include/init.h index 3ee35130268..62c32ff6a65 100644 --- a/include/init.h +++ b/include/init.h @@ -243,7 +243,8 @@ int print_cpuinfo(void); * get_reset_reason() - return a string describing the reset cause * * Platforms can override this weak function to provide the actual - * reset reason. + * reset reason. The returned string may be used to populate + * /chosen/reset-reason when CONFIG_RESET_REASON_FDT is enabled. * * Return: reason string, or NULL if unknown/unsupported */ diff --git a/lib/Kconfig b/lib/Kconfig index 77ebc79e1db..4178e95b94b 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -1130,6 +1130,15 @@ config VPL_OF_LIBFDT_ASSUME_MASK 0xff means all assumptions are made and any invalid data may cause unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h +config RESET_REASON_FDT + bool "Pass reset reason to OS via device tree" + depends on OF_LIBFDT + help + When enabled, U-Boot will call get_reset_reason() and store the + result as a string property "reset-reason" in the /chosen node + of the device tree passed to the OS. Platforms must override the + weak get_reset_reason() to provide the actual reason. + menu "System tables" depends on (!EFI_CLIENT && !SYS_COREBOOT) || (ARM && EFI_LOADER) -- 2.52.0

