From nobody Tue Dec 16 22:28:06 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 3FE2B224AE9 for ; Wed, 28 May 2025 23:17:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748474253; cv=none; b=b6iZORt2m4jUtF5EkUefQEiqdeoms3mv9E/2dux1RzZymnnMrDy0kDu0zGlCZlqiJL9kkI1J68AOhOW8gio3jeE6mYTGiq5+R08L68s2RvnQ1OxIuniZ97WRkUYHJTnvFSkpce4s2sNmkQCuONLgyKbjeJM90HMzfdvNT8P1Ko8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748474253; c=relaxed/simple; bh=O2dam44l6BAOHzopP51WKdXl85jM4U2hjqdRMXfjkcI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RSdYzanBq2zKvL6fWeEC6F9o0c9vMmjbZzgb31uUI0XE7++DRNY6XmCSY2YCmD6VyRDsd/Z5FMC700jlzoTgi0SJQKFqFQCVqPh+zv5Q/ZDfwyxDZaHdA0hIqHpFMhMgggnupxTzkfgVS8eUxXvMJhX83bxEwqrFPW1eb0b5mSY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bfDJIIgs; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bfDJIIgs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748474250; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CCt5MrL1YxXPreac2l4d2M4RaAJoVl1H1kh5YWArmls=; b=bfDJIIgsD82W9B8u54hYmvmGfGF87TKru6QE1otTupdZh1toXZC6tmKN+KXpB/9OqW0jnR Ddw35iC3Q4VgSboaQIGWc4Dj4VhEaIvH21Qy1+dE1C3erAIkyyTUaMB4WCjPyD/PgNOiRI XI0mlWTNhN8m8LajL+UAozMDiSxCUrc= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-638-CB7FTGUrNeaquJBqJHtyRw-1; Wed, 28 May 2025 19:17:29 -0400 X-MC-Unique: CB7FTGUrNeaquJBqJHtyRw-1 X-Mimecast-MFC-AGG-ID: CB7FTGUrNeaquJBqJHtyRw_1748474249 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-7c7c30d8986so82260785a.2 for ; Wed, 28 May 2025 16:17:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748474248; x=1749079048; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CCt5MrL1YxXPreac2l4d2M4RaAJoVl1H1kh5YWArmls=; b=Re8ivX+ELf3wb57uaVSiIPicFYwUaxW1hqouByMFVTV9CEc3qJbgVVd8+TCQJjJbGy laMimxv+h0n8orxceAIaVNcFrZ2wuG4KjaBiQefYuCi93V6q459CQtGdkgEHWAMJDZj6 fzoLx1Wbw3573BZV6/nEKMk0MUT94/UVL20viyImjvjPxsJCMvS2F84PJ/Fk1/48MGCD 5w3QtHw19AbNRTVOZPaHaYf7fOtNlt3x24n/ZHejDJKN8y3wf//Ua1oENwkaDV2fh5hq i+Pq2CthhlrExY9m2FVZ1UVQ55JbX9GhncZ/ksZ4m0HRO68dpeBgzrU0UINupMLCJyt2 4Xvw== X-Forwarded-Encrypted: i=1; AJvYcCXoTUrbHNlA5rbW8v/iRBxEpBIOxz9rw3S9SK7uiimhcu5DYnaqmcTLcLto/hS6jte4blqdyc1PvYNB7KQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzhZBBm++mu1Adm9QD9+dDKe3JYWCoxwdPXQFItYiYN5t7RSfW2 6NmNtw3ytPqVhbB56gXHy2lCanLY9+SvbxOmYk4VjItFu4UGgfgqF1NmJ3mZf5/3UgO8LR2O0CZ adIihyUOjeCaZp+1giF7Ql59SRJaWTcmq2a+9HVfJ1nNEq56PyPBf2eCS/8DiYgS5IOZX8JXwZf CUWVp4qt/3eiU8lM5YQAbOlkwjgkp2e0beP1sX1mNaK34dHdcLnnU= X-Gm-Gg: ASbGncu5QhR670GdXNxN+mFJLUeKGa40O7V7X4ThdzlIILtQhvCEBAoIGbtZ0rVYr84 RcEl9fJd2ZFaBEdxvc26SWQoam820ZFN056Vt/b9Fzf8TSmQhqk4rIO0pFsaXFfqOSkjCqXdO4w hgv0ry2TeMmaHCLQvgL9Iefug4gLXUmpslTcItP+bpqGlze2D7SYC+KydPsxhNuFKzA25E77s57 3RbP3JOyb++7jp1+fV6RnHRVPM1+2LUMDsGbMoCuR479HzJDG1mS3kn5A7zMcW8oOFj3PfIodGy dZb1bSUi2yVSmM2NNLdmLClscIWmKTz9kHPv7mW/qirZayPCbg== X-Received: by 2002:a05:620a:28c2:b0:7ca:f039:d471 with SMTP id af79cd13be357-7ceecc34b73mr2827332285a.52.1748474247876; Wed, 28 May 2025 16:17:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHn6kfO05Z2NeOQM/9HMFvnDvkHIfesKF61ofgfRilVt2IW9V0DiL9DegitNVT6zkxVcIHiJQ== X-Received: by 2002:a05:620a:28c2:b0:7ca:f039:d471 with SMTP id af79cd13be357-7ceecc34b73mr2827328385a.52.1748474247517; Wed, 28 May 2025 16:17:27 -0700 (PDT) Received: from [192.168.1.2] (c-73-183-52-120.hsd1.pa.comcast.net. [73.183.52.120]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7d09a0f984fsm13437985a.43.2025.05.28.16.17.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 16:17:26 -0700 (PDT) From: Brian Masney Date: Wed, 28 May 2025 19:16:54 -0400 Subject: [PATCH v2 08/10] clk: test: introduce helper to create a mock mux Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250528-clk-wip-v2-v2-8-0d2c2f220442@redhat.com> References: <20250528-clk-wip-v2-v2-0-0d2c2f220442@redhat.com> In-Reply-To: <20250528-clk-wip-v2-v2-0-0d2c2f220442@redhat.com> To: Stephen Boyd , Maxime Ripard Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Arnd Bergmann , Thomas Gleixner , Michael Turquette , Alberto Ruiz , Brian Masney X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748474226; l=7421; i=bmasney@redhat.com; s=20250528; h=from:subject:message-id; bh=O2dam44l6BAOHzopP51WKdXl85jM4U2hjqdRMXfjkcI=; b=CUG6QvAnQNxhMFGNanvklQpYfOpElHasZJtBONqjWEZxiH/axBCu3zQ47b8GAP8rkCpFIeT54 H9mOGaN9E8HBy4OUE49fmxWDg0B4wtYrxqJFgHF+pcc8Z0VbjlYXzVe X-Developer-Key: i=bmasney@redhat.com; a=ed25519; pk=x20f2BQYftANnik+wvlm4HqLqAlNs/npfVcbhHPOK2U= Introduce a helper to create a mock mux to reduce code duplication. This also changes it so that the relevant clk_hws are registered with the kunit framework. Signed-off-by: Brian Masney --- drivers/clk/clk_test.c | 141 ++++++++++++++++++---------------------------= ---- 1 file changed, 52 insertions(+), 89 deletions(-) diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c index 1440eb3c41def8c549f92c0e95b2a472f3bdb4a7..147935975969f8da4a9365c0fac= 6ffe37e310933 100644 --- a/drivers/clk/clk_test.c +++ b/drivers/clk/clk_test.c @@ -538,45 +538,64 @@ static struct kunit_suite clk_uncached_test_suite =3D= { .test_cases =3D clk_uncached_test_cases, }; =20 -static int -clk_multiple_parents_mux_test_init(struct kunit *test) -{ - struct clk_multiple_parent_ctx *ctx; - const char *parents[2] =3D { "parent-0", "parent-1"}; +static int clk_init_multiple_parent_ctx(struct kunit *test, + struct clk_multiple_parent_ctx *ctx, + const char *parent0_name, + unsigned long parent0_rate, + const char *parent1_name, + unsigned long parent1_rate, + const char *mux_name, int mux_flags, + const struct clk_ops *mux_ops) +{ + const struct clk_hw *parents[2]; int ret; =20 - ctx =3D kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); - if (!ctx) - return -ENOMEM; - test->priv =3D ctx; - - ctx->parents_ctx[0].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-0", + ctx->parents_ctx[0].hw.init =3D CLK_HW_INIT_NO_PARENT(parent0_name, &clk_dummy_rate_ops, 0); - ctx->parents_ctx[0].rate =3D DUMMY_CLOCK_RATE_1; + ctx->parents_ctx[0].rate =3D parent0_rate; ret =3D clk_hw_register_kunit(test, NULL, &ctx->parents_ctx[0].hw); if (ret) return ret; =20 - ctx->parents_ctx[1].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-1", + ctx->parents_ctx[1].hw.init =3D CLK_HW_INIT_NO_PARENT(parent1_name, &clk_dummy_rate_ops, 0); - ctx->parents_ctx[1].rate =3D DUMMY_CLOCK_RATE_2; + ctx->parents_ctx[1].rate =3D parent1_rate; ret =3D clk_hw_register_kunit(test, NULL, &ctx->parents_ctx[1].hw); if (ret) return ret; =20 - ctx->current_parent =3D 0; - ctx->hw.init =3D CLK_HW_INIT_PARENTS("test-mux", parents, - &clk_multiple_parents_mux_ops, - CLK_SET_RATE_PARENT); + parents[0] =3D &ctx->parents_ctx[0].hw; + parents[1] =3D &ctx->parents_ctx[1].hw; + ctx->hw.init =3D CLK_HW_INIT_PARENTS_HW(mux_name, parents, + mux_ops, mux_flags); ret =3D clk_hw_register_kunit(test, NULL, &ctx->hw); if (ret) return ret; =20 + ctx->current_parent =3D 0; + return 0; } =20 +static int +clk_multiple_parents_mux_test_init(struct kunit *test) +{ + struct clk_multiple_parent_ctx *ctx; + + ctx =3D kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + test->priv =3D ctx; + + return clk_init_multiple_parent_ctx(test, ctx, + "parent-0", DUMMY_CLOCK_RATE_1, + "parent-1", DUMMY_CLOCK_RATE_2, + "test-mux", CLK_SET_RATE_PARENT, + &clk_multiple_parents_mux_ops); +} + /* * Test that for a clock with multiple parents, clk_get_parent() * actually returns the current one. @@ -2536,7 +2555,6 @@ static int clk_leaf_mux_set_rate_parent_test_init(struct kunit *test) { struct clk_leaf_mux_ctx *ctx; - const char *top_parents[2] =3D { "parent-0", "parent-1" }; int ret; =20 ctx =3D kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); @@ -2544,27 +2562,11 @@ clk_leaf_mux_set_rate_parent_test_init(struct kunit= *test) return -ENOMEM; test->priv =3D ctx; =20 - ctx->mux_ctx.parents_ctx[0].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-0", - &clk_dummy_rate_ops, - 0); - ctx->mux_ctx.parents_ctx[0].rate =3D DUMMY_CLOCK_RATE_1; - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw); - if (ret) - return ret; - - ctx->mux_ctx.parents_ctx[1].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-1", - &clk_dummy_rate_ops, - 0); - ctx->mux_ctx.parents_ctx[1].rate =3D DUMMY_CLOCK_RATE_2; - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw); - if (ret) - return ret; - - ctx->mux_ctx.current_parent =3D 0; - ctx->mux_ctx.hw.init =3D CLK_HW_INIT_PARENTS("test-mux", top_parents, - &clk_multiple_parents_mux_ops, - 0); - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.hw); + ret =3D clk_init_multiple_parent_ctx(test, &ctx->mux_ctx, + "parent-0", DUMMY_CLOCK_RATE_1, + "parent-1", DUMMY_CLOCK_RATE_2, + "test-mux", 0, + &clk_multiple_parents_mux_ops); if (ret) return ret; =20 @@ -2752,7 +2754,6 @@ static int clk_mux_notifier_callback(struct notifier_= block *nb, static int clk_mux_notifier_test_init(struct kunit *test) { struct clk_mux_notifier_ctx *ctx; - const char *top_parents[2] =3D { "parent-0", "parent-1" }; int ret; =20 ctx =3D kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); @@ -2763,27 +2764,11 @@ static int clk_mux_notifier_test_init(struct kunit = *test) init_waitqueue_head(&ctx->pre_rate_change.wq); init_waitqueue_head(&ctx->post_rate_change.wq); =20 - ctx->mux_ctx.parents_ctx[0].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-0", - &clk_dummy_rate_ops, - 0); - ctx->mux_ctx.parents_ctx[0].rate =3D DUMMY_CLOCK_RATE_1; - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw); - if (ret) - return ret; - - ctx->mux_ctx.parents_ctx[1].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-1", - &clk_dummy_rate_ops, - 0); - ctx->mux_ctx.parents_ctx[1].rate =3D DUMMY_CLOCK_RATE_2; - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw); - if (ret) - return ret; - - ctx->mux_ctx.current_parent =3D 0; - ctx->mux_ctx.hw.init =3D CLK_HW_INIT_PARENTS("test-mux", top_parents, - &clk_multiple_parents_mux_ops, - 0); - ret =3D clk_hw_register(NULL, &ctx->mux_ctx.hw); + ret =3D clk_init_multiple_parent_ctx(test, &ctx->mux_ctx, + "parent-0", DUMMY_CLOCK_RATE_1, + "parent-1", DUMMY_CLOCK_RATE_2, + "test-mux", 0, + &clk_multiple_parents_mux_ops); if (ret) return ret; =20 @@ -2866,39 +2851,17 @@ static int clk_mux_no_reparent_test_init(struct kunit *test) { struct clk_multiple_parent_ctx *ctx; - const char *parents[2] =3D { "parent-0", "parent-1"}; - int ret; =20 ctx =3D kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; test->priv =3D ctx; =20 - ctx->parents_ctx[0].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-0", - &clk_dummy_rate_ops, - 0); - ctx->parents_ctx[0].rate =3D DUMMY_CLOCK_RATE_1; - ret =3D clk_hw_register(NULL, &ctx->parents_ctx[0].hw); - if (ret) - return ret; - - ctx->parents_ctx[1].hw.init =3D CLK_HW_INIT_NO_PARENT("parent-1", - &clk_dummy_rate_ops, - 0); - ctx->parents_ctx[1].rate =3D DUMMY_CLOCK_RATE_2; - ret =3D clk_hw_register(NULL, &ctx->parents_ctx[1].hw); - if (ret) - return ret; - - ctx->current_parent =3D 0; - ctx->hw.init =3D CLK_HW_INIT_PARENTS("test-mux", parents, - &clk_multiple_parents_no_reparent_mux_ops, - 0); - ret =3D clk_hw_register(NULL, &ctx->hw); - if (ret) - return ret; - - return 0; + return clk_init_multiple_parent_ctx(test, ctx, + "parent-0", DUMMY_CLOCK_RATE_1, + "parent-1", DUMMY_CLOCK_RATE_2, + "test-mux", 0, + &clk_multiple_parents_no_reparent_mux_ops); } =20 static void --=20 2.49.0