From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH v4 03/17] clk: Unconditionally recursively en-/dis-able clocks
Date: Tue, 11 Feb 2020 01:04:11 -0500 [thread overview]
Message-ID: <20200211060425.1619471-4-seanga2@gmail.com> (raw)
In-Reply-To: <20200211060425.1619471-1-seanga2@gmail.com>
For clocks not in the CCF, their parents will not have UCLASS_CLK, so we
just enable them as normal. The enable count is local to the struct clk,
but this will never result in the actual en-/dis-able op being called
(unless the same struct clk is enabled twice).
For clocks in the CCF, we always traverse up the tree when enabling.
Previously, CCF clocks without id set would be skipped, stopping the
traversal too early.
Signed-off-by: Sean Anderson <seanga2@gmail.com>
Acked-by: Lukasz Majewski <lukma@denx.de>
---
Changes in v4:
- Lint
Changes in v3:
- New
drivers/clk/clk-uclass.c | 59 ++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 33 deletions(-)
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 246b9c0ab8..c5f87fee72 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -491,7 +491,6 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
int clk_enable(struct clk *clk)
{
const struct clk_ops *ops;
- struct clk *clkp = NULL;
int ret;
debug("%s(clk=%p \"%s\")\n", __func__, clk, clk->dev->name);
@@ -500,32 +499,29 @@ int clk_enable(struct clk *clk)
ops = clk_dev_ops(clk->dev);
if (CONFIG_IS_ENABLED(CLK_CCF)) {
- /* Take id 0 as a non-valid clk, such as dummy */
- if (clk->id && !clk_get_by_id(clk->id, &clkp)) {
- if (clkp->enable_count) {
- clkp->enable_count++;
- return 0;
- }
- if (clkp->dev->parent &&
- device_get_uclass_id(clkp->dev) == UCLASS_CLK) {
- ret = clk_enable(dev_get_clk_ptr(clkp->dev->parent));
- if (ret) {
- printf("Enable %s failed\n",
- clkp->dev->parent->name);
- return ret;
- }
+ if (clk->enable_count) {
+ clk->enable_count++;
+ return 0;
+ }
+ if (clk->dev->parent &&
+ device_get_uclass_id(clk->dev->parent) == UCLASS_CLK) {
+ ret = clk_enable(dev_get_clk_ptr(clk->dev->parent));
+ if (ret) {
+ printf("Enable %s failed\n",
+ clk->dev->parent->name);
+ return ret;
}
}
if (ops->enable) {
ret = ops->enable(clk);
if (ret) {
- printf("Enable %s failed\n", clk->dev->name);
+ printf("Enable %s failed (error %d)\n",
+ clk->dev->name, ret);
return ret;
}
}
- if (clkp)
- clkp->enable_count++;
+ clk->enable_count++;
} else {
if (!ops->enable)
return -ENOSYS;
@@ -551,7 +547,6 @@ int clk_enable_bulk(struct clk_bulk *bulk)
int clk_disable(struct clk *clk)
{
const struct clk_ops *ops;
- struct clk *clkp = NULL;
int ret;
debug("%s(clk=%p)\n", __func__, clk);
@@ -560,29 +555,27 @@ int clk_disable(struct clk *clk)
ops = clk_dev_ops(clk->dev);
if (CONFIG_IS_ENABLED(CLK_CCF)) {
- if (clk->id && !clk_get_by_id(clk->id, &clkp)) {
- if (clkp->enable_count == 0) {
- printf("clk %s already disabled\n",
- clkp->dev->name);
- return 0;
- }
-
- if (--clkp->enable_count > 0)
- return 0;
+ if (clk->enable_count == 0) {
+ printf("clk %s already disabled\n",
+ clk->dev->name);
+ return 0;
}
+ if (--clk->enable_count > 0)
+ return 0;
+
if (ops->disable) {
ret = ops->disable(clk);
if (ret)
return ret;
}
- if (clkp && clkp->dev->parent &&
- device_get_uclass_id(clkp->dev) == UCLASS_CLK) {
- ret = clk_disable(dev_get_clk_ptr(clkp->dev->parent));
+ if (clk->dev->parent &&
+ device_get_uclass_id(clk->dev) == UCLASS_CLK) {
+ ret = clk_disable(dev_get_clk_ptr(clk->dev->parent));
if (ret) {
- printf("Disable %s failed\n",
- clkp->dev->parent->name);
+ printf("Disable %s failed (error %d)\n",
+ clk->dev->parent->name, ret);
return ret;
}
}
--
2.25.0
next prev parent reply other threads:[~2020-02-11 6:04 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-11 6:04 [PATCH v4 00/17] riscv: Add Sipeed Maix support Sean Anderson
2020-02-11 6:04 ` [PATCH v4 01/17] clk: Always use the supplied struct clk Sean Anderson
2020-02-11 6:04 ` [PATCH v4 02/17] clk: Check that ops of composite clock components exist before calling Sean Anderson
2020-02-11 6:04 ` Sean Anderson [this message]
2020-02-18 7:20 ` [PATCH v4 03/17] clk: Unconditionally recursively en-/dis-able clocks Rick Chen
2020-02-18 14:11 ` Sean Anderson
2020-02-19 1:43 ` Rick Chen
2020-02-11 6:04 ` [PATCH v4 04/17] reset: Add generic reset driver Sean Anderson
2020-02-11 17:14 ` Simon Glass
2020-02-11 6:04 ` [PATCH v4 05/17] dm: Add support for simple-pm-bus Sean Anderson
2020-02-11 17:14 ` Simon Glass
2020-02-11 17:26 ` Sean Anderson
2020-02-11 6:04 ` [PATCH v4 06/17] spi: dw: Add device tree properties for fields in CTRL1 Sean Anderson
2020-02-11 17:14 ` Simon Glass
[not found] ` <752D002CFF5D0F4FA35C0100F1D73F3FA46D6F65@ATCPCS16.andestech.com>
2020-02-18 6:05 ` Rick Chen
2020-02-18 6:50 ` Sean Anderson
2020-02-11 6:04 ` [PATCH v4 07/17] spi: dw: Add mem_ops Sean Anderson
2020-02-18 8:34 ` Rick Chen
2020-02-18 16:32 ` Sean Anderson
2020-02-19 1:39 ` Rick Chen
2020-02-19 3:51 ` Sean Anderson
2020-02-19 15:31 ` Bin Meng
2020-02-11 6:04 ` [PATCH v4 08/17] riscv: Add headers for asm/global_data.h Sean Anderson
2020-02-19 15:32 ` Bin Meng
2020-02-11 6:04 ` [PATCH v4 09/17] riscv: Add option to support RISC-V privileged spec 1.9.1 Sean Anderson
2020-02-19 15:26 ` Bin Meng
2020-02-11 6:04 ` [PATCH v4 10/17] riscv: Allow use of reset drivers Sean Anderson
2020-02-11 6:04 ` [PATCH v4 11/17] riscv: Add K210 pll support Sean Anderson
2020-02-11 6:04 ` [PATCH v4 12/17] riscv: Add a bypass clock for K210 Sean Anderson
2020-02-18 6:35 ` Rick Chen
2020-02-18 7:04 ` Sean Anderson
2020-02-18 7:14 ` Rick Chen
2020-02-11 6:04 ` [PATCH v4 13/17] riscv: Add K210 clock support Sean Anderson
2020-02-11 6:04 ` [PATCH v4 14/17] riscv: Try to get cpu frequency from device tree Sean Anderson
2020-02-19 16:12 ` Bin Meng
2020-02-19 20:02 ` Sean Anderson
2020-02-11 6:04 ` [PATCH v4 15/17] riscv: Enable cpu clock if it is present Sean Anderson
2020-02-11 6:04 ` [PATCH v4 16/17] riscv: Add device tree for K210 Sean Anderson
2020-02-11 6:04 ` [PATCH v4 17/17] riscv: Add Sipeed Maix support Sean Anderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200211060425.1619471-4-seanga2@gmail.com \
--to=seanga2@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox