/*
 * Copyright (c) 2012 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.
 */

/ {
	/*
	 * Names will be capitalized and hyphen converted to underscore by
	 * cros_bundle_firmware.
	 *
	 * If you didn't know this, and were searching for where FMAP
	 * entries come from, you'd have an awful hard time finding
	 * this file via grep.  So, here's some examples in the
	 * hopes that you were searching for one of these...
	 *
	 * si-bios      -> SI_BIOS
	 * ro-section   -> RO_SECTION
	 * ro-frid      -> RO_FRID
	 * rw-section-a -> RW_SECTION_A
	 */
	flash@ff800000 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "chromeos,flashmap";
		reg = <0xff800000 0x00800000>;

		/*
		 * Non-BIOS section of the Intel Firmware Descriptor image.
		 * This section covers the all the parts that are not shown
		 * to the CPU right below 4G.
		 */
		si-all {
			label = "si-all";
			reg = <0x00000000 0x00300000>;
			type = "ifd";
			required;
		};

		/*
		 * Firmware Descriptor section of the Intel Firmware Descriptor
		 * image.
		 */
		si-desc {
			label = "si-desc";
			reg = <0x00000000 0x00001000>;
		};

		/*
		 * Intel Management Engine section of the Intel Firmware
		 * Descriptor image.
		 */
		si-me {
			label = "si-me";
			reg = <0x00001000 0x002ff000>;
		};

		/*
		 * "BIOS" section of the Intel Firmware Descriptor image.
		 * This section covers the complete image as shown to the
		 * CPU right below 4G.
		 */
		si-bios {
			label ="si-bios";
			reg = <0x00300000 0x00500000>;
		};

		/* ---- Section: Rewritable slot A ---- */
		rw-a {
			label = "rw-section-a";
			/* Alignment: 4k (for updating) */
			reg = <0x00300000 0x000f0000>;
		};
		rw-a-vblock {
			label = "vblock-a";
			/*
			 * Alignment: 4k (for updating) and must be in start of
			 * each RW_SECTION.
			 */
			reg = <0x00300000 0x00010000>;
			type = "keyblock boot,dtb";
			keyblock = "firmware.keyblock";
			signprivate = "firmware_data_key.vbprivk";
			version = <1>;
			kernelkey = "kernel_subkey.vbpubk";
			preamble-flags = <1>;
			compress = "lzo";
		};
		rw-a-boot {
			/* Alignment: no requirement (yet). */
			label = "fw-main-a";
			reg = <0x00310000 0x000c0000>;
			type = "blob boot,dtb";
			compress = "lzo";
		};
		rw-a-ec {
			label = "ec-rw-a";
			reg = <0x003d0000 0x0001ffc0>;
			type = "wiped";
			wipe-value = [ff];
		};
		rw-a-firmware-id {
			/* Alignment: no requirement. */
			label = "rw-fwid-a";
			reg = <0x003effc0 0x00000040>;
			read-only;
			type = "blobstring fwid";
		};

		/* ---- Section: Rewritable slot B ---- */
		rw-b {
			label = "rw-section-b";
			/* Alignment: 4k (for updating) */
			reg = <0x003f0000 0x000f0000>;
		};
		rw-b-vblock {
			label = "vblock-b";
			/*
			 * Alignment: 4k (for updating) and must be in start of
			 * each RW_SECTION.
			 */
			reg = <0x003f0000 0x00010000>;
			type = "keyblock boot,dtb";
			keyblock = "firmware.keyblock";
			signprivate = "firmware_data_key.vbprivk";
			version = <1>;
			kernelkey = "kernel_subkey.vbpubk";
			preamble-flags = <1>;
			compress = "lzo";
		};
		rw-b-boot {
			label = "fw-main-b";
			/* Alignment: no requirement (yet). */
			reg = <0x00400000 0x000c0000>;
			type = "blob boot,dtb";
			compress = "lzo";
		};
		rw-b-ec {
			label = "ec-rw-b";
			reg = <0x004c0000 0x0001ffc0>;
			type = "wiped";
			wipe-value = [ff];
		};
		rw-b-firmware-id {
			label = "rw-fwid-b";
			/* Alignment: no requirement. */
			reg = <0x004dffc0 0x00000040>;
			read-only;
			type = "blobstring fwid";
		};

		/* ---- Section: Rewritable MRC cache 64KB ---- */
		rw-mrc-cache {
			label = "rw-mrc-cache";
			/* Alignment: 4k (for updating) */
			reg = <0x004e0000 0x00010000>;
			type = "wiped";
			wipe-value = [ff];
		};

		/* ---- Section: Rewritable Event Log 16KB ---- */
		rw-elog {
			label = "rw-elog";
			/* Alignment: 4k (for updating) */
			reg = <0x004f0000 0x00004000>;
			type = "wiped";
			wipe-value = [ff];
		};

		/* ---- Section: Rewritable shared 16 KB---- */
		shared-section {
			/*
			 * Alignment: 4k (for updating).
			 * Anything in this range may be updated in recovery.
			 */
			label = "rw-shared";
			reg = <0x004f4000 0x00004000>;
		};
		shared-data {
			label = "shared-data";
			/*
			 * Alignment: 4k (for random read/write).
			 * RW firmware can put calibration data here.
			 */
			reg = <0x004f4000 0x00002000>;
			type = "wiped";
			wipe-value = [00];
		};

		rw-vblock-dev {
			label = "vblock-dev";
			/*
			 * Alignment: 4k (for random read/write).
			 * Reserve space for an optional user-installed
			 * vblock to validate dev-mode kernels.
			 * See crosbug.com/p/11216.
			 */
			reg = <0x004f6000 0x00002000>;
			type = "wiped";
			wipe-value = [ff];
		};

		/* ---- Section: Rewritable private 16 KB---- */
		rw-environment {
			label = "rw-environment";
			/*
			 * Alignment: 4k, and must occupy bottom of U-Boot
			 * firmware -- check CONFIG_ENV_OFFSET
			 */
			reg = <0x004f8000 0x00004000>;

			/*
			 * We could put the dev environment here, but U-Boot has
			 * a default built in. Devs can 'saveenv' to set this
			 * up.
			 */
			type = "wiped";
			wipe-value = [00];
		};

		/* ---- Section: Rewritable VPD 16 KB ---- */
		rw-vpd {
			label = "rw-vpd";
			/* Alignment: 4k (for updating) */
			reg = <0x004fc000 0x00004000>;
			type = "wiped";
			wipe-value = [ff];
		};

		/*
		 * This describes the portion of the image that will be
		 * write-protected in the factory.
		 */
		wp-ro {
			label = "wp-ro";
			reg = <0x00600000 0x00200000>;
			read-only;
		};

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

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

		/*
		 * This space is currently unused and reserved for future
		 * extensions. cros_bundle_firmware dislikes holes in the
		 * FMAP, so we cover all empty space here.
		 */
		ro-unused {
			label = "ro-unused";
			reg = <0x00604000 0x0000c000>;
			type = "wiped";
			wipe-value = [ff];
		};

		/* ---- Section: Read-only ---- */
		ro-section {
			label = "ro-section";
			reg = <0x00610000 0x001f0000>;
			read-only;
		};
		ro-fmap {
			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 = <0x00610000 0x00000800>;
			read-only;
			type = "fmap";
			ver-major = <1>;
			ver-minor = <0>;
		};
		ro-firmware-id {
			label = "ro-frid";
			reg = <0x00610800 0x00000040>;
			read-only;
			type = "blobstring fwid";
		};

		/*
		 * Padding after FRID so the next section is 4K aligned.  This
		 * is only needed to avoid gaps in the FMAP and to keep the
		 * next section aligned; FRID itself doesn't care.
		 */
		ro-firmware-id-pad {
			label = "ro-frid-pad";
			reg = <0x00610840 0x000007c0>;
			type = "wiped";
			wipe-value = [ff];
		};
		ro-gbb {
			label = "gbb";

			/* GBB offset must be aligned to 4K bytes */
			reg = <0x00611000 0x000ef000>;
			read-only;
			type = "blob gbb";
		};
		ro-boot {
			label = "boot-stub";
			reg = <0x00700000 0x00100000>; /* 1 MB */
			read-only;
			type = "blob coreboot";
			required;
		};
	};
};
