# x86 architecture documentation This section contains documentation about coreboot on x86 architecture. * [x86 PAE support](pae.md) ## State of x86_64 support At the moment there's no single board that supports x86_64 or to be exact `ARCH_RAMSTAGE_X86_64` and `ARCH_ROMSTAGE_X86_64`. In order to add support for x86_64 the following assumptions are made: * The CPU supports long mode * All memory returned by malloc must be below 4GiB in physical memory * All code that is to be run must be below 4GiB in physical memory * The high dword of pointers is always zero * The reference implementation is qemu * The CPU supports 1GiB hugepages ## Assuptions for ARCH_ROMSTAGE_X86_64 reference implementation * 0-4GiB are identity mapped using 1GiB huge-pages * Memory above 4GiB isn't accessible * pagetables reside in _pagetables * Romstage must install new pagetables in CBMEM after RAMINIT ## Assuptions for ARCH_RAMSTAGE_X86_64 reference implementation * Romstage installed pagetables according to memory layout * Memory above 4GiB is accessible ## Steps to add basic support for x86_64 * Add x86_64 toolchain support - *DONE* * Fix compilation errors - *DONE* * Fix linker errors - *TODO* * Add x86_64 rmodule support - *ONGERRIT* * Add x86_64 exception handlers - *TODO* * Setup page tables for long mode - *TODO* * Add assembly code for long mode - *TODO* * Add assembly code to return to protected mode - *TODO* * Implement reference code for mainboard `emulation/qemu-q35` - *TODO* ## Porting other boards * Fix compilation errors * Test how well CAR works with x86_64 and paging * Improve mode switches * Test libgfxinit / VGA Option ROMs / FSP