clocksource/drivers/rockchip_timer: Implement clocksource timer
authorAlexander Kochetkov <al.kochet@gmail.com>
Tue, 31 Jan 2017 12:43:14 +0000 (15:43 +0300)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Fri, 7 Apr 2017 14:23:05 +0000 (16:23 +0200)
commit5e0a39d0f727b35c8b7ef56ba0724c8ceb006297
treefacd0003d75e6f8b5f9f5230319f8c6fb895fc2f
parentb72af3462dd8344285f6cc1ba726202b0d4eae20
clocksource/drivers/rockchip_timer: Implement clocksource timer

The clock supplying the arm-global-timer on the rk3188 is coming from the
the cpu clock itself and thus changes its rate everytime cpufreq adjusts
the cpu frequency making this timer unsuitable as a stable clocksource
and sched clock.

The rk3188, rk3288 and following socs share a separate timer block already
handled by the rockchip-timer driver. Therefore adapt this driver to also
be able to act as clocksource and sched clock on rk3188.

In order to test clocksource you can run following commands and check
how much time it take in real. On rk3188 it take about ~45 seconds.

    cpufreq-set -f 1.6GHZ
    date; sleep 60; date

In order to use the patch you need to declare two timers in the dts
file. The first timer will be initialized as clockevent provider
and the second one as clocksource. The clockevent must be from
alive subsystem as it used as backup for the local timers at sleep
time.

The patch does not break compatibility with older device tree files.
The older device tree files contain only one timer. The timer
will be initialized as clockevent, as expected.

rk3288 (and probably anything newer) is irrelevant to this patch,
as it has the arch timer interface. This patch may be useful
for Cortex-A9/A5 based parts.

Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/Kconfig
drivers/clocksource/rockchip_timer.c