Skip to contentSkip to conversation

use HPET timer in standard interrupt delivery mode

PATCH In review Venki Pallipadi 1 participant 1 message May 7, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 6/8 use HPET timer in standard interrupt delivery mode

Add support for HPET timers in "standard" interrupt delivery mode as opposed to "legacy replacement" mode. This enables HPET timer to be
tied to regular IRQ lines and can enable different HPET timers to be targetted to different CPUs. And with this change, HPET timer need not have to overstep on legacy IRQ0 or IRQ8 lines.

include/asm-i386/hpet.h +24 -14
Index: linux-2.6.21-tolkml/include/asm-i386/hpet.h
===================================================================
@@ -43,15 +43,18 @@
 #define HPET_CFG	0x010
 #define HPET_STATUS	0x020
 #define HPET_COUNTER	0x0f0
-#define HPET_T0_CFG	0x100
-#define HPET_T0_CMP	0x108
-#define HPET_T0_ROUTE	0x110
-#define HPET_T1_CFG	0x120
-#define HPET_T1_CMP	0x128
-#define HPET_T1_ROUTE	0x130
-#define HPET_T2_CFG	0x140
-#define HPET_T2_CMP	0x148
-#define HPET_T2_ROUTE	0x150
+
+#define HPET_Tn_OFFSET		0x20
+#define HPET_Tn_CFG(n)		(0x100 + (n) * HPET_Tn_OFFSET)
+#define HPET_Tn_ROUTE(n)	(0x104 + (n) * HPET_Tn_OFFSET)
+#define HPET_Tn_CMP(n)		(0x108 + (n) * HPET_Tn_OFFSET)
+
+#define HPET_T0_CFG	HPET_Tn_CFG(0)
+#define HPET_T0_CMP	HPET_Tn_CMP(0)
+#define HPET_T1_CFG	HPET_Tn_CFG(1)
+#define HPET_T1_CMP	HPET_Tn_CMP(1)
+#define HPET_T2_CFG	HPET_Tn_CFG(2)
+#define HPET_T2_CMP	HPET_Tn_CMP(2)
 
 #define HPET_ID_LEGSUP	0x00008000
 #define HPET_ID_NUMBER	0x00001f00
@@ -63,11 +66,18 @@
 #define	HPET_LEGACY_8254	2
 #define	HPET_LEGACY_RTC		8
 
-#define HPET_TN_ENABLE		0x004
-#define HPET_TN_PERIODIC	0x008
-#define HPET_TN_PERIODIC_CAP	0x010
-#define HPET_TN_SETVAL		0x040
-#define HPET_TN_32BIT		0x100
+#define HPET_TN_LEVEL		0x0002
+#define HPET_TN_ENABLE		0x0004
+#define HPET_TN_PERIODIC	0x0008
+#define HPET_TN_PERIODIC_CAP	0x0010
+#define HPET_TN_64BIT_CAP	0x0020
+#define HPET_TN_SETVAL		0x0040
+#define HPET_TN_32BIT		0x0100
+#define HPET_TN_ROUTE		0x3e00
+#define HPET_TN_FSB		0x4000
+#define HPET_TN_FSB_CAP		0x8000
+
+#define HPET_TN_ROUTE_SHIFT	9
 
 /* Use our own asm for 64 bit multiply/divide */
 #define ASM_MUL64_REG(eax_out,edx_out,reg_in,eax_in) 			\
arch/i386/kernel/hpet.c +470 -12

528 lines not on this page · raw message

include/asm-i386/io_apic.h +11 -0
Index: linux-2.6.21-tolkml/include/asm-i386/io_apic.h
===================================================================
@@ -144,6 +144,12 @@
 extern int io_apic_get_redir_entries (int ioapic);
 extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low);
 extern int timer_uses_ioapic_pin_0;
+#else
+static inline int io_apic_set_pci_routing(int ioapic, int pin, int irq,
+				int edge_level, int active_high_low)
+{
+	return -1;
+}
 #endif /* CONFIG_ACPI */
 
 extern int (*ioapic_renumber_irq)(int ioapic, int irq);
@@ -151,6 +157,11 @@
 #else  /* !CONFIG_X86_IO_APIC */
 #define io_apic_assign_pci_irqs 0
 static inline void disable_ioapic_setup(void) { }
+static inline int io_apic_set_pci_routing(int ioapic, int pin, int irq,
+				int edge_level, int active_high_low)
+{
+	return -1;
+}
 #endif
 
 #endif