]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
mach-snapdragon: use EVT_OF_LIVE_INIT to apply DT fixups
authorCaleb Connolly <caleb.connolly@linaro.org>
Fri, 11 Apr 2025 12:47:39 +0000 (14:47 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 2 May 2025 14:38:02 +0000 (08:38 -0600)
This will now apply fixups prior to devices being bound, which makes it
possible to enable/disable devices and adjust more properties that might
be read before devices probe.

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
arch/arm/mach-snapdragon/board.c
arch/arm/mach-snapdragon/of_fixup.c
arch/arm/mach-snapdragon/qcom-priv.h

index deae4d323789eab75d5fe735159b4cd820c02c45..3ab75f0fce02ecffd476ebe2aa606b1a9024bbec 100644 (file)
@@ -306,7 +306,6 @@ void __weak qcom_board_init(void)
 int board_init(void)
 {
        show_psci_version();
-       qcom_of_fixup_nodes();
        qcom_board_init();
        return 0;
 }
index 1ea0c18c2f2789a8aa054cd95bb9e4308d6b3384..70399307bcbda1e067230f00af6ba859a98c7ac0 100644 (file)
@@ -22,6 +22,7 @@
 #include <dt-bindings/input/linux-event-codes.h>
 #include <dm/of_access.h>
 #include <dm/of.h>
+#include <event.h>
 #include <fdt_support.h>
 #include <linux/errno.h>
 #include <stdlib.h>
@@ -32,7 +33,7 @@
  * DT here. This improves compatibility with upstream DT and simplifies the
  * porting process for new devices.
  */
-static int fixup_qcom_dwc3(struct device_node *glue_np)
+static int fixup_qcom_dwc3(struct device_node *root, struct device_node *glue_np)
 {
        struct device_node *dwc3;
        int ret, len, hsphy_idx = 1;
@@ -101,9 +102,9 @@ static int fixup_qcom_dwc3(struct device_node *glue_np)
        return 0;
 }
 
-static void fixup_usb_nodes(void)
+static void fixup_usb_nodes(struct device_node *root)
 {
-       struct device_node *glue_np = NULL;
+       struct device_node *glue_np = root;
        int ret;
 
        while ((glue_np = of_find_compatible_node(glue_np, NULL, "qcom,dwc3"))) {
@@ -114,14 +115,14 @@ static void fixup_usb_nodes(void)
 }
 
 /* Remove all references to the rpmhpd device */
-static void fixup_power_domains(void)
+static void fixup_power_domains(struct device_node *root)
 {
        struct device_node *pd = NULL, *np = NULL;
        struct property *prop;
        const __be32 *val;
 
        /* All Qualcomm platforms name the rpm(h)pd "power-controller" */
-       for_each_of_allnodes(pd) {
+       for_each_of_allnodes_from(root, pd) {
                if (pd->name && !strcmp("power-controller", pd->name))
                        break;
        }
@@ -133,7 +134,7 @@ static void fixup_power_domains(void)
        }
 
        /* Remove all references to the power domain controller */
-       for_each_of_allnodes(np) {
+       for_each_of_allnodes_from(root, np) {
                if (!(prop = of_find_property(np, "power-domains", NULL)))
                        continue;
 
@@ -150,12 +151,18 @@ static void fixup_power_domains(void)
                debug(#func " took %lluus\n", timer_get_us() - start); \
        } while (0)
 
-void qcom_of_fixup_nodes(void)
+static int qcom_of_fixup_nodes(void * __maybe_unused ctx, struct event *event)
 {
-       time_call(fixup_usb_nodes);
-       time_call(fixup_power_domains);
+       struct device_node *root = event->data.of_live_built.root;
+
+       time_call(fixup_usb_nodes, root);
+       time_call(fixup_power_domains, root);
+
+       return 0;
 }
 
+EVENT_SPY_FULL(EVT_OF_LIVE_BUILT, qcom_of_fixup_nodes);
+
 int ft_board_setup(void *blob, struct bd_info __maybe_unused *bd)
 {
        struct fdt_header *fdt = blob;
index 74d39197b89f4e769299b06214c26ee829ecdce0..4f398e2ba374f27811afd2ccf6e72037d0f9ee7f 100644 (file)
@@ -9,18 +9,4 @@ void qcom_configure_capsule_updates(void);
 void qcom_configure_capsule_updates(void) {}
 #endif /* EFI_HAVE_CAPSULE_SUPPORT */
 
-#if CONFIG_IS_ENABLED(OF_LIVE)
-/**
- * qcom_of_fixup_nodes() - Fixup Qualcomm DT nodes
- *
- * Adjusts nodes in the live tree to improve compatibility with U-Boot.
- */
-void qcom_of_fixup_nodes(void);
-#else
-static inline void qcom_of_fixup_nodes(void)
-{
-       log_debug("Unable to dynamically fixup USB nodes, please enable CONFIG_OF_LIVE\n");
-}
-#endif /* OF_LIVE */
-
 #endif /* __QCOM_PRIV_H__ */