The bootefi command passes the devicetree to the kernel through the
EFI config table. Call the event handlers for fixing the devicetree
before jumping into the kernel. This removes any devicetree nodes
and/or properties that are specific only to U-Boot, and are not to be
passed to the OS.

Signed-off-by: Sughosh Ganu <sughosh.g...@linaro.org>
---
 cmd/bootefi.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index f73d6eb0e2..c359a46ec4 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -237,6 +237,23 @@ static void *get_config_table(const efi_guid_t *guid)
        return NULL;
 }
 
+/**
+ * event_notify_dt_fixup() - call ft_fixup event
+ *
+ * @fdt:       address of the device tree to be passed to the kernel
+ *             through the configuration table
+ * Return:     None
+ */
+static void event_notify_dt_fixup(void *fdt)
+{
+       int ret;
+       struct event_ft_fixup fixup = {0};
+
+       fixup.tree.fdt = fdt;
+       ret = event_notify(EVT_FT_FIXUP, &fixup, sizeof(fixup));
+       if (ret)
+               printf("Error: %d: FDT Fixup event failed\n", ret);
+}
 #endif /* !CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE) */
 
 /**
@@ -318,6 +335,7 @@ efi_status_t efi_install_fdt(void *fdt)
        efi_carve_out_dt_rsv(fdt);
 
        efi_try_purge_kaslr_seed(fdt);
+       event_notify_dt_fixup(fdt);
 
        if (CONFIG_IS_ENABLED(EFI_TCG2_PROTOCOL_MEASURE_DTB)) {
                ret = efi_tcg2_measure_dtb(fdt);
-- 
2.34.1

Reply via email to