On Mon, May 11, 2026 at 02:13:52AM +0900, Sang-Heon Jeon wrote:
> Commit 60f20d84dc81 ("of/fdt: Rework early_init_dt_scan_chosen() to
> call directly") changed early_init_dt_scan_chosen() to be called
> directly instead of via of_scan_flat_dt(). After this change,
> early_init_dt_scan_chosen_ppc() does not behave as intended in either
> case below:
>
> - /chosen(or /chosen@0) exists: early_init_dt_scan_chosen() always
> succeeds, so early_init_dt_scan_chosen_ppc() then reads properties
> from the root node (first iteration) instead of chosen node.
>
> - /chosen does not exist:
> - Until commit 064e32dc5b03 ("of: fdt: Honor CONFIG_CMDLINE* even without
> /chosen node, take 2"), early_init_dt_scan_chosen() returns -ENOENT
> and early_init_dt_scan_chosen_ppc() returns 0. So of_scan_flat_dt()
> iterates over all remaining nodes. Not a bug but unnecessary.
> - After above commit, early_init_dt_scan_chosen() returns 0 and
> early_init_dt_scan_chosen_ppc() returns 1. So it reads properties
> from the root node (first iteration) instead of chosen node, same as
> the chosen node exist case above.
>
> Instead of using of_scan_flat_dt() for chosen node handling, first call
> early_init_dt_scan_chosen() directly to handle common chosen node
> properties. Then call early_init_dt_scan_chosen_ppc(), which is updated
> to handle powerpc-specific chosen node properties.
>
> Both now look up chosen node directly to avoid reading from the wrong node.
>
> Fixes: 60f20d84dc81 ("of/fdt: Rework early_init_dt_scan_chosen() to call
> directly")
> Signed-off-by: Sang-Heon Jeon <[email protected]>
Reviewed-by: Rob Herring (Arm) <[email protected]>