tests: Add lib/fmap-test test case
Signed-off-by: Jakub Czapiga <jacz@semihalf.com> Change-Id: I885ea05d509d3b1330de7a18531f310d290c6965 Reviewed-on: https://review.coreboot.org/c/coreboot/+/48557 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
parent
525cc4626a
commit
dd85c82962
|
@ -0,0 +1,88 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#ifndef FMAPTOOL_GENERATED_HEADER_H_
|
||||
#define FMAPTOOL_GENERATED_HEADER_H_
|
||||
|
||||
/*
|
||||
* This file was generated using fmaptool from util/cbfstools using
|
||||
* src/mainboard/google/octopus/chromeos.fmd
|
||||
*/
|
||||
#define FMAP_OFFSET 0x204000
|
||||
#define FMAP_SIZE 0x620
|
||||
|
||||
#define FMAP_SECTION_FLASH_START 0
|
||||
#define FMAP_SECTION_FLASH_SIZE 0x1000000
|
||||
#define FMAP_SECTION_WP_RO_START 0
|
||||
#define FMAP_SECTION_WP_RO_SIZE 0x400000
|
||||
#define FMAP_SECTION_SI_DESC_START 0
|
||||
#define FMAP_SECTION_SI_DESC_SIZE 0x1000
|
||||
#define FMAP_SECTION_IFWI_START 0x1000
|
||||
#define FMAP_SECTION_IFWI_SIZE 0x1ff000
|
||||
#define FMAP_SECTION_RO_VPD_START 0x200000
|
||||
#define FMAP_SECTION_RO_VPD_SIZE 0x4000
|
||||
#define FMAP_SECTION_RO_SECTION_START 0x204000
|
||||
#define FMAP_SECTION_RO_SECTION_SIZE 0x1fc000
|
||||
#define FMAP_SECTION_FMAP_START 0x204000
|
||||
#define FMAP_SECTION_FMAP_SIZE 0x800
|
||||
#define FMAP_SECTION_RO_FRID_START 0x204800
|
||||
#define FMAP_SECTION_RO_FRID_SIZE 0x40
|
||||
#define FMAP_SECTION_RO_FRID_PAD_START 0x204840
|
||||
#define FMAP_SECTION_RO_FRID_PAD_SIZE 0x7c0
|
||||
#define FMAP_SECTION_COREBOOT_START 0x205000
|
||||
#define FMAP_SECTION_COREBOOT_SIZE 0x1f8000
|
||||
#define FMAP_SECTION_GBB_START 0x3fd000
|
||||
#define FMAP_SECTION_GBB_SIZE 0x3000
|
||||
#define FMAP_SECTION_MISC_RW_START 0x400000
|
||||
#define FMAP_SECTION_MISC_RW_SIZE 0x30000
|
||||
#define FMAP_SECTION_RW_PRESERVE_START 0x400000
|
||||
#define FMAP_SECTION_RW_PRESERVE_SIZE 0x21000
|
||||
#define FMAP_SECTION_UNIFIED_MRC_CACHE_START 0x400000
|
||||
#define FMAP_SECTION_UNIFIED_MRC_CACHE_SIZE 0x21000
|
||||
#define FMAP_SECTION_RECOVERY_MRC_CACHE_START 0x400000
|
||||
#define FMAP_SECTION_RECOVERY_MRC_CACHE_SIZE 0x10000
|
||||
#define FMAP_SECTION_RW_MRC_CACHE_START 0x410000
|
||||
#define FMAP_SECTION_RW_MRC_CACHE_SIZE 0x10000
|
||||
#define FMAP_SECTION_RW_VAR_MRC_CACHE_START 0x420000
|
||||
#define FMAP_SECTION_RW_VAR_MRC_CACHE_SIZE 0x1000
|
||||
#define FMAP_SECTION_RW_ELOG_START 0x421000
|
||||
#define FMAP_SECTION_RW_ELOG_SIZE 0x3000
|
||||
#define FMAP_SECTION_RW_SHARED_START 0x424000
|
||||
#define FMAP_SECTION_RW_SHARED_SIZE 0x4000
|
||||
#define FMAP_SECTION_SHARED_DATA_START 0x424000
|
||||
#define FMAP_SECTION_SHARED_DATA_SIZE 0x2000
|
||||
#define FMAP_SECTION_VBLOCK_DEV_START 0x426000
|
||||
#define FMAP_SECTION_VBLOCK_DEV_SIZE 0x2000
|
||||
#define FMAP_SECTION_RW_VPD_START 0x428000
|
||||
#define FMAP_SECTION_RW_VPD_SIZE 0x2000
|
||||
#define FMAP_SECTION_RW_NVRAM_START 0x42a000
|
||||
#define FMAP_SECTION_RW_NVRAM_SIZE 0x5000
|
||||
#define FMAP_SECTION_FPF_STATUS_START 0x42f000
|
||||
#define FMAP_SECTION_FPF_STATUS_SIZE 0x1000
|
||||
#define FMAP_SECTION_RW_SECTION_A_START 0x430000
|
||||
#define FMAP_SECTION_RW_SECTION_A_SIZE 0x480000
|
||||
#define FMAP_SECTION_VBLOCK_A_START 0x430000
|
||||
#define FMAP_SECTION_VBLOCK_A_SIZE 0x10000
|
||||
#define FMAP_SECTION_FW_MAIN_A_START 0x440000
|
||||
#define FMAP_SECTION_FW_MAIN_A_SIZE 0x46ffc0
|
||||
#define FMAP_SECTION_RW_FWID_A_START 0x8affc0
|
||||
#define FMAP_SECTION_RW_FWID_A_SIZE 0x40
|
||||
#define FMAP_SECTION_RW_SECTION_B_START 0x8b0000
|
||||
#define FMAP_SECTION_RW_SECTION_B_SIZE 0x480000
|
||||
#define FMAP_SECTION_VBLOCK_B_START 0x8b0000
|
||||
#define FMAP_SECTION_VBLOCK_B_SIZE 0x10000
|
||||
#define FMAP_SECTION_FW_MAIN_B_START 0x8c0000
|
||||
#define FMAP_SECTION_FW_MAIN_B_SIZE 0x46ffc0
|
||||
#define FMAP_SECTION_RW_FWID_B_START 0xd2ffc0
|
||||
#define FMAP_SECTION_RW_FWID_B_SIZE 0x40
|
||||
#define FMAP_SECTION_SMMSTORE_START 0xd30000
|
||||
#define FMAP_SECTION_SMMSTORE_SIZE 0x40000
|
||||
#define FMAP_SECTION_RW_LEGACY_START 0xd70000
|
||||
#define FMAP_SECTION_RW_LEGACY_SIZE 0x1c0000
|
||||
#define FMAP_SECTION_BIOS_UNUSABLE_START 0xf30000
|
||||
#define FMAP_SECTION_BIOS_UNUSABLE_SIZE 0x4f000
|
||||
#define FMAP_SECTION_DEVICE_EXTENSION_START 0xf7f000
|
||||
#define FMAP_SECTION_DEVICE_EXTENSION_SIZE 0x80000
|
||||
#define FMAP_SECTION_UNUSED_HOLE_START 0xfff000
|
||||
#define FMAP_SECTION_UNUSED_HOLE_SIZE 0x1000
|
||||
|
||||
#endif
|
|
@ -0,0 +1,148 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#ifndef TESTS_FMAP_DATA_H_
|
||||
#define TESTS_FMAP_DATA_H_
|
||||
|
||||
/*
|
||||
* This file was converted using `xxd -i` from binary output of
|
||||
* fmaptool from util/cbfstools. Data is based on output generated by
|
||||
* mentioned tool using src/mainboard/google/octopus/chromeos.fmd file.
|
||||
*/
|
||||
|
||||
unsigned char tests_fmap_bin[] = {
|
||||
0x5f, 0x5f, 0x46, 0x4d, 0x41, 0x50, 0x5f, 0x5f, 0x01, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x46, 0x4c,
|
||||
0x41, 0x53, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x00, 0x57, 0x50, 0x5f, 0x52, 0x4f, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x53, 0x49,
|
||||
0x5f, 0x44, 0x45, 0x53, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
|
||||
0x00, 0xf0, 0x1f, 0x00, 0x49, 0x46, 0x57, 0x49, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x52, 0x4f,
|
||||
0x5f, 0x56, 0x50, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x20, 0x00,
|
||||
0x00, 0xc0, 0x1f, 0x00, 0x52, 0x4f, 0x5f, 0x53, 0x45, 0x43, 0x54, 0x49,
|
||||
0x4f, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x46, 0x4d,
|
||||
0x41, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x20, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x52, 0x4f, 0x5f, 0x46, 0x52, 0x49, 0x44, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x40, 0x48, 0x20, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x52, 0x4f,
|
||||
0x5f, 0x46, 0x52, 0x49, 0x44, 0x5f, 0x50, 0x41, 0x44, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x20, 0x00,
|
||||
0x00, 0x80, 0x1f, 0x00, 0x43, 0x4f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xd0, 0x3f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x47, 0x42,
|
||||
0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
|
||||
0x00, 0x00, 0x03, 0x00, 0x4d, 0x49, 0x53, 0x43, 0x5f, 0x52, 0x57, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x02, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00,
|
||||
0x00, 0x10, 0x02, 0x00, 0x55, 0x4e, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f,
|
||||
0x4d, 0x52, 0x43, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x52, 0x45,
|
||||
0x43, 0x4f, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x4d, 0x52, 0x43, 0x5f, 0x43,
|
||||
0x41, 0x43, 0x48, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x52, 0x57, 0x5f, 0x4d, 0x52, 0x43, 0x5f, 0x43,
|
||||
0x41, 0x43, 0x48, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x10, 0x00, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x56, 0x41, 0x52, 0x5f, 0x4d, 0x52, 0x43, 0x5f, 0x43, 0x41, 0x43,
|
||||
0x48, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x00,
|
||||
0x00, 0x30, 0x00, 0x00, 0x52, 0x57, 0x5f, 0x45, 0x4c, 0x4f, 0x47, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x40, 0x42, 0x00, 0x00, 0x40, 0x00, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x42, 0x00,
|
||||
0x00, 0x20, 0x00, 0x00, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x44,
|
||||
0x41, 0x54, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x60, 0x42, 0x00, 0x00, 0x20, 0x00, 0x00, 0x56, 0x42,
|
||||
0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x56, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x42, 0x00,
|
||||
0x00, 0x20, 0x00, 0x00, 0x52, 0x57, 0x5f, 0x56, 0x50, 0x44, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0xa0, 0x42, 0x00, 0x00, 0x50, 0x00, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x4e, 0x56, 0x52, 0x41, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xf0, 0x42, 0x00,
|
||||
0x00, 0x10, 0x00, 0x00, 0x46, 0x50, 0x46, 0x5f, 0x53, 0x54, 0x41, 0x54,
|
||||
0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x48, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x53, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x56, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xc0, 0xff, 0x46, 0x00, 0x46, 0x57,
|
||||
0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x8a, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x52, 0x57, 0x5f, 0x46, 0x57, 0x49, 0x44, 0x5f,
|
||||
0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x48, 0x00, 0x52, 0x57,
|
||||
0x5f, 0x53, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00,
|
||||
0x00, 0x00, 0x01, 0x00, 0x56, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0xc0, 0xff, 0x46, 0x00, 0x46, 0x57,
|
||||
0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xd2, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x52, 0x57, 0x5f, 0x46, 0x57, 0x49, 0x44, 0x5f,
|
||||
0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x04, 0x00, 0x53, 0x4d,
|
||||
0x4d, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd7, 0x00,
|
||||
0x00, 0x00, 0x1c, 0x00, 0x52, 0x57, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43,
|
||||
0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xf0, 0x04, 0x00, 0x42, 0x49,
|
||||
0x4f, 0x53, 0x5f, 0x55, 0x4e, 0x55, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf7, 0x00,
|
||||
0x00, 0x00, 0x08, 0x00, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x45,
|
||||
0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x10, 0x00, 0x00, 0x55, 0x4e,
|
||||
0x55, 0x53, 0x45, 0x44, 0x5f, 0x48, 0x4f, 0x4c, 0x45, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned int tests_fmap_bin_len = sizeof(tests_fmap_bin);
|
||||
|
||||
|
||||
#endif /* TESTS_INCLUDE_LIB_FMAP_FMAP_DATA_H_ */
|
|
@ -9,6 +9,7 @@ tests-y += edid-test
|
|||
tests-y += cbmem_console-romstage-test
|
||||
tests-y += cbmem_console-ramstage-test
|
||||
tests-y += list-test
|
||||
tests-y += fmap-test
|
||||
|
||||
string-test-srcs += tests/lib/string-test.c
|
||||
string-test-srcs += src/lib/string.c
|
||||
|
@ -44,3 +45,10 @@ cbmem_console-ramstage-test-srcs += tests/stubs/console.c
|
|||
list-test-srcs += tests/lib/list-test.c
|
||||
list-test-srcs += src/lib/list.c
|
||||
|
||||
fmap-test-srcs += tests/lib/fmap-test.c
|
||||
fmap-test-srcs += src/lib/fmap.c
|
||||
fmap-test-srcs += tests/stubs/console.c
|
||||
fmap-test-srcs += src/lib/boot_device.c
|
||||
fmap-test-srcs += src/commonlib/region.c
|
||||
fmap-test-cflags += -I tests/include/tests/lib/fmap
|
||||
fmap-test-cflags += -I 3rdparty/vboot/firmware/include
|
||||
|
|
|
@ -0,0 +1,323 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <tests/test.h>
|
||||
|
||||
#include <fmap.h>
|
||||
#include <commonlib/region.h>
|
||||
|
||||
#include <tests/lib/fmap/fmap_data.h>
|
||||
#include <tests/lib/fmap/fmap_config.h>
|
||||
|
||||
static struct mem_region_device mem_rdev_rw;
|
||||
static struct mem_region_device mem_rdev_ro;
|
||||
static char *flash_buffer = NULL;
|
||||
static size_t flash_buffer_size = 0;
|
||||
|
||||
static void prepare_flash_buffer(void)
|
||||
{
|
||||
/* Prepare flash buffer with dummy data and FMAP */
|
||||
flash_buffer = malloc(FMAP_SECTION_FLASH_SIZE);
|
||||
flash_buffer_size = FMAP_SECTION_FLASH_SIZE;
|
||||
|
||||
/* Fill first part of buffer with dummy data */
|
||||
for (int i = 0; i < FMAP_SECTION_FMAP_START; ++i)
|
||||
flash_buffer[i] = 'a' + i % ('z' - 'a');
|
||||
|
||||
/* Copy FMAP section into buffer */
|
||||
memcpy(flash_buffer + FMAP_SECTION_FMAP_START, tests_fmap_bin, FMAP_SIZE);
|
||||
|
||||
/* Fill rest of buffer with dummy data */
|
||||
for (int i = FMAP_SECTION_FMAP_START + FMAP_SECTION_FMAP_SIZE;
|
||||
i < FMAP_SECTION_FLASH_SIZE; ++i)
|
||||
flash_buffer[i] = 'a' + i % ('z' - 'a');
|
||||
}
|
||||
|
||||
static int setup_fmap(void **state)
|
||||
{
|
||||
prepare_flash_buffer();
|
||||
|
||||
mem_rdev_rw = (struct mem_region_device)
|
||||
MEM_REGION_DEV_RW_INIT(flash_buffer, FMAP_SECTION_FLASH_SIZE);
|
||||
|
||||
mem_rdev_ro = (struct mem_region_device)
|
||||
MEM_REGION_DEV_RO_INIT(flash_buffer, FMAP_SECTION_FLASH_SIZE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int teardown_fmap(void **state)
|
||||
{
|
||||
struct mem_region_device empty = {
|
||||
.base = NULL,
|
||||
.rdev = {
|
||||
.root = NULL,
|
||||
.ops = NULL,
|
||||
.region = {
|
||||
.offset = 0,
|
||||
.size = 0
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
mem_rdev_rw = empty;
|
||||
mem_rdev_ro = empty;
|
||||
|
||||
free(flash_buffer);
|
||||
flash_buffer = NULL;
|
||||
flash_buffer_size = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void boot_device_init(void)
|
||||
{
|
||||
/* Setup in unit test setup function */
|
||||
}
|
||||
|
||||
const struct region_device *boot_device_ro(void)
|
||||
{
|
||||
return &mem_rdev_rw.rdev;
|
||||
}
|
||||
|
||||
const struct region_device *boot_device_rw(void)
|
||||
{
|
||||
return &mem_rdev_rw.rdev;
|
||||
}
|
||||
|
||||
static void test_fmap_locate_area_as_rdev(void **state)
|
||||
{
|
||||
const char buffer[] = "abcdefghijk0123456789";
|
||||
struct region_device rdev;
|
||||
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev("RO_VPD", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_RO_VPD_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_RO_VPD_SIZE, region_device_sz(&rdev));
|
||||
|
||||
/* Check if locating area second time works */
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev("RO_VPD", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_RO_VPD_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_RO_VPD_SIZE, region_device_sz(&rdev));
|
||||
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev("RECOVERY_MRC_CACHE", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_RECOVERY_MRC_CACHE_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_RECOVERY_MRC_CACHE_SIZE, region_device_sz(&rdev));
|
||||
|
||||
/* Expect error when writing to read-only area */
|
||||
assert_int_equal(-1, rdev_writeat(&rdev, buffer,
|
||||
region_device_offset(&rdev), sizeof(buffer)));
|
||||
|
||||
/* Expect error when looking for incorrect area */
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev("NONEXISTENT_AREA", &rdev));
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev("", &rdev));
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev(NULL, &rdev));
|
||||
|
||||
/* Function fmap_locate_area_as_rdev is not tested with NULL
|
||||
as region_device pointer as it is not allowed. */
|
||||
}
|
||||
|
||||
static void test_fmap_locate_area_as_rdev_rw(void **state)
|
||||
{
|
||||
struct region_device rdev;
|
||||
size_t ro_rw_section_size = FMAP_SECTION_MISC_RW_SIZE;
|
||||
char *buffer1 = malloc(ro_rw_section_size);
|
||||
char *buffer2 = malloc(ro_rw_section_size);
|
||||
char *dummy_data = malloc(ro_rw_section_size);
|
||||
|
||||
/* Fill buffer with dummy data */
|
||||
for (int i = 0; i < ro_rw_section_size; ++i)
|
||||
dummy_data[i] = '0' + i % ('9' - '0');
|
||||
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev_rw("RW_SECTION_A", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_RW_SECTION_A_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_RW_SECTION_A_SIZE, region_device_sz(&rdev));
|
||||
|
||||
/* Check if locating area second time works */
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev_rw("RW_SECTION_A", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_RW_SECTION_A_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_RW_SECTION_A_SIZE, region_device_sz(&rdev));
|
||||
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev_rw("MISC_RW", &rdev));
|
||||
assert_int_equal(FMAP_SECTION_MISC_RW_START, region_device_offset(&rdev));
|
||||
assert_int_equal(FMAP_SECTION_MISC_RW_SIZE, region_device_sz(&rdev));
|
||||
|
||||
|
||||
/* Expect error when looking for incorrect area */
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev_rw("NONEXISTENT_AREA", &rdev));
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev_rw("", &rdev));
|
||||
|
||||
/* Expect error when passing invalid references */
|
||||
assert_int_equal(-1, fmap_locate_area_as_rdev_rw(NULL, &rdev));
|
||||
|
||||
/* Function fmap_locate_area_as_rdev_rw is not tested with NULL
|
||||
as region_device pointer as it is not allowed. */
|
||||
|
||||
/* Test if returned section region device is writable */
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev_rw("MISC_RW", &rdev));
|
||||
assert_int_equal(ro_rw_section_size,
|
||||
rdev_readat(&rdev, buffer1, 0, ro_rw_section_size));
|
||||
assert_int_equal(ro_rw_section_size,
|
||||
rdev_writeat(&rdev, dummy_data, 0, ro_rw_section_size));
|
||||
/* Check if written data is visible and correct after locating area as RO */
|
||||
assert_int_not_equal(-1, fmap_locate_area_as_rdev("MISC_RW", &rdev));
|
||||
assert_int_equal(ro_rw_section_size,
|
||||
rdev_readat(&rdev, buffer2, 0, ro_rw_section_size));
|
||||
assert_memory_not_equal(buffer1, buffer2, ro_rw_section_size);
|
||||
assert_memory_equal(dummy_data, buffer2, ro_rw_section_size);
|
||||
|
||||
free(buffer1);
|
||||
free(buffer2);
|
||||
free(dummy_data);
|
||||
}
|
||||
|
||||
static void test_fmap_locate_area(void **state)
|
||||
{
|
||||
struct region ar;
|
||||
|
||||
/* Try to locate named area */
|
||||
assert_int_not_equal(-1, fmap_locate_area("COREBOOT", &ar));
|
||||
assert_int_equal(FMAP_SECTION_COREBOOT_START, region_offset(&ar));
|
||||
assert_int_equal(FMAP_SECTION_COREBOOT_SIZE, region_sz(&ar));
|
||||
|
||||
/* Check if locating area second time works */
|
||||
assert_int_not_equal(-1, fmap_locate_area("COREBOOT", &ar));
|
||||
assert_int_equal(FMAP_SECTION_COREBOOT_START, region_offset(&ar));
|
||||
assert_int_equal(FMAP_SECTION_COREBOOT_SIZE, region_sz(&ar));
|
||||
|
||||
/* Look for another area */
|
||||
assert_int_not_equal(-1, fmap_locate_area("GBB", &ar));
|
||||
assert_int_equal(FMAP_SECTION_GBB_START, region_offset(&ar));
|
||||
assert_int_equal(FMAP_SECTION_GBB_SIZE, region_sz(&ar));
|
||||
|
||||
/* Expect error when looking for incorrect area */
|
||||
assert_int_equal(-1, fmap_locate_area("NONEXISTENT_AREA", &ar));
|
||||
assert_int_equal(-1, fmap_locate_area("", &ar));
|
||||
assert_int_equal(-1, fmap_locate_area(NULL, &ar));
|
||||
|
||||
/* Expect error when passing invalid region pointer */
|
||||
assert_int_equal(-1, fmap_locate_area("SHARED_DATA", NULL));
|
||||
}
|
||||
|
||||
static void test_fmap_find_region_name(void **state)
|
||||
{
|
||||
(void)state;
|
||||
struct region ar;
|
||||
char found_area_name[FMAP_STRLEN] = "";
|
||||
const char *area_name = "RW_PRESERVE";
|
||||
|
||||
/* Find area by name */
|
||||
assert_int_not_equal(-1, fmap_locate_area(area_name, &ar));
|
||||
|
||||
/* Find name of previously located region */
|
||||
assert_int_not_equal(-1, fmap_find_region_name(&ar, found_area_name));
|
||||
assert_string_equal(area_name, found_area_name);
|
||||
|
||||
/* Expect error when passing invalid buffer */
|
||||
assert_int_equal(-1, fmap_find_region_name(&ar, NULL));
|
||||
|
||||
/* Expect error when passing invalid region pointer */
|
||||
assert_int_equal(-1, fmap_find_region_name(NULL, found_area_name));
|
||||
|
||||
/* Try to find area outside of flash region */
|
||||
ar.offset = FMAP_SECTION_FLASH_START + FMAP_SECTION_FLASH_SIZE + 0x100;
|
||||
ar.size = 0x1000;
|
||||
assert_int_equal(-1, fmap_find_region_name(&ar, found_area_name));
|
||||
|
||||
/* Try to find area with correct offset and incorrect size */
|
||||
ar.offset = FMAP_SECTION_COREBOOT_START;
|
||||
ar.size = FMAP_SECTION_COREBOOT_SIZE / 4;
|
||||
assert_int_equal(-1, fmap_find_region_name(&ar, found_area_name));
|
||||
|
||||
/* Try to find area with correct size and incorrect offset */
|
||||
ar.offset = FMAP_SECTION_GBB_START - 0x100;
|
||||
ar.size = FMAP_SECTION_GBB_START;
|
||||
assert_int_equal(-1, fmap_find_region_name(&ar, found_area_name));
|
||||
|
||||
/* Try to find area with correct offset overlapping with another area */
|
||||
ar.offset = FMAP_SECTION_MISC_RW_START;
|
||||
ar.size = FMAP_SECTION_MISC_RW_START + 0x1000;
|
||||
assert_int_equal(-1, fmap_find_region_name(&ar, found_area_name));
|
||||
}
|
||||
|
||||
static void test_fmap_read_area(void **state)
|
||||
{
|
||||
const unsigned int section_size = FMAP_SECTION_RW_SECTION_A_SIZE;
|
||||
const unsigned int section_start = FMAP_SECTION_RW_SECTION_A_START;
|
||||
char *buffer = malloc(section_size);
|
||||
|
||||
/* Find and read area data. Compare with memory device simulating flash. */
|
||||
assert_int_equal(section_size, fmap_read_area("RW_SECTION_A", buffer, section_size));
|
||||
assert_memory_equal(flash_buffer + section_start, buffer, section_size);
|
||||
|
||||
/* Expect error when reading incorrect area */
|
||||
assert_int_equal(-1, fmap_read_area("NONEXISTENT_SECTION", buffer, section_size));
|
||||
assert_int_equal(-1, fmap_read_area("", buffer, section_size));
|
||||
assert_int_equal(-1, fmap_read_area(NULL, buffer, section_size));
|
||||
|
||||
/* Function fmap_read_area is not tested with NULL
|
||||
as output buffer pointer as it is not allowed. */
|
||||
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
static void test_fmap_overwrite_area(void **state)
|
||||
{
|
||||
const char *section_name = "FW_MAIN_A";
|
||||
const unsigned int section_size = FMAP_SECTION_FW_MAIN_A_SIZE;
|
||||
char *buffer1 = malloc(section_size);
|
||||
char *buffer2 = malloc(section_size);
|
||||
char *new_data = malloc(section_size / 2);
|
||||
char *zero_buffer = malloc(section_size / 2);
|
||||
memset(zero_buffer, 0, section_size / 2);
|
||||
memset(new_data, 0x42, section_size / 2);
|
||||
|
||||
/* Save buffer for future comparisons */
|
||||
assert_int_equal(section_size, fmap_read_area(section_name, buffer1, section_size));
|
||||
|
||||
/* Overwrite part of section. */
|
||||
assert_int_equal(section_size / 2,
|
||||
fmap_overwrite_area(section_name, new_data, section_size / 2));
|
||||
|
||||
/* Read and check if memory has changed as expected */
|
||||
assert_int_equal(section_size, fmap_read_area(section_name, buffer2, section_size));
|
||||
assert_memory_not_equal(buffer1, buffer2, section_size);
|
||||
/* Check if requested section area was overwritten properly */
|
||||
assert_memory_equal(buffer2, new_data, section_size / 2);
|
||||
/* Check if rest of section was zero-filled */
|
||||
assert_memory_equal(buffer2 + (section_size / 2), zero_buffer, section_size / 2);
|
||||
|
||||
/* Expect error when overwriting incorrect section */
|
||||
assert_int_equal(-1, fmap_overwrite_area("NONEXISTENT_SECTION",
|
||||
new_data, section_size / 2));
|
||||
assert_int_equal(-1, fmap_overwrite_area(NULL, new_data, section_size / 2));
|
||||
|
||||
/* Function fmap_overwrite_area is not tested with NULL
|
||||
as input buffer pointer as it is not allowed. */
|
||||
|
||||
free(buffer1);
|
||||
free(buffer2);
|
||||
free(new_data);
|
||||
free(zero_buffer);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
const struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test_setup_teardown(test_fmap_locate_area_as_rdev,
|
||||
setup_fmap, teardown_fmap),
|
||||
cmocka_unit_test_setup_teardown(test_fmap_locate_area_as_rdev_rw,
|
||||
setup_fmap, teardown_fmap),
|
||||
cmocka_unit_test_setup_teardown(test_fmap_locate_area,
|
||||
setup_fmap, teardown_fmap),
|
||||
cmocka_unit_test_setup_teardown(test_fmap_find_region_name,
|
||||
setup_fmap, teardown_fmap),
|
||||
cmocka_unit_test_setup_teardown(test_fmap_read_area,
|
||||
setup_fmap, teardown_fmap),
|
||||
cmocka_unit_test_setup_teardown(test_fmap_overwrite_area,
|
||||
setup_fmap, teardown_fmap),
|
||||
};
|
||||
|
||||
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||
}
|
Loading…
Reference in New Issue