On Mon, Sep 10, 2018 at 12:20 PM Chris Brandt <Chris.Brandt@xxxxxxxxxxx> wrote: > > On Monday, September 10, 2018, Rob Herring wrote: > > > The current OSTM driver uses TIMER_OF_DECLARE and that basically means > > > it will never work with my new SoC. > > > > > > For now, can I change the driver to register a standard platform driver > > > in subsys_initcall like the other Renesas timer drivers? > > > > I'm confused how this can even work as an initcall. The whole reason > > *_OF_DECLARE exists is for things that have to be setup before > > initcalls. > > I wrote a long explanation of the issue, but the summary is: > > The timer (which is currently using TIMER_OF_DECLARE) can't start up > until the clocks are set up because of_clk_get fails(). > > But, the clock driver is a platform driver that is not started until > subsys_initcall. > > So, unless you have a clock driver with CLK_OF_DECLARE, you can't use > a timer driver with a TIMER_OF_DECLARE driver. > > And, there is no such thing as a deferred probe for timer drivers > declared with IMER_OF_DECLARE. Yes, I read the thread and understand all of this part. Well before we get to initcalls, the kernel calls the arch specific time_init() which (on ARM) calls of_clk_init (for all the reasons above) and then timer_probe(). When timer_probe returns, it is expected that you have setup a clocksource and clockevent. If you haven't, then at some point before we get to initcalls we should hang because we're not getting any timer interrupts and time is not advancing. At least that's how it used to be and maybe something has changed (It's been a while since I've looked at this area). Maybe you just get lucky and it works as long as no thread blocks (e.g. on a msleep). If things changed and you can setup a timer in an initcall, then why are folks still trying to do things like early platform drivers. Regular drivers would work and we should be able to completely remove CLK_OF_DECLARE and TIMER_OF_DECLARE. Rob