Message ID | 1505115413-25483-1-git-send-email-aisheng.dong@nxp.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
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 <sboyd@codeaurora.org> > Cc: Michael Turquette <mturquette@baylibre.com> > Cc: Russell King <linux@arm.linux.org.uk> > Reported-by: Shawn Guo <shawnguo@kernel.org> > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> > --- > 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
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 <sboyd@codeaurora.org> > >Cc: Michael Turquette <mturquette@baylibre.com> > >Cc: Russell King <linux@arm.linux.org.uk> > >Reported-by: Shawn Guo <shawnguo@kernel.org> > >Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> > >--- > > 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 majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-clk" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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
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
On Wed, Sep 13, 2017 at 2:34 AM, kbuild test robot <lkp@intel.com> 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 -- geert@linux-m68k.org 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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 <lkp@intel.com> 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 -- geert@linux-m68k.org > > 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 majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-clk" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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);
'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 <sboyd@codeaurora.org> Cc: Michael Turquette <mturquette@baylibre.com> Cc: Russell King <linux@arm.linux.org.uk> Reported-by: Shawn Guo <shawnguo@kernel.org> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> --- drivers/clk/clk-bulk.c | 31 +++++++++++++++++++++++++++++++ include/linux/clk.h | 8 ++++++++ 2 files changed, 39 insertions(+)