diff mbox series

clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal

Message ID 20211005064513.27655-1-ryan_chen@aspeedtech.com (mailing list archive)
State Changes Requested, archived
Headers show
Series clk:aspeed:Fix reset driver probe from builtin_platform to core_initcal | expand

Commit Message

Ryan Chen Oct. 5, 2021, 6:45 a.m. UTC
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 <ryan_chen@aspeedtech.com>
---
 drivers/clk/clk-ast2600.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

Stephen Boyd Oct. 17, 2021, 1:45 a.m. UTC | #1
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 <ryan_chen@aspeedtech.com>
Ryan Chen Oct. 18, 2021, 12:54 a.m. UTC | #2
Hello,
> -----Original Message-----
> From: Stephen Boyd <sboyd@kernel.org>
> Sent: Sunday, October 17, 2021 9:45 AM
> To: Andrew Jeffery <andrew@aj.id.au>; Joel Stanley <joel@jms.id.au>; Michael
> Turquette <mturquette@baylibre.com>; linux-clk@vger.kernel.org;
> linux-kernel@vger.kernel.org; Ryan Chen <ryan_chen@aspeedtech.com>
> 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 <ryan_chen@aspeedtech.com>
Billy Tsai Dec. 13, 2021, 1:49 a.m. UTC | #3
On 2021/10/5, 2:45 PM, "Ryan Chen" <ryan_chen@aspeedtech.com> 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 <ryan_chen@aspeedtech.com>

Reviewed-by: Billy Tsai <billy_tsai@aspeedtech.com>

    >   ---
    >    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
diff mbox series

Patch

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,