linux/arch/mips/loongson64/loongson-3
Huacai Chen 5610b1254e MIPS: hpet: Choose a safe value for the ETIME check
This patch is borrowed from x86 hpet driver and explaind below:

Due to the overly intelligent design of HPETs, we need to workaround
the problem that the compare value which we write is already behind
the actual counter value at the point where the value hits the real
compare register. This happens for two reasons:

1) We read out the counter, add the delta and write the result to the
   compare register. When a NMI hits between the read out and the write
   then the counter can be ahead of the event already.

2) The write to the compare register is delayed by up to two HPET
   cycles in AMD chipsets.

We can work around this by reading back the compare register to make
sure that the written value has hit the hardware. But that is bad
performance wise for the normal case where the event is far enough in
the future.

As we already know that the write can be delayed by up to two cycles
we can avoid the read back of the compare register completely if we
make the decision whether the delta has elapsed already or not based
on the following calculation:

  cmp = event - actual_count;

If cmp is less than 64 HPET clock cycles, then we decide that the event
has happened already and return -ETIME. That covers the above #1 and #2
problems which would cause a wait for HPET wraparound (~306 seconds).

Signed-off-by: Huacai Chen <chenhc@lemote.com>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Steven J. Hill <Steven.Hill@imgtec.com>
Cc: Fuxin Zhang <zhangfx@lemote.com>
Cc: Zhangjin Wu <wuzhangjin@gmail.com>
Cc: Huacai Chen <chenhc@lemote.com>
Cc: linux-mips@linux-mips.org
Cc: stable@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/12162/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2016-01-22 02:00:49 +01:00
..
Makefile MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
cop2-ex.c MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
hpet.c MIPS: hpet: Choose a safe value for the ETIME check 2016-01-22 02:00:49 +01:00
irq.c MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
numa.c MIPS, CPUFREQ: Fix spelling of Institute. 2015-07-07 20:59:42 +02:00
platform.c MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
smp.c MIPS: Loongson-3: Fix SMP_ASK_C0COUNT IPI handler 2016-01-22 01:59:57 +01:00
smp.h MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00