Tasks UefiCpuPkg CpuDxe MP support

Jordan Justen edited this page Nov 10, 2014 · 2 revisions
Clone this wiki locally

Enable multiprocessor support for IA32 & X64 within UefiCpuPkg/CpuDxe. (Implement )

  • Difficulty: Medium
  • Language: Assembly, C
  • Mentor:
  • Suggested by:

Table of Contents



Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1


Development environment

Building: This project can be completed on any edk2 supported OS or toolchain.

Any assembly code should be ported to all assembly formats.

Test environments

  • OVMF: With QEMU you can use the -smp parameter to enable multiple processors
  • DUET: With DUET you can run on a system with multiple threads/cores/processors


Some possible sub-goals for the driver

  • Successfully start up other processor (Startup IPI)
  • Transition from 16-bit real to 32-bit flat mode (see ap-startup-example below)
  • Transition from 16-bit real to 64-bit long mode (see ap-startup-example below)
  • AP starts running CpuDxe code (see ap-startup-example below)
  • AP can run code requested by MpService protocol (StartupAllAPs/StartupThisAP)
    • See StartCore below
  • Support for remaining MpService protocol functions
  • Dynamically update ACPI tables in OVMF based on number of processors
  • Refer to "Software Developer's Manual" to research further initialization requirements.

Getting Started

Further Discussion

This project would be for an edk2 based driver, so please discuss the project on edk2-devel. For IRC, #edk2 on irc.oftc.net.

See Also