Also CC Ovidiu and Niel, since I believe they were both working on patches related to this.
On 4/6/20 10:23 AM, Sean Anderson wrote: > Add a test for the dm drivers command. Also fix a null pointer dereference > revealed by said test. > > Signed-off-by: Sean Anderson <sean...@gmail.com> > Reviewed-by: Bin Meng <bmeng...@gmail.com> > Tested-by: Bin Meng <bmeng...@gmail.com> > Reviewed-by: Simon Glass <s...@chromium.org> > --- > The changes in this patch were originally submitted as v3 of 7b9d60fc1ff > "cmd: Add command to dump drivers and compatible strings" [1]. I have > retained the Reviewed-by and Tested-by tags since no other changes besides > rebasing on v1 have been made. > > [1] https://patchwork.ozlabs.org/patch/1234460/ > > cmd/dm.c | 4 ++-- > drivers/core/dump.c | 3 ++- > test/py/tests/test_dm.py | 17 +++++++++++++++++ > 3 files changed, 21 insertions(+), 3 deletions(-) > create mode 100644 test/py/tests/test_dm.py > > diff --git a/cmd/dm.c b/cmd/dm.c > index 108707c298..7a90685f8b 100644 > --- a/cmd/dm.c > +++ b/cmd/dm.c > @@ -41,7 +41,7 @@ static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, > int argc, > } > > static int do_dm_dump_drivers(cmd_tbl_t *cmdtp, int flag, int argc, > - char * const argv[]) > + char * const argv[]) > { > dm_dump_drivers(); > > @@ -94,5 +94,5 @@ U_BOOT_CMD( > "tree Dump driver model tree ('*' = activated)\n" > "dm uclass Dump list of instances for each uclass\n" > "dm devres Dump list of device resources for each device\n" > - "dm drivers Dump list of drivers and their compatible strings\n" > + "dm drivers Dump list of drivers and their compatible strings" > ); > diff --git a/drivers/core/dump.c b/drivers/core/dump.c > index e73ebeabcc..b5046398d4 100644 > --- a/drivers/core/dump.c > +++ b/drivers/core/dump.c > @@ -107,7 +107,8 @@ void dm_dump_drivers(void) > puts("Driver Compatible\n"); > puts("--------------------------------\n"); > for (entry = d; entry < d + n_ents; entry++) { > - for (match = entry->of_match; match->compatible; match++) > + for (match = entry->of_match; > + match && match->compatible; match++) > printf("%-20.20s %s\n", > match == entry->of_match ? entry->name : "", > match->compatible); > diff --git a/test/py/tests/test_dm.py b/test/py/tests/test_dm.py > new file mode 100644 > index 0000000000..f6fbf8ba4c > --- /dev/null > +++ b/test/py/tests/test_dm.py > @@ -0,0 +1,17 @@ > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (C) 2020 Sean Anderson > + > +import pytest > + > +@pytest.mark.buildconfigspec('cmd_dm') > +def test_dm_drivers(u_boot_console): > + """Test that each driver in `dm tree` is also listed in `dm drivers`.""" > + response = u_boot_console.run_command('dm tree') > + driver_index = response.find('Driver') > + assert driver_index != -1 > + drivers = (line[driver_index:].split()[0] > + for line in response[:-1].split('\n')[2:]) > + > + response = u_boot_console.run_command('dm drivers') > + for driver in drivers: > + assert driver in response >