blob: c9d05d3caaca9701a5988770e6dfda5b45b4bfad [file] [log] [blame]
Mauro Carvalho Chehab458f69e2019-06-12 14:53:00 -03001===========================================
2High Precision Event Timer Driver for Linux
3===========================================
Linus Torvalds1da177e2005-04-16 15:20:36 -07004
David Brownell64a76f62008-07-29 12:47:38 -07005The High Precision Event Timer (HPET) hardware follows a specification
Michael S. Tsirkin4e7f9df2016-02-11 01:05:01 +02006by Intel and Microsoft, revision 1.
David Brownell64a76f62008-07-29 12:47:38 -07007
8Each HPET has one fixed-rate counter (at 10+ MHz, hence "High Precision")
9and up to 32 comparators. Normally three or more comparators are provided,
Matt LaPlante19f59462009-04-27 15:06:31 +020010each of which can generate oneshot interrupts and at least one of which has
David Brownell64a76f62008-07-29 12:47:38 -070011additional hardware to support periodic interrupts. The comparators are
12also called "timers", which can be misleading since usually timers are
13independent of each other ... these share a counter, complicating resets.
14
15HPET devices can support two interrupt routing modes. In one mode, the
16comparators are additional interrupt sources with no particular system
17role. Many x86 BIOS writers don't route HPET interrupts at all, which
18prevents use of that mode. They support the other "legacy replacement"
19mode where the first two comparators block interrupts from 8254 timers
20and from the RTC.
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
Randy Dunlap8a0d4902005-11-07 01:01:06 -080022The driver supports detection of HPET driver allocation and initialization
23of the HPET before the driver module_init routine is called. This enables
24platform code which uses timer 0 or 1 as the main timer to intercept HPET
25initialization. An example of this initialization can be found in
David Brownell64a76f62008-07-29 12:47:38 -070026arch/x86/kernel/hpet.c.
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
David Brownell64a76f62008-07-29 12:47:38 -070028The driver provides a userspace API which resembles the API found in the
Randy Dunlape6186302010-03-10 15:21:56 -080029RTC driver framework. An example user space program is provided in
Shuah Khan155fe002016-09-16 17:20:42 -060030file:samples/timers/hpet_example.c