Hi Ahmad, On 2025-11-13 10:11, Ahmad Fatoum wrote:
+ struct bus_type *bus; + struct device_d *socdev; + const char *soc_serial; + char *tlv_serial = basprintf("%.*s", len, val);strndup would also work here.
Since a such basprintf is used in __tlv_format_str() and tlv_format_blob(), I found it adequate to do it the same way.
+ + bus = get_bus_by_name("soc"); + if (!bus) { + pr_err("No 'soc' bus found\n");goto out and use a common error message? That way you also cover the case of no socdev existing.
Ah indeed, will do that in v2.
+ return -EACCES; + } + + for_each_device(socdev) { + soc_serial = dev_get_param(socdev, "serial_number"); + if (!soc_serial) + continue; + + if (streq_ptr(tlv_serial, soc_serial)) + return __tlv_format_str(dev, map, len, val) ? 0 : -ENOMEM;return tlv_format_str(...) directly instead? I talked with Sascha yesterday and I believe he is implementing a common get_soc_uid(). If so, that might be suitable for use here.
Sounds good! When I wrote this code, I was unsure whether multiple SoC UIDs or a soc1.serial_number are cases we ever want to care about. If not, I would habe only tested against the one/first serial_number here and then break the loop... Will update to get_soc_uid() if that's posted before v2. Regards, Jonas -- Pengutronix e.K. | Jonas Rebmann | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
