/*
 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/*
 * This is a sub-fmap embedded into twostop fmap. This sub-fmap defines
 * the layout of the R/O portion.
 *
 * The R/O blobs only consumes 1 MB space so that it could be possible to
 * squeeze the final image (R/O + R/W) into 2 MB space. As a result, even if
 * the target machine has a 4 MB flash chip and enables write-protect for the
 * first 2 MB space, only the first 1 MB will contain R/O blobs and the rest
 * 1 MB will be empty.
 */

/ {
	/*
	 * Labels have been selected to be to compatible with existing tools,
	 * even thought the terminology may be a little different on ARM.
	 * Names will be capitalized and hyphen converted to underscore by
	 * cros_bundle_firmware.
	 */
	flash@0 {
		/* ---- Section: Read-only ---- */
		ro-section@0 {
			label = "ro-section";
			reg = <0x00000000 0x000f0000>;
			read-only;
		};

		ro-boot@0 {
			label = "boot-stub";
			reg = <0x00000000 0x000aff00>; /* 703 KB */
			read-only;
			type = "blob signed";
		};
		ro-recovery@aff00 {
			/* Deprecated section */
			label = "recovery";
			reg = <0x000aff00 0x00000000>;
			read-only;
		};
		ro-firmware-id@aff00 {
			label = "ro-frid";
			reg = <0x000aff00 0x00000100>;
			read-only;
			type = "blobstring fwid";
		};
		ro-fmap@b0000 {
			label = "fmap";

			/* We encourage to align FMAP partition in as large
			 * block as possible so that flashrom can find it soon.
			 * For example, aligning to 512KB is better than to
			 * 256KB. */

			reg = <0x000b0000 0x00001000>;
			read-only;
			type = "fmap";
			ver-major = <1>;
			ver-minor = <0>;
		};
		ro-gbb@b1000 {
			label = "gbb";

			/* GBB offset must be aligned to 4K bytes */
			reg = <0x000b1000 0x0003f000>;
			read-only;
			type = "blob gbb";
		};
		ro-data@f0000 {
			/* Currently unused, simply for padding */
			label = "ro-data";
			reg = <0x000f0000 0x00000000>;
			read-only;
		};

		/* ---- Section: Vital-product data (VPD) ---- */
		ro-vpd@f0000 {
			label = "ro-vpd";

			/* VPD offset must be aligned to 4K bytes */
			reg = <0x000f0000 0x00010000>;
			read-only;
			type = "wiped";
			wipe-value = [ff];
		};
	};
};
