[PATCH 3/8] dtoc: Allow multiple warnings for a driver
Walter Lozano
wlozano at collabora.com
Mon Jul 5 20:04:21 CEST 2021
Hi Simon,
On 7/4/21 3:19 PM, Simon Glass wrote:
> At present we show when a driver is missing but this is not always that
> useful. There are various reasons way a driver may appear to be missing,
Did you mean "why" instead of "way"?
> such as a parse error in the source code or a missing field in the driver
> declaration.
>
> Update the implementation to record all warnings for each driver, showing
> only those which relate to drivers that are actually used. This avoids
> spamming the user with warnings related to a driver for a different board.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> tools/dtoc/src_scan.py | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
Reviewed-by: Walter Lozano <walter.lozano at collabora.com>
Thank you, it is indeed something worth to be added!
Walter
>
> diff --git a/tools/dtoc/src_scan.py b/tools/dtoc/src_scan.py
> index 1dbb56712a3..6c37a71e978 100644
> --- a/tools/dtoc/src_scan.py
> +++ b/tools/dtoc/src_scan.py
> @@ -13,6 +13,7 @@ U_BOOT_DRIVER(), UCLASS_DRIVER and all struct declarations in header files.
> See doc/driver-model/of-plat.rst for more informaiton
> """
>
> +import collections
> import os
> import re
> import sys
> @@ -190,6 +191,9 @@ class Scanner:
> value: Driver name declared with U_BOOT_DRIVER(driver_name)
> _drivers_additional (list or str): List of additional drivers to use
> during scanning
> + _warnings: Dict of warnings found:
> + key: Driver name
> + value: Set of warnings
> _of_match: Dict holding information about compatible strings
> key: Name of struct udevice_id variable
> value: Dict of compatible info in that variable:
> @@ -217,6 +221,7 @@ class Scanner:
> self._driver_aliases = {}
> self._drivers_additional = drivers_additional or []
> self._missing_drivers = set()
> + self._warnings = collections.defaultdict(set)
> self._of_match = {}
> self._compat_to_driver = {}
> self._uclass = {}
> @@ -267,7 +272,10 @@ class Scanner:
> aliases_c.remove(compat_c)
> return compat_c, aliases_c
>
> - self._missing_drivers.add(compat_list_c[0])
> + name = compat_list_c[0]
> + self._missing_drivers.add(name)
> + self._warnings[name].add(
> + 'WARNING: the driver %s was not found in the driver list' % name)
>
> return compat_list_c[0], compat_list_c[1:]
>
> @@ -577,9 +585,17 @@ class Scanner:
>
> def show_warnings(self):
> """Show any warnings that have been collected"""
> - for name in sorted(list(self._missing_drivers)):
> - print('WARNING: the driver %s was not found in the driver list'
> - % name)
> + used_drivers = [drv.name for drv in self._drivers.values() if drv.used]
> + missing = self._missing_drivers
> + for name in sorted(self._warnings.keys()):
> + if name in missing or name in used_drivers:
> + warns = sorted(list(self._warnings[name]))
> + # For now there is only ever one warning
> + print('%s: %s' % (name, warns[0]))
> + indent = ' ' * len(name)
> + if name in missing:
> + missing.remove(name)
> + print()
>
> def scan_driver(self, fname):
> """Scan a driver file to build a list of driver names and aliases
More information about the U-Boot
mailing list