On Fri, Oct 3, 2014 at 5:26 PM, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > On Fri, Oct 3, 2014 at 10:55 PM, jonsmirl@xxxxxxxxx <jonsmirl@xxxxxxxxx> wrote: >> On Thu, Oct 2, 2014 at 9:46 AM, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: >>> On Thu, Oct 2, 2014 at 3:34 PM, jonsmirl@xxxxxxxxx <jonsmirl@xxxxxxxxx> wrote: >>>> Does the clock and regulator cleanup happen before drivers can load >>>> off from initrd? I didn't think it did but I might be wrong. >>> >>> Yes >>> >>> drivers/base/power/domain.c:late_initcall(genpd_poweroff_unused); >>> drivers/clk/clk.c:late_initcall_sync(clk_disable_unused); >>> drivers/regulator/core.c:late_initcall_sync(regulator_init_complete); >> >> What do you think about putting these calls onto an ioctl somewhere >> and then eliminating the late_initcall(..)? A tiny user space app >> could then hit that ioctl after all of the loadable device drivers are >> loaded. Add the command to make this ioctl call to busybox or udev. >> After all, it is not fatal if these calls aren't made, all they do is >> save power. Add a link in rc.d or somewhere similar to run this app at >> the appropriate time. >> >> Switching these over to an ioctl allows a window to be opened for >> device specific driver loading before the clock/regulator clean up >> happens. >> >> Now all of this mess of protecting clocks and regulator disappears. >> Instead get the device specific drivers written and loaded, then run >> the cleanup app which hits the ioctl(). All of the correct >> clock/regulators will be claimed and then this clean code will do the >> right thing. >> >> From my perspective it appears that this cleanup is being done too >> early which then triggers a need to protect things from cleanup. > > Not doing the cleanup doesn't help. > > If someone else calls clk_disable() on a clock which shares a parent > with the clock you're silently using, that clock will still be disabled. > This can happen at any time. Could we start all of the regulators and clocks off with a reference count of one, but not do anything to change their state? Then this ioctl() would decrement that extra reference. Removing the extra reference would then disable everything that isn't claimed. > > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx > > In personal conversations with technical people, I call myself a hacker. But > when I'm talking to journalists I just say "programmer" or something like that. > -- Linus Torvalds -- Jon Smirl jonsmirl@xxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html