Commit 1b5fe11d authored by Simon Glass's avatar Simon Glass
Browse files

dtoc: Allow multiple warnings for a driver

At present we show when a driver is missing but this is not always that
useful. There are various reasons why a driver may appear to be missing,
such as a parse error in the source code or a missing field in the driver

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's avatarSimon Glass <>
Reviewed-by: default avatarWalter Lozano <>
parent 973fa524
......@@ -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:
return compat_c, aliases_c
name = compat_list_c[0]
'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 = [ 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:
def scan_driver(self, fname):
"""Scan a driver file to build a list of driver names and aliases
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment