|
@@ -4289,3 +4289,24 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
|
|
|
|
|
nr_ioapics++;
|
|
nr_ioapics++;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/* Enable IOAPIC early just for system timer */
|
|
|
|
+void __init pre_init_apic_IRQ0(void)
|
|
|
|
+{
|
|
|
|
+ struct irq_cfg *cfg;
|
|
|
|
+ struct irq_desc *desc;
|
|
|
|
+
|
|
|
|
+ printk(KERN_INFO "Early APIC setup for system timer0\n");
|
|
|
|
+#ifndef CONFIG_SMP
|
|
|
|
+ phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid);
|
|
|
|
+#endif
|
|
|
|
+ desc = irq_to_desc_alloc_node(0, 0);
|
|
|
|
+
|
|
|
|
+ setup_local_APIC();
|
|
|
|
+
|
|
|
|
+ cfg = irq_cfg(0);
|
|
|
|
+ add_pin_to_irq_node(cfg, 0, 0, 0);
|
|
|
|
+ set_irq_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq, "edge");
|
|
|
|
+
|
|
|
|
+ setup_IO_APIC_irq(0, 0, 0, desc, 0, 0);
|
|
|
|
+}
|