From: Stephen Boyd <sboyd@kernel.org>
To: Dong Aisheng <aisheng.dong@nxp.com>, linux-clk@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, mturquette@baylibre.com,
shawnguo@kernel.org, fabio.estevam@nxp.com, linux-imx@nxp.com,
kernel@pengutronix.de, Dong Aisheng <aisheng.dong@nxp.com>
Subject: Re: [PATCH V4 03/11] clk: imx: scu: add two cells binding support
Date: Fri, 06 Sep 2019 10:06:42 -0700 [thread overview]
Message-ID: <20190906170643.B310F20578@mail.kernel.org> (raw)
In-Reply-To: <1566299605-15641-4-git-send-email-aisheng.dong@nxp.com>
Quoting Dong Aisheng (2019-08-20 04:13:17)
> diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c
> index 5e2903e..1ad3f2a 100644
> --- a/drivers/clk/imx/clk-imx8qxp.c
> +++ b/drivers/clk/imx/clk-imx8qxp.c
> @@ -134,7 +134,12 @@ static int imx8qxp_clk_probe(struct platform_device *pdev)
> i, PTR_ERR(clks[i]));
> }
>
> - return of_clk_add_hw_provider(ccm_node, of_clk_hw_onecell_get, clk_data);
> + if (clock_cells == 2)
Can you just read this from the DT node again instead of having a global
variable called "clock_cells" for this?
> + ret = of_clk_add_hw_provider(ccm_node, imx_scu_of_clk_src_get, imx_scu_clks);
> + else
> + ret = of_clk_add_hw_provider(ccm_node, of_clk_hw_onecell_get, clk_data);
> +
> + return ret;
> }
>
> static const struct of_device_id imx8qxp_match[] = {
> diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c
> index fbef740..48bfb08 100644
> --- a/drivers/clk/imx/clk-scu.c
> +++ b/drivers/clk/imx/clk-scu.c
> @@ -16,6 +19,21 @@
> #define IMX_SIP_SET_CPUFREQ 0x00
>
> static struct imx_sc_ipc *ccm_ipc_handle;
> +struct device_node *pd_np;
> +u32 clock_cells;
> +
> +struct imx_scu_clk_node {
> + const char *name;
> + u32 rsrc;
> + u8 clk_type;
> + const char * const *parents;
> + int num_parents;
> +
> + struct clk_hw *hw;
> + struct list_head node;
> +};
> +
> +struct list_head imx_scu_clks[IMX_SC_R_LAST];
>
> /*
> * struct clk_scu - Description of one SCU clock
> @@ -128,9 +146,29 @@ static inline struct clk_scu *to_clk_scu(struct clk_hw *hw)
> return container_of(hw, struct clk_scu, hw);
> }
>
> -int imx_clk_scu_init(void)
> +int imx_clk_scu_init(struct device_node *np)
> {
> - return imx_scu_get_handle(&ccm_ipc_handle);
> + struct platform_device *pd_dev;
> + int ret, i;
> +
> + ret = imx_scu_get_handle(&ccm_ipc_handle);
> + if (ret)
> + return ret;
> +
> + if (of_property_read_u32(np, "#clock-cells", &clock_cells))
> + return -EINVAL;
> +
> + if (clock_cells == 2) {
> + for (i = 0; i < IMX_SC_R_LAST; i++)
> + INIT_LIST_HEAD(&imx_scu_clks[i]);
> +
> + pd_np = of_find_compatible_node(NULL, NULL, "fsl,scu-pd");
> + pd_dev = of_find_device_by_node(pd_np);
> + if (!pd_dev || !device_is_bound(&pd_dev->dev))
> + return -EPROBE_DEFER;
Do you need to put some nodes here with of_node_put() one failure or
when they're done being used?
> + }
> +
> + return 0;
> }
>
> /*
> @@ -387,3 +425,99 @@ struct clk_hw *__imx_clk_scu(const char *name, const char * const *parents,
[...]
> +
> +struct clk_hw *imx_clk_scu_alloc_dev(const char *name,
> + const char * const *parents,
> + int num_parents, u32 rsrc_id, u8 clk_type)
> +{
> + struct imx_scu_clk_node clk = {
> + .name = name,
> + .rsrc = rsrc_id,
> + .clk_type = clk_type,
> + .parents = parents,
> + .num_parents = num_parents,
> + };
> + struct platform_device *pdev;
> + int ret;
> +
> + pdev = platform_device_alloc(name, PLATFORM_DEVID_NONE);
> + if (!pdev) {
> + pr_err("%s: failed to allocate scu clk dev rsrc %d type %d\n",
> + name, rsrc_id, clk_type);
> + return ERR_PTR(-ENOMEM);
> + }
> +
> + ret = platform_device_add_data(pdev, &clk, sizeof(clk));
> + if (ret) {
> + platform_device_put(pdev);
> + return ERR_PTR(-ENOMEM);
Why not ERR_PTR(ret)?
> + }
> +
> + pdev->driver_override = "imx-scu-clk";
> +
> + ret = imx_clk_scu_attach_pd(&pdev->dev, rsrc_id);
> + if (ret)
> + pr_warn("%s: failed to attached the power domain %d\n",
> + name, ret);
> +
> + platform_device_add(pdev);
> +
> + /* For API backwards compatiblilty, simply return NULL for success */
> + return NULL;
> +}
WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd@kernel.org>
To: Dong Aisheng <aisheng.dong@nxp.com>, linux-clk@vger.kernel.org
Cc: Dong Aisheng <aisheng.dong@nxp.com>,
mturquette@baylibre.com, linux-imx@nxp.com,
kernel@pengutronix.de, fabio.estevam@nxp.com,
shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V4 03/11] clk: imx: scu: add two cells binding support
Date: Fri, 06 Sep 2019 10:06:42 -0700 [thread overview]
Message-ID: <20190906170643.B310F20578@mail.kernel.org> (raw)
In-Reply-To: <1566299605-15641-4-git-send-email-aisheng.dong@nxp.com>
Quoting Dong Aisheng (2019-08-20 04:13:17)
> diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c
> index 5e2903e..1ad3f2a 100644
> --- a/drivers/clk/imx/clk-imx8qxp.c
> +++ b/drivers/clk/imx/clk-imx8qxp.c
> @@ -134,7 +134,12 @@ static int imx8qxp_clk_probe(struct platform_device *pdev)
> i, PTR_ERR(clks[i]));
> }
>
> - return of_clk_add_hw_provider(ccm_node, of_clk_hw_onecell_get, clk_data);
> + if (clock_cells == 2)
Can you just read this from the DT node again instead of having a global
variable called "clock_cells" for this?
> + ret = of_clk_add_hw_provider(ccm_node, imx_scu_of_clk_src_get, imx_scu_clks);
> + else
> + ret = of_clk_add_hw_provider(ccm_node, of_clk_hw_onecell_get, clk_data);
> +
> + return ret;
> }
>
> static const struct of_device_id imx8qxp_match[] = {
> diff --git a/drivers/clk/imx/clk-scu.c b/drivers/clk/imx/clk-scu.c
> index fbef740..48bfb08 100644
> --- a/drivers/clk/imx/clk-scu.c
> +++ b/drivers/clk/imx/clk-scu.c
> @@ -16,6 +19,21 @@
> #define IMX_SIP_SET_CPUFREQ 0x00
>
> static struct imx_sc_ipc *ccm_ipc_handle;
> +struct device_node *pd_np;
> +u32 clock_cells;
> +
> +struct imx_scu_clk_node {
> + const char *name;
> + u32 rsrc;
> + u8 clk_type;
> + const char * const *parents;
> + int num_parents;
> +
> + struct clk_hw *hw;
> + struct list_head node;
> +};
> +
> +struct list_head imx_scu_clks[IMX_SC_R_LAST];
>
> /*
> * struct clk_scu - Description of one SCU clock
> @@ -128,9 +146,29 @@ static inline struct clk_scu *to_clk_scu(struct clk_hw *hw)
> return container_of(hw, struct clk_scu, hw);
> }
>
> -int imx_clk_scu_init(void)
> +int imx_clk_scu_init(struct device_node *np)
> {
> - return imx_scu_get_handle(&ccm_ipc_handle);
> + struct platform_device *pd_dev;
> + int ret, i;
> +
> + ret = imx_scu_get_handle(&ccm_ipc_handle);
> + if (ret)
> + return ret;
> +
> + if (of_property_read_u32(np, "#clock-cells", &clock_cells))
> + return -EINVAL;
> +
> + if (clock_cells == 2) {
> + for (i = 0; i < IMX_SC_R_LAST; i++)
> + INIT_LIST_HEAD(&imx_scu_clks[i]);
> +
> + pd_np = of_find_compatible_node(NULL, NULL, "fsl,scu-pd");
> + pd_dev = of_find_device_by_node(pd_np);
> + if (!pd_dev || !device_is_bound(&pd_dev->dev))
> + return -EPROBE_DEFER;
Do you need to put some nodes here with of_node_put() one failure or
when they're done being used?
> + }
> +
> + return 0;
> }
>
> /*
> @@ -387,3 +425,99 @@ struct clk_hw *__imx_clk_scu(const char *name, const char * const *parents,
[...]
> +
> +struct clk_hw *imx_clk_scu_alloc_dev(const char *name,
> + const char * const *parents,
> + int num_parents, u32 rsrc_id, u8 clk_type)
> +{
> + struct imx_scu_clk_node clk = {
> + .name = name,
> + .rsrc = rsrc_id,
> + .clk_type = clk_type,
> + .parents = parents,
> + .num_parents = num_parents,
> + };
> + struct platform_device *pdev;
> + int ret;
> +
> + pdev = platform_device_alloc(name, PLATFORM_DEVID_NONE);
> + if (!pdev) {
> + pr_err("%s: failed to allocate scu clk dev rsrc %d type %d\n",
> + name, rsrc_id, clk_type);
> + return ERR_PTR(-ENOMEM);
> + }
> +
> + ret = platform_device_add_data(pdev, &clk, sizeof(clk));
> + if (ret) {
> + platform_device_put(pdev);
> + return ERR_PTR(-ENOMEM);
Why not ERR_PTR(ret)?
> + }
> +
> + pdev->driver_override = "imx-scu-clk";
> +
> + ret = imx_clk_scu_attach_pd(&pdev->dev, rsrc_id);
> + if (ret)
> + pr_warn("%s: failed to attached the power domain %d\n",
> + name, ret);
> +
> + platform_device_add(pdev);
> +
> + /* For API backwards compatiblilty, simply return NULL for success */
> + return NULL;
> +}
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-09-06 17:06 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-20 11:13 [PATCH V4 00/11] clk: imx8: add new clock binding for better pm support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 01/11] dt-bindings: firmware: imx-scu: new binding to parse clocks from device tree Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-24 19:19 ` Shawn Guo
2019-08-24 19:19 ` Shawn Guo
2019-08-24 19:19 ` Shawn Guo
2019-08-26 3:24 ` Aisheng Dong
2019-08-26 3:24 ` Aisheng Dong
2019-08-26 3:24 ` Aisheng Dong
2019-08-27 17:04 ` Rob Herring
2019-08-27 17:04 ` Rob Herring
2019-08-27 17:04 ` Rob Herring
2019-09-06 16:56 ` Stephen Boyd
2019-09-06 16:56 ` Stephen Boyd
2019-09-06 16:56 ` Stephen Boyd
2019-08-20 11:13 ` [PATCH V4 02/11] dt-bindings: clock: imx-lpcg: add support " Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-24 19:21 ` Shawn Guo
2019-08-24 19:21 ` Shawn Guo
2019-08-24 19:21 ` Shawn Guo
2019-08-26 3:14 ` Aisheng Dong
2019-08-26 3:14 ` Aisheng Dong
2019-08-26 3:14 ` Aisheng Dong
2019-08-26 3:21 ` Aisheng Dong
2019-08-26 3:21 ` Aisheng Dong
2019-08-26 3:21 ` Aisheng Dong
2019-08-27 17:05 ` Rob Herring
2019-08-27 17:05 ` Rob Herring
2019-08-27 17:05 ` Rob Herring
2019-09-06 17:00 ` Stephen Boyd
2019-09-06 17:00 ` Stephen Boyd
2019-09-06 17:00 ` Stephen Boyd
2019-08-20 11:13 ` [PATCH V4 03/11] clk: imx: scu: add two cells binding support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-09-06 17:06 ` Stephen Boyd [this message]
2019-09-06 17:06 ` Stephen Boyd
2019-09-09 10:23 ` Dong Aisheng
2019-09-09 10:23 ` Dong Aisheng
2019-09-16 18:44 ` Stephen Boyd
2019-09-16 18:44 ` Stephen Boyd
2019-11-17 12:07 ` Dong Aisheng
2019-11-17 12:07 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 04/11] clk: imx: scu: bypass cpu power domains Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-09-06 17:07 ` Stephen Boyd
2019-09-06 17:07 ` Stephen Boyd
2019-09-09 10:24 ` Dong Aisheng
2019-09-09 10:24 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 05/11] clk: imx: scu: allow scu clk to take device pointer Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 06/11] clk: imx: scu: add runtime pm support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 07/11] clk: imx: scu: add suspend/resume support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-09-06 17:09 ` Stephen Boyd
2019-09-06 17:09 ` Stephen Boyd
2019-09-09 10:35 ` Dong Aisheng
2019-09-09 10:35 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 08/11] clk: imx: imx8qxp-lpcg: add parsing clocks from device tree Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-09-06 17:13 ` Stephen Boyd
2019-09-06 17:13 ` Stephen Boyd
2019-09-09 11:23 ` Dong Aisheng
2019-09-09 11:23 ` Dong Aisheng
2019-09-16 18:45 ` Stephen Boyd
2019-09-16 18:45 ` Stephen Boyd
2019-11-17 12:08 ` Dong Aisheng
2019-11-17 12:08 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 09/11] clk: imx: lpcg: allow lpcg clk to take device pointer Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 10/11] clk: imx: clk-imx8qxp-lpcg: add runtime pm support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-08-20 11:13 ` [PATCH V4 11/11] clk: imx: lpcg: add suspend/resume support Dong Aisheng
2019-08-20 11:13 ` Dong Aisheng
2019-09-06 17:14 ` Stephen Boyd
2019-09-06 17:14 ` Stephen Boyd
2019-09-09 11:39 ` Dong Aisheng
2019-09-09 11:39 ` Dong Aisheng
2019-09-09 12:21 ` [PATCH V4 00/11] clk: imx8: add new clock binding for better pm support Oliver Graute
2019-09-09 12:21 ` Oliver Graute
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=20190906170643.B310F20578@mail.kernel.org \
--to=sboyd@kernel.org \
--cc=aisheng.dong@nxp.com \
--cc=fabio.estevam@nxp.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=mturquette@baylibre.com \
--cc=shawnguo@kernel.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 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.