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>
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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
 |