summaryrefslogtreecommitdiff
path: root/arch/x86/include
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2015-06-23 12:18:52 +0800
committerSimon Glass <sjg@chromium.org>2015-07-14 18:03:17 -0600
commit07545d861ccc54aecbeaa51b264258b90912b856 (patch)
tree3e64d07fec4397bf2b7dc0433ca74b184b6c3318 /arch/x86/include
parent7f5df8d42d8eb0fbdb6bf168fd530aa0f01b99c7 (diff)
downloadu-boot-imx-07545d861ccc54aecbeaa51b264258b90912b856.zip
u-boot-imx-07545d861ccc54aecbeaa51b264258b90912b856.tar.gz
u-boot-imx-07545d861ccc54aecbeaa51b264258b90912b856.tar.bz2
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>
Diffstat (limited to 'arch/x86/include')
-rw-r--r--arch/x86/include/asm/mpspec.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h
index 849113a..efa9231 100644
--- a/arch/x86/include/asm/mpspec.h
+++ b/arch/x86/include/asm/mpspec.h
@@ -431,4 +431,14 @@ void mp_write_compat_address_space(struct mp_config_table *mc, int busid,
*/
u32 mptable_finalize(struct mp_config_table *mc);
+/**
+ * write_mp_table() - Write MP table
+ *
+ * This writes MP table at a given address.
+ *
+ * @addr: start address to write MP table
+ * @return: end address of MP table
+ */
+u32 write_mp_table(u32 addr);
+
#endif /* __ASM_MPSPEC_H */