summaryrefslogtreecommitdiff
path: root/common/fmap.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /common/fmap.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14438.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'common/fmap.c')
-rw-r--r--common/fmap.c260
1 files changed, 0 insertions, 260 deletions
diff --git a/common/fmap.c b/common/fmap.c
deleted file mode 100644
index 47fa75f0e9..0000000000
--- a/common/fmap.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright 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.
- */
-
-#include <stddef.h>
-
-#include "common.h"
-#include "cros_version.h"
-#include "rwsig.h"
-#include "util.h"
-
-/*
- * FMAP structs.
- * See https://chromium.googlesource.com/chromiumos/third_party/flashmap/+/master/lib/fmap.h
- */
-#define FMAP_NAMELEN 32
-#define FMAP_SIGNATURE "__FMAP__"
-#define FMAP_SIGNATURE_SIZE 8
-#define FMAP_VER_MAJOR 1
-#define FMAP_VER_MINOR 0
-
-/*
- * For address containing CONFIG_PROGRAM_MEMORY_BASE (symbols in *.RO.lds.S and
- * variable), this computes the offset to the start of the image on flash.
- */
-#define RELATIVE_RO(addr) ((addr) - CONFIG_PROGRAM_MEMORY_BASE - \
- CONFIG_RO_MEM_OFF)
-
-/*
- * All internal EC code assumes that offsets are provided relative to
- * physical address zero of storage. In some cases, the region of storage
- * belonging to the EC is not physical address zero - a non-zero fmap_base
- * indicates so. Since fmap_base is not yet handled correctly by external
- * code, we must perform the adjustment in our host command handlers -
- * adjust all offsets so they are relative to the beginning of the storage
- * region belonging to the EC. TODO(crbug.com/529365): Handle fmap_base
- * correctly in flashrom, dump_fmap, etc. and remove EC_FLASH_REGION_START.
- */
-#if CONFIG_EC_WRITABLE_STORAGE_OFF < CONFIG_EC_PROTECTED_STORAGE_OFF
-#define FMAP_REGION_START CONFIG_EC_WRITABLE_STORAGE_OFF
-#else
-#define FMAP_REGION_START CONFIG_EC_PROTECTED_STORAGE_OFF
-#endif
-
-struct fmap_header {
- char fmap_signature[FMAP_SIGNATURE_SIZE];
- uint8_t fmap_ver_major;
- uint8_t fmap_ver_minor;
- uint64_t fmap_base;
- uint32_t fmap_size;
- char fmap_name[FMAP_NAMELEN];
- uint16_t fmap_nareas;
-} __packed;
-
-#define FMAP_AREA_STATIC BIT(0) /* can be checksummed */
-#define FMAP_AREA_COMPRESSED BIT(1) /* may be compressed */
-#define FMAP_AREA_RO BIT(2) /* writes may fail */
-
-struct fmap_area_header {
- uint32_t area_offset;
- uint32_t area_size;
- char area_name[FMAP_NAMELEN];
- uint16_t area_flags;
-} __packed;
-
-#ifdef CONFIG_RWSIG_TYPE_RWSIG
-#define NUM_EC_FMAP_AREAS_RWSIG 2
-#else
-#define NUM_EC_FMAP_AREAS_RWSIG 0
-#endif
-
-#ifdef CONFIG_ROLLBACK
-#define NUM_EC_FMAP_AREAS_ROLLBACK 1
-#else
-#define NUM_EC_FMAP_AREAS_ROLLBACK 0
-#endif
-#ifdef CONFIG_RW_B
-# ifdef CONFIG_RWSIG_TYPE_RWSIG
-# define NUM_EC_FMAP_AREAS_RW_B 2
-# else
-# define NUM_EC_FMAP_AREAS_RW_B 1
-# endif
-#else
-#define NUM_EC_FMAP_AREAS_RW_B 0
-#endif
-
-#define NUM_EC_FMAP_AREAS (7 + \
- NUM_EC_FMAP_AREAS_RWSIG + \
- NUM_EC_FMAP_AREAS_ROLLBACK + \
- NUM_EC_FMAP_AREAS_RW_B)
-
-const struct _ec_fmap {
- struct fmap_header header;
- struct fmap_area_header area[NUM_EC_FMAP_AREAS];
-} ec_fmap __keep __attribute__((section(".google"))) = {
- /* Header */
- {
- .fmap_signature = {'_', '_', 'F', 'M', 'A', 'P', '_', '_'},
- .fmap_ver_major = FMAP_VER_MAJOR,
- .fmap_ver_minor = FMAP_VER_MINOR,
- .fmap_base = CONFIG_PROGRAM_MEMORY_BASE,
- .fmap_size = CONFIG_FLASH_SIZE_BYTES,
- /* Used to distinguish the EC FMAP from other FMAPs */
- .fmap_name = "EC_FMAP",
- .fmap_nareas = NUM_EC_FMAP_AREAS,
- },
-
- {
- /* RO Firmware */
- {
- /*
- * Range of RO firmware to be updated. EC_RO
- * section includes the bootloader section
- * because it may need to be updated/paired
- * with a different RO. Verified in factory
- * finalization by hash. Should not have
- * volatile data (ex, calibration results).
- */
- .area_name = "EC_RO",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START,
- .area_size = CONFIG_RO_SIZE + CONFIG_RO_STORAGE_OFF,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
- {
- /* (Optional) RO firmware code. */
- .area_name = "FR_MAIN",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RO_STORAGE_OFF,
- .area_size = CONFIG_RO_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
- {
- /*
- * RO firmware version ID. Must be NULL terminated
- * ASCII, and padded with \0.
- */
- .area_name = "RO_FRID",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RO_STORAGE_OFF +
- RELATIVE_RO((uint32_t)__image_data_offset) +
- offsetof(struct image_data, version),
- .area_size = sizeof(current_image_data.version),
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-
- /* Other RO stuff: FMAP, WP, KEYS, etc. */
- {
- .area_name = "FMAP",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RO_STORAGE_OFF +
- RELATIVE_RO((uint32_t)&ec_fmap),
- .area_size = sizeof(ec_fmap),
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
- {
- /*
- * The range for write protection, for factory
- * finalization. Should include (may be identical to)
- * EC_RO and aligned to hardware specification.
- */
- .area_name = "WP_RO",
- .area_offset = CONFIG_WP_STORAGE_OFF -
- FMAP_REGION_START,
- .area_size = CONFIG_WP_STORAGE_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-#ifdef CONFIG_RWSIG_TYPE_RWSIG
- {
- /* RO public key address, for RW verification */
- .area_name = "KEY_RO",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RO_PUBKEY_ADDR -
- CONFIG_PROGRAM_MEMORY_BASE,
- .area_size = CONFIG_RO_PUBKEY_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-#endif
-
- /* RW Firmware */
- {
- /* The range of RW firmware to be auto-updated. */
- .area_name = "EC_RW",
- .area_offset = CONFIG_EC_WRITABLE_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_STORAGE_OFF,
- .area_size = CONFIG_RW_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
- {
- /*
- * RW firmware version ID. Must be NULL terminated
- * ASCII, and padded with \0.
- * TODO: Get the relative offset of
- * __image_data_offset within our RW image to
- * accommodate image asymmetry.
- */
- .area_name = "RW_FWID",
- .area_offset = CONFIG_EC_WRITABLE_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_STORAGE_OFF +
- RELATIVE_RO((uint32_t)__image_data_offset) +
- offsetof(struct image_data, version),
- .area_size = sizeof(current_image_data.version),
- .area_flags = FMAP_AREA_STATIC,
- },
-#ifdef CONFIG_ROLLBACK
- {
- /*
- * RW rollback version, 32-bit unsigned integer.
- * TODO: Get the relative offset of
- * __image_data_offset within our RW image to
- * accommodate image asymmetry.
- */
- .area_name = "RW_RBVER",
- .area_offset = CONFIG_EC_WRITABLE_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_STORAGE_OFF +
- RELATIVE_RO((uint32_t)__image_data_offset) +
- offsetof(struct image_data, rollback_version),
- .area_size = sizeof(
- current_image_data.rollback_version),
- .area_flags = FMAP_AREA_STATIC,
- },
-#endif
-#ifdef CONFIG_RWSIG_TYPE_RWSIG
- {
- /* RW image signature */
- .area_name = "SIG_RW",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_SIG_ADDR -
- CONFIG_PROGRAM_MEMORY_BASE,
- .area_size = CONFIG_RW_SIG_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-#endif
-#ifdef CONFIG_RW_B
- /* RW Firmware */
- {
- /* The range of RW firmware to be auto-updated. */
- .area_name = "EC_RW_B",
- .area_offset = CONFIG_EC_WRITABLE_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_STORAGE_OFF +
- CONFIG_RW_SIZE,
- .area_size = CONFIG_RW_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-#ifdef CONFIG_RWSIG_TYPE_RWSIG
- {
- /* RW_B image signature */
- .area_name = "SIG_RW_B",
- .area_offset = CONFIG_EC_PROTECTED_STORAGE_OFF -
- FMAP_REGION_START + CONFIG_RW_B_SIG_ADDR -
- CONFIG_PROGRAM_MEMORY_BASE,
- .area_size = CONFIG_RW_SIG_SIZE,
- .area_flags = FMAP_AREA_STATIC | FMAP_AREA_RO,
- },
-#endif
-#endif
- }
-};