arm64: Simplify checking for populated DT
PATCH v2 1/1 arm64: Simplify checking for populated DT
Use of the of_scan_flat_dt() function predates libfdt and is discouraged as libfdt provides a nicer set of APIs. Rework dt_scan_depth1_nodes to use libfdt calls directly, and rename it to dt_is_stub() to reflect exactly what it checking.
---
v2:
- Keep checking for only stub nodes
arch/arm64/kernel/acpi.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-)
arch/arm64/kernel/acpi.c +14 -21
@@ -22,6 +22,7 @@#include <linux/irq_work.h> #include <linux/memblock.h> #include <linux/of_fdt.h> +#include <linux/libfdt.h> #include <linux/smp.h> #include <linux/serial_core.h> #include <linux/pgtable.h>
@@ -62,29 +63,22 @@ static int __init parse_acpi(char *arg) }early_param ("acpi" , parse_acpi); -static int __init dt_scan_depth1_nodes (unsigned long node, -const char *uname,int depth, -void *data) +static bool __init dt_is_stub (void ) { -/* -* Ignore anything not directly under the root node; we'll -* catch its parent instead. -*/ -if (depth !=1 ) -return 0 ; +int node; -if (strcmp (uname,"chosen" ) ==0 ) -return 0 ; +fdt_for_each_subnode (node, initial_boot_params,0 ) { +const char *name =fdt_get_name (initial_boot_params, node,NULL ); +if (strcmp (name,"chosen" ) ==0 ) +continue ; +if (strcmp (name,"hypervisor" ) ==0 && +of_flat_dt_is_compatible (node,"xen,xen" )) +continue ; -if (strcmp (uname,"hypervisor" ) ==0 && -of_flat_dt_is_compatible (node,"xen,xen" )) -return 0 ; +return false; + } -/* -* This node at depth 1 is neither a chosen node nor a xen node, -* which we do not expect. -*/ -return 1 ; +return true; }/*
@@ -205,8 +199,7 @@ void __init acpi_boot_table_init(void)* and ACPI has not been [force] enabled (acpi=on|force) */ if (param_acpi_off || - (!param_acpi_on && !param_acpi_force && -of_scan_flat_dt (dt_scan_depth1_nodes,NULL ))) + (!param_acpi_on && !param_acpi_force && !dt_is_stub ())) goto done;/*
Signature · 1 line
2.32.0
Quoted 8 lines · Rob Herring
Use of the
of_scan_flat_dt()function predates libfdt and is discouraged as libfdt provides a nicer set of APIs. Reworkdt_scan_depth1_nodesto use libfdt calls directly, and rename it todt_is_stub()to reflect exactly what it checking.Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Signed-off-by Rob Herring <[email protected]>
Thanks for reworking this; it looks good to me:
Thanks,
Mark.
Quoted 74 lines
---
v2:
- Keep checking for only stub nodesarch/arm64/kernel/acpi.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-)arch/arm64/kernel/acpi.c +14
-21@@ -22,6 +22,7 @@#include <linux/irq_work.h> #include <linux/memblock.h> #include <linux/of_fdt.h> +#include <linux/libfdt.h> #include <linux/smp.h> #include <linux/serial_core.h> #include <linux/pgtable.h> @@ -62,29 +63,22 @@ static int __init parse_acpi(char *arg) }early_param ("acpi" , parse_acpi); -static int __init dt_scan_depth1_nodes (unsigned long node, -const char *uname,int depth, -void *data) +static bool __init dt_is_stub (void ) { -/* -* Ignore anything not directly under the root node; we'll -* catch its parent instead. -*/ -if (depth !=1 ) -return 0 ; +int node; -if (strcmp (uname,"chosen" ) ==0 ) -return 0 ; +fdt_for_each_subnode (node, initial_boot_params,0 ) { +const char *name =fdt_get_name (initial_boot_params, node,NULL ); +if (strcmp (name,"chosen" ) ==0 ) +continue ; +if (strcmp (name,"hypervisor" ) ==0 && +of_flat_dt_is_compatible (node,"xen,xen" )) +continue ; -if (strcmp (uname,"hypervisor" ) ==0 && -of_flat_dt_is_compatible (node,"xen,xen" )) -return 0 ; +return false; + } -/* -* This node at depth 1 is neither a chosen node nor a xen node, -* which we do not expect. -*/ -return 1 ; +return true; }/* @@ -205,8 +199,7 @@ void __init acpi_boot_table_init(void)* and ACPI has not been [force] enabled (acpi=on|force) */ if (param_acpi_off || - (!param_acpi_on && !param_acpi_force && -of_scan_flat_dt (dt_scan_depth1_nodes,NULL ))) + (!param_acpi_on && !param_acpi_force && !dt_is_stub ())) goto done;/* Signature · 1 line
2.32.0
Quoted 4 lines · Rob Herring
Use of the
of_scan_flat_dt()function predates libfdt and is discouraged as libfdt provides a nicer set of APIs. Reworkdt_scan_depth1_nodesto use libfdt calls directly, and rename it todt_is_stub()to reflect exactly what it checking.
Applied to arm64 (for-next/misc), thanks!
[1/1] arm64: Simplify checking for populated DT
https://git.kernel.org/arm64/c/b6363fe7b513
Signature · 1 line
Catalin