x86: Generate a valid MultiProcessor (MP) table
authorBin Meng <bmeng.cn@gmail.com>
Tue, 23 Jun 2015 04:18:52 +0000 (12:18 +0800)
committerSimon Glass <sjg@chromium.org>
Wed, 15 Jul 2015 00:03:17 +0000 (18:03 -0600)
commit07545d861ccc54aecbeaa51b264258b90912b856
tree3e64d07fec4397bf2b7dc0433ca74b184b6c3318
parent7f5df8d42d8eb0fbdb6bf168fd530aa0f01b99c7
x86: Generate a valid MultiProcessor (MP) table

Implement write_mp_table() to create a minimal working MP table.
This includes an MP floating table, a configuration table header
and all of the 5 base configuration table entries. The I/O interrupt
assignment table entry is created based on the same information used
in the creation of PIRQ routing table from device tree. A check
duplicated entry logic is applied to prevent writing multiple I/O
interrupt entries with the same information.

Use a Kconfig option GENERATE_MP_TABLE to tell U-Boot whether we
need actually write the MP table at the F seg, just like we did for
PIRQ routing and SFI tables. With MP table existence, linux kernel
will switch to I/O APIC and local APIC to process all the peripheral
interrupts instead of 8259 PICs. This takes full advantage of the
multicore hardware and the SMP kernel.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
arch/x86/Kconfig
arch/x86/include/asm/mpspec.h
arch/x86/lib/mpspec.c
arch/x86/lib/tables.c