Re: [PATCH 4/6] Restore labels from __symbols__ node

David Gibson <[email protected]> Thu, 21 Aug 2025 14:25:06 +1000
Newsgroups org.kernel.vger.devicetree-compiler
Message-ID <aKafognYFAUlPS-V@zatzit>
On Wed, Aug 20, 2025 at 03:11:30PM +0200, Uwe Kleine-König wrote:
> If the input has a __symbols__ node, restore the named labels for the
> respective nodes.
> 
> Signed-off-by: Uwe Kleine-König <[email protected]>

Reviewed-by: David Gibson <[email protected]>

> ---
>  dtc.c      |  2 ++
>  dtc.h      |  1 +
>  livetree.c | 21 +++++++++++++++++++++
>  3 files changed, 24 insertions(+)
> 
> diff --git a/dtc.c b/dtc.c
> index b3445b7d6473..63a6c85da5cf 100644
> --- a/dtc.c
> +++ b/dtc.c
> @@ -338,6 +338,8 @@ int main(int argc, char *argv[])
>  	if (auto_label_aliases)
>  		generate_label_tree(dti, "aliases", false);
>  
> +	generate_labels_from_tree(dti, "__symbols__");
> +
>  	if (generate_symbols)
>  		generate_label_tree(dti, "__symbols__", true);
>  
> diff --git a/dtc.h b/dtc.h
> index 3a220b9afc99..f97f3c29e2d4 100644
> --- a/dtc.h
> +++ b/dtc.h
> @@ -339,6 +339,7 @@ struct dt_info *build_dt_info(unsigned int dtsflags,
>  			      struct reserve_info *reservelist,
>  			      struct node *tree, uint32_t boot_cpuid_phys);
>  void sort_tree(struct dt_info *dti);
> +void generate_labels_from_tree(struct dt_info *dti, const char *name);
>  void generate_label_tree(struct dt_info *dti, const char *name, bool allocph);
>  void generate_fixups_tree(struct dt_info *dti, const char *name);
>  void generate_local_fixups_tree(struct dt_info *dti, const char *name);
> diff --git a/livetree.c b/livetree.c
> index f328824c3bc6..8aafc9aa5cd6 100644
> --- a/livetree.c
> +++ b/livetree.c
> @@ -1112,6 +1112,27 @@ static int generate_local_fixups_tree_internal(struct dt_info *dti,
>  	return ret;
>  }
>  
> +void generate_labels_from_tree(struct dt_info *dti, const char *name)
> +{
> +	struct node *an;
> +	struct property *p;
> +
> +	an = get_subnode(dti->dt, name);
> +	if (!an)
> +		return;
> +
> +	for_each_property(an, p) {
> +		struct node *labeled_node;
> +
> +		labeled_node = get_node_by_path(dti->dt, p->val.val);
> +		if (labeled_node)
> +			add_label(&labeled_node->labels, p->name);
> +		else if (quiet < 1)
> +			fprintf(stderr, "Warning: Path %s referenced in property %s/%s missing",
> +				p->val.val, name, p->name);
> +	}
> +}
> +
>  void generate_label_tree(struct dt_info *dti, const char *name, bool allocph)
>  {
>  	if (!any_label_tree(dti, dti->dt))

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmimn6EACgkQzQJF27ox
2GfPBg//aVzgDBPM31xS+T7hODo5b/Ug9fpR7kpwOczx2DrJOhZB9l1Qj5tWCOrU
LgXYbmfVU8R2qQpiTPFj2dZAEfX5HjbYyAZ7b8cg7ipPueUWknXQPZ0+TpV7tWV/
mDoUpe3VAKuPcUxB9vGLidNpyfV5jwmk4V2779yVUswYJcZSkomgTjRo7Rgz21hH
5AuAqIxrpd0atn/bCgTDNimuabbnqqX70XRMdtNG01oq0P+0RnU3c8YkKB1k3c/u
rH4y79k23IVK2/CiBIcsnrtp83JQP5GewE8kAyuWBYZSHZYN+bUdwondg50X7cO2
hIzDhAHY3XAv6A4SEulx9vuuxhppGizkOxoB0dkm0rdAol4YvdJw/MrgSXx0JQVv
ULt8pdqPIS6YEVXVEpmVwY6cPq6YQ4rvtq40vB0fCf9YRmg2gdCQ/zGLJu08XuV0
dPiFhx3cOCpN/LctymmrPRrq5tbE52fDi5ud7q2s3uDiVmwntEkGXJFP37pDU5We
KcYAHJtIXQrhdb58zdc7XLNQprRNvHYa8hNhtMAOJSlisHMpzP29gqp7KuNrIQ8P
tgbr7okHH7XZoyXWe5Kj3bdJf8M6hAhXZH6IYoF5xiBlLi/T28Ooj4njJ4eBQYiJ
wqELGmMLuN4Yigj1iv5p8z4X1vSO8oWkAg+4OMBVnFMeektPdJs=
=sqJN
-----END PGP SIGNATURE-----