diff --git a/dragonboard-fixes.patch b/dragonboard-fixes.patch new file mode 100644 index 0000000..48f254c --- /dev/null +++ b/dragonboard-fixes.patch @@ -0,0 +1,85 @@ +From patchwork Tue Jun 20 21:55:24 2017 +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 +X-Patchwork-Id: 778514 +Message-Id: <20170620215525.10430-1-robdclark@gmail.com> +To: U-Boot Mailing List +Cc: Nicolas Dechesne , + Stephen Boyd +Date: Tue, 20 Jun 2017 17:55:24 -0400 + +Otherwise the loaded image would miss the efi_runtime sections, and fall +over hard when grub (for example) tried to call runtime services located +in this section. + +Signed-off-by: Rob Clark +--- + board/qualcomm/dragonboard410c/u-boot.lds | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/board/qualcomm/dragonboard410c/u-boot.lds b/board/qualcomm/dragonboard410c/u-boot.lds +index 6e1c5a8..62ac4d7 100644 +--- a/board/qualcomm/dragonboard410c/u-boot.lds ++++ b/board/qualcomm/dragonboard410c/u-boot.lds +@@ -43,6 +43,22 @@ SECTIONS + + . = ALIGN(8); + ++ .efi_runtime : { ++ __efi_runtime_start = .; ++ *(efi_runtime_text) ++ *(efi_runtime_data) ++ __efi_runtime_stop = .; ++ } ++ ++ .efi_runtime_rel : { ++ __efi_runtime_rel_start = .; ++ *(.relaefi_runtime_text) ++ *(.relaefi_runtime_data) ++ __efi_runtime_rel_stop = .; ++ } ++ ++ . = ALIGN(8); ++ + .image_copy_end : + { + *(.__image_copy_end) +From patchwork Tue Jun 20 21:55:25 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [U-Boot,2/2] board/db410c: fix fdt address +From: Rob Clark +X-Patchwork-Id: 778516 +Message-Id: <20170620215525.10430-2-robdclark@gmail.com> +To: U-Boot Mailing List +Cc: Nicolas Dechesne , + Stephen Boyd +Date: Tue, 20 Jun 2017 17:55:25 -0400 + +Signed-off-by: Rob Clark +--- +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 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/configs/dragonboard410c.h b/include/configs/dragonboard410c.h +index 11c842d..3b9932d 100644 +--- a/include/configs/dragonboard410c.h ++++ b/include/configs/dragonboard410c.h +@@ -105,7 +105,7 @@ REFLASH(dragonboard/u-boot.img, 8)\ + "linux_image=Image\0" \ + "kernel_addr_r=0x81000000\0"\ + "fdtfile=apq8016-sbc.dtb\0" \ +- "fdt_addr_r=0x83000000\0"\ ++ "fdt_addr_r=0x81e00000\0"\ + "ramdisk_addr_r=0x84000000\0"\ + "scriptaddr=0x90000000\0"\ + "pxefile_addr_r=0x90100000\0"\ diff --git a/uboot-tools.spec b/uboot-tools.spec index 5c33b21..0c2dcbb 100644 --- a/uboot-tools.spec +++ b/uboot-tools.spec @@ -14,14 +14,16 @@ Source3: aarch64-boards Source4: aarch64-chromebooks Patch1: add-BOOTENV_INIT_COMMAND-for-commands-that-may-be-ne.patch +Patch2: dragonboard-fixes.patch Patch3: mx6cuboxi-Add-support-for-sata.patch Patch4: mx6-Initial-Hummingboard-2-support.patch -# Patch5: sti-STiH410-B2260-support.patch -# Patch6: AW64-add-spl-atf-support.patch -Patch7: use-Fedora-specific-EFI-path-name.patch -# Patch9: arm-tegra-nyan-chromebook.patch +Patch5: uefi-fixes.patch +Patch6: use-Fedora-specific-EFI-path-name.patch -# Patch19: 0001-arm-mvebu-enable-generic-distro-boot-config.patch +# Patch11: sti-STiH410-B2260-support.patch +# Patch12: AW64-add-spl-atf-support.patch +# Patch13: arm-tegra-nyan-chromebook.patch +# Patch14: 0001-arm-mvebu-enable-generic-distro-boot-config.patch BuildRequires: bc BuildRequires: dtc @@ -276,6 +278,8 @@ cp -p board/warp7/README builds/docs/README.warp7 - 2017.07 RC2 - Enable AllWinner: NanoPi M1+, NanoPi Neo2, SoPine baseboard, OrangePi Zero+2, OrangePi Win - Enable Rockchips: GeekBox, Sheep +- Dragonboard fixes +- uEFI fixes * Tue Jun 6 2017 Peter Robinson 2017.07-0.1.rc1 - 2017.07 RC1 diff --git a/uefi-fixes.patch b/uefi-fixes.patch new file mode 100644 index 0000000..ec019a3 --- /dev/null +++ b/uefi-fixes.patch @@ -0,0 +1,212 @@ +From patchwork Tue Jun 20 21:49:23 2017 +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 +X-Patchwork-Id: 778515 +Message-Id: <20170620214923.8564-1-robdclark@gmail.com> +To: U-Boot Mailing List +Date: Tue, 20 Jun 2017 17:49:23 -0400 + +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 +return NULL and no attempt would be made to register the remaining +devices. Also uclass_next_device() needs the same fix. + +Signed-off-by: Rob Clark +--- + drivers/core/uclass.c | 24 +++++++++++++++++++++--- + 1 file changed, 21 insertions(+), 3 deletions(-) + +diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c +index 21dc696..c47ff56 100644 +--- a/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, + + int uclass_first_device(enum uclass_id id, struct udevice **devp) + { +- struct udevice *dev; ++ struct udevice *dev = NULL; + int ret; + + *devp = NULL; + ret = uclass_find_first_device(id, &dev); + if (!dev) + return 0; +- return uclass_get_device_tail(dev, ret, devp); ++ ret = uclass_get_device_tail(dev, ret, devp); ++ if (ret && dev) { ++ /* we have a device, but it failed to probe, move on and ++ * try the next one. ++ */ ++ ret = uclass_next_device(&dev); ++ if (!ret) ++ *devp = dev; ++ } ++ return ret; + } + + int uclass_first_device_err(enum uclass_id id, struct udevice **devp) +@@ -490,7 +499,16 @@ int uclass_next_device(struct udevice **devp) + ret = uclass_find_next_device(&dev); + if (!dev) + return 0; +- return uclass_get_device_tail(dev, ret, devp); ++ ret = uclass_get_device_tail(dev, ret, devp); ++ if (ret && (dev != *devp)) { ++ /* we have a device, but it failed to probe, move on and ++ * try the next one. ++ */ ++ ret = uclass_next_device(&dev); ++ if (!ret) ++ *devp = dev; ++ } ++ return ret; + } + + int uclass_bind_device(struct udevice *dev) +From patchwork Tue Jun 20 06:35:53 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [U-Boot,v2] efi: Export mbr partition for EFI. +From: Emmanuel Vadot +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 +board rely partially or fully on MBR (BeagleBone, RPI and probably others). +This export the MBR partition as logical partition which is useful to efi +application that cannot read raw disks. + +Signed-off-by: Emmanuel Vadot +--- +Changes in v2: + * Pass correct arg to efi_disk_create_mbr + + lib/efi_loader/efi_disk.c | 59 +++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 50 insertions(+), 9 deletions(-) + +diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c +index 39e602a868..097bb544d7 100644 +--- a/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, + const char *if_typename, + const struct blk_desc *desc, + int dev_index, +- lbaint_t offset) ++ disk_partition_t *info, ++ int logical_partition) + { + struct efi_disk_obj *diskobj; + struct efi_device_path_file_path *dp; + int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2); ++ static int mediaid; + + /* Don't add empty devices */ + if (!desc->lba) +@@ -218,16 +220,26 @@ static void efi_disk_add_dev(const char *name, + diskobj->ops = block_io_disk_template; + 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->media.removable_media = desc->removable; + diskobj->media.media_present = 1; +- diskobj->media.block_size = desc->blksz; +- diskobj->media.io_align = desc->blksz; +- diskobj->media.last_block = desc->lba - offset; ++ diskobj->media.media_id = mediaid++; + diskobj->ops.media = &diskobj->media; ++ if (logical_partition) { ++ diskobj->media.logical_partition = 1; ++ diskobj->media.block_size = info->blksz; ++ diskobj->media.io_align = info->blksz; ++ diskobj->media.last_block = info->size - 1; ++ } else { ++ diskobj->media.block_size = desc->blksz; ++ diskobj->media.io_align = desc->blksz; ++ diskobj->media.last_block = desc->lba; ++ } + + /* Fill in device path */ + dp = (void*)&diskobj[1]; +@@ -262,8 +274,33 @@ static int efi_disk_create_eltorito(struct blk_desc *desc, + while (!part_get_info(desc, part, &info)) { + snprintf(devname, sizeof(devname), "%s:%d", pdevname, + part); +- efi_disk_add_dev(devname, if_typename, desc, diskid, +- info.start); ++ efi_disk_add_dev(devname, if_typename, desc, diskid, 0, 0); ++ 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++; + disks++; + } +@@ -296,9 +333,11 @@ int efi_disk_register(void) + const char *if_typename = dev->driver->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, ++ NULL, 0); + disks++; + ++ disks += efi_disk_create_mbr(desc, if_typename, desc->devnum); + /* + * El Torito images show up as block devices in an EFI world, + * so let's create them here +@@ -332,15 +371,17 @@ int efi_disk_register(void) + + snprintf(devname, sizeof(devname), "%s%d", + if_typename, i); +- efi_disk_add_dev(devname, if_typename, desc, i, 0); ++ efi_disk_add_dev(devname, if_typename, desc, i, 0, 0); + disks++; + ++ disks += efi_disk_create_mbr(desc, if_typename, i); + /* + * El Torito images show up as block devices + * in an EFI world, so let's create them here + */ + disks += efi_disk_create_eltorito(desc, if_typename, + i, devname); ++ + } + } + #endif