From: Bin Meng Date: Sun, 22 May 2016 08:45:34 +0000 (-0700) Subject: x86: quark: Assign a unique I/O APIC ID X-Git-Tag: v2016.07-rc1~177^2~5 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=911d6f693292dbf9b54de43f18ac95427e9accd8;p=oweals%2Fu-boot.git x86: quark: Assign a unique I/O APIC ID After power-on, both LAPIC and I/O APIC appear with the same APIC ID zero, which creates an ID conflict. When generating MP table, U-Boot reports zero as the LAPIC ID in the processor entry, and zero as the I/O APIC ID in the I/O APIC as well as the I/O interrupt assignment entries. Such MP table confuses Linux kernel and finally a kernel panic is seen during boot: BUG: unable to handle kernel paging request at ffff9000 IP: [] native_io_apic_write+0x22/0x30 *pdpt = 00000000014fb001 *pde = 00000000014ff067 *pte = 0000000000000000 Oops: 0002 [#1] Modules linked in: Pid: 1, comm: swapper Tainted: G W 3.8.7 #3 intel galileo/galileo EIP: 0060:[] EFLAGS: 00010086 CPU: 0 EIP is at native_io_apic_write+0x22/0x30 ... Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009 Signed-off-by: Bin Meng Reviewed-by: Simon Glass --- diff --git a/arch/x86/cpu/quark/quark.c b/arch/x86/cpu/quark/quark.c index cf3fe7fb89..bdd360a99f 100644 --- a/arch/x86/cpu/quark/quark.c +++ b/arch/x86/cpu/quark/quark.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -338,6 +339,9 @@ int arch_misc_init(void) mrccache_save(); #endif + /* Assign a unique I/O APIC ID */ + io_apic_set_id(1); + return 0; }