Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp2610051lqt; Mon, 22 Apr 2024 16:35:36 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUUkKEXa11XoA4DClYq2kLrqpX5MjSsNdEGg4xU5a4jpkqRzhGgAlhn5d5rBAXen4kBMr8xBimcaB7eIs6juqpPshuGqMrYNYk5bBQbcw== X-Google-Smtp-Source: AGHT+IH3s4mFqibOFKfImv2xoPAs2K8FrirKmTi4+O1MpeH71G+o/OH7rrVbP+A569Xe3znbtKLd X-Received: by 2002:a05:6e02:20c1:b0:36b:23d8:81f2 with SMTP id 1-20020a056e0220c100b0036b23d881f2mr15797754ilq.31.1713828935768; Mon, 22 Apr 2024 16:35:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713828935; cv=pass; d=google.com; s=arc-20160816; b=yzVuthCxObqwvqTXd2E1+ccrvxO/0MtFj21lFjN13R1uEOyN+AJBydIpEDmd9J75MX SQHZJi5QrVkpCYce5XDe3CBYT96sRan0doMsllOaZm6M59IhmVvsE/Tr5JKvfy0XNstn 0VDAXN22y+8dh3as/qCtcpwHOqkbUs1jrQEUtbT4JRK/ktTbeuD/CnesTc2y8GI66BnL Di19S1z4P6NwU6ISOCwwSIdOAKU4ntaHY+EzOpYT0gTNqmmLXgoYMeVf7/awL944W4pG tNcPkyiHvzuoNRMDtRnTwDq9Pq4sa15oNtASS/5IlruOshuKAswltpEqhI4MstSBEaGc SLZQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=UiUe5oo20mDStg4viVDYnaDUg3zkSuYuVrH9TdOxyXg=; fh=V3q660E7jJuFePuHUOWKHHu4ulEp8NjGRgFgZbQSOmw=; b=fsSPUsPQIcz+fx+jMkkudNMIbkir0btQqGSeaKjKkDMARmLEMfGeMJZoH8NE7s1ZIw JD8Q6T2+gPQKOX6PPxqHzY77PrNK0o1zOOt7O8pZUmVHqL1xy+vC2dz4vTQiOMVrdfow ighynL1vdQNNUNmW4Iu2RTpl7PVp8T/q5djl/w3IeOG4JeK41SHAqBPL6EJi4BwM7DHT DchdYi8VcG9psaJ817Xu7mNe8jFB/LUA+FYnPblEt6uCtZ4+gEvh12GiLzyQaJv9+hMZ OuILzZQARPjY8gNHJNDsHEpqrZFvemqJm2/q9WThtBG1QgJw2fdS6Aa+X+67VLUwOx0r F+2g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ZTeFDZvf; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-154193-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-154193-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id r66-20020a632b45000000b0060093e8e728si2051373pgr.807.2024.04.22.16.35.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 16:35:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-154193-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ZTeFDZvf; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-154193-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-154193-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 05EC2B2451F for ; Mon, 22 Apr 2024 23:25:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 997E15644F; Mon, 22 Apr 2024 23:24:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZTeFDZvf" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8100347A73; Mon, 22 Apr 2024 23:24:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713828251; cv=none; b=Mb7w9H/syD5HbUeS13E7LMnrQzCZ7V71ju641TIt54QnEvHk2p5rV27Xl/6RxS+QshgwdHPKZrR9il0iwqxmaFDF8cujV4eu/KeDfQyiOCUVq0Np3nEB6ONxihxnOEyh5UrGQy9cPgAcmv9n5mh5raGYqSfQ0dznoCXarUc2JPI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713828251; c=relaxed/simple; bh=8RSfjRyKv/UYDAoU7qYhRbfDiyuBXqRO9iOjgSfZXHQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a14mMLf3VO9acv5hPLgR4wqOMcDyUr/lIJFXDH6YNttMdNo1fKKz+Vp3Edouu+ZctG8DihuiuWcZnmKYi1tFNiRnp9rUKBG/uxVfu/ipwS22wdoOHm6TTRsDtVf5bI/278cyd8+IW2T696NQ32Qb3t7mPo4HyMhSTZiay3Vdkr8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZTeFDZvf; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20E27C32786; Mon, 22 Apr 2024 23:24:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713828251; bh=8RSfjRyKv/UYDAoU7qYhRbfDiyuBXqRO9iOjgSfZXHQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZTeFDZvfei4VcOcKnTCxfdrpBXoKZRhHJuWC4XhGZFw+HVv1dJYIReJM8apTDPd5e 404vyhVSohIqBgPt/nh4FSV2QzNUG1MnmYON0mkKUEY6bifz/tOQRJRJLwu6NESwxq TFfJAsjyQ0iPAsYTa0hAIRtn4qtBKpZ4HRqg26iQlWos7y2iKUvHB43HFxqa5IgZI+ 4ttMGXIwATHc2RFjfIfPGwDchnV7UyVVtFZiYEHsc/7L8Uy2rSiNH5udxxsKt3fPTV wqQ/WDnIZtePQZGEKrLCMlTtYF6bvzLLWqEY5Rb1vEFDDtKE1mJoaEym55XDPCxnbF GiIbDcz+al65w== From: Stephen Boyd To: Michael Turquette , Stephen Boyd Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, patches@lists.linux.dev, kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, devicetree@vger.kernel.org, Brendan Higgins , David Gow , Rae Moar , Greg Kroah-Hartman , "Rafael J . Wysocki" , Rob Herring , Saravana Kannan , Daniel Latypov , Christian Marangi , Krzysztof Kozlowski , Conor Dooley , Maxime Ripard Subject: [PATCH v4 04/10] of: Add a KUnit test for overlays and test managed APIs Date: Mon, 22 Apr 2024 16:23:57 -0700 Message-ID: <20240422232404.213174-5-sboyd@kernel.org> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240422232404.213174-1-sboyd@kernel.org> References: <20240422232404.213174-1-sboyd@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Test the KUnit test managed overlay APIs. Confirm that platform devices are created and destroyed properly. This provides us confidence that the test managed APIs work correctly and can be relied upon to provide tests with fake platform devices and device nodes via overlays compiled into the kernel image. Cc: Rob Herring Cc: Saravana Kannan Cc: Daniel Latypov Cc: Brendan Higgins Cc: David Gow Cc: Rae Moar Signed-off-by: Stephen Boyd --- drivers/of/.kunitconfig | 1 + drivers/of/Kconfig | 10 +++ drivers/of/Makefile | 1 + drivers/of/kunit_overlay_test.dtso | 9 +++ drivers/of/overlay_test.c | 115 +++++++++++++++++++++++++++++ 5 files changed, 136 insertions(+) create mode 100644 drivers/of/kunit_overlay_test.dtso create mode 100644 drivers/of/overlay_test.c diff --git a/drivers/of/.kunitconfig b/drivers/of/.kunitconfig index 5a8fee11978c..4c53d2c7a275 100644 --- a/drivers/of/.kunitconfig +++ b/drivers/of/.kunitconfig @@ -1,3 +1,4 @@ CONFIG_KUNIT=y CONFIG_OF=y CONFIG_OF_KUNIT_TEST=y +CONFIG_OF_OVERLAY_KUNIT_TEST=y diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dd726c7056bf..0e2d608c3e20 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -107,6 +107,16 @@ config OF_OVERLAY While this option is selected automatically when needed, you can enable it manually to improve device tree unit test coverage. +config OF_OVERLAY_KUNIT_TEST + tristate "Device Tree overlay KUnit tests" if !KUNIT_ALL_TESTS + depends on KUNIT + default KUNIT_ALL_TESTS + select OF_OVERLAY + help + This option builds KUnit unit tests for the device tree overlay code. + + If unsure, say N here, but this option is safe to enable. + config OF_NUMA bool diff --git a/drivers/of/Makefile b/drivers/of/Makefile index 0dfd05079313..88588ffb9de6 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -21,5 +21,6 @@ endif obj-$(CONFIG_KUNIT) += of_kunit.o obj-$(CONFIG_OF_KUNIT_TEST) += of_test.o +obj-$(CONFIG_OF_OVERLAY_KUNIT_TEST) += overlay_test.o kunit_overlay_test.dtbo.o obj-$(CONFIG_OF_UNITTEST) += unittest-data/ diff --git a/drivers/of/kunit_overlay_test.dtso b/drivers/of/kunit_overlay_test.dtso new file mode 100644 index 000000000000..85f20b4b4c16 --- /dev/null +++ b/drivers/of/kunit_overlay_test.dtso @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + kunit-test { + compatible = "test,empty"; + }; +}; diff --git a/drivers/of/overlay_test.c b/drivers/of/overlay_test.c new file mode 100644 index 000000000000..223e5a5c23c5 --- /dev/null +++ b/drivers/of/overlay_test.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * KUnit tests for device tree overlays + */ +#include +#include +#include +#include +#include + +#include +#include + +static const char * const kunit_node_name = "kunit-test"; +static const char * const kunit_compatible = "test,empty"; + +/* Test that of_overlay_apply_kunit() adds a node to the live tree */ +static void of_overlay_apply_kunit_apply(struct kunit *test) +{ + struct device_node *np; + + KUNIT_ASSERT_EQ(test, 0, + of_overlay_apply_kunit(test, kunit_overlay_test)); + + np = of_find_node_by_name(NULL, kunit_node_name); + KUNIT_EXPECT_NOT_ERR_OR_NULL(test, np); + of_node_put(np); +} + +/* + * Test that of_overlay_apply_kunit() creates platform devices with the + * expected device_node + */ +static void of_overlay_apply_kunit_platform_device(struct kunit *test) +{ + struct platform_device *pdev; + struct device_node *np; + + KUNIT_ASSERT_EQ(test, 0, + of_overlay_apply_kunit(test, kunit_overlay_test)); + + np = of_find_node_by_name(NULL, kunit_node_name); + of_node_put_kunit(test, np); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np); + + pdev = of_find_device_by_node(np); + KUNIT_EXPECT_NOT_ERR_OR_NULL(test, pdev); + put_device(&pdev->dev); +} + +static int of_overlay_bus_match_compatible(struct device *dev, const void *data) +{ + return of_device_is_compatible(dev->of_node, data); +} + +/* Test that of_overlay_apply_kunit() cleans up after the test is finished */ +static void of_overlay_apply_kunit_cleanup(struct kunit *test) +{ + struct kunit fake; + struct platform_device *pdev; + struct device *dev; + struct device_node *np; + + if (!IS_ENABLED(CONFIG_OF_OVERLAY)) + kunit_skip(test, "requires CONFIG_OF_OVERLAY"); + if (!IS_ENABLED(CONFIG_OF_EARLY_FLATTREE)) + kunit_skip(test, "requires CONFIG_OF_EARLY_FLATTREE for root node"); + + kunit_init_test(&fake, "fake test", NULL); + KUNIT_ASSERT_EQ(test, fake.status, KUNIT_SUCCESS); + + KUNIT_ASSERT_EQ(test, 0, + of_overlay_apply_kunit(&fake, kunit_overlay_test)); + + np = of_find_node_by_name(NULL, kunit_node_name); + of_node_put(np); /* Not derefing 'np' after this */ + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np); + + pdev = of_find_device_by_node(np); + put_device(&pdev->dev); /* Not derefing 'pdev' after this */ + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev); + + /* Remove overlay */ + kunit_cleanup(&fake); + + /* The node and device should be removed */ + np = of_find_node_by_name(NULL, kunit_node_name); + KUNIT_EXPECT_PTR_EQ(test, NULL, np); + of_node_put(np); + + dev = bus_find_device(&platform_bus_type, NULL, kunit_compatible, + of_overlay_bus_match_compatible); + KUNIT_EXPECT_PTR_EQ(test, NULL, dev); + put_device(dev); +} + +static struct kunit_case of_overlay_apply_kunit_test_cases[] = { + KUNIT_CASE(of_overlay_apply_kunit_apply), + KUNIT_CASE(of_overlay_apply_kunit_platform_device), + KUNIT_CASE(of_overlay_apply_kunit_cleanup), + {} +}; + +/* + * Test suite for test managed device tree overlays. + */ +static struct kunit_suite of_overlay_apply_kunit_suite = { + .name = "of_overlay_apply_kunit", + .test_cases = of_overlay_apply_kunit_test_cases, +}; + +kunit_test_suites( + &of_overlay_apply_kunit_suite, +); +MODULE_LICENSE("GPL"); -- https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git/ https://git.kernel.org/pub/scm/linux/kernel/git/sboyd/spmi.git