Add a test for binding of multiple drivers with the same compatible. If one of the drivers returns -ENODEV the other one needs to be bound.
Signed-off-by: Markus Schneider-Pargmann (TI.com) <[email protected]> --- arch/sandbox/dts/test.dts | 4 ++++ test/dm/core.c | 15 +++++++++++++++ test/dm/test-driver.c | 25 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index a2c739a2044c728a96b5f4acbf439a42d7e12fb5..9cc854ffe80e994e34010e299029a7f1756697e0 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -457,6 +457,10 @@ mux-control-names = "mux0"; }; + multimatch-test { + compatible = "sandbox,multimatch-test"; + }; + phy_provider0: gen_phy@0 { compatible = "sandbox,phy"; #phy-cells = <1>; diff --git a/test/dm/core.c b/test/dm/core.c index 53693f4f7ed7c7265218e4154ebf81a044a3a431..78ee14af228ab20a6639bb076260296adaea2c92 100644 --- a/test/dm/core.c +++ b/test/dm/core.c @@ -1410,3 +1410,18 @@ static int dm_test_try_first_device(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_try_first_device, 0); + +/* Test that all drivers are iterated when bind returns -ENODEV */ +static int dm_test_multimatch(struct unit_test_state *uts) +{ + struct udevice *dev; + + ut_assertok(uclass_find_device_by_name(UCLASS_TEST, "multimatch-test", + &dev)); + ut_assertnonnull(dev); + ut_asserteq_str("test_multimatch_second", dev->driver->name); + ut_asserteq(2, dm_testdrv_op_count[DM_TEST_OP_BIND]); + + return 0; +} +DM_TEST(dm_test_multimatch, UTF_SCAN_FDT); diff --git a/test/dm/test-driver.c b/test/dm/test-driver.c index 759de3a5f77f4b64ea577a293586a737e4623f60..bf953d7814df6a0e6efd6c2a3960a925a3fbe5a7 100644 --- a/test/dm/test-driver.c +++ b/test/dm/test-driver.c @@ -197,3 +197,28 @@ U_BOOT_DRIVER(test_act_dma_vital_clk_drv) = { .unbind = test_manual_unbind, .flags = DM_FLAG_VITAL | DM_FLAG_ACTIVE_DMA, }; + +static int test_multimatch_first_bind(struct udevice *dev) +{ + dm_testdrv_op_count[DM_TEST_OP_BIND]++; + return -ENODEV; +} + +static const struct udevice_id test_multimatch_ids[] = { + { .compatible = "sandbox,multimatch-test" }, + { } +}; + +U_BOOT_DRIVER(test_multimatch_first) = { + .name = "test_multimatch_first", + .id = UCLASS_TEST, + .of_match = test_multimatch_ids, + .bind = test_multimatch_first_bind, +}; + +U_BOOT_DRIVER(test_multimatch_second) = { + .name = "test_multimatch_second", + .id = UCLASS_TEST, + .of_match = test_multimatch_ids, + .bind = test_manual_bind, +}; -- 2.51.0

