From: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
To: Doug Anderson <dianders@chromium.org>,
Tomasz Figa <t.figa@samsung.com>,
Mike Turquette <mturquette@linaro.org>,
Kukjin Kim <kgene.kim@samsung.com>
Cc: olof@lixom.net, linux-samsung-soc@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] clk: exynos5420: Keep aclk66_peric enabled during boot
Date: Fri, 30 May 2014 16:00:21 +0200 [thread overview]
Message-ID: <53888EF5.5090800@collabora.co.uk> (raw)
In-Reply-To: <1401398496-4624-1-git-send-email-dianders@chromium.org>
Hello Doug,
On 05/29/2014 11:21 PM, Doug Anderson wrote:
> Right now if you've got earlyprintk enabled on exynos5420-peach-pit
> then you'll get a hang on boot. Here's why:
>
> 1. The i2c-s3c2410 driver will probe at subsys_initcall. It will
> enable its clock and disable it. This is the clock "i2c2".
> 2. The act of disabling "i2c2" will disable its parents. In this case
> the parent is "aclk66_peric". There are no other children of
> "aclk66_peric" officially enabled, so "aclk66_peric" will be turned
> off (despite being CLK_IGNORE_UNUSED, but that's by design).
> 3. The next time you try to earlyprintk you'll do so without the UART
> clock enabled. That's because the UART clocks are also children of
> "aclk66_peric". You'll hang.
>
> There's no good place to put a clock enable for earlyprintk, which is
> handled by a bunch of assembly code. The best we can do is to handle
> this in the clock driver.
>
> Signed-off-by: Doug Anderson <dianders@chromium.org>
> ---
> drivers/clk/samsung/clk-exynos5420.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
I tested your patch and it solves the issue for me, so feel free to add
Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Just one trivial comment below:
> diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
> index 9d7d7ee..1e586be 100644
> --- a/drivers/clk/samsung/clk-exynos5420.c
> +++ b/drivers/clk/samsung/clk-exynos5420.c
> @@ -1172,11 +1172,17 @@ static struct of_device_id ext_clk_match[] __initdata = {
> { },
> };
>
> +/* Keep these clocks on until late_initcall */
> +static const char *boot_clocks[] __initconst = {
> + "aclk66_peric",
> +};
> +
> /* register exynos5420 clocks */
> static void __init exynos5x_clk_init(struct device_node *np,
> enum exynos5x_soc soc)
> {
> struct samsung_clk_provider *ctx;
> + int i;
>
> if (np) {
> reg_base = of_iomap(np, 0);
> @@ -1226,6 +1232,12 @@ static void __init exynos5x_clk_init(struct device_node *np,
> }
>
> exynos5420_clk_sleep_init();
> +
> + for (i = 0; i < ARRAY_SIZE(boot_clocks); i++) {
> + struct clk *to_enable = __clk_lookup(boot_clocks[i]);
> +
> + clk_prepare_enable(to_enable);
> + }
> }
>
> static void __init exynos5420_clk_init(struct device_node *np)
> @@ -1239,3 +1251,15 @@ static void __init exynos5800_clk_init(struct device_node *np)
> exynos5x_clk_init(np, EXYNOS5800);
> }
> CLK_OF_DECLARE(exynos5800_clk, "samsung,exynos5800-clock", exynos5800_clk_init);
> +
> +static int __init exynos5420_clk_late_init(void)
> +{
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(boot_clocks); i++) {
> + struct clk *to_disable = __clk_lookup(boot_clocks[i]);
> +
> + clk_disable_unprepare(to_disable);
> + }
> +}
> +late_initcall(exynos5420_clk_late_init);
>
You should return 0 here.
Best regards,
Javier
WARNING: multiple messages have this Message-ID (diff)
From: javier.martinez@collabora.co.uk (Javier Martinez Canillas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] clk: exynos5420: Keep aclk66_peric enabled during boot
Date: Fri, 30 May 2014 16:00:21 +0200 [thread overview]
Message-ID: <53888EF5.5090800@collabora.co.uk> (raw)
In-Reply-To: <1401398496-4624-1-git-send-email-dianders@chromium.org>
Hello Doug,
On 05/29/2014 11:21 PM, Doug Anderson wrote:
> Right now if you've got earlyprintk enabled on exynos5420-peach-pit
> then you'll get a hang on boot. Here's why:
>
> 1. The i2c-s3c2410 driver will probe at subsys_initcall. It will
> enable its clock and disable it. This is the clock "i2c2".
> 2. The act of disabling "i2c2" will disable its parents. In this case
> the parent is "aclk66_peric". There are no other children of
> "aclk66_peric" officially enabled, so "aclk66_peric" will be turned
> off (despite being CLK_IGNORE_UNUSED, but that's by design).
> 3. The next time you try to earlyprintk you'll do so without the UART
> clock enabled. That's because the UART clocks are also children of
> "aclk66_peric". You'll hang.
>
> There's no good place to put a clock enable for earlyprintk, which is
> handled by a bunch of assembly code. The best we can do is to handle
> this in the clock driver.
>
> Signed-off-by: Doug Anderson <dianders@chromium.org>
> ---
> drivers/clk/samsung/clk-exynos5420.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
I tested your patch and it solves the issue for me, so feel free to add
Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Just one trivial comment below:
> diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
> index 9d7d7ee..1e586be 100644
> --- a/drivers/clk/samsung/clk-exynos5420.c
> +++ b/drivers/clk/samsung/clk-exynos5420.c
> @@ -1172,11 +1172,17 @@ static struct of_device_id ext_clk_match[] __initdata = {
> { },
> };
>
> +/* Keep these clocks on until late_initcall */
> +static const char *boot_clocks[] __initconst = {
> + "aclk66_peric",
> +};
> +
> /* register exynos5420 clocks */
> static void __init exynos5x_clk_init(struct device_node *np,
> enum exynos5x_soc soc)
> {
> struct samsung_clk_provider *ctx;
> + int i;
>
> if (np) {
> reg_base = of_iomap(np, 0);
> @@ -1226,6 +1232,12 @@ static void __init exynos5x_clk_init(struct device_node *np,
> }
>
> exynos5420_clk_sleep_init();
> +
> + for (i = 0; i < ARRAY_SIZE(boot_clocks); i++) {
> + struct clk *to_enable = __clk_lookup(boot_clocks[i]);
> +
> + clk_prepare_enable(to_enable);
> + }
> }
>
> static void __init exynos5420_clk_init(struct device_node *np)
> @@ -1239,3 +1251,15 @@ static void __init exynos5800_clk_init(struct device_node *np)
> exynos5x_clk_init(np, EXYNOS5800);
> }
> CLK_OF_DECLARE(exynos5800_clk, "samsung,exynos5800-clock", exynos5800_clk_init);
> +
> +static int __init exynos5420_clk_late_init(void)
> +{
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(boot_clocks); i++) {
> + struct clk *to_disable = __clk_lookup(boot_clocks[i]);
> +
> + clk_disable_unprepare(to_disable);
> + }
> +}
> +late_initcall(exynos5420_clk_late_init);
>
You should return 0 here.
Best regards,
Javier
next prev parent reply other threads:[~2014-05-30 14:00 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-29 21:21 [PATCH] clk: exynos5420: Keep aclk66_peric enabled during boot Doug Anderson
2014-05-29 21:21 ` Doug Anderson
2014-05-29 22:29 ` Mike Turquette
2014-05-29 22:29 ` Mike Turquette
2014-05-29 22:29 ` Mike Turquette
2014-05-30 5:02 ` Tomasz Figa
2014-05-30 5:02 ` Tomasz Figa
2014-05-30 16:28 ` Doug Anderson
2014-05-30 16:28 ` Doug Anderson
2014-05-30 14:00 ` Javier Martinez Canillas [this message]
2014-05-30 14:00 ` Javier Martinez Canillas
2014-05-30 16:29 ` Doug Anderson
2014-05-30 16:29 ` Doug Anderson
2014-05-30 16:32 ` [PATCH v2] " Doug Anderson
2014-05-30 16:32 ` Doug Anderson
2014-06-05 18:48 ` Doug Anderson
2014-06-05 18:48 ` Doug Anderson
2014-06-05 19:14 ` Tomasz Figa
2014-06-05 19:14 ` Tomasz Figa
2014-06-05 19:14 ` Tomasz Figa
2014-06-05 19:22 ` Doug Anderson
2014-06-05 19:22 ` Doug Anderson
2014-06-05 19:31 ` Tomasz Figa
2014-06-05 19:31 ` Tomasz Figa
2014-06-05 19:31 ` Tomasz Figa
2014-06-05 20:10 ` Doug Anderson
2014-06-05 20:10 ` Doug Anderson
2014-06-05 20:42 ` Doug Anderson
2014-06-05 20:42 ` Doug Anderson
2014-06-05 20:35 ` [PATCH v3] clk: exynos5420: Remove aclk66_peric from the clock tree description Doug Anderson
2014-06-05 20:35 ` Doug Anderson
2014-06-05 22:26 ` Tomasz Figa
2014-06-05 22:26 ` Tomasz Figa
2014-06-06 23:41 ` Mike Turquette
2014-06-06 23:41 ` Mike Turquette
2014-06-09 18:56 ` Doug Anderson
2014-06-09 18:56 ` Doug Anderson
2014-06-06 0:03 ` Mike Turquette
2014-06-06 0:03 ` Mike Turquette
2014-06-06 0:03 ` Mike Turquette
2014-06-06 0:46 ` Doug Anderson
2014-06-06 0:46 ` Doug Anderson
2014-06-06 22:31 ` Mike Turquette
2014-06-06 22:31 ` Mike Turquette
2014-06-06 23:19 ` Doug Anderson
2014-06-06 23:19 ` Doug Anderson
2014-06-06 23:19 ` Doug Anderson
2014-06-30 13:48 ` Tomasz Figa
2014-06-30 13:48 ` Tomasz Figa
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=53888EF5.5090800@collabora.co.uk \
--to=javier.martinez@collabora.co.uk \
--cc=dianders@chromium.org \
--cc=kgene.kim@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=mturquette@linaro.org \
--cc=olof@lixom.net \
--cc=t.figa@samsung.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.