From nobody Thu Apr 2 15:38:58 2026 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 9F830387346 for ; Fri, 27 Mar 2026 19:32:35 +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=1774639963; cv=none; b=tC22IaZ0AHi4bCZeSBCHBe7yenNV1G6cWjSikANNug50tp6l4vPQweXl79NUNf601ccZPzAfU4GhZGVq/kVZMMF+p1kwxCMLO5eEKpEx7NJlcxUg/I1SkVoa5yh3XSIQvfp7vgQoabfFlORSWlcj7PZS+2vhh8c8upv0q5pVDGc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774639963; c=relaxed/simple; bh=gXVpbmRUrHdkNzhTN3R4KUVLypWKOnrMf6+semS15g4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WkKKhHMVldK69CqGKRfs1GfPGJiH1VaciV3WK4rHXa+bheOFQtgvhV1vGMQUTxjeHyAKR26pi6xA5xHeWyKt6zZRyF110U4U1ojfeQYqEKvZbn8eRJiRmXfQWb5agzMXzzwJSpn8Sf9fmPJcU8hpSqUjD8NJbzhGeR0Pkiv+euM= 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=LsYBvlTJ; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=t88oHAkl; 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="LsYBvlTJ"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="t88oHAkl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774639953; 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=3ZgY4uNXXpUewj2oPb0h5vSVFwi5Pty+WBlLPC/6hjM=; b=LsYBvlTJgeUbxGWH3GqGpX/3cRrZgy2KirR7fed6k/8LqPly92AtnSjwcX6FXO+XDBDx2S +6RE1TjhwX/P5FeqnY1xxitbpI+rHgfS7DbHH6tA0Eqs0z7Ll8RsgTxhlxTln1OKKZJpLV sEbjytcDEj1BEL3zOb8XmbXcCScQqDw= Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-586-1tg1GzFIMwKLJsIei3IPqQ-1; Fri, 27 Mar 2026 15:32:31 -0400 X-MC-Unique: 1tg1GzFIMwKLJsIei3IPqQ-1 X-Mimecast-MFC-AGG-ID: 1tg1GzFIMwKLJsIei3IPqQ_1774639951 Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-5093b92f327so54965781cf.1 for ; Fri, 27 Mar 2026 12:32:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774639951; x=1775244751; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3ZgY4uNXXpUewj2oPb0h5vSVFwi5Pty+WBlLPC/6hjM=; b=t88oHAklaGjR7LGaJINPTvG0/dmb/SRFE+vcS7XTNbSdEXZN7MXsBfAPPDHzkWbrBs +Fd3fIWsHyaYQkDiR0ZIXWyiT+n3d8VR1L3ntjuhcKcbGQjCyySgeupEUAlh0oeWzxq3 LHRs2iglLbclQQEmgZ8qfqBDE3eawQSkmtbPKjQuRhmjY4Q/0QkDFkznmK4Bp27Q4EMy g/IPAcUVejVwn4MSO56M0GSClx9B3AYsQAUbqnXaxt65NmMbrGujXmKq2yHSQw9O2ZsT KWRDTAgf2Ly8qQcOuGSPX6g839VuY1woZID6gGXpdOMqfv3j7ZU9jxmupBwOkJXZc/zV WJdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774639951; x=1775244751; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3ZgY4uNXXpUewj2oPb0h5vSVFwi5Pty+WBlLPC/6hjM=; b=eq9rVyqGdTqO4nU3qb7L1cL/QqPptF0pYE0vz1kEqaNl2UYadcpSUCg5HzIHdXo6eS /HHgUvugcb8ngW5RVtmmihDmC+KGQbGe2qqizgPjl+uLzv1961KXnsG3mt/yp5IzL7DW Nkf+zVOex4O/1NW1WdO7cgoE+7gIjTkGkjMNlKwIQhXj1lyJyfjBv2NS+xLtf2iQJHF5 f2vcKqXx7irDxZaiHfHPGmZgio/leSiAeajobIFynlcnk8S+ffJr3qblzTbdVL+jg/ek RAqYKpR3MWsjAW6a2yvhrwAOd0f+xeb6l8Rzu7eQf5A3Sf4+QEy0/9uRiR6CyWVkLVsN u4TA== X-Forwarded-Encrypted: i=1; AJvYcCW5ntWEJxx7hT+ViZTdW9jGmmaFA4F/rVrrVnNQC7rYppYiuDpggC3GoWnfNEu2NNb+unChoy3B59O+G1E=@vger.kernel.org X-Gm-Message-State: AOJu0Yxt0w8pYLpYYr23fmUifIQFSTGhyr1fquXiWXZW3IRBh6BNwD1u +hXOoHrphpcUW/viA3RXdwqVBJstkfuMXsnXJ762ubzBu8V/7zsKoRTkP/1zHyjrkL6p2ZoLCXR bMAIiZpTdXGQMfnP6DqtuAFf22V+qDxN207A6XAdnajQ3Xhk39LGuy9LiQp/yxL0TxA== X-Gm-Gg: ATEYQzw/EzaeifkdPG818JbriWibYcAeU+KRkvY+NQIcDNjSLUQwlqHxmowsUSyOteZ DiH3euoqZBh1hoKVHT+gNsytWCdqHpzv5jE+l4BikW2hhIXFEXStKVio32KB/hkdwyRnkg+L20B FRzuS5iRcrp309I6QUr+XgYdVULhEPB6ByHmR9mzSUhgvOTdhPE250HlW+65XPEvbyrmyfcz9mV eRQlELV2WIX46gHdulYJTvDkXgJfdS20upXh7Q6jFjzKPY0a7XdWQXbF+3g/8WjY/SXag9eGKq0 /bD0YEUF7ygQ8VkyylUHuGIzPPfpzCXNeRLUp31vT7hgMys7rE8hGWvJhCVCw66iNLjPRAIqeK9 xwSPPxaP0R99PVpl8BlTe3Fv2gzh31jWCM1byWHOPZxeAj58IMTED8x4+kD2i X-Received: by 2002:a05:622a:a13:b0:509:609:b2e5 with SMTP id d75a77b69052e-50ba3850a4dmr53544371cf.24.1774639950775; Fri, 27 Mar 2026 12:32:30 -0700 (PDT) X-Received: by 2002:a05:622a:a13:b0:509:609:b2e5 with SMTP id d75a77b69052e-50ba3850a4dmr53543941cf.24.1774639950336; Fri, 27 Mar 2026 12:32:30 -0700 (PDT) Received: from [192.168.1.3] (c-73-183-52-120.hsd1.pa.comcast.net. [73.183.52.120]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-50bb2c678e9sm2037551cf.6.2026.03.27.12.32.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2026 12:32:29 -0700 (PDT) From: Brian Masney Date: Fri, 27 Mar 2026 15:32:01 -0400 Subject: [PATCH v8 6/8] clk: divider: enable optional support for v2 rate negotiation 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: <20260327-clk-scaling-v8-6-86cd0aba3c5f@redhat.com> References: <20260327-clk-scaling-v8-0-86cd0aba3c5f@redhat.com> In-Reply-To: <20260327-clk-scaling-v8-0-86cd0aba3c5f@redhat.com> To: Michael Turquette , Stephen Boyd , Maxime Ripard , Alberto Ruiz , Brendan Higgins , David Gow , Rae Moar Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, Brian Masney X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1850; i=bmasney@redhat.com; s=20250903; h=from:subject:message-id; bh=gXVpbmRUrHdkNzhTN3R4KUVLypWKOnrMf6+semS15g4=; b=owGbwMvMwCW2/dJd9di6A+2Mp9WSGDKP3XaoFFYW9lDr0J64RWUVb4tm48O/K9dllm+aV51l6 iI/zaGwo5SFQYyLQVZMkWVJrlFBROoq23t3NFlg5rAygQxh4OIUgIn0ZzD8lY1bbiRvx1pQfYGl ZwVrktyKEO5XbMop97eHZTvetU25wsjwor1gZ5qy8PaHurndx3xYXb88lXU4XD3fMO/0nWP7p95 mBwA= X-Developer-Key: i=bmasney@redhat.com; a=openpgp; fpr=A46D32705865AA3DDEDC2904B7D2DD275D7EC087 If the v2 rate negotiation logic is enabled in this portion of the clk subtree, then use the Lowest Common Multiple (LCM) of all of the child rates to determine what the parent rate should be. Make this change for clk_divider_bestdiv (used by clk_divider_determine_rate), and divider_ro_determine_rate. Note that the v2 rate negotiation logic is disabled by default, unless a clk in this portion of the subtree has the flag CLK_V2_RATE_NEGOTIATION. This change was tested on a Thinkpad x13s laptop. Some clks used this new code, however this needs to be tested on more real systems. Link: https://lore.kernel.org/linux-clk/aUSWU7UymULCXOeF@redhat.com/ Link: https://lpc.events/event/19/contributions/2152/ Signed-off-by: Brian Masney --- drivers/clk/clk-divider.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 45e7ebde4a8b4d6572aa9d867a6f12f6caf8aae4..713f3c0baccb13bfb32581a5517= da21720b34961 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -315,6 +315,21 @@ static int clk_divider_bestdiv(struct clk_hw *hw, stru= ct clk_hw *parent, return bestdiv; } =20 + if (parent && clk_has_v2_rate_negotiation(parent->core)) { + unsigned long lcm_rate; + + lcm_rate =3D clk_hw_get_children_lcm(parent, hw, rate); + if (lcm_rate > 0) { + /* Validate and use what the parent can actually provide */ + lcm_rate =3D clk_hw_round_rate(parent, lcm_rate); + *best_parent_rate =3D lcm_rate; + bestdiv =3D _div_round(table, lcm_rate, rate, flags); + bestdiv =3D bestdiv =3D=3D 0 ? 1 : bestdiv; + bestdiv =3D bestdiv > maxdiv ? maxdiv : bestdiv; + return bestdiv; + } + } + /* * The maximum divider we can use without overflowing * unsigned long in rate * i below --=20 2.53.0