Hi Simon, On 10:39-20240711, Simon Glass wrote: > Hi Manorit, > > On Wed, 10 Jul 2024 at 07:15, Manorit Chawdhry <m-chawd...@ti.com> wrote: > > > > Hi Simon, > > > > On 09:36-20231217, Simon Glass wrote: > > > The existing bootph binding is defined such that properties in a > > > subnode are also implied in the supernode also, as in this example: > > > > > > buttons { > > > /* bootph,pre-ram is implied by btn1 */ > > > compatible = "gpio-keys"; > > > > > > btn1 { > > > bootph,pre-ram; > > > gpios = <&gpio_a 3 0>; > > > label = "button1"; > > > linux,code = <BTN_1>; > > > }; > > > > > > Provide an option to implement this in fdtgrep. > > > > > > Signed-off-by: Simon Glass <s...@chromium.org> > > > > Coming back to this patch as am facing some issues with the bootph-all > > propagation to the parent nodes [0]. We have a dmsc/sms node in our > > devices and it is a parent node of k3_pds, k3_clks, k3_reset. > > > > During U-boot proper we are initializing the serial console and during > > that time we have to make some calls to our Device manager for clocks > > and power domains. With the DT modelling, the clocks and power domains > > come under the device manager node ( dmsc/sms ) but interestingly that > > driver is not getting probed while putting bootph-all in the child > > nodes. Do you know anything about this? I thought putting it in child > > node will propagate it to the parent nodes as well so it'll be probed as > > well. We are having to put bootph-all explicitely in the dmsc/sms node > > for it to work. > > Yes, that is because fdtgrep is only used with the SPL DT. The U-Boot > one is used unmodified by U-Boot and it does not check parents for > such properties (neither does SPL, but fdtgrep has logic to imply > these properties internally). > > The easiest way to fix this would probably be to process the DT in > Binman for insertion into the final image, since Binman already does > lots of other DT processing. > > If you like, you could create an issue for it [1]. If you want to have > a crack at fixing it, I could provide some pointers.
I am not sure if I'll be able to focus on this now but feel free to give your pointers, might help anyone else as well if they want to take a look at it. Meanwhile I will open a issue as you mentioned for tracking this, trying to register on the URL that you provided. Thanks! Regards, Manorit > > Regards, > Simon > > [1] https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues > > > > > > [0]: > > https://lore.kernel.org/linux-arm-kernel/20240705-b4-upstream-bootph-all-v2-0-9007681ed...@ti.com/T/#t > > > > Regards, > > Manorit > > > --- > > > > > > tools/fdtgrep.c | 18 +++++++++++++++++- > > > 1 file changed, 17 insertions(+), 1 deletion(-) > > > > > > diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c > > > index ca639a2d9f4f..f1ff1946bd4a 100644 > > > --- a/tools/fdtgrep.c > > > +++ b/tools/fdtgrep.c > > > @@ -63,6 +63,7 @@ struct display_info { > > > int types_inc; /* Mask of types that we include > > > (FDT_IS...) */ > > > int types_exc; /* Mask of types that we exclude > > > (FDT_IS...) */ > > > int invert; /* Invert polarity of match */ > > > + int props_up; /* Imply properties up to supernodes */ > > > struct value_node *value_head; /* List of values to match */ > > > const char *output_fname; /* Output filename */ > > > FILE *fout; /* File to write dts/dtb output */ > > > @@ -606,6 +607,16 @@ static int check_props(struct display_info *disp, > > > const void *fdt, int node, > > > strlen(str)); > > > } > > > > > > + /* if requested, check all subnodes for this property too */ > > > + if (inc != 1 && disp->props_up) { > > > + int subnode; > > > + > > > + for (subnode = fdt_first_subnode(fdt, node); > > > + subnode > 0 && inc != 1; > > > + subnode = fdt_next_subnode(fdt, subnode)) > > > + inc = check_props(disp, fdt, subnode, inc); > > > + } > > > + > > > return inc; > > > } > > > > > > @@ -955,7 +966,7 @@ static const char usage_synopsis[] = > > > case '?': usage("unknown option"); > > > > > > static const char usage_short_opts[] = > > > - "haAc:b:C:defg:G:HIlLmn:N:o:O:p:P:rRsStTv" > > > + "haAc:b:C:defg:G:HIlLmn:N:o:O:p:P:rRsStTuv" > > > USAGE_COMMON_SHORT_OPTS; > > > static const struct option usage_long_opts[] = { > > > {"show-address", no_argument, NULL, 'a'}, > > > @@ -985,6 +996,7 @@ static const struct option usage_long_opts[] = { > > > {"skip-supernodes", no_argument, NULL, 'S'}, > > > {"show-stringtab", no_argument, NULL, 't'}, > > > {"show-aliases", no_argument, NULL, 'T'}, > > > + {"props-up-to-supernode", no_argument, NULL, 'u'}, > > > {"invert-match", no_argument, NULL, 'v'}, > > > USAGE_COMMON_LONG_OPTS, > > > }; > > > @@ -1016,6 +1028,7 @@ static const char * const usage_opts_help[] = { > > > "Don't include supernodes of matching nodes", > > > "Include string table in binary output", > > > "Include matching aliases in output", > > > + "Add -p properties to supernodes too", > > > "Invert the sense of matching (select non-matching lines)", > > > USAGE_COMMON_OPTS_HELP > > > }; > > > @@ -1202,6 +1215,9 @@ static void scan_args(struct display_info *disp, > > > int argc, char *argv[]) > > > case 'T': > > > disp->add_aliases = 1; > > > break; > > > + case 'u': > > > + disp->props_up = 1; > > > + break; > > > case 'v': > > > disp->invert = 1; > > > break; > > > -- > > > 2.43.0.472.g3155946c3a-goog > > >