Current doc transpiles to something completely unreadable. Change-Id: I197deb52974c88e067bc1615986a42c889214888 Signed-off-by: Evgeny Zinoviev <me@ch1p.io> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38933 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # IFD Layout
 | |
| 
 | |
| A coreboot image for an Intel SoC contains two separate definitions of the
 | |
| layout of the flash. The Intel Flash Descriptor (IFD) which defines offsets and
 | |
| sizes of various regions of flash and the [coreboot FMAP](../lib/flashmap.md).
 | |
| 
 | |
| The FMAP should define all of the of the regions defined by the IFD to ensure
 | |
| that those regions are accounted for by coreboot and will not be accidentally
 | |
| modified.
 | |
| 
 | |
| ## IFD mapping
 | |
| 
 | |
| The names of the IFD regions in the FMAP should follow the convention of
 | |
| starting with the prefix `SI_` which stands for `silicon initialization` as a
 | |
| way to categorize anything required by the SoC but not provided by coreboot.
 | |
| 
 | |
| ```eval_rst
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | IFD Region | IFD Region name  | FMAP Name | Notes                                     |
 | |
| | index      |                  |           |                                           |
 | |
| +============+==================+===========+===========================================+
 | |
| | 0          | Flash Descriptor | SI_DESC   | Always the top 4KB of flash               |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | 1          | BIOS             | SI_BIOS   | This is the region that contains coreboot |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | 2          | Intel ME         | SI_ME     |                                           |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | 3          | Gigabit Ethernet | SI_GBE    |                                           |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | 4          | Platform Data    | SI_PDR    |                                           |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| | 8          | EC Firmware      | SI_EC     | Most Chrome OS devices do not use this    |
 | |
| |            |                  |           | region; EC firmware is stored in BIOS     |
 | |
| |            |                  |           | region of flash                           |
 | |
| +------------+------------------+-----------+-------------------------------------------+
 | |
| ```
 | |
| 
 | |
| ## Validation
 | |
| 
 | |
| The ifdtool can be used to manipulate a firmware image with a IFD. This tool
 | |
| will not take into account the FMAP while modifying the image which can lead to
 | |
| unexpected and hard to debug issues with the firmware image. For example if the
 | |
| ME region is defined at 6 MB in the IFD but the FMAP only allocates 4 MB for the
 | |
| ME, then when the ME is added by the ifdtool 6 MB will be written which could
 | |
| overwrite 2 MB of the BIOS.
 | |
| 
 | |
| In order to validate that the FMAP and the IFD are compatible the ifdtool
 | |
| provides --validate (-t) option. `ifdtool -t` will read both the IFD and the
 | |
| FMAP in the image and for every non empty region in the IFD if that region is
 | |
| defined in the FMAP but the offset or size is different then the tool will
 | |
| return an error.
 | |
| 
 | |
| Example:
 | |
| 
 | |
| ```console
 | |
| foo@bar:~$ ifdtool -t bad_image.bin
 | |
| Region mismatch between bios and SI_BIOS
 | |
|  Descriptor region bios:
 | |
|   offset: 0x00400000
 | |
|   length: 0x01c00000
 | |
|  FMAP area SI_BIOS:
 | |
|   offset: 0x00800000
 | |
|   length: 0x01800000
 | |
| Region mismatch between me and SI_ME
 | |
|  Descriptor region me:
 | |
|   offset: 0x00103000
 | |
|   length: 0x002f9000
 | |
|  FMAP area SI_ME:
 | |
|   offset: 0x00103000
 | |
|   length: 0x006f9000
 | |
| Region mismatch between pd and SI_PDR
 | |
|  Descriptor region pd:
 | |
|   offset: 0x003fc000
 | |
|   length: 0x00004000
 | |
|  FMAP area SI_PDR:
 | |
|   offset: 0x007fc000
 | |
|   length: 0x00004000
 | |
| ``` |