u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
To: Simon Glass <sjg@chromium.org>,
	U-Boot Mailing List <u-boot@lists.denx.de>
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Bin Meng <bmeng.cn@gmail.com>, Tom Rini <trini@konsulko.com>,
	Christian Melki <christian.melki@t2data.com>,
	Alexander Graf <agraf@csgraf.de>
Subject: Re: [PATCH 11/35] RFC: efi: Drop code that doesn't work with driver model
Date: Wed, 8 Sep 2021 19:44:02 +0200	[thread overview]
Message-ID: <e0d58b81-f789-5888-7e22-559b75bc1507@gmx.de> (raw)
In-Reply-To: <20210908073355.11.Id572ddf5eb457096b95d30ae2d8675f539367fe8@changeid>



On 9/8/21 3:33 PM, Simon Glass wrote:
> This code should never have been added as it builds a new feature on top
> of legacy code. Drop it and add a dependency on BLK for this feature.
>
> Boards which want EFI_LOADER should migrate to driver model first.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>

This patch is not related to the rest of the series and the code has a
different maintainer.

So, please, separate it from the series.

Best regards

Heinrich

> ---
>
>   lib/efi_driver/Makefile          |  2 +-
>   lib/efi_loader/Kconfig           |  2 +
>   lib/efi_loader/efi_device_path.c | 96 +++++++-------------------------
>   lib/efi_loader/efi_disk.c        | 48 ----------------
>   4 files changed, 24 insertions(+), 124 deletions(-)
>
> diff --git a/lib/efi_driver/Makefile b/lib/efi_driver/Makefile
> index 83baa1c9a49..f2b6c05cc24 100644
> --- a/lib/efi_driver/Makefile
> +++ b/lib/efi_driver/Makefile
> @@ -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
> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> index dacc3b58810..799aa1a7512 100644
> --- a/lib/efi_loader/Kconfig
> +++ b/lib/efi_loader/Kconfig
> @@ -10,6 +10,8 @@ config EFI_LOADER
>   	depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT
>   	# 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
> diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
> index cbdb466da41..a09090a32e4 100644
> --- a/lib/efi_loader/efi_device_path.c
> +++ b/lib/efi_loader/efi_device_path.c
> @@ -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;
> -
> -	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
> +	ret = blk_find_device(desc->if_type, desc->devnum, &dev);
> +
> +	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;
>
> diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
> index 988907ecb91..ef8b5c88ff9 100644
> --- a/lib/efi_loader/efi_disk.c
> +++ b/lib/efi_loader/efi_disk.c
> @@ -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;
>

  reply	other threads:[~2021-09-08 17:44 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-08 13:33 [PATCH 00/35] efi: Improvements to U-Boot running on top of UEFI Simon Glass
2021-09-08 13:33 ` [PATCH 01/35] x86: Keep symbol information in u-boot ELF file Simon Glass
2021-09-08 13:33 ` [PATCH 02/35] x86: Create a new header for EFI Simon Glass
2021-09-08 17:22   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-09  9:25       ` Heinrich Schuchardt
2021-09-09 19:57         ` Simon Glass
2021-09-08 13:33 ` [PATCH 03/35] x86: Show some EFI info with the bdinfo command Simon Glass
2021-09-08 17:29   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-09  9:29       ` Heinrich Schuchardt
2021-09-09 20:08         ` Simon Glass
2021-09-08 13:33 ` [PATCH 04/35] x86: Tidy up global_data pointer for 64-bit Simon Glass
2021-09-08 17:30   ` Heinrich Schuchardt
2021-09-08 13:33 ` [PATCH 05/35] efi: Add a script for building and testing U-Boot on UEFI Simon Glass
2021-09-08 13:33 ` [PATCH 06/35] x86: Create a 32/64-bit selection for the app Simon Glass
2021-09-08 17:35   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-08 13:33 ` [PATCH 07/35] efi: Create a 64-bit app Simon Glass
2021-09-08 17:37   ` Heinrich Schuchardt
2021-09-08 13:33 ` [PATCH 08/35] x86: Don't duplicate global_ptr in 64-bit EFI app Simon Glass
2021-09-08 13:33 ` [PATCH 09/35] efi: Add a way to obtain boot services in the app Simon Glass
2021-09-08 13:33 ` [PATCH 10/35] efi: Add video support to " Simon Glass
2021-09-08 17:40   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-08 13:33 ` [PATCH 11/35] RFC: efi: Drop code that doesn't work with driver model Simon Glass
2021-09-08 17:44   ` Heinrich Schuchardt [this message]
2021-09-09  8:57     ` Simon Glass
2021-09-09  9:21       ` Heinrich Schuchardt
2021-09-09 19:57         ` Simon Glass
2021-09-09 20:14           ` Tom Rini
2021-09-09 20:15           ` Mark Kettenis
2021-09-09 20:23             ` Tom Rini
2021-09-09 21:45               ` Mark Kettenis
2021-09-09 22:06                 ` Tom Rini
2021-09-24  2:48                 ` Simon Glass
2021-09-24 10:36                   ` Mark Kettenis
2021-09-24 12:32         ` Simon Glass
2021-09-08 13:33 ` [PATCH 12/35] efi: Add EFI uclass for media Simon Glass
2021-09-08 17:50   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-08 13:33 ` [PATCH 13/35] efi: Add a media/block driver for EFI block devices Simon Glass
2021-09-08 17:59   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-09 10:35       ` Heinrich Schuchardt
2021-09-09 19:58         ` Simon Glass
2021-09-08 13:33 ` [PATCH 14/35] efi: Locate all block devices in the app Simon Glass
2021-09-08 18:14   ` Heinrich Schuchardt
2021-09-09  1:11     ` AKASHI Takahiro
2021-09-09 20:09       ` Simon Glass
2021-09-10  0:50         ` AKASHI Takahiro
2021-09-09 20:09     ` Simon Glass
2021-09-08 13:33 ` [PATCH 15/35] patman: Use a ValueError exception if tools.Run() fails Simon Glass
2021-09-08 13:33 ` [PATCH 16/35] binman: Report an error if test files fail to compile Simon Glass
2021-09-08 13:33 ` [PATCH 17/35] binman: Support reading the offset of an ELF-file symbol Simon Glass
2021-09-08 13:33 ` [PATCH 18/35] binman: Allow timeout to occur in the image or its section Simon Glass
2021-09-08 13:33 ` [PATCH 19/35] binman: Tidy up comments on _DoTestFile() Simon Glass
2021-09-08 13:33 ` [PATCH 20/35] binman: Support updating the dtb in an ELF file Simon Glass
2021-09-08 13:33 ` [PATCH 21/35] efi: serial: Support arrow keys Simon Glass
2021-09-08 13:33 ` [PATCH 22/35] bloblist: Move to rST format Simon Glass
2021-09-08 18:18   ` Heinrich Schuchardt
2021-09-08 13:33 ` [PATCH 23/35] bloblist: Support allocating the bloblist Simon Glass
2021-09-08 13:33 ` [PATCH 24/35] x86: Allow booting a kernel from the EFI app Simon Glass
2021-09-08 18:22   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-08 13:33 ` [PATCH 25/35] x86: Don't process the kernel command line unless enabled Simon Glass
2021-09-08 13:33 ` [PATCH 26/35] x86: efi: Add room for the binman definition in the dtb Simon Glass
2021-09-08 13:33 ` [PATCH 27/35] efi: Add comments to struct efi_priv Simon Glass
2021-09-08 13:33 ` [PATCH 28/35] efi: Fix ll_boot_init() operation with the app Simon Glass
2021-09-08 13:33 ` [PATCH 29/35] efi: Add a few comments to the stub Simon Glass
2021-09-08 13:34 ` [PATCH 30/35] efi: Share struct efi_priv between the app and stub code Simon Glass
2021-09-08 13:34 ` [PATCH 31/35] efi: Move exit_boot_services into a function Simon Glass
2021-09-08 13:34 ` [PATCH 32/35] efi: Check for failure when initing the app Simon Glass
2021-09-08 13:34 ` [PATCH 33/35] efi: Mention that efi_info_get() is only used in the stub Simon Glass
2021-09-08 13:34 ` [PATCH 34/35] efi: Show when allocated pages are used Simon Glass
2021-09-08 18:25   ` Heinrich Schuchardt
2021-09-09  8:57     ` Simon Glass
2021-09-09 10:39       ` Heinrich Schuchardt
2021-09-09 19:58         ` Simon Glass
2021-09-08 13:34 ` [PATCH 35/35] efi: Allow easy selection of serial-only operation Simon Glass
2021-09-09 16:29 ` [PATCH 00/35] efi: Improvements to U-Boot running on top of UEFI Bin Meng
2021-09-09 16:34   ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e0d58b81-f789-5888-7e22-559b75bc1507@gmx.de \
    --to=xypron.glpk@gmx.de \
    --cc=agraf@csgraf.de \
    --cc=bmeng.cn@gmail.com \
    --cc=christian.melki@t2data.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).