Message ID | 20220320203446.740178-2-seanga2@gmail.com |
---|---|
State | Accepted |
Delegated to: | Sean Anderson |
Headers | show |
Series | [1/2] clk: ccf: Add some helper functions for clock ops | expand |
On 2022/3/21 4:34, Sean Anderson wrote: > This converts most CCF drivers to use generic ops. imx6q is the only > outlier, where we retain the existing functionality by moving the check to > request(). > > Signed-off-by: Sean Anderson <seanga2@gmail.com> For i.MX8M* Reviewed-by: Peng Fan <peng.fan@nxp.com> > --- > > drivers/clk/at91/pmc.c | 56 ++------------------ > drivers/clk/imx/clk-imx6q.c | 73 +++----------------------- > drivers/clk/imx/clk-imx8mm.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mn.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mp.c | 90 +------------------------------- > drivers/clk/imx/clk-imxrt1020.c | 65 ++--------------------- > drivers/clk/imx/clk-imxrt1050.c | 85 +----------------------------- > drivers/clk/microchip/mpfs_clk.c | 67 +----------------------- > 8 files changed, 21 insertions(+), 591 deletions(-) > > diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c > index 1fa42d728b..58bf1047b5 100644 > --- a/drivers/clk/at91/pmc.c > +++ b/drivers/clk/at91/pmc.c > @@ -21,60 +21,12 @@ static int at91_clk_of_xlate(struct clk *clk, struct ofnode_phandle_args *args) > return 0; > } > > -static ulong at91_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong at91_clk_set_rate(struct clk *clk, ulong rate) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int at91_clk_enable(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_enable(c); > -} > - > -static int at91_clk_disable(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_disable(c); > -} > - > const struct clk_ops at91_clk_ops = { > .of_xlate = at91_clk_of_xlate, > - .set_rate = at91_clk_set_rate, > - .get_rate = at91_clk_get_rate, > - .enable = at91_clk_enable, > - .disable = at91_clk_disable, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > /** > diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c > index 5343036bab..67825af89b 100644 > --- a/drivers/clk/imx/clk-imx6q.c > +++ b/drivers/clk/imx/clk-imx6q.c > @@ -14,79 +14,22 @@ > > #include "clk.h" > > -static int imx6q_check_id(ulong id) > +static int imx6q_clk_request(struct clk *clk) > { > - if (id < IMX6QDL_CLK_DUMMY || id >= IMX6QDL_CLK_END) { > - printf("%s: Invalid clk ID #%lu\n", __func__, id); > + if (clk->id < IMX6QDL_CLK_DUMMY || clk->id >= IMX6QDL_CLK_END) { > + printf("%s: Invalid clk ID #%lu\n", __func__, clk->id); > return -EINVAL; > } > > return 0; > } > > -static ulong imx6q_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = imx6q_check_id(clk->id); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx6q_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - return rate; > -} > - > -static int __imx6q_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret = 0; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = imx6q_check_id(clk->id); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx6q_clk_disable(struct clk *clk) > -{ > - return __imx6q_clk_enable(clk, 0); > -} > - > -static int imx6q_clk_enable(struct clk *clk) > -{ > - return __imx6q_clk_enable(clk, 1); > -} > - > static struct clk_ops imx6q_clk_ops = { > - .set_rate = imx6q_clk_set_rate, > - .get_rate = imx6q_clk_get_rate, > - .enable = imx6q_clk_enable, > - .disable = imx6q_clk_disable, > + .request = imx6q_clk_request, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > static const char *const usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; > diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c > index 3aa8c641f9..443bbdae33 100644 > --- a/drivers/clk/imx/clk-imx8mm.c > +++ b/drivers/clk/imx/clk-imx8mm.c > @@ -140,92 +140,6 @@ static const char *imx8mm_ecspi2_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sy > static const char *imx8mm_ecspi3_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sys_pll1_40m", "sys_pll1_160m", > "sys_pll1_800m", "sys_pll3_out", "sys_pll2_250m", "audio_pll2_out", }; > > -static ulong imx8mm_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mm_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mm_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mm_clk_disable(struct clk *clk) > -{ > - return __imx8mm_clk_enable(clk, 0); > -} > - > -static int imx8mm_clk_enable(struct clk *clk) > -{ > - return __imx8mm_clk_enable(clk, 1); > -} > - > -static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mm_clk_ops = { > - .set_rate = imx8mm_clk_set_rate, > - .get_rate = imx8mm_clk_get_rate, > - .enable = imx8mm_clk_enable, > - .disable = imx8mm_clk_disable, > - .set_parent = imx8mm_clk_set_parent, > -}; > - > static int imx8mm_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -470,7 +384,7 @@ U_BOOT_DRIVER(imx8mm_clk) = { > .name = "clk_imx8mm", > .id = UCLASS_CLK, > .of_match = imx8mm_clk_ids, > - .ops = &imx8mm_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mm_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c > index e398d7de02..bb62138f8c 100644 > --- a/drivers/clk/imx/clk-imx8mn.c > +++ b/drivers/clk/imx/clk-imx8mn.c > @@ -148,92 +148,6 @@ static const char * const imx8mn_usb_phy_sels[] = {"clock-osc-24m", "sys_pll1_10 > "sys_pll2_100m", "sys_pll2_200m", "clk_ext2", > "clk_ext3", "audio_pll2_out", }; > > -static ulong imx8mn_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mn_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mn_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mn_clk_disable(struct clk *clk) > -{ > - return __imx8mn_clk_enable(clk, 0); > -} > - > -static int imx8mn_clk_enable(struct clk *clk) > -{ > - return __imx8mn_clk_enable(clk, 1); > -} > - > -static int imx8mn_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mn_clk_ops = { > - .set_rate = imx8mn_clk_set_rate, > - .get_rate = imx8mn_clk_get_rate, > - .enable = imx8mn_clk_enable, > - .disable = imx8mn_clk_disable, > - .set_parent = imx8mn_clk_set_parent, > -}; > - > static int imx8mn_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -481,7 +395,7 @@ U_BOOT_DRIVER(imx8mn_clk) = { > .name = "clk_imx8mn", > .id = UCLASS_CLK, > .of_match = imx8mn_clk_ids, > - .ops = &imx8mn_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mn_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c > index c77500bcce..ad84ce38ed 100644 > --- a/drivers/clk/imx/clk-imx8mp.c > +++ b/drivers/clk/imx/clk-imx8mp.c > @@ -186,94 +186,6 @@ static const char *imx8mp_enet_phy_ref_sels[] = {"clock-osc-24m", "sys_pll2_50m" > > static const char *imx8mp_dram_core_sels[] = {"dram_pll_out", "dram_alt_root", }; > > - > -static ulong imx8mp_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mp_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mp_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mp_clk_disable(struct clk *clk) > -{ > - return __imx8mp_clk_enable(clk, 0); > -} > - > -static int imx8mp_clk_enable(struct clk *clk) > -{ > - return __imx8mp_clk_enable(clk, 1); > -} > - > -static int imx8mp_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mp_clk_ops = { > - .set_rate = imx8mp_clk_set_rate, > - .get_rate = imx8mp_clk_get_rate, > - .enable = imx8mp_clk_enable, > - .disable = imx8mp_clk_disable, > - .set_parent = imx8mp_clk_set_parent, > -}; > - > static int imx8mp_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -409,7 +321,7 @@ U_BOOT_DRIVER(imx8mp_clk) = { > .name = "clk_imx8mp", > .id = UCLASS_CLK, > .of_match = imx8mp_clk_ids, > - .ops = &imx8mp_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mp_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imxrt1020.c b/drivers/clk/imx/clk-imxrt1020.c > index 840f783940..3f8b4df3c5 100644 > --- a/drivers/clk/imx/clk-imxrt1020.c > +++ b/drivers/clk/imx/clk-imxrt1020.c > @@ -14,68 +14,11 @@ > > #include "clk.h" > > -static ulong imxrt1020_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imxrt1020_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imxrt1020_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imxrt1020_clk_disable(struct clk *clk) > -{ > - return __imxrt1020_clk_enable(clk, 0); > -} > - > -static int imxrt1020_clk_enable(struct clk *clk) > -{ > - return __imxrt1020_clk_enable(clk, 1); > -} > - > static struct clk_ops imxrt1020_clk_ops = { > - .set_rate = imxrt1020_clk_set_rate, > - .get_rate = imxrt1020_clk_get_rate, > - .enable = imxrt1020_clk_enable, > - .disable = imxrt1020_clk_disable, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > static const char * const pll2_bypass_sels[] = {"pll2_sys", "osc", }; > diff --git a/drivers/clk/imx/clk-imxrt1050.c b/drivers/clk/imx/clk-imxrt1050.c > index 3e17161002..5cb5e3bc15 100644 > --- a/drivers/clk/imx/clk-imxrt1050.c > +++ b/drivers/clk/imx/clk-imxrt1050.c > @@ -15,89 +15,6 @@ > > #include "clk.h" > > -static ulong imxrt1050_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imxrt1050_clk_set_rate(struct clk *clk, ulong rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imxrt1050_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imxrt1050_clk_disable(struct clk *clk) > -{ > - return __imxrt1050_clk_enable(clk, 0); > -} > - > -static int imxrt1050_clk_enable(struct clk *clk) > -{ > - return __imxrt1050_clk_enable(clk, 1); > -} > - > -static int imxrt1050_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - return clk_set_parent(c, cp); > -} > - > -static struct clk_ops imxrt1050_clk_ops = { > - .set_rate = imxrt1050_clk_set_rate, > - .get_rate = imxrt1050_clk_get_rate, > - .enable = imxrt1050_clk_enable, > - .disable = imxrt1050_clk_disable, > - .set_parent = imxrt1050_clk_set_parent, > -}; > - > static const char * const pll_ref_sels[] = {"osc", "dummy", }; > static const char * const pll1_bypass_sels[] = {"pll1_arm", "pll1_arm_ref_sel", }; > static const char * const pll2_bypass_sels[] = {"pll2_sys", "pll2_sys_ref_sel", }; > @@ -317,7 +234,7 @@ U_BOOT_DRIVER(imxrt1050_clk) = { > .name = "clk_imxrt1050", > .id = UCLASS_CLK, > .of_match = imxrt1050_clk_ids, > - .ops = &imxrt1050_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imxrt1050_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/microchip/mpfs_clk.c b/drivers/clk/microchip/mpfs_clk.c > index 05d7647206..67828c9bf4 100644 > --- a/drivers/clk/microchip/mpfs_clk.c > +++ b/drivers/clk/microchip/mpfs_clk.c > @@ -15,63 +15,6 @@ > > #include "mpfs_clk.h" > > -/* All methods are delegated to CCF clocks */ > - > -static ulong mpfs_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return clk_get_rate(c); > -} > - > -static ulong mpfs_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return clk_set_rate(c, rate); > -} > - > -static int mpfs_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *p; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - > - err = clk_get_by_id(parent->id, &p); > - if (err) > - return err; > - > - return clk_set_parent(c, p); > -} > - > -static int mpfs_clk_endisable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return enable ? clk_enable(c) : clk_disable(c); > -} > - > -static int mpfs_clk_enable(struct clk *clk) > -{ > - return mpfs_clk_endisable(clk, true); > -} > - > -static int mpfs_clk_disable(struct clk *clk) > -{ > - return mpfs_clk_endisable(clk, false); > -} > - > static int mpfs_clk_probe(struct udevice *dev) > { > int ret; > @@ -100,14 +43,6 @@ static int mpfs_clk_probe(struct udevice *dev) > return ret; > } > > -static const struct clk_ops mpfs_clk_ops = { > - .set_rate = mpfs_clk_set_rate, > - .get_rate = mpfs_clk_get_rate, > - .set_parent = mpfs_clk_set_parent, > - .enable = mpfs_clk_enable, > - .disable = mpfs_clk_disable, > -}; > - > static const struct udevice_id mpfs_of_match[] = { > { .compatible = "microchip,mpfs-clkcfg" }, > { } > @@ -117,7 +52,7 @@ U_BOOT_DRIVER(mpfs_clk) = { > .name = "mpfs_clk", > .id = UCLASS_CLK, > .of_match = mpfs_of_match, > - .ops = &mpfs_clk_ops, > + .ops = &ccf_clk_ops, > .probe = mpfs_clk_probe, > .priv_auto = sizeof(struct clk), > .flags = DM_FLAG_PRE_RELOC, >
On 20.03.2022 22:34, Sean Anderson wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > This converts most CCF drivers to use generic ops. imx6q is the only > outlier, where we retain the existing functionality by moving the check to > request(). > > Signed-off-by: Sean Anderson <seanga2@gmail.com> > --- > > drivers/clk/at91/pmc.c | 56 ++------------------ For AT91: Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com> > drivers/clk/imx/clk-imx6q.c | 73 +++----------------------- > drivers/clk/imx/clk-imx8mm.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mn.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mp.c | 90 +------------------------------- > drivers/clk/imx/clk-imxrt1020.c | 65 ++--------------------- > drivers/clk/imx/clk-imxrt1050.c | 85 +----------------------------- > drivers/clk/microchip/mpfs_clk.c | 67 +----------------------- > 8 files changed, 21 insertions(+), 591 deletions(-) > > diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c > index 1fa42d728b..58bf1047b5 100644 > --- a/drivers/clk/at91/pmc.c > +++ b/drivers/clk/at91/pmc.c > @@ -21,60 +21,12 @@ static int at91_clk_of_xlate(struct clk *clk, struct ofnode_phandle_args *args) > return 0; > } > > -static ulong at91_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong at91_clk_set_rate(struct clk *clk, ulong rate) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int at91_clk_enable(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_enable(c); > -} > - > -static int at91_clk_disable(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_disable(c); > -} > - > const struct clk_ops at91_clk_ops = { > .of_xlate = at91_clk_of_xlate, > - .set_rate = at91_clk_set_rate, > - .get_rate = at91_clk_get_rate, > - .enable = at91_clk_enable, > - .disable = at91_clk_disable, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > /** > diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c > index 5343036bab..67825af89b 100644 > --- a/drivers/clk/imx/clk-imx6q.c > +++ b/drivers/clk/imx/clk-imx6q.c > @@ -14,79 +14,22 @@ > > #include "clk.h" > > -static int imx6q_check_id(ulong id) > +static int imx6q_clk_request(struct clk *clk) > { > - if (id < IMX6QDL_CLK_DUMMY || id >= IMX6QDL_CLK_END) { > - printf("%s: Invalid clk ID #%lu\n", __func__, id); > + if (clk->id < IMX6QDL_CLK_DUMMY || clk->id >= IMX6QDL_CLK_END) { > + printf("%s: Invalid clk ID #%lu\n", __func__, clk->id); > return -EINVAL; > } > > return 0; > } > > -static ulong imx6q_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = imx6q_check_id(clk->id); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx6q_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - return rate; > -} > - > -static int __imx6q_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret = 0; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = imx6q_check_id(clk->id); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx6q_clk_disable(struct clk *clk) > -{ > - return __imx6q_clk_enable(clk, 0); > -} > - > -static int imx6q_clk_enable(struct clk *clk) > -{ > - return __imx6q_clk_enable(clk, 1); > -} > - > static struct clk_ops imx6q_clk_ops = { > - .set_rate = imx6q_clk_set_rate, > - .get_rate = imx6q_clk_get_rate, > - .enable = imx6q_clk_enable, > - .disable = imx6q_clk_disable, > + .request = imx6q_clk_request, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > static const char *const usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; > diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c > index 3aa8c641f9..443bbdae33 100644 > --- a/drivers/clk/imx/clk-imx8mm.c > +++ b/drivers/clk/imx/clk-imx8mm.c > @@ -140,92 +140,6 @@ static const char *imx8mm_ecspi2_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sy > static const char *imx8mm_ecspi3_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sys_pll1_40m", "sys_pll1_160m", > "sys_pll1_800m", "sys_pll3_out", "sys_pll2_250m", "audio_pll2_out", }; > > -static ulong imx8mm_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mm_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mm_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mm_clk_disable(struct clk *clk) > -{ > - return __imx8mm_clk_enable(clk, 0); > -} > - > -static int imx8mm_clk_enable(struct clk *clk) > -{ > - return __imx8mm_clk_enable(clk, 1); > -} > - > -static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mm_clk_ops = { > - .set_rate = imx8mm_clk_set_rate, > - .get_rate = imx8mm_clk_get_rate, > - .enable = imx8mm_clk_enable, > - .disable = imx8mm_clk_disable, > - .set_parent = imx8mm_clk_set_parent, > -}; > - > static int imx8mm_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -470,7 +384,7 @@ U_BOOT_DRIVER(imx8mm_clk) = { > .name = "clk_imx8mm", > .id = UCLASS_CLK, > .of_match = imx8mm_clk_ids, > - .ops = &imx8mm_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mm_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c > index e398d7de02..bb62138f8c 100644 > --- a/drivers/clk/imx/clk-imx8mn.c > +++ b/drivers/clk/imx/clk-imx8mn.c > @@ -148,92 +148,6 @@ static const char * const imx8mn_usb_phy_sels[] = {"clock-osc-24m", "sys_pll1_10 > "sys_pll2_100m", "sys_pll2_200m", "clk_ext2", > "clk_ext3", "audio_pll2_out", }; > > -static ulong imx8mn_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mn_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mn_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mn_clk_disable(struct clk *clk) > -{ > - return __imx8mn_clk_enable(clk, 0); > -} > - > -static int imx8mn_clk_enable(struct clk *clk) > -{ > - return __imx8mn_clk_enable(clk, 1); > -} > - > -static int imx8mn_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mn_clk_ops = { > - .set_rate = imx8mn_clk_set_rate, > - .get_rate = imx8mn_clk_get_rate, > - .enable = imx8mn_clk_enable, > - .disable = imx8mn_clk_disable, > - .set_parent = imx8mn_clk_set_parent, > -}; > - > static int imx8mn_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -481,7 +395,7 @@ U_BOOT_DRIVER(imx8mn_clk) = { > .name = "clk_imx8mn", > .id = UCLASS_CLK, > .of_match = imx8mn_clk_ids, > - .ops = &imx8mn_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mn_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c > index c77500bcce..ad84ce38ed 100644 > --- a/drivers/clk/imx/clk-imx8mp.c > +++ b/drivers/clk/imx/clk-imx8mp.c > @@ -186,94 +186,6 @@ static const char *imx8mp_enet_phy_ref_sels[] = {"clock-osc-24m", "sys_pll2_50m" > > static const char *imx8mp_dram_core_sels[] = {"dram_pll_out", "dram_alt_root", }; > > - > -static ulong imx8mp_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imx8mp_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imx8mp_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imx8mp_clk_disable(struct clk *clk) > -{ > - return __imx8mp_clk_enable(clk, 0); > -} > - > -static int imx8mp_clk_enable(struct clk *clk) > -{ > - return __imx8mp_clk_enable(clk, 1); > -} > - > -static int imx8mp_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - ret = clk_set_parent(c, cp); > - > - c->dev->parent = cp->dev; > - > - return ret; > -} > - > -static struct clk_ops imx8mp_clk_ops = { > - .set_rate = imx8mp_clk_set_rate, > - .get_rate = imx8mp_clk_get_rate, > - .enable = imx8mp_clk_enable, > - .disable = imx8mp_clk_disable, > - .set_parent = imx8mp_clk_set_parent, > -}; > - > static int imx8mp_clk_probe(struct udevice *dev) > { > void __iomem *base; > @@ -409,7 +321,7 @@ U_BOOT_DRIVER(imx8mp_clk) = { > .name = "clk_imx8mp", > .id = UCLASS_CLK, > .of_match = imx8mp_clk_ids, > - .ops = &imx8mp_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imx8mp_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/imx/clk-imxrt1020.c b/drivers/clk/imx/clk-imxrt1020.c > index 840f783940..3f8b4df3c5 100644 > --- a/drivers/clk/imx/clk-imxrt1020.c > +++ b/drivers/clk/imx/clk-imxrt1020.c > @@ -14,68 +14,11 @@ > > #include "clk.h" > > -static ulong imxrt1020_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imxrt1020_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imxrt1020_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imxrt1020_clk_disable(struct clk *clk) > -{ > - return __imxrt1020_clk_enable(clk, 0); > -} > - > -static int imxrt1020_clk_enable(struct clk *clk) > -{ > - return __imxrt1020_clk_enable(clk, 1); > -} > - > static struct clk_ops imxrt1020_clk_ops = { > - .set_rate = imxrt1020_clk_set_rate, > - .get_rate = imxrt1020_clk_get_rate, > - .enable = imxrt1020_clk_enable, > - .disable = imxrt1020_clk_disable, > + .set_rate = ccf_clk_set_rate, > + .get_rate = ccf_clk_get_rate, > + .enable = ccf_clk_enable, > + .disable = ccf_clk_disable, > }; > > static const char * const pll2_bypass_sels[] = {"pll2_sys", "osc", }; > diff --git a/drivers/clk/imx/clk-imxrt1050.c b/drivers/clk/imx/clk-imxrt1050.c > index 3e17161002..5cb5e3bc15 100644 > --- a/drivers/clk/imx/clk-imxrt1050.c > +++ b/drivers/clk/imx/clk-imxrt1050.c > @@ -15,89 +15,6 @@ > > #include "clk.h" > > -static ulong imxrt1050_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu)\n", __func__, clk->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_get_rate(c); > -} > - > -static ulong imxrt1050_clk_set_rate(struct clk *clk, ulong rate) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - return clk_set_rate(c, rate); > -} > - > -static int __imxrt1050_clk_enable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int ret; > - > - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - if (enable) > - ret = clk_enable(c); > - else > - ret = clk_disable(c); > - > - return ret; > -} > - > -static int imxrt1050_clk_disable(struct clk *clk) > -{ > - return __imxrt1050_clk_enable(clk, 0); > -} > - > -static int imxrt1050_clk_enable(struct clk *clk) > -{ > - return __imxrt1050_clk_enable(clk, 1); > -} > - > -static int imxrt1050_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *cp; > - int ret; > - > - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); > - > - ret = clk_get_by_id(clk->id, &c); > - if (ret) > - return ret; > - > - ret = clk_get_by_id(parent->id, &cp); > - if (ret) > - return ret; > - > - return clk_set_parent(c, cp); > -} > - > -static struct clk_ops imxrt1050_clk_ops = { > - .set_rate = imxrt1050_clk_set_rate, > - .get_rate = imxrt1050_clk_get_rate, > - .enable = imxrt1050_clk_enable, > - .disable = imxrt1050_clk_disable, > - .set_parent = imxrt1050_clk_set_parent, > -}; > - > static const char * const pll_ref_sels[] = {"osc", "dummy", }; > static const char * const pll1_bypass_sels[] = {"pll1_arm", "pll1_arm_ref_sel", }; > static const char * const pll2_bypass_sels[] = {"pll2_sys", "pll2_sys_ref_sel", }; > @@ -317,7 +234,7 @@ U_BOOT_DRIVER(imxrt1050_clk) = { > .name = "clk_imxrt1050", > .id = UCLASS_CLK, > .of_match = imxrt1050_clk_ids, > - .ops = &imxrt1050_clk_ops, > + .ops = &ccf_clk_ops, > .probe = imxrt1050_clk_probe, > .flags = DM_FLAG_PRE_RELOC, > }; > diff --git a/drivers/clk/microchip/mpfs_clk.c b/drivers/clk/microchip/mpfs_clk.c > index 05d7647206..67828c9bf4 100644 > --- a/drivers/clk/microchip/mpfs_clk.c > +++ b/drivers/clk/microchip/mpfs_clk.c > @@ -15,63 +15,6 @@ > > #include "mpfs_clk.h" > > -/* All methods are delegated to CCF clocks */ > - > -static ulong mpfs_clk_get_rate(struct clk *clk) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return clk_get_rate(c); > -} > - > -static ulong mpfs_clk_set_rate(struct clk *clk, unsigned long rate) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return clk_set_rate(c, rate); > -} > - > -static int mpfs_clk_set_parent(struct clk *clk, struct clk *parent) > -{ > - struct clk *c, *p; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - > - err = clk_get_by_id(parent->id, &p); > - if (err) > - return err; > - > - return clk_set_parent(c, p); > -} > - > -static int mpfs_clk_endisable(struct clk *clk, bool enable) > -{ > - struct clk *c; > - int err = clk_get_by_id(clk->id, &c); > - > - if (err) > - return err; > - return enable ? clk_enable(c) : clk_disable(c); > -} > - > -static int mpfs_clk_enable(struct clk *clk) > -{ > - return mpfs_clk_endisable(clk, true); > -} > - > -static int mpfs_clk_disable(struct clk *clk) > -{ > - return mpfs_clk_endisable(clk, false); > -} > - > static int mpfs_clk_probe(struct udevice *dev) > { > int ret; > @@ -100,14 +43,6 @@ static int mpfs_clk_probe(struct udevice *dev) > return ret; > } > > -static const struct clk_ops mpfs_clk_ops = { > - .set_rate = mpfs_clk_set_rate, > - .get_rate = mpfs_clk_get_rate, > - .set_parent = mpfs_clk_set_parent, > - .enable = mpfs_clk_enable, > - .disable = mpfs_clk_disable, > -}; > - > static const struct udevice_id mpfs_of_match[] = { > { .compatible = "microchip,mpfs-clkcfg" }, > { } > @@ -117,7 +52,7 @@ U_BOOT_DRIVER(mpfs_clk) = { > .name = "mpfs_clk", > .id = UCLASS_CLK, > .of_match = mpfs_of_match, > - .ops = &mpfs_clk_ops, > + .ops = &ccf_clk_ops, > .probe = mpfs_clk_probe, > .priv_auto = sizeof(struct clk), > .flags = DM_FLAG_PRE_RELOC, > -- > 2.34.1 >
On 3/20/22 4:34 PM, Sean Anderson wrote: > This converts most CCF drivers to use generic ops. imx6q is the only > outlier, where we retain the existing functionality by moving the check to > request(). > > Signed-off-by: Sean Anderson <seanga2@gmail.com> > --- > > drivers/clk/at91/pmc.c | 56 ++------------------ > drivers/clk/imx/clk-imx6q.c | 73 +++----------------------- > drivers/clk/imx/clk-imx8mm.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mn.c | 88 +------------------------------ > drivers/clk/imx/clk-imx8mp.c | 90 +------------------------------- > drivers/clk/imx/clk-imxrt1020.c | 65 ++--------------------- > drivers/clk/imx/clk-imxrt1050.c | 85 +----------------------------- > drivers/clk/microchip/mpfs_clk.c | 67 +----------------------- > 8 files changed, 21 insertions(+), 591 deletions(-) > > diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c > index 1fa42d728b..58bf1047b5 100644 > --- a/drivers/clk/at91/pmc.c > +++ b/drivers/clk/at91/pmc.c This driver needs to #include <linux/clk-provider.h> I've added this while applying. --Sean
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 1fa42d728b..58bf1047b5 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -21,60 +21,12 @@ static int at91_clk_of_xlate(struct clk *clk, struct ofnode_phandle_args *args) return 0; } -static ulong at91_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong at91_clk_set_rate(struct clk *clk, ulong rate) -{ - struct clk *c; - int ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int at91_clk_enable(struct clk *clk) -{ - struct clk *c; - int ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_enable(c); -} - -static int at91_clk_disable(struct clk *clk) -{ - struct clk *c; - int ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_disable(c); -} - const struct clk_ops at91_clk_ops = { .of_xlate = at91_clk_of_xlate, - .set_rate = at91_clk_set_rate, - .get_rate = at91_clk_get_rate, - .enable = at91_clk_enable, - .disable = at91_clk_disable, + .set_rate = ccf_clk_set_rate, + .get_rate = ccf_clk_get_rate, + .enable = ccf_clk_enable, + .disable = ccf_clk_disable, }; /** diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c index 5343036bab..67825af89b 100644 --- a/drivers/clk/imx/clk-imx6q.c +++ b/drivers/clk/imx/clk-imx6q.c @@ -14,79 +14,22 @@ #include "clk.h" -static int imx6q_check_id(ulong id) +static int imx6q_clk_request(struct clk *clk) { - if (id < IMX6QDL_CLK_DUMMY || id >= IMX6QDL_CLK_END) { - printf("%s: Invalid clk ID #%lu\n", __func__, id); + if (clk->id < IMX6QDL_CLK_DUMMY || clk->id >= IMX6QDL_CLK_END) { + printf("%s: Invalid clk ID #%lu\n", __func__, clk->id); return -EINVAL; } return 0; } -static ulong imx6q_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = imx6q_check_id(clk->id); - if (ret) - return ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imx6q_clk_set_rate(struct clk *clk, unsigned long rate) -{ - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - return rate; -} - -static int __imx6q_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret = 0; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = imx6q_check_id(clk->id); - if (ret) - return ret; - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imx6q_clk_disable(struct clk *clk) -{ - return __imx6q_clk_enable(clk, 0); -} - -static int imx6q_clk_enable(struct clk *clk) -{ - return __imx6q_clk_enable(clk, 1); -} - static struct clk_ops imx6q_clk_ops = { - .set_rate = imx6q_clk_set_rate, - .get_rate = imx6q_clk_get_rate, - .enable = imx6q_clk_enable, - .disable = imx6q_clk_disable, + .request = imx6q_clk_request, + .set_rate = ccf_clk_set_rate, + .get_rate = ccf_clk_get_rate, + .enable = ccf_clk_enable, + .disable = ccf_clk_disable, }; static const char *const usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c index 3aa8c641f9..443bbdae33 100644 --- a/drivers/clk/imx/clk-imx8mm.c +++ b/drivers/clk/imx/clk-imx8mm.c @@ -140,92 +140,6 @@ static const char *imx8mm_ecspi2_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sy static const char *imx8mm_ecspi3_sels[] = {"clock-osc-24m", "sys_pll2_200m", "sys_pll1_40m", "sys_pll1_160m", "sys_pll1_800m", "sys_pll3_out", "sys_pll2_250m", "audio_pll2_out", }; -static ulong imx8mm_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imx8mm_clk_set_rate(struct clk *clk, unsigned long rate) -{ - struct clk *c; - int ret; - - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int __imx8mm_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imx8mm_clk_disable(struct clk *clk) -{ - return __imx8mm_clk_enable(clk, 0); -} - -static int imx8mm_clk_enable(struct clk *clk) -{ - return __imx8mm_clk_enable(clk, 1); -} - -static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent) -{ - struct clk *c, *cp; - int ret; - - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - ret = clk_get_by_id(parent->id, &cp); - if (ret) - return ret; - - ret = clk_set_parent(c, cp); - c->dev->parent = cp->dev; - - return ret; -} - -static struct clk_ops imx8mm_clk_ops = { - .set_rate = imx8mm_clk_set_rate, - .get_rate = imx8mm_clk_get_rate, - .enable = imx8mm_clk_enable, - .disable = imx8mm_clk_disable, - .set_parent = imx8mm_clk_set_parent, -}; - static int imx8mm_clk_probe(struct udevice *dev) { void __iomem *base; @@ -470,7 +384,7 @@ U_BOOT_DRIVER(imx8mm_clk) = { .name = "clk_imx8mm", .id = UCLASS_CLK, .of_match = imx8mm_clk_ids, - .ops = &imx8mm_clk_ops, + .ops = &ccf_clk_ops, .probe = imx8mm_clk_probe, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/clk/imx/clk-imx8mn.c b/drivers/clk/imx/clk-imx8mn.c index e398d7de02..bb62138f8c 100644 --- a/drivers/clk/imx/clk-imx8mn.c +++ b/drivers/clk/imx/clk-imx8mn.c @@ -148,92 +148,6 @@ static const char * const imx8mn_usb_phy_sels[] = {"clock-osc-24m", "sys_pll1_10 "sys_pll2_100m", "sys_pll2_200m", "clk_ext2", "clk_ext3", "audio_pll2_out", }; -static ulong imx8mn_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imx8mn_clk_set_rate(struct clk *clk, unsigned long rate) -{ - struct clk *c; - int ret; - - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int __imx8mn_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imx8mn_clk_disable(struct clk *clk) -{ - return __imx8mn_clk_enable(clk, 0); -} - -static int imx8mn_clk_enable(struct clk *clk) -{ - return __imx8mn_clk_enable(clk, 1); -} - -static int imx8mn_clk_set_parent(struct clk *clk, struct clk *parent) -{ - struct clk *c, *cp; - int ret; - - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - ret = clk_get_by_id(parent->id, &cp); - if (ret) - return ret; - - ret = clk_set_parent(c, cp); - c->dev->parent = cp->dev; - - return ret; -} - -static struct clk_ops imx8mn_clk_ops = { - .set_rate = imx8mn_clk_set_rate, - .get_rate = imx8mn_clk_get_rate, - .enable = imx8mn_clk_enable, - .disable = imx8mn_clk_disable, - .set_parent = imx8mn_clk_set_parent, -}; - static int imx8mn_clk_probe(struct udevice *dev) { void __iomem *base; @@ -481,7 +395,7 @@ U_BOOT_DRIVER(imx8mn_clk) = { .name = "clk_imx8mn", .id = UCLASS_CLK, .of_match = imx8mn_clk_ids, - .ops = &imx8mn_clk_ops, + .ops = &ccf_clk_ops, .probe = imx8mn_clk_probe, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c index c77500bcce..ad84ce38ed 100644 --- a/drivers/clk/imx/clk-imx8mp.c +++ b/drivers/clk/imx/clk-imx8mp.c @@ -186,94 +186,6 @@ static const char *imx8mp_enet_phy_ref_sels[] = {"clock-osc-24m", "sys_pll2_50m" static const char *imx8mp_dram_core_sels[] = {"dram_pll_out", "dram_alt_root", }; - -static ulong imx8mp_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imx8mp_clk_set_rate(struct clk *clk, unsigned long rate) -{ - struct clk *c; - int ret; - - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int __imx8mp_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imx8mp_clk_disable(struct clk *clk) -{ - return __imx8mp_clk_enable(clk, 0); -} - -static int imx8mp_clk_enable(struct clk *clk) -{ - return __imx8mp_clk_enable(clk, 1); -} - -static int imx8mp_clk_set_parent(struct clk *clk, struct clk *parent) -{ - struct clk *c, *cp; - int ret; - - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - ret = clk_get_by_id(parent->id, &cp); - if (ret) - return ret; - - ret = clk_set_parent(c, cp); - - c->dev->parent = cp->dev; - - return ret; -} - -static struct clk_ops imx8mp_clk_ops = { - .set_rate = imx8mp_clk_set_rate, - .get_rate = imx8mp_clk_get_rate, - .enable = imx8mp_clk_enable, - .disable = imx8mp_clk_disable, - .set_parent = imx8mp_clk_set_parent, -}; - static int imx8mp_clk_probe(struct udevice *dev) { void __iomem *base; @@ -409,7 +321,7 @@ U_BOOT_DRIVER(imx8mp_clk) = { .name = "clk_imx8mp", .id = UCLASS_CLK, .of_match = imx8mp_clk_ids, - .ops = &imx8mp_clk_ops, + .ops = &ccf_clk_ops, .probe = imx8mp_clk_probe, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/clk/imx/clk-imxrt1020.c b/drivers/clk/imx/clk-imxrt1020.c index 840f783940..3f8b4df3c5 100644 --- a/drivers/clk/imx/clk-imxrt1020.c +++ b/drivers/clk/imx/clk-imxrt1020.c @@ -14,68 +14,11 @@ #include "clk.h" -static ulong imxrt1020_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imxrt1020_clk_set_rate(struct clk *clk, unsigned long rate) -{ - struct clk *c; - int ret; - - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int __imxrt1020_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imxrt1020_clk_disable(struct clk *clk) -{ - return __imxrt1020_clk_enable(clk, 0); -} - -static int imxrt1020_clk_enable(struct clk *clk) -{ - return __imxrt1020_clk_enable(clk, 1); -} - static struct clk_ops imxrt1020_clk_ops = { - .set_rate = imxrt1020_clk_set_rate, - .get_rate = imxrt1020_clk_get_rate, - .enable = imxrt1020_clk_enable, - .disable = imxrt1020_clk_disable, + .set_rate = ccf_clk_set_rate, + .get_rate = ccf_clk_get_rate, + .enable = ccf_clk_enable, + .disable = ccf_clk_disable, }; static const char * const pll2_bypass_sels[] = {"pll2_sys", "osc", }; diff --git a/drivers/clk/imx/clk-imxrt1050.c b/drivers/clk/imx/clk-imxrt1050.c index 3e17161002..5cb5e3bc15 100644 --- a/drivers/clk/imx/clk-imxrt1050.c +++ b/drivers/clk/imx/clk-imxrt1050.c @@ -15,89 +15,6 @@ #include "clk.h" -static ulong imxrt1050_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int ret; - - debug("%s(#%lu)\n", __func__, clk->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_get_rate(c); -} - -static ulong imxrt1050_clk_set_rate(struct clk *clk, ulong rate) -{ - struct clk *c; - int ret; - - debug("%s(#%lu), rate: %lu\n", __func__, clk->id, rate); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - return clk_set_rate(c, rate); -} - -static int __imxrt1050_clk_enable(struct clk *clk, bool enable) -{ - struct clk *c; - int ret; - - debug("%s(#%lu) en: %d\n", __func__, clk->id, enable); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - if (enable) - ret = clk_enable(c); - else - ret = clk_disable(c); - - return ret; -} - -static int imxrt1050_clk_disable(struct clk *clk) -{ - return __imxrt1050_clk_enable(clk, 0); -} - -static int imxrt1050_clk_enable(struct clk *clk) -{ - return __imxrt1050_clk_enable(clk, 1); -} - -static int imxrt1050_clk_set_parent(struct clk *clk, struct clk *parent) -{ - struct clk *c, *cp; - int ret; - - debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id); - - ret = clk_get_by_id(clk->id, &c); - if (ret) - return ret; - - ret = clk_get_by_id(parent->id, &cp); - if (ret) - return ret; - - return clk_set_parent(c, cp); -} - -static struct clk_ops imxrt1050_clk_ops = { - .set_rate = imxrt1050_clk_set_rate, - .get_rate = imxrt1050_clk_get_rate, - .enable = imxrt1050_clk_enable, - .disable = imxrt1050_clk_disable, - .set_parent = imxrt1050_clk_set_parent, -}; - static const char * const pll_ref_sels[] = {"osc", "dummy", }; static const char * const pll1_bypass_sels[] = {"pll1_arm", "pll1_arm_ref_sel", }; static const char * const pll2_bypass_sels[] = {"pll2_sys", "pll2_sys_ref_sel", }; @@ -317,7 +234,7 @@ U_BOOT_DRIVER(imxrt1050_clk) = { .name = "clk_imxrt1050", .id = UCLASS_CLK, .of_match = imxrt1050_clk_ids, - .ops = &imxrt1050_clk_ops, + .ops = &ccf_clk_ops, .probe = imxrt1050_clk_probe, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/clk/microchip/mpfs_clk.c b/drivers/clk/microchip/mpfs_clk.c index 05d7647206..67828c9bf4 100644 --- a/drivers/clk/microchip/mpfs_clk.c +++ b/drivers/clk/microchip/mpfs_clk.c @@ -15,63 +15,6 @@ #include "mpfs_clk.h" -/* All methods are delegated to CCF clocks */ - -static ulong mpfs_clk_get_rate(struct clk *clk) -{ - struct clk *c; - int err = clk_get_by_id(clk->id, &c); - - if (err) - return err; - return clk_get_rate(c); -} - -static ulong mpfs_clk_set_rate(struct clk *clk, unsigned long rate) -{ - struct clk *c; - int err = clk_get_by_id(clk->id, &c); - - if (err) - return err; - return clk_set_rate(c, rate); -} - -static int mpfs_clk_set_parent(struct clk *clk, struct clk *parent) -{ - struct clk *c, *p; - int err = clk_get_by_id(clk->id, &c); - - if (err) - return err; - - err = clk_get_by_id(parent->id, &p); - if (err) - return err; - - return clk_set_parent(c, p); -} - -static int mpfs_clk_endisable(struct clk *clk, bool enable) -{ - struct clk *c; - int err = clk_get_by_id(clk->id, &c); - - if (err) - return err; - return enable ? clk_enable(c) : clk_disable(c); -} - -static int mpfs_clk_enable(struct clk *clk) -{ - return mpfs_clk_endisable(clk, true); -} - -static int mpfs_clk_disable(struct clk *clk) -{ - return mpfs_clk_endisable(clk, false); -} - static int mpfs_clk_probe(struct udevice *dev) { int ret; @@ -100,14 +43,6 @@ static int mpfs_clk_probe(struct udevice *dev) return ret; } -static const struct clk_ops mpfs_clk_ops = { - .set_rate = mpfs_clk_set_rate, - .get_rate = mpfs_clk_get_rate, - .set_parent = mpfs_clk_set_parent, - .enable = mpfs_clk_enable, - .disable = mpfs_clk_disable, -}; - static const struct udevice_id mpfs_of_match[] = { { .compatible = "microchip,mpfs-clkcfg" }, { } @@ -117,7 +52,7 @@ U_BOOT_DRIVER(mpfs_clk) = { .name = "mpfs_clk", .id = UCLASS_CLK, .of_match = mpfs_of_match, - .ops = &mpfs_clk_ops, + .ops = &ccf_clk_ops, .probe = mpfs_clk_probe, .priv_auto = sizeof(struct clk), .flags = DM_FLAG_PRE_RELOC,
This converts most CCF drivers to use generic ops. imx6q is the only outlier, where we retain the existing functionality by moving the check to request(). Signed-off-by: Sean Anderson <seanga2@gmail.com> --- drivers/clk/at91/pmc.c | 56 ++------------------ drivers/clk/imx/clk-imx6q.c | 73 +++----------------------- drivers/clk/imx/clk-imx8mm.c | 88 +------------------------------ drivers/clk/imx/clk-imx8mn.c | 88 +------------------------------ drivers/clk/imx/clk-imx8mp.c | 90 +------------------------------- drivers/clk/imx/clk-imxrt1020.c | 65 ++--------------------- drivers/clk/imx/clk-imxrt1050.c | 85 +----------------------------- drivers/clk/microchip/mpfs_clk.c | 67 +----------------------- 8 files changed, 21 insertions(+), 591 deletions(-)