From nobody Thu Apr 9 12:08:34 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 1136C258EDA for ; Mon, 9 Mar 2026 14:39:28 +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=1773067172; cv=none; b=IGay4puDxhlVaNGoP9n6GkNy8kYwzfMM+CU3VKBXRuiO+1MYf3JmpgISqfh2YYEt066duO17n6darbQ2/UBvP/di7dv0R+4GF0bpPomVAE6DGSfgrVHd9odTlIi1ohyRAUADufCJVi5E1z+Y5uuwXgbsfOMcCmMAhJZTv9Dt8nU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773067172; c=relaxed/simple; bh=cs+bYMwjQyeXRJYn9Ukf0L0Sx16lkh8uvsSX1xdWPjk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gf4yIAYJtam3Mg9DjKxJemx7WOU96Jvzk22v8+vSdZRvCX9AJ9KWa8J/D6GKteR0Dq72J6KYbqRRju2tEYC9p5bZ1fCh8VkfO8stQdzOECMOTLhP4T9WmVaFD/xx8uuhLxklqJlkUTQE1YaKN9CBWSRk2/KkZEXEnVrUp+YFpfw= 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=d0ZvANtV; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=FqQym2kP; 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="d0ZvANtV"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="FqQym2kP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773067168; 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=5awK10415MrJyZgxJIpgfvMNalFSl2XKXr9RBN9IsuA=; b=d0ZvANtVEDHDqAVaLNkV7Ia09kXiu6CUwFCj60feEGw2WrGFMDH2VExZSfN4vAYzctfif4 U6b3dCnreec4bEUNNF1ylOenNardkIkc2VF5grF/ZHOyDlOEMZSWDdnL6vkRtuM/jgeBOv iowhsnYAzYQXNwldi6VU16Ks4sn+47I= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-690--JdrmnWDN3O6AZywCwo8Og-1; Mon, 09 Mar 2026 10:39:25 -0400 X-MC-Unique: -JdrmnWDN3O6AZywCwo8Og-1 X-Mimecast-MFC-AGG-ID: -JdrmnWDN3O6AZywCwo8Og_1773067164 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-899eacb58a5so392755656d6.1 for ; Mon, 09 Mar 2026 07:39:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773067164; x=1773671964; 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=5awK10415MrJyZgxJIpgfvMNalFSl2XKXr9RBN9IsuA=; b=FqQym2kP3vvHvfn8IktFRW1QgUUhUtBoCemHqig5JMIm8xxkVKYTsSjJ6Jou8qpnc1 m6n+C9RU2H5JO1voEKCZQ0qHgbM0HRMXWP3qSwGRe6hU0KOlZl/Q2bQakK/lAmmWGldU di7qHv6tbqq+59nc0u072IPfW5YKt/KEGiPpg9ktdkRTrmNVgPhGROImaCcO/AJD3kMg I1Fl9X/N9Ulupsa9zOB/JeNtNTLdebmD+qrnlfr0lsGZSl9hl+p2sEe8qeYzHgIQvlFv T2shyq8pBU+6YdtP4aahTVUpj0Izn7m2Or49wUxsf0zLm+PktjA6knsYRUNN+yPAfpnB 2qrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773067164; x=1773671964; 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=5awK10415MrJyZgxJIpgfvMNalFSl2XKXr9RBN9IsuA=; b=pcZoHWfDGsBXES0A4wdpRBBHhC3zr1Z/kVWpUWxX7DTvaM14h/5WtNX5tgvyBQ8Smm mSdkLgo7y3BZdEC/NU79/TLGWmmIda9E6yXP5DeqljXZr64AlG7qJcJEkvrgemRXLgZs /h1PFtSPNijhJpAetCntk6y3mecbVM/FdiytMPj25UOcdhJ8s33h//QQjoPqRYyyA4/E UvQnUKzMou/uE3hXInFwdUB2PtUqhZJmF1Bc9sauxjTOElYY9px8N/ENjtajFHxcQR91 FFrmI3A4aQNE3ugSLO5YjfwkoVDGrC6nScqy3VdGi2Utq4WToXBZIMU74P31WztxOtSR 6Cqw== X-Forwarded-Encrypted: i=1; AJvYcCUYq3xUkn2TkL6Lo3fe0UwqqGN2LUxkAkrf147SqklyWLFy84VXNmXrOLGbDf++xO9Tn5oghkTlSYOUUDY=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9TKLLwqfGtJkC0NjAV62qiv1EstxBLQCxwvuSwpG69pViE2/O AHD/1e8VB/K/NnH9jVR5RjNRcBel7SkqyI5VUv19zX3TGmrqt8IcqIPbGrLmx209ch4diF4KtcG MBm5QSsmHBptPr6vBD5QXDhK31fxs8hf5AYyPPCs6SBPb8znWNuTWwN+lR5i57uxlrQ== X-Gm-Gg: ATEYQzwEKiloXyi510qcYgIy/WyS+EbOR0hSTu+qTseXMW7gIJN8xd5Fln5TQNas7Jb a2F54pW/IJVqYttWFnpD7R2219gjnM6/xp/UQCz2UuVpJBNxfO4tIL6g3BPsoQTKe6w/NIdKt0r svRP1TuT65foiJ3nlyirfiwVGRMLNU3FB/HpQV6x3So5gFm4FuCnf1mCtVKVKtq3O8F75h1a8FA t+XpG+mfDrQ7/gq3/LAO5Iv/KO5sH2TbkiS0hDK4iWccxzsASAeU4tr/V67I7U07jBKjG99o5mC 3sXGRFjFmJ3CydRSCbZxtwTjnyvl+He3NZvzMDnj8mB1DSR2M8XklWBym3TtVad2AZI+tA7pToL yWR5eQykC0dnohY/MR/9o42qLHJr6HH8rPI6WX6jwfBdInLKE8N5F3Qn6v+DrHg== X-Received: by 2002:a05:620a:4004:b0:8cd:9365:f27f with SMTP id af79cd13be357-8cd9365fb75mr10085885a.51.1773067164457; Mon, 09 Mar 2026 07:39:24 -0700 (PDT) X-Received: by 2002:a05:620a:4004:b0:8cd:9365:f27f with SMTP id af79cd13be357-8cd9365fb75mr10082185a.51.1773067163991; Mon, 09 Mar 2026 07:39:23 -0700 (PDT) Received: from [192.168.1.15] (c-73-183-52-120.hsd1.pa.comcast.net. [73.183.52.120]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8cd6f49fcafsm756064985a.16.2026.03.09.07.39.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 07:39:23 -0700 (PDT) From: Brian Masney Date: Mon, 09 Mar 2026 10:38:40 -0400 Subject: [PATCH v2 01/12] clk: add new flag CLK_ROUNDING_NOOP 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: <20260309-clk-det-rate-fw-managed-v2-1-c48ef5a3100a@redhat.com> References: <20260309-clk-det-rate-fw-managed-v2-0-c48ef5a3100a@redhat.com> In-Reply-To: <20260309-clk-det-rate-fw-managed-v2-0-c48ef5a3100a@redhat.com> To: Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Brian Masney , Sudeep Holla , Abel Vesa , Andrea della Porta , Baolin Wang , Bjorn Andersson , Chanwoo Choi , Frank Li , Geert Uytterhoeven , Krzysztof Kozlowski , Orson Zhai , Sascha Hauer , Sylwester Nawrocki , Tudor Ambarus , Alim Akhtar , arm-scmi@vger.kernel.org, Chunyan Zhang , Cristian Marussi , Fabio Estevam , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Peng Fan , Pengutronix Kernel Team X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5325; i=bmasney@redhat.com; s=20250903; h=from:subject:message-id; bh=cs+bYMwjQyeXRJYn9Ukf0L0Sx16lkh8uvsSX1xdWPjk=; b=owGbwMvMwCW2/dJd9di6A+2Mp9WSGDLX3e4p6p/9/bRNG8unhOh9XV2dEmpOUoW/50S2Rqxte F+j//poRykLgxgXg6yYIsuSXKOCiNRVtvfuaLLAzGFlAhnCwMUpABO508HwVzpZa6tR03/JGIXf aTejyos0jIqOe7jkvvJc6Tgv/eKWGYwMH+fp9f9nyOc88HjKPo8NE7jtpauuCUyWu7v4pMrJrks hjAA= X-Developer-Key: i=bmasney@redhat.com; a=openpgp; fpr=A46D32705865AA3DDEDC2904B7D2DD275D7EC087 There are some clocks where the determine_rate clk op is just an empty function that returns 0. This can be either because the rounding is managed by the firmware, or the clock is capable of any rate. Add a new flag for these type of clocks, and update the clk core so that the determine_rate() clk op is not required when this flag is set. Acked-by: Sudeep Holla Signed-off-by: Brian Masney --- To: Michael Turquette To: Stephen Boyd To: Abel Vesa To: Andrea della Porta To: Baolin Wang To: Bjorn Andersson To: Chanwoo Choi To: Frank Li To: Geert Uytterhoeven To: Krzysztof Kozlowski To: Orson Zhai To: Sascha Hauer To: Sudeep Holla To: Sylwester Nawrocki To: Tudor Ambarus Cc: linux-clk@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: Alim Akhtar Cc: arm-scmi@vger.kernel.org Cc: Chunyan Zhang Cc: Cristian Marussi Cc: Fabio Estevam Cc: imx@lists.linux.dev Cc: linux-arm-kernel@lists.infradead.org Cc: linux-arm-msm@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org Cc: linux-samsung-soc@vger.kernel.org Cc: Peng Fan Cc: Pengutronix Kernel Team --- drivers/clk/clk.c | 31 ++++++++++++++++++++++++++++--- include/linux/clk-provider.h | 2 ++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index fd418dc988b1c60c49e3ac9c0c44aa132dd5da28..1187e5b1dbc123d2d2c1f43690d= 7dcf75a7c4ac3 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1557,6 +1557,21 @@ static int __init clk_disable_unused(void) } late_initcall_sync(clk_disable_unused); =20 +/** + * clk_is_rounding_noop - Check to see if noop clk rounding is used. + * + * @core: the clk to check + * + * Clks that have this flag enabled do not need to have a determine_rate()= op + * set, and will always return success for any rounding operation. This ca= n be + * either because the rounding is managed by the firmware, or the clock is + * capable of any rate. + */ +static inline bool clk_is_rounding_noop(struct clk_core *core) +{ + return core->flags & CLK_ROUNDING_NOOP; +} + static int clk_core_determine_round_nolock(struct clk_core *core, struct clk_rate_request *req) { @@ -1589,6 +1604,8 @@ static int clk_core_determine_round_nolock(struct clk= _core *core, req->rate =3D core->rate; } else if (core->ops->determine_rate) { return core->ops->determine_rate(core->hw, req); + } else if (clk_is_rounding_noop(core)) { + return 0; } else { return -EINVAL; } @@ -1673,7 +1690,7 @@ EXPORT_SYMBOL_GPL(clk_hw_forward_rate_request); =20 static bool clk_core_can_round(struct clk_core * const core) { - return core->ops->determine_rate; + return core->ops->determine_rate || clk_is_rounding_noop(core); } =20 static int clk_core_round_rate_nolock(struct clk_core *core, @@ -3528,6 +3545,7 @@ static const struct { ENTRY(CLK_IS_CRITICAL), ENTRY(CLK_OPS_PARENT_ENABLE), ENTRY(CLK_DUTY_CYCLE_PARENT), + ENTRY(CLK_ROUNDING_NOOP), #undef ENTRY }; =20 @@ -3906,13 +3924,19 @@ static int __clk_core_init(struct clk_core *core) =20 /* check that clk_ops are sane. See Documentation/driver-api/clk.rst */ if (core->ops->set_rate && !core->ops->determine_rate && - core->ops->recalc_rate) { + core->ops->recalc_rate && !clk_is_rounding_noop(core)) { pr_err("%s: %s must implement .determine_rate in addition to .recalc_rat= e\n", __func__, core->name); ret =3D -EINVAL; goto out; } =20 + if (clk_is_rounding_noop(core) && core->ops->determine_rate) { + pr_err("%s: %s cannot implement both .determine_rate and CLK_ROUNDING_NO= OP\n", + __func__, core->name); + goto out; + } + if (core->ops->set_parent && !core->ops->get_parent) { pr_err("%s: %s must implement .get_parent & .set_parent\n", __func__, core->name); @@ -3920,7 +3944,8 @@ static int __clk_core_init(struct clk_core *core) goto out; } =20 - if (core->ops->set_parent && !core->ops->determine_rate) { + if (core->ops->set_parent && !core->ops->determine_rate && + !clk_is_rounding_noop(core)) { pr_err("%s: %s must implement .set_parent & .determine_rate\n", __func__, core->name); ret =3D -EINVAL; diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 1cda2c78dffaff037f0f16b0f11106b63b3a746f..33afef9403b526976af80881461= bbfe1e4b76c77 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -32,6 +32,8 @@ #define CLK_OPS_PARENT_ENABLE BIT(12) /* duty cycle call may be forwarded to the parent clock */ #define CLK_DUTY_CYCLE_PARENT BIT(13) +/* clock rate rounding is managed by firmware, don't require determine_rat= e */ +#define CLK_ROUNDING_NOOP BIT(14) =20 struct clk; struct clk_hw; --=20 2.53.0