From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH v3 03/12] clk: Unconditionally recursively en-/dis-able clocks
Date: Sun, 2 Feb 2020 14:59:38 -0500 [thread overview]
Message-ID: <33db3690-e3ce-f25b-80c5-741d5e1d4773@gmail.com> (raw)
In-Reply-To: <fa3c1376-1e39-5bee-8a37-31cf004c5b44@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>
---
Changes for v3:
- New.
drivers/clk/clk-uclass.c | 58 +++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 33 deletions(-)
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 9aa8537004..87d101aab4 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -490,7 +490,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)\n", __func__, clk);
@@ -499,32 +498,28 @@ 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;
@@ -550,7 +545,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);
@@ -559,29 +553,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-02 19:59 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-02 19:56 [PATCH v3 00/12] riscv: Add Sipeed Maix support Sean Anderson
2020-02-02 19:58 ` [PATCH v3 01/12] clk: Always use the supplied struct clk Sean Anderson
2020-02-06 21:21 ` Lukasz Majewski
[not found] ` <752D002CFF5D0F4FA35C0100F1D73F3FA46D30F5@ATCPCS16.andestech.com>
2020-02-12 1:23 ` Rick Chen
2020-02-02 19:58 ` [PATCH v3 02/12] clk: Check that ops of composite clock components, exist before calling Sean Anderson
2020-02-06 21:41 ` Lukasz Majewski
2020-02-02 19:59 ` Sean Anderson [this message]
2020-02-06 21:45 ` [PATCH v3 03/12] clk: Unconditionally recursively en-/dis-able clocks Lukasz Majewski
2020-02-02 20:01 ` [PATCH v3 04/12] reset: Add generic reset driver Sean Anderson
2020-02-03 0:04 ` Simon Glass
2020-02-03 23:14 ` Sean Anderson
2020-02-04 11:06 ` Bin Meng
2020-02-04 14:14 ` Sean Anderson
2020-02-02 20:02 ` [PATCH v3 05/12] dm: Add support for simple-pm-bus Sean Anderson
2020-02-03 0:04 ` Simon Glass
2020-02-03 23:15 ` Sean Anderson
2020-02-05 0:16 ` Simon Glass
2020-02-04 11:13 ` Bin Meng
2020-02-02 20:04 ` [PATCH v3 06/12] riscv: Add headers for asm/global_data.h Sean Anderson
2020-02-04 11:17 ` Bin Meng
2020-02-02 20:05 ` [PATCH v3 07/12] riscv: Add option to support RISC-V privileged spec 1.9.1 Sean Anderson
2020-02-04 11:21 ` Bin Meng
2020-02-04 14:19 ` Sean Anderson
2020-02-04 14:38 ` Bin Meng
2020-02-04 14:48 ` Sean Anderson
2020-02-04 16:04 ` Bin Meng
2020-02-04 16:07 ` Sean Anderson
2020-02-02 20:06 ` [PATCH v3 08/12] riscv: Allow use of reset drivers Sean Anderson
2020-02-04 11:22 ` Bin Meng
2020-02-02 20:07 ` [PATCH v3 09/12] riscv: Add K210 pll support Sean Anderson
2020-02-02 20:07 ` [PATCH v3 10/12] riscv: Add K210 clock support Sean Anderson
2020-02-06 21:51 ` Lukasz Majewski
2020-02-02 20:10 ` [PATCH v3 11/12] riscv: Add device tree for K210 Sean Anderson
2020-02-04 11:32 ` Bin Meng
2020-02-04 14:23 ` Sean Anderson
2020-02-04 14:40 ` Bin Meng
2020-02-02 20:10 ` [PATCH v3 12/12] riscv: Add initial Sipeed Maix support Sean Anderson
2020-02-04 11:38 ` Bin Meng
2020-02-04 14:26 ` Sean Anderson
2020-02-04 14:42 ` Bin Meng
2020-02-04 14:49 ` 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=33db3690-e3ce-f25b-80c5-741d5e1d4773@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