]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
clk: Use generic CCF ops where possible
authorSean Anderson <seanga2@gmail.com>
Sun, 20 Mar 2022 20:34:46 +0000 (16:34 -0400)
committerSean Anderson <seanga2@gmail.com>
Wed, 30 Mar 2022 18:18:56 +0000 (14:18 -0400)
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>
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20220320203446.740178-2-seanga2@gmail.com
[ fixed missing include for at91 ]
Signed-off-by: Sean Anderson <seanga2@gmail.com>
drivers/clk/at91/pmc.c
drivers/clk/imx/clk-imx6q.c
drivers/clk/imx/clk-imx8mm.c
drivers/clk/imx/clk-imx8mn.c
drivers/clk/imx/clk-imx8mp.c
drivers/clk/imx/clk-imxrt1020.c
drivers/clk/imx/clk-imxrt1050.c
drivers/clk/microchip/mpfs_clk.c

index 1fa42d728b59c1c3a8ddb942516949ba07d21b0a..270892517a90ecb1310b73551c8fc012247f6cc1 100644 (file)
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <asm/io.h>
 #include <clk-uclass.h>
+#include <linux/clk-provider.h>
 #include "pmc.h"
 
 static int at91_clk_of_xlate(struct clk *clk, struct ofnode_phandle_args *args)
@@ -21,60 +22,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,
 };
 
 /**
index 5343036babd5ee7da3e9ec87b6bff20d69b7e048..67825af89b8120b2e59b1b6e277efd677215b715 100644 (file)
 
 #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", };
index 3aa8c641f9ab5c59b85516920483c02a3d787ba9..443bbdae332fac702268b3f417b00639d52e257d 100644 (file)
@@ -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,
 };
index e398d7de02a551a503e597add7c71cae510ef901..bb62138f8cada7d547070f16a4305e7e32ceedda 100644 (file)
@@ -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,
 };
index c77500bcce0c5a5b319fc8b2a27c9a7f3633a9f2..ad84ce38ede5ec12955c386ef847744676f2cec2 100644 (file)
@@ -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,
 };
index 840f783940fdb60922758d18b1699e04959eba68..3f8b4df3c5a060ec53c654595cfd2f3c30fe67bc 100644 (file)
 
 #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", };
index 3e1716100240ec5c4e38255d8446941a98d91423..5cb5e3bc15a5984411e3b8753a741557fefff63a 100644 (file)
 
 #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,
 };
index 05d7647206cfcdce49f9d0f1f4e782dda7b48240..67828c9bf404deb426b70d7d7b1cf21f103165a6 100644 (file)
 
 #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,