2017-09-11 07:40:56

by Aisheng Dong

[permalink] [raw]
Subject: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

'clock-names' property is optinal in DT, so of_clk_bulk_get() is introduced
here to handle this for DT users without 'clock-names' specified.

Cc: Stephen Boyd <[email protected]>
Cc: Michael Turquette <[email protected]>
Cc: Russell King <[email protected]>
Reported-by: Shawn Guo <[email protected]>
Signed-off-by: Dong Aisheng <[email protected]>
---
drivers/clk/clk-bulk.c | 31 +++++++++++++++++++++++++++++++
include/linux/clk.h | 8 ++++++++
2 files changed, 39 insertions(+)

diff --git a/drivers/clk/clk-bulk.c b/drivers/clk/clk-bulk.c
index c834f5a..3179f28 100644
--- a/drivers/clk/clk-bulk.c
+++ b/drivers/clk/clk-bulk.c
@@ -19,6 +19,37 @@
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/export.h>
+#include <linux/of.h>
+
+#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
+int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
+ struct clk_bulk_data *clks)
+{
+ int ret;
+ int i;
+
+ for (i = 0; i < num_clks; i++)
+ clks[i].clk = NULL;
+
+ for (i = 0; i < num_clks; i++) {
+ clks[i].clk = of_clk_get(np, i);
+ if (IS_ERR(clks[i].clk)) {
+ ret = PTR_ERR(clks[i].clk);
+ pr_err("%s: Failed to get clk index: %d ret: %d\n",
+ np->full_name, i, ret);
+ clks[i].clk = NULL;
+ goto err;
+ }
+ }
+
+ return 0;
+
+err:
+ clk_bulk_put(i, clks);
+
+ return ret;
+}
+#endif

void clk_bulk_put(int num_clks, struct clk_bulk_data *clks)
{
diff --git a/include/linux/clk.h b/include/linux/clk.h
index 91bd464..c5281b3 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -658,10 +658,18 @@ static inline void clk_disable_unprepare(struct clk *clk)
}

#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
+int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
+ struct clk_bulk_data *clks);
struct clk *of_clk_get(struct device_node *np, int index);
struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
#else
+static int of_clk_bulk_get(struct device_node *np, int num_clks,
+ struct clk_bulk_data *clks)
+{
+ return ERR_PTR(-ENOENT);
+}
+
static inline struct clk *of_clk_get(struct device_node *np, int index)
{
return ERR_PTR(-ENOENT);
--
2.7.4


2017-09-11 08:58:29

by Sylwester Nawrocki

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

On 09/11/2017 09:36 AM, Dong Aisheng wrote:
> 'clock-names' property is optinal in DT, so of_clk_bulk_get() is introduced
> here to handle this for DT users without 'clock-names' specified.
>
> Cc: Stephen Boyd <[email protected]>
> Cc: Michael Turquette <[email protected]>
> Cc: Russell King <[email protected]>
> Reported-by: Shawn Guo <[email protected]>
> Signed-off-by: Dong Aisheng <[email protected]>
> ---
> drivers/clk/clk-bulk.c | 31 +++++++++++++++++++++++++++++++
> include/linux/clk.h | 8 ++++++++
> 2 files changed, 39 insertions(+)
>
> diff --git a/drivers/clk/clk-bulk.c b/drivers/clk/clk-bulk.c
> index c834f5a..3179f28 100644
> --- a/drivers/clk/clk-bulk.c
> +++ b/drivers/clk/clk-bulk.c
> @@ -19,6 +19,37 @@
> #include <linux/clk.h>
> #include <linux/device.h>
> #include <linux/export.h>
> +#include <linux/of.h>
> +
> +#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
> +int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
> + struct clk_bulk_data *clks)
> +{
> + int ret;
> + int i;
> +
> + for (i = 0; i < num_clks; i++)
> + clks[i].clk = NULL;
> +
> + for (i = 0; i < num_clks; i++) {
> + clks[i].clk = of_clk_get(np, i);
> + if (IS_ERR(clks[i].clk)) {
> + ret = PTR_ERR(clks[i].clk);

> + pr_err("%s: Failed to get clk index: %d ret: %d\n",
> + np->full_name, i, ret);

AFAIU full_node is not supposed now to be dereferenced directly,
since storing of the full path string for each node is going to be
removed. %pOF needs to be used instead, e.g.

pr_err("%pOF: failed to get clk %d: %d\n", np, i , ret);

> + clks[i].clk = NULL;
> + goto err;
> + }
> + }
> +
> + return 0;
> +
> +err:
> + clk_bulk_put(i, clks);
> +
> + return ret;
> +}
> +#endif

--
Regards,
Sylwester

2017-09-11 09:14:09

by Dong Aisheng

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

On Mon, Sep 11, 2017 at 10:58:19AM +0200, Sylwester Nawrocki wrote:
> On 09/11/2017 09:36 AM, Dong Aisheng wrote:
> >'clock-names' property is optinal in DT, so of_clk_bulk_get() is introduced
> >here to handle this for DT users without 'clock-names' specified.
> >
> >Cc: Stephen Boyd <[email protected]>
> >Cc: Michael Turquette <[email protected]>
> >Cc: Russell King <[email protected]>
> >Reported-by: Shawn Guo <[email protected]>
> >Signed-off-by: Dong Aisheng <[email protected]>
> >---
> > drivers/clk/clk-bulk.c | 31 +++++++++++++++++++++++++++++++
> > include/linux/clk.h | 8 ++++++++
> > 2 files changed, 39 insertions(+)
> >
> >diff --git a/drivers/clk/clk-bulk.c b/drivers/clk/clk-bulk.c
> >index c834f5a..3179f28 100644
> >--- a/drivers/clk/clk-bulk.c
> >+++ b/drivers/clk/clk-bulk.c
> >@@ -19,6 +19,37 @@
> > #include <linux/clk.h>
> > #include <linux/device.h>
> > #include <linux/export.h>
> >+#include <linux/of.h>
> >+
> >+#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
> >+int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
> >+ struct clk_bulk_data *clks)
> >+{
> >+ int ret;
> >+ int i;
> >+
> >+ for (i = 0; i < num_clks; i++)
> >+ clks[i].clk = NULL;
> >+
> >+ for (i = 0; i < num_clks; i++) {
> >+ clks[i].clk = of_clk_get(np, i);
> >+ if (IS_ERR(clks[i].clk)) {
> >+ ret = PTR_ERR(clks[i].clk);
>
> >+ pr_err("%s: Failed to get clk index: %d ret: %d\n",
> >+ np->full_name, i, ret);
>
> AFAIU full_node is not supposed now to be dereferenced directly,
> since storing of the full path string for each node is going to be
> removed. %pOF needs to be used instead, e.g.
>
> pr_err("%pOF: failed to get clk %d: %d\n", np, i , ret);
>

Thanks for telling this.
Just see Rob sent patches to clean up it some days ago.
Will update the patch.

Regards
Dong Aisheng

> >+ clks[i].clk = NULL;
> >+ goto err;
> >+ }
> >+ }
> >+
> >+ return 0;
> >+
> >+err:
> >+ clk_bulk_put(i, clks);
> >+
> >+ return ret;
> >+}
> >+#endif
>
> --
> Regards,
> Sylwester
> --
> To unsubscribe from this list: send the line "unsubscribe linux-clk" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2017-09-13 00:34:57

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

Hi Dong,

[auto build test WARNING on clk/clk-next]
[also build test WARNING on v4.13 next-20170912]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Dong-Aisheng/clk-bulk-add-of_clk_bulk_get/20170913-075645
base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: x86_64-randconfig-x001-201737 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All warnings (new ones prefixed by >>):

In file included from include/linux/dma/dw.h:15:0,
from drivers//tty/serial/8250/8250_lpss.c:18:
include/linux/clk.h: In function 'of_clk_bulk_get':
>> include/linux/clk.h:692:9: warning: return makes integer from pointer without a cast [-Wint-conversion]
return ERR_PTR(-ENOENT);
^~~~~~~~~~~~~~~~
At top level:
include/linux/clk.h:689:12: warning: 'of_clk_bulk_get' defined but not used [-Wunused-function]
static int of_clk_bulk_get(struct device_node *np, int num_clks,
^~~~~~~~~~~~~~~

vim +692 include/linux/clk.h

681
682 #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
683 int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
684 struct clk_bulk_data *clks);
685 struct clk *of_clk_get(struct device_node *np, int index);
686 struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
687 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
688 #else
689 static int of_clk_bulk_get(struct device_node *np, int num_clks,
690 struct clk_bulk_data *clks)
691 {
> 692 return ERR_PTR(-ENOENT);
693 }
694

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (1.93 kB)
.config.gz (24.58 kB)
Download all attachments

2017-09-13 04:06:38

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

Hi Dong,

[auto build test ERROR on clk/clk-next]
[also build test ERROR on v4.13 next-20170912]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Dong-Aisheng/clk-bulk-add-of_clk_bulk_get/20170913-075645
base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: powerpc-defconfig (attached as .config)
compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=powerpc

All errors (new ones prefixed by >>):

In file included from include/linux/cpufreq.h:14:0,
from arch/powerpc/oprofile/op_model_cell.c:17:
include/linux/clk.h: In function 'of_clk_bulk_get':
>> include/linux/clk.h:692:9: error: return makes integer from pointer without a cast [-Werror=int-conversion]
return ERR_PTR(-ENOENT);
^~~~~~~~~~~~~~~~
At top level:
>> include/linux/clk.h:689:12: error: 'of_clk_bulk_get' defined but not used [-Werror=unused-function]
static int of_clk_bulk_get(struct device_node *np, int num_clks,
^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

vim +692 include/linux/clk.h

681
682 #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
683 int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
684 struct clk_bulk_data *clks);
685 struct clk *of_clk_get(struct device_node *np, int index);
686 struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
687 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
688 #else
> 689 static int of_clk_bulk_get(struct device_node *np, int num_clks,
690 struct clk_bulk_data *clks)
691 {
> 692 return ERR_PTR(-ENOENT);
693 }
694

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (2.13 kB)
.config.gz (23.13 kB)
Download all attachments

2017-09-13 13:40:37

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

On Wed, Sep 13, 2017 at 2:34 AM, kbuild test robot <[email protected]> wrote:
> [auto build test WARNING on clk/clk-next]
> [also build test WARNING on v4.13 next-20170912]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Dong-Aisheng/clk-bulk-add-of_clk_bulk_get/20170913-075645
> base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
> config: x86_64-randconfig-x001-201737 (attached as .config)
> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64
>
> All warnings (new ones prefixed by >>):
>
> In file included from include/linux/dma/dw.h:15:0,
> from drivers//tty/serial/8250/8250_lpss.c:18:
> include/linux/clk.h: In function 'of_clk_bulk_get':
>>> include/linux/clk.h:692:9: warning: return makes integer from pointer without a cast [-Wint-conversion]
> return ERR_PTR(-ENOENT);
> ^~~~~~~~~~~~~~~~
> At top level:
> include/linux/clk.h:689:12: warning: 'of_clk_bulk_get' defined but not used [-Wunused-function]
> static int of_clk_bulk_get(struct device_node *np, int num_clks,
> ^~~~~~~~~~~~~~~
>
> vim +692 include/linux/clk.h
>
> 681
> 682 #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
> 683 int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
> 684 struct clk_bulk_data *clks);
> 685 struct clk *of_clk_get(struct device_node *np, int index);
> 686 struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
> 687 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
> 688 #else
> 689 static int of_clk_bulk_get(struct device_node *np, int num_clks,
> 690 struct clk_bulk_data *clks)
> 691 {
> > 692 return ERR_PTR(-ENOENT);

That should be plain "return -ENOENT;".

> 693 }
> 694

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2017-09-20 07:11:28

by Dong Aisheng

[permalink] [raw]
Subject: Re: [PATCH 1/1] clk: bulk: add of_clk_bulk_get()

Hi Geert,

On Wed, Sep 13, 2017 at 03:40:32PM +0200, Geert Uytterhoeven wrote:
> On Wed, Sep 13, 2017 at 2:34 AM, kbuild test robot <[email protected]> wrote:
> > [auto build test WARNING on clk/clk-next]
> > [also build test WARNING on v4.13 next-20170912]
> > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> >
> > url: https://github.com/0day-ci/linux/commits/Dong-Aisheng/clk-bulk-add-of_clk_bulk_get/20170913-075645
> > base: https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
> > config: x86_64-randconfig-x001-201737 (attached as .config)
> > compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> > reproduce:
> > # save the attached .config to linux build tree
> > make ARCH=x86_64
> >
> > All warnings (new ones prefixed by >>):
> >
> > In file included from include/linux/dma/dw.h:15:0,
> > from drivers//tty/serial/8250/8250_lpss.c:18:
> > include/linux/clk.h: In function 'of_clk_bulk_get':
> >>> include/linux/clk.h:692:9: warning: return makes integer from pointer without a cast [-Wint-conversion]
> > return ERR_PTR(-ENOENT);
> > ^~~~~~~~~~~~~~~~
> > At top level:
> > include/linux/clk.h:689:12: warning: 'of_clk_bulk_get' defined but not used [-Wunused-function]
> > static int of_clk_bulk_get(struct device_node *np, int num_clks,
> > ^~~~~~~~~~~~~~~
> >
> > vim +692 include/linux/clk.h
> >
> > 681
> > 682 #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
> > 683 int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,
> > 684 struct clk_bulk_data *clks);
> > 685 struct clk *of_clk_get(struct device_node *np, int index);
> > 686 struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
> > 687 struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
> > 688 #else
> > 689 static int of_clk_bulk_get(struct device_node *np, int num_clks,
> > 690 struct clk_bulk_data *clks)
> > 691 {
> > > 692 return ERR_PTR(-ENOENT);
>
> That should be plain "return -ENOENT;".
>

Sorry for the careless and thank you for the pointing out.

Will update it.

Regards
Dong Aisheng

> > 693 }
> > 694
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
> --
> To unsubscribe from this list: send the line "unsubscribe linux-clk" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html