diff --git a/Documentation/arch/index.md b/Documentation/arch/index.md index c3b080e5ab..a0f1050868 100644 --- a/Documentation/arch/index.md +++ b/Documentation/arch/index.md @@ -6,3 +6,6 @@ architectures. ## RISC-V - [RISC-V documentation](riscv/index.md) + +## x86 +- [x86 documentation](x86/index.md) diff --git a/Documentation/arch/x86/index.md b/Documentation/arch/x86/index.md new file mode 100644 index 0000000000..3ecb9803a4 --- /dev/null +++ b/Documentation/arch/x86/index.md @@ -0,0 +1,42 @@ +# 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