summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <siro@das-labor.org>2018-12-05 19:09:04 +0100
committerPatrick Georgi <pgeorgi@google.com>2018-12-19 10:31:07 +0000
commitf04e76bcf049764ca48f36967a039a210f910cc2 (patch)
treef8d6e1ca94f5d3f74e7c70f1ecf26cafbfcc082f
parentab5890d498c095da0d2047adfc68fc0f04ed4fbd (diff)
downloadcoreboot-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.md3
-rw-r--r--Documentation/arch/x86/index.md42
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