# Firmware Layout Description for ChromeOS.
#
# The size and address of every section must be aligned to at least 4K, except:
# RO_FRID, RW_FWID*, GBB, or any unused / padding / CBFS type sections.
#
# 'FMAP' may be found by binary search so its starting address should be better
# aligned to larger values.
#
# For sections to be preserved on update, add (PRESERVE) to individual sections
# instead of a group section; otherwise the preserved data may be wrong if you
# resize or reorder sections inside a group.

FLASH@0x0 8M {
	WP_RO@0x0 4M {
		RO_SECTION {
			BOOTBLOCK 128K
			FMAP 4K
			COREBOOT(CBFS)
			GBB 0x2f00
			RO_FRID 0x100
		}
		RO_VPD(PRESERVE) 32K  # At least 16K.
	}
	RW_SECTION_A 1500K {
		VBLOCK_A 8K
		FW_MAIN_A(CBFS)
		RW_FWID_A 0x100
	}
	RW_MISC 36K {
		RW_VPD(PRESERVE) 16K  # At least 8K.
		RW_NVRAM(PRESERVE) 8K
		RW_MRC_CACHE(PRESERVE) 8K
		RW_ELOG(PRESERVE) 4K  # ELOG driver hard-coded size in 4K.
	}
	RW_SECTION_B 1500K {
		VBLOCK_B 8K
		FW_MAIN_B(CBFS)
		RW_FWID_B 0x100
	}
	RW_SHARED 36K {  # Will be force updated on recovery.
		SHARED_DATA 4K  # 4K or less for netboot params.
		RW_UNUSED
	}
	RW_LEGACY(CBFS) 1M  # Minimal 1M.
}
