From nobody Sun Apr 5 18:01:58 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.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 0BCD53C9447 for ; Mon, 23 Mar 2026 17:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774286749; cv=none; b=DbjbbCNMzf976ncQ5pniBe7JRxzKGUHrp3zL8qh3WWToHbYumwL7KeHiYu3x/5merq1bZY40AjJYyhs4XgMuVVpcm3xXfmYC0YbZZN6u005CmSMRxxTpEdG5nHDl+ck7tZ1hlFGCSvkRWbDAyQPIz/9g0Gk61m5jAvTihuIOy9U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774286749; c=relaxed/simple; bh=3Wx9iN4TAJNUNIOuDPx1ojQxxrOnjyC9d13DLRzCvF0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QB3Fa4BNZiM9MoTtrBDonskN9d5lV3VsoYbW5b8x5BFBLqS389e+kW24VxOqyz4cVd/8nA1iJRuY7iWa7akMNmb/oBTraY8PQ+nF1Pn1wq2HJTqusrAvpQXeq5oQv0HilEiViEyOexX+MD03wRIKSqCgfsnUk8x6pxoWmK7aPXo= 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=B55pQHHw; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Y9l7pSzy; arc=none smtp.client-ip=170.10.129.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="B55pQHHw"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Y9l7pSzy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774286747; 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=TbzwY54CQAGeSGXdTg/v3Czq6hzBLavF0xp2Hme/bBk=; b=B55pQHHwC7Vxcx76aaBoL1J/hyV6Y5WmY3vAtmOG9JLsFrd37iFdtDGktucQHtOyXQmya5 GOCrY98Sny8Jg50scrnmSaQfKAK5C1OKgIBOd5JnBMbYs2aG/5KX1YtPf6S4rYx5T4teBk BW3YOytY2x2FVINEdW6Nx48ouZ7pyD8= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-591---I4vEu_OfiP2Kc5aDzBbg-1; Mon, 23 Mar 2026 13:25:45 -0400 X-MC-Unique: --I4vEu_OfiP2Kc5aDzBbg-1 X-Mimecast-MFC-AGG-ID: --I4vEu_OfiP2Kc5aDzBbg_1774286745 Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-5093b92f327so327317221cf.1 for ; Mon, 23 Mar 2026 10:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774286745; x=1774891545; 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=TbzwY54CQAGeSGXdTg/v3Czq6hzBLavF0xp2Hme/bBk=; b=Y9l7pSzy5FCJ9If+QBhkP1gKAQkSOH7ALojuLir0sXtcTblB3VzWBVuulhFvbjDeqd uZq3UnJSFpcxRwBqyXtn8HztZwIyceJiuUQdlHAR5nZfeBfroNERR7FOFVwqGYcmH+v4 xCFuddsGsUS/hpQYX35LhaParaBR4lAoH7GTOpXy4GCqiFOOsgIXzm5OXJYcB5GyMDRi CM4Ve5cx27LW2CMaOx1juzNbMRTF5lN5ux8Wq2/ire/j2Acm+32M/KPwBqZgTjHAxHvJ p+BpT41IKre31nJM+jviqEDMzYh1I7URKJDAj0I26wz4gla15zlhIHN2GR8yMxTgE3gr OVOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774286745; x=1774891545; 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=TbzwY54CQAGeSGXdTg/v3Czq6hzBLavF0xp2Hme/bBk=; b=AYHMD3fiCx5q4eVv8asV8fDgJzWTK7HGqIptMfCGP2kQ61zcOxsMW+YZv59/GrUlaD 4Ymd3KECaVEM19Qz546hBg1dny+F9H8C6x8dP4+2ShmRDazj0UP+L2exwkuuV0lEcULT R8mDZpKPRh+Rlonfisledu5jJ6736e5JtxAsx2g/SA1kzIbbQ/tw/dYEIhQZkKALa+Gz JwkqqyJV8Nny8aDoJPgv0InUfgOWswbhAznY6O2pPDHR+LG2D83awKrMvzkCh7JOf8Md uoONj7SWcEmtwPJ8RFGtbg5o9m6hlU29EBSnpQMmGGOJYEKYcVWiQ7nbzZgp7gzTE0+J jEng== X-Forwarded-Encrypted: i=1; AJvYcCVKPXSc7LkEzxjMqwhqSpmwDFIajbxqUTVTwPUZDUVL+ZvYXT47iMrl+MPxJQLH3uAo58wkEmVzr36oXQk=@vger.kernel.org X-Gm-Message-State: AOJu0YyltMlI4Mnho5fJCbJMMGf9/6Ws2b0Lk7FW7xGHUafL5JdYBfAO 2HXrpBrJBvX5kgpXX7bFImqLM/uqFBAdt/Fs4WlIj/CqLpQnDgb5LdK9oq0xn2McANW/j/nh05C pnJHLCItpxbKAsl9jwsfsI46ritBqS5bfd0Hob3fbEUtKsLlE8fYCyEMxa+2ZHm7YZw== X-Gm-Gg: ATEYQzzbbfYs+nIetya4CbCAvl2VrBeYgh0khWhPs1/D6xRaV1oasQ0dz6IAc0RcTO5 t2o0pPWztFuH3p6BaaTDPVPIkiKmOxWeeSA4H8A/ZHfhDCIgJ9m9tFnHpVUwXHZXeE+m372zway Gc1vOzCEgmVEIW6aL9AR0UKolzZfP0ud3jc/61C0xt2IH1Ij8Ic2Mysqhbm9+EXLi28yqaE90QO +ECiiOyHv3INzyJqZoysA0P3fVdbwC6vJwcPT/0a91IlWQ54XITZfTrq1lDTnaPN4lJFgwTM804 GQ45lN7KnEfBtIofHCYN1TOtCBgwbmP4vkROpBkb9ip06hPudq9etqx/rLUaTcrWm5Jb2AI5sFq xxIDa3HpQSzZpMPd6w4KHIkGSuDyEJZaMl1TpC0A5Q0bE4RYAAGcxp41ipCE0 X-Received: by 2002:ac8:7e8d:0:b0:50b:37ff:727e with SMTP id d75a77b69052e-50b37ff7412mr200892861cf.44.1774286744575; Mon, 23 Mar 2026 10:25:44 -0700 (PDT) X-Received: by 2002:ac8:7e8d:0:b0:50b:37ff:727e with SMTP id d75a77b69052e-50b37ff7412mr200892241cf.44.1774286743960; Mon, 23 Mar 2026 10:25:43 -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-50b36e34f8bsm108249661cf.15.2026.03.23.10.25.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 10:25:43 -0700 (PDT) From: Brian Masney Date: Mon, 23 Mar 2026 13:24:57 -0400 Subject: [PATCH v7 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: <20260323-clk-scaling-v7-6-8e7193dc9405@redhat.com> References: <20260323-clk-scaling-v7-0-8e7193dc9405@redhat.com> In-Reply-To: <20260323-clk-scaling-v7-0-8e7193dc9405@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=2590; i=bmasney@redhat.com; s=20250903; h=from:subject:message-id; bh=3Wx9iN4TAJNUNIOuDPx1ojQxxrOnjyC9d13DLRzCvF0=; b=owGbwMvMwCW2/dJd9di6A+2Mp9WSGDIPlnc2mp0yKew7Z+kpW3Xf98Cp0+9W6V38r2ooWx34/ d1RTqugjlIWBjEuBlkxRZYluUYFEamrbO/d0WSBmcPKBDKEgYtTACbyOJORYUotY9/V398dTFZX 7vviuN8r0smdyW7fSg01l3ezPh/zOsPIMId99Yp9O7b+lS+bUBc6S39t9a5tch33WqQK42xOPk1 K4QUA 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. Reviewed-by: Maxime Ripard 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 | 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