From: Stephen Boyd <sboyd@codeaurora.org>
To: "Igal.Liberman" <igal.liberman@freescale.com>
Cc: scottwood@freescale.com, mturquette@linaro.org,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [v4] clk: qoriq: Add support for the FMan clock
Date: Wed, 6 May 2015 00:02:47 -0700 [thread overview]
Message-ID: <20150506070247.GA27050@codeaurora.org> (raw)
In-Reply-To: <1429185945-6949-1-git-send-email-igal.liberman@freescale.com>
On 04/16, Igal.Liberman wrote:
> From: Igal Liberman <Igal.Liberman@freescale.com>
>
> This patch depends on the following patches:
> https://patchwork.ozlabs.org/patch/461151/
> https://patchwork.ozlabs.org/patch/461155/
>
> This patche is described by the following binding document update:
> https://patchwork.ozlabs.org/patch/461166/
>
> v4: - Replaced "fsl,b4-device-config" with
> "fsl,b4860/b4420-device-config"
> - Updated error messages
>
> v3: Updated commit message
>
> v2: - Added clock maintainers
> - Cached FMan clock parent during initialization
> - Register the clock after checking if the hardware exists
> - updated error messages
>
> Signed-off-by: Igal Liberman <Igal.Liberman@freescale.com>
> ---
> drivers/clk/clk-qoriq.c | 213 +++++++++++++++++++++++++++++++++++++++++++++++
If I try to compile this on ARM (the Kconfig for this file shows
that ARM is possible) then it fails with this error message:
CC drivers/clk/clk-qoriq.o
drivers/clk/clk-qoriq.c:22:26:
fatal error: asm/fsl_guts.h: No such file or directory
compilation terminated.
> 1 file changed, 213 insertions(+)
>
> diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
> index cda90a9..871c6df 100644
> --- a/drivers/clk/clk-qoriq.c
> +++ b/drivers/clk/clk-qoriq.c
> +
> +static u8 get_fm_clk_parent(struct clk_hw *hw)
> +{
> + return hw->init->flags;
> +}
This is very confusing. How is flags the parent index? Please
don't abuse framework data structures. I'm actually thinking we
should replace hw->init with NULL during clk_register() to avoid
this kind of abuse...
> +
> +static const struct clk_ops fm_clk_ops = {
> + .get_parent = get_fm_clk_parent,
> +};
> +
> +static int get_fm_clk_idx(int fm_id, int *fm_clk_idx)
> +{
> + struct ccsr_guts __iomem *guts_regs = NULL;
Unnecessary initialization to NULL. Also, marking a structure as
__iomem is odd. Why do we need to use a struct to figure out
offsets for registers? Why not just use #defines? That would
probably also make it easy to avoid the asm include here.
> + struct device_node *guts;
> + uint32_t reg = 0;
s/uint32_t/u32/
Also unnecessary initialization.
> + int clk_src = 0;
> +
> + guts = of_find_matching_node(NULL, guts_device_ids);
> + if (!guts) {
> + pr_err("%s(): could not find GUTS node\n", __func__);
> + return -ENODEV;
> + }
> +
> + guts_regs = of_iomap(guts, 0);
> + of_node_put(guts);
> + if (!guts_regs) {
> + pr_err("%s(): ioremap of GUTS node failed\n", __func__);
> + return -ENODEV;
> + }
[...]
> +
> +static void __init fm_mux_init(struct device_node *np)
> +{
> + struct clk_init_data *init;
> + struct clk_hw *hw;
> + int count, i, ret, fm_id = 0, fm_clk_idx;
> + struct clk *clk;
> +
> + init = kmalloc((sizeof(struct clk_init_data)), GFP_KERNEL);
Please remove extra parens and do sizeof(*init) so that we don't
have to care about the type matching.
> + if (!init)
> + return;
> +
> + /* get the input clock source count */
> + count = of_property_count_strings(np, "clock-names");
> + if (count < 0) {
> + pr_err("%s(): %s: get clock count error\n",
> + __func__, np->name);
> + goto err_init;
> + }
> +
> + init->parent_names = kmalloc((sizeof(char *) * count), GFP_KERNEL);
Use kcalloc please
> + if (!init->parent_names)
> + goto err_init;
> +
> + for (i = 0; i < count; i++)
> + init->parent_names[i] = of_clk_get_parent_name(np, i);
> +
> + hw = kzalloc(sizeof(*hw), GFP_KERNEL);
> + if (!hw)
> + goto err_name;
> +
> + ret = of_property_read_string_index(np, "clock-output-names", 0,
> + &init->name);
> + if (ret) {
> + pr_err("%s(): %s: read clock names error\n",
> + __func__, np->name);
> + goto err_clk_hw;
> + }
> +
> + if (!strcmp(np->name, "fm1-clk-mux"))
> + fm_id = 1;
> +
> + ret = get_fm_clk_idx(fm_id, &fm_clk_idx);
> + if (ret)
> + goto err_clk_hw;
> +
> + init->ops = &fm_clk_ops;
> + init->num_parents = count;
> + /* Save clock source index */
> + init->flags = fm_clk_idx;
Don't do this.
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2015-05-06 7:02 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-16 12:05 [v4] clk: qoriq: Add support for the FMan clock Igal.Liberman
2015-05-06 7:02 ` Stephen Boyd [this message]
2015-05-06 7:34 ` Scott Wood
2015-05-06 22:25 ` Stephen Boyd
2015-05-06 23:01 ` Scott Wood
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=20150506070247.GA27050@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=igal.liberman@freescale.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mturquette@linaro.org \
--cc=scottwood@freescale.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).