/*
 * 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.
 */

/*
 * This is a test flash map for Tegra devices.
 *
 * TODO: Use tabs instead of spaces
 */

/dts-v1/;

/ {
        model = "NVIDIA Seaboard";
        chromeos-config {
                twostop;                /* Two-stop boot */
                twostop-optional;       /* One-stop optimization enabled */
                textbase = <0xe08000>;  /* Address where U-Boot loads */

                /*
                 * Device and offset for second-stage firmware, in SPI for now
                 * second-stage = <&emmc 0x00000080 0>;
                 */

                /* Memory addresses for kernel, cros-system and gbb */
                kernel = <0x00100000 0x00800000>;
                cros-system-data = <0x00900000 0x8000>;
                google-binary-block = <0x00908000 0x80000>;
        };

        config {
                silent_console = <0>;
        };

        chosen {
                bootargs = "";
        };

};

/ {
        flash@0 {
                compatible = "winbond,W25Q16BVSSIG", "cfi-flash",
                        "chromeos,flashmap";
                reg = <0x00000000 0x00200000>;

                #address-cells = <1>;
                #size-cells = <1>;
                /* ---- Section: Read-only ---- */
                ro-section {
                        label = "ro-section";
                        reg = <0x00000000 0x000f0000>;
                        read-only;
                };

                ro-boot {
                        label = "boot-stub";
                        reg = <0x00000000 0x000aff00>; /* 703 KB */
                        read-only;
                        type = "blob signed";
                };
                ro-recovery {
                        /* Deprecated section */
                        label = "recovery";
                        reg = <0x000aff00 0x00000000>;
                        read-only;
                };
                ro-firmware-id {
                        label = "ro-frid";
                        reg = <0x000aff00 0x00000100>;
                        read-only;
                        type = "blobstring fwid";
                };
                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 = <0x000b0000 0x00001000>;
                        read-only;
                        type = "fmap";
                        ver-major = <1>;
                        ver-minor = <0>;
                };
                ro-gbb {
                        label = "gbb";

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

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

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

                /* ---- Section: Rewritable slot A ---- */
                rw-a {
                        label = "rw-section-a";
                        /* Alignment: 4k (for updating) */
                        reg = <0x00100000 0x00078000>;
                        block-lba = <0x00000022>;
                };
                rw-a-vblock {
                        label = "vblock-a";
                        /* Alignment: 4k (for updating) and must be in start of
                         * each RW_SECTION. */
                        reg = <0x00100000 0x00002000>;
                        type = "keyblock boot";
                        keyblock = "firmware.keyblock";
                        signprivate = "firmware_data_key.vbprivk";
                        version = <1>;
                        kernelkey = "kernel_subkey.vbpubk";
                        preamble-flags = <1>;
                };
                rw-a-boot {
                        /* Alignment: no requirement (yet). */
                        label = "fw-main-a";
                        reg = <0x00102000 0x00075000>;

                        /* There is not enough space for this, so remove it */
                        /* type = "blob boot"; */
                };
                rw-a-firmware-id {
                        /* Alignment: no requirement. */
                        label = "rw-fwid-a";
                        reg = <0x00177f00 0x00000100>;
                        read-only;
                        type = "blobstring fwid";
                };

                /* ---- Section: Rewritable slot B ---- */
                rw-b {
                        label = "rw-section-b";
                        /* Alignment: 4k (for updating) */
                        reg = <0x00178000 0x00078000>;
                        block-lba = <0x00000422>;
                };
                rw-b-vblock {
                        label = "vblock-b";
                        /* Alignment: 4k (for updating) and must be in start of
                         * each RW_SECTION. */
                        reg = <0x00178000 0x00002000>;
                        type = "keyblock boot";
                        keyblock = "firmware.keyblock";
                        signprivate = "firmware_data_key.vbprivk";
                        version = <1>;
                        kernelkey = "kernel_subkey.vbpubk";
                        preamble-flags = <1>;
                };
                rw-b-boot@ {
                        label = "fw-main-b";
                        /* Alignment: no requirement (yet). */
                        reg = <0x0017a000 0x00075000>;
                        /* There is not enough space for this, so remove it */
                        /* type = "blob boot"; */
                };
                rw-b-firmware-id {
                        label = "rw-fwid-b";
                        /* Alignment: no requirement. */
                        reg = <0x001eff00 0x00000100>;
                        read-only;
                        type = "blobstring fwid";
                };

                /* ---- Section: Rewritable VPD 32 KB ---- */
                rw-vpd {
                        label = "rw-vpd";
                        /* Alignment: 4k (for updating) */
                        reg = <0x001f0000 0x00008000>;
                        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 = <0x001f8000 0x00004000>;
                };
                shared-data {
                        label = "shared-data";
                        /* Alignment: 4k (for random read/write).
                         * RW firmware can put calibration data here. */
                        reg = <0x001f8000 0x00004000>;
                        type = "wiped";
                        wipe-value = [00];
                };
                /* ---- Section: Rewritable private 16 KB---- */
                private-section {
                        /* Anything in this range will never be updated */
                        label = "rw-private";
                        reg = <0x001fc000 0x00004000>;
                };
                rw-environment {
                        label = "rw-environment";
                        /* Alignment: 4k, and must occupy bottom of U-Boot
                         * firmware -- check CONFIG_ENV_OFFSET */
                        reg = <0x001fe000 0x00002000>;

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