mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-30 11:01:33 +00:00
Pull request for efi-2021-07-rc1
Bug fixes: * support EFI, HOST, VIRTIO in fsinfo command * simplify efi_get_device_path_text() * add missing EFI_UNACCEPTED_MEMORY_TYPE * mkeficapsule: improve online help * avoid several build warnings Documentation: * UEFI documentation for initrd loading options * describe building OP-TEE with for UEFI variables * mmc man-page -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEbcT5xx8ppvoGt20zxIHbvCwFGsQFAmBxjMMACgkQxIHbvCwF GsStSg//UE2os9Rifo0dnMNqQZ02nvEoHva7gtHGemiYbmCylD7kzkk9akEbi8NZ utLOq4iCvR2At6ZH3EtxaLlw3mKbxPsK64h9nkCX1/WIbS2dBllhdki2geyKoHmm DsL0GOl5+Vzzr6IiI+5Xr4Nby1BSG3UQKjPJ6gd6iBGq9ncH7OiBSqR87VXeE62i ZoKl8VDfJp6OptOlV1NZp7hD75Bq79aOxWqZf7eUE8AUWVD1xczXeaJVX9oEoUL8 vSNoyc8Sqec6ImM4ZPNKcr84xU/7YbkPv5Rxgh+yK58E2hIgiYYfencd3wznU9vu /lUsx8R23X+Fdu6Tcl3HHjck+IgeAHy3/PrWM9m97BikE3wpBbPs8U0W4lZ+e8dL D0zatgNQ+BqNpsO4qE6oRtujpBdD8LZQPjSXQxd7FTy7Ad03H9mvdtSAs95TFcm2 rlCxixdl6Dew5qImAck0CnLe3Az/b+XGuAKgjHIhFZMMH/3ygp++e9J08CDJem3A eh3yqBST97Q57B3mwmlU6sDngpTGVlzX/O/qpHVxkbCdW0wqWXCL/QmRnkSLbEu2 rJnC8ZzcYVWrReeCEbUjhNA9MoJeNDJRzcWJ76gXTrfkrLirmcZbgoTR8SOP04Eo BdEDdWXUJGR7HRCI0JZIGOKRYr/6/y9kzDP5Xjktm+raS69X5qU= =cUR2 -----END PGP SIGNATURE----- Merge tag 'efi-2021-07-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi Pull request for efi-2021-07-rc1 Bug fixes: * support EFI, HOST, VIRTIO in fsinfo command * simplify efi_get_device_path_text() * add missing EFI_UNACCEPTED_MEMORY_TYPE * mkeficapsule: improve online help * avoid several build warnings Documentation: * UEFI documentation for initrd loading options * describe building OP-TEE with for UEFI variables * mmc man-page
This commit is contained in:
commit
59e84da0b8
14 changed files with 360 additions and 117 deletions
|
@ -341,27 +341,27 @@ static int do_efi_capsule(struct cmd_tbl *cmdtp, int flag,
|
|||
#endif /* CONFIG_EFI_HAVE_CAPSULE_SUPPORT */
|
||||
|
||||
/**
|
||||
* efi_get_device_handle_info() - get information of UEFI device
|
||||
* efi_get_device_path_text() - get device path text
|
||||
*
|
||||
* @handle: Handle of UEFI device
|
||||
* @dev_path_text: Pointer to text of device path
|
||||
* Return: 0 on success, -1 on failure
|
||||
* Return the text representation of the device path of a handle.
|
||||
*
|
||||
* Currently return a formatted text of device path.
|
||||
* @handle: handle of UEFI device
|
||||
* Return:
|
||||
* Pointer to the device path text or NULL.
|
||||
* The caller is responsible for calling FreePool().
|
||||
*/
|
||||
static int efi_get_device_handle_info(efi_handle_t handle, u16 **dev_path_text)
|
||||
static u16 *efi_get_device_path_text(efi_handle_t handle)
|
||||
{
|
||||
struct efi_device_path *dp;
|
||||
struct efi_handler *handler;
|
||||
efi_status_t ret;
|
||||
|
||||
ret = EFI_CALL(BS->open_protocol(handle, &efi_guid_device_path,
|
||||
(void **)&dp, NULL /* FIXME */, NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL));
|
||||
if (ret == EFI_SUCCESS) {
|
||||
*dev_path_text = efi_dp_str(dp);
|
||||
return 0;
|
||||
ret = efi_search_protocol(handle, &efi_guid_device_path, &handler);
|
||||
if (ret == EFI_SUCCESS && handler->protocol_interface) {
|
||||
struct efi_device_path *dp = handler->protocol_interface;
|
||||
|
||||
return efi_dp_str(dp);
|
||||
} else {
|
||||
return -1;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -401,7 +401,8 @@ static int do_efi_show_devices(struct cmd_tbl *cmdtp, int flag,
|
|||
printf("Device%.*s Device Path\n", EFI_HANDLE_WIDTH - 6, spc);
|
||||
printf("%.*s ====================\n", EFI_HANDLE_WIDTH, sep);
|
||||
for (i = 0; i < num; i++) {
|
||||
if (!efi_get_device_handle_info(handles[i], &dev_path_text)) {
|
||||
dev_path_text = efi_get_device_path_text(handles[i]);
|
||||
if (dev_path_text) {
|
||||
printf("%p %ls\n", handles[i], dev_path_text);
|
||||
efi_free_pool(dev_path_text);
|
||||
}
|
||||
|
|
|
@ -180,6 +180,12 @@ Set up boot parameters on your board::
|
|||
|
||||
efidebug boot add -b 1 HELLO mmc 0:1 /helloworld.efi.signed ""
|
||||
|
||||
Since kernel 5.7 there's an alternative way of loading an initrd using
|
||||
LoadFile2 protocol if CONFIG_EFI_LOAD_FILE2_INITRD is enabled.
|
||||
The initrd path can be specified with::
|
||||
|
||||
efidebug boot add -b ABE0 'kernel' mmc 0:1 Image -i mmc 0:1 initrd
|
||||
|
||||
Now your board can run the signed image via the boot manager (see below).
|
||||
You can also try this sequence by running Pytest, test_efi_secboot,
|
||||
on the sandbox
|
||||
|
@ -213,7 +219,63 @@ non-volatile variables. When calling the variable services via the
|
|||
OP-TEE API U-Boot's OP-TEE supplicant relays calls to the RPMB driver
|
||||
which has to be enabled via CONFIG_SUPPORT_EMMC_RPMB=y.
|
||||
|
||||
[1] https://optee.readthedocs.io/ - OP-TEE documentation
|
||||
EDK2 Build instructions
|
||||
***********************
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/tianocore/edk2.git
|
||||
$ git clone https://github.com/tianocore/edk2-platforms.git
|
||||
$ cd edk2
|
||||
$ git submodule init && git submodule update --init --recursive
|
||||
$ cd ..
|
||||
$ export WORKSPACE=$(pwd)
|
||||
$ export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms
|
||||
$ export ACTIVE_PLATFORM="Platform/StandaloneMm/PlatformStandaloneMmPkg/PlatformStandaloneMmRpmb.dsc"
|
||||
$ export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-
|
||||
$ source edk2/edksetup.sh
|
||||
$ make -C edk2/BaseTools
|
||||
$ build -p $ACTIVE_PLATFORM -b RELEASE -a AARCH64 -t GCC5 -n `nproc`
|
||||
|
||||
OP-TEE Build instructions
|
||||
*************************
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/OP-TEE/optee_os.git
|
||||
$ cd optee_os
|
||||
$ ln -s ../Build/MmStandaloneRpmb/RELEASE_GCC5/FV/BL32_AP_MM.fd
|
||||
$ export ARCH=arm
|
||||
$ CROSS_COMPILE32=arm-linux-gnueabihf- make -j32 CFG_ARM64_core=y \
|
||||
PLATFORM=<myboard> CFG_STMM_PATH=BL32_AP_MM.fd CFG_RPMB_FS=y \
|
||||
CFG_RPMB_FS_DEV_ID=0 CFG_CORE_HEAP_SIZE=524288 CFG_RPMB_WRITE_KEY=1 \
|
||||
CFG_CORE_HEAP_SIZE=524288 CFG_CORE_DYN_SHM=y CFG_RPMB_TESTKEY=y \
|
||||
CFG_REE_FS=n CFG_CORE_ARM64_PA_BITS=48 CFG_TEE_CORE_LOG_LEVEL=1 \
|
||||
CFG_TEE_TA_LOG_LEVEL=1 CFG_SCTLR_ALIGNMENT_CHECK=n
|
||||
|
||||
U-Boot Build instructions
|
||||
*************************
|
||||
|
||||
Although the StandAloneMM binary comes from EDK2, using and storing the
|
||||
variables is currently available in U-Boot only.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/u-boot/u-boot.git
|
||||
$ cd u-boot
|
||||
$ export CROSS_COMPILE=aarch64-linux-gnu-
|
||||
$ export ARCH=<arch>
|
||||
$ make <myboard>_defconfig
|
||||
$ make menuconfig
|
||||
|
||||
Enable ``CONFIG_OPTEE``, ``CONFIG_CMD_OPTEE_RPMB`` and ``CONFIG_EFI_MM_COMM_TEE``
|
||||
|
||||
.. warning::
|
||||
|
||||
- Your OP-TEE platform port must support Dynamic shared memory, since that's
|
||||
the only kind of memory U-Boot supports for now.
|
||||
|
||||
[1] https://optee.readthedocs.io/en/latest/building/efi_vars/stmm.html
|
||||
|
||||
Executing the boot manager
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -484,7 +546,21 @@ The load file 2 protocol can be used by the Linux kernel to load the initial
|
|||
RAM disk. U-Boot can be configured to provide an implementation with::
|
||||
|
||||
EFI_LOAD_FILE2_INITRD=y
|
||||
EFI_INITRD_FILESPEC=interface dev:part path_to_initrd
|
||||
|
||||
When the option is enabled the user can add the initrd path with the efidebug
|
||||
command.
|
||||
|
||||
Load options Boot#### have a FilePathList[] member. The first element of
|
||||
the array (FilePathList[0]) is the EFI binary to execute. When an initrd
|
||||
is specified the Device Path for the initrd is denoted by a VenMedia node
|
||||
with the EFI_INITRD_MEDIA_GUID. Each entry of the array is terminated by the
|
||||
'end of entire device path' subtype (0xff). If a user wants to define multiple
|
||||
initrds, those must by separated by the 'end of this instance' identifier of
|
||||
the end node (0x01).
|
||||
|
||||
So our final format of the FilePathList[] is::
|
||||
|
||||
Loaded image - end node (0xff) - VenMedia - initrd_1 - [end node (0x01) - initrd_n ...] - end node (0xff)
|
||||
|
||||
Links
|
||||
-----
|
||||
|
|
|
@ -32,6 +32,7 @@ Shell commands
|
|||
load
|
||||
loady
|
||||
mbr
|
||||
mmc
|
||||
md
|
||||
pstore
|
||||
qfw
|
||||
|
|
212
doc/usage/mmc.rst
Normal file
212
doc/usage/mmc.rst
Normal file
|
@ -0,0 +1,212 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+:
|
||||
|
||||
mmc command
|
||||
============
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
::
|
||||
|
||||
mmc info
|
||||
mmc read addr blk# cnt
|
||||
mmc write addr blk# cnt
|
||||
mmc erase blk# cnt
|
||||
mmc rescan
|
||||
mmc part
|
||||
mmc dev [dev] [part]
|
||||
mmc list
|
||||
mmc wp
|
||||
mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
|
||||
mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
|
||||
mmc partconf <dev> [boot_ack boot_partition partition_access]
|
||||
mmc rst-function <dev> <value>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The mmc command is used to control MMC(eMMC/SD) device.
|
||||
|
||||
The 'mmc info' command displays information (Manufacturer ID, OEM, Name, Bus Speed, Mode, ...) of MMC device.
|
||||
|
||||
The 'mmc read' command reads raw data to memory address from MMC device with block offset and count.
|
||||
|
||||
The 'mmc write' command writes raw data to MMC device from memory address with block offset and count.
|
||||
|
||||
addr
|
||||
memory address
|
||||
blk#
|
||||
start block offset
|
||||
cnt
|
||||
block count
|
||||
|
||||
The 'mmc erase' command erases MMC device from block offset until count.
|
||||
|
||||
blk#
|
||||
start block offset
|
||||
cnt
|
||||
block count
|
||||
|
||||
The 'mmc rescan' command scans the available MMC device.
|
||||
|
||||
The 'mmc part' command displays the list available partition on current mmc device.
|
||||
|
||||
The 'mmc dev' command shows or set current mmc device.
|
||||
|
||||
dev
|
||||
device number to change
|
||||
part
|
||||
partition number to change
|
||||
|
||||
The 'mmc list' command displays the list available devices.
|
||||
|
||||
The 'mmc wp' command enables "power on write protect" function for boot partitions.
|
||||
|
||||
The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specification*)
|
||||
|
||||
boot_bus_width
|
||||
0x0
|
||||
x1 (sdr) or x4(ddr) buswidth in boot operation mode (default)
|
||||
0x1
|
||||
x4 (sdr/ddr) buswidth in boot operation mode
|
||||
0x2
|
||||
x8 (sdr/ddr) buswidth in boot operation mode
|
||||
0x3
|
||||
Reserved
|
||||
|
||||
reset_boot_bus_width
|
||||
0x0
|
||||
Reset buswidth to x1, Single data reate and backward compatible timing after boot operation (default)
|
||||
0x1
|
||||
Retain BOOT_BUS_WIDTH and BOOT_MODE value after boot operation. This is relevant to Push-pull mode operation only
|
||||
|
||||
boot_mode
|
||||
0x0
|
||||
Use single data rate + backward compatible timing in boot operation (default)
|
||||
0x1
|
||||
Use single data rate + High Speed timing in boot operation mode
|
||||
0x2
|
||||
Use dual data rate in boot operation
|
||||
0x3
|
||||
Reserved
|
||||
|
||||
The 'mmc partconf' command shows or changes PARTITION_CONFIG field.
|
||||
|
||||
boot_ack
|
||||
boot acknowledge value
|
||||
boot_partition
|
||||
boot partition to enable for boot
|
||||
0x0
|
||||
Device not boot enabled(default)
|
||||
0x1
|
||||
Boot partition1 enabled for boot
|
||||
0x2
|
||||
Boot partition2 enabled for boot
|
||||
0x7
|
||||
User area enabled for boot
|
||||
others
|
||||
Reserved
|
||||
partition_access
|
||||
partitions to access
|
||||
|
||||
The 'mmc bootpart-resize' command changes sizes of boot and RPMB partitions.
|
||||
dev
|
||||
device number
|
||||
boot part size MB
|
||||
target size of boot partition
|
||||
RPMB part size MB
|
||||
target size of RPMB partition
|
||||
|
||||
The 'mmc rst-function' command changes the RST_n_FUNCTION field.
|
||||
**WARNING** : This is a write-once field. (*Refer to eMMC specification*)
|
||||
|
||||
value
|
||||
0x0
|
||||
RST_n signal is temporarily disabled (default)
|
||||
0x1
|
||||
RST_n signal is permanently enabled
|
||||
0x2
|
||||
RST_n signal is permanently disabled
|
||||
0x3
|
||||
Reserved
|
||||
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
The 'mmc info' command displays device's capabilities:
|
||||
::
|
||||
|
||||
=> mmc info
|
||||
Device: EXYNOS DWMMC
|
||||
Manufacturer ID: 45
|
||||
OEM: 100
|
||||
Name: SDW16
|
||||
Bus Speed: 52000000
|
||||
Mode: MMC DDR52 (52MHz)
|
||||
Rd Block Len: 512
|
||||
MMC version 5.0
|
||||
High Capacity: Yes
|
||||
Capacity: 14.7 GiB
|
||||
Bus Width: 8-bit DDR
|
||||
Erase Group Size: 512 KiB
|
||||
HC WP Group Size: 8 MiB
|
||||
User Capacity: 14.7 GiB WRREL
|
||||
Boot Capacity: 4 MiB ENH
|
||||
RPMB Capacity: 4 MiB ENH
|
||||
Boot area 0 is not write protected
|
||||
Boot area 1 is not write protected
|
||||
|
||||
The raw data can be read/written via 'mmc read/write' command:
|
||||
::
|
||||
|
||||
=> mmc read 0x40000000 0x5000 0x100
|
||||
MMC read: dev # 0, block # 20480, count 256 ... 256 blocks read: OK
|
||||
|
||||
=> mmc write 0x40000000 0x5000 0x10
|
||||
MMC write: dev # 0, block # 20480, count 256 ... 256 blocks written: OK
|
||||
|
||||
The partition list can be shown via 'mmc part' command:
|
||||
::
|
||||
|
||||
=> mmc part
|
||||
Partition Map for MMC device 0 -- Partition Type: DOS
|
||||
|
||||
Part Start Sector Num Sectors UUID Type
|
||||
1 8192 131072 dff8751a-01 0e Boot
|
||||
2 139264 6291456 dff8751a-02 83
|
||||
3 6430720 1048576 dff8751a-03 83
|
||||
4 7479296 23298048 dff8751a-04 05 Extd
|
||||
5 7481344 307200 dff8751a-05 83
|
||||
6 7790592 65536 dff8751a-06 83
|
||||
7 7858176 16384 dff8751a-07 83
|
||||
8 7876608 22900736 dff8751a-08 83
|
||||
|
||||
The current device can be shown or set via 'mmc dev' command:
|
||||
::
|
||||
|
||||
=> mmc dev
|
||||
switch to partitions #0, OK
|
||||
mmc0(part0) is current device
|
||||
=> mmc dev 2 0
|
||||
switch to partitions #0, OK
|
||||
mmc2 is current device
|
||||
|
||||
The list of available devices can be shown via 'mmc list' command:
|
||||
::
|
||||
|
||||
=> mmc list
|
||||
mmc list
|
||||
EXYNOS DWMMC: 0 (eMMC)
|
||||
EXYNOS DWMMC: 2 (SD)
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
The mmc command is only available if CONFIG_CMD_MMC=y.
|
||||
Some commands need to enable more configuration.
|
||||
|
||||
write, erase
|
||||
CONFIG_MMC_WRITE
|
||||
bootbus, bootpart-resize, partconf, rst-function
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
38
fs/fat/fat.c
38
fs/fat/fat.c
|
@ -1147,42 +1147,12 @@ int file_fat_detectfs(void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IDE) || \
|
||||
defined(CONFIG_SATA) || \
|
||||
defined(CONFIG_SCSI) || \
|
||||
defined(CONFIG_CMD_USB) || \
|
||||
defined(CONFIG_MMC)
|
||||
printf("Interface: ");
|
||||
switch (cur_dev->if_type) {
|
||||
case IF_TYPE_IDE:
|
||||
printf("IDE");
|
||||
break;
|
||||
case IF_TYPE_SATA:
|
||||
printf("SATA");
|
||||
break;
|
||||
case IF_TYPE_SCSI:
|
||||
printf("SCSI");
|
||||
break;
|
||||
case IF_TYPE_ATAPI:
|
||||
printf("ATAPI");
|
||||
break;
|
||||
case IF_TYPE_USB:
|
||||
printf("USB");
|
||||
break;
|
||||
case IF_TYPE_DOC:
|
||||
printf("DOC");
|
||||
break;
|
||||
case IF_TYPE_MMC:
|
||||
printf("MMC");
|
||||
break;
|
||||
default:
|
||||
printf("Unknown");
|
||||
if (IS_ENABLED(CONFIG_HAVE_BLOCK_DEVICE)) {
|
||||
printf("Interface: %s\n", blk_get_if_type_name(cur_dev->if_type));
|
||||
printf(" Device %d: ", cur_dev->devnum);
|
||||
dev_print(cur_dev);
|
||||
}
|
||||
|
||||
printf("\n Device %d: ", cur_dev->devnum);
|
||||
dev_print(cur_dev);
|
||||
#endif
|
||||
|
||||
if (read_bootsectandvi(&bs, &volinfo, &fatsize)) {
|
||||
printf("\nNo valid FAT fs found\n");
|
||||
return 1;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#define MAX_UTF8_PER_UTF16 3
|
||||
|
||||
/**
|
||||
/*
|
||||
* codepage_437 - Unicode to codepage 437 translation table
|
||||
*/
|
||||
extern const u16 codepage_437[128];
|
||||
|
|
|
@ -180,9 +180,13 @@ enum efi_mem_type {
|
|||
*/
|
||||
EFI_PAL_CODE,
|
||||
/*
|
||||
* Non-volatile memory.
|
||||
* Byte addressable non-volatile memory.
|
||||
*/
|
||||
EFI_PERSISTENT_MEMORY_TYPE,
|
||||
/*
|
||||
* Unaccepted memory must be accepted by boot target before usage.
|
||||
*/
|
||||
EFI_UNACCEPTED_MEMORY_TYPE,
|
||||
|
||||
EFI_MAX_MEMORY_TYPE,
|
||||
};
|
||||
|
@ -201,6 +205,7 @@ enum efi_mem_type {
|
|||
((u64)0x0000000000010000ULL) /* higher reliability */
|
||||
#define EFI_MEMORY_RO ((u64)0x0000000000020000ULL) /* read-only */
|
||||
#define EFI_MEMORY_SP ((u64)0x0000000000040000ULL) /* specific-purpose memory (SPM) */
|
||||
#define EFI_MEMORY_CPU_CRYPTO ((u64)0x0000000000080000ULL) /* cryptographically protectable */
|
||||
#define EFI_MEMORY_RUNTIME ((u64)0x8000000000000000ULL) /* range requires runtime mapping */
|
||||
#define EFI_MEM_DESC_VERSION 1
|
||||
|
||||
|
|
|
@ -53,21 +53,25 @@
|
|||
*/
|
||||
enum efi_test_phase {
|
||||
/**
|
||||
* @EFI_EXECUTE_BEFORE_BOOTTIME_EXIT: - execute before ExitBootServices
|
||||
* @EFI_EXECUTE_BEFORE_BOOTTIME_EXIT:
|
||||
*
|
||||
* Setup, execute, and teardown are executed before ExitBootServices().
|
||||
*/
|
||||
EFI_EXECUTE_BEFORE_BOOTTIME_EXIT = 1,
|
||||
/**
|
||||
* @EFI_SETUP_BEFORE_BOOTTIME_EXIT: - setup before ExitBootServices
|
||||
* @EFI_SETUP_BEFORE_BOOTTIME_EXIT:
|
||||
*
|
||||
* Setup is executed before ExitBootServices() while execute, and
|
||||
* teardown are executed after ExitBootServices().
|
||||
*/
|
||||
EFI_SETUP_BEFORE_BOOTTIME_EXIT,
|
||||
/**
|
||||
* @EFI_SETTING_VIRTUAL_ADDRESS_MAP - calls SetVirtualAddressMap()
|
||||
* Execute calls SetVirtualAddressMap().
|
||||
* @EFI_SETTING_VIRTUAL_ADDRESS_MAP:
|
||||
*
|
||||
* Execute calls SetVirtualAddressMap(). Setup is executed before
|
||||
* ExitBootServices() while execute is executed after
|
||||
* ExitBootServices(), and after the execute of tests marked as
|
||||
* @EFI_SETUP_BEFORE_BOOTTIME_EXIT. Teardown is executed thereafter.
|
||||
*/
|
||||
EFI_SETTING_VIRTUAL_ADDRESS_MAP,
|
||||
};
|
||||
|
|
|
@ -219,6 +219,10 @@
|
|||
*
|
||||
* This is like ll_entry_get(), but without the extra code, so it is suitable
|
||||
* for putting into data structures.
|
||||
*
|
||||
* @_type: C type of the list entry, e.g. 'struct foo'
|
||||
* @_name: name of the entry
|
||||
* @_list: name of the list
|
||||
*/
|
||||
#define ll_entry_ref(_type, _name, _list) \
|
||||
((_type *)&_u_boot_list_2_##_list##_2_##_name)
|
||||
|
|
|
@ -173,6 +173,7 @@ config EFI_CAPSULE_AUTHENTICATE
|
|||
select X509_CERTIFICATE_PARSER
|
||||
select PKCS7_MESSAGE_PARSER
|
||||
select PKCS7_VERIFY
|
||||
select IMAGE_SIGN_INFO
|
||||
default n
|
||||
help
|
||||
Select this option if you want to enable capsule
|
||||
|
|
|
@ -30,38 +30,6 @@ static const struct efi_runtime_services *rs;
|
|||
* should do normal or recovery boot.
|
||||
*/
|
||||
|
||||
/**
|
||||
* get_var() - get UEFI variable
|
||||
*
|
||||
* It is the caller's duty to free the returned buffer.
|
||||
*
|
||||
* @name: name of variable
|
||||
* @vendor: vendor GUID of variable
|
||||
* @size: size of allocated buffer
|
||||
* Return: buffer with variable data or NULL
|
||||
*/
|
||||
static void *get_var(u16 *name, const efi_guid_t *vendor,
|
||||
efi_uintn_t *size)
|
||||
{
|
||||
efi_status_t ret;
|
||||
void *buf = NULL;
|
||||
|
||||
*size = 0;
|
||||
ret = efi_get_variable_int(name, vendor, NULL, size, buf, NULL);
|
||||
if (ret == EFI_BUFFER_TOO_SMALL) {
|
||||
buf = malloc(*size);
|
||||
ret = efi_get_variable_int(name, vendor, NULL, size, buf, NULL);
|
||||
}
|
||||
|
||||
if (ret != EFI_SUCCESS) {
|
||||
free(buf);
|
||||
*size = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* try_load_entry() - try to load image for boot option
|
||||
*
|
||||
|
@ -89,7 +57,7 @@ static efi_status_t try_load_entry(u16 n, efi_handle_t *handle,
|
|||
varname[6] = hexmap[(n & 0x00f0) >> 4];
|
||||
varname[7] = hexmap[(n & 0x000f) >> 0];
|
||||
|
||||
load_option = get_var(varname, &efi_global_variable_guid, &size);
|
||||
load_option = efi_get_var(varname, &efi_global_variable_guid, &size);
|
||||
if (!load_option)
|
||||
return EFI_LOAD_ERROR;
|
||||
|
||||
|
@ -210,7 +178,7 @@ efi_status_t efi_bootmgr_load(efi_handle_t *handle, void **load_options)
|
|||
}
|
||||
|
||||
/* BootOrder */
|
||||
bootorder = get_var(L"BootOrder", &efi_global_variable_guid, &size);
|
||||
bootorder = efi_get_var(L"BootOrder", &efi_global_variable_guid, &size);
|
||||
if (!bootorder) {
|
||||
log_info("BootOrder not defined\n");
|
||||
ret = EFI_NOT_FOUND;
|
||||
|
|
|
@ -120,8 +120,8 @@ efi_status_t efi_esrt_allocate_install(u32 num_entries)
|
|||
(void **)&new_esrt);
|
||||
|
||||
if (ret != EFI_SUCCESS) {
|
||||
EFI_PRINT("ESRT cannot allocate memory for %d entries (%d bytes)\n",
|
||||
num_entries, efi_esrt_entries_to_size(num_entries));
|
||||
EFI_PRINT("ESRT cannot allocate memory for %u entries (%u bytes)\n",
|
||||
num_entries, size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ struct efi_system_resource_entry *esrt_find_entry(efi_guid_t *img_fw_class)
|
|||
/* Check if the image with img_fw_class is already in the ESRT. */
|
||||
for (u32 idx = 0; idx < filled_entries; idx++) {
|
||||
if (!guidcmp(&entry[idx].fw_class, img_fw_class)) {
|
||||
EFI_PRINT("ESRT found entry for image %pUl at index %d\n",
|
||||
EFI_PRINT("ESRT found entry for image %pUl at index %u\n",
|
||||
img_fw_class, idx);
|
||||
return &entry[idx];
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ struct efi_system_resource_entry *esrt_find_entry(efi_guid_t *img_fw_class)
|
|||
*/
|
||||
esrt->fw_resource_count++;
|
||||
entry[filled_entries].fw_class = *img_fw_class;
|
||||
EFI_PRINT("ESRT allocated new entry for image %pUl at index %d\n",
|
||||
EFI_PRINT("ESRT allocated new entry for image %pUl at index %u\n",
|
||||
img_fw_class, filled_entries);
|
||||
|
||||
return &entry[filled_entries];
|
||||
|
@ -316,7 +316,7 @@ efi_status_t efi_esrt_populate(void)
|
|||
{
|
||||
efi_handle_t *base_handle = NULL;
|
||||
efi_handle_t *it_handle;
|
||||
size_t no_handles = 0;
|
||||
efi_uintn_t no_handles = 0;
|
||||
struct efi_firmware_management_protocol *fmp;
|
||||
efi_status_t ret;
|
||||
u32 num_entries = 0;
|
||||
|
@ -341,7 +341,7 @@ efi_status_t efi_esrt_populate(void)
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_PRINT("ESRT populate esrt from (%ld) available FMP handles\n",
|
||||
EFI_PRINT("ESRT populate esrt from (%zd) available FMP handles\n",
|
||||
no_handles);
|
||||
|
||||
/*
|
||||
|
@ -363,7 +363,7 @@ efi_status_t efi_esrt_populate(void)
|
|||
&handler);
|
||||
|
||||
if (ret != EFI_SUCCESS) {
|
||||
EFI_PRINT("ESRT Unable to find FMP handle (%d)\n",
|
||||
EFI_PRINT("ESRT Unable to find FMP handle (%u)\n",
|
||||
idx);
|
||||
goto out;
|
||||
}
|
||||
|
@ -414,7 +414,7 @@ efi_status_t efi_esrt_populate(void)
|
|||
EFI_CALL(efi_free_pool(img_info));
|
||||
}
|
||||
|
||||
EFI_PRINT("ESRT create table with %d entries\n", num_entries);
|
||||
EFI_PRINT("ESRT create table with %u entries\n", num_entries);
|
||||
/*
|
||||
* Allocate an ESRT with the sufficient number of entries to accommodate
|
||||
* all the FMPs in the system.
|
||||
|
@ -435,7 +435,7 @@ efi_status_t efi_esrt_populate(void)
|
|||
&handler));
|
||||
|
||||
if (ret != EFI_SUCCESS) {
|
||||
EFI_PRINT("ESRT unable to find FMP handle (%d)\n",
|
||||
EFI_PRINT("ESRT unable to find FMP handle (%u)\n",
|
||||
idx);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -176,13 +176,14 @@ static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
|
|||
struct tpml_digest_values *digest_list,
|
||||
u32 size, u8 event[])
|
||||
{
|
||||
void *log = event_log.buffer + event_log.pos;
|
||||
void *log = (void *)((uintptr_t)event_log.buffer + event_log.pos);
|
||||
size_t pos;
|
||||
int i;
|
||||
u32 event_size;
|
||||
|
||||
if (event_log.get_event_called)
|
||||
log = event_log.final_buffer + event_log.final_pos;
|
||||
log = (void *)((uintptr_t)event_log.final_buffer +
|
||||
event_log.final_pos);
|
||||
|
||||
/*
|
||||
* size refers to the length of event[] only, we need to check against
|
||||
|
@ -197,24 +198,24 @@ static efi_status_t tcg2_agile_log_append(u32 pcr_index, u32 event_type,
|
|||
|
||||
put_unaligned_le32(pcr_index, log);
|
||||
pos = offsetof(struct tcg_pcr_event2, event_type);
|
||||
put_unaligned_le32(event_type, log + pos);
|
||||
put_unaligned_le32(event_type, (void *)((uintptr_t)log + pos));
|
||||
pos = offsetof(struct tcg_pcr_event2, digests); /* count */
|
||||
put_unaligned_le32(digest_list->count, log + pos);
|
||||
put_unaligned_le32(digest_list->count, (void *)((uintptr_t)log + pos));
|
||||
|
||||
pos += offsetof(struct tpml_digest_values, digests);
|
||||
for (i = 0; i < digest_list->count; i++) {
|
||||
u16 hash_alg = digest_list->digests[i].hash_alg;
|
||||
u8 *digest = (u8 *)&digest_list->digests[i].digest;
|
||||
|
||||
put_unaligned_le16(hash_alg, log + pos);
|
||||
put_unaligned_le16(hash_alg, (void *)((uintptr_t)log + pos));
|
||||
pos += offsetof(struct tpmt_ha, digest);
|
||||
memcpy(log + pos, digest, alg_to_len(hash_alg));
|
||||
memcpy((void *)((uintptr_t)log + pos), digest, alg_to_len(hash_alg));
|
||||
pos += alg_to_len(hash_alg);
|
||||
}
|
||||
|
||||
put_unaligned_le32(size, log + pos);
|
||||
put_unaligned_le32(size, (void *)((uintptr_t)log + pos));
|
||||
pos += sizeof(u32); /* tcg_pcr_event2 event_size*/
|
||||
memcpy(log + pos, event, size);
|
||||
memcpy((void *)((uintptr_t)log + pos), event, size);
|
||||
pos += size;
|
||||
|
||||
/* make sure the calculated buffer is what we checked against */
|
||||
|
@ -1046,7 +1047,7 @@ static efi_status_t efi_init_event_log(void)
|
|||
put_unaligned_le32(0, &event_header->pcr_index);
|
||||
put_unaligned_le32(EV_NO_ACTION, &event_header->event_type);
|
||||
memset(&event_header->digest, 0, sizeof(event_header->digest));
|
||||
ret = create_specid_event(dev, event_log.buffer + sizeof(*event_header),
|
||||
ret = create_specid_event(dev, (void *)((uintptr_t)event_log.buffer + sizeof(*event_header)),
|
||||
&spec_event_size);
|
||||
if (ret != EFI_SUCCESS)
|
||||
goto out;
|
||||
|
|
|
@ -64,14 +64,14 @@ static void print_usage(void)
|
|||
printf("Usage: %s [options] <output file>\n"
|
||||
"Options:\n"
|
||||
|
||||
"\t--fit <fit image> new FIT image file\n"
|
||||
"\t--raw <raw image> new raw image file\n"
|
||||
"\t--index <index> update image index\n"
|
||||
"\t--instance <instance> update hardware instance\n"
|
||||
"\t--public-key <key file> public key esl file\n"
|
||||
"\t--dtb <dtb file> dtb file\n"
|
||||
"\t--overlay the dtb file is an overlay\n"
|
||||
"\t--help print a help message\n",
|
||||
"\t-f, --fit <fit image> new FIT image file\n"
|
||||
"\t-r, --raw <raw image> new raw image file\n"
|
||||
"\t-i, --index <index> update image index\n"
|
||||
"\t-I, --instance <instance> update hardware instance\n"
|
||||
"\t-K, --public-key <key file> public key esl file\n"
|
||||
"\t-D, --dtb <dtb file> dtb file\n"
|
||||
"\t-O, --overlay the dtb file is an overlay\n"
|
||||
"\t-h, --help print a help message\n",
|
||||
tool_name);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue