Hi Massimo, On 2023-08-05 16:06, Massimo Pegorer wrote: > Hi Jonas, > > Il giorno sab 5 ago 2023 alle ore 13:11 Jonas Karlman <jo...@kwiboo.se> ha > scritto: > >> 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 >> > > I've fixed the same issue for Rockchip RK3308 a couple of days ago with > patch [1] > as part of the series [2], adding required nodes with 'bootph-some-ram' > property > into *-u-boot.dtsi. > > With your solution, is there any risk not to warn about any pin that should > be configured > but is not due to any ancestor missing in device tree (in pre-reloc boot > phase, I mean)?
Yes, with this any pinconf group that may contain a child/leaf node that have bootph prop will bind so that the child/leaf node also can bind and be referenced at pre-reloc phase. It is also fully recursive so should fix the issue with any missed ancestor, when it comes to pinconfig. For TPL/SPL the ofnode_pre_reloc always return true so this has not been an issue at that phase. This change should make pinconfig_post_bind behave same as it does in TPL/SPL where any child/leaf node bind. Regards, Jonas > > Thanks. > > Massimo > > [1] > https://patchwork.ozlabs.org/project/uboot/patch/20230803110813.175956-4-massimo.pegorer+...@gmail.com/ > > [2] > https://patchwork.ozlabs.org/project/uboot/cover/20230803110813.175956-1-massimo.pegorer+...@gmail.com/ >