[PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively
Massimo Pegorer
massimo.pegorer+oss at gmail.com
Sat Aug 5 16:06:47 CEST 2023
Hi Jonas,
Il giorno sab 5 ago 2023 alle ore 13:11 Jonas Karlman <jonas at 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 at 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 <jonas at 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)?
Thanks.
Massimo
[1]
https://patchwork.ozlabs.org/project/uboot/patch/20230803110813.175956-4-massimo.pegorer+oss@gmail.com/
[2]
https://patchwork.ozlabs.org/project/uboot/cover/20230803110813.175956-1-massimo.pegorer+oss@gmail.com/
More information about the U-Boot
mailing list