2021-10-05 06:47:38

by Ryan Chen

[permalink] [raw]
Subject: [PATCH] clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal

Change the reset probe sequence from builtin_platform to core_initcal.
For avoid some driver is probe but failed due to reset driver not probe.

Fixes: d3d04f6c330a ("clk: Add support for AST2600 SoC")
Signed-off-by: Ryan Chen <[email protected]>
---
drivers/clk/clk-ast2600.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
index 085d0a18b2b6..6293d8d1a6a8 100644
--- a/drivers/clk/clk-ast2600.c
+++ b/drivers/clk/clk-ast2600.c
@@ -686,7 +686,13 @@ static struct platform_driver aspeed_g6_clk_driver = {
.suppress_bind_attrs = true,
},
};
-builtin_platform_driver(aspeed_g6_clk_driver);
+
+static int __init aspeed_g6_clk_init(void)
+{
+ return platform_driver_register(&aspeed_g6_clk_driver);
+}
+
+core_initcall(aspeed_g6_clk_init);

static const u32 ast2600_a0_axi_ahb_div_table[] = {
2, 2, 3, 5,
--
2.17.1


2021-10-18 03:40:51

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH] clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal

Quoting Ryan Chen (2021-10-04 23:45:13)
> Change the reset probe sequence from builtin_platform to core_initcal.
> For avoid some driver is probe but failed due to reset driver not probe.

I don't get it. Does something never try probe again because it can't
get the reset it wants? I understand that builtin_platform_driver()
moves the initcall level later than core_initcall() so this is a
workaround for some driver probe ordering problem?

>
> Fixes: d3d04f6c330a ("clk: Add support for AST2600 SoC")
> Signed-off-by: Ryan Chen <[email protected]>

2021-10-18 03:49:00

by Ryan Chen

[permalink] [raw]
Subject: RE: [PATCH] clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal

Hello,
> -----Original Message-----
> From: Stephen Boyd <[email protected]>
> Sent: Sunday, October 17, 2021 9:45 AM
> To: Andrew Jeffery <[email protected]>; Joel Stanley <[email protected]>; Michael
> Turquette <[email protected]>; [email protected];
> [email protected]; Ryan Chen <[email protected]>
> Subject: Re: [PATCH] clk:aspeed:Fix reset driver probe from builtin_platform to
> core_initcal
>
> Quoting Ryan Chen (2021-10-04 23:45:13)
> > Change the reset probe sequence from builtin_platform to core_initcal.
> > For avoid some driver is probe but failed due to reset driver not probe.
>
> I don't get it. Does something never try probe again because it can't get the
> reset it wants? I understand that builtin_platform_driver() moves the initcall
> level later than core_initcall() so this is a workaround for some driver probe
> ordering problem?
The most of driver have reset function in probe. if driver probe need do the reset
(ex: devm_reset_control_get_shared) but reset driver not ready (devm_reset_controller_register),
that driver probe will cause the fail, than after reset driver probe, there will have second probe In driver.
That the reason I put reset probe in core_initcall.
And also you can see that the reason most soc chip do the devm_reset_controller_register in core_initcall.

>
> >
> > Fixes: d3d04f6c330a ("clk: Add support for AST2600 SoC")
> > Signed-off-by: Ryan Chen <[email protected]>

2021-12-13 01:49:46

by Billy Tsai

[permalink] [raw]
Subject: Re: [PATCH] clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal

On 2021/10/5, 2:45 PM, "Ryan Chen" <[email protected]> wrote:

> Change the reset probe sequence from builtin_platform to core_initcal.
> For avoid some driver is probe but failed due to reset driver not probe.

> Fixes: d3d04f6c330a ("clk: Add support for AST2600 SoC")
> Signed-off-by: Ryan Chen <[email protected]>

Reviewed-by: Billy Tsai <[email protected]>

> ---
> drivers/clk/clk-ast2600.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)

> diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
> index 085d0a18b2b6..6293d8d1a6a8 100644
> --- a/drivers/clk/clk-ast2600.c
> +++ b/drivers/clk/clk-ast2600.c
> @@ -686,7 +686,13 @@ static struct platform_driver aspeed_g6_clk_driver = {
> .suppress_bind_attrs = true,
> },
> };
> -builtin_platform_driver(aspeed_g6_clk_driver);
> +
> +static int __init aspeed_g6_clk_init(void)
> +{
> + return platform_driver_register(&aspeed_g6_clk_driver);
> +}
> +
> +core_initcall(aspeed_g6_clk_init);

> static const u32 ast2600_a0_axi_ahb_div_table[] = {
> 2, 2, 3, 5,
> --
> 2.17.1