From nobody Tue Apr 7 11:25:04 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 91AC03C8708 for ; Fri, 13 Mar 2026 16:44:15 +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=1773420259; cv=none; b=NHM0M8bOlM1TO1z1iJdMVOJOzjMrSWgtLOcX6ek+a4eL0JZQ98b4pkvg+KhIJKik7Yavsgb6VwBJQ680HzkHItd8R+H//dLomr1ApQ2GcrIgymBrmjI5sx6nc6JlFEKdlKZATR3LhTnYvpE6FqBaLMWWeWiJIzF9SG3nokJPVYE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773420259; c=relaxed/simple; bh=zKXv8T0pDXUYDds5ohnk6vvqdTfTZGnDkfT+a9khpbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EGhigotarFUyH23sqaHDe5vSkCOVQjOu9e3wMRy0sC7m5LmbRhuUVhjPwTjMAxiEC+JcCok7aq/jUn5YebmFKLj6/+0PIn5X3BWHAUBIufy+0gfTzVDFG74Ih30MSeltCGSdi9i6k/KaWNNiJJXATPU6RDNrZ0oHAwWtRH39mbw= 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=Nl7lAPM4; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=lO1p67eE; 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="Nl7lAPM4"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="lO1p67eE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773420254; 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=7o9nICmnF+pv2eZHHgydcv1nErNi/k8Gi9G8qTuu2DQ=; b=Nl7lAPM4Mv4GQ1dqEwGaM2QnTPP2TgeqwPlKR/63Yq5if/QfDsbr5RUyuZXKTSXdXwpf2F 3IEcX8ZHdAm0GkHMqhGYlJwEm9qPLx4mi70/ctYuw3rCKu4HRIozqcEpKLVuWfh/dTSPGe jMryKtBgEUkOBhGMT6rpUfBF0bEkz3E= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-344-lDpUuacNNMOQizB-9z7iCw-1; Fri, 13 Mar 2026 12:44:12 -0400 X-MC-Unique: lDpUuacNNMOQizB-9z7iCw-1 X-Mimecast-MFC-AGG-ID: lDpUuacNNMOQizB-9z7iCw_1773420252 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8cd773dd409so357043785a.1 for ; Fri, 13 Mar 2026 09:44:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773420252; x=1774025052; 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=7o9nICmnF+pv2eZHHgydcv1nErNi/k8Gi9G8qTuu2DQ=; b=lO1p67eEiXOhvVTSVO4/8Z7XOaRqIiGmvrs+x6j9sc1K0pg1evSS+cGXTSndiJ0djO njug1c6LLH1Sv2wfoGkj4kDBQqVIyu8zzrBePeDcn8tErx0ulGpeqzbmh3vO+sHrRQOX fBhCV7/B1BeteVvmkJpqGmwzRW3csw0kZwkFG7CXMuOdvzPopZLOdLbXvEGg/fJRaaAP /jf2qkXfdPtGpsgQqe+nyNVY+YnWJNPmqZXtUG3LXtzS+QysTA6vohQEGnrfTZzHF7TZ uDdcMN77VAVOLw3hNgpFWkEsDhwV+mGBZdKWcC/der2UNz6Go39DSb9HCeqBTc5VyFb+ 8obA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773420252; x=1774025052; 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=7o9nICmnF+pv2eZHHgydcv1nErNi/k8Gi9G8qTuu2DQ=; b=mFI9cNB0OLjBpA5J+c/8zClLttumSfSnOe9JPVhL/s10VXOQUoVykXwwwQVLF0uY2X lcT/7yPdkGey8jbVfWRXj5Rk+XLurAx/au8zBlIIKRIYbzr6556J2FG+D7D3OLk65OnL 9+AJBM9stCj57COTKWRYuokpw5hcWoltBI5tL6asc5RQ9Q43AnbMR976heHIOWMJ5PrG DCH8IOo9eTnO7ITLioqR+tJVDBd0WqWh569l4wTeFcB41jK9l0CstaiiuDPuiA30Tl4K m7NrcUw/yjUdgJLxI2lKHuBvLg1o7vz3N4Ik3TIkMdDTHOyhpU8277NWbF+rg55z9n46 VBkA== X-Forwarded-Encrypted: i=1; AJvYcCWMIxoSPd0FBC+RkZG/e3ZtKvyz+MBf3Z0VAiwhoE9Zh7UFhLWdH2kFJTu3rBZx7aBMPScuohRlY2spwAo=@vger.kernel.org X-Gm-Message-State: AOJu0YwZd8V2wvs/gKpvBnvFyCaNhFFCeGHuVpKpHRTzi8Ip9GX+fPMz F57rE/iOC/xscnj9TAtqU/L3aUNMkaxEGTx+Pu+g6RYOayF5IL7C87JtSgCovqHnNtefr55Yqha ku0ytnUbUZhSOY9KjOwt3xF8dy7tSR7QXG9nigmBEjMmiUpw90vXNa1gdE275ENyYRg== X-Gm-Gg: ATEYQzyTRM9+XTwGda0vNKdQ5e/bg7zQjAnhgJcUllyWWVyfOU8rpkA01RA8ThJ7XDy iBPer3k0UOGfcPAOBQbUDoaWtHqdWDU2p45JfLEx2I1mFO2TRG6KqJHGOtIl3eUXxQDXOb6yhdI aSIhsC61QKHGDnBY8M609RzeyofPx74cpeI9dtho6k+Lq2ezvSYh/qaLeCoYFTpoU7PJLSF2huy 178Hyd05Ab0MW2JwKI16FznO3dKDlxzlXZtBgdrzMt8ySSb1sSjdywIA8TVIqbCHghtKTqsOSIG N3bwQVs9a7bQdW5boruXvZxzj/B1ZeqboID19Pm/kvKrxz1tdrxBOuXHPN7YLDRFVJp1Q16pVMC 41bCzREpFe4kJP6vju4roRzBRh7k7wg6vk7iWv4G3FVhSP3U5/1z2OaatlJW6 X-Received: by 2002:a05:620a:4013:b0:8cd:a3ab:352a with SMTP id af79cd13be357-8cdb5b54005mr570804485a.59.1773420251637; Fri, 13 Mar 2026 09:44:11 -0700 (PDT) X-Received: by 2002:a05:620a:4013:b0:8cd:a3ab:352a with SMTP id af79cd13be357-8cdb5b54005mr570799985a.59.1773420251191; Fri, 13 Mar 2026 09:44:11 -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 af79cd13be357-8cda215c2a9sm587964785a.46.2026.03.13.09.44.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 09:44:10 -0700 (PDT) From: Brian Masney Date: Fri, 13 Mar 2026 12:43:13 -0400 Subject: [PATCH v6 6/7] 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: <20260313-clk-scaling-v6-6-ce89968c5247@redhat.com> References: <20260313-clk-scaling-v6-0-ce89968c5247@redhat.com> In-Reply-To: <20260313-clk-scaling-v6-0-ce89968c5247@redhat.com> To: Michael Turquette , Stephen Boyd , Maxime Ripard , Alberto Ruiz Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Brian Masney X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2617; i=bmasney@redhat.com; s=20250903; h=from:subject:message-id; bh=zKXv8T0pDXUYDds5ohnk6vvqdTfTZGnDkfT+a9khpbQ=; b=owGbwMvMwCW2/dJd9di6A+2Mp9WSGDK32J1dyrM1SqkmKL9+rVvBHW6WhwymiWsVekQUVoZO/ hExYfaqjlIWBjEuBlkxRZYluUYFEamrbO/d0WSBmcPKBDKEgYtTACbysYHhD3/yiUdpkaKdk3gs L8zOFdsgfTPGfH1Hs/9Vowo1hRfS+YwMG/n61ztFp2jnuwZoJd48cmBF3JvZSjEaj4tPFj9+rsP IAgA= 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, or globally on all clks with the kernel parameter 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 Reviewed-by: Maxime Ripard --- drivers/clk/clk-divider.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 45e7ebde4a8b4d6572aa9d867a6f12f6caf8aae4..17646a06420e099b5fa3ec99d92= 175356c65afa0 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -315,6 +315,19 @@ static int clk_divider_bestdiv(struct clk_hw *hw, stru= ct clk_hw *parent, return bestdiv; } =20 + if (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) { + *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 @@ -377,8 +390,19 @@ int divider_ro_determine_rate(struct clk_hw *hw, struc= t clk_rate_request *req, if (!req->best_parent_hw) return -EINVAL; =20 - req->best_parent_rate =3D clk_hw_round_rate(req->best_parent_hw, - req->rate * div); + if (clk_has_v2_rate_negotiation(req->best_parent_hw->core)) { + unsigned long lcm_rate; + + lcm_rate =3D clk_hw_get_children_lcm(req->best_parent_hw, hw, req->rate= ); + if (lcm_rate > 0) + req->best_parent_rate =3D lcm_rate; + else + req->best_parent_rate =3D clk_hw_round_rate(req->best_parent_hw, + req->rate * div); + } else { + req->best_parent_rate =3D clk_hw_round_rate(req->best_parent_hw, + req->rate * div); + } } =20 req->rate =3D DIV_ROUND_UP_ULL((u64)req->best_parent_rate, div); --=20 2.53.0