Message ID | 11be51b3-3f69-22af-1fbd-83ad7497ff44@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Lukasz Majewski |
Headers | show |
Series | clk: Generalize clock_gate2 for use outside of imx | expand |
Hi Sean > Make clk-gate2 available for use outside of imx. > > Signed-off-by: Sean Anderson <seanga2@gmail.com> > --- > drivers/clk/Makefile | 1 + > drivers/clk/{imx => }/clk-gate2.c | 20 ++++---------------- > drivers/clk/imx/Makefile | 2 +- > drivers/clk/imx/clk.h | 5 ----- > include/linux/clk-provider.h | 24 ++++++++++++++++++++---- > 5 files changed, 26 insertions(+), 26 deletions(-) > rename drivers/clk/{imx => }/clk-gate2.c (85%) > This patch is OK. Unfortunately, it causes buildman errors for sandbox: https://travis-ci.org/lmajewski/u-boot-dfu/jobs/641984485 The problem is with local sandbox copy of struct clk_gate2 In the clk_sandbox_ccf.c file we can re-use the 'flags' member (instead of defined for sandbox 'state') of now widely exposed struct clk_gate2 (@ clk-provider.h) and #define SANDBOX_CCF_ENABLE (1UL << 31) #define SANDBOX_CCF_DISABLE (0UL << 31) and remove the local sandbox copy. How to reproduce: make mrproper; make sandbox_defconfig; make -j4 ./u-boot -i -d arch/sandbox/dts/test.dtb => ut dm clk (I'm going to drop this patch from PR which I'm preparing now and depending on it "clk: Add option to restrict clk-gate2 to one bit toggle"). > diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile > index 06131edb9f..fef3280f16 100644 > --- a/drivers/clk/Makefile > +++ b/drivers/clk/Makefile > @@ -9,6 +9,7 @@ obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_rate.o > obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_factor.o > obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk.o clk-divider.o clk-mux.o > clk-gate.o obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-fixed-factor.o > +obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-gate2.o > obj-$(CONFIG_$(SPL_TPL_)CLK_COMPOSITE_CCF) += clk-composite.o > > obj-y += analogbits/ > diff --git a/drivers/clk/imx/clk-gate2.c b/drivers/clk/clk-gate2.c > similarity index 85% > rename from drivers/clk/imx/clk-gate2.c > rename to drivers/clk/clk-gate2.c > index 1b9db6e791..cfe21e5496 100644 > --- a/drivers/clk/imx/clk-gate2.c > +++ b/drivers/clk/clk-gate2.c > @@ -10,8 +10,7 @@ > * it under the terms of the GNU General Public License version 2 as > * published by the Free Software Foundation. > * > - * Gated clock implementation > - * > + * Gated clock which redirects rate functions to its parent clock > */ > > #include <common.h> > @@ -21,19 +20,8 @@ > #include <dm/device.h> > #include <linux/clk-provider.h> > #include <clk.h> > -#include "clk.h" > - > -#define UBOOT_DM_CLK_IMX_GATE2 "imx_clk_gate2" > - > -struct clk_gate2 { > - struct clk clk; > - void __iomem *reg; > - u8 bit_idx; > - u8 cgr_val; > - u8 flags; > -}; > > -#define to_clk_gate2(_clk) container_of(_clk, struct clk_gate2, clk) > +#define UBOOT_DM_CLK_GATE2 "clk_gate2" > > static int clk_gate2_enable(struct clk *clk) > { > @@ -97,7 +85,7 @@ struct clk *clk_register_gate2(struct device *dev, > const char *name, > > clk = &gate->clk; > > - ret = clk_register(clk, UBOOT_DM_CLK_IMX_GATE2, name, > parent_name); > + ret = clk_register(clk, UBOOT_DM_CLK_GATE2, name, > parent_name); if (ret) { > kfree(gate); > return ERR_PTR(ret); > @@ -107,7 +95,7 @@ struct clk *clk_register_gate2(struct device *dev, > const char *name, } > > U_BOOT_DRIVER(clk_gate2) = { > - .name = UBOOT_DM_CLK_IMX_GATE2, > + .name = UBOOT_DM_CLK_GATE2, > .id = UCLASS_CLK, > .ops = &clk_gate2_ops, > .flags = DM_FLAG_PRE_RELOC, > diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile > index 222c5a4e08..5328e9265a 100644 > --- a/drivers/clk/imx/Makefile > +++ b/drivers/clk/imx/Makefile > @@ -2,7 +2,7 @@ > # > # SPDX-License-Identifier: GPL-2.0 > > -obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-gate2.o clk-pllv3.o clk-pfd.o > +obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-pllv3.o clk-pfd.o > obj-$(CONFIG_$(SPL_TPL_)CLK_IMX6Q) += clk-imx6q.o > obj-$(CONFIG_CLK_IMX8) += clk-imx8.o > > diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h > index 07dcf94ea5..c46570e9f4 100644 > --- a/drivers/clk/imx/clk.h > +++ b/drivers/clk/imx/clk.h > @@ -45,11 +45,6 @@ struct clk *imx_clk_pll14xx(const char *name, > const char *parent_name, void __iomem *base, > const struct imx_pll14xx_clk *pll_clk); > > -struct clk *clk_register_gate2(struct device *dev, const char *name, > - const char *parent_name, unsigned long flags, > - void __iomem *reg, u8 bit_idx, u8 cgr_val, > - u8 clk_gate_flags); > - > struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, > const char *parent_name, void __iomem > *base, u32 div_mask); > diff --git a/include/linux/clk-provider.h > b/include/linux/clk-provider.h index 0ef6e685ad..f510291018 100644 > --- a/include/linux/clk-provider.h > +++ b/include/linux/clk-provider.h > @@ -90,10 +90,6 @@ struct clk_gate { > #define CLK_GATE_HIWORD_MASK BIT(1) > > extern const struct clk_ops clk_gate_ops; > -struct clk *clk_register_gate(struct device *dev, const char *name, > - const char *parent_name, unsigned long > flags, > - void __iomem *reg, u8 bit_idx, > - u8 clk_gate_flags, spinlock_t *lock); > > struct clk_div_table { > unsigned int val; > @@ -159,6 +155,16 @@ struct clk_composite { > > #define to_clk_composite(_clk) container_of(_clk, struct > clk_composite, clk) > > +struct clk_gate2 { > + struct clk clk; > + void __iomem *reg; > + u8 bit_idx; > + u8 cgr_val; > + u8 flags; > +}; > + > +#define to_clk_gate2(_clk) container_of(_clk, struct clk_gate2, clk) > + > struct clk *clk_register_composite(struct device *dev, const char > *name, const char * const *parent_names, int num_parents, > struct clk *mux_clk, const struct clk_ops *mux_ops, > @@ -184,6 +190,16 @@ struct clk *clk_register_mux(struct device *dev, > const char *name, void __iomem *reg, u8 shift, u8 width, > u8 clk_mux_flags); > > +struct clk *clk_register_gate(struct device *dev, const char *name, > + const char *parent_name, unsigned long > flags, > + void __iomem *reg, u8 bit_idx, > + u8 clk_gate_flags, spinlock_t *lock); > + > +struct clk *clk_register_gate2(struct device *dev, const char *name, > + const char *parent_name, unsigned > long flags, > + void __iomem *reg, u8 bit_idx, u8 > cgr_val, > + u8 clk_gate_flags); > + > const char *clk_hw_get_name(const struct clk *hw); > ulong clk_generic_get_rate(struct clk *clk); > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
On 1/26/20 3:55 PM, Lukasz Majewski wrote: > Hi Sean > >> Make clk-gate2 available for use outside of imx. >> >> Signed-off-by: Sean Anderson <seanga2@gmail.com> >> --- >> drivers/clk/Makefile | 1 + >> drivers/clk/{imx => }/clk-gate2.c | 20 ++++---------------- >> drivers/clk/imx/Makefile | 2 +- >> drivers/clk/imx/clk.h | 5 ----- >> include/linux/clk-provider.h | 24 ++++++++++++++++++++---- >> 5 files changed, 26 insertions(+), 26 deletions(-) >> rename drivers/clk/{imx => }/clk-gate2.c (85%) >> > > This patch is OK. > > Unfortunately, it causes buildman errors for sandbox: > https://travis-ci.org/lmajewski/u-boot-dfu/jobs/641984485 > > The problem is with local sandbox copy of struct clk_gate2 > > In the clk_sandbox_ccf.c file we can re-use the 'flags' member (instead > of defined for sandbox 'state') of now widely exposed struct clk_gate2 > (@ clk-provider.h) and > > #define SANDBOX_CCF_ENABLE (1UL << 31) > #define SANDBOX_CCF_DISABLE (0UL << 31) > > and remove the local sandbox copy. > > > How to reproduce: > > make mrproper; make sandbox_defconfig; make -j4 > ./u-boot -i -d arch/sandbox/dts/test.dtb > => ut dm clk > > > (I'm going to drop this patch from PR which I'm preparing now and > depending on it "clk: Add option to restrict clk-gate2 to one bit > toggle"). That's fine. This may be a bit of duplicate effort wrt the patches I submitted regarding clk_composite. I originally used clk_gate2 in my k210 patch series, but I switched over to using clk_composite because it could function in the same manner.
Hi Sean, > On 1/26/20 3:55 PM, Lukasz Majewski wrote: > > Hi Sean > > > >> Make clk-gate2 available for use outside of imx. > >> > >> Signed-off-by: Sean Anderson <seanga2@gmail.com> > >> --- > >> drivers/clk/Makefile | 1 + > >> drivers/clk/{imx => }/clk-gate2.c | 20 ++++---------------- > >> drivers/clk/imx/Makefile | 2 +- > >> drivers/clk/imx/clk.h | 5 ----- > >> include/linux/clk-provider.h | 24 ++++++++++++++++++++---- > >> 5 files changed, 26 insertions(+), 26 deletions(-) > >> rename drivers/clk/{imx => }/clk-gate2.c (85%) > >> > > > > This patch is OK. > > > > Unfortunately, it causes buildman errors for sandbox: > > https://travis-ci.org/lmajewski/u-boot-dfu/jobs/641984485 > > > > The problem is with local sandbox copy of struct clk_gate2 > > > > In the clk_sandbox_ccf.c file we can re-use the 'flags' member > > (instead of defined for sandbox 'state') of now widely exposed > > struct clk_gate2 (@ clk-provider.h) and > > > > #define SANDBOX_CCF_ENABLE (1UL << 31) > > #define SANDBOX_CCF_DISABLE (0UL << 31) > > > > and remove the local sandbox copy. > > > > > > How to reproduce: > > > > make mrproper; make sandbox_defconfig; make -j4 > > ./u-boot -i -d arch/sandbox/dts/test.dtb > > => ut dm clk > > > > > > (I'm going to drop this patch from PR which I'm preparing now and > > depending on it "clk: Add option to restrict clk-gate2 to one bit > > toggle"). > > That's fine. This may be a bit of duplicate effort wrt the patches I > submitted regarding clk_composite. I originally used clk_gate2 in my > k210 patch series, but I switched over to using clk_composite because > it could function in the same manner. > Thanks for the update. Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 06131edb9f..fef3280f16 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_rate.o obj-$(CONFIG_$(SPL_TPL_)CLK) += clk_fixed_factor.o obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk.o clk-divider.o clk-mux.o clk-gate.o obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-fixed-factor.o +obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-gate2.o obj-$(CONFIG_$(SPL_TPL_)CLK_COMPOSITE_CCF) += clk-composite.o obj-y += analogbits/ diff --git a/drivers/clk/imx/clk-gate2.c b/drivers/clk/clk-gate2.c similarity index 85% rename from drivers/clk/imx/clk-gate2.c rename to drivers/clk/clk-gate2.c index 1b9db6e791..cfe21e5496 100644 --- a/drivers/clk/imx/clk-gate2.c +++ b/drivers/clk/clk-gate2.c @@ -10,8 +10,7 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * - * Gated clock implementation - * + * Gated clock which redirects rate functions to its parent clock */ #include <common.h> @@ -21,19 +20,8 @@ #include <dm/device.h> #include <linux/clk-provider.h> #include <clk.h> -#include "clk.h" - -#define UBOOT_DM_CLK_IMX_GATE2 "imx_clk_gate2" - -struct clk_gate2 { - struct clk clk; - void __iomem *reg; - u8 bit_idx; - u8 cgr_val; - u8 flags; -}; -#define to_clk_gate2(_clk) container_of(_clk, struct clk_gate2, clk) +#define UBOOT_DM_CLK_GATE2 "clk_gate2" static int clk_gate2_enable(struct clk *clk) { @@ -97,7 +85,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name, clk = &gate->clk; - ret = clk_register(clk, UBOOT_DM_CLK_IMX_GATE2, name, parent_name); + ret = clk_register(clk, UBOOT_DM_CLK_GATE2, name, parent_name); if (ret) { kfree(gate); return ERR_PTR(ret); @@ -107,7 +95,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name, } U_BOOT_DRIVER(clk_gate2) = { - .name = UBOOT_DM_CLK_IMX_GATE2, + .name = UBOOT_DM_CLK_GATE2, .id = UCLASS_CLK, .ops = &clk_gate2_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile index 222c5a4e08..5328e9265a 100644 --- a/drivers/clk/imx/Makefile +++ b/drivers/clk/imx/Makefile @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-gate2.o clk-pllv3.o clk-pfd.o +obj-$(CONFIG_$(SPL_TPL_)CLK_CCF) += clk-pllv3.o clk-pfd.o obj-$(CONFIG_$(SPL_TPL_)CLK_IMX6Q) += clk-imx6q.o obj-$(CONFIG_CLK_IMX8) += clk-imx8.o diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h index 07dcf94ea5..c46570e9f4 100644 --- a/drivers/clk/imx/clk.h +++ b/drivers/clk/imx/clk.h @@ -45,11 +45,6 @@ struct clk *imx_clk_pll14xx(const char *name, const char *parent_name, void __iomem *base, const struct imx_pll14xx_clk *pll_clk); -struct clk *clk_register_gate2(struct device *dev, const char *name, - const char *parent_name, unsigned long flags, - void __iomem *reg, u8 bit_idx, u8 cgr_val, - u8 clk_gate_flags); - struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, const char *parent_name, void __iomem *base, u32 div_mask); diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 0ef6e685ad..f510291018 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -90,10 +90,6 @@ struct clk_gate { #define CLK_GATE_HIWORD_MASK BIT(1) extern const struct clk_ops clk_gate_ops; -struct clk *clk_register_gate(struct device *dev, const char *name, - const char *parent_name, unsigned long flags, - void __iomem *reg, u8 bit_idx, - u8 clk_gate_flags, spinlock_t *lock); struct clk_div_table { unsigned int val; @@ -159,6 +155,16 @@ struct clk_composite { #define to_clk_composite(_clk) container_of(_clk, struct clk_composite, clk) +struct clk_gate2 { + struct clk clk; + void __iomem *reg; + u8 bit_idx; + u8 cgr_val; + u8 flags; +}; + +#define to_clk_gate2(_clk) container_of(_clk, struct clk_gate2, clk) + struct clk *clk_register_composite(struct device *dev, const char *name, const char * const *parent_names, int num_parents, struct clk *mux_clk, const struct clk_ops *mux_ops, @@ -184,6 +190,16 @@ struct clk *clk_register_mux(struct device *dev, const char *name, void __iomem *reg, u8 shift, u8 width, u8 clk_mux_flags); +struct clk *clk_register_gate(struct device *dev, const char *name, + const char *parent_name, unsigned long flags, + void __iomem *reg, u8 bit_idx, + u8 clk_gate_flags, spinlock_t *lock); + +struct clk *clk_register_gate2(struct device *dev, const char *name, + const char *parent_name, unsigned long flags, + void __iomem *reg, u8 bit_idx, u8 cgr_val, + u8 clk_gate_flags); + const char *clk_hw_get_name(const struct clk *hw); ulong clk_generic_get_rate(struct clk *clk);
Make clk-gate2 available for use outside of imx. Signed-off-by: Sean Anderson <seanga2@gmail.com> --- drivers/clk/Makefile | 1 + drivers/clk/{imx => }/clk-gate2.c | 20 ++++---------------- drivers/clk/imx/Makefile | 2 +- drivers/clk/imx/clk.h | 5 ----- include/linux/clk-provider.h | 24 ++++++++++++++++++++---- 5 files changed, 26 insertions(+), 26 deletions(-) rename drivers/clk/{imx => }/clk-gate2.c (85%)