x86: make the LAPIC / IOAPIC construct switchable with Kconfig
authorHannes Schmelzer <oe5hpm@oevsv.at>
Sun, 18 Nov 2018 22:19:43 +0000 (23:19 +0100)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 10 Dec 2018 02:12:29 +0000 (10:12 +0800)
There are still systems running which do not have any LAPIC or even
IOAPIC. Responsible MSRs for those do not exist and the systems are
crashing on trying to setup LAPIC.

This commit makes the APIC stuff able to switch off for those boards
which dont' have an LAPIC / IOAPIC.

Signed-off-by: Hannes Schmelzer <oe5hpm@oevsv.at>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/Kconfig
arch/x86/cpu/Makefile
arch/x86/cpu/i386/interrupt.c

index a1c18d2..8fc9187 100644 (file)
@@ -736,6 +736,15 @@ config I8259_PIC
          slave) interrupt controllers. Include this to have U-Boot set up
          the interrupt correctly.
 
+config APIC
+       bool
+       default y
+       help
+         The (A)dvanced (P)rogrammable (I)nterrupt (C)ontroller is responsible
+         for catching interrupts and distributing them to one or more CPU
+         cores. In most cases there are some LAPICs (local) for each core and
+         one I/O APIC. This conjunction is found on most modern x86 systems.
+
 config PINCTRL_ICH6
        bool
        help
index f862d8c..54668aa 100644 (file)
@@ -35,7 +35,7 @@ obj-$(CONFIG_NORTHBRIDGE_INTEL_IVYBRIDGE) += ivybridge/
 obj-$(CONFIG_INTEL_QUARK) += quark/
 obj-$(CONFIG_INTEL_QUEENSBAY) += queensbay/
 obj-$(CONFIG_INTEL_TANGIER) += tangier/
-obj-y += lapic.o ioapic.o
+obj-$(CONFIG_APIC) += lapic.o ioapic.o
 obj-y += irq.o
 ifndef CONFIG_$(SPL_)X86_64
 obj-$(CONFIG_SMP) += mp_init.o
index ed8423e..1ea415b 100644 (file)
@@ -264,7 +264,9 @@ int interrupt_init(void)
        i8259_init();
 #endif
 
+#ifdef CONFIG_APIC
        lapic_setup();
+#endif
 
        /* Initialize core interrupt and exception functionality of CPU */
        cpu_init_interrupts();