Further uEFI and DragonBoard fixes
This commit is contained in:
parent
f61ccc7081
commit
00ec183a4d
@ -1,15 +1,7 @@
|
|||||||
From patchwork Tue Jun 20 21:55:24 2017
|
From a74e70ec7f5ffdd9f618e2a8f92f4986256cb5c1 Mon Sep 17 00:00:00 2001
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Subject: [U-Boot,1/2] board/db410c: add missing linker map entries for efi
|
|
||||||
From: Rob Clark <robdclark@gmail.com>
|
From: Rob Clark <robdclark@gmail.com>
|
||||||
X-Patchwork-Id: 778514
|
Date: Tue, 20 Jun 2017 17:50:16 -0400
|
||||||
Message-Id: <20170620215525.10430-1-robdclark@gmail.com>
|
Subject: [PATCH 2/8] board/db410c: add missing linker map entries for efi
|
||||||
To: U-Boot Mailing List <u-boot@lists.denx.de>
|
|
||||||
Cc: Nicolas Dechesne <nicolas.dechesne@linaro.org>,
|
|
||||||
Stephen Boyd <sboyd@codeaurora.org>
|
|
||||||
Date: Tue, 20 Jun 2017 17:55:24 -0400
|
|
||||||
|
|
||||||
Otherwise the loaded image would miss the efi_runtime sections, and fall
|
Otherwise the loaded image would miss the efi_runtime sections, and fall
|
||||||
over hard when grub (for example) tried to call runtime services located
|
over hard when grub (for example) tried to call runtime services located
|
||||||
@ -21,7 +13,7 @@ Signed-off-by: Rob Clark <robdclark@gmail.com>
|
|||||||
1 file changed, 16 insertions(+)
|
1 file changed, 16 insertions(+)
|
||||||
|
|
||||||
diff --git a/board/qualcomm/dragonboard410c/u-boot.lds b/board/qualcomm/dragonboard410c/u-boot.lds
|
diff --git a/board/qualcomm/dragonboard410c/u-boot.lds b/board/qualcomm/dragonboard410c/u-boot.lds
|
||||||
index 6e1c5a8..62ac4d7 100644
|
index 6e1c5a8a67..62ac4d7a60 100644
|
||||||
--- a/board/qualcomm/dragonboard410c/u-boot.lds
|
--- a/board/qualcomm/dragonboard410c/u-boot.lds
|
||||||
+++ b/board/qualcomm/dragonboard410c/u-boot.lds
|
+++ b/board/qualcomm/dragonboard410c/u-boot.lds
|
||||||
@@ -43,6 +43,22 @@ SECTIONS
|
@@ -43,6 +43,22 @@ SECTIONS
|
||||||
@ -47,31 +39,21 @@ index 6e1c5a8..62ac4d7 100644
|
|||||||
.image_copy_end :
|
.image_copy_end :
|
||||||
{
|
{
|
||||||
*(.__image_copy_end)
|
*(.__image_copy_end)
|
||||||
From patchwork Tue Jun 20 21:55:25 2017
|
--
|
||||||
Content-Type: text/plain; charset="utf-8"
|
2.13.0
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
From 9bf27e4adce115e1e6694c8807ad1b6689f9b074 Mon Sep 17 00:00:00 2001
|
||||||
Subject: [U-Boot,2/2] board/db410c: fix fdt address
|
|
||||||
From: Rob Clark <robdclark@gmail.com>
|
From: Rob Clark <robdclark@gmail.com>
|
||||||
X-Patchwork-Id: 778516
|
Date: Tue, 20 Jun 2017 17:52:41 -0400
|
||||||
Message-Id: <20170620215525.10430-2-robdclark@gmail.com>
|
Subject: [PATCH 3/8] board/db410c: fix fdt address
|
||||||
To: U-Boot Mailing List <u-boot@lists.denx.de>
|
|
||||||
Cc: Nicolas Dechesne <nicolas.dechesne@linaro.org>,
|
|
||||||
Stephen Boyd <sboyd@codeaurora.org>
|
|
||||||
Date: Tue, 20 Jun 2017 17:55:25 -0400
|
|
||||||
|
|
||||||
Signed-off-by: Rob Clark <robdclark@gmail.com>
|
Signed-off-by: Rob Clark <robdclark@gmail.com>
|
||||||
---
|
---
|
||||||
Maybe there is a better way to not hardcode this? But at least with
|
|
||||||
the build of lk that I have, the fdt table is at 0x81e00000. I guess
|
|
||||||
there must be a more robust way to do this, since presumably lk when
|
|
||||||
booting the linux kernel directly somehow passes the fdt address.
|
|
||||||
|
|
||||||
include/configs/dragonboard410c.h | 2 +-
|
include/configs/dragonboard410c.h | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/include/configs/dragonboard410c.h b/include/configs/dragonboard410c.h
|
diff --git a/include/configs/dragonboard410c.h b/include/configs/dragonboard410c.h
|
||||||
index 11c842d..3b9932d 100644
|
index 11c842d952..3b9932da8b 100644
|
||||||
--- a/include/configs/dragonboard410c.h
|
--- a/include/configs/dragonboard410c.h
|
||||||
+++ b/include/configs/dragonboard410c.h
|
+++ b/include/configs/dragonboard410c.h
|
||||||
@@ -105,7 +105,7 @@ REFLASH(dragonboard/u-boot.img, 8)\
|
@@ -105,7 +105,7 @@ REFLASH(dragonboard/u-boot.img, 8)\
|
||||||
@ -83,3 +65,31 @@ index 11c842d..3b9932d 100644
|
|||||||
"ramdisk_addr_r=0x84000000\0"\
|
"ramdisk_addr_r=0x84000000\0"\
|
||||||
"scriptaddr=0x90000000\0"\
|
"scriptaddr=0x90000000\0"\
|
||||||
"pxefile_addr_r=0x90100000\0"\
|
"pxefile_addr_r=0x90100000\0"\
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
From 95177af6eb3d7b835bbb467aad2565e4680830a3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rob Clark <robdclark@gmail.com>
|
||||||
|
Date: Wed, 21 Jun 2017 14:21:15 -0400
|
||||||
|
Subject: [PATCH 4/8] WIP: fix usb
|
||||||
|
|
||||||
|
---
|
||||||
|
common/usb_storage.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/common/usb_storage.c b/common/usb_storage.c
|
||||||
|
index 03171f74cb..0e3de9064b 100644
|
||||||
|
--- a/common/usb_storage.c
|
||||||
|
+++ b/common/usb_storage.c
|
||||||
|
@@ -1019,7 +1019,7 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss)
|
||||||
|
if ((srb->sense_buf[2] == 0x02) &&
|
||||||
|
(srb->sense_buf[12] == 0x3a))
|
||||||
|
return -1;
|
||||||
|
- mdelay(100);
|
||||||
|
+ mdelay(250);
|
||||||
|
} while (retries--);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Name: uboot-tools
|
Name: uboot-tools
|
||||||
Version: 2017.05
|
Version: 2017.05
|
||||||
Release: 2%{?candidate:.%{candidate}}%{?dist}
|
Release: 3%{?candidate:.%{candidate}}%{?dist}
|
||||||
Summary: U-Boot utilities
|
Summary: U-Boot utilities
|
||||||
License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+
|
License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+
|
||||||
URL: http://www.denx.de/wiki/U-Boot
|
URL: http://www.denx.de/wiki/U-Boot
|
||||||
@ -246,6 +246,9 @@ cp -p board/warp7/README builds/docs/README.warp7
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 29 2017 Peter Robinson <pbrobinson@fedoraproject.org> 2017.05-3
|
||||||
|
- Further uEFI and DragonBoard fixes
|
||||||
|
|
||||||
* Mon May 29 2017 Peter Robinson <pbrobinson@fedoraproject.org> 2017.05-2
|
* Mon May 29 2017 Peter Robinson <pbrobinson@fedoraproject.org> 2017.05-2
|
||||||
- Spec and build refactoring
|
- Spec and build refactoring
|
||||||
- Add distro-boot support for ClearFog
|
- Add distro-boot support for ClearFog
|
||||||
|
622
uefi-fixes.patch
622
uefi-fixes.patch
@ -1,13 +1,8 @@
|
|||||||
From patchwork Tue Jun 20 21:49:23 2017
|
From dfc84987d97d83c82c99fa2e11ad9ccf3c4ac5f8 Mon Sep 17 00:00:00 2001
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Subject: [U-Boot] dm: core: don't fail to iterate if first one fails to probe
|
|
||||||
From: Rob Clark <robdclark@gmail.com>
|
From: Rob Clark <robdclark@gmail.com>
|
||||||
X-Patchwork-Id: 778515
|
Date: Tue, 20 Jun 2017 14:29:12 -0400
|
||||||
Message-Id: <20170620214923.8564-1-robdclark@gmail.com>
|
Subject: [PATCH 1/8] dm: core: don't fail to iterate if first one fails to
|
||||||
To: U-Boot Mailing List <u-boot@lists.denx.de>
|
probe
|
||||||
Date: Tue, 20 Jun 2017 17:49:23 -0400
|
|
||||||
|
|
||||||
efi_disk_register() would try to iterate all the blk devices. But if
|
efi_disk_register() would try to iterate all the blk devices. But if
|
||||||
the first one in the list failed to probe, uclass_first_device() would
|
the first one in the list failed to probe, uclass_first_device() would
|
||||||
@ -20,7 +15,7 @@ Signed-off-by: Rob Clark <robdclark@gmail.com>
|
|||||||
1 file changed, 21 insertions(+), 3 deletions(-)
|
1 file changed, 21 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
|
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
|
||||||
index 21dc696..c47ff56 100644
|
index 21dc696da3..c47ff5661d 100644
|
||||||
--- a/drivers/core/uclass.c
|
--- a/drivers/core/uclass.c
|
||||||
+++ b/drivers/core/uclass.c
|
+++ b/drivers/core/uclass.c
|
||||||
@@ -458,14 +458,23 @@ int uclass_get_device_by_phandle(enum uclass_id id, struct udevice *parent,
|
@@ -458,14 +458,23 @@ int uclass_get_device_by_phandle(enum uclass_id id, struct udevice *parent,
|
||||||
@ -67,146 +62,549 @@ index 21dc696..c47ff56 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
int uclass_bind_device(struct udevice *dev)
|
int uclass_bind_device(struct udevice *dev)
|
||||||
From patchwork Tue Jun 20 06:35:53 2017
|
--
|
||||||
Content-Type: text/plain; charset="utf-8"
|
2.13.0
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Subject: [U-Boot,v2] efi: Export mbr partition for EFI.
|
|
||||||
From: Emmanuel Vadot <manu@bidouilliste.com>
|
|
||||||
X-Patchwork-Id: 778138
|
|
||||||
Message-Id: <20170620063553.8637-1-manu@bidouilliste.com>
|
|
||||||
To: agraf@suse.de
|
|
||||||
Cc: u-boot@lists.denx.de
|
|
||||||
Date: Tue, 20 Jun 2017 08:35:53 +0200
|
|
||||||
|
|
||||||
While MBR partition isn't supposed to work in a EFI environment some
|
From f62aad2dc1b25dd234373e7697c9152b89c75ed6 Mon Sep 17 00:00:00 2001
|
||||||
board rely partially or fully on MBR (BeagleBone, RPI and probably others).
|
From: Peter Jones <pjones@redhat.com>
|
||||||
This export the MBR partition as logical partition which is useful to efi
|
Date: Wed, 21 Jun 2017 16:39:02 -0400
|
||||||
application that cannot read raw disks.
|
Subject: [PATCH 5/8] efi: add some more device path structures
|
||||||
|
|
||||||
Signed-off-by: Emmanuel Vadot <manu@bidouilliste.com>
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
---
|
---
|
||||||
Changes in v2:
|
include/efi_api.h | 33 ++++++++++++++++++++++++++++++++-
|
||||||
* Pass correct arg to efi_disk_create_mbr
|
1 file changed, 32 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
lib/efi_loader/efi_disk.c | 59 +++++++++++++++++++++++++++++++++++++++--------
|
diff --git a/include/efi_api.h b/include/efi_api.h
|
||||||
1 file changed, 50 insertions(+), 9 deletions(-)
|
index 5c3836a51b..5150962872 100644
|
||||||
|
--- a/include/efi_api.h
|
||||||
|
+++ b/include/efi_api.h
|
||||||
|
@@ -272,6 +272,18 @@ struct efi_mac_addr {
|
||||||
|
u8 addr[32];
|
||||||
|
};
|
||||||
|
|
||||||
|
+#define DEVICE_PATH_TYPE_ACPI_DEVICE 0x02
|
||||||
|
+#define DEVICE_PATH_SUB_TYPE_ACPI_DEVICE 0x01
|
||||||
|
+
|
||||||
|
+#define EFI_PNP_ID(ID) (u32)(((ID) << 16) | 0x41D0)
|
||||||
|
+#define EISA_PNP_ID(ID) EFI_PNP_ID(ID)
|
||||||
|
+
|
||||||
|
+struct efi_device_path_acpi_path {
|
||||||
|
+ struct efi_device_path dp;
|
||||||
|
+ u32 hid;
|
||||||
|
+ u32 uid;
|
||||||
|
+} __packed;
|
||||||
|
+
|
||||||
|
#define DEVICE_PATH_TYPE_MESSAGING_DEVICE 0x03
|
||||||
|
# define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b
|
||||||
|
|
||||||
|
@@ -282,12 +294,31 @@ struct efi_device_path_mac_addr {
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEVICE_PATH_TYPE_MEDIA_DEVICE 0x04
|
||||||
|
+# define DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH 0x01
|
||||||
|
+# define DEVICE_PATH_SUB_TYPE_CDROM_PATH 0x02
|
||||||
|
# define DEVICE_PATH_SUB_TYPE_FILE_PATH 0x04
|
||||||
|
|
||||||
|
+struct efi_device_path_hard_drive_path {
|
||||||
|
+ struct efi_device_path dp;
|
||||||
|
+ u32 partition_number;
|
||||||
|
+ u64 partition_start;
|
||||||
|
+ u64 partition_end;
|
||||||
|
+ u8 partition_signature[16];
|
||||||
|
+ u8 partmap_type;
|
||||||
|
+ u8 signature_type;
|
||||||
|
+} __packed;
|
||||||
|
+
|
||||||
|
+struct efi_device_path_cdrom_path {
|
||||||
|
+ struct efi_device_path dp;
|
||||||
|
+ u32 boot_entry;
|
||||||
|
+ u64 partition_start;
|
||||||
|
+ u64 partition_end;
|
||||||
|
+} __packed;
|
||||||
|
+
|
||||||
|
struct efi_device_path_file_path {
|
||||||
|
struct efi_device_path dp;
|
||||||
|
u16 str[32];
|
||||||
|
-};
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
#define BLOCK_IO_GUID \
|
||||||
|
EFI_GUID(0x964e5b21, 0x6459, 0x11d2, \
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
From 09b8585ae5ae6749172f8cca40f322999693e32e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Wed, 21 Jun 2017 13:18:06 -0400
|
||||||
|
Subject: [PATCH 6/8] Don't treat a disk as GPT just because you found a valid
|
||||||
|
PMBR.
|
||||||
|
|
||||||
|
Without this part_gpt's ->get_info() winds up getting called instead of
|
||||||
|
part_dos's.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
---
|
||||||
|
disk/part_efi.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/disk/part_efi.c b/disk/part_efi.c
|
||||||
|
index 1b7ba27947..16adb95b0a 100644
|
||||||
|
--- a/disk/part_efi.c
|
||||||
|
+++ b/disk/part_efi.c
|
||||||
|
@@ -301,10 +301,16 @@ int part_get_info_efi(struct blk_desc *dev_desc, int part,
|
||||||
|
static int part_test_efi(struct blk_desc *dev_desc)
|
||||||
|
{
|
||||||
|
ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
|
||||||
|
+ ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
|
||||||
|
+ gpt_entry *gpt_pte = NULL;
|
||||||
|
|
||||||
|
/* Read legacy MBR from block 0 and validate it */
|
||||||
|
if ((blk_dread(dev_desc, 0, 1, (ulong *)legacymbr) != 1)
|
||||||
|
- || (is_pmbr_valid(legacymbr) != 1)) {
|
||||||
|
+ || (is_pmbr_valid(legacymbr) != 1)
|
||||||
|
+ || ((is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
|
||||||
|
+ gpt_head, &gpt_pte) != 1)
|
||||||
|
+ && is_gpt_valid(dev_desc, (dev_desc->lba - 1),
|
||||||
|
+ gpt_head, &gpt_pte) != 1)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
From 2d0173238102c2e6a90e4d36f2fcb812cc4e7b24 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Wed, 21 Jun 2017 16:42:07 -0400
|
||||||
|
Subject: [PATCH 7/8] efi: make efi_disk_obj's for partitions, and give them
|
||||||
|
better device paths
|
||||||
|
|
||||||
|
In this case the device paths stem from a fictional ACPI PNP device, but
|
||||||
|
that's fine, so long as we can match it later.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
---
|
||||||
|
lib/efi_loader/efi_disk.c | 124 +++++++++++++++++++++++++++++++---------------
|
||||||
|
1 file changed, 84 insertions(+), 40 deletions(-)
|
||||||
|
|
||||||
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
|
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
|
||||||
index 39e602a868..097bb544d7 100644
|
index 39e602a868..90844fdcde 100644
|
||||||
--- a/lib/efi_loader/efi_disk.c
|
--- a/lib/efi_loader/efi_disk.c
|
||||||
+++ b/lib/efi_loader/efi_disk.c
|
+++ b/lib/efi_loader/efi_disk.c
|
||||||
@@ -197,11 +197,13 @@ static void efi_disk_add_dev(const char *name,
|
@@ -28,7 +28,7 @@ struct efi_disk_obj {
|
||||||
const char *if_typename,
|
/* EFI Interface Media descriptor struct, referenced by ops */
|
||||||
const struct blk_desc *desc,
|
struct efi_block_io_media media;
|
||||||
int dev_index,
|
/* EFI device path to this block device */
|
||||||
|
- struct efi_device_path_file_path *dp;
|
||||||
|
+ struct efi_device_path *dp;
|
||||||
|
/* Offset into disk for simple partitions */
|
||||||
|
lbaint_t offset;
|
||||||
|
/* Internal block device */
|
||||||
|
@@ -193,19 +193,26 @@ static const struct efi_block_io block_io_disk_template = {
|
||||||
|
.flush_blocks = &efi_disk_flush_blocks,
|
||||||
|
};
|
||||||
|
|
||||||
|
-static void efi_disk_add_dev(const char *name,
|
||||||
|
- const char *if_typename,
|
||||||
|
- const struct blk_desc *desc,
|
||||||
|
- int dev_index,
|
||||||
- lbaint_t offset)
|
- lbaint_t offset)
|
||||||
+ disk_partition_t *info,
|
+static struct efi_disk_obj *efi_disk_add_dev(const char *name,
|
||||||
+ int logical_partition)
|
+ const char *if_typename,
|
||||||
|
+ struct blk_desc *desc,
|
||||||
|
+ int dev_index,
|
||||||
|
+ lbaint_t offset,
|
||||||
|
+ struct efi_disk_obj *parent,
|
||||||
|
+ int part)
|
||||||
{
|
{
|
||||||
|
+ disk_partition_t info;
|
||||||
struct efi_disk_obj *diskobj;
|
struct efi_disk_obj *diskobj;
|
||||||
struct efi_device_path_file_path *dp;
|
- struct efi_device_path_file_path *dp;
|
||||||
int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2);
|
- int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2);
|
||||||
+ static int mediaid;
|
+ struct efi_device_path_acpi_path *adp;
|
||||||
|
+ struct efi_device_path_hard_drive_path *hddp;
|
||||||
|
+ struct efi_device_path_cdrom_path *cddp;
|
||||||
|
+ struct efi_device_path *edp;
|
||||||
|
+ /* we just happen to know hddp is bigger than cddp */
|
||||||
|
+ int objlen = sizeof(*diskobj) + sizeof (*adp) + sizeof(*hddp) + sizeof (*edp);
|
||||||
|
|
||||||
/* Don't add empty devices */
|
/* Don't add empty devices */
|
||||||
if (!desc->lba)
|
if (!desc->lba)
|
||||||
@@ -218,16 +220,26 @@ static void efi_disk_add_dev(const char *name,
|
- return;
|
||||||
diskobj->ops = block_io_disk_template;
|
+ return NULL;
|
||||||
diskobj->ifname = if_typename;
|
|
||||||
diskobj->dev_index = dev_index;
|
|
||||||
- diskobj->offset = offset;
|
|
||||||
+ if (info)
|
|
||||||
+ diskobj->offset = info->start;
|
|
||||||
+
|
|
||||||
diskobj->desc = desc;
|
|
||||||
|
|
||||||
/* Fill in EFI IO Media info (for read/write callbacks) */
|
diskobj = calloc(1, objlen);
|
||||||
diskobj->media.removable_media = desc->removable;
|
|
||||||
diskobj->media.media_present = 1;
|
@@ -229,45 +236,89 @@ static void efi_disk_add_dev(const char *name,
|
||||||
- diskobj->media.block_size = desc->blksz;
|
diskobj->media.last_block = desc->lba - offset;
|
||||||
- diskobj->media.io_align = desc->blksz;
|
|
||||||
- diskobj->media.last_block = desc->lba - offset;
|
|
||||||
+ diskobj->media.media_id = mediaid++;
|
|
||||||
diskobj->ops.media = &diskobj->media;
|
diskobj->ops.media = &diskobj->media;
|
||||||
+ if (logical_partition) {
|
|
||||||
+ diskobj->media.logical_partition = 1;
|
+ adp = (void*)&diskobj[1];
|
||||||
+ diskobj->media.block_size = info->blksz;
|
+ diskobj->dp = (struct efi_device_path *)adp;
|
||||||
+ diskobj->media.io_align = info->blksz;
|
+
|
||||||
+ diskobj->media.last_block = info->size - 1;
|
+ adp[0].dp.type = DEVICE_PATH_TYPE_ACPI_DEVICE;
|
||||||
|
+ adp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_ACPI_DEVICE;
|
||||||
|
+ adp[0].dp.length = sizeof (*adp);
|
||||||
|
+ adp[0].hid = EISA_PNP_ID(0x1337);
|
||||||
|
+ adp[0].uid = 0;
|
||||||
|
+
|
||||||
|
+ if (part >= 0)
|
||||||
|
+ part_get_info(desc, part, &info);
|
||||||
|
+
|
||||||
|
/* Fill in device path */
|
||||||
|
- dp = (void*)&diskobj[1];
|
||||||
|
- diskobj->dp = dp;
|
||||||
|
- dp[0].dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
|
||||||
|
- dp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH;
|
||||||
|
- dp[0].dp.length = sizeof(*dp);
|
||||||
|
- ascii2unicode(dp[0].str, name);
|
||||||
|
+ if (part < 0) {
|
||||||
|
+ edp = (struct efi_device_path *)((u8 *)adp + adp[0].dp.length);
|
||||||
|
+ } else if (desc->part_type == PART_TYPE_ISO) {
|
||||||
|
+ cddp = (struct efi_device_path_cdrom_path *)((u8 *)adp + adp[0].dp.length);
|
||||||
|
+
|
||||||
|
+ cddp[0].boot_entry = part - 1;
|
||||||
|
+ cddp[0].dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
|
||||||
|
+ cddp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_CDROM_PATH;
|
||||||
|
+ cddp[0].dp.length = sizeof (*cddp);
|
||||||
|
+ cddp[0].partition_start = info.start;
|
||||||
|
+ cddp[0].partition_end = info.size;
|
||||||
|
+
|
||||||
|
+ edp = (struct efi_device_path *)((u8 *)cddp + cddp[0].dp.length);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ diskobj->media.block_size = desc->blksz;
|
+ hddp = (struct efi_device_path_hard_drive_path *)((u8 *)adp + adp[0].dp.length);
|
||||||
+ diskobj->media.io_align = desc->blksz;
|
+
|
||||||
+ diskobj->media.last_block = desc->lba;
|
+ hddp[0].dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
|
||||||
|
+ hddp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH;
|
||||||
|
+ hddp[0].dp.length = sizeof (*hddp);
|
||||||
|
+ hddp[0].partition_number = part - 1;
|
||||||
|
+ hddp[0].partition_start = info.start;
|
||||||
|
+ hddp[0].partition_end = info.size;
|
||||||
|
+ if (desc->part_type == PART_TYPE_EFI)
|
||||||
|
+ hddp[0].partmap_type = 2;
|
||||||
|
+ else
|
||||||
|
+ hddp[0].partmap_type = 1;
|
||||||
|
+ hddp[0].signature_type = 0;
|
||||||
|
+
|
||||||
|
+ edp = (struct efi_device_path *)((u8 *)hddp + hddp[0].dp.length);
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
/* Fill in device path */
|
- dp[1].dp.type = DEVICE_PATH_TYPE_END;
|
||||||
dp = (void*)&diskobj[1];
|
- dp[1].dp.sub_type = DEVICE_PATH_SUB_TYPE_END;
|
||||||
@@ -262,8 +274,33 @@ static int efi_disk_create_eltorito(struct blk_desc *desc,
|
- dp[1].dp.length = sizeof(*dp);
|
||||||
|
+ edp[0].type = DEVICE_PATH_TYPE_END;
|
||||||
|
+ edp[0].sub_type = DEVICE_PATH_SUB_TYPE_END;
|
||||||
|
+ edp[0].length = sizeof(*edp);
|
||||||
|
|
||||||
|
/* Hook up to the device list */
|
||||||
|
list_add_tail(&diskobj->parent.link, &efi_obj_list);
|
||||||
|
+
|
||||||
|
+ return diskobj;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int efi_disk_create_eltorito(struct blk_desc *desc,
|
||||||
|
- const char *if_typename,
|
||||||
|
- int diskid,
|
||||||
|
- const char *pdevname)
|
||||||
|
+static int efi_disk_create_partitions(struct blk_desc *desc,
|
||||||
|
+ const char *if_typename,
|
||||||
|
+ int diskid,
|
||||||
|
+ const char *pdevname,
|
||||||
|
+ struct efi_disk_obj *parent)
|
||||||
|
{
|
||||||
|
int disks = 0;
|
||||||
|
-#if CONFIG_IS_ENABLED(ISO_PARTITION)
|
||||||
|
char devname[32] = { 0 }; /* dp->str is u16[32] long */
|
||||||
|
disk_partition_t info;
|
||||||
|
int part = 1;
|
||||||
|
|
||||||
|
- if (desc->part_type != PART_TYPE_ISO)
|
||||||
|
+#if !CONFIG_IS_ENABLED(ISO_PARTITION)
|
||||||
|
+ /*
|
||||||
|
+ * El Torito images show up as block devices in an EFI world,
|
||||||
|
+ * so let's create them here, unless it's disabled...
|
||||||
|
+ */
|
||||||
|
+ if (desc->part_type == PART_TYPE_ISO)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
while (!part_get_info(desc, part, &info)) {
|
while (!part_get_info(desc, part, &info)) {
|
||||||
snprintf(devname, sizeof(devname), "%s:%d", pdevname,
|
snprintf(devname, sizeof(devname), "%s:%d", pdevname,
|
||||||
part);
|
part);
|
||||||
- efi_disk_add_dev(devname, if_typename, desc, diskid,
|
efi_disk_add_dev(devname, if_typename, desc, diskid,
|
||||||
- info.start);
|
- info.start);
|
||||||
+ efi_disk_add_dev(devname, if_typename, desc, diskid, 0, 0);
|
+ info.start, parent, part);
|
||||||
+ part++;
|
|
||||||
+ disks++;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ return disks;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int efi_disk_create_mbr(struct blk_desc *desc,
|
|
||||||
+ const char *if_typename,
|
|
||||||
+ int diskid)
|
|
||||||
+{
|
|
||||||
+ int disks = 0;
|
|
||||||
+#if CONFIG_IS_ENABLED(DOS_PARTITION)
|
|
||||||
+ char devname[32] = { 0 }; /* dp->str is u16[32] long */
|
|
||||||
+ disk_partition_t info;
|
|
||||||
+ int part = 1;
|
|
||||||
+
|
|
||||||
+ if (desc->part_type != PART_TYPE_DOS)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ while (!part_get_info(desc, part, &info)) {
|
|
||||||
+ snprintf(devname, sizeof(devname), "%s%d:%d", if_typename,
|
|
||||||
+ diskid, part);
|
|
||||||
+
|
|
||||||
+ efi_disk_add_dev(devname, if_typename, desc, diskid, &info, 1);
|
|
||||||
part++;
|
part++;
|
||||||
disks++;
|
disks++;
|
||||||
}
|
}
|
||||||
@@ -296,9 +333,11 @@ int efi_disk_register(void)
|
-#endif
|
||||||
|
|
||||||
|
return disks;
|
||||||
|
}
|
||||||
|
@@ -286,6 +337,7 @@ static int efi_disk_create_eltorito(struct blk_desc *desc,
|
||||||
|
int efi_disk_register(void)
|
||||||
|
{
|
||||||
|
int disks = 0;
|
||||||
|
+ struct efi_disk_obj *diskobj;
|
||||||
|
#ifdef CONFIG_BLK
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
@@ -296,15 +348,11 @@ int efi_disk_register(void)
|
||||||
const char *if_typename = dev->driver->name;
|
const char *if_typename = dev->driver->name;
|
||||||
|
|
||||||
printf("Scanning disk %s...\n", dev->name);
|
printf("Scanning disk %s...\n", dev->name);
|
||||||
- efi_disk_add_dev(dev->name, if_typename, desc, desc->devnum, 0);
|
- efi_disk_add_dev(dev->name, if_typename, desc, desc->devnum, 0);
|
||||||
+ efi_disk_add_dev(dev->name, if_typename, desc, desc->devnum,
|
+ diskobj = efi_disk_add_dev(dev->name, if_typename, desc, desc->devnum, 0, NULL, -1);
|
||||||
+ NULL, 0);
|
|
||||||
disks++;
|
disks++;
|
||||||
|
|
||||||
+ disks += efi_disk_create_mbr(desc, if_typename, desc->devnum);
|
- /*
|
||||||
/*
|
- * El Torito images show up as block devices in an EFI world,
|
||||||
* El Torito images show up as block devices in an EFI world,
|
- * so let's create them here
|
||||||
* so let's create them here
|
- */
|
||||||
@@ -332,15 +371,17 @@ int efi_disk_register(void)
|
- disks += efi_disk_create_eltorito(desc, if_typename,
|
||||||
|
- desc->devnum, dev->name);
|
||||||
|
+ disks += efi_disk_create_partitions(desc, if_typename,
|
||||||
|
+ desc->devnum, dev->name, diskobj);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int i, if_type;
|
||||||
|
@@ -332,15 +380,11 @@ int efi_disk_register(void)
|
||||||
|
|
||||||
snprintf(devname, sizeof(devname), "%s%d",
|
snprintf(devname, sizeof(devname), "%s%d",
|
||||||
if_typename, i);
|
if_typename, i);
|
||||||
- efi_disk_add_dev(devname, if_typename, desc, i, 0);
|
- efi_disk_add_dev(devname, if_typename, desc, i, 0);
|
||||||
+ efi_disk_add_dev(devname, if_typename, desc, i, 0, 0);
|
+ diskobj = efi_disk_add_dev(devname, if_typename, desc, i, 0, NULL, -1);
|
||||||
disks++;
|
disks++;
|
||||||
|
|
||||||
+ disks += efi_disk_create_mbr(desc, if_typename, i);
|
- /*
|
||||||
/*
|
- * El Torito images show up as block devices
|
||||||
* El Torito images show up as block devices
|
- * in an EFI world, so let's create them here
|
||||||
* in an EFI world, so let's create them here
|
- */
|
||||||
*/
|
- disks += efi_disk_create_eltorito(desc, if_typename,
|
||||||
disks += efi_disk_create_eltorito(desc, if_typename,
|
- i, devname);
|
||||||
i, devname);
|
+ disks += efi_disk_create_partitions(desc, if_typename,
|
||||||
+
|
+ i, devname, diskobj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
From 2d840bc18c38137ff58a0884eb380f8a12ed6db8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Wed, 21 Jun 2017 16:44:13 -0400
|
||||||
|
Subject: [PATCH 8/8] bootefi: make our device and image device paths more
|
||||||
|
realistic.
|
||||||
|
|
||||||
|
This makes the device and image device paths into something grub can
|
||||||
|
match its disks up against, allowing grub to find its config file on the
|
||||||
|
original device.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
---
|
||||||
|
cmd/bootefi.c | 123 +++++++++++++++++++++++++++++++++++++++++++++-------------
|
||||||
|
1 file changed, 97 insertions(+), 26 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
|
||||||
|
index a0a5434967..a6598dface 100644
|
||||||
|
--- a/cmd/bootefi.c
|
||||||
|
+++ b/cmd/bootefi.c
|
||||||
|
@@ -28,32 +28,49 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
* In addition to the originating device we also declare the file path
|
||||||
|
* of "bootefi" based loads to be /bootefi.
|
||||||
|
*/
|
||||||
|
-static struct efi_device_path_file_path bootefi_image_path[] = {
|
||||||
|
- {
|
||||||
|
- .dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE,
|
||||||
|
- .dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH,
|
||||||
|
- .dp.length = sizeof(bootefi_image_path[0]),
|
||||||
|
- .str = { 'b','o','o','t','e','f','i' },
|
||||||
|
- }, {
|
||||||
|
- .dp.type = DEVICE_PATH_TYPE_END,
|
||||||
|
- .dp.sub_type = DEVICE_PATH_SUB_TYPE_END,
|
||||||
|
- .dp.length = sizeof(bootefi_image_path[0]),
|
||||||
|
- }
|
||||||
|
+static struct efi_device_path_acpi_path bootefi_acpi_path = {
|
||||||
|
+ .dp.type = DEVICE_PATH_TYPE_ACPI_DEVICE,
|
||||||
|
+ .dp.sub_type = DEVICE_PATH_SUB_TYPE_ACPI_DEVICE,
|
||||||
|
+ .dp.length = sizeof(bootefi_acpi_path),
|
||||||
|
+ .hid = EISA_PNP_ID(0x1337),
|
||||||
|
+ .uid = 0,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static struct efi_device_path_hard_drive_path bootefi_hard_drive_path = {
|
||||||
|
+ .dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE,
|
||||||
|
+ .dp.sub_type = DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH,
|
||||||
|
+ .dp.length = sizeof(bootefi_hard_drive_path),
|
||||||
|
};
|
||||||
|
|
||||||
|
-static struct efi_device_path_file_path bootefi_device_path[] = {
|
||||||
|
+static struct efi_device_path_file_path bootefi_image_path_template[] = {
|
||||||
|
{
|
||||||
|
.dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE,
|
||||||
|
.dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH,
|
||||||
|
- .dp.length = sizeof(bootefi_image_path[0]),
|
||||||
|
+ .dp.length = sizeof(bootefi_image_path_template[0]),
|
||||||
|
.str = { 'b','o','o','t','e','f','i' },
|
||||||
|
}, {
|
||||||
|
.dp.type = DEVICE_PATH_TYPE_END,
|
||||||
|
.dp.sub_type = DEVICE_PATH_SUB_TYPE_END,
|
||||||
|
- .dp.length = sizeof(bootefi_image_path[0]),
|
||||||
|
+ .dp.length = sizeof(bootefi_image_path_template[0]),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
+static u8 image_dp_buf[sizeof(bootefi_acpi_path)
|
||||||
|
+ + sizeof(bootefi_hard_drive_path)
|
||||||
|
+ + sizeof(bootefi_image_path_template)];
|
||||||
|
+
|
||||||
|
+static struct efi_device_path_file_path bootefi_device_path_template = {
|
||||||
|
+ .dp.type = DEVICE_PATH_TYPE_END,
|
||||||
|
+ .dp.sub_type = DEVICE_PATH_SUB_TYPE_END,
|
||||||
|
+ .dp.length = sizeof(bootefi_device_path_template),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static u8 device_dp_buf[sizeof(bootefi_acpi_path)
|
||||||
|
+ + sizeof(bootefi_hard_drive_path)
|
||||||
|
+ + sizeof(bootefi_device_path_template)];
|
||||||
|
+
|
||||||
|
+static struct efi_device_path *bootefi_device_path = (void *)device_dp_buf;
|
||||||
|
+
|
||||||
|
static efi_status_t EFIAPI bootefi_open_dp(void *handle, efi_guid_t *protocol,
|
||||||
|
void **protocol_interface, void *agent_handle,
|
||||||
|
void *controller_handle, uint32_t attributes)
|
||||||
|
@@ -64,8 +81,8 @@ static efi_status_t EFIAPI bootefi_open_dp(void *handle, efi_guid_t *protocol,
|
||||||
|
|
||||||
|
/* The EFI loaded_image interface for the image executed via "bootefi" */
|
||||||
|
static struct efi_loaded_image loaded_image_info = {
|
||||||
|
- .device_handle = bootefi_device_path,
|
||||||
|
- .file_path = bootefi_image_path,
|
||||||
|
+ .device_handle = (void *)device_dp_buf,
|
||||||
|
+ .file_path = (void *)image_dp_buf,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The EFI object struct for the image executed via "bootefi" */
|
||||||
|
@@ -93,7 +110,7 @@ static struct efi_object loaded_image_info_obj = {
|
||||||
|
|
||||||
|
/* The EFI object struct for the device the "bootefi" image was loaded from */
|
||||||
|
static struct efi_object bootefi_device_obj = {
|
||||||
|
- .handle = bootefi_device_path,
|
||||||
|
+ .handle = (void *)device_dp_buf,
|
||||||
|
.protocols = {
|
||||||
|
{
|
||||||
|
/* When asking for the device path interface, return
|
||||||
|
@@ -104,6 +121,59 @@ static struct efi_object bootefi_device_obj = {
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
+void make_device_paths(int net, struct blk_desc *desc, int part)
|
||||||
|
+{
|
||||||
|
+ memcpy(device_dp_buf,
|
||||||
|
+ &bootefi_acpi_path,
|
||||||
|
+ sizeof(bootefi_acpi_path));
|
||||||
|
+ memcpy(image_dp_buf,
|
||||||
|
+ &bootefi_acpi_path,
|
||||||
|
+ sizeof(bootefi_acpi_path));
|
||||||
|
+
|
||||||
|
+ if (net) {
|
||||||
|
+ memcpy(device_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ &bootefi_device_path_template,
|
||||||
|
+ sizeof (bootefi_device_path_template));
|
||||||
|
+ memcpy(image_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ bootefi_image_path_template,
|
||||||
|
+ sizeof (bootefi_image_path_template));
|
||||||
|
+ } else {
|
||||||
|
+ disk_partition_t info;
|
||||||
|
+ int rc = -1;
|
||||||
|
+ if (part > 0)
|
||||||
|
+ rc = part_get_info(desc, part, &info);
|
||||||
|
+
|
||||||
|
+ if (rc < 0) {
|
||||||
|
+ memcpy(device_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ &bootefi_device_path_template,
|
||||||
|
+ sizeof (bootefi_device_path_template));
|
||||||
|
+ memcpy(image_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ bootefi_image_path_template,
|
||||||
|
+ sizeof (bootefi_image_path_template));
|
||||||
|
+ } else {
|
||||||
|
+ bootefi_hard_drive_path.partition_number = part - 1;
|
||||||
|
+ bootefi_hard_drive_path.partition_start = info.start;
|
||||||
|
+ bootefi_hard_drive_path.partition_end = info.size;
|
||||||
|
+
|
||||||
|
+ memcpy(device_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ &bootefi_hard_drive_path,
|
||||||
|
+ sizeof (bootefi_hard_drive_path));
|
||||||
|
+ memcpy(device_dp_buf + sizeof(bootefi_acpi_path)
|
||||||
|
+ + sizeof(bootefi_hard_drive_path),
|
||||||
|
+ &bootefi_device_path_template,
|
||||||
|
+ sizeof (bootefi_device_path_template));
|
||||||
|
+
|
||||||
|
+ memcpy(image_dp_buf + sizeof(bootefi_acpi_path),
|
||||||
|
+ &bootefi_hard_drive_path,
|
||||||
|
+ sizeof (bootefi_hard_drive_path));
|
||||||
|
+ memcpy(image_dp_buf + sizeof(bootefi_acpi_path)
|
||||||
|
+ + sizeof(bootefi_hard_drive_path),
|
||||||
|
+ bootefi_image_path_template,
|
||||||
|
+ sizeof (bootefi_image_path_template));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void *copy_fdt(void *fdt)
|
||||||
|
{
|
||||||
|
u64 fdt_size = fdt_totalsize(fdt);
|
||||||
|
@@ -217,7 +287,7 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt)
|
||||||
|
void *nethandle = loaded_image_info.device_handle;
|
||||||
|
efi_net_register(&nethandle);
|
||||||
|
|
||||||
|
- if (!memcmp(bootefi_device_path[0].str, "N\0e\0t", 6))
|
||||||
|
+ if (!memcmp(bootefi_device_path_template.str, "N\0e\0t", 6))
|
||||||
|
loaded_image_info.device_handle = nethandle;
|
||||||
|
else
|
||||||
|
loaded_image_info.device_handle = bootefi_device_path;
|
||||||
|
@@ -320,6 +390,7 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
|
||||||
|
__maybe_unused struct blk_desc *desc;
|
||||||
|
char devname[32] = { 0 }; /* dp->str is u16[32] long */
|
||||||
|
char *colon;
|
||||||
|
+ int part = -1;
|
||||||
|
|
||||||
|
#if defined(CONFIG_BLK) || CONFIG_IS_ENABLED(ISO_PARTITION)
|
||||||
|
desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
|
||||||
|
@@ -336,7 +407,9 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
|
||||||
|
snprintf(devname, sizeof(devname), "%s%s", dev, devnr);
|
||||||
|
}
|
||||||
|
|
||||||
|
- colon = strchr(devname, ':');
|
||||||
|
+ colon = strchr(devnr, ':');
|
||||||
|
+ if (colon)
|
||||||
|
+ part = simple_strtol(colon+1, NULL, 10);
|
||||||
|
|
||||||
|
#if CONFIG_IS_ENABLED(ISO_PARTITION)
|
||||||
|
/* For ISOs we create partition block devices */
|
||||||
|
@@ -352,17 +425,15 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
|
||||||
|
if (colon)
|
||||||
|
*colon = '\0';
|
||||||
|
|
||||||
|
- /* Patch bootefi_device_path to the target device */
|
||||||
|
- memset(bootefi_device_path[0].str, 0, sizeof(bootefi_device_path[0].str));
|
||||||
|
- ascii2unicode(bootefi_device_path[0].str, devname);
|
||||||
|
-
|
||||||
|
- /* Patch bootefi_image_path to the target file path */
|
||||||
|
- memset(bootefi_image_path[0].str, 0, sizeof(bootefi_image_path[0].str));
|
||||||
|
+ /* Patch bootefi_image_path_template to the target file path */
|
||||||
|
+ memset(bootefi_image_path_template[0].str, 0, sizeof(bootefi_image_path_template[0].str));
|
||||||
|
if (strcmp(dev, "Net")) {
|
||||||
|
/* Add leading / to fs paths, because they're absolute */
|
||||||
|
snprintf(devname, sizeof(devname), "/%s", path);
|
||||||
|
} else {
|
||||||
|
snprintf(devname, sizeof(devname), "%s", path);
|
||||||
|
}
|
||||||
|
- ascii2unicode(bootefi_image_path[0].str, devname);
|
||||||
|
+ ascii2unicode(bootefi_image_path_template[0].str, devname);
|
||||||
|
+
|
||||||
|
+ make_device_paths(!strcmp(dev, "Net"), desc, part);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.13.0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user