From: sboyd@codeaurora.org (Stephen Boyd)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] clk: mvebu: dynamically allocate resources in Armada CP110 system controller
Date: Wed, 24 Aug 2016 17:16:13 -0700 [thread overview]
Message-ID: <20160825001613.GQ19826@codeaurora.org> (raw)
In-Reply-To: <1471933609-8456-3-git-send-email-mw@semihalf.com>
On 08/23, Marcin Wojtas wrote:
> Original commit, which added support for Armada CP110 system controller
> used global variables for storing all clock information. It worked
> fine for Armada 7k SoC, with single CP110 block. After dual-CP110 Armada 8k
> was introduced, the data got overwritten and corrupted.
>
> This patch fixes the issue by allocating resources dynamically in the
> driver probe and storing it as platform drvdata.
>
> Fixes: d3da3eaef7f4 ("clk: mvebu: new driver for Armada CP110 system ...")
>
Please drop the space between fixes tag and the signoff.
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> ---
> drivers/clk/mvebu/cp110-system-controller.c | 29 ++++++++++++++++++++---------
> 1 file changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/clk/mvebu/cp110-system-controller.c b/drivers/clk/mvebu/cp110-system-controller.c
> index 0835e1d..2bd87d2 100644
> --- a/drivers/clk/mvebu/cp110-system-controller.c
> +++ b/drivers/clk/mvebu/cp110-system-controller.c
> @@ -81,13 +81,6 @@ enum {
> #define CP110_GATE_EIP150 25
> #define CP110_GATE_EIP197 26
>
> -static struct clk *cp110_clks[CP110_CLK_NUM];
> -
> -static struct clk_onecell_data cp110_clk_data = {
> - .clks = cp110_clks,
> - .clk_num = CP110_CLK_NUM,
> -};
> -
> struct cp110_gate_clk {
> struct clk_hw hw;
> struct regmap *regmap;
> @@ -195,7 +188,8 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev)
> struct regmap *regmap;
> struct device_node *np = pdev->dev.of_node;
> const char *ppv2_name, *apll_name, *core_name, *eip_name, *nand_name;
> - struct clk *clk;
> + struct clk_onecell_data *cp110_clk_data;
> + struct clk *clk, **cp110_clks;
> u32 nand_clk_ctrl;
> int i, ret;
>
> @@ -208,6 +202,20 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev)
> if (ret)
> return ret;
>
> + cp110_clks = devm_kcalloc(&pdev->dev, sizeof(struct clk *),
> + CP110_CLK_NUM, GFP_KERNEL);
> + if (IS_ERR(cp110_clks))
Doesn't that return NULL on error?
> + return PTR_ERR(cp110_clks);
> +
> + cp110_clk_data = devm_kzalloc(&pdev->dev,
> + sizeof(struct clk_onecell_data),
sizeof(*cp110_clk_data) please
> + GFP_KERNEL);
> + if (IS_ERR(cp110_clk_data))
Doesn't that return NULL on error?
> + return PTR_ERR(cp110_clk_data);
> +
> + cp110_clk_data->clks = cp110_clks;
> + cp110_clk_data->clk_num = CP110_CLK_NUM;
> +
> /* Register the APLL which is the root of the clk tree */
> of_property_read_string_index(np, "core-clock-output-names",
> CP110_CORE_APLL, &apll_name);
> @@ -335,10 +343,12 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev)
> cp110_clks[CP110_MAX_CORE_CLOCKS + i] = clk;
> }
>
> - ret = of_clk_add_provider(np, cp110_of_clk_get, &cp110_clk_data);
> + ret = of_clk_add_provider(np, cp110_of_clk_get, cp110_clk_data);
It would be nice if this could be converted to
of_clk_add_hw_provider().
> if (ret)
> goto fail_clk_add;
>
> + platform_set_drvdata(pdev, cp110_clks);
> +
> return 0;
>
> fail_clk_add:
> @@ -365,6 +375,7 @@ fail0:
>
> static int cp110_syscon_clk_remove(struct platform_device *pdev)
> {
> + struct clk **cp110_clks = platform_get_drvdata(pdev);
Is this variable unused now?
> int i;
>
> of_clk_del_provider(pdev->dev.of_node);
> --
> 1.8.3.1
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2016-08-25 0:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-23 6:26 [PATCH 0/2] Armada 7k/8k CP110 system controller fixes Marcin Wojtas
2016-08-23 6:26 ` [PATCH 1/2] clk: mvebu: set flags in CP110 gate clock Marcin Wojtas
2016-08-23 14:16 ` Andrew Lunn
2016-08-24 8:28 ` Marcin Wojtas
2016-08-25 0:13 ` Stephen Boyd
2016-08-30 13:10 ` Thomas Petazzoni
2016-08-30 13:34 ` Marcin Wojtas
2016-08-23 6:26 ` [PATCH 2/2] clk: mvebu: dynamically allocate resources in Armada CP110 system controller Marcin Wojtas
2016-08-25 0:16 ` Stephen Boyd [this message]
2016-08-30 15:31 ` Marcin Wojtas
2016-08-30 18:43 ` Stephen Boyd
2016-08-30 14:15 ` Thomas Petazzoni
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=20160825001613.GQ19826@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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).