1.6 KiB
1.6 KiB
x86 architecture documentation
This section contains documentation about coreboot on x86 architecture.
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