Re: [PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively

2023-09-30 Thread Massimo Pegorer
Hi Simon,

Il giorno ven 11 ago 2023 alle ore 02:29 Simon Glass
 ha scritto:
>
> Hi Jonas,
>
> On Sat, 5 Aug 2023 at 08:29, Jonas Karlman  wrote:
> >
> > 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  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@fe66: 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 
> > >> ---
> > >>  drivers/pinctrl/pinctrl-uclass.c | 18 +-
> > >>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> This is actually something we want to change about fdtgrep. I believe
> we should try to adjust that tool rather than loading this ontoU-Boot,
> not least because it controls what properties are visible in SPL.

So IIUC your idea is that fdtgrep tool will automatically add
bootph-xxx property to any ancestor of a node with that property? Or
to log a warning, or exit with an error, during build?

BTW, fdtgrep is applied to DT only for xPL builds, not for U-Boot
proper build. Therefore, Jonas approach could be used at least during
U-Boot proper pre-relocation phase to manage "bootph-some-ram" and
"bootph-all".

Side note: I've noticed that quiet_cmd_fdtgrep in Makefile.lib does
not strip bootph-some-sram. I think it should, doesn't it?

>
> Regards,
> Simon


Re: [PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively

2023-08-10 Thread Simon Glass
Hi Jonas,

On Sat, 5 Aug 2023 at 08:29, Jonas Karlman  wrote:
>
> 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  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@fe66: 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 
> >> ---
> >>  drivers/pinctrl/pinctrl-uclass.c | 18 +-
> >>  1 file changed, 17 insertions(+), 1 deletion(-)

This is actually something we want to change about fdtgrep. I believe
we should try to adjust that tool rather than loading this ontoU-Boot,
not least because it controls what properties are visible in SPL.

Regards,
Simon


Re: [PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively

2023-08-05 Thread Jonas Karlman
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  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@fe66: 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 
>> ---
>>  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/
> 



Re: [PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively

2023-08-05 Thread Massimo Pegorer
Hi Jonas,

Il giorno sab 5 ago 2023 alle ore 13:11 Jonas Karlman  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@fe66: 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 
> ---
>  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+...@gmail.com/

[2]
https://patchwork.ozlabs.org/project/uboot/cover/20230803110813.175956-1-massimo.pegorer+...@gmail.com/


[PATCH] pinctrl: Check pinconfig nodes pre-reloc status recursively

2023-08-05 Thread Jonas Karlman
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@fe66: 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 
---
 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