- 10 2月, 2016 1 次提交
-
-
由 Masahiro Yamada 提交于
Before commit b3d192d5121f ("clk: simplify __clk_init_parent()"), __clk_init_parent() called .get_parent() only for multi-parent clocks. That commit changed the behavior to call .get_parent() if available even for single-parent clocks and root clocks. It turned out a problem because there are some single-parent clocks that implement .get_parent() callback and return non-zero index. The SOCFPGA clock is the case; the commit broke the SOCFPGA boards. To keep the original behavior, invoke .get_parent() only when num_parents is greater than 1. Fixes: b3d192d5121f ("clk: simplify __clk_init_parent()") Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reported-by: NDinh Nguyen <dinguyen@opensource.altera.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 07 2月, 2016 1 次提交
-
-
由 Stephen Boyd 提交于
We don't use CLK_IS_ROOT but in a few places in the common clk framework core. Let's replace those checks with a check for the number of parents a clk has instead of the flag, freeing up one flag for something else. We don't remove the flag yet so that things keep building, but we'll remove it once all drivers have removed their flag usage. Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 03 2月, 2016 8 次提交
-
-
由 Insu Yun 提交于
If clock is already unregistered, it returns with holding lock. It needs to be unlocked. Signed-off-by: NInsu Yun <wuninsu@gmail.com> [sboyd@codeaurora.org: Use goto instead] Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
If clk_fetch_parent_index() fails, p_rate is unused. Move the assignment after the error checking. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The clk_core_get_parent_by_index can be used as a helper function to simplify the implementation of clk_fetch_parent_index(). Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
If parent is given with NULL, clk_fetch_parent_index() could return a positive index value. Currently, parent is checked by the callers of this function, but it would be safer to do it in this function. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
This loop can be much simpler. If a new parent is available for orphan clocks, __clk_init_parent(orphan) can detect it. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
Currently, clk_register() never checks a circular parent looping, but clock providers could register such an insane clock topology. For example, "clk_a" could have "clk_b" as a parent, and vice versa. In this case, clk_core_reparent() creates a circular parent list and __clk_recalc_accuracies() calls itself recursively forever. The core infrastructure should be kind enough to bail out, showing an appropriate error message in such a case. This helps to easily find a bug in clock providers. (uh, I made such a silly mistake when I was implementing my clock providers first. I was upset because the kernel did not respond, without any error message.) This commit adds a new helper function, __clk_is_ancestor(). It returns true if the second argument is a possible ancestor of the first one. If a clock core is a possible ancestor of itself, it would make a loop when it were registered. That should be detected as an error. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The translation from the index into clk_core is done by clk_core_get_parent_by_index(). The if-block for num_parents == 1 case is duplicating the code in the clk_core_get_parent_by_index(). Drop the "if (num_parents == 1)" from the special case. Instead, set the index to zero if .get_parent() is missing. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The .get_parent is mandatory for multi-parent clocks. Move the check to __clk_core_init(), like other callback checkings. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> [sboyd@codeaurora.org: Squashed in error path handling, fix typos in commit message] Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 02 2月, 2016 9 次提交
-
-
由 Masahiro Yamada 提交于
These three cases let clk_register() fail. They should be considered as error messages. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The core->parents is a cache to save expensive clock parent look-ups. It will be filled as needed later. We do not have to do it here. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
Drop the "if (!core->parents)" case and refactor the function a bit because core->parents is always allocated. (Strictly speaking, it is ZERO_SIZE_PTR if core->num_parents == 0, but such a case is omitted by the if-conditional above.) Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
Currently, __clk_core_init() allows failure of the kcalloc() for the core->parents. So, clk_fetch_parent_index() and __clk_init_parent() also try to allocate core->parents in case it has not been allocated yet. Scattering memory allocation here and there makes things complicated. Like other clk_core members, allocate core->parents in clk_register() and let it fail in case of memory shortage. If we cannot allocate such a small piece of memory, the system is already insane. There is no point to postpone the memory allocation. Also, allocate core->parents regardless of core->num_parents. We want it even if core->num_parents == 1 because clk_fetch_parent_index() might be called against the clk_core with a single parent. If core->num_parents == 0, core->parents is set to ZERO_SIZE_PTR. It is harmless because no access happens to core->parents in such a case. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
Now, the clock parent is not "struct clk *", but "struct clk_core *". Of course, the size of a pointer is always same, but strictly speaking, sizeof(struct clk *) should be sizeof(struct clk_core *) here. This mismatch happened when we split the structure into struct clk and struct clk_core. For the potential possibility of future renaming, sizeof(*core->parents) would be better. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
This if-block has been here since the introduction of the common clock framework. Now no clock drivers are statically initialized. core->parent is always NULL at this point. Drop the redundant check and the confusing comment. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
Now this function takes clk_core as its argument. __clk_core_init() would be more suitable for the name of this function. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The argument clk_user is used only for the clk_user->core. The rest of this function only takes care of clk_core. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
The "struct device *dev" is not used at all in this function. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: NVladimir Zapolskiy <vz@mleia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 24 12月, 2015 1 次提交
-
-
由 Heiko Stuebner 提交于
Some clocks need to be enabled to accept rate changes. This patch adds a new flag CLK_SET_RATE_UNGATE that lets clk_change_rate enable the clock before trying to change the rate and disable it again afterwards. This of course doesn't effect clocks that are already running at that point, as their refcount will only temporarily increase. Signed-off-by: NHeiko Stuebner <heiko@sntech.de> Tested-by: NSjoerd Simons <sjoerd.simons@collabora.co.uk> Reviewed-by: NSjoerd Simons <sjoerd.simons@collabora.co.uk> Signed-off-by: NMichael Turquette <mturquette@baylibre.com>
-
- 03 12月, 2015 1 次提交
-
-
由 Masahiro Yamada 提交于
Currently, of_clk_get_parent_name() returns a wrong parent clock name when "clock-indices" property exists and the target index is not found in the property. In this case, NULL should be returned. For example, oscillator { compatible = "myclocktype"; #clock-cells = <1>; clock-indices = <1>, <3>; clock-output-names = "clka", "clkb"; }; consumer { compatible = "myclockconsumer"; clocks = <&oscillator 0>, <&oscillator 1>; }; Currently, of_clk_get_parent_name(consumer_np, 0) returns "clka" (and of_clk_get_parent_name(consumer_np, 1) also returns "clka", this is correct). Because the "clock-indices" in the clock parent does not contain <0>, of_clk_get_parent_name(consumer_np, 0) should return NULL. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 01 12月, 2015 1 次提交
-
-
由 Masahiro Yamada 提交于
The word "cases" is doubled. Keep decent forms for the following lines. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 21 11月, 2015 3 次提交
-
-
由 Geert Uytterhoeven 提交于
Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
This minor refactoring does not change the function behavior. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Masahiro Yamada 提交于
This if-block can be dropped because the of_parse_phandle_with_args() in the following line returns -EINVAL for negative index. Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 27 10月, 2015 1 次提交
-
-
由 Joachim Eastwood 提交于
Add clk_hw_is_enabled() to the provider APIs so clk providers can use a struct clk_hw instead of a struct clk to check if a clk is enabled or not. Signed-off-by: NJoachim Eastwood <manabian@gmail.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 22 10月, 2015 1 次提交
-
-
由 Julia Lawall 提交于
for_each_matching_node_and_match performs an of_node_get on each iteration, so a break out of the loop requires an of_node_put. A simplified version of the semantic patch that fixes this problem is as follows (http://coccinelle.lip6.fr): // <smpl> @@ expression e1,e2,e; local idexpression np; @@ for_each_matching_node_and_match(np, e1, e2) { ... when != of_node_put(np) when != e = np ( return np; | + of_node_put(np); ? return ...; ) ... } // </smpl> Besides the problem identified by the semantic patch, this patch adds an of_node_get in front of saving np in a field of parent, to account for the fact that this value will be put on going on to the next element in the iteration, and then adds of_node_puts in the two loops where the parent pointer can be freed. Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 17 10月, 2015 2 次提交
-
-
由 Geert Uytterhoeven 提交于
When calling __clk_get_name() on a const clock: warning: passing argument 1 of '__clk_get_name' discards 'const' qualifier from pointer target type include/linux/clk-provider.h:613:13: note: expected 'struct clk *' but argument is of type 'const struct clk *' __clk_get_name() does not modify the passed clock, hence make it const. Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Geert Uytterhoeven 提交于
Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 16 10月, 2015 1 次提交
-
-
由 Stephen Boyd 提交于
If a clock provider has #clock-cells = 1 and we call of_clk_get_parent_name() on it we may end up returning the name of the provider node if the provider doesn't have a clock-output-names property. This doesn't make sense, especially when you consider that calling of_clk_get_parent_name() on such a node with different indices will return the same name each time. Let's try getting the clock from the framework via of_clk_get() instead, and only fallback to the node name if we have a provider with #clock-cells = 0. This way, we can't hand out the same name for different clocks when we don't actually know their names. Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 18 9月, 2015 1 次提交
-
-
由 Javier Martinez Canillas 提交于
There are cleary typo errors so can be removed. Signed-off-by: NJavier Martinez Canillas <javier@osg.samsung.com> Acked-by: NLeo Yan <leo.yan@linaro.org> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 17 9月, 2015 1 次提交
-
-
由 Mans Rullgard 提交于
If a mux clock is initialised (by hardware or firmware) with an invalid parent, its ->get_parent() can return an out of range index. For example, the generic mux clock attempts to return -EINVAL, which due to the u8 return type ends up a rather large number. Using this index with the parent_names[] array results in an invalid pointer and (usually) a crash in the following strcmp(). This patch adds a check for the parent index being in range, ignoring clocks reporting invalid values. Signed-off-by: NMans Rullgard <mans@mansr.com> Tested-by: NRhyland Klein <rklein@nvidia.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 25 8月, 2015 4 次提交
-
-
由 Dong Aisheng 提交于
__clk_set_parent_after() actually used the second argument then we could put this duplicate logic in there and call it with a different order of arguments in the success vs. error paths in this function. Cc: Mike Turquette <mturquette@linaro.org> Suggested-by: NStephen Boyd <sboyd@codeaurora.org> Signed-off-by: NDong Aisheng <aisheng.dong@freescale.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Stephen Boyd 提交于
We don't modify the clk_hw argument in these functions, so it's safe to mark it as const. Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Stephen Boyd 提交于
Remove these APIs now that we've converted all users to the replacement struct clk_hw based versions. Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Stephen Boyd 提交于
clk providers shouldn't need to use the consumer APIs (clk.h). Add provider APIs to replace the __clk_*() APIs that take a struct clk_hw as their first argument instead of a struct clk. Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 12 8月, 2015 1 次提交
-
-
由 Heiko Stuebner 提交于
While children of orphan clocks are not carried in the orphan-list itself, they're nevertheless orphans in their own right as they also don't have an input-rate available. To ease tracking if a clock is an orphan or has an orphan in its parent path introduce an orphan field into struct clk and update it and the fields in child-clocks when a clock gets added or removed from the orphan-list. Suggested-by: NStephen Boyd <sboyd@codeaurora.org> Signed-off-by: NHeiko Stuebner <heiko@sntech.de> Cc: Boris Brezillon <boris.brezillon@free-electrons.com> Cc: Alex Elder <elder@linaro.org> Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com> Cc: Stephen Warren <swarren@wwwdotorg.org> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: kernel@pengutronix.de Cc: Zhangfei Gao <zhangfei.gao@linaro.org> Cc: Santosh Shilimkar <ssantosh@kernel.org> Cc: Chao Xie <chao.xie@marvell.com> Cc: Jason Cooper <jason@lakedaemon.net> Cc: Stefan Wahren <stefan.wahren@i2se.com> Cc: Andrew Bresticker <abrestic@chromium.org> Cc: Robert Jarzmik <robert.jarzmik@free.fr> Cc: Georgi Djakov <georgi.djakov@linaro.org> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com> Cc: Geert Uytterhoeven <geert+renesas@glider.be> Cc: Barry Song <baohua@kernel.org> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Viresh Kumar <viresh.linux@gmail.com> Cc: Gabriel FERNANDEZ <gabriel.fernandez@st.com> Cc: emilio@elopez.com.ar Cc: Peter De Schrijver <pdeschrijver@nvidia.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: Pawel Moll <pawel.moll@arm.com> Cc: Michal Simek <michal.simek@xilinx.com> [sboyd@codeaurora.org: s/clk/core/ in new function] Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 29 7月, 2015 2 次提交
-
-
由 Stephen Boyd 提交于
The recursive spinlock implementation trips up sparse and it complains that these functions have lock imbalances. That isn't really true though, so add some __acquires() and __releases() information so that sparse is quiet. drivers/clk/clk.c:116:22: warning: context imbalance in 'clk_enable_lock' - wrong count at exit drivers/clk/clk.c:141:9: warning: context imbalance in 'clk_enable_unlock' - unexpected unlock Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
由 Stephen Boyd 提交于
clk providers are using the consumer APIs to set min/max rates on the clock they're providing. To encourage clk providers to move away from the consumer APIs, add a provider API to set the min/max rate of a clock. The assumption is that this is done before the clock can be requested via clk_get() and that the clock rate is already within the boundaries of the min/max that's configured. Tested-by: NSudeep Holla <sudeep.holla@arm.com> Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-
- 28 7月, 2015 1 次提交
-
-
由 Boris Brezillon 提交于
Some determine_rate implementations are not returning an error when they failed to adapt the rate according to the rate request. Fix them so that they return an error instead of silently returning 0. Signed-off-by: NBoris Brezillon <boris.brezillon@free-electrons.com> CC: Jonathan Corbet <corbet@lwn.net> CC: Tony Lindgren <tony@atomide.com> CC: Ralf Baechle <ralf@linux-mips.org> CC: "Emilio López" <emilio@elopez.com.ar> CC: Maxime Ripard <maxime.ripard@free-electrons.com> Cc: Tero Kristo <t-kristo@ti.com> CC: Peter De Schrijver <pdeschrijver@nvidia.com> CC: Prashant Gaikwad <pgaikwad@nvidia.com> CC: Stephen Warren <swarren@wwwdotorg.org> CC: Thierry Reding <thierry.reding@gmail.com> CC: Alexandre Courbot <gnurou@gmail.com> CC: linux-doc@vger.kernel.org CC: linux-kernel@vger.kernel.org CC: linux-arm-kernel@lists.infradead.org CC: linux-omap@vger.kernel.org CC: linux-mips@linux-mips.org CC: linux-tegra@vger.kernel.org Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
-