mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-24 06:24:17 +00:00
Pull request for efi-2022-10-rc3-2
Documentation: * improve description of device probing * describe booting RISC-V with KVM and QEMU UEFI * fix Makefile for mkeficapsule -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEbcT5xx8ppvoGt20zxIHbvCwFGsQFAmMA7kkACgkQxIHbvCwF GsQFMw/+JRliitarcCmpkncB7axSwFiGNwm+27+SFl6wwoU+f57Arq2GYsQGWx+H GCnlKNKiPZf1L4aSFG8lueyHs9XK5megHPhL9VtYmQb7gBfNpRQDVW9lKwf4NZOS IkBur1GF79z/wCFermqZ3ozsKEQuh0OzhQ20nsz4GwQIeXpjdACmnqcY4zKEnZYG /aWiP172t2aomTADorNSn3sGqEd3nwPeTUq60uasBz9IGUKR+8rzr8NAfUVotKM5 f2vuRSq85cthls6KBy1+w+k5HDhiS44yutQVol6ZSr4pn8cvkWYagv+L6Otnz/CE NhSyzk22AHzAiz0S44Yjj+4+YM4Qpcoa4zimAqohyrL0SwiZtSlWNBwSlr29vPmb pR4ckrBVCTZQh/ngKHApfqj/Nk7Y2GnydCvdaPW0BEoMVGevTF31JxHJuvmft+yl X9f82fhW/EdiaK/PfQ9Bkp7Ut3ikQQqVgSxRx5ToDXQ3rhfpsswy7WwKn0GPmAzt byQKD68I6YOSwktj8pgtNeORK84itucAtF+KGkhgZxNVokcJRvBs1ZdHnXC4Nb6k gvNFciKnP3arDe5EFyjtiU8WVaBjM+CRH6oOVbjA+26beIg5+jvxznE/CJCcpS7l oJuB6bDg9/AUReZwZYAwQVfTuY1sMpcw3Sf7FTTmo30SfCna2BY= =Fu1m -----END PGP SIGNATURE----- Merge tag 'efi-2022-10-rc3-2' of https://source.denx.de/u-boot/custodians/u-boot-efi Pull request for efi-2022-10-rc3-2 Documentation: * improve description of device probing * describe booting RISC-V with KVM and QEMU UEFI * fix Makefile for mkeficapsule
This commit is contained in:
commit
e9a4a176de
4 changed files with 54 additions and 27 deletions
|
@ -133,6 +133,19 @@ An attached disk can be emulated in RISC-V virt machine by adding::
|
||||||
|
|
||||||
You will have to run 'scsi scan' to use it.
|
You will have to run 'scsi scan' to use it.
|
||||||
|
|
||||||
|
Running with KVM
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Running with QEMU using KVM requires an S-mode U-Boot binary as created by
|
||||||
|
qemu-riscv64_smode_defconfig.
|
||||||
|
|
||||||
|
Provide the U-Boot S-mode ELF image as *-kernel* parameter and do not add a
|
||||||
|
*-bios* parameter, e.g.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
qemu-system-riscv64 -accel kvm -nographic -machine virt -kernel u-boot
|
||||||
|
|
||||||
Debug UART
|
Debug UART
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|
|
@ -794,8 +794,27 @@ fall afoul of this rule.
|
||||||
Activation/probe
|
Activation/probe
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
When a device needs to be used, U-Boot activates it, by first reading ofdata
|
To save resources devices in U-Boot are probed lazily. U-Boot is a bootloader,
|
||||||
as above and then following these steps (see device_probe()):
|
not an operating system. Many devices are never used during an U-Boot run, and
|
||||||
|
probing them takes time, requires memory, may add delays to the main loop, etc.
|
||||||
|
|
||||||
|
The device should be probed by the uclass code or generic device code (e.g.
|
||||||
|
device_find_global_by_ofnode()). Uclasses differ but two common use cases can be
|
||||||
|
seen:
|
||||||
|
|
||||||
|
1. The uclass is asked to look up a specific device, such as SPI bus 0,
|
||||||
|
first chip select - in this case the returned device should be
|
||||||
|
activated.
|
||||||
|
|
||||||
|
2. The uclass is asked to perform a specific function on any device that
|
||||||
|
supports it, eg. reset the board using any sysreset that can be found -
|
||||||
|
for this case the core uclass code provides iterators that activate
|
||||||
|
each device before returning it, and the uclass typically implements a
|
||||||
|
walk function that iterates over all devices of the uclass and tries
|
||||||
|
to perform the requested function on each in turn until succesful.
|
||||||
|
|
||||||
|
To activate a device U-Boot first reads ofdata as above and then follows these
|
||||||
|
steps (see device_probe()):
|
||||||
|
|
||||||
1. All parent devices are probed. It is not possible to activate a device
|
1. All parent devices are probed. It is not possible to activate a device
|
||||||
unless its predecessors (all the way up to the root device) are activated.
|
unless its predecessors (all the way up to the root device) are activated.
|
||||||
|
|
|
@ -29,7 +29,6 @@ const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID;
|
||||||
*
|
*
|
||||||
* @header: EFI object header
|
* @header: EFI object header
|
||||||
* @ops: EFI disk I/O protocol interface
|
* @ops: EFI disk I/O protocol interface
|
||||||
* @ifname: interface name for block device
|
|
||||||
* @dev_index: device index of block device
|
* @dev_index: device index of block device
|
||||||
* @media: block I/O media information
|
* @media: block I/O media information
|
||||||
* @dp: device path to the block device
|
* @dp: device path to the block device
|
||||||
|
@ -40,7 +39,6 @@ const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID;
|
||||||
struct efi_disk_obj {
|
struct efi_disk_obj {
|
||||||
struct efi_object header;
|
struct efi_object header;
|
||||||
struct efi_block_io ops;
|
struct efi_block_io ops;
|
||||||
const char *ifname;
|
|
||||||
int dev_index;
|
int dev_index;
|
||||||
struct efi_block_io_media media;
|
struct efi_block_io_media media;
|
||||||
struct efi_device_path *dp;
|
struct efi_device_path *dp;
|
||||||
|
@ -379,7 +377,6 @@ static int efi_fs_exists(struct blk_desc *desc, int part)
|
||||||
*
|
*
|
||||||
* @parent: parent handle
|
* @parent: parent handle
|
||||||
* @dp_parent: parent device path
|
* @dp_parent: parent device path
|
||||||
* @if_typename: interface name for block device
|
|
||||||
* @desc: internal block device
|
* @desc: internal block device
|
||||||
* @dev_index: device index for block device
|
* @dev_index: device index for block device
|
||||||
* @part_info: partition info
|
* @part_info: partition info
|
||||||
|
@ -390,7 +387,6 @@ static int efi_fs_exists(struct blk_desc *desc, int part)
|
||||||
static efi_status_t efi_disk_add_dev(
|
static efi_status_t efi_disk_add_dev(
|
||||||
efi_handle_t parent,
|
efi_handle_t parent,
|
||||||
struct efi_device_path *dp_parent,
|
struct efi_device_path *dp_parent,
|
||||||
const char *if_typename,
|
|
||||||
struct blk_desc *desc,
|
struct blk_desc *desc,
|
||||||
int dev_index,
|
int dev_index,
|
||||||
struct disk_partition *part_info,
|
struct disk_partition *part_info,
|
||||||
|
@ -475,7 +471,6 @@ static efi_status_t efi_disk_add_dev(
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
diskobj->ops = block_io_disk_template;
|
diskobj->ops = block_io_disk_template;
|
||||||
diskobj->ifname = if_typename;
|
|
||||||
diskobj->dev_index = dev_index;
|
diskobj->dev_index = dev_index;
|
||||||
|
|
||||||
/* Fill in EFI IO Media info (for read/write callbacks) */
|
/* Fill in EFI IO Media info (for read/write callbacks) */
|
||||||
|
@ -533,15 +528,13 @@ static int efi_disk_create_raw(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct efi_disk_obj *disk;
|
struct efi_disk_obj *disk;
|
||||||
struct blk_desc *desc;
|
struct blk_desc *desc;
|
||||||
const char *if_typename;
|
|
||||||
int diskid;
|
int diskid;
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
desc = dev_get_uclass_plat(dev);
|
desc = dev_get_uclass_plat(dev);
|
||||||
if_typename = blk_get_if_type_name(desc->if_type);
|
|
||||||
diskid = desc->devnum;
|
diskid = desc->devnum;
|
||||||
|
|
||||||
ret = efi_disk_add_dev(NULL, NULL, if_typename, desc,
|
ret = efi_disk_add_dev(NULL, NULL, desc,
|
||||||
diskid, NULL, 0, &disk);
|
diskid, NULL, 0, &disk);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
if (ret == EFI_NOT_READY)
|
if (ret == EFI_NOT_READY)
|
||||||
|
@ -575,7 +568,6 @@ static int efi_disk_create_part(struct udevice *dev)
|
||||||
{
|
{
|
||||||
efi_handle_t parent;
|
efi_handle_t parent;
|
||||||
struct blk_desc *desc;
|
struct blk_desc *desc;
|
||||||
const char *if_typename;
|
|
||||||
struct disk_part *part_data;
|
struct disk_part *part_data;
|
||||||
struct disk_partition *info;
|
struct disk_partition *info;
|
||||||
unsigned int part;
|
unsigned int part;
|
||||||
|
@ -589,7 +581,6 @@ static int efi_disk_create_part(struct udevice *dev)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
desc = dev_get_uclass_plat(dev_get_parent(dev));
|
desc = dev_get_uclass_plat(dev_get_parent(dev));
|
||||||
if_typename = blk_get_if_type_name(desc->if_type);
|
|
||||||
diskid = desc->devnum;
|
diskid = desc->devnum;
|
||||||
|
|
||||||
part_data = dev_get_uclass_plat(dev);
|
part_data = dev_get_uclass_plat(dev);
|
||||||
|
@ -601,7 +592,7 @@ static int efi_disk_create_part(struct udevice *dev)
|
||||||
return -1;
|
return -1;
|
||||||
dp_parent = (struct efi_device_path *)handler->protocol_interface;
|
dp_parent = (struct efi_device_path *)handler->protocol_interface;
|
||||||
|
|
||||||
ret = efi_disk_add_dev(parent, dp_parent, if_typename, desc, diskid,
|
ret = efi_disk_add_dev(parent, dp_parent, desc, diskid,
|
||||||
info, part, &disk);
|
info, part, &disk);
|
||||||
if (ret != EFI_SUCCESS) {
|
if (ret != EFI_SUCCESS) {
|
||||||
log_err("Adding partition for %s failed\n", dev->name);
|
log_err("Adding partition for %s failed\n", dev->name);
|
||||||
|
|
|
@ -245,9 +245,13 @@ hostprogs-$(CONFIG_ASN1_COMPILER) += asn1_compiler
|
||||||
HOSTCFLAGS_asn1_compiler.o = -idirafter $(srctree)/include
|
HOSTCFLAGS_asn1_compiler.o = -idirafter $(srctree)/include
|
||||||
|
|
||||||
HOSTCFLAGS_mkeficapsule.o += \
|
HOSTCFLAGS_mkeficapsule.o += \
|
||||||
$(shell pkg-config --cflags gnutls uuid 2> /dev/null || echo "")
|
$(shell pkg-config --cflags gnutls 2> /dev/null || echo "")
|
||||||
|
HOSTCFLAGS_mkeficapsule.o += \
|
||||||
|
$(shell pkg-config --cflags uuid 2> /dev/null || echo "")
|
||||||
HOSTLDLIBS_mkeficapsule += \
|
HOSTLDLIBS_mkeficapsule += \
|
||||||
$(shell pkg-config --libs gnutls uuid 2> /dev/null || echo "-lgnutls -luuid")
|
$(shell pkg-config --libs gnutls 2> /dev/null || echo "-lgnutls")
|
||||||
|
HOSTLDLIBS_mkeficapsule += \
|
||||||
|
$(shell pkg-config --libs uuid 2> /dev/null || echo "-luuid")
|
||||||
hostprogs-$(CONFIG_TOOLS_MKEFICAPSULE) += mkeficapsule
|
hostprogs-$(CONFIG_TOOLS_MKEFICAPSULE) += mkeficapsule
|
||||||
|
|
||||||
# We build some files with extra pedantic flags to try to minimize things
|
# We build some files with extra pedantic flags to try to minimize things
|
||||||
|
|
Loading…
Add table
Reference in a new issue