In the U-Boot pre-relocation stage, if the parent node lacks bootph*
property and the driver lacks a pre-reloc flag, all of its subsequent
subnodes gets skipped over from driver binding—even if they have a
bootph* property.

This series addresses the issue by scanning through all the subnodes
of the current node for the bootph* property and propagate it to all
of its supernodes, ensuring that all of the applicable drivers are
bound and probed prior to relocation. This series implements one of
the solutions mentioned in [0].

Since, all the nodes which are not having any bootph* property will
also be traversed, we will have to incur some overheads in boot time,
hence protecting the feature under a config.

Boot time overheads:
    Baseline: Upstream u-boot

    Patch test: Baseline + remove all bootph-all properties from
    *-u-boot.dtsi except the ones which are supposed to be probed
    but have no bootph in any of its subnode.

    J7200 delta from baseline  : ~100ms
    J784S4 delta from baseline : ~350ms

Boot logs with the patch:
https://gist.github.com/Jamm02/d6e76233437525b266ec96f8a7982096

References: 
[0] 
https://lore.kernel.org/u-boot/CAFLszTiEZYoo+=+MJg7sgN93k144zEi18A5_Hk+J3sce00g+=w...@mail.gmail.com/

Moteen Shah (2):
  arch: arm: Kconfig: Add config to use subnode's bootph property for
    binding drivers
  drivers: core: lists.c: Bind drivers using bootph* property in
    subnodes

 arch/arm/Kconfig     | 11 ++++++
 drivers/core/lists.c | 88 +++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 97 insertions(+), 2 deletions(-)

-- 
2.34.1

Reply via email to