# Firmware Layout Description for Chrome OS.
#
# 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_GSCVD 8K
		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.
}
