Message ID | 1423763164-5606-6-git-send-email-mcoquelin.stm32@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Feb 12, 2015 at 11:45 AM, Maxime Coquelin <mcoquelin.stm32@gmail.com> wrote: > Some DT ARM platforms need the reset controllers to be initialized before > the timers. > This is the case of the stm32 and sunxi platforms. I would say this is the exception, not the rule and therefore should be handled in a machine desc function. Or it could be part of your timer setup. Or is the bootloader's problem (like arch timer setup). We just want to limit how much this mechanism gets used. Rob > > This patch adds a call to reset_controller_of_init() to the default > .init_time callback when RESET_CONTROLLER is used by the platform. > > Signed-off-by: Maxime Coquelin <mcoquelin.stm32@gmail.com> > --- > arch/arm/kernel/time.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c > index 0cc7e58..4601b1e 100644 > --- a/arch/arm/kernel/time.c > +++ b/arch/arm/kernel/time.c > @@ -20,6 +20,7 @@ > #include <linux/irq.h> > #include <linux/kernel.h> > #include <linux/profile.h> > +#include <linux/reset-controller.h> > #include <linux/sched.h> > #include <linux/sched_clock.h> > #include <linux/smp.h> > @@ -117,6 +118,9 @@ void __init time_init(void) > if (machine_desc->init_time) { > machine_desc->init_time(); > } else { > +#ifdef CONFIG_RESET_CONTROLLER > + reset_controller_of_init(); > +#endif > #ifdef CONFIG_COMMON_CLK > of_clk_init(NULL); > #endif > -- > 1.9.1 >
On Sun, Feb 15, 2015 at 04:17:31PM -0600, Rob Herring wrote: > On Thu, Feb 12, 2015 at 11:45 AM, Maxime Coquelin > <mcoquelin.stm32@gmail.com> wrote: > > Some DT ARM platforms need the reset controllers to be initialized before > > the timers. > > This is the case of the stm32 and sunxi platforms. > > I would say this is the exception, not the rule and therefore should > be handled in a machine desc function. Or it could be part of your > timer setup. Or is the bootloader's problem (like arch timer setup). > > We just want to limit how much this mechanism gets used. Can you clarify please - what is "this mechanism"? Placing explicit calls at this location, or the whole OF_DECLARE_* stuff? Sebastian suggested using the OF_DECLARE_* stuff for the Dove PMU - so maybe you have a comment on that too? Thanks.
2015-02-15 23:17 GMT+01:00 Rob Herring <robherring2@gmail.com>: > On Thu, Feb 12, 2015 at 11:45 AM, Maxime Coquelin > <mcoquelin.stm32@gmail.com> wrote: >> Some DT ARM platforms need the reset controllers to be initialized before >> the timers. >> This is the case of the stm32 and sunxi platforms. > > I would say this is the exception, not the rule and therefore should > be handled in a machine desc function. Or it could be part of your > timer setup. Or is the bootloader's problem (like arch timer setup). The only valid way in my opinion would be to implement the init_time callback (as your first proposal), duplicating what performs the time_init() function. Then, if other machines than sunxi and stm32 have some day the same need, we could consider moving the call to reset_controller_of_init() function to time_init(). > > We just want to limit how much this mechanism gets used. Could you elaborate the reason why we want to limit this mechanism please? I am not sure to understand. Thanks, Maxime > > Rob > >> >> This patch adds a call to reset_controller_of_init() to the default >> .init_time callback when RESET_CONTROLLER is used by the platform. >> >> Signed-off-by: Maxime Coquelin <mcoquelin.stm32@gmail.com> >> --- >> arch/arm/kernel/time.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c >> index 0cc7e58..4601b1e 100644 >> --- a/arch/arm/kernel/time.c >> +++ b/arch/arm/kernel/time.c >> @@ -20,6 +20,7 @@ >> #include <linux/irq.h> >> #include <linux/kernel.h> >> #include <linux/profile.h> >> +#include <linux/reset-controller.h> >> #include <linux/sched.h> >> #include <linux/sched_clock.h> >> #include <linux/smp.h> >> @@ -117,6 +118,9 @@ void __init time_init(void) >> if (machine_desc->init_time) { >> machine_desc->init_time(); >> } else { >> +#ifdef CONFIG_RESET_CONTROLLER >> + reset_controller_of_init(); >> +#endif >> #ifdef CONFIG_COMMON_CLK >> of_clk_init(NULL); >> #endif >> -- >> 1.9.1 >>
On Sun, Feb 15, 2015 at 5:12 PM, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Sun, Feb 15, 2015 at 04:17:31PM -0600, Rob Herring wrote: >> On Thu, Feb 12, 2015 at 11:45 AM, Maxime Coquelin >> <mcoquelin.stm32@gmail.com> wrote: >> > Some DT ARM platforms need the reset controllers to be initialized before >> > the timers. >> > This is the case of the stm32 and sunxi platforms. >> >> I would say this is the exception, not the rule and therefore should >> be handled in a machine desc function. Or it could be part of your >> timer setup. Or is the bootloader's problem (like arch timer setup). >> >> We just want to limit how much this mechanism gets used. > > Can you clarify please - what is "this mechanism"? Placing explicit > calls at this location, or the whole OF_DECLARE_* stuff? Well, it is both really, but I guess OF_DECLARE_ linker sections are just an implementation detail of scattering various explicit init calls. My concern is we'll end up with another initcall like mechanism and the ordering problems associated with them. For example, what if another platform needs clocks initialized before the reset controller? I could see wanting to add gpio, pinctrl, syscon, etc. Another example is the Beagleboard Cape folks want to read an I2C EEPROM early to apply overlays before drivers probe. Where do we draw the line? > Sebastian suggested using the OF_DECLARE_* stuff for the Dove PMU - > so maybe you have a comment on that too? I have the same position that it is the exception, not the rule, so use the machine descriptor. I'm willing to be convinced otherwise, but I think these cases need to be questioned. Rob
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index 0cc7e58..4601b1e 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c @@ -20,6 +20,7 @@ #include <linux/irq.h> #include <linux/kernel.h> #include <linux/profile.h> +#include <linux/reset-controller.h> #include <linux/sched.h> #include <linux/sched_clock.h> #include <linux/smp.h> @@ -117,6 +118,9 @@ void __init time_init(void) if (machine_desc->init_time) { machine_desc->init_time(); } else { +#ifdef CONFIG_RESET_CONTROLLER + reset_controller_of_init(); +#endif #ifdef CONFIG_COMMON_CLK of_clk_init(NULL); #endif
Some DT ARM platforms need the reset controllers to be initialized before the timers. This is the case of the stm32 and sunxi platforms. This patch adds a call to reset_controller_of_init() to the default .init_time callback when RESET_CONTROLLER is used by the platform. Signed-off-by: Maxime Coquelin <mcoquelin.stm32@gmail.com> --- arch/arm/kernel/time.c | 4 ++++ 1 file changed, 4 insertions(+)