summaryrefslogtreecommitdiff
path: root/chip/mchp/config_flash_layout.h
diff options
context:
space:
mode:
Diffstat (limited to 'chip/mchp/config_flash_layout.h')
-rw-r--r--chip/mchp/config_flash_layout.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/chip/mchp/config_flash_layout.h b/chip/mchp/config_flash_layout.h
new file mode 100644
index 0000000000..56b69f1d32
--- /dev/null
+++ b/chip/mchp/config_flash_layout.h
@@ -0,0 +1,103 @@
+/* Copyright 2017 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.
+ */
+
+#ifndef __CROS_EC_CONFIG_FLASH_LAYOUT_H
+#define __CROS_EC_CONFIG_FLASH_LAYOUT_H
+
+/*
+ * mec17xx flash layout:
+ * - Non memory-mapped, external SPI.
+ * - RW image at the beginning of writable region.
+ * - Bootloader at the beginning of protected region, followed by RO image.
+ * - Loader + (RO | RW) loaded into program memory.
+ */
+
+/* Non-memmapped, external SPI */
+#define CONFIG_EXTERNAL_STORAGE
+#undef CONFIG_MAPPED_STORAGE
+#undef CONFIG_FLASH_PSTATE
+#define CONFIG_SPI_FLASH
+
+/*
+ * MEC17xx BootROM uses two 4-byte TAG's at SPI offset 0x0 and 0x04.
+ * One valid TAG must be present.
+ * TAG's point to a Header which must be located on a 256 byte
+ * boundary anywhere in the flash (24-bit addressing).
+ * Locate BootROM load Header + LFW + EC_RO at start of second
+ * 4KB sector (offset 0x1000).
+ * Locate BootROM load Header + EC_RW at start of second half of
+ * SPI flash.
+ * LFW size is 4KB
+ * EC_RO and EC_RW padded sizes from the build are 188KB each.
+ * Storage size is 1/2 flash size.
+ */
+#define CONFIG_EC_PROTECTED_STORAGE_OFF 0
+/* Lower 256KB of flash is protected region */
+#define CONFIG_EC_PROTECTED_STORAGE_SIZE 0x40000
+/* Writable storage for EC_RW starts at 256KB */
+#define CONFIG_EC_WRITABLE_STORAGE_OFF 0x40000
+/* Writeable storage is 256KB */
+#define CONFIG_EC_WRITABLE_STORAGE_SIZE 0x40000
+
+
+/* Loader resides at the beginning of program memory */
+#define CONFIG_LOADER_MEM_OFF 0
+#define CONFIG_LOADER_SIZE 0x1000
+
+/* Write protect Loader and RO Image */
+#define CONFIG_WP_STORAGE_OFF CONFIG_EC_PROTECTED_STORAGE_OFF
+/*
+ * Write protect LFW + EC_RO
+ */
+#define CONFIG_WP_STORAGE_SIZE CONFIG_EC_PROTECTED_STORAGE_SIZE
+
+/*
+ * RO / RW images follow the loader in program memory. Either RO or RW
+ * image will be loaded -- both cannot be loaded at the same time.
+ */
+#define CONFIG_RO_MEM_OFF (CONFIG_LOADER_MEM_OFF + \
+ CONFIG_LOADER_SIZE)
+/*
+ * MEC1701H Code + Data SRAM size = 256KB
+ * Allocate 32KB for data leaving 192KB for Code.
+ * The loader is resident in first 4KB of Code SRAM.
+ * EC_RO/RW can load 192 - 4 = 188 KB maximum.
+ * !!! This size MUST be a multiple of flash erase block size.
+ * defined by CONFIG_FLASH_ERASE_SIZE in chip/config_chip.h !!!
+ */
+#define CONFIG_RO_SIZE (188 * 1024)
+#define CONFIG_RW_MEM_OFF CONFIG_RO_MEM_OFF
+#define CONFIG_RW_SIZE CONFIG_RO_SIZE
+
+/*
+ * WP region consists of first half of SPI containing TAGs at beginning
+ * of SPI flash and header + binary(LFW+EC_RO) at offset 0x1000.
+ * Two 4-byte TAG's exist at offset 0 and 4 in the SPI flash device.
+ * We only use first TAG pointing to LFW + EC_RO.
+ * Header size is 128 bytes. Firmware binary is located immediately
+ * after the header.
+ * Second half of SPI flash contains:
+ * Header(128 bytes) + EC_RW
+ */
+#define CONFIG_BOOT_HEADER_STORAGE_OFF 0x1000
+#define CONFIG_RW_BOOT_HEADER_STORAGE_OFF 0x0
+#define CONFIG_BOOT_HEADER_STORAGE_SIZE 0x80
+
+/* Loader / lfw image immediately follows the boot header on SPI */
+#define CONFIG_LOADER_STORAGE_OFF (CONFIG_BOOT_HEADER_STORAGE_OFF + \
+ CONFIG_BOOT_HEADER_STORAGE_SIZE)
+
+/* RO image immediately follows the loader image */
+#define CONFIG_RO_STORAGE_OFF (CONFIG_LOADER_STORAGE_OFF + \
+ CONFIG_LOADER_SIZE)
+
+/*
+ * Header + RW image starts at offset 0 of second half of SPI.
+ */
+#define CONFIG_RW_STORAGE_OFF (CONFIG_RW_BOOT_HEADER_STORAGE_OFF + \
+ CONFIG_BOOT_HEADER_STORAGE_SIZE)
+
+
+#endif /* __CROS_EC_CONFIG_FLASH_LAYOUT_H */