diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/clk/renesas/clk-rcar-gen3.c | 82 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a774a1-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a774b1-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a774c0-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a774e1-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a7795-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a7796-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a77965-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a77970-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a77980-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a77990-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a77995-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/r8a779a0-cpg-mssr.c | 15 | ||||
-rw-r--r-- | drivers/clk/renesas/rcar-gen3-cpg.h | 3 |
14 files changed, 153 insertions, 112 deletions
diff --git a/drivers/clk/renesas/clk-rcar-gen3.c b/drivers/clk/renesas/clk-rcar-gen3.c index 94715bb00c..3611bdb06f 100644 --- a/drivers/clk/renesas/clk-rcar-gen3.c +++ b/drivers/clk/renesas/clk-rcar-gen3.c @@ -13,12 +13,15 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device-internal.h> +#include <dm/lists.h> #include <errno.h> #include <log.h> #include <wait_bit.h> #include <asm/global_data.h> #include <asm/io.h> #include <linux/bitops.h> +#include <reset-uclass.h> #include <dt-bindings/clock/renesas-cpg-mssr.h> @@ -389,7 +392,7 @@ const struct clk_ops gen3_clk_ops = { .of_xlate = gen3_clk_of_xlate, }; -int gen3_clk_probe(struct udevice *dev) +static int gen3_clk_probe(struct udevice *dev) { struct gen3_clk_priv *priv = dev_get_priv(dev); struct cpg_mssr_info *info = @@ -447,9 +450,84 @@ int gen3_clk_probe(struct udevice *dev) return 0; } -int gen3_clk_remove(struct udevice *dev) +static int gen3_clk_remove(struct udevice *dev) { struct gen3_clk_priv *priv = dev_get_priv(dev); return renesas_clk_remove(priv->base, priv->info); } + +U_BOOT_DRIVER(clk_gen3) = { + .name = "clk_gen3", + .id = UCLASS_CLK, + .priv_auto = sizeof(struct gen3_clk_priv), + .ops = &gen3_clk_ops, + .probe = gen3_clk_probe, + .remove = gen3_clk_remove, +}; + +static int gen3_reset_assert(struct reset_ctl *reset_ctl) +{ + struct udevice *cdev = (struct udevice *)dev_get_driver_data(reset_ctl->dev); + struct gen3_clk_priv *priv = dev_get_priv(cdev); + unsigned int reg = reset_ctl->id / 32; + unsigned int bit = reset_ctl->id % 32; + u32 bitmask = BIT(bit); + + writel(bitmask, priv->base + priv->info->reset_regs[reg]); + + return 0; +} + +static int gen3_reset_deassert(struct reset_ctl *reset_ctl) +{ + struct udevice *cdev = (struct udevice *)dev_get_driver_data(reset_ctl->dev); + struct gen3_clk_priv *priv = dev_get_priv(cdev); + unsigned int reg = reset_ctl->id / 32; + unsigned int bit = reset_ctl->id % 32; + u32 bitmask = BIT(bit); + + writel(bitmask, priv->base + priv->info->reset_clear_regs[reg]); + + return 0; +} + +static const struct reset_ops rst_gen3_ops = { + .rst_assert = gen3_reset_assert, + .rst_deassert = gen3_reset_deassert, +}; + +U_BOOT_DRIVER(rst_gen3) = { + .name = "rst_gen3", + .id = UCLASS_RESET, + .ops = &rst_gen3_ops, +}; + +int gen3_cpg_bind(struct udevice *parent) +{ + struct cpg_mssr_info *info = + (struct cpg_mssr_info *)dev_get_driver_data(parent); + struct udevice *cdev, *rdev; + struct driver *drv; + int ret; + + drv = lists_driver_lookup_name("clk_gen3"); + if (!drv) + return -ENOENT; + + ret = device_bind_with_driver_data(parent, drv, "clk_gen3", (ulong)info, + dev_ofnode(parent), &cdev); + if (ret) + return ret; + + drv = lists_driver_lookup_name("rst_gen3"); + if (!drv) + return -ENOENT; + + ret = device_bind_with_driver_data(parent, drv, "rst_gen3", (ulong)cdev, + dev_ofnode(parent), &rdev); + if (ret) + device_unbind(cdev); + + return ret; +} diff --git a/drivers/clk/renesas/r8a774a1-cpg-mssr.c b/drivers/clk/renesas/r8a774a1-cpg-mssr.c index 445c58b88a..1f76d6b2c2 100644 --- a/drivers/clk/renesas/r8a774a1-cpg-mssr.c +++ b/drivers/clk/renesas/r8a774a1-cpg-mssr.c @@ -331,7 +331,7 @@ static const struct cpg_mssr_info r8a774a1_cpg_mssr_info = { .get_pll_config = r8a774a1_get_pll_config, }; -static const struct udevice_id r8a774a1_clk_ids[] = { +static const struct udevice_id r8a774a1_cpg_ids[] = { { .compatible = "renesas,r8a774a1-cpg-mssr", .data = (ulong)&r8a774a1_cpg_mssr_info, @@ -339,12 +339,9 @@ static const struct udevice_id r8a774a1_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a774a1) = { - .name = "clk_r8a774a1", - .id = UCLASS_CLK, - .of_match = r8a774a1_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a774a1) = { + .name = "cpg_r8a774a1", + .id = UCLASS_NOP, + .of_match = r8a774a1_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a774b1-cpg-mssr.c b/drivers/clk/renesas/r8a774b1-cpg-mssr.c index a09f11d433..b5927c7892 100644 --- a/drivers/clk/renesas/r8a774b1-cpg-mssr.c +++ b/drivers/clk/renesas/r8a774b1-cpg-mssr.c @@ -329,7 +329,7 @@ static const struct cpg_mssr_info r8a774b1_cpg_mssr_info = { .get_pll_config = r8a774b1_get_pll_config, }; -static const struct udevice_id r8a774b1_clk_ids[] = { +static const struct udevice_id r8a774b1_cpg_ids[] = { { .compatible = "renesas,r8a774b1-cpg-mssr", .data = (ulong)&r8a774b1_cpg_mssr_info, @@ -337,12 +337,9 @@ static const struct udevice_id r8a774b1_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a774b1) = { - .name = "clk_r8a774b1", - .id = UCLASS_CLK, - .of_match = r8a774b1_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a774b1) = { + .name = "cpg_r8a774b1", + .id = UCLASS_NOP, + .of_match = r8a774b1_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a774c0-cpg-mssr.c b/drivers/clk/renesas/r8a774c0-cpg-mssr.c index f2dce5d885..802a9c0b11 100644 --- a/drivers/clk/renesas/r8a774c0-cpg-mssr.c +++ b/drivers/clk/renesas/r8a774c0-cpg-mssr.c @@ -300,7 +300,7 @@ const struct cpg_mssr_info r8a774c0_cpg_mssr_info = { .get_pll_config = r8a774c0_get_pll_config, }; -static const struct udevice_id r8a774c0_clk_ids[] = { +static const struct udevice_id r8a774c0_cpg_ids[] = { { .compatible = "renesas,r8a774c0-cpg-mssr", .data = (ulong)&r8a774c0_cpg_mssr_info @@ -308,12 +308,9 @@ static const struct udevice_id r8a774c0_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a774c0) = { - .name = "clk_r8a774c0", - .id = UCLASS_CLK, - .of_match = r8a774c0_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a774c0) = { + .name = "cpg_r8a774c0", + .id = UCLASS_NOP, + .of_match = r8a774c0_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a774e1-cpg-mssr.c b/drivers/clk/renesas/r8a774e1-cpg-mssr.c index ab44dbdeeb..617fa769dc 100644 --- a/drivers/clk/renesas/r8a774e1-cpg-mssr.c +++ b/drivers/clk/renesas/r8a774e1-cpg-mssr.c @@ -343,7 +343,7 @@ static const struct cpg_mssr_info r8a774e1_cpg_mssr_info = { .get_pll_config = r8a774e1_get_pll_config, }; -static const struct udevice_id r8a774e1_clk_ids[] = { +static const struct udevice_id r8a774e1_cpg_ids[] = { { .compatible = "renesas,r8a774e1-cpg-mssr", .data = (ulong)&r8a774e1_cpg_mssr_info @@ -351,12 +351,9 @@ static const struct udevice_id r8a774e1_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a774e1) = { - .name = "clk_r8a774e1", - .id = UCLASS_CLK, - .of_match = r8a774e1_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a774e1) = { + .name = "cpg_r8a774e1", + .id = UCLASS_NOP, + .of_match = r8a774e1_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c index 31cd24ec12..005f6a9ecd 100644 --- a/drivers/clk/renesas/r8a7795-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c @@ -380,7 +380,7 @@ static const struct cpg_mssr_info r8a7795_cpg_mssr_info = { .get_pll_config = r8a7795_get_pll_config, }; -static const struct udevice_id r8a7795_clk_ids[] = { +static const struct udevice_id r8a7795_cpg_ids[] = { { .compatible = "renesas,r8a7795-cpg-mssr", .data = (ulong)&r8a7795_cpg_mssr_info @@ -388,12 +388,9 @@ static const struct udevice_id r8a7795_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a7795) = { - .name = "clk_r8a7795", - .id = UCLASS_CLK, - .of_match = r8a7795_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a7795) = { + .name = "cpg_r8a7795", + .id = UCLASS_NOP, + .of_match = r8a7795_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c index a3fee15851..27cf62e021 100644 --- a/drivers/clk/renesas/r8a7796-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c @@ -370,7 +370,7 @@ static const struct cpg_mssr_info r8a77961_cpg_mssr_info = { .get_pll_config = r8a7796_get_pll_config, }; -static const struct udevice_id r8a7796_clk_ids[] = { +static const struct udevice_id r8a7796_cpg_ids[] = { { .compatible = "renesas,r8a7796-cpg-mssr", .data = (ulong)&r8a7796_cpg_mssr_info, @@ -382,12 +382,9 @@ static const struct udevice_id r8a7796_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a7796) = { - .name = "clk_r8a7796", - .id = UCLASS_CLK, - .of_match = r8a7796_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a7796) = { + .name = "cpg_r8a7796", + .id = UCLASS_NOP, + .of_match = r8a7796_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a77965-cpg-mssr.c b/drivers/clk/renesas/r8a77965-cpg-mssr.c index cd3bda9a39..58e557a95f 100644 --- a/drivers/clk/renesas/r8a77965-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77965-cpg-mssr.c @@ -358,7 +358,7 @@ static const struct cpg_mssr_info r8a77965_cpg_mssr_info = { .get_pll_config = r8a77965_get_pll_config, }; -static const struct udevice_id r8a77965_clk_ids[] = { +static const struct udevice_id r8a77965_cpg_ids[] = { { .compatible = "renesas,r8a77965-cpg-mssr", .data = (ulong)&r8a77965_cpg_mssr_info, @@ -366,12 +366,9 @@ static const struct udevice_id r8a77965_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a77965) = { - .name = "clk_r8a77965", - .id = UCLASS_CLK, - .of_match = r8a77965_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a77965) = { + .name = "cpg_r8a77965", + .id = UCLASS_NOP, + .of_match = r8a77965_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a77970-cpg-mssr.c b/drivers/clk/renesas/r8a77970-cpg-mssr.c index a85bed6192..4d72ec1fae 100644 --- a/drivers/clk/renesas/r8a77970-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77970-cpg-mssr.c @@ -219,7 +219,7 @@ static const struct cpg_mssr_info r8a77970_cpg_mssr_info = { .get_pll_config = r8a77970_get_pll_config, }; -static const struct udevice_id r8a77970_clk_ids[] = { +static const struct udevice_id r8a77970_cpg_ids[] = { { .compatible = "renesas,r8a77970-cpg-mssr", .data = (ulong)&r8a77970_cpg_mssr_info @@ -227,12 +227,9 @@ static const struct udevice_id r8a77970_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a77970) = { - .name = "clk_r8a77970", - .id = UCLASS_CLK, - .of_match = r8a77970_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a77970) = { + .name = "cpg_r8a77970", + .id = UCLASS_NOP, + .of_match = r8a77970_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a77980-cpg-mssr.c b/drivers/clk/renesas/r8a77980-cpg-mssr.c index 1f29e77da9..f29727ddb9 100644 --- a/drivers/clk/renesas/r8a77980-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77980-cpg-mssr.c @@ -239,7 +239,7 @@ static const struct cpg_mssr_info r8a77980_cpg_mssr_info = { .get_pll_config = r8a77980_get_pll_config, }; -static const struct udevice_id r8a77980_clk_ids[] = { +static const struct udevice_id r8a77980_cpg_ids[] = { { .compatible = "renesas,r8a77980-cpg-mssr", .data = (ulong)&r8a77980_cpg_mssr_info @@ -247,12 +247,9 @@ static const struct udevice_id r8a77980_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a77980) = { - .name = "clk_r8a77980", - .id = UCLASS_CLK, - .of_match = r8a77980_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a77980) = { + .name = "cpg_r8a77980", + .id = UCLASS_NOP, + .of_match = r8a77980_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a77990-cpg-mssr.c b/drivers/clk/renesas/r8a77990-cpg-mssr.c index 4d9b78ebab..1864af30c8 100644 --- a/drivers/clk/renesas/r8a77990-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77990-cpg-mssr.c @@ -314,7 +314,7 @@ static const struct cpg_mssr_info r8a77990_cpg_mssr_info = { .get_pll_config = r8a77990_get_pll_config, }; -static const struct udevice_id r8a77990_clk_ids[] = { +static const struct udevice_id r8a77990_cpg_ids[] = { { .compatible = "renesas,r8a77990-cpg-mssr", .data = (ulong)&r8a77990_cpg_mssr_info @@ -322,12 +322,9 @@ static const struct udevice_id r8a77990_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a77990) = { - .name = "clk_r8a77990", - .id = UCLASS_CLK, - .of_match = r8a77990_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a77990) = { + .name = "cpg_r8a77990", + .id = UCLASS_NOP, + .of_match = r8a77990_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a77995-cpg-mssr.c b/drivers/clk/renesas/r8a77995-cpg-mssr.c index ee4061f9d8..03ae863c8b 100644 --- a/drivers/clk/renesas/r8a77995-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77995-cpg-mssr.c @@ -250,7 +250,7 @@ static const struct cpg_mssr_info r8a77995_cpg_mssr_info = { .get_pll_config = r8a77995_get_pll_config, }; -static const struct udevice_id r8a77995_clk_ids[] = { +static const struct udevice_id r8a77995_cpg_ids[] = { { .compatible = "renesas,r8a77995-cpg-mssr", .data = (ulong)&r8a77995_cpg_mssr_info @@ -258,12 +258,9 @@ static const struct udevice_id r8a77995_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a77995) = { - .name = "clk_r8a77995", - .id = UCLASS_CLK, - .of_match = r8a77995_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a77995) = { + .name = "cpg_r8a77995", + .id = UCLASS_NOP, + .of_match = r8a77995_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/r8a779a0-cpg-mssr.c b/drivers/clk/renesas/r8a779a0-cpg-mssr.c index 0c28477377..a9c941b6db 100644 --- a/drivers/clk/renesas/r8a779a0-cpg-mssr.c +++ b/drivers/clk/renesas/r8a779a0-cpg-mssr.c @@ -301,7 +301,7 @@ static const struct cpg_mssr_info r8a779a0_cpg_mssr_info = { .reg_layout = CLK_REG_LAYOUT_RCAR_V3U, }; -static const struct udevice_id r8a779a0_clk_ids[] = { +static const struct udevice_id r8a779a0_cpg_ids[] = { { .compatible = "renesas,r8a779a0-cpg-mssr", .data = (ulong)&r8a779a0_cpg_mssr_info @@ -309,12 +309,9 @@ static const struct udevice_id r8a779a0_clk_ids[] = { { } }; -U_BOOT_DRIVER(clk_r8a779a0) = { - .name = "clk_r8a779a0", - .id = UCLASS_CLK, - .of_match = r8a779a0_clk_ids, - .priv_auto = sizeof(struct gen3_clk_priv), - .ops = &gen3_clk_ops, - .probe = gen3_clk_probe, - .remove = gen3_clk_remove, +U_BOOT_DRIVER(cpg_r8a779a0) = { + .name = "cpg_r8a779a0", + .id = UCLASS_NOP, + .of_match = r8a779a0_cpg_ids, + .bind = gen3_cpg_bind, }; diff --git a/drivers/clk/renesas/rcar-gen3-cpg.h b/drivers/clk/renesas/rcar-gen3-cpg.h index 85bfc7233b..a7074e2bcd 100644 --- a/drivers/clk/renesas/rcar-gen3-cpg.h +++ b/drivers/clk/renesas/rcar-gen3-cpg.h @@ -126,8 +126,7 @@ struct gen3_clk_priv { const struct rcar_gen3_cpg_pll_config *cpg_pll_config; }; -int gen3_clk_probe(struct udevice *dev); -int gen3_clk_remove(struct udevice *dev); +int gen3_cpg_bind(struct udevice *parent); extern const struct clk_ops gen3_clk_ops; |