/*
 * 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];
		};
	};
};
