clocksource/drivers/arm_arch_timer: Work around Hisilicon erratum 161010101
authorDing Tianhong <dingtianhong@huawei.com>
Mon, 6 Feb 2017 16:47:42 +0000 (16:47 +0000)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Tue, 7 Feb 2017 23:14:04 +0000 (00:14 +0100)
commitbb42ca47401010fc02901b5e8f79e40a26f208cb
treeb93be8bb1c508f6e5777698b0f46f327d6581fe3
parent16d10ef29f25aba923779234bb93a451b14d20e6
clocksource/drivers/arm_arch_timer: Work around Hisilicon erratum 161010101

Erratum Hisilicon-161010101 says that the ARM generic timer counter "has
the potential to contain an erroneous value when the timer value
changes". Accesses to TVAL (both read and write) are also affected due
to the implicit counter read. Accesses to CVAL are not affected.

The workaround is to reread the system count registers until the value
of the second read is larger than the first one by less than 32, the
system counter can be guaranteed not to return wrong value twice by
back-to-back read and the error value is always larger than the correct
one by 32. Writes to TVAL are replaced with an equivalent write to CVAL.

Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
[Mark: split patch, fix Kconfig, reword commit message]
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/Kconfig
drivers/clocksource/arm_arch_timer.c