From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793892005; b=O/CdZLnhCJb75t6dZMV9NgBZZGqPTojHUp5+AWCpXGCZbnyP0RFucl1kjIrt3Jhr9bz5 Uzs4sm2r4SpVLAycqM/WT38AmggKPtcZgT/acLCLL7bZi2QOzvSUHXNEWQItrZdeQuiBN an05sYyX0QoJPCkZMvb5xt10iCeO5gCus0Li3EZJN/jWkEq7x53GG4rRupJU2G5fvnRud iQ9l/+4qMki5DghWIx+zBCXasx2o9llzuCXLyT9gd4eh4sBTM7S9dmYBR+2ksB/QF9a9o mGhLRU3CoTGuWVhkdG+5o2OjXgFUhrxci3N6HiJquyBQUQouQdkKr33lGJ8hD7G470g== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793892005; h=DMARC-Filter:DKIM-Signature:Received:X-MC-Unique: X-Mimecast-MFC-AGG-ID:Received:Received:From:To:Cc:Subject:Date: Message-ID:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-Scanned-By; bh=3MW0rTCF9/lwATmo/NUcvwVLcZQiqcLUOk6UXMNMCRU=; b=OBFf3XW6nBFJYJSUUwXJegcPDaNoCPUGjy1rC56UgVFNWn9oPyjQA7u5uJ8Mqdy9pBj5 aAWfOZvFdXeaAAqDTz4+FPDNNxGSCV4yCkCre+SEUnKLMj8MYtFgtix8Yo4w22A5ySWq1 8wVqQ7u4n8l+ESNoULoiOldJqncldCufMsph1EBqXRIk1qcZ3ixLwoC8FlT5mur2KE6gQ W3dOMCQYRP8NfiCSZb7CZsbQWQLqrbqWhbgLcKcm6nZWoefLwBLXc0c6og8UaphA9Tgxc xRqsuhAdYjVSB5ioyIgLZte23UgxElH9JRmfNVWr8A+PuoDM94UF7fi3NxzHJa6kS5g== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=FdqCaqhT; arc=none smtp.remote-ip=170.10.133.124 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C624606A336 for ; Thu, 5 Nov 2026 15:20:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 8C624606A336 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, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=FdqCaqhT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793892003; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3MW0rTCF9/lwATmo/NUcvwVLcZQiqcLUOk6UXMNMCRU=; b=FdqCaqhTzuwj9xpJuSdf5oDT/hezxS+4b3kcYKRhZlW55w8nYSLBWatX7y54OjHvT+borL +eV1Z8ILIl5Q8ljuQEGJiGowfoUbw2EZRNkge9eGhXP/kWRyltggH1Z0xPqRqg2J2QEeSu zaoTm+4Z85bYie0dzUJMJ5vqf/yUi00= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-682-352oMjbtM5enz2hfH5JBSg-1; Thu, 05 Nov 2026 10:19:57 -0500 X-MC-Unique: 352oMjbtM5enz2hfH5JBSg-1 X-Mimecast-MFC-AGG-ID: 352oMjbtM5enz2hfH5JBSg_1793891993 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C85711955EAA; Thu, 5 Nov 2026 15:19:53 +0000 (UTC) Received: from poros-thinkpadp16vgen1.tpbc.com (unknown [10.44.32.42]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4D125195608C; Thu, 5 Nov 2026 15:19:49 +0000 (UTC) From: Petr Oros To: netdev@vger.kernel.org Cc: Petr Oros , Jonathan Corbet , Shuah Khan , Shuah Khan , Randy Dunlap , Jani Nikula , Vadim Fedorenko , Arkadiusz Kubalewski , Jiri Pirko , Ivan Vecera , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH net-next v2 10/14] selftests: dpll: add pin frequency test Date: Thu, 5 Nov 2026 16:18:48 +0100 Message-ID: <20261105151852.1844305-11-poros@redhat.com> In-Reply-To: <20261105151852.1844305-1-poros@redhat.com> References: <20261105151852.1844305-1-poros@redhat.com> X-Mailing-List: netdev@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 Add a test that picks a supported frequency other than the current one from the frequency-supported list of an input pin, sets it, reads it back and restores the original value. Both ends of every advertised range are candidates, so that a pin advertising a single range wider than one value still has one. It skips when the dpll tool lacks the frequency keyword of pin set, and the restore is deferred right after the original value is read so that an interrupted run restores it too. A pin that reports no frequency or advertises a single frequency only is a skip on a device provided by the user and a failure on the device the script created, whose pins advertise several. The driver may refuse the candidate. A driver without a frequency setter refuses every value with EOPNOTSUPP, and a driver with constraints of its own refuses values the advertised ranges allow, zl3073x for instance wants the frequencies of an output pair to divide each other. On a device provided by the user a refused set is a skip that names the reason the tool reported, which the setter keeps in DPLL_LAST_ERR, on the created device the simulator accepts every advertised value and the refusal is a failure. Once the set went through, a refused restore is a failure on either. Signed-off-by: Petr Oros --- .../drivers/net/dpll/dpll_features.sh | 64 +++++++++++++++++++ .../selftests/drivers/net/lib/sh/dpll_lib.sh | 5 ++ 2 files changed, 69 insertions(+) diff --git a/tools/testing/selftests/drivers/net/dpll/dpll_features.sh b/tools/testing/selftests/drivers/net/dpll/dpll_features.sh index 61003ba280d658..a39098fbf73135 100755 --- a/tools/testing/selftests/drivers/net/dpll/dpll_features.sh +++ b/tools/testing/selftests/drivers/net/dpll/dpll_features.sh @@ -17,6 +17,7 @@ source "$SCRIPTDIR/../lib/sh/dpll_lib.sh" ALL_TESTS=" test_pin_state_transitions test_pin_priority_get_set + test_pin_frequency_set_get " ############################################################################## @@ -165,6 +166,69 @@ test_pin_state_transitions() log_test "DPLL pin state transitions" } +test_pin_frequency_set_get() +{ + local before target after reason + + RET=0 + + if [ -z "$PIN_TUNE_ID" ]; then + dpll_log_test_skip_or_fail "DPLL pin frequency set/get" \ + "no spare input pin" + return + fi + if ! dpll_pin_set_supports frequency; then + log_test_skip "DPLL pin frequency set/get" \ + "dpll tool lacks pin set frequency" + return + fi + + before=$(dpll_pin_get_frequency "$PIN_TUNE_ID") + if [ -z "$before" ]; then + dpll_log_test_skip_or_fail "DPLL pin frequency set/get" \ + "frequency not reported" + return + fi + defer dpll_pin_set_frequency "$PIN_TUNE_ID" "$before" + + # Pick a supported frequency different from the current one. Both + # ends of every supported range are candidates, so a pin with a + # single range still has an alternative unless it is one value wide. + target=$(dpll_pin_json "$PIN_TUNE_ID" | \ + jq -r --argjson cur "$before" \ + '[.["frequency-supported"][]? | + .["frequency-min"], .["frequency-max"] | + numbers | select(. != $cur)][0] // empty') + if [ -z "$target" ]; then + dpll_log_test_skip_or_fail "DPLL pin frequency set/get" \ + "no alternative supported frequency" + return + fi + + # A driver without a frequency setter or with constraints of its own + # may refuse the candidate, a skip on a device the user provided, the + # simulator accepts every advertised value. + if ! dpll_pin_set_frequency "$PIN_TUNE_ID" "$target"; then + reason=${DPLL_LAST_ERR%%$'\n'*} + dpll_log_test_skip_or_fail "DPLL pin frequency set/get" \ + "cannot set frequency=$target${reason:+, $reason}" + return + fi + after=$(dpll_pin_get_frequency "$PIN_TUNE_ID") + if [ "$after" != "$target" ]; then + check_err 1 "frequency expected $target, got '$after'" + fi + + dpll_pin_set_frequency "$PIN_TUNE_ID" "$before" + check_err $? "cannot restore frequency" + after=$(dpll_pin_get_frequency "$PIN_TUNE_ID") + if [ "$after" != "$before" ]; then + check_err 1 "frequency not restored, got '$after'" + fi + + log_test "DPLL pin frequency set/get" +} + ############################################################################## cleanup() diff --git a/tools/testing/selftests/drivers/net/lib/sh/dpll_lib.sh b/tools/testing/selftests/drivers/net/lib/sh/dpll_lib.sh index 1c3e27eb09775d..9718d73c60b444 100644 --- a/tools/testing/selftests/drivers/net/lib/sh/dpll_lib.sh +++ b/tools/testing/selftests/drivers/net/lib/sh/dpll_lib.sh @@ -412,6 +412,11 @@ dpll_pin_set_prio() prio "$prio" 2>&1 >/dev/null) } +dpll_pin_set_frequency() +{ + DPLL_LAST_ERR=$(dpll pin set id "$1" frequency "$2" 2>&1 >/dev/null) +} + ############################################################################## # dpllsim configfs interface # -- 2.56.0