From patchwork Mon Apr 24 02:10:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 754045 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3wB8wV3WyBz9s3T for ; Mon, 24 Apr 2017 12:11:38 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="NRnLGweR"; dkim-atps=neutral Received: by lists.denx.de (Postfix, from userid 105) id DB306C21C4F; Mon, 24 Apr 2017 02:11:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id F0582C21C57; Mon, 24 Apr 2017 02:10:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B0CCAC21C45; Mon, 24 Apr 2017 02:10:55 +0000 (UTC) Received: from mail-io0-f173.google.com (mail-io0-f173.google.com [209.85.223.173]) by lists.denx.de (Postfix) with ESMTPS id B5B36C21C2C for ; Mon, 24 Apr 2017 02:10:54 +0000 (UTC) Received: by mail-io0-f173.google.com with SMTP id k87so174502232ioi.0 for ; Sun, 23 Apr 2017 19:10:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=7wwj74xIwVKKcckbqyLkp6oJIbNSWlu6lbcyTkE2pSQ=; b=NRnLGweR0zXX/+qUuTiaAI4OckyocJMhs7DLFhPKHJpAKq/OlRPsO7BE7+j+xVhrZZ IZY2ySjYDUfOohPDLJm1YJAj3+gMZwQrHRwgrgqS8GT9hyioqXj//6kvY/yN5nI+lGDq KAvxSq4iY79D4zF+j/LltaTeRIUydz0dE4Nx67pxjD1JMsOnLB98X65+lVanGj1O4nfy BArKnDyPHnfp/X08OnZWJiakH2NUGXil6O5bai9r67qdAnINEumsunjIir2Fpi5xILnq ZCS/tkMno3jO8AITMZK3HcKf5zbyYP6YEATIOEhKVUzRqxRkb/GK04/TJLG4bUGN/VPx 2Vag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=7wwj74xIwVKKcckbqyLkp6oJIbNSWlu6lbcyTkE2pSQ=; b=GTh1/aGP+RSJ/StjuTnSqiUC5IBsGIszcK4IbBTpIV2dCibApmA6qE1LKReSbYyxpY pVdQ9/opKzpwk4VoGWYgDgUFaqxyasxVdMdkgnQKgx8FYFJoHMc/vk1PD8dzJJzl+WMQ NiFjFRUyt2TmToeT9DsMNY7EN4y4G/X2W7B7z/lpJaZx+ckciErk4JthY0EOcd3VP9/C oQ8/pv6E0BF6rA5YUrrstKnbRgQXdAOkXh1rJ4eiOGM08ZzzRZpnpAktrq0uyggPwsoZ 5opL2M3uikCC+3hvlURnj1BdI86iVojbSxOfNoWKqTKHmnRYuWuyoe0pM/tHlLHeiXxk xdow== X-Gm-Message-State: AN3rC/5oZSuCIK/D229tE7667wMPW2F48a92TiS50X7+/RZfaxzpaLAG JwhtZL0qalMU/g5g X-Received: by 10.157.80.142 with SMTP id b14mr12127229oth.151.1492999853420; Sun, 23 Apr 2017 19:10:53 -0700 (PDT) Received: from kaki.bld.corp.google.com ([100.100.184.96]) by smtp.gmail.com with ESMTPSA id z23sm4263640oia.26.2017.04.23.19.10.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Apr 2017 19:10:52 -0700 (PDT) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 3EE9D40081; Sun, 23 Apr 2017 20:10:52 -0600 (MDT) From: Simon Glass To: U-Boot Mailing List Date: Sun, 23 Apr 2017 20:10:44 -0600 Message-Id: <20170424021045.11320-2-sjg@chromium.org> X-Mailer: git-send-email 2.12.2.816.g2cccc81164-goog In-Reply-To: <20170424021045.11320-1-sjg@chromium.org> References: <20170424021045.11320-1-sjg@chromium.org> Cc: Heinrich Schuchardt , =?UTF-8?q?Andreas=20F=C3=A4rber?= Subject: [U-Boot] [PATCH v2 2/3] dm: core: Test uclass_first/next_device() on probe failure X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add some tests which check the behaviour of uclass_first_device() and uclass_next_device() when probing of a device fails. Signed-off-by: Simon Glass Signed-off-by: Simon Glass --- Changes in v2: None arch/sandbox/dts/test.dts | 19 +++++++++++++ include/dm/uclass-id.h | 1 + test/dm/test-fdt.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index fff175d1b7..e5cdbab965 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -418,6 +418,25 @@ }; }; }; + + probing { + compatible = "simple-bus"; + test1 { + compatible = "denx,u-boot-probe-test"; + }; + + test2 { + compatible = "denx,u-boot-probe-test"; + }; + + test3 { + compatible = "denx,u-boot-probe-test"; + }; + + test4 { + compatible = "denx,u-boot-probe-test"; + }; + }; }; #include "sandbox_pmic.dtsi" diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h index 1b635e4110..316304744e 100644 --- a/include/dm/uclass-id.h +++ b/include/dm/uclass-id.h @@ -18,6 +18,7 @@ enum uclass_id { UCLASS_TEST, UCLASS_TEST_FDT, UCLASS_TEST_BUS, + UCLASS_TEST_PROBE, UCLASS_SPI_EMUL, /* sandbox SPI device emulator */ UCLASS_I2C_EMUL, /* sandbox I2C device emulator */ UCLASS_PCI_EMUL, /* sandbox PCI device emulator */ diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c index 3048a7b890..1770b86fed 100644 --- a/test/dm/test-fdt.c +++ b/test/dm/test-fdt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +100,36 @@ UCLASS_DRIVER(testfdt) = { .flags = DM_UC_FLAG_SEQ_ALIAS, }; +struct dm_testprobe_pdata { + int probe_err; +}; + +static int testprobe_drv_probe(struct udevice *dev) +{ + struct dm_testprobe_pdata *pdata = dev_get_platdata(dev); + + return pdata->probe_err; +} + +static const struct udevice_id testprobe_ids[] = { + { .compatible = "denx,u-boot-probe-test" }, + { } +}; + +U_BOOT_DRIVER(testprobe_drv) = { + .name = "testprobe_drv", + .of_match = testprobe_ids, + .id = UCLASS_TEST_PROBE, + .probe = testprobe_drv_probe, + .platdata_auto_alloc_size = sizeof(struct dm_testprobe_pdata), +}; + +UCLASS_DRIVER(testprobe) = { + .name = "testprobe", + .id = UCLASS_TEST_PROBE, + .flags = DM_UC_FLAG_SEQ_ALIAS, +}; + int dm_check_devices(struct unit_test_state *uts, int num_devices) { struct udevice *dev; @@ -266,3 +297,44 @@ static int dm_test_fdt_offset(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_fdt_offset, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); + +/** + * Test various error conditions with uclass_first_device() and + * uclass_next_device() + */ +static int dm_test_first_next_device(struct unit_test_state *uts) +{ + struct dm_testprobe_pdata *pdata; + struct udevice *dev, *parent = NULL; + int count; + int ret; + + /* There should be 4 devices */ + for (ret = uclass_first_device(UCLASS_TEST_PROBE, &dev), count = 0; + dev; + ret = uclass_next_device(&dev)) { + count++; + parent = dev_get_parent(dev); + } + ut_assertok(ret); + ut_asserteq(4, count); + + /* Remove them and try again, with an error on the second one */ + ut_assertok(uclass_get_device(UCLASS_TEST_PROBE, 1, &dev)); + pdata = dev_get_platdata(dev); + pdata->probe_err = -ENOMEM; + device_remove(parent, DM_REMOVE_NORMAL); + ut_assertok(uclass_first_device(UCLASS_TEST_PROBE, &dev)); + ut_asserteq(-ENOMEM, uclass_next_device(&dev)); + ut_asserteq_ptr(dev, NULL); + + /* Now an error on the first one */ + ut_assertok(uclass_get_device(UCLASS_TEST_PROBE, 0, &dev)); + pdata = dev_get_platdata(dev); + pdata->probe_err = -ENOENT; + device_remove(parent, DM_REMOVE_NORMAL); + ut_asserteq(-ENOENT, uclass_first_device(UCLASS_TEST_PROBE, &dev)); + + return 0; +} +DM_TEST(dm_test_first_next_device, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);