[PATCH v4 00/12] efi_loader: more tightly integrate UEFI disks to driver model
AKASHI Takahiro
takahiro.akashi at linaro.org
Fri Apr 15 09:15:34 CEST 2022
With this patch set[1] applied, UEFI subsystem maintains a list of its
disk objects dynamically at runtime based on block device's probing.
(See "issues" and "prerequisite" below.)
[1] https://github.com/t-akashi/u-boot/tree/efi/dm_disk
For instance,
=> dm tree
Class Index Probed Driver Name
-----------------------------------------------------------
root 0 [ + ] root_driver root_driver
...
pci 0 [ + ] pci_generic_ecam |-- pcie at 10000000
...
ahci 0 [ ] ahci_pci | |-- ahci_pci
scsi 0 [ ] ahci_scsi | | `-- ahci_scsi
usb 0 [ ] xhci_pci | `-- xhci_pci
...
=> efi devices
Missing RNG device for EFI_RNG_PROTOCOL
No EFI system partition
Unable to find TPMv2 device
Device Device Path
================ ====================
000000013eee88d0 /VenHw(..)
000000013ffeb798 /VenHw(..)/Uart(0,0,D,D)
000000013eeeb810 /VenHw(..)/MAC(525252525252,1)
=> scsi rescan
...
=> efi devices
Device Device Path
================ ====================
000000013eee88d0 /VenHw(..)
000000013ffeb798 /VenHw(..)/Uart(0,0,D,D)
000000013eeeb810 /VenHw(..)/MAC(525252525252,1)
000000013eefb730 /VenHw(..)/Scsi(0,0)
000000013eefb840 /VenHw(..)/Scsi(0,0)/HD(1,GPT,ce86c5a7-b32a-488f-a346-88fe698e0edc,0x22,0x4c2a)
000000013eefbc80 /VenHw(..)/Scsi(0,0)/HD(2,GPT,aa80aab9-33e6-42b6-b5db-def2cb8d7844,0x5000,0x1a800)
=> usb start
...
=> efi devices
Device Device Path
================ ====================
000000013eee88d0 /VenHw(..)
000000013ffeb798 /VenHw(..)/Uart(0,0,D,D)
000000013eeeb810 /VenHw(..)/MAC(525252525252,1)
000000013eefb730 /VenHw(..)/Scsi(0,0)
000000013eefb840 /VenHw(..)/Scsi(0,0)/HD(1,GPT,ce86c5a7-b32a-488f-a346-88fe698e0edc,0x22,0x4c2a)
000000013eefbc80 /VenHw(..)/Scsi(0,0)/HD(2,GPT,aa80aab9-33e6-42b6-b5db-def2cb8d7844,0x5000,0x1a800)
000000013ef01330 /VenHw(..)/UsbClass(0x0,0x0,0x9,0x0,0x3)/UsbClass(0x46f4,0x1,0x0,0x0,0x0)
000000013ef014b0 /VenHw(..)/UsbClass(0x0,0x0,0x9,0x0,0x3)/UsbClass(0x46f4,0x1,0x0,0x0,0x0)/HD(1,GPT,ce86c5a7-b32a-488f-a346-88fe698e0edc,0x22,0x4c2a)
000000013ef018f0 /VenHw(..)/UsbClass(0x0,0x0,0x9,0x0,0x3)/UsbClass(0x46f4,0x1,0x0,0x0,0x0)/HD(2,GPT,aa80aab9-33e6-42b6-b5db-def2cb8d7844,0x5000,0x1a800)
=> dm tree
...
pci 0 [ + ] pci_generic_ecam |-- pcie at 10000000
...
ahci 0 [ + ] ahci_pci | |-- ahci_pci
scsi 0 [ + ] ahci_scsi | | `-- ahci_scsi
blk 2 [ + ] scsi_blk | | `-- ahci_scsi.id0lun0
partition 0 [ + ] blk_partition | | |-- ahci_scsi.id0lun0:1
partition 1 [ + ] blk_partition | | `-- ahci_scsi.id0lun0:2
usb 0 [ + ] xhci_pci | `-- xhci_pci
usb_hub 0 [ + ] usb_hub | `-- usb_hub
usb_mass_s 0 [ + ] usb_mass_storage | |-- usb_mass_storage
blk 3 [ + ] usb_storage_blk | | `-- usb_mass_storage.lun0
partition 2 [ + ] blk_partition | | |-- usb_mass_storage.lun0:1
partition 3 [ + ] blk_partition | | `-- usb_mass_storage.lun0:2
...
=> usb stop
stopping USB..
=> efi devices
Device Device Path
================ ====================
000000013eee88d0 /VenHw(..)
000000013ffeb798 /VenHw(..)/Uart(0,0,D,D)
000000013eeeb810 /VenHw(..)/MAC(525252525252,1)
000000013eefb730 /VenHw(..)/Scsi(0,0)
000000013eefb840 /VenHw(..)/Scsi(0,0)/HD(1,GPT,ce86c5a7-b32a-488f-a346-88fe698e0edc,0x22,0x4c2a)
000000013eefbc80 /VenHw(..)/Scsi(0,0)/HD(2,GPT,aa80aab9-33e6-42b6-b5db-def2cb8d7844,0x5000,0x1a800)
Issues:
=======
* Some (UEFI-unrelated) UT tests still fail for a unknown reason.
As I reported[2], this might happen due to U-Boot itself or UT framework.
* For removal case, we may need more consideration since removing handles
unconditionally may end up breaking integrity of handles
(as some may still be held and referenced to by a UEFI app).
[2] https://lists.denx.de/pipermail/u-boot/2022-April/481405.html
Prerequisite:
=============
* my patch, "disk: don't compile in partition support for spl/tpl if not
really necessary"[3]
[3] https://lists.denx.de/pipermail/u-boot/2022-April/481531.html
Patchs:
=======
For easy understandings, patches may be categorized into separate groups
of changes.
Patch#1-#3: DM: add a new feature (DM tag)
Patch#4-#10: UEFI: dynamically create/remove efi_disk's for a raw disk
and its partitions
Patch#11-#12: UEFI: use udevice read/write interfaces
Change history:
===============
v4 (Apr, 15, 2022)
* rebased on pre-2022.07-rc1
* removed already-merged patches
* added patch#1 (for better error code)
* merged v3's patch#19 to patch#7 to make bisect work
* split v3's patch#13 into patch#8(create) and patch#10(delete)
* move a function prototype out of "#ifdef CONFIG_PARTITIONS" (patch#4)
* move function prototypes out of "#ifdef CONFIG_PARTITIONS" (patch#11)
v3 (Mar 8, 2022)
* rebased on 2022.04-rc3
* rebased on v2 of Simon's event patch
(hence removed his patch from this patch set)
* fix a spl-build error in mmc_blk_probe() (patch#3)
* fix a build warning in fsl_ata_probe()/sil_pci_probe() (patch#5)
* remove a problematic log message in efi_disk_probe() (patch#14)
v2 (Feb 10, 2022)
* add/revise an error message if device_probe() fails (patch#3,#5)
* fix a build error in sandbox_spl_defconfig (patch#8)
* fix warnings in 'make htmldocs' (patch#8,#9,#18)
* new commit: split efi_init_obj_list() (patch#14)
* new commit: simplify efi_capsule pytest (patch#21)
v1 (Feb 2, 2022)
* rebased on 2022.04-rc1
* drop patches that have already been merged
* modify a tag-range check with "tag >= DM_TAG_COUNT" (patch#9)
* move dmtag_list to GD (global data) (patch#9)
* add function descriptions and a document about DM tag feature (patch#9,10)
* add tests for DM tag support (patch#11)
* change 'depends on EVENT' to 'select EVENT' for EFI_LOADER (patch#14)
* migrate IF_TYPE_EFI to IF_TYPE_EFI_LOADER (patch#18)
RFCv2 (Dec 10, 2021)
* rebased on 2022-rc3
* re-order and merge some related commits into ones
* call device_probe() in MMC (not bind, but) probe hook (patch#5)
* fix a wrong name of variable (patch#7)
* add patch#9
* invoke device_probe() for virtio devices (patch#10)
* add DM event notification (from Simon) (patch#11)
* add DM tag support (patch#12)
* move UCLASS_PARTITION driver under disk/ (patch#13)
* create partition's dp using its parent's. This change is necessary
in particular for 'efi_blk' efi_disk (patch#13)
* modify the code so that we will use new features like tags and
event notification (patch#13,15,16,20)
* rename new functions from blk_read/write() to dev_read/write()
(patch#17,18)
* isolate changes in efi_driver from the rest (in efi_loader) (patch#19)
* drop the previous patch#22 ("efi_selftest: block device: adjust dp
for a test") due to the fix in patch#13
RFC (Nov 16, 2021)
* initial RFC
AKASHI Takahiro (12):
dm: tag: change ENOSPC to ENOMEM
dm: tag: add some document
test: dm: add tests for tag support
dm: disk: add UCLASS_PARTITION
dm: blk: add a device-probe hook for scanning disk partitions
efi_loader: split efi_init_obj_list() into two stages
efi_loader: disk: a helper function to create efi_disk objects from
udevice
efi_loader: disk: not create BLK device for BLK(IF_TYPE_EFI_LOADER)
devices
efi_loader: disk: a helper function to delete efi_disk objects
efi_loader: disk: not delete BLK device for BLK(IF_TYPE_EFI_LOADER)
devices
dm: disk: add read/write interfaces with udevice
efi_loader: disk: use udevice instead of blk_desc
common/board_r.c | 2 +-
common/main.c | 7 +-
disk/Makefile | 3 +
disk/disk-uclass.c | 247 ++++++++++++++++++++++
doc/develop/driver-model/design.rst | 20 ++
drivers/block/blk-uclass.c | 4 +
drivers/core/tag.c | 4 +-
include/dm/uclass-id.h | 1 +
include/efi_loader.h | 6 +-
include/part.h | 17 ++
lib/efi_driver/efi_block_device.c | 34 +--
lib/efi_loader/Kconfig | 3 +
lib/efi_loader/efi_disk.c | 314 +++++++++++++++++++++-------
lib/efi_loader/efi_setup.c | 62 ++++--
test/dm/Makefile | 1 +
test/dm/tag.c | 84 ++++++++
16 files changed, 685 insertions(+), 124 deletions(-)
create mode 100644 disk/disk-uclass.c
create mode 100644 test/dm/tag.c
--
2.33.0
More information about the U-Boot
mailing list