mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 01:44:34 +00:00
Pull request efi-2025-01-rc3
Documentation: * document wget syntax enhancements with lwIP network stack * move README.kconfig to HTML documentation * remove redundant README.TPL UEFI: * simplify efi_tcg2_hash_log_extend_event() * allow EFI_LOADER_BOUNCE_BUFFER on all architectures * correctly unmap and free memory on errors Other: * enable EFI_LOADER_BOUNCE_BUFFER on StarFive VisionFive 2 -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEK7wKXt3/btL6/yA+hO4vgnE3U0sFAmdDRkIACgkQhO4vgnE3 U0ve5Q//WJxaVTkrEHosEeqXEq0kAkoYj+W/sH5oMsSxTxZ8fpMPNltL0475QmFJ zyfFoRQK4Cip22FsZPBBURzIv6B2iYIEk4p8sVYgIV3jBrHmzHEugpAuAyWYAeGm qpZlZn02UgT3YMOl4Otgx+V+gFMnetTRg2xfcpfq972oEfCcOn1H+hrYDPQNRJsk wqEf48Lul1VTQi9EldOyiZkzZZK5A/Eok78dtAXWowBD3O1Ow3D1AX5l/+9BROa6 442hOVhWazXL/2hkh0vJU0Kmr770dWFYnlZCkNF15hW4N4jIE5vt0Pmy44EHAXpA tJaeDA9JuzaV0CMDUZXYP3s0lt6vEV2ML2pAE9PrzNgaPFzuQqowkn3D+17mAeuL sEWCyha8UaJtjM8m9E7pylfVCZ4UpvtnFYrD+6/AHjuGAnH0pXR4PbI2OepBQogr QvdB0LaJgc2TMBKfmePnW125ZJYceQbjBJuMxwxAH+6c+V41Mr9IZdSSf6ZZcju7 3jgBJq9i4ys/5kHNI5QOqgCpdnMNLF+XINsnAgqZOgISTsYQUuKdbcsn/oIuwSVs HjkCYru5Pe3BvGQxUf9RUXE3VAlmkDVyrgWlbVEB/Cqjyz2zalL57Jb3t3+EmGB/ FSN9xnlue2PZ1JmvHKAr62tGGWS0E5rDCpy8vZ8IAxJLUgWPREA= =9DdD -----END PGP SIGNATURE----- Merge tag 'efi-2025-01-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efi CI: https://source.denx.de/u-boot/custodians/u-boot-efi/-/pipelines/23529 - Documentation: - Document wget syntax enhancements with lwIP network stack - Move README.kconfig to HTML documentation - Remove redundant README.TPL - UEFI: - Simplify efi_tcg2_hash_log_extend_event() - Allow EFI_LOADER_BOUNCE_BUFFER on all architectures - Correctly unmap and free memory on errors - Other: - Enable EFI_LOADER_BOUNCE_BUFFER on StarFive VisionFive 2
This commit is contained in:
commit
6c791b6646
8 changed files with 142 additions and 128 deletions
|
@ -32,6 +32,7 @@ CONFIG_CMODEL_MEDANY=y
|
|||
CONFIG_RISCV_SMODE=y
|
||||
# CONFIG_OF_BOARD_FIXUP is not set
|
||||
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_BOOTSTD_DEFAULTS=y
|
||||
CONFIG_BOOTSTAGE=y
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
Generic TPL framework
|
||||
=====================
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
TPL---Third Program Loader.
|
||||
|
||||
Due to the SPL on some boards(powerpc mpc85xx) has a size limit and cannot
|
||||
be compatible with all the external device(e.g. DDR). So add a tertiary
|
||||
program loader (TPL) to enable a loader stub loaded by the code from the
|
||||
SPL. It loads the final uboot image into DDR, then jump to it to begin
|
||||
execution. Now, only the powerpc mpc85xx has this requirement and will
|
||||
implemente it.
|
||||
|
||||
Keep consistent with SPL, with this framework almost all source files for a
|
||||
board can be reused. No code duplication or symlinking is necessary anymore.
|
||||
|
||||
How it works
|
||||
------------
|
||||
|
||||
There has been a directory $(srctree)/spl which contains only a Makefile. The
|
||||
Makefile is shared by SPL and TPL.
|
||||
|
||||
The object files are built separately for SPL/TPL and placed in the
|
||||
directory spl/tpl. The final binaries which are generated are
|
||||
u-boot-{spl|tpl}, u-boot-{spl|tpl}.bin and u-boot-{spl|tpl}.map.
|
||||
|
||||
During the TPL build a variable named CONFIG_TPL_BUILD is exported in the
|
||||
make environment and also appended to CPPFLAGS with -DCONFIG_TPL_BUILD.
|
||||
|
||||
The SPL options are shared by SPL and TPL, the board config file should
|
||||
determine which SPL options to choose based on whether CONFIG_TPL_BUILD
|
||||
is set. Source files can be compiled for TPL with options chosen in the
|
||||
board config file.
|
||||
|
||||
TPL use a small device tree (u-boot-tpl.dtb), containing only the nodes with
|
||||
the pre-relocation properties: 'bootph-all' and 'bootph-pre-sram'
|
||||
(see doc/develop/spl.rst for details).
|
||||
|
||||
For example:
|
||||
|
||||
spl/Makefile:
|
||||
LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/libcommon.o
|
||||
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT is defined in board config file:
|
||||
#ifdef CONFIG_TPL_BUILD
|
||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||
#endif
|
|
@ -13,6 +13,7 @@ General
|
|||
codingstyle
|
||||
designprinciples
|
||||
docstyle
|
||||
kconfig
|
||||
memory
|
||||
patman
|
||||
process
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Kconfig in U-Boot
|
||||
=================
|
||||
|
||||
|
@ -5,22 +7,20 @@ This document describes the configuration infrastructure of U-Boot.
|
|||
|
||||
The conventional configuration was replaced by Kconfig at v2014.10-rc1 release.
|
||||
|
||||
|
||||
Language Specification
|
||||
----------------------
|
||||
|
||||
Kconfig originates in Linux Kernel.
|
||||
See the file "Documentation/kbuild/kconfig*.txt" in your Linux Kernel
|
||||
source directory for a basic specification of Kconfig.
|
||||
|
||||
The Kconfig configuration language originates in Linux kernel.
|
||||
See the Linux document
|
||||
`Kconfig Language <https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html>`_
|
||||
for a description of Kconfig.
|
||||
|
||||
Difference from Linux's Kconfig
|
||||
-------------------------------
|
||||
|
||||
Here are some worth-mentioning configuration targets.
|
||||
|
||||
- silentoldconfig
|
||||
|
||||
silentoldconfig
|
||||
This target updates .config, include/generated/autoconf.h and
|
||||
include/configs/* as in Linux. In U-Boot, it also does the following
|
||||
for the compatibility with the old configuration system:
|
||||
|
@ -33,31 +33,26 @@ Here are some worth-mentioning configuration targets.
|
|||
* create tpl/include/autoconf.mk (TPL only)
|
||||
|
||||
If we could completely switch to Kconfig in a long run
|
||||
(i.e. remove all the include/configs/*.h), those additional processings
|
||||
(i.e. remove all the include/configs/\*.h), those additional processings
|
||||
above would be removed.
|
||||
|
||||
- defconfig
|
||||
|
||||
defconfig
|
||||
In U-Boot, "make defconfig" is a shorthand of "make sandbox_defconfig"
|
||||
|
||||
- <board>_defconfig
|
||||
|
||||
<board>_defconfig
|
||||
Now it works as in Linux.
|
||||
The prefixes such as "+S:" in *_defconfig are deprecated.
|
||||
The prefixes such as "+S:" in \*_defconfig are deprecated.
|
||||
You can simply remove the prefixes. Do not add them for new boards.
|
||||
|
||||
- <board>_config
|
||||
|
||||
<board>_config
|
||||
This does not exist in Linux's Kconfig.
|
||||
"make <board>_config" works the same as "make <board>_defconfig".
|
||||
Prior to Kconfig, in U-Boot, "make <board>_config" was used for the
|
||||
configuration. It is still supported for backward compatibility, so
|
||||
we do not need to update the distro recipes.
|
||||
|
||||
|
||||
The other configuration targets work as in Linux Kernel.
|
||||
|
||||
|
||||
Migration steps to Kconfig
|
||||
--------------------------
|
||||
|
||||
|
@ -84,68 +79,79 @@ Configuration file for use in makefiles
|
|||
When adding a new CONFIG macro, it is highly recommended to add it to Kconfig
|
||||
rather than to a header file.
|
||||
|
||||
|
||||
Conversion from boards.cfg to Kconfig
|
||||
-------------------------------------
|
||||
|
||||
Prior to Kconfig, boards.cfg was a primary database that contained Arch, CPU,
|
||||
SoC, etc. of all the supported boards. It was deleted when switching to
|
||||
Kconfig. Each field of boards.cfg was converted as follows:
|
||||
|
||||
Status -> "S:" entry of MAINTAINERS
|
||||
Arch -> CONFIG_SYS_ARCH defined by Kconfig
|
||||
CPU -> CONFIG_SYS_CPU defined by Kconfig
|
||||
SoC -> CONFIG_SYS_SOC defined by Kconfig
|
||||
Vendor -> CONFIG_SYS_VENDOR defined by Kconfig
|
||||
Board -> CONFIG_SYS_BOARD defined by Kconfig
|
||||
Target -> File name of defconfig (configs/<target>_defconfig)
|
||||
Maintainers -> "M:" entry of MAINTAINERS
|
||||
SoC, etc. of all the supported boards. It was deleted when switching to
|
||||
Kconfig. Each field of boards.cfg was converted as follows:
|
||||
|
||||
=========== ====================================================
|
||||
From To
|
||||
=========== ====================================================
|
||||
Arch CONFIG_SYS_ARCH defined by Kconfig
|
||||
Board CONFIG_SYS_BOARD defined by Kconfig
|
||||
CPU CONFIG_SYS_CPU defined by Kconfig
|
||||
Maintainers "M:" entry of MAINTAINERS
|
||||
SoC CONFIG_SYS_SOC defined by Kconfig
|
||||
Status "S:" entry of MAINTAINERS
|
||||
Target File name of defconfig (configs/<target>\_defconfig)
|
||||
Vendor CONFIG_SYS_VENDOR defined by Kconfig
|
||||
=========== ====================================================
|
||||
|
||||
Tips to add/remove boards
|
||||
-------------------------
|
||||
|
||||
When adding a new board, the following steps are generally needed:
|
||||
|
||||
[1] Add a header file include/configs/<target>.h
|
||||
[2] Make sure to define necessary CONFIG_SYS_* in Kconfig:
|
||||
Define CONFIG_SYS_CPU="cpu" to compile arch/<arch>/cpu/<cpu>
|
||||
Define CONFIG_SYS_SOC="soc" to compile arch/<arch>/cpu/<cpu>/<soc>
|
||||
Define CONFIG_SYS_VENDOR="vendor" to compile board/<vendor>/common/*
|
||||
and board/<vendor>/<board>/*
|
||||
Define CONFIG_SYS_BOARD="board" to compile board/<board>/*
|
||||
(or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined)
|
||||
Define CONFIG_SYS_CONFIG_NAME="target" to include
|
||||
include/configs/<target>.h
|
||||
[3] Add a new entry to the board select menu in Kconfig.
|
||||
The board select menu is located in arch/<arch>/Kconfig or
|
||||
arch/<arch>/*/Kconfig.
|
||||
[4] Add a MAINTAINERS file
|
||||
It is generally placed at board/<board>/MAINTAINERS or
|
||||
board/<vendor>/<board>/MAINTAINERS
|
||||
[5] Add configs/<target>_defconfig
|
||||
1. Add a header file include/configs/<target>.h
|
||||
|
||||
2. Make sure to define necessary CONFIG_SYS_* in Kconfig:
|
||||
|
||||
* Define CONFIG_SYS_CPU="cpu" to compile arch/<arch>/cpu/<cpu>
|
||||
* Define CONFIG_SYS_SOC="soc" to compile arch/<arch>/cpu/<cpu>/<soc>
|
||||
* Define CONFIG_SYS_VENDOR="vendor" to compile board/<vendor>/common/\*
|
||||
and board/<vendor>/<board>/\*
|
||||
* Define CONFIG_SYS_BOARD="board" to compile board/<board>/\*
|
||||
(or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined)
|
||||
Define CONFIG_SYS_CONFIG_NAME="target" to include
|
||||
include/configs/<target>.h
|
||||
|
||||
3. Add a new entry to the board select menu in Kconfig.
|
||||
The board select menu is located in arch/<arch>/Kconfig or
|
||||
arch/<arch>/\*/Kconfig.
|
||||
|
||||
4. Add a MAINTAINERS file
|
||||
It is generally placed at board/<board>/MAINTAINERS or
|
||||
board/<vendor>/<board>/MAINTAINERS
|
||||
|
||||
5. Add configs/<target>_defconfig
|
||||
|
||||
When removing an obsolete board, the following steps are generally needed:
|
||||
|
||||
[1] Remove configs/<target>_defconfig
|
||||
[2] Remove include/configs/<target>.h if it is not used by any other boards
|
||||
[3] Remove board/<vendor>/<board>/* or board/<board>/* if it is not used
|
||||
by any other boards
|
||||
[4] Update MAINTAINERS if necessary
|
||||
[5] Remove the unused entry from the board select menu in Kconfig
|
||||
[6] Add an entry to doc/README.scrapyard
|
||||
1. Remove configs/<target>_defconfig
|
||||
|
||||
2. Remove include/configs/<target>.h if it is not used by any other boards
|
||||
|
||||
3. Remove board/<vendor>/<board>/\* or board/<board>/\* if it is not used
|
||||
by any other boards
|
||||
|
||||
4. Update MAINTAINERS if necessary
|
||||
|
||||
5. Remove the unused entry from the board select menu in Kconfig
|
||||
|
||||
6. Add an entry to doc/README.scrapyard
|
||||
|
||||
TODO
|
||||
----
|
||||
|
||||
- In the pre-Kconfig, a single board had multiple entries in the boards.cfg
|
||||
file with differences in the option fields. The corresponding defconfig
|
||||
files were auto-generated when switching to Kconfig. Now we have too many
|
||||
defconfig files compared with the number of the supported boards. It is
|
||||
* In the pre-Kconfig, a single board had multiple entries in the boards.cfg
|
||||
file with differences in the option fields. The corresponding defconfig
|
||||
files were auto-generated when switching to Kconfig. Now we have too many
|
||||
defconfig files compared with the number of the supported boards. It is
|
||||
recommended to have only one defconfig per board and allow users to select
|
||||
the config options.
|
||||
|
||||
- Move the config macros in header files to Kconfig. When we move at least
|
||||
* Move the config macros in header files to Kconfig. When we move at least
|
||||
macros used in makefiles, we can drop include/autoconfig.mk, which makes
|
||||
the build scripts much simpler.
|
|
@ -11,29 +11,54 @@ Synopsis
|
|||
|
||||
::
|
||||
|
||||
wget address [[hostIPaddr:]path]
|
||||
wget [address] [host:]path
|
||||
wget [address] url # lwIP only
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The wget command is used to download a file from an HTTP server.
|
||||
The wget command is used to download a file from an HTTP(S) server.
|
||||
In order to use HTTPS you will need to compile wget with lwIP support.
|
||||
|
||||
Legacy syntax
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The legacy syntax is supported by the legacy network stack (CONFIG_NET=y)
|
||||
as well as by the lwIP base network stack (CONFIG_NET_LWIP=y). It supports HTTP
|
||||
only.
|
||||
|
||||
wget command will use HTTP over TCP to download files from an HTTP server.
|
||||
By default the destination port is 80 and the source port is pseudo-random.
|
||||
The environment variable *httpdstp* can be used to set the destination port.
|
||||
On the legacy nework stack the environment variable *httpdstp* can be used to
|
||||
set the destination port
|
||||
|
||||
address
|
||||
memory address for the data downloaded
|
||||
|
||||
hostIPaddr
|
||||
IP address of the HTTP server, defaults to the value of environment
|
||||
variable *serverip*
|
||||
host
|
||||
IP address (or host name if `CONFIG_CMD_DNS` is enabled) of the HTTP
|
||||
server, defaults to the value of environment variable *serverip*.
|
||||
|
||||
path
|
||||
path of the file to be downloaded.
|
||||
|
||||
Example
|
||||
-------
|
||||
New syntax (lwIP only)
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In addition to the syntax described above, wget accepts URLs if the network
|
||||
stack is lwIP.
|
||||
|
||||
address
|
||||
memory address for the data downloaded
|
||||
|
||||
url
|
||||
HTTP or HTTPS URL, that is: http[s]://<host>[:<port>]/<path>.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
Example with the legacy network stack
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the example the following steps are executed:
|
||||
|
||||
|
@ -52,13 +77,42 @@ In the example the following steps are executed:
|
|||
HTTP/1.0 302 Found
|
||||
Packets received 4, Transfer Successful
|
||||
|
||||
Example with lwIP
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the example the following steps are executed:
|
||||
|
||||
* setup client network address
|
||||
* download a file from the HTTPS server
|
||||
|
||||
::
|
||||
|
||||
=> dhcp
|
||||
DHCP client bound to address 10.0.2.15 (3 ms)
|
||||
=> wget https://download.rockylinux.org/pub/rocky/9/isos/aarch64/Rocky-9.4-aarch64-minimal.iso
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
[...]
|
||||
1694892032 bytes transferred in 492181 ms (3.3 MiB/s)
|
||||
Bytes transferred = 1694892032 (65060000 hex)
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
The command is only available if CONFIG_CMD_WGET=y.
|
||||
To enable lwIP support set CONFIG_NET_LWIP=y.
|
||||
|
||||
TCP Selective Acknowledgments can be enabled via CONFIG_PROT_TCP_SACK=y.
|
||||
This will improve the download speed.
|
||||
TCP Selective Acknowledgments in the legacy network stack can be enabled via
|
||||
CONFIG_PROT_TCP_SACK=y. This will improve the download speed. Selective
|
||||
Acknowledgments are enabled by default with lwIP.
|
||||
|
||||
.. note::
|
||||
|
||||
U-Boot currently has no way to verify certificates for HTTPS.
|
||||
A place to store the root CA certificates is needed, and then MBed TLS would
|
||||
need to walk the entire chain. Therefore, man-in-the middle attacks are
|
||||
possible and HTTPS should not be relied upon for payload authentication.
|
||||
|
||||
Return value
|
||||
------------
|
||||
|
|
|
@ -481,7 +481,6 @@ endmenu
|
|||
menu "Misc options"
|
||||
config EFI_LOADER_BOUNCE_BUFFER
|
||||
bool "EFI Applications use bounce buffers for DMA operations"
|
||||
depends on ARM64
|
||||
help
|
||||
Some hardware does not support DMA to full 64bit addresses. For this
|
||||
hardware we can create a bounce buffer so that payloads don't have to
|
||||
|
|
|
@ -451,7 +451,7 @@ 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;
|
||||
u64 efi_addr, len;
|
||||
uint flags;
|
||||
efi_status_t ret;
|
||||
phys_addr_t addr;
|
||||
|
@ -499,14 +499,17 @@ efi_status_t efi_allocate_pages(enum efi_allocate_type type,
|
|||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
addr = (u64)(uintptr_t)map_sysmem(addr, 0);
|
||||
efi_addr = (u64)(uintptr_t)map_sysmem(addr, 0);
|
||||
/* Reserve that map in our memory maps */
|
||||
ret = efi_add_memory_map_pg(addr, pages, memory_type, true);
|
||||
if (ret != EFI_SUCCESS)
|
||||
ret = efi_add_memory_map_pg(efi_addr, pages, memory_type, true);
|
||||
if (ret != EFI_SUCCESS) {
|
||||
/* Map would overlap, bail out */
|
||||
lmb_free_flags(addr, (u64)pages << EFI_PAGE_SHIFT, flags);
|
||||
unmap_sysmem((void *)(uintptr_t)efi_addr);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
*memory = addr;
|
||||
*memory = efi_addr;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@ -546,6 +549,8 @@ efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t pages)
|
|||
if (status)
|
||||
return EFI_NOT_FOUND;
|
||||
|
||||
unmap_sysmem((void *)(uintptr_t)memory);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -607,12 +607,9 @@ efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,
|
|||
* Format"
|
||||
*/
|
||||
if (flags & PE_COFF_IMAGE) {
|
||||
IMAGE_NT_HEADERS32 *nt;
|
||||
|
||||
ret = efi_check_pe((void *)(uintptr_t)data_to_hash,
|
||||
data_to_hash_len, (void **)&nt);
|
||||
data_to_hash_len, NULL);
|
||||
if (ret != EFI_SUCCESS) {
|
||||
log_err("Not a valid PE-COFF file\n");
|
||||
ret = EFI_UNSUPPORTED;
|
||||
goto out;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue