[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