
Hi Marek,
From: Marek Vasut marex@denx.de Sent: lundi 11 février 2019 12:58
On 2/11/19 12:56 PM, Patrick DELAUNAY wrote:
Hi Marek and Simon
From: Patrick DELAUNAY Sent: vendredi 8 février 2019 13:47
Hi Marek,
From: Marek Vasut marex@denx.de Sent: jeudi 7 février 2019 18:48
On 2/7/19 6:40 PM, Patrick DELAUNAY wrote:
Hi Marek,
From: Marek Vasut marex@denx.de Sent: mardi 5 février 2019 09:55
On 2/4/19 3:40 PM, Simon Glass wrote: > On Mon, 4 Feb 2019 at 03:15, Patrick Delaunay > patrick.delaunay@st.com wrote: >> >> This add missing parts for previous commit 06f94461a9f4 >> ("fdt: Allow indicating a node is for U-Boot proper only") >> >> At present it is not possible to specify that a node should be >> used before relocation (in U-Boot proper) without it also ending >> up in SPL and TPL device trees. Add a new "u-boot,dm-pre-proper" >> boolean property for this. >> >> >> Signed-off-by: Patrick Delaunay patrick.delaunay@st.com >
...
NB: we could also remove the tags u-boot,dm-pre-reloc/u-boot,dm-spl : we
can gain place in spl dtb
These tags are not needed as binding is mandatory in SPL
build for ALL
node present in SPL device tree
others node are cleaned by fdtgrep (but impact in SPL code)
Finally I will sent a patch for this proposal (today I hope) => On my board stm32mp1-ev1, the SPL device tree is reduced by 790 bytes
FYI: patch sent with http://patchwork.ozlabs.org/patch/1039756/
NB: side effect on the patch, we only need to TAG the children (all node are bounded in SPL) That improve the next point.
After test, the phandle of the parent node is remove when the tag preloc or spl
is not present....
So the need to tag all the DT tree is not solved.
I'm not sure I quite understand this, but if you reference the leaf node in the tree, you should get references to all the parent nodes for free and they cannot be removed, right ?
Yes, I think the same before my test, it is why I indicate this point, even if it not clear.
But I don't known ftdgrep can be used fro this point.
To explain more in details:
I try to remove u-boot,dm-spl for some nodes in ED1/EV1 board :
------------------- arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi ------------------- index 4898483..574b251 100644 @@ -165,14 +165,12 @@ /* SPL part **************************************/ /* MMC1 boot */ &sdmmc1_b4_pins_a { - u-boot,dm-spl; pins { u-boot,dm-spl; }; };
&sdmmc1_dir_pins_a { - u-boot,dm-spl; pins { u-boot,dm-spl; }; @@ -184,14 +182,12 @@
/* MMC2 boot */ &sdmmc2_b4_pins_a { - u-boot,dm-spl; pins { u-boot,dm-spl; }; };
&sdmmc2_d47_pins_a { - u-boot,dm-spl; pins { u-boot,dm-spl; };
------------------- arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi ------------------- index 30b1734..eab7334 100644 @@ -35,14 +35,12 @@ };
&qspi_clk_pins_a { - u-boot,dm-spl; pins { u-boot,dm-spl; }; };
&qspi_bk1_pins_a { - u-boot,dm-spl; pins1 { u-boot,dm-spl; }; @@ -52,7 +50,6 @@ };
&qspi_bk2_pins_a { - u-boot,dm-spl; pins1 { u-boot,dm-spl; };
The result seems correct for a first look, but in fact some many phandle are missing and the device becomes invalid :
*************** *** 351,353 **** qspi-clk-0 { - phandle = <0x00000013>; pins { --- 351,352 ---- *************** *** 360,362 **** qspi-bk1-0 { - phandle = <0x00000014>; pins1 { --- 359,360 ---- *************** *** 375,377 **** qspi-bk2-0 { - phandle = <0x00000015>; pins1 { --- 373,374 ---- *************** *** 390,392 **** sdmmc1-b4@0 { - phandle = <0x00000016>; pins { --- 387,388 ---- *************** *** 399,401 **** sdmmc1-dir@0 { - phandle = <0x00000017>; pins { --- 395,396 ---- *************** *** 408,410 **** sdmmc2-b4@0 { - phandle = <0x0000001a>; pins { --- 403,404 ---- *************** *** 417,419 **** sdmmc2-d47@0 { - phandle = <0x0000001b>; pins { --- 411,412 ----
I think the fdtgrep correctly adds the supernode (the parent node) but not their properties , it is managed by the code:
FDT_REG_SUPERNODES is used by default in fdtgrep => tools/fdtgrep.c:1195: disp.flags = FDT_REG_SUPERNODES; /* Default flags */
But properties are not added except if h_include return true : => lib/libfdt/fdt_region.c:513: if ((flags & FDT_REG_SUPERNODES) && val && !p.want) p.want = WANT_NODES_ONLY;
So to have also properties, I think fdtgrep.c:h_include() should be change to return 1 for some FDT_IS_PROP case..... but it should be difficult to know that the chil are include, before to parse them
For example trace in ftdgrep for
sdmmc1-b4@0 { phandle = <0x00000016>; pins { pinmux = <0x0000280d 0x00002c0d 0x0000036b 0x0000035b 0x00000002 0x63312d64>; slew-rate = <0x00000003>; drive-push-pull; bias-disable; }; };
type=1, data=/soc/pin-controller@50002000/sdmmc2-b4@0 - val->type=1, str='/config', match=0 - val->type=1, str='/chosen', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - checking node 'sdmmc2-b4@0' type=10, data=phandle - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - returning 0
=> phandle NOT added -----------------------------------------------------
type=1, data=/soc/pin-controller@50002000/sdmmc2-b4@0 - val->type=1, str='/config', match=0 - val->type=1, str='/chosen', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - checking node 'sdmmc2-b4@0' type=10, data=phandle - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - returning 0 type=2, data=phandle - not in any condition - returning -1 type=1, data=/soc/pin-controller@50002000/sdmmc2-b4@0/pins - val->type=1, str='/config', match=0 - val->type=1, str='/chosen', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - checking node 'pins' type=10, data=pinmux - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f type=10, data=slew-rate - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f type=10, data=drive-push-pull - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f type=10, data=bias-pull-up - val->type=10, str='u-boot,dm-spl', match=0 - val->type=10, str='u-boot,dm-pre-reloc', match=0 - no match, types_inc=11, types_exc=0, none_match=1f type=10, data=u-boot,dm-spl - val->type=10, str='u-boot,dm-spl', match=1 - match inc u-boot,dm-spl - returning 1
------------ including sub node pins ------------------------------
type=2, data=pinmux - not in any condition - returning -1 type=2, data=slew-rate - not in any condition - returning -1 type=2, data=drive-push-pull - not in any condition - returning -1 type=2, data=bias-pull-up - not in any condition - returning -1 type=2, data=u-boot,dm-spl - not in any condition - returning -1
------- Next node --------
type=1, data=/soc/pin-controller@50002000/sdmmc2-d47@0 - val->type=1, str='/config', match=0 - val->type=1, str='/chosen', match=0 - no match, types_inc=11, types_exc=0, none_match=1f - checking node 'sdmmc2-d47@0'
-- Best regards, Marek Vasut
Sorry for the long exmplaination.
Regards Patrick