Messages in this thread | | | Date | Mon, 21 Nov 2022 17:43:25 +0200 | From | Abel Vesa <> | Subject | Re: [PATCH] clk: imx8mp: register driver at arch_initcall time |
| |
On 22-09-28 14:41:08, Rasmus Villemoes wrote: > We have an imx8mp-based board with an external gpio-triggered > watchdog. Currently, we don't get to handle that in time before it > resets the board. > > The probe of the watchdog device gets deferred because the SOC's GPIO > controller is not yet ready, and the probe of that in turn gets deferred > because its clock provider (namely, this driver) is not yet > ready. Altogether, the watchdog does not get handled until the late > initcall deferred_probe_initcall has made sure all leftover devices > have been probed, and that's way too late. > > Aside from being necessary for our board, this also reduces total boot > time because fewer device probes get deferred. >
I'm gonna be honest here. I can't say I'm happy with this. I would suggest finding a solution to disable the external watchdog before booting the kernel, up until the driver probes, would be preferable to me.
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> > --- > It would probably be reasonable to do the same to the other imx8m* clk > drivers, but I don't have any such hardware to test on. > > drivers/clk/imx/clk-imx8mp.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c > index e89db568f5a8..9ddd39a664cc 100644 > --- a/drivers/clk/imx/clk-imx8mp.c > +++ b/drivers/clk/imx/clk-imx8mp.c > @@ -734,7 +734,19 @@ static struct platform_driver imx8mp_clk_driver = { > .of_match_table = imx8mp_clk_of_match, > }, > }; > -module_platform_driver(imx8mp_clk_driver); > + > +static int __init imx8mp_clk_init(void) > +{ > + return platform_driver_register(&imx8mp_clk_driver); > +} > +arch_initcall(imx8mp_clk_init); > + > +static void __exit imx8mp_clk_exit(void) > +{ > + platform_driver_unregister(&imx8mp_clk_driver); > +} > +module_exit(imx8mp_clk_exit); > + > module_param(mcore_booted, bool, S_IRUGO); > MODULE_PARM_DESC(mcore_booted, "See Cortex-M core is booted or not"); > > -- > 2.37.2 >
| |