From patchwork Thu Jul 4 14:48:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Nazzareno Trimarchi X-Patchwork-Id: 3168 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 35FAB43CCC for ; Thu, 4 Jul 2024 16:48:45 +0200 (CEST) Received: by mail-lf1-f72.google.com with SMTP id 2adb3069b0e04-52ea237ef5asf417302e87.2 for ; Thu, 04 Jul 2024 07:48:45 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1720104524; cv=pass; d=google.com; s=arc-20160816; b=ZzSRnQX8qWXGL0mqrhcD2Dcd+lsKw0W8ctDWOwCHHBV8FcCv0Haw3cixtOyuLMzRGV J2krK8saAfGqDBEphl3iY3BBf1AYQ3OpEfgfpXQrkVzXnmh7Fonuq/+86D0rHaeoS4xc D7Es15p4UL2F/qPU1CT/vz70Ccdb/UY0s+a75u5WCMBb8emvbaefq4XqRx6rjwu7U90i bY+c4TBbsvP5U50NJ2RJWIKuc1rUw26zw/yrDf2JHDcyRHM1fhPLoyxp0tQjpgd8ADd4 R6AfaOFv4TqNCYx09SDEUvILrQflGZpNc5+pvZrlP7MkHasaJi1OrJt0kQMEb/rlWzAc J30g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:message-id:date:subject:cc:to :from:dkim-signature; bh=wcUartqAMrnfUEYSoh1FRi9YzJ8qpYEXo6VI5Qc4Vek=; fh=w8WoQC9Avwcab1j6IeQrNTWFFDe8Kd2IsBUJgf7h4Ts=; b=g0EV/40A0sCU31LvPCkhyEwuI4Dd6HErjbQiHMeNoYZezAuyDvLAEmApeeEdWW3987 7cy+r6+VfNSOwJguM9fc6BbpsBYws5CQJr3+aJw8CRODq0yKCY/ww7GG9wCxc+6u9wv8 8YlZR8a2nNfkkLmenhbrVyiO+aba4PBlwwupd40MmbFjltC/zLFBkVFLl7tHEV/qpilt rsekbBDxqoueoPEa6rWanmXSgwo1Kd7YFz+WWGjUfRVCjyspKlW4OAAmjH2qCD4OwE4o VEsF3FLqjc8E7w0it9HDU+zm8t8NjgdcXdH5Kw7waV8Dl9filkamVkzQih71dBvBXIR/ he2w==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=PxanJL0w; spf=pass (google.com: domain of michael@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=michael@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1720104524; x=1720709324; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :from:to:cc:subject:date:message-id:reply-to; bh=wcUartqAMrnfUEYSoh1FRi9YzJ8qpYEXo6VI5Qc4Vek=; b=HzHTp7BWrE/+8+Xk2xlii91n141X4uGjkjbEHeRPQN0ZydBBNbBcalOv6qFrvRwCy9 W6mxRSFDDvM1cHEGvWN+e6+NS88jbqNWFinpAIL+CO0RpMkECQ80jkqdmCXxAhdcxNt5 cS5YEdgpvLKXbwvUooXCwEzTBIwci0JpyoXt0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720104524; x=1720709324; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wcUartqAMrnfUEYSoh1FRi9YzJ8qpYEXo6VI5Qc4Vek=; b=kIvq0pBJvsVo93xUrUF2Q8EusLHtQ2dPwce/GShlzh+9lQqZYTJcFBPmpk+jKXO4mQ rRo6duDiqr6nksrFWq4yj9GOSkVfnPAA2DrRbI7JCa896wVyXXuxsAGGKfywOnFi+G9F /5ZxXGmXgTSLnYTMofGZeKV6f3BzbTA3r/4ABIsKKiiauvw/J0YCjQW5BSVr9f0np4IB TccGAPL+fZhxLBTLTy8/Mrn9tpi3GE9djx0WZqmp4RK5s2eP6h9cc9Wq1BzoDbVxBlD/ HM0lVfZlcsVC/4HyymsugxO1Zfo+nXmMwGRCXBasF9WzXgXsjRwSp7qhUS5u+NLDliNp MUQQ== X-Forwarded-Encrypted: i=2; AJvYcCVdx7qUcr5droVGP2GPn1uN0OXiE3tlWYWXcCs3v0OFGLSDQ/+AhFgLuV+DWl0I5lHz+eSV0tz0FC+kOQfVXfP2dbE+/sgRw1MkVHrFJv4rx+PEt5X2KyJ0KjXpNw== X-Gm-Message-State: AOJu0Yy/fXjaUPa8welUU7zR5dX38rRhZ1kiikL9QVu9Mb3AtM3SxYi7 txyoSR3G5ihSE+rz9sUuqGLVMhLXh6lr51UxVZMkjgGJXAHxoWNeD2SVF6paof3OPQ== X-Google-Smtp-Source: AGHT+IHw4jmVpNZx9AB5ajdv/iF40ds4e6UigxXe2uv6xDrXMbEXJWz4nPoHi/rm28M7YU8XwL8r7Q== X-Received: by 2002:a05:6512:3e19:b0:52c:86d6:e8d7 with SMTP id 2adb3069b0e04-52ea0636acemr1988498e87.13.1720104524427; Thu, 04 Jul 2024 07:48:44 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a05:6402:1d37:b0:58c:3dc1:35c2 with SMTP id 4fb4d7f45d1cf-58e201904a3ls453108a12.0.-pod-prod-04-eu; Thu, 04 Jul 2024 07:48:42 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWzAd5CKwrQxMbgodknUVGaw83+g2V3WiUrmZfFUm6n62qggiiMVy96ZKKom2UIYGE6k4Zqu5RUaeae397U1jWmqfX6m9nNdl9GD3ggh72h48V/ X-Received: by 2002:a17:907:3f1d:b0:a72:ae79:8357 with SMTP id a640c23a62f3a-a77ba6fe1c9mr173854166b.30.1720104522459; Thu, 04 Jul 2024 07:48:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1720104522; cv=none; d=google.com; s=arc-20160816; b=WznOb25u0btOd3TUe9C0H/w4vHbFqsDUHjAggSzfGg7a9JtJCdOpFfhfsz8+zQLqBL be6PjDttZ/koMptwarVSOn7P2g1VjpIklFeOEap2Y28wmn+nKE4MUCC/l61pB5ADjpFb T3N7FR5ifrspMIg7jG8ulIOB8B9IQMGE6H55wr0gfYnqHzNSCg7GBwvGzmiRsLOUqI6d lot6BLehWY/qoth/a/AhB2UQNOdIT5gwWarTHq+iSV8xlLV+u6E6EPxIBC25VMv/UvLM fQ5P2UhR49yRoCg3OjTy8gXJDZ1Czh1Jj4U8N2UgQrq/vq2POi4NQezXjwa0KTKVH/F6 ExRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=XzBbDuYBhBud4fjVz0V/Rm580A84b5lNRGR8iiz0sH8=; fh=InvFE5q/A9o+cPsU7I94H60vXbDqs+eaATsume4WsS8=; b=kYtTqMkUyaSWR/b1iWEBNisK9T5LUd44VfVQIWcZ1kU4KRBuXKcbd2zaUFYpInbkAt 4ubniDJdbDui0HyB/AarO2OURaN4WZFq0RWQHash1/70Mb4IUYk0b7tnLnBHCbc+/v2H U9LA43e6Bvpsd4v2Mgnk+Xi4TcGm92kDT+81MoYhA3DcYj/OP++v9l7Zzwmuon4YGQqS OD6mLmj7uKr4mflvrtt3vRzbkXWVUpI1vw6Ua608bss5SPjMbcLg/TIZLI9E8DTnuB39 I2lUFdcKrblW3emzZt5SDrez1Qm9nMJolADlm26RXTxPp8qNvgrDybDECOBuGQPogEku gy3g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=PxanJL0w; spf=pass (google.com: domain of michael@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=michael@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-a729d8f5934sor472009966b.13.2024.07.04.07.48.42 for (Google Transport Security); Thu, 04 Jul 2024 07:48:42 -0700 (PDT) Received-SPF: pass (google.com: domain of michael@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCXyrS/wOj8GV+dfBAN5pRFltBgDYiNDv2zxeQHK8lJjnVjdqTR/ygJnHXDzeNWT2ynE1sJFUxadv/o0nukJ1lHQuWX8RM+YydUP9EJfHnYGzNgM X-Received: by 2002:a17:907:b9c4:b0:a72:7e1e:6301 with SMTP id a640c23a62f3a-a77ba7e1a06mr139535066b.61.1720104521911; Thu, 04 Jul 2024 07:48:41 -0700 (PDT) Received: from panicking.. ([2001:b07:6474:ebbf:bff3:19f9:cf51:6157]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a72ab06519dsm605987666b.99.2024.07.04.07.48.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jul 2024 07:48:41 -0700 (PDT) From: Michael Trimarchi To: Lukasz Majewski , Sean Anderson Cc: Tom Rini , linux-amarula@amarulasolutions.com, u-boot@lists.denx.de, Dario Binacchi , Michael Trimarchi , Sam Protsenko Subject: [PATCH] clk: Propagate clk_set_rate() if CLK_SET_PARENT_RATE present for gate and mux Date: Thu, 4 Jul 2024 16:48:38 +0200 Message-ID: <20240704144838.196350-1-michael@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Original-Sender: michael@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=PxanJL0w; spf=pass (google.com: domain of michael@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=michael@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Gate and mux does not have .set_rate operation, but they could have CLK_SET_PARENT_RATE flag set. In that case it's usually possible to find a parent up the tree which is capable of setting the rate (div, pll, etc). Add clk_generic_set_rate to allow them to trasverse the clock tree. Cc: Sam Protsenko Signed-off-by: Michael Trimarchi --- drivers/clk/clk-gate.c | 1 + drivers/clk/clk-mux.c | 2 +- drivers/clk/clk-uclass.c | 20 ++++++++++++++++++++ drivers/clk/clk.c | 9 +++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c index cfd90b717e7..c86083ac5a3 100644 --- a/drivers/clk/clk-gate.c +++ b/drivers/clk/clk-gate.c @@ -116,6 +116,7 @@ const struct clk_ops clk_gate_ops = { .enable = clk_gate_enable, .disable = clk_gate_disable, .get_rate = clk_generic_get_rate, + .set_rate = clk_generic_set_rate, }; struct clk *clk_register_gate(struct device *dev, const char *name, diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index e3481be95fa..f99a67ebd35 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c @@ -151,13 +151,13 @@ static int clk_mux_set_parent(struct clk *clk, struct clk *parent) #else writel(reg, mux->reg); #endif - return 0; } const struct clk_ops clk_mux_ops = { .get_rate = clk_generic_get_rate, .set_parent = clk_mux_set_parent, + .set_rate = clk_generic_set_rate, }; struct clk *clk_hw_register_mux_table(struct device *dev, const char *name, diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index ed6e60bc484..638864e6774 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -517,6 +517,26 @@ ulong clk_get_parent_rate(struct clk *clk) return pclk->rate; } +ulong clk_set_parent_rate(struct clk *clk, ulong rate) +{ + const struct clk_ops *ops; + struct clk *pclk; + + debug("%s(clk=%p)\n", __func__, clk); + if (!clk_valid(clk)) + return 0; + + pclk = clk_get_parent(clk); + if (IS_ERR(pclk)) + return -ENODEV; + + ops = clk_dev_ops(pclk->dev); + if (!ops->set_rate) + return -ENOSYS; + + return clk_set_rate(pclk, rate); +} + ulong clk_round_rate(struct clk *clk, ulong rate) { const struct clk_ops *ops; diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 6ede1b4d4dc..febd5314df2 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -14,6 +14,7 @@ #include #include #include +#include int clk_register(struct clk *clk, const char *drv_name, const char *name, const char *parent_name) @@ -61,6 +62,14 @@ ulong clk_generic_get_rate(struct clk *clk) return clk_get_parent_rate(clk); } +ulong clk_generic_set_rate(struct clk *clk, ulong rate) +{ + if (clk->flags & CLK_SET_RATE_PARENT) + return clk_set_parent_rate(clk, rate); + + return clk_get_parent_rate(clk); +} + const char *clk_hw_get_name(const struct clk *hw) { assert(hw);