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 a1c18d26e1d186c62034197c70a275e16a38bf4c..8fc9187165cd50b93690d5883ef930954e01febd 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 f862d8c071e7806427be760874e6ea3b7babb0b5..54668aab2404131f80c1e2eb5a55e028fdf74794 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 ed8423e07991a47d23c700c732c769b44107c535..1ea415b876df9fbd6c065d85dffb5d9159796854 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();