diff options
author | Patrick Rudolph <siro@das-labor.org> | 2018-12-05 19:09:04 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2018-12-19 10:31:07 +0000 |
commit | f04e76bcf049764ca48f36967a039a210f910cc2 (patch) | |
tree | f8d6e1ca94f5d3f74e7c70f1ecf26cafbfcc082f | |
parent | ab5890d498c095da0d2047adfc68fc0f04ed4fbd (diff) | |
download | coreboot-f04e76bcf049764ca48f36967a039a210f910cc2.tar.xz |
Documentation: Add arch x86
Describe state and assuptions made about x86_64 support.
Change-Id: I308a09b0eac269afd30df95ed3ea195238a6cfbe
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-on: https://review.coreboot.org/c/30056
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r-- | Documentation/arch/index.md | 3 | ||||
-rw-r--r-- | Documentation/arch/x86/index.md | 42 |
2 files changed, 45 insertions, 0 deletions
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 |