Pinconfig nodes normally bind recursively with PINCTRL_FULL and
PINCONF_RECURSIVE enabled. However, during U-Boot proper pre-relocation
any node marked with e.g. bootph-all will not bind unless its parent is
also marked for pre-reloc.

  group1 {
      pinconf1 {
          bootph-all;
      };
  };

This cause the following warning message to be shown during U-Boot
proper pre-reloc stage on Rockchip RK3568 devices.

  ns16550_serial serial@fe660000: pinctrl_select_state_full: 
uclass_get_device_by_phandle_id: err=-19

Check pinconfig nodes pre-reloc status recursively to fix this and to
make pinconfig_post_bind work same at both U-Boot proper pre-reloc and
at TPL/SPL stage.

Signed-off-by: Jonas Karlman <jo...@kwiboo.se>
---
 drivers/pinctrl/pinctrl-uclass.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
index 73dd7b1038bb..fe2ba5021a78 100644
--- a/drivers/pinctrl/pinctrl-uclass.c
+++ b/drivers/pinctrl/pinctrl-uclass.c
@@ -100,6 +100,22 @@ static int pinctrl_select_state_full(struct udevice *dev, 
const char *statename)
        return 0;
 }
 
+static bool ofnode_pre_reloc_recursive(ofnode parent)
+{
+       ofnode child;
+
+       if (ofnode_pre_reloc(parent))
+               return true;
+
+       if (CONFIG_IS_ENABLED(PINCONF_RECURSIVE)) {
+               ofnode_for_each_subnode(child, parent)
+                       if (ofnode_pre_reloc_recursive(child))
+                               return true;
+       }
+
+       return false;
+}
+
 /**
  * pinconfig_post_bind() - post binding for PINCONFIG uclass
  * Recursively bind its children as pinconfig devices.
@@ -119,7 +135,7 @@ static int pinconfig_post_bind(struct udevice *dev)
 
        dev_for_each_subnode(node, dev) {
                if (pre_reloc_only &&
-                   !ofnode_pre_reloc(node))
+                   !ofnode_pre_reloc_recursive(node))
                        continue;
                /*
                 * If this node has "compatible" property, this is not
-- 
2.41.0

Reply via email to