Hi, On efiboot for arm64
boot> boot sd0k:bsd.rd or boot> set device sd0l doesn't work properly. The diff makes it can boot from paritions other than "a". ok? comments? Index: sys/arch/arm64/arm64/autoconf.c =================================================================== RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/arm64/autoconf.c,v retrieving revision 1.9 diff -u -p -r1.9 autoconf.c --- sys/arch/arm64/arm64/autoconf.c 6 Feb 2018 20:35:21 -0000 1.9 +++ sys/arch/arm64/arm64/autoconf.c 4 Jan 2019 13:40:58 -0000 @@ -19,6 +19,7 @@ #include <sys/systm.h> #include <sys/conf.h> #include <sys/device.h> +#include <sys/disklabel.h> #include <sys/reboot.h> #include <sys/socket.h> #include <sys/hibernate.h> @@ -68,7 +69,8 @@ diskconf(void) { size_t len; char *p; - dev_t tmpdev; + dev_t tmpdev = NODEV; + int part = 0; extern uint8_t *bootmac; if (*boot_file != '\0') @@ -82,6 +84,8 @@ diskconf(void) else len = strlen(boot_file); bootdv = parsedisk(boot_file, len, 0, &tmpdev); + if (tmpdev != NODEV) + part = DISKPART(tmpdev); } #if defined(NFSCLIENT) @@ -105,7 +109,7 @@ diskconf(void) else printf("boot device: lookup %s failed \n", boot_file); - setroot(bootdv, 0, RB_USERREQ); + setroot(bootdv, part, RB_USERREQ); dumpconf(); #ifdef HIBERNATE Index: sys/arch/arm64/stand/efiboot/efidev.c =================================================================== RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/stand/efiboot/efidev.c,v retrieving revision 1.2 diff -u -p -r1.2 efidev.c --- sys/arch/arm64/stand/efiboot/efidev.c 25 Aug 2018 20:43:39 -0000 1.2 +++ sys/arch/arm64/stand/efiboot/efidev.c 4 Jan 2019 13:40:58 -0000 @@ -484,7 +484,7 @@ efiopen(struct open_file *f, ...) part = va_arg(ap, u_int); va_end(ap); - if (unit != 0) + if (unit != 0 || MAXPARTITIONS <= part) return (ENXIO); diskinfo.ed.blkio = disk; @@ -512,7 +512,7 @@ efistrategy(void *devdata, int rw, daddr nsect = (size + DEV_BSIZE - 1) / DEV_BSIZE; blk += DL_SECTOBLK(&dip->disklabel, - dip->disklabel.d_partitions[B_PARTITION(dip->sc_part)].p_offset); + dip->disklabel.d_partitions[dip->sc_part].p_offset); if (blk < 0) error = EINVAL; Index: sys/arch/arm64/stand/efiboot/exec.c =================================================================== RCS file: /disk/cvs/openbsd/src/sys/arch/arm64/stand/efiboot/exec.c,v retrieving revision 1.5 diff -u -p -r1.5 exec.c --- sys/arch/arm64/stand/efiboot/exec.c 8 Feb 2017 09:18:24 -0000 1.5 +++ sys/arch/arm64/stand/efiboot/exec.c 4 Jan 2019 13:40:58 -0000 @@ -94,7 +94,7 @@ run_loadfile(u_long *marks, int howto) char *cp; void *fdt; - snprintf(args, sizeof(args) - 8, "%s:%s", cmd.bootdev, cmd.image); + strlcpy(args, cmd.path, sizeof(args)); cp = args + strlen(args); *cp++ = ' ';