From: Prashant Gaikwad <pgaikwad@nvidia.com>
To: Peter De Schrijver <pdeschrijver@nvidia.com>
Cc: Stephen Warren <swarren@nvidia.com>,
Mike Turquette <mturquette@linaro.org>,
Joseph Lo <josephl@nvidia.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] clk: tegra: Add missing spinlock for hclk and pclk
Date: Fri, 8 Feb 2013 10:53:27 +0530 [thread overview]
Message-ID: <51148BCF.8020401@nvidia.com> (raw)
In-Reply-To: <1360255064-28833-1-git-send-email-pdeschrijver@nvidia.com>
On Thursday 07 February 2013 10:07 PM, Peter De Schrijver wrote:
> The hclk and pclk clocks are controlled by the same register. Hence a lock is
> required to avoid corruption.
>
> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
Reviewed-by: Prashant Gaikwad <pgaikwad@nvidia.com>
> ---
> drivers/clk/tegra/clk-tegra20.c | 11 +++++++----
> drivers/clk/tegra/clk-tegra30.c | 11 +++++++----
> 2 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c
> index 5d41569..4612b2e 100644
> --- a/drivers/clk/tegra/clk-tegra20.c
> +++ b/drivers/clk/tegra/clk-tegra20.c
> @@ -194,6 +194,7 @@ static void __iomem *clk_base;
> static void __iomem *pmc_base;
>
> static DEFINE_SPINLOCK(pll_div_lock);
> +static DEFINE_SPINLOCK(sysrate_lock);
>
> #define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \
> _clk_num, _regs, _gate_flags, _clk_id) \
> @@ -768,19 +769,21 @@ static void tegra20_super_clk_init(void)
>
> /* HCLK */
> clk = clk_register_divider(NULL, "hclk_div", "sclk", 0,
> - clk_base + CLK_SYSTEM_RATE, 4, 2, 0, NULL);
> + clk_base + CLK_SYSTEM_RATE, 4, 2, 0,
> + &sysrate_lock);
> clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT,
> clk_base + CLK_SYSTEM_RATE, 7,
> - CLK_GATE_SET_TO_DISABLE, NULL);
> + CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
> clk_register_clkdev(clk, "hclk", NULL);
> clks[hclk] = clk;
>
> /* PCLK */
> clk = clk_register_divider(NULL, "pclk_div", "hclk", 0,
> - clk_base + CLK_SYSTEM_RATE, 0, 2, 0, NULL);
> + clk_base + CLK_SYSTEM_RATE, 0, 2, 0,
> + &sysrate_lock);
> clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT,
> clk_base + CLK_SYSTEM_RATE, 3,
> - CLK_GATE_SET_TO_DISABLE, NULL);
> + CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
> clk_register_clkdev(clk, "pclk", NULL);
> clks[pclk] = clk;
>
> diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c
> index d169ef0..c5415ce 100644
> --- a/drivers/clk/tegra/clk-tegra30.c
> +++ b/drivers/clk/tegra/clk-tegra30.c
> @@ -275,6 +275,7 @@ static DEFINE_SPINLOCK(clk_out_lock);
> static DEFINE_SPINLOCK(pll_div_lock);
> static DEFINE_SPINLOCK(cml_lock);
> static DEFINE_SPINLOCK(pll_d_lock);
> +static DEFINE_SPINLOCK(sysrate_lock);
>
> #define TEGRA_INIT_DATA_MUX(_name, _con_id, _dev_id, _parents, _offset, \
> _clk_num, _regs, _gate_flags, _clk_id) \
> @@ -1348,19 +1349,21 @@ static void __init tegra30_super_clk_init(void)
>
> /* HCLK */
> clk = clk_register_divider(NULL, "hclk_div", "sclk", 0,
> - clk_base + SYSTEM_CLK_RATE, 4, 2, 0, NULL);
> + clk_base + SYSTEM_CLK_RATE, 4, 2, 0,
> + &sysrate_lock);
> clk = clk_register_gate(NULL, "hclk", "hclk_div", CLK_SET_RATE_PARENT,
> clk_base + SYSTEM_CLK_RATE, 7,
> - CLK_GATE_SET_TO_DISABLE, NULL);
> + CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
> clk_register_clkdev(clk, "hclk", NULL);
> clks[hclk] = clk;
>
> /* PCLK */
> clk = clk_register_divider(NULL, "pclk_div", "hclk", 0,
> - clk_base + SYSTEM_CLK_RATE, 0, 2, 0, NULL);
> + clk_base + SYSTEM_CLK_RATE, 0, 2, 0,
> + &sysrate_lock);
> clk = clk_register_gate(NULL, "pclk", "pclk_div", CLK_SET_RATE_PARENT,
> clk_base + SYSTEM_CLK_RATE, 3,
> - CLK_GATE_SET_TO_DISABLE, NULL);
> + CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
> clk_register_clkdev(clk, "pclk", NULL);
> clks[pclk] = clk;
>
prev parent reply other threads:[~2013-02-08 5:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 16:37 [PATCH] clk: tegra: Add missing spinlock for hclk and pclk Peter De Schrijver
2013-02-07 17:49 ` Mike Turquette
2013-02-07 19:14 ` Stephen Warren
2013-02-08 5:23 ` Prashant Gaikwad [this message]
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=51148BCF.8020401@nvidia.com \
--to=pgaikwad@nvidia.com \
--cc=josephl@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mturquette@linaro.org \
--cc=pdeschrijver@nvidia.com \
--cc=swarren@nvidia.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.