[PATCH 7/8] dtoc: Detect drivers which do not parse correctly
Walter Lozano
wlozano at collabora.com
Mon Jul 5 20:04:35 CEST 2021
On 7/4/21 3:19 PM, Simon Glass wrote:
> At present if a driver is missing a uclass or compatible stirng, this
Most probably it should be "string"
> is silently ignored. This makes sense in most cases, particularly for
> the compatible string, since it is not required except when the driver
> is used with of-platdata.
>
> But it is also not very helpful. When there is some sort of problem
> with a driver, the missing compatible string (for example) may be the
> cause.
>
> Add a warning in this case, showing it only for drivers which are used
> by the build.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> tools/dtoc/src_scan.py | 7 ++++++-
> tools/dtoc/test_src_scan.py | 38 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 44 insertions(+), 1 deletion(-)
Reviewed-by: Walter Lozano <walter.lozano at collabora.com>
Thanks!
Walter
>
> diff --git a/tools/dtoc/src_scan.py b/tools/dtoc/src_scan.py
> index 847677757d9..3bef59d616e 100644
> --- a/tools/dtoc/src_scan.py
> +++ b/tools/dtoc/src_scan.py
> @@ -546,7 +546,12 @@ class Scanner:
> # The driver does not have a uclass or compat string.
> # The first is required but the second is not, so just
> # ignore this.
> - pass
> + if not driver.uclass_id:
> + warn = 'Missing .uclass'
> + else:
> + warn = 'Missing .compatible'
> + self._warnings[driver.name].add('%s in %s' %
> + (warn, fname))
> driver = None
> ids_name = None
> compat = None
> diff --git a/tools/dtoc/test_src_scan.py b/tools/dtoc/test_src_scan.py
> index 62500e80fe7..f03cf8ed7c7 100644
> --- a/tools/dtoc/test_src_scan.py
> +++ b/tools/dtoc/test_src_scan.py
> @@ -581,3 +581,41 @@ rockchip_rk3288_grf: WARNING: the driver rockchip_rk3288_grf was not found in th
> ''',
> stdout.getvalue())
> self.assertIn('tegra_i2c_ids', stdout.getvalue())
> +
> + def scan_uclass_warning(self):
> + """Test a missing .uclass in the driver"""
> + buff = '''
> +static const struct udevice_id tegra_i2c_ids[] = {
> + { .compatible = "nvidia,tegra114-i2c", .data = TYPE_114 },
> + { }
> +};
> +
> +U_BOOT_DRIVER(i2c_tegra) = {
> + .name = "i2c_tegra",
> + .of_match = tegra_i2c_ids,
> +};
> +'''
> + scan = src_scan.Scanner(None, None)
> + scan._parse_driver('file.c', buff)
> + self.assertEqual(
> + {'i2c_tegra': {'Missing .uclass in file.c'}},
> + scan._warnings)
> +
> + def scan_compat_warning(self):
> + """Test a missing .compatible in the driver"""
> + buff = '''
> +static const struct udevice_id tegra_i2c_ids[] = {
> + { .compatible = "nvidia,tegra114-i2c", .data = TYPE_114 },
> + { }
> +};
> +
> +U_BOOT_DRIVER(i2c_tegra) = {
> + .name = "i2c_tegra",
> + .id = UCLASS_I2C,
> +};
> +'''
> + scan = src_scan.Scanner(None, None)
> + scan._parse_driver('file.c', buff)
> + self.assertEqual(
> + {'i2c_tegra': {'Missing .compatible in file.c'}},
> + scan._warnings)
More information about the U-Boot
mailing list