From f04e76bcf049764ca48f36967a039a210f910cc2 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Wed, 5 Dec 2018 19:09:04 +0100 Subject: Documentation: Add arch x86 Describe state and assuptions made about x86_64 support. Change-Id: I308a09b0eac269afd30df95ed3ea195238a6cfbe Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/30056 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- Documentation/arch/x86/index.md | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/arch/x86/index.md (limited to 'Documentation/arch/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 -- cgit v1.2.3