From: Leo Yan <leo.yan@linaro.org>
To: Wei Xu <xuwei5@hisilicon.com>, Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@codeaurora.org>,
Guodong Xu <guodong.xu@linaro.org>,
Zhong Kaihua <zhongkaihua@huawei.com>,
Zhangfei Gao <zhangfei.gao@linaro.org>,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org
Cc: Leo Yan <leo.yan@linaro.org>
Subject: [PATCH v1 1/2] clk: Hi3660: change to register clock with CLK_OF_DECLARE
Date: Wed, 17 May 2017 22:46:31 +0800 [thread overview]
Message-ID: <1495032392-19102-2-git-send-email-leo.yan@linaro.org> (raw)
In-Reply-To: <1495032392-19102-1-git-send-email-leo.yan@linaro.org>
The timer will register into system at very early phase at kernel boot;
if timer needs to use clock, the clock should be get ready in function
of_clk_init() so later the timer driver probe can retrieve clock
successfully. This is finished in below flow on arm64:
start_kernel()
`-> time_init()
`-> of_clk_init(NULL) => register timer's clock
`-> clocksource_probe() => register timer
On Hi3660 the sp804 timer uses clock "osc32k", this clock is registered
as platform driver rather than CLK_OF_DECLARE method. As result, sp804
timer probe returns failure due if cannot bind clock properly. To fix
the failure, this patch is to change crgctrl clock registration from
platform driver to CLK_OF_DECLARE method so the clocks can be
registered ahead with function of_clk_init() and then timer driver can
use it.
In the clock driver clk-hi3660.c, it's pointless to mix clock
registration with platform driver mode and CLK_OF_DECLARE mode; this
patch changes all clocks registration to CLK_OF_DECLARE mode to make
code neat.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
drivers/clk/hisilicon/clk-hi3660.c | 48 ++++----------------------------------
1 file changed, 5 insertions(+), 43 deletions(-)
diff --git a/drivers/clk/hisilicon/clk-hi3660.c b/drivers/clk/hisilicon/clk-hi3660.c
index fd5ce7f..fc11719 100644
--- a/drivers/clk/hisilicon/clk-hi3660.c
+++ b/drivers/clk/hisilicon/clk-hi3660.c
@@ -465,6 +465,7 @@ static void hi3660_clk_iomcu_init(struct device_node *np)
ARRAY_SIZE(hi3660_iomcu_gate_sep_clks),
clk_data);
}
+CLK_OF_DECLARE(hi3660_clk_iomcu, "hisilicon,hi3660-iomcu", hi3660_clk_iomcu_init);
static void hi3660_clk_pmuctrl_init(struct device_node *np)
{
@@ -478,6 +479,7 @@ static void hi3660_clk_pmuctrl_init(struct device_node *np)
hisi_clk_register_gate(hi3660_pmu_gate_clks,
ARRAY_SIZE(hi3660_pmu_gate_clks), clk_data);
}
+CLK_OF_DECLARE(hi3660_clk_pmuctrl, "hisilicon,hi3660-pmuctrl", hi3660_clk_pmuctrl_init);
static void hi3660_clk_pctrl_init(struct device_node *np)
{
@@ -490,6 +492,7 @@ static void hi3660_clk_pctrl_init(struct device_node *np)
hisi_clk_register_gate(hi3660_pctrl_gate_clks,
ARRAY_SIZE(hi3660_pctrl_gate_clks), clk_data);
}
+CLK_OF_DECLARE(hi3660_clk_pctrl, "hisilicon,hi3660-pctrl", hi3660_clk_pctrl_init);
static void hi3660_clk_sctrl_init(struct device_node *np)
{
@@ -513,6 +516,7 @@ static void hi3660_clk_sctrl_init(struct device_node *np)
ARRAY_SIZE(hi3660_sctrl_divider_clks),
clk_data);
}
+CLK_OF_DECLARE(hi3660_clk_sctrl, "hisilicon,hi3660-sctrl", hi3660_clk_sctrl_init);
static void hi3660_clk_crgctrl_init(struct device_node *np)
{
@@ -547,46 +551,4 @@ static void hi3660_clk_crgctrl_init(struct device_node *np)
ARRAY_SIZE(hi3660_crgctrl_divider_clks),
clk_data);
}
-
-static const struct of_device_id hi3660_clk_match_table[] = {
- { .compatible = "hisilicon,hi3660-crgctrl",
- .data = hi3660_clk_crgctrl_init },
- { .compatible = "hisilicon,hi3660-pctrl",
- .data = hi3660_clk_pctrl_init },
- { .compatible = "hisilicon,hi3660-pmuctrl",
- .data = hi3660_clk_pmuctrl_init },
- { .compatible = "hisilicon,hi3660-sctrl",
- .data = hi3660_clk_sctrl_init },
- { .compatible = "hisilicon,hi3660-iomcu",
- .data = hi3660_clk_iomcu_init },
- { }
-};
-
-static int hi3660_clk_probe(struct platform_device *pdev)
-{
- struct device *dev = &pdev->dev;
- struct device_node *np = pdev->dev.of_node;
- void (*init_func)(struct device_node *np);
-
- init_func = of_device_get_match_data(dev);
- if (!init_func)
- return -ENODEV;
-
- init_func(np);
-
- return 0;
-}
-
-static struct platform_driver hi3660_clk_driver = {
- .probe = hi3660_clk_probe,
- .driver = {
- .name = "hi3660-clk",
- .of_match_table = hi3660_clk_match_table,
- },
-};
-
-static int __init hi3660_clk_init(void)
-{
- return platform_driver_register(&hi3660_clk_driver);
-}
-core_initcall(hi3660_clk_init);
+CLK_OF_DECLARE(hi3660_clk_crgctrl, "hisilicon,hi3660-crgctrl", hi3660_clk_crgctrl_init);
--
1.9.1
next prev parent reply other threads:[~2017-05-17 14:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-17 14:46 [PATCH v1 0/2] Hi3660: enable sp804 timer Leo Yan
2017-05-17 14:46 ` Leo Yan [this message]
2017-05-17 14:46 ` [PATCH v1 2/2] arm64: dts: add sp804 timer node for Hi3660 Leo Yan
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=1495032392-19102-2-git-send-email-leo.yan@linaro.org \
--to=leo.yan@linaro.org \
--cc=catalin.marinas@arm.com \
--cc=devicetree@vger.kernel.org \
--cc=guodong.xu@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mturquette@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=sboyd@codeaurora.org \
--cc=will.deacon@arm.com \
--cc=xuwei5@hisilicon.com \
--cc=zhangfei.gao@linaro.org \
--cc=zhongkaihua@huawei.com \
/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;
as well as URLs for NNTP newsgroup(s).