diff options
author | Tom Rini <trini@konsulko.com> | 2021-08-23 12:44:12 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-08-23 12:44:12 -0400 |
commit | 4865db07169126ca0205f1a6265adf01bd69b3df (patch) | |
tree | 0e655eaf50b9edc572509c8feea58b2401fc01f9 | |
parent | 18f4e858762d3fc858c1a076616208aa4ab6c9be (diff) | |
parent | 9a4b3c8e914dbb9d06640d8e04db8a06dedca051 (diff) | |
download | u-boot-4865db07169126ca0205f1a6265adf01bd69b3df.tar.gz |
Merge tag 'efi-2021-10-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efiWIP/23Aug2021
Pull request for efi-2021-10-rc3
Documentation:
* Rename Freescale to NXP
* Document structures used for the UEFI TCG2 protocol
UEFI:
* Device paths must use EfiBootServicesData
-rw-r--r-- | arch/x86/include/asm/hob.h | 2 | ||||
-rw-r--r-- | doc/board/index.rst | 2 | ||||
-rw-r--r-- | doc/board/nxp/imx8mm_evk.rst (renamed from doc/board/freescale/imx8mm_evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imx8mn_evk.rst (renamed from doc/board/freescale/imx8mn_evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imx8mp_evk.rst (renamed from doc/board/freescale/imx8mp_evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imx8mq_evk.rst (renamed from doc/board/freescale/imx8mq_evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imx8qxp_mek.rst (renamed from doc/board/freescale/imx8qxp_mek.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imxrt1020-evk.rst (renamed from doc/board/freescale/imxrt1020-evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/imxrt1050-evk.rst (renamed from doc/board/freescale/imxrt1050-evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/index.rst (renamed from doc/board/freescale/index.rst) | 5 | ||||
-rw-r--r-- | doc/board/nxp/mx6sabreauto.rst (renamed from doc/board/freescale/mx6sabreauto.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/mx6sabresd.rst (renamed from doc/board/freescale/mx6sabresd.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/mx6ul_14x14_evk.rst (renamed from doc/board/freescale/mx6ul_14x14_evk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/mx6ullevk.rst (renamed from doc/board/freescale/mx6ullevk.rst) | 0 | ||||
-rw-r--r-- | doc/board/nxp/psb.rst (renamed from doc/imx/misc/psb.rst) | 0 | ||||
-rw-r--r-- | doc/board/st/index.rst | 2 | ||||
-rw-r--r-- | doc/board/st/st-dt.rst (renamed from doc/board/st/st.rst) | 0 | ||||
-rw-r--r-- | doc/imx/index.rst | 9 | ||||
-rw-r--r-- | doc/imx/misc/index.rst | 9 | ||||
-rw-r--r-- | doc/index.rst | 11 | ||||
-rw-r--r-- | include/efi.h | 36 | ||||
-rw-r--r-- | include/efi_api.h | 2 | ||||
-rw-r--r-- | include/efi_loader.h | 9 | ||||
-rw-r--r-- | include/efi_tcg2.h | 57 | ||||
-rw-r--r-- | lib/efi_loader/efi_device_path.c | 2 | ||||
-rw-r--r-- | lib/efi_loader/efi_device_path_to_text.c | 2 | ||||
-rw-r--r-- | lib/efi_loader/efi_memory.c | 5 |
27 files changed, 100 insertions, 53 deletions
diff --git a/arch/x86/include/asm/hob.h b/arch/x86/include/asm/hob.h index 56e11dbb28..2f5b6e24c2 100644 --- a/arch/x86/include/asm/hob.h +++ b/arch/x86/include/asm/hob.h @@ -91,7 +91,7 @@ struct hob_mem_alloc { * Type EFI_MEMORY_TYPE is defined in AllocatePages() in the UEFI 2.0 * specification. */ - enum efi_mem_type mem_type; + enum efi_memory_type mem_type; /* padding */ u8 reserved[4]; }; diff --git a/doc/board/index.rst b/doc/board/index.rst index 9e90978891..33087074fa 100644 --- a/doc/board/index.rst +++ b/doc/board/index.rst @@ -14,11 +14,11 @@ Board-specific doc congatec/index coreboot/index emulation/index - freescale/index google/index intel/index kontron/index microchip/index + nxp/index openpiton/index qualcomm/index rockchip/index diff --git a/doc/board/freescale/imx8mm_evk.rst b/doc/board/nxp/imx8mm_evk.rst index 7fd3d72564..7fd3d72564 100644 --- a/doc/board/freescale/imx8mm_evk.rst +++ b/doc/board/nxp/imx8mm_evk.rst diff --git a/doc/board/freescale/imx8mn_evk.rst b/doc/board/nxp/imx8mn_evk.rst index 9fbb947032..9fbb947032 100644 --- a/doc/board/freescale/imx8mn_evk.rst +++ b/doc/board/nxp/imx8mn_evk.rst diff --git a/doc/board/freescale/imx8mp_evk.rst b/doc/board/nxp/imx8mp_evk.rst index 609a29f3eb..609a29f3eb 100644 --- a/doc/board/freescale/imx8mp_evk.rst +++ b/doc/board/nxp/imx8mp_evk.rst diff --git a/doc/board/freescale/imx8mq_evk.rst b/doc/board/nxp/imx8mq_evk.rst index c269fdebe3..c269fdebe3 100644 --- a/doc/board/freescale/imx8mq_evk.rst +++ b/doc/board/nxp/imx8mq_evk.rst diff --git a/doc/board/freescale/imx8qxp_mek.rst b/doc/board/nxp/imx8qxp_mek.rst index 215627cfa6..215627cfa6 100644 --- a/doc/board/freescale/imx8qxp_mek.rst +++ b/doc/board/nxp/imx8qxp_mek.rst diff --git a/doc/board/freescale/imxrt1020-evk.rst b/doc/board/nxp/imxrt1020-evk.rst index 267f80c517..267f80c517 100644 --- a/doc/board/freescale/imxrt1020-evk.rst +++ b/doc/board/nxp/imxrt1020-evk.rst diff --git a/doc/board/freescale/imxrt1050-evk.rst b/doc/board/nxp/imxrt1050-evk.rst index c1fb48f0cd..c1fb48f0cd 100644 --- a/doc/board/freescale/imxrt1050-evk.rst +++ b/doc/board/nxp/imxrt1050-evk.rst diff --git a/doc/board/freescale/index.rst b/doc/board/nxp/index.rst index bddc6c6c2c..63956287c5 100644 --- a/doc/board/freescale/index.rst +++ b/doc/board/nxp/index.rst @@ -1,7 +1,7 @@ .. SPDX-License-Identifier: GPL-2.0+ -Freescale -========= +NXP Semiconductors +================== .. toctree:: :maxdepth: 2 @@ -17,3 +17,4 @@ Freescale mx6sabresd mx6ul_14x14_evk mx6ullevk + psb diff --git a/doc/board/freescale/mx6sabreauto.rst b/doc/board/nxp/mx6sabreauto.rst index fe4cd9d214..fe4cd9d214 100644 --- a/doc/board/freescale/mx6sabreauto.rst +++ b/doc/board/nxp/mx6sabreauto.rst diff --git a/doc/board/freescale/mx6sabresd.rst b/doc/board/nxp/mx6sabresd.rst index fe15ba7b79..fe15ba7b79 100644 --- a/doc/board/freescale/mx6sabresd.rst +++ b/doc/board/nxp/mx6sabresd.rst diff --git a/doc/board/freescale/mx6ul_14x14_evk.rst b/doc/board/nxp/mx6ul_14x14_evk.rst index 8298bf8e1e..8298bf8e1e 100644 --- a/doc/board/freescale/mx6ul_14x14_evk.rst +++ b/doc/board/nxp/mx6ul_14x14_evk.rst diff --git a/doc/board/freescale/mx6ullevk.rst b/doc/board/nxp/mx6ullevk.rst index a26248a1e3..a26248a1e3 100644 --- a/doc/board/freescale/mx6ullevk.rst +++ b/doc/board/nxp/mx6ullevk.rst diff --git a/doc/imx/misc/psb.rst b/doc/board/nxp/psb.rst index 71ac09fac8..71ac09fac8 100644 --- a/doc/imx/misc/psb.rst +++ b/doc/board/nxp/psb.rst diff --git a/doc/board/st/index.rst b/doc/board/st/index.rst index 8a06a954a2..9bba42f1da 100644 --- a/doc/board/st/index.rst +++ b/doc/board/st/index.rst @@ -6,5 +6,5 @@ STMicroelectronics .. toctree:: :maxdepth: 2 - st + st-dt stm32mp1 diff --git a/doc/board/st/st.rst b/doc/board/st/st-dt.rst index 3dade1681f..3dade1681f 100644 --- a/doc/board/st/st.rst +++ b/doc/board/st/st-dt.rst diff --git a/doc/imx/index.rst b/doc/imx/index.rst deleted file mode 100644 index b225b1d183..0000000000 --- a/doc/imx/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0+ - -NXP i.MX Machine-specific doc -============================= - -.. toctree:: - :maxdepth: 2 - - misc/index diff --git a/doc/imx/misc/index.rst b/doc/imx/misc/index.rst deleted file mode 100644 index 85fbdb6588..0000000000 --- a/doc/imx/misc/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0+ - -Miscellaneous -============= - -.. toctree:: - :maxdepth: 2 - - psb diff --git a/doc/index.rst b/doc/index.rst index 8066fcbfc0..02de1d4684 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -64,17 +64,6 @@ implementation. arch/index -Machine-specific doc --------------------- - -These books provide programming details about machine-specific -implementation. - -.. toctree:: - :maxdepth: 2 - - imx/index - Board-specific doc ------------------ diff --git a/include/efi.h b/include/efi.h index 6417a9b8c5..18c13e0370 100644 --- a/include/efi.h +++ b/include/efi.h @@ -125,8 +125,36 @@ struct efi_table_hdr { u32 reserved; }; +/* Allocation types for calls to boottime->allocate_pages*/ +/** + * enum efi_allocate_type - address restriction for memory allocation + */ +enum efi_allocate_type { + /** + * @EFI_ALLOCATE_ANY_PAGES: + * Allocate any block of sufficient size. Ignore memory address. + */ + EFI_ALLOCATE_ANY_PAGES, + /** + * @EFI_ALLOCATE_MAX_ADDRESS: + * Allocate a memory block with an uppermost address less or equal + * to the indicated address. + */ + EFI_ALLOCATE_MAX_ADDRESS, + /** + * @EFI_ALLOCATE_ADDRESS: + * Allocate a memory block starting at the indicatged adress. + */ + EFI_ALLOCATE_ADDRESS, + /** + * @EFI_MAX_ALLOCATE_TYPE: + * Value use for range checking. + */ + EFI_MAX_ALLOCATE_TYPE, +}; + /* Enumeration of memory types introduced in UEFI */ -enum efi_mem_type { +enum efi_memory_type { EFI_RESERVED_MEMORY_TYPE, /* * The code portions of a loaded application. @@ -224,12 +252,6 @@ struct efi_mem_desc { #define EFI_MEMORY_DESCRIPTOR_VERSION 1 -/* Allocation types for calls to boottime->allocate_pages*/ -#define EFI_ALLOCATE_ANY_PAGES 0 -#define EFI_ALLOCATE_MAX_ADDRESS 1 -#define EFI_ALLOCATE_ADDRESS 2 -#define EFI_MAX_ALLOCATE_TYPE 3 - /* Types and defines for Time Services */ #define EFI_TIME_ADJUST_DAYLIGHT 0x1 #define EFI_TIME_IN_DAYLIGHT 0x2 diff --git a/include/efi_api.h b/include/efi_api.h index 38ac47f164..c8f959bb72 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -249,7 +249,7 @@ struct efi_memory_range { struct efi_memory_range_capsule { struct efi_capsule_header *header; /* EFI_MEMORY_TYPE: 0x80000000-0xFFFFFFFF */ - enum efi_mem_type os_requested_memory_type; + enum efi_memory_type os_requested_memory_type; u64 number_of_memory_ranges; struct efi_memory_range memory_ranges[]; } __packed; diff --git a/include/efi_loader.h b/include/efi_loader.h index 32cb8d0f1e..c440962fe5 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -676,13 +676,14 @@ struct efi_device_path *efi_get_dp_from_boot(const efi_guid_t guid); /* Generic EFI memory allocator, call this to get memory */ void *efi_alloc(uint64_t len, int memory_type); /* More specific EFI memory allocator, called by EFI payloads */ -efi_status_t efi_allocate_pages(int type, int memory_type, efi_uintn_t pages, - uint64_t *memory); +efi_status_t efi_allocate_pages(enum efi_allocate_type type, + enum efi_memory_type memory_type, + efi_uintn_t pages, uint64_t *memory); /* EFI memory free function. */ efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t pages); /* EFI memory allocator for small allocations */ -efi_status_t efi_allocate_pool(int pool_type, efi_uintn_t size, - void **buffer); +efi_status_t efi_allocate_pool(enum efi_memory_type pool_type, + efi_uintn_t size, void **buffer); /* EFI pool memory free function. */ efi_status_t efi_free_pool(void *buffer); /* Returns the EFI memory map */ diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h index 497ba3ce94..b6b958da51 100644 --- a/include/efi_tcg2.h +++ b/include/efi_tcg2.h @@ -3,6 +3,13 @@ * Defines data structures and APIs that allow an OS to interact with UEFI * firmware to query information about the device * + * This file refers the following TCG specification. + * - TCG PC Client Platform Firmware Profile Specification + * https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ + * + * - TCG EFI Protocol Specification + * https://trustedcomputinggroup.org/resource/tcg-efi-protocol-specification/ + * * Copyright (c) 2020, Linaro Limited */ @@ -36,11 +43,23 @@ typedef u32 efi_tcg_event_log_bitmap; typedef u32 efi_tcg_event_log_format; typedef u32 efi_tcg_event_algorithm_bitmap; +/** + * struct tdEFI_TCG2_VERSION - structure of EFI TCG2 version + * @major: major version + * @minor: minor version + */ struct efi_tcg2_version { u8 major; u8 minor; }; +/** + * struct tdEFI_TCG2_EVENT_HEADER - structure of EFI TCG2 event header + * @header_size: size of the event header + * @header_version: header version + * @pcr_index: index of the PCR that is extended + * @event_type: type of the event that is extended + */ struct efi_tcg2_event_header { u32 header_size; u16 header_version; @@ -48,12 +67,27 @@ struct efi_tcg2_event_header { u32 event_type; } __packed; +/** + * struct tdEFI_TCG2_EVENT - structure of EFI TCG2 event + * @size: total size of the event including the size component, the header + * and the event data + * @header: event header + * @event: event to add + */ struct efi_tcg2_event { u32 size; struct efi_tcg2_event_header header; u8 event[]; } __packed; +/** + * struct tdUEFI_IMAGE_LOAD_EVENT - structure of PE/COFF image measurement + * @image_location_in_memory: image address + * @image_length_in_memory: image size + * @image_link_time_address: image link time address + * @length_of_device_path: devive path size + * @device_path: device path + */ struct uefi_image_load_event { efi_physical_addr_t image_location_in_memory; u64 image_length_in_memory; @@ -62,6 +96,23 @@ struct uefi_image_load_event { struct efi_device_path device_path[]; }; +/** + * struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY - protocol capability information + * @size: allocated size of the structure + * @structure_version: version of this structure + * @protocol_version: version of the EFI TCG2 protocol. + * @hash_algorithm_bitmap: supported hash algorithms + * @supported_event_logs: bitmap of supported event log formats + * @tpm_present_flag: false = TPM not present + * @max_command_size: max size (in bytes) of a command + * that can be sent to the TPM + * @max_response_size: max size (in bytes) of a response that + * can be provided by the TPM + * @manufacturer_id: 4-byte Vendor ID + * @number_of_pcr_banks: maximum number of PCR banks + * @active_pcr_banks: bitmap of currently active + * PCR banks (hashing algorithms). + */ struct efi_tcg2_boot_service_capability { u8 size; struct efi_tcg2_version structure_version; @@ -86,7 +137,7 @@ struct efi_tcg2_boot_service_capability { #define TCG_EFI_SPEC_ID_EVENT_SPEC_VERSION_ERRATA_TPM2 2 /** - * struct TCG_EfiSpecIdEventAlgorithmSize + * struct TCG_EfiSpecIdEventAlgorithmSize - hashing algorithm information * * @algorithm_id: algorithm defined in enum tpm2_algorithms * @digest_size: size of the algorithm @@ -97,7 +148,7 @@ struct tcg_efi_spec_id_event_algorithm_size { } __packed; /** - * struct TCG_EfiSpecIDEventStruct + * struct TCG_EfiSpecIDEventStruct - content of the event log header * * @signature: signature, set to Spec ID Event03 * @platform_class: class defined in TCG ACPI Specification @@ -130,7 +181,7 @@ struct tcg_efi_spec_id_event { } __packed; /** - * struct tdEFI_TCG2_FINAL_EVENTS_TABLE + * struct tdEFI_TCG2_FINAL_EVENTS_TABLE - log entries after Get Event Log * @version: version number for this structure * @number_of_events: number of events recorded after invocation of * GetEventLog() diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c index 9c3ac712fe..cbdb466da4 100644 --- a/lib/efi_loader/efi_device_path.c +++ b/lib/efi_loader/efi_device_path.c @@ -68,7 +68,7 @@ static void *dp_alloc(size_t sz) { void *buf; - if (efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, sz, &buf) != + if (efi_allocate_pool(EFI_BOOT_SERVICES_DATA, sz, &buf) != EFI_SUCCESS) { debug("EFI: ERROR: out of memory in %s\n", __func__); return NULL; diff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c index d46327a1c9..57fa9d97f7 100644 --- a/lib/efi_loader/efi_device_path_to_text.c +++ b/lib/efi_loader/efi_device_path_to_text.c @@ -34,7 +34,7 @@ static u16 *efi_str_to_u16(char *str) efi_status_t ret; len = sizeof(u16) * (utf8_utf16_strlen(str) + 1); - ret = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, len, (void **)&out); + ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, len, (void **)&out); if (ret != EFI_SUCCESS) return NULL; dst = out; diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index be2f655dff..f4acbee4f9 100644 --- a/lib/efi_loader/efi_memory.c +++ b/lib/efi_loader/efi_memory.c @@ -454,7 +454,8 @@ static uint64_t efi_find_free_memory(uint64_t len, uint64_t max_addr) * @memory allocated memory * @return status code */ -efi_status_t efi_allocate_pages(int type, int memory_type, +efi_status_t efi_allocate_pages(enum efi_allocate_type type, + enum efi_memory_type memory_type, efi_uintn_t pages, uint64_t *memory) { u64 len = pages << EFI_PAGE_SHIFT; @@ -556,7 +557,7 @@ efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t pages) * @buffer: allocated memory * Return: status code */ -efi_status_t efi_allocate_pool(int pool_type, efi_uintn_t size, void **buffer) +efi_status_t efi_allocate_pool(enum efi_memory_type pool_type, efi_uintn_t size, void **buffer) { efi_status_t r; u64 addr; |