Messages in this thread | | | From | Benjamin Gaignard <> | Date | Tue, 29 Oct 2019 13:43:14 +0100 | Subject | Re: [PATCH] arm: kernel: initialize broadcast hrtimer based clock event device |
| |
Le mar. 15 oct. 2019 à 10:42, Benjamin Gaignard <benjamin.gaignard@st.com> a écrit : > > On platforms implementing CPU power management, the CPUidle subsystem > can allow CPUs to enter idle states where local timers logic is lost on power > down. To keep the software timers functional the kernel relies on an > always-on broadcast timer to be present in the platform to relay the > interrupt signalling the timer expiries. > > For platforms implementing CPU core gating that do not implement an always-on > HW timer or implement it in a broken way, this patch adds code to initialize > the kernel hrtimer based clock event device upon boot (which can be chosen as > tick broadcast device by the kernel). > It relies on a dynamically chosen CPU to be always powered-up. This CPU then > relays the timer interrupt to CPUs in deep-idle states through its HW local > timer device. > > Having a CPU always-on has implications on power management platform > capabilities and makes CPUidle suboptimal, since at least a CPU is kept > always in a shallow idle state by the kernel to relay timer interrupts, > but at least leaves the kernel with a functional system with some working > power management capabilities. > > The hrtimer based clock event device is unconditionally registered, but > has the lowest possible rating such that any broadcast-capable HW clock > event device present will be chosen in preference as the tick broadcast > device.
Gentle ping,
Thanks, Benjamin > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@st.com> > --- > Note: > - The same reasons lead to same patch than for arm64 so I have copy the > commit message from: 9358d755bd5c ("arm64: kernel: initialize broadcast > hrtimer based clock event device") > arch/arm/kernel/time.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c > index b996b2cf0703..dddc7ebf4db4 100644 > --- a/arch/arm/kernel/time.c > +++ b/arch/arm/kernel/time.c > @@ -9,6 +9,7 @@ > * reading the RTC at bootup, etc... > */ > #include <linux/clk-provider.h> > +#include <linux/clockchips.h> > #include <linux/clocksource.h> > #include <linux/errno.h> > #include <linux/export.h> > @@ -107,5 +108,6 @@ void __init time_init(void) > of_clk_init(NULL); > #endif > timer_probe(); > + tick_setup_hrtimer_broadcast(); > } > } > -- > 2.15.0 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
| |