mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-15 19:51:37 +00:00
efi_loader: Drop code that doesn't work with driver model
This code should never have been added as it builds a new feature on top of legacy code. This has already been improved with the dependency on BLK. Add a dependency on DM_ETH also, to avoid needing to deal with this old code. Boards which want EFI_LOADER should migrate to driver model first. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
4488dbe12e
commit
eac6e0b797
4 changed files with 22 additions and 123 deletions
|
@ -6,6 +6,6 @@
|
|||
# object inclusion implicitly depends on it
|
||||
|
||||
obj-y += efi_uclass.o
|
||||
ifeq ($(CONFIG_BLK)$(CONFIG_PARTITIONS),yy)
|
||||
ifeq ($(CONFIG_PARTITIONS),y)
|
||||
obj-y += efi_block_device.o
|
||||
endif
|
||||
|
|
|
@ -11,6 +11,7 @@ config EFI_LOADER
|
|||
# We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB
|
||||
depends on !EFI_STUB || !X86 || X86_64 || EFI_STUB_32BIT
|
||||
depends on BLK
|
||||
depends on DM_ETH || !NET
|
||||
default y if !ARM || SYS_CPU = armv7 || SYS_CPU = armv8
|
||||
select LIB_UUID
|
||||
select PARTITION_UUIDS
|
||||
|
|
|
@ -46,7 +46,7 @@ static const struct efi_device_path_vendor ROOT = {
|
|||
.guid = U_BOOT_GUID,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
|
||||
#if defined(CONFIG_MMC)
|
||||
/*
|
||||
* Determine if an MMC device is an SD card.
|
||||
*
|
||||
|
@ -486,7 +486,6 @@ bool efi_dp_is_multi_instance(const struct efi_device_path *dp)
|
|||
return p->sub_type == DEVICE_PATH_SUB_TYPE_INSTANCE_END;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM
|
||||
/* size of device-path not including END node for device and all parents
|
||||
* up to the root device.
|
||||
*/
|
||||
|
@ -503,7 +502,6 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
|
|||
case UCLASS_ETH:
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_mac_addr);
|
||||
#ifdef CONFIG_BLK
|
||||
case UCLASS_BLK:
|
||||
switch (dev->parent->uclass->uc_drv->id) {
|
||||
#ifdef CONFIG_IDE
|
||||
|
@ -511,12 +509,12 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
|
|||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_atapi);
|
||||
#endif
|
||||
#if defined(CONFIG_SCSI) && defined(CONFIG_DM_SCSI)
|
||||
#if defined(CONFIG_SCSI)
|
||||
case UCLASS_SCSI:
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_scsi);
|
||||
#endif
|
||||
#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
|
||||
#if defined(CONFIG_MMC)
|
||||
case UCLASS_MMC:
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_sd_mmc_path);
|
||||
|
@ -554,8 +552,7 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
|
|||
default:
|
||||
return dp_size(dev->parent);
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
|
||||
#if defined(CONFIG_MMC)
|
||||
case UCLASS_MMC:
|
||||
return dp_size(dev->parent) +
|
||||
sizeof(struct efi_device_path_sd_mmc_path);
|
||||
|
@ -590,7 +587,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
*vdp = ROOT;
|
||||
return &vdp[1];
|
||||
}
|
||||
#ifdef CONFIG_DM_ETH
|
||||
#ifdef CONFIG_NET
|
||||
case UCLASS_ETH: {
|
||||
struct efi_device_path_mac_addr *dp =
|
||||
dp_fill(buf, dev->parent);
|
||||
|
@ -607,7 +604,6 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
return &dp[1];
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_BLK
|
||||
case UCLASS_BLK:
|
||||
switch (dev->parent->uclass->uc_drv->id) {
|
||||
#ifdef CONFIG_SANDBOX
|
||||
|
@ -662,7 +658,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
return &dp[1];
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_SCSI) && defined(CONFIG_DM_SCSI)
|
||||
#if defined(CONFIG_SCSI)
|
||||
case UCLASS_SCSI: {
|
||||
struct efi_device_path_scsi *dp =
|
||||
dp_fill(buf, dev->parent);
|
||||
|
@ -676,7 +672,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
return &dp[1];
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
|
||||
#if defined(CONFIG_MMC)
|
||||
case UCLASS_MMC: {
|
||||
struct efi_device_path_sd_mmc_path *sddp =
|
||||
dp_fill(buf, dev->parent);
|
||||
|
@ -727,8 +723,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
dev->name, dev->parent->uclass->uc_drv->id);
|
||||
return dp_fill(buf, dev->parent);
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
|
||||
#if defined(CONFIG_MMC)
|
||||
case UCLASS_MMC: {
|
||||
struct efi_device_path_sd_mmc_path *sddp =
|
||||
dp_fill(buf, dev->parent);
|
||||
|
@ -770,24 +765,18 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
|
|||
return dp_fill(buf, dev->parent);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static unsigned dp_part_size(struct blk_desc *desc, int part)
|
||||
{
|
||||
unsigned dpsize;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
#ifdef CONFIG_BLK
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret = blk_find_device(desc->if_type, desc->devnum, &dev);
|
||||
ret = blk_find_device(desc->if_type, desc->devnum, &dev);
|
||||
|
||||
if (ret)
|
||||
dev = desc->bdev->parent;
|
||||
dpsize = dp_size(dev);
|
||||
}
|
||||
#else
|
||||
dpsize = sizeof(ROOT) + sizeof(struct efi_device_path_usb);
|
||||
#endif
|
||||
if (ret)
|
||||
dev = desc->bdev->parent;
|
||||
dpsize = dp_size(dev);
|
||||
|
||||
if (part == 0) /* the actual disk, not a partition */
|
||||
return dpsize;
|
||||
|
@ -877,36 +866,14 @@ static void *dp_part_node(void *buf, struct blk_desc *desc, int part)
|
|||
*/
|
||||
static void *dp_part_fill(void *buf, struct blk_desc *desc, int part)
|
||||
{
|
||||
#ifdef CONFIG_BLK
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret = blk_find_device(desc->if_type, desc->devnum, &dev);
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
if (ret)
|
||||
dev = desc->bdev->parent;
|
||||
buf = dp_fill(buf, dev);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* We *could* make a more accurate path, by looking at if_type
|
||||
* and handling all the different cases like we do for non-
|
||||
* legacy (i.e. CONFIG_BLK=y) case. But most important thing
|
||||
* is just to have a unique device-path for if_type+devnum.
|
||||
* So map things to a fictitious USB device.
|
||||
*/
|
||||
struct efi_device_path_usb *udp;
|
||||
ret = blk_find_device(desc->if_type, desc->devnum, &dev);
|
||||
|
||||
memcpy(buf, &ROOT, sizeof(ROOT));
|
||||
buf += sizeof(ROOT);
|
||||
|
||||
udp = buf;
|
||||
udp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
|
||||
udp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_USB;
|
||||
udp->dp.length = sizeof(*udp);
|
||||
udp->parent_port_number = desc->if_type;
|
||||
udp->usb_interface = desc->devnum;
|
||||
buf = &udp[1];
|
||||
#endif
|
||||
if (ret)
|
||||
dev = desc->bdev->parent;
|
||||
buf = dp_fill(buf, dev);
|
||||
|
||||
if (part == 0) /* the actual disk, not a partition */
|
||||
return buf;
|
||||
|
@ -1051,39 +1018,18 @@ struct efi_device_path *efi_dp_from_uart(void)
|
|||
#ifdef CONFIG_NET
|
||||
struct efi_device_path *efi_dp_from_eth(void)
|
||||
{
|
||||
#ifndef CONFIG_DM_ETH
|
||||
struct efi_device_path_mac_addr *ndp;
|
||||
#endif
|
||||
void *buf, *start;
|
||||
unsigned dpsize = 0;
|
||||
|
||||
assert(eth_get_dev());
|
||||
|
||||
#ifdef CONFIG_DM_ETH
|
||||
dpsize += dp_size(eth_get_dev());
|
||||
#else
|
||||
dpsize += sizeof(ROOT);
|
||||
dpsize += sizeof(*ndp);
|
||||
#endif
|
||||
|
||||
start = buf = dp_alloc(dpsize + sizeof(END));
|
||||
if (!buf)
|
||||
return NULL;
|
||||
|
||||
#ifdef CONFIG_DM_ETH
|
||||
buf = dp_fill(buf, eth_get_dev());
|
||||
#else
|
||||
memcpy(buf, &ROOT, sizeof(ROOT));
|
||||
buf += sizeof(ROOT);
|
||||
|
||||
ndp = buf;
|
||||
ndp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
|
||||
ndp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR;
|
||||
ndp->dp.length = sizeof(*ndp);
|
||||
ndp->if_type = 1; /* Ethernet */
|
||||
memcpy(ndp->mac.addr, eth_get_ethaddr(), ARP_HLEN);
|
||||
buf = &ndp[1];
|
||||
#endif
|
||||
|
||||
*((struct efi_device_path *)buf) = END;
|
||||
|
||||
|
|
|
@ -555,7 +555,6 @@ efi_status_t efi_disk_register(void)
|
|||
struct efi_disk_obj *disk;
|
||||
int disks = 0;
|
||||
efi_status_t ret;
|
||||
#ifdef CONFIG_BLK
|
||||
struct udevice *dev;
|
||||
|
||||
for (uclass_first_device_check(UCLASS_BLK, &dev); dev;
|
||||
|
@ -583,54 +582,7 @@ efi_status_t efi_disk_register(void)
|
|||
&disk->header, desc, if_typename,
|
||||
desc->devnum, dev->name);
|
||||
}
|
||||
#else
|
||||
int i, if_type;
|
||||
|
||||
/* Search for all available disk devices */
|
||||
for (if_type = 0; if_type < IF_TYPE_COUNT; if_type++) {
|
||||
const struct blk_driver *cur_drvr;
|
||||
const char *if_typename;
|
||||
|
||||
cur_drvr = blk_driver_lookup_type(if_type);
|
||||
if (!cur_drvr)
|
||||
continue;
|
||||
|
||||
if_typename = cur_drvr->if_typename;
|
||||
log_info("Scanning disks on %s...\n", if_typename);
|
||||
for (i = 0; i < 4; i++) {
|
||||
struct blk_desc *desc;
|
||||
char devname[32] = { 0 }; /* dp->str is u16[32] long */
|
||||
|
||||
desc = blk_get_devnum_by_type(if_type, i);
|
||||
if (!desc)
|
||||
continue;
|
||||
if (desc->type == DEV_TYPE_UNKNOWN)
|
||||
continue;
|
||||
|
||||
snprintf(devname, sizeof(devname), "%s%d",
|
||||
if_typename, i);
|
||||
|
||||
/* Add block device for the full device */
|
||||
ret = efi_disk_add_dev(NULL, NULL, if_typename, desc,
|
||||
i, NULL, 0, &disk);
|
||||
if (ret == EFI_NOT_READY) {
|
||||
log_notice("Disk %s not ready\n", devname);
|
||||
continue;
|
||||
}
|
||||
if (ret) {
|
||||
log_err("ERROR: failure to add disk device %s, r = %lu\n",
|
||||
devname, ret & ~EFI_ERROR_MASK);
|
||||
return ret;
|
||||
}
|
||||
disks++;
|
||||
|
||||
/* Partitions show up as block devices in EFI */
|
||||
disks += efi_disk_create_partitions
|
||||
(&disk->header, desc,
|
||||
if_typename, i, devname);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
log_info("Found %d disks\n", disks);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
|
Loading…
Add table
Reference in a new issue