Message ID | 201306030056.03522.heiko@sntech.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jun 3, 2013 at 12:56 AM, Heiko Stübner <heiko@sntech.de> wrote: > Currently the dw_apb_timer always expects a separate special timer to be > availbable for the sched_clock. Some devices using dw_apb_timers do not > have the sptimer but can use the clocksource as sched_clock. > Therefore this patch adds using the clocksource timer as > a fallback if no usable sched timer is found. > > Signed-off-by: Heiko Stuebner <heiko@sntech.de> Is this really what the patch does? I mean "ass the clocksourse as fallback", it seems more like that is controlled from the device tree, this looks more like some more careful handling of the device tree input making the sched_timer optional, it doesn't really "add" anything, does it? Yours, Linus Walleij
Am Dienstag, 4. Juni 2013, 08:34:44 schrieb Linus Walleij: > On Mon, Jun 3, 2013 at 12:56 AM, Heiko Stübner <heiko@sntech.de> wrote: > > Currently the dw_apb_timer always expects a separate special timer to be > > availbable for the sched_clock. Some devices using dw_apb_timers do not > > have the sptimer but can use the clocksource as sched_clock. > > Therefore this patch adds using the clocksource timer as > > a fallback if no usable sched timer is found. > > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de> > > Is this really what the patch does? I mean "ass the clocksourse as > fallback", it seems more like that is controlled from the device tree, > this looks more like some more careful handling of the device tree > input making the sched_timer optional, it doesn't really "add" > anything, does it? Right, the commit message is probably based a bit to much on the before-state of the driver, always expecting the "sptimer" and panicing if not found. How about: Currently the dw_apb_timer always expects a separate special timer to be availbable for the sched_clock. Some devices using dw_apb_timers do not have this sptimer but can use the clocksource as sched_clock instead. Therefore enable the driver to distiguish between devices with and without sptimer based on the devicetree data and select the correct timer as sched_clock.
On Tue, Jun 4, 2013 at 10:29 AM, Heiko Stübner <heiko@sntech.de> wrote: > How about: > > Currently the dw_apb_timer always expects a separate special timer to be > availbable for the sched_clock. Some devices using dw_apb_timers do not > have this sptimer but can use the clocksource as sched_clock instead. > > Therefore enable the driver to distiguish between devices with and without > sptimer based on the devicetree data and select the correct timer as > sched_clock. Allright, Acked-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c index ab09ed3..d6c0fda 100644 --- a/drivers/clocksource/dw_apb_timer_of.c +++ b/drivers/clocksource/dw_apb_timer_of.c @@ -57,6 +57,9 @@ static void add_clockevent(struct device_node *event_timer) dw_apb_clockevent_register(ced); } +static void __iomem *sched_io_base; +static u32 sched_rate; + static void add_clocksource(struct device_node *source_timer) { void __iomem *iobase; @@ -71,9 +74,15 @@ static void add_clocksource(struct device_node *source_timer) dw_apb_clocksource_start(cs); dw_apb_clocksource_register(cs); -} -static void __iomem *sched_io_base; + /* + * Fallback to use the clocksource as sched_clock if no separate + * timer is found. sched_io_base then points to the current_value + * register of the clocksource timer. + */ + sched_io_base = iobase + 0x04; + sched_rate = rate; +} static u32 read_sched_clock(void) { @@ -89,16 +98,15 @@ static const struct of_device_id sptimer_ids[] __initconst = { static void init_sched_clock(void) { struct device_node *sched_timer; - u32 rate; sched_timer = of_find_matching_node(NULL, sptimer_ids); - if (!sched_timer) - panic("No RTC for sched clock to use"); - - timer_get_base_and_rate(sched_timer, &sched_io_base, &rate); - of_node_put(sched_timer); + if (sched_timer) { + timer_get_base_and_rate(sched_timer, &sched_io_base, + &sched_rate); + of_node_put(sched_timer); + } - setup_sched_clock(read_sched_clock, 32, rate); + setup_sched_clock(read_sched_clock, 32, sched_rate); } static const struct of_device_id osctimer_ids[] __initconst = {
Currently the dw_apb_timer always expects a separate special timer to be availbable for the sched_clock. Some devices using dw_apb_timers do not have the sptimer but can use the clocksource as sched_clock. Therefore this patch adds using the clocksource timer as a fallback if no usable sched timer is found. Signed-off-by: Heiko Stuebner <heiko@sntech.de> --- drivers/clocksource/dw_apb_timer_of.c | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-)