Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-15 Thread Michele Curti
On Sun, May 14, 2017 at 07:31:09PM +0900, YASUOKA Masahiko wrote:
> On Fri, 12 May 2017 16:15:52 +0200
> 
> It seems the problem which had been fixed previous is happening again.
> Does efidev.c have following $OpenBSD$?
> 
>   /*  $OpenBSD: efidev.c,v 1.25 2017/05/11 01:37:24 yasuoka Exp $ */
>

You are right, I wasn't following HEAD, so cvs update did not 
retrieved the latest version.. Sorry for the trouble.

> 
> Also let me update the diff.

Works for me :)

Thank you,
Michele

> 
> diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c 
> b/sys/arch/amd64/stand/efiboot/efiboot.c
> index efa371f2ecd..19df6b1dc64 100644
> --- a/sys/arch/amd64/stand/efiboot/efiboot.c
> +++ b/sys/arch/amd64/stand/efiboot/efiboot.c
> @@ -52,7 +52,9 @@ static EFI_GUID  blkio_guid = BLOCK_IO_PROTOCOL;
>  static EFI_GUID   devp_guid = DEVICE_PATH_PROTOCOL;
>  u_longefi_loadaddr;
>  
> -static intefi_device_path_cmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *, int);
> +static intefi_device_path_depth(EFI_DEVICE_PATH *dp, int);
> +static intefi_device_path_ncmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *,
> + int);
>  static void   efi_heap_init(void);
>  static void   efi_memprobe_internal(void);
>  static void   efi_video_init(void);
> @@ -159,7 +161,7 @@ struct disklist_lh efi_disklist;
>  void
>  efi_diskprobe(void)
>  {
> - int  i, bootdev;
> + int  i, bootdev = 0, depth = -1;
>   UINTNsz;
>   EFI_STATUS   status;
>   EFI_HANDLE  *handles = NULL;
> @@ -180,8 +182,10 @@ efi_diskprobe(void)
>   if (handles == NULL || EFI_ERROR(status))
>   panic("BS->LocateHandle() returns %d", status);
>  
> + if (efi_bootdp != NULL)
> + depth = efi_device_path_depth(efi_bootdp, MEDIA_DEVICE_PATH);
> +
>   for (i = 0; i < sz / sizeof(EFI_HANDLE); i++) {
> - bootdev = 0;
>   status = EFI_CALL(BS->HandleProtocol, handles[i], _guid,
>   (void **));
>   if (EFI_ERROR(status))
> @@ -193,53 +197,57 @@ efi_diskprobe(void)
>   di = alloc(sizeof(struct diskinfo));
>   efid_init(di, blkio);
>  
> - if (efi_bootdp == NULL)
> + if (efi_bootdp == NULL || depth == -1 || bootdev != 0)
>   goto next;
>   status = EFI_CALL(BS->HandleProtocol, handles[i], _guid,
>   (void **));
>   if (EFI_ERROR(status))
>   goto next;
> - if (!efi_device_path_cmp(efi_bootdp, dp, HARDWARE_DEVICE_PATH)&&
> - !efi_device_path_cmp(efi_bootdp, dp, ACPI_DEVICE_PATH) &&
> - !efi_device_path_cmp(efi_bootdp, dp, MESSAGING_DEVICE_PATH))
> + if (efi_device_path_ncmp(efi_bootdp, dp, depth) == 0) {
> + TAILQ_INSERT_HEAD(_disklist, di, list);
>   bootdev = 1;
> + continue;
> + }
>  next:
> - if (bootdev)
> - TAILQ_INSERT_HEAD(_disklist, di, list);
> - else
> - TAILQ_INSERT_TAIL(_disklist, di, list);
> + TAILQ_INSERT_TAIL(_disklist, di, list);
>   }
>  
>   free(handles, sz);
>  }
>  
>  static int
> -efi_device_path_cmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int dptype)
> +efi_device_path_depth(EFI_DEVICE_PATH *dp, int dptype)
>  {
> - int  cmp;
> - EFI_DEVICE_PATH *dp, *dpt_a = NULL, *dpt_b = NULL;
> + int i;
>  
> - for (dp = dpa; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
> - if (DevicePathType(dp) == dptype) {
> - dpt_a = dp;
> - break;
> - }
> - }
> - for (dp = dpb; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
> - if (DevicePathType(dp) == dptype) {
> - dpt_b = dp;
> - break;
> - }
> + for (i = 0; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp), i++) {
> + if (DevicePathType(dp) == dptype)
> + return (i);
>   }
>  
> - if (dpt_a && dpt_b) {
> - cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
> + return (-1);
> +}
> +
> +static int
> +efi_device_path_ncmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int deptn)
> +{
> + int  i, cmp;
> +
> + for (i = 0; i < deptn; i++) {
> + if (IsDevicePathEnd(dpa) || IsDevicePathEnd(dpb))
> + return ((IsDevicePathEnd(dpa) && IsDevicePathEnd(dpb))
> + ? 0 : (IsDevicePathEnd(dpa))? -1 : 1);
> + cmp = DevicePathNodeLength(dpa) - DevicePathNodeLength(dpb);
> + if (cmp)
> + return (cmp);
> + cmp = memcmp(dpa, dpb, DevicePathNodeLength(dpa));
>   if (cmp)
>  

Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-14 Thread YASUOKA Masahiko
On Fri, 12 May 2017 16:15:52 +0200
Michele Curti  wrote:
> On Fri, May 12, 2017 at 06:01:35PM +0900, YASUOKA Masahiko wrote:
>> > And something like this?
>> 
>> Yes.  What we need to do is comparing the device path node before
>> MEDIA_DEVICE_PATH type.  So I rewrote it like
>> 
>>   media_idx = device_path_index(rootdp, MEDIA_DEVICE_PATH);
>>   for (...)
>> if (device_path_ncmp(rootdp, dp, media_idx) == 0)
>>bootdev = 1;
>> 
>> ok? comment?
>> 
> 
> The device order is correct, the laptop boots without problems,

Thank you for your test.

> but executing "machine diskinfo" prints a source file now..
> 
> https://www.youtube.com/watch?v=EUao9Fq5Bww
> 
> It seems gnu/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp

It seems the problem which had been fixed previous is happening again.
Does efidev.c have following $OpenBSD$?

  /*  $OpenBSD: efidev.c,v 1.25 2017/05/11 01:37:24 yasuoka Exp $ */


Also let me update the diff.

diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c 
b/sys/arch/amd64/stand/efiboot/efiboot.c
index efa371f2ecd..19df6b1dc64 100644
--- a/sys/arch/amd64/stand/efiboot/efiboot.c
+++ b/sys/arch/amd64/stand/efiboot/efiboot.c
@@ -52,7 +52,9 @@ static EFI_GUIDblkio_guid = BLOCK_IO_PROTOCOL;
 static EFI_GUID devp_guid = DEVICE_PATH_PROTOCOL;
 u_long  efi_loadaddr;
 
-static int  efi_device_path_cmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *, int);
+static int  efi_device_path_depth(EFI_DEVICE_PATH *dp, int);
+static int  efi_device_path_ncmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *,
+   int);
 static void efi_heap_init(void);
 static void efi_memprobe_internal(void);
 static void efi_video_init(void);
@@ -159,7 +161,7 @@ struct disklist_lh efi_disklist;
 void
 efi_diskprobe(void)
 {
-   int  i, bootdev;
+   int  i, bootdev = 0, depth = -1;
UINTNsz;
EFI_STATUS   status;
EFI_HANDLE  *handles = NULL;
@@ -180,8 +182,10 @@ efi_diskprobe(void)
if (handles == NULL || EFI_ERROR(status))
panic("BS->LocateHandle() returns %d", status);
 
+   if (efi_bootdp != NULL)
+   depth = efi_device_path_depth(efi_bootdp, MEDIA_DEVICE_PATH);
+
for (i = 0; i < sz / sizeof(EFI_HANDLE); i++) {
-   bootdev = 0;
status = EFI_CALL(BS->HandleProtocol, handles[i], _guid,
(void **));
if (EFI_ERROR(status))
@@ -193,53 +197,57 @@ efi_diskprobe(void)
di = alloc(sizeof(struct diskinfo));
efid_init(di, blkio);
 
-   if (efi_bootdp == NULL)
+   if (efi_bootdp == NULL || depth == -1 || bootdev != 0)
goto next;
status = EFI_CALL(BS->HandleProtocol, handles[i], _guid,
(void **));
if (EFI_ERROR(status))
goto next;
-   if (!efi_device_path_cmp(efi_bootdp, dp, HARDWARE_DEVICE_PATH)&&
-   !efi_device_path_cmp(efi_bootdp, dp, ACPI_DEVICE_PATH) &&
-   !efi_device_path_cmp(efi_bootdp, dp, MESSAGING_DEVICE_PATH))
+   if (efi_device_path_ncmp(efi_bootdp, dp, depth) == 0) {
+   TAILQ_INSERT_HEAD(_disklist, di, list);
bootdev = 1;
+   continue;
+   }
 next:
-   if (bootdev)
-   TAILQ_INSERT_HEAD(_disklist, di, list);
-   else
-   TAILQ_INSERT_TAIL(_disklist, di, list);
+   TAILQ_INSERT_TAIL(_disklist, di, list);
}
 
free(handles, sz);
 }
 
 static int
-efi_device_path_cmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int dptype)
+efi_device_path_depth(EFI_DEVICE_PATH *dp, int dptype)
 {
-   int  cmp;
-   EFI_DEVICE_PATH *dp, *dpt_a = NULL, *dpt_b = NULL;
+   int i;
 
-   for (dp = dpa; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_a = dp;
-   break;
-   }
-   }
-   for (dp = dpb; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_b = dp;
-   break;
-   }
+   for (i = 0; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp), i++) {
+   if (DevicePathType(dp) == dptype)
+   return (i);
}
 
-   if (dpt_a && dpt_b) {
-   cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
+   return (-1);
+}
+
+static int
+efi_device_path_ncmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int deptn)
+{
+   int  i, cmp;
+
+   for (i = 0; i < deptn; i++) {
+   if (IsDevicePathEnd(dpa) || 

Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-12 Thread Michele Curti
On Fri, May 12, 2017 at 06:01:35PM +0900, YASUOKA Masahiko wrote:
> 
> > And something like this?
> 
> Yes.  What we need to do is comparing the device path node before
> MEDIA_DEVICE_PATH type.  So I rewrote it like
> 
>   media_idx = device_path_index(rootdp, MEDIA_DEVICE_PATH);
>   for (...)
> if (device_path_ncmp(rootdp, dp, media_idx) == 0)
>bootdev = 1;
> 
> ok? comment?
> 

The device order is correct, the laptop boots without problems,
but executing "machine diskinfo" prints a source file now..

https://www.youtube.com/watch?v=EUao9Fq5Bww

It seems gnu/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp


Michele



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-12 Thread YASUOKA Masahiko

On Fri, 12 May 2017 09:33:04 +0200
Michele Curti  wrote:
> On Fri, May 12, 2017 at 07:27:45AM +0200, Michele Curti wrote:
>> 
>> The efi_device_path_cmp() compares only a path node.
>> I tried the following diff just to see if I undestood something, 
>> hd0 is now set corrctly to the 29GB disk.
>> 
>> 
>> Index: efiboot/efiboot.c
>> ===
>> RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
>> retrieving revision 1.17
>> diff -u -p -r1.17 efiboot.c
>> --- efiboot/efiboot.c3 Mar 2017 08:56:18 -   1.17
>> +++ efiboot/efiboot.c12 May 2017 05:23:21 -
>> @@ -233,10 +233,21 @@ efi_device_path_cmp(EFI_DEVICE_PATH *dpa
>>  }
>>  
>>  if (dpt_a && dpt_b) {
>> -cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
>> -if (cmp)
>> -return (cmp);
>> -return (memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a)));
>> +for (;!IsDevicePathEnd(dpt_a);) {
>> +cmp = DevicePathNodeLength(dpt_a) - 
>> DevicePathNodeLength(dpt_b);
>> +if (cmp)
>> +return (cmp);
>> +cmp = memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a));
>> +if (cmp)
>> +return (cmp);
>> +dpt_a = NextDevicePathNode(dpt_a);
>> +dpt_b = NextDevicePathNode(dpt_b);
>> +cmp = IsDevicePathEnd(dpt_a) - IsDevicePathEnd(dpt_b);
>> +if (cmp)
>> +return (cmp);
>> +}
>> +
>> +return 0;
>>  }
>>  
>>  return ((uintptr_t)dpt_a - (uintptr_t)dpt_b);
> 
> And something like this?

Yes.  What we need to do is comparing the device path node before
MEDIA_DEVICE_PATH type.  So I rewrote it like

  media_idx = device_path_index(rootdp, MEDIA_DEVICE_PATH);
  for (...)
if (device_path_ncmp(rootdp, dp, media_idx) == 0)
   bootdev = 1;

ok? comment?

diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c 
b/sys/arch/amd64/stand/efiboot/efiboot.c
index efa371f2ecd..b78ca2b350e 100644
--- a/sys/arch/amd64/stand/efiboot/efiboot.c
+++ b/sys/arch/amd64/stand/efiboot/efiboot.c
@@ -52,7 +52,9 @@ static EFI_GUIDblkio_guid = BLOCK_IO_PROTOCOL;
 static EFI_GUID devp_guid = DEVICE_PATH_PROTOCOL;
 u_long  efi_loadaddr;
 
-static int  efi_device_path_cmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *, int);
+static int  efi_device_path_index(EFI_DEVICE_PATH *dp, int);
+static int  efi_device_path_ncmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *,
+   int);
 static void efi_heap_init(void);
 static void efi_memprobe_internal(void);
 static void efi_video_init(void);
@@ -159,7 +161,7 @@ struct disklist_lh efi_disklist;
 void
 efi_diskprobe(void)
 {
-   int  i, bootdev;
+   int  i, media_idx, bootdev;
UINTNsz;
EFI_STATUS   status;
EFI_HANDLE  *handles = NULL;
@@ -180,6 +182,8 @@ efi_diskprobe(void)
if (handles == NULL || EFI_ERROR(status))
panic("BS->LocateHandle() returns %d", status);
 
+   media_idx = efi_device_path_index(efi_bootdp, MEDIA_DEVICE_PATH);
+
for (i = 0; i < sz / sizeof(EFI_HANDLE); i++) {
bootdev = 0;
status = EFI_CALL(BS->HandleProtocol, handles[i], _guid,
@@ -199,9 +203,7 @@ efi_diskprobe(void)
(void **));
if (EFI_ERROR(status))
goto next;
-   if (!efi_device_path_cmp(efi_bootdp, dp, HARDWARE_DEVICE_PATH)&&
-   !efi_device_path_cmp(efi_bootdp, dp, ACPI_DEVICE_PATH) &&
-   !efi_device_path_cmp(efi_bootdp, dp, MESSAGING_DEVICE_PATH))
+   if (efi_device_path_ncmp(efi_bootdp, dp, media_idx) == 0)
bootdev = 1;
 next:
if (bootdev)
@@ -214,32 +216,39 @@ next:
 }
 
 static int
-efi_device_path_cmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int dptype)
+efi_device_path_index(EFI_DEVICE_PATH *dp, int dptype)
 {
-   int  cmp;
-   EFI_DEVICE_PATH *dp, *dpt_a = NULL, *dpt_b = NULL;
+   int idx = 0;
 
-   for (dp = dpa; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_a = dp;
+   for (idx = 0; !IsDevicePathEnd(dp); idx++) {
+   if (DevicePathType(dp) == dptype)
break;
-   }
-   }
-   for (dp = dpb; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_b = dp;
-   break;
-   }
+   dp = NextDevicePathNode(dp);
}

Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-12 Thread Michele Curti
On Fri, May 12, 2017 at 07:27:45AM +0200, Michele Curti wrote:
> 
> The efi_device_path_cmp() compares only a path node.
> I tried the following diff just to see if I undestood something, 
> hd0 is now set corrctly to the 29GB disk.
> 
> 
> Index: efiboot/efiboot.c
> ===
> RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 efiboot.c
> --- efiboot/efiboot.c 3 Mar 2017 08:56:18 -   1.17
> +++ efiboot/efiboot.c 12 May 2017 05:23:21 -
> @@ -233,10 +233,21 @@ efi_device_path_cmp(EFI_DEVICE_PATH *dpa
>   }
>  
>   if (dpt_a && dpt_b) {
> - cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
> - if (cmp)
> - return (cmp);
> - return (memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a)));
> + for (;!IsDevicePathEnd(dpt_a);) {
> + cmp = DevicePathNodeLength(dpt_a) - 
> DevicePathNodeLength(dpt_b);
> + if (cmp)
> + return (cmp);
> + cmp = memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a));
> + if (cmp)
> + return (cmp);
> + dpt_a = NextDevicePathNode(dpt_a);
> + dpt_b = NextDevicePathNode(dpt_b);
> + cmp = IsDevicePathEnd(dpt_a) - IsDevicePathEnd(dpt_b);
> + if (cmp)
> + return (cmp);
> + }
> +
> + return 0;
>   }
>  
>   return ((uintptr_t)dpt_a - (uintptr_t)dpt_b);

And something like this?


Index: efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
retrieving revision 1.17
diff -u -p -r1.17 efiboot.c
--- efiboot/efiboot.c   3 Mar 2017 08:56:18 -   1.17
+++ efiboot/efiboot.c   12 May 2017 07:02:10 -
@@ -52,7 +52,7 @@ static EFI_GUIDblkio_guid = BLOCK_IO_
 static EFI_GUID devp_guid = DEVICE_PATH_PROTOCOL;
 u_long  efi_loadaddr;
 
-static int  efi_device_path_cmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *, int);
+static int  efi_device_path_cmp(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
 static void efi_heap_init(void);
 static void efi_memprobe_internal(void);
 static void efi_video_init(void);
@@ -199,9 +199,7 @@ efi_diskprobe(void)
(void **));
if (EFI_ERROR(status))
goto next;
-   if (!efi_device_path_cmp(efi_bootdp, dp, HARDWARE_DEVICE_PATH)&&
-   !efi_device_path_cmp(efi_bootdp, dp, ACPI_DEVICE_PATH) &&
-   !efi_device_path_cmp(efi_bootdp, dp, MESSAGING_DEVICE_PATH))
+   if (efi_device_path_cmp(efi_bootdp, dp) == 0)
bootdev = 1;
 next:
if (bootdev)
@@ -214,32 +212,29 @@ next:
 }
 
 static int
-efi_device_path_cmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb, int dptype)
+efi_device_path_cmp(EFI_DEVICE_PATH *dpa, EFI_DEVICE_PATH *dpb)
 {
-   int  cmp;
-   EFI_DEVICE_PATH *dp, *dpt_a = NULL, *dpt_b = NULL;
+   int cmp;
 
-   for (dp = dpa; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_a = dp;
-   break;
-   }
-   }
-   for (dp = dpb; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
-   if (DevicePathType(dp) == dptype) {
-   dpt_b = dp;
-   break;
-   }
-   }
-
-   if (dpt_a && dpt_b) {
-   cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
-   if (cmp)
-   return (cmp);
-   return (memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a)));
-   }
+   cmp = IsDevicePathEnd(dpa) - IsDevicePathEnd(dpb);
+   if (cmp)
+   return cmp;
+   if (IsDevicePathEnd(dpa))
+   return 0;
+   cmp = DevicePathType(dpa) - DevicePathType(dpb);
+   if (cmp)
+   return cmp;
+   cmp = DevicePathSubType(dpa) - DevicePathSubType(dpb);
+   if (cmp)
+   return cmp;
+   cmp = DevicePathNodeLength(dpa) - DevicePathNodeLength(dpb);
+   if (cmp)
+   return cmp;
+   cmp = memcmp(dpa, dpb, DevicePathNodeLength(dpa));
+   if (cmp)
+   return cmp;
 
-   return ((uintptr_t)dpt_a - (uintptr_t)dpt_b);
+   return efi_device_path_cmp(NextDevicePathNode(dpa), 
NextDevicePathNode(dpb));
 }
 
 /***



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-11 Thread Michele Curti
On Fri, May 12, 2017 at 11:05:13AM +0900, YASUOKA Masahiko wrote:
> On Thu, 11 May 2017 23:45:17 +0200
> Michele Curti  wrote:
> 
> All disks are identical in HARDWARE_DEVICE_PATH and ACPI_DEVICE_PATH
> and they all don't have MESSAGING_DEVICE_PATH.  So the boot loader
> mistakenly treats all of them as the bootdisk..
> 
> I'd like to know whether there is a way to distigish those disks.  Can
> you try the diff following?
> 
> diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c 
> b/sys/arch/amd64/stand/efiboot/efiboot.c
> index efa371f2ecd..891b6c75cc9 100644
> --- a/sys/arch/amd64/stand/efiboot/efiboot.c
> +++ b/sys/arch/amd64/stand/efiboot/efiboot.c
> @@ -208,6 +208,14 @@ next:
>   TAILQ_INSERT_HEAD(_disklist, di, list);
>   else
>   TAILQ_INSERT_TAIL(_disklist, di, list);
> +
> + printf("%d\n", i);
> + for (; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
> + int ii;
> + for (ii = 0; ii < DevicePathNodeLength(dp); ii++)
> + printf("%x ", *((u_char *)dp + ii));
> + printf("\n");
> + }
>   }
>  
>   free(handles, sz);
> 

0
2 1 c 0 d0 41 3 a 0 0 0 0
1 1 6 0 0 17
1 5 8 0 0 0 0 0
1
2 1 c 0 d0 41 3 a 0 0 0 0
1 1 6 0 0 17
1 5 8 0 1 0 0 0
2
2 1 c 0 d0 41 3 a 0 0 0 0
1 1 6 0 0 17
1 5 8 0 2 0 0 0


The efi_device_path_cmp() compares only a path node.
I tried the following diff just to see if I undestood something, 
hd0 is now set corrctly to the 29GB disk.


Index: efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
retrieving revision 1.17
diff -u -p -r1.17 efiboot.c
--- efiboot/efiboot.c   3 Mar 2017 08:56:18 -   1.17
+++ efiboot/efiboot.c   12 May 2017 05:23:21 -
@@ -233,10 +233,21 @@ efi_device_path_cmp(EFI_DEVICE_PATH *dpa
}
 
if (dpt_a && dpt_b) {
-   cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
-   if (cmp)
-   return (cmp);
-   return (memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a)));
+   for (;!IsDevicePathEnd(dpt_a);) {
+   cmp = DevicePathNodeLength(dpt_a) - 
DevicePathNodeLength(dpt_b);
+   if (cmp)
+   return (cmp);
+   cmp = memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a));
+   if (cmp)
+   return (cmp);
+   dpt_a = NextDevicePathNode(dpt_a);
+   dpt_b = NextDevicePathNode(dpt_b);
+   cmp = IsDevicePathEnd(dpt_a) - IsDevicePathEnd(dpt_b);
+   if (cmp)
+   return (cmp);
+   }
+
+   return 0;
}
 
return ((uintptr_t)dpt_a - (uintptr_t)dpt_b);



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-11 Thread YASUOKA Masahiko
On Thu, 11 May 2017 23:45:17 +0200
Michele Curti  wrote:
> On Wed, May 10, 2017 at 08:35:28PM +0200, Patrick Wildt wrote:
>> 
>> I don't think this is the correct fix.  It might solve your issue, but I
>> don't think it's completely right.  So EFI has those so called device
>> paths.  A path is basically a list of nodes.  To compare two paths you
>> need to compare the whole path and not just a single node of it.  If you
>> store dp instead of dp0 you will basically only save a part of the path,
>> not the full path.
>> 
>> What you can do is print the full path of efi_bootdp like..
>> 
>> for (dp = efi_bootdp; !IsDevicePathEnd(dp);
>> dp = NextDevicePathNode(dp)) {
>> printf("%x %x - ", DevicePathType(dp), DevicePathSubType(dp));
>> }
>> printf("\n");
>> 
>> And do the same for the DPs that are being put into the
>> efi_device_path_cmp function.  That will at least print the types, but
>> not the content of the nodes.  That's a start into figuring out why it
>> does not correctly compare the paths.
>> 
>> Maybe there's a bug in the compare code?
> 
> Sorry, only now I understood what you said... Got
> 
> 2 1 - 1 1 - 1 5 - 4 1 -
> 
> (2 1) (2 1) da db cmp da db cmp diff bootdev 1
> (2 1) (2 1) da db cmp da db cmp diff bootdev 1
> (2 1) (2 1) da db cmp da db cmp diff bootdev 1
> 
> with the following diff

All disks are identical in HARDWARE_DEVICE_PATH and ACPI_DEVICE_PATH
and they all don't have MESSAGING_DEVICE_PATH.  So the boot loader
mistakenly treats all of them as the bootdisk..

I'd like to know whether there is a way to distigish those disks.  Can
you try the diff following?

diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c 
b/sys/arch/amd64/stand/efiboot/efiboot.c
index efa371f2ecd..891b6c75cc9 100644
--- a/sys/arch/amd64/stand/efiboot/efiboot.c
+++ b/sys/arch/amd64/stand/efiboot/efiboot.c
@@ -208,6 +208,14 @@ next:
TAILQ_INSERT_HEAD(_disklist, di, list);
else
TAILQ_INSERT_TAIL(_disklist, di, list);
+
+   printf("%d\n", i);
+   for (; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
+   int ii;
+   for (ii = 0; ii < DevicePathNodeLength(dp); ii++)
+   printf("%x ", *((u_char *)dp + ii));
+   printf("\n");
+   }
}
 
free(handles, sz);



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-11 Thread Michele Curti
On Wed, May 10, 2017 at 08:35:28PM +0200, Patrick Wildt wrote:
> 
> I don't think this is the correct fix.  It might solve your issue, but I
> don't think it's completely right.  So EFI has those so called device
> paths.  A path is basically a list of nodes.  To compare two paths you
> need to compare the whole path and not just a single node of it.  If you
> store dp instead of dp0 you will basically only save a part of the path,
> not the full path.
> 
> What you can do is print the full path of efi_bootdp like..
> 
> for (dp = efi_bootdp; !IsDevicePathEnd(dp);
> dp = NextDevicePathNode(dp)) {
> printf("%x %x - ", DevicePathType(dp), DevicePathSubType(dp));
> }
> printf("\n");
> 
> And do the same for the DPs that are being put into the
> efi_device_path_cmp function.  That will at least print the types, but
> not the content of the nodes.  That's a start into figuring out why it
> does not correctly compare the paths.
> 
> Maybe there's a bug in the compare code?

Sorry, only now I understood what you said... Got

2 1 - 1 1 - 1 5 - 4 1 -

(2 1) (2 1) da db cmp da db cmp diff bootdev 1
(2 1) (2 1) da db cmp da db cmp diff bootdev 1
(2 1) (2 1) da db cmp da db cmp diff bootdev 1

with the following diff


Index: efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
retrieving revision 1.17
diff -u -p -r1.17 efiboot.c
--- efiboot/efiboot.c   3 Mar 2017 08:56:18 -   1.17
+++ efiboot/efiboot.c   11 May 2017 21:39:14 -
@@ -89,6 +89,8 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
if (status == EFI_SUCCESS) {
for (dp = dp0; !IsDevicePathEnd(dp);
dp = NextDevicePathNode(dp)) {
+   printf("%x %x - ", DevicePathType(dp),
+   DevicePathSubType(dp));
if (DevicePathType(dp) == MEDIA_DEVICE_PATH &&
DevicePathSubType(dp) == MEDIA_HARDDRIVE_DP) {
bios_bootdev = 0x80;
@@ -96,6 +98,7 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
break;
}
}
+   printf("\n");
}
 
 #ifdef __amd64__
@@ -199,10 +202,18 @@ efi_diskprobe(void)
(void **));
if (EFI_ERROR(status))
goto next;
+   printf("(%x %x) (%x %x) ",
+   DevicePathType(efi_bootdp),
+   DevicePathSubType(efi_bootdp),
+   DevicePathType(dp),
+   DevicePathSubType(dp)
+   );
if (!efi_device_path_cmp(efi_bootdp, dp, HARDWARE_DEVICE_PATH)&&
!efi_device_path_cmp(efi_bootdp, dp, ACPI_DEVICE_PATH) &&
!efi_device_path_cmp(efi_bootdp, dp, MESSAGING_DEVICE_PATH))
bootdev = 1;
+
+   printf("bootdev %d\n", bootdev);
 next:
if (bootdev)
TAILQ_INSERT_HEAD(_disklist, di, list);
@@ -222,12 +233,14 @@ efi_device_path_cmp(EFI_DEVICE_PATH *dpa
for (dp = dpa; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
if (DevicePathType(dp) == dptype) {
dpt_a = dp;
+   printf("da ");
break;
}
}
for (dp = dpb; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
if (DevicePathType(dp) == dptype) {
dpt_b = dp;
+   printf("db ");
break;
}
}
@@ -236,8 +249,11 @@ efi_device_path_cmp(EFI_DEVICE_PATH *dpa
cmp = DevicePathNodeLength(dpt_a) - DevicePathNodeLength(dpt_b);
if (cmp)
return (cmp);
+   printf("cmp ");
return (memcmp(dpt_a, dpt_b, DevicePathNodeLength(dpt_a)));
}
+
+   printf("diff ");
 
return ((uintptr_t)dpt_a - (uintptr_t)dpt_b);
 }



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-11 Thread Michele Curti
On Thu, May 11, 2017 at 05:48:34PM +0900, YASUOKA Masahiko wrote:
> Hi,
> 
> Thank you for your tests,
> 
> On Thu, 11 May 2017 07:40:42 +0200
> 
...
> > So I can use the stock bootloader without changes but I must do a 
> > 
> > boot> set device hd2a
> 
> I'm not clear whether we still have a problem.
> 
> Does the boot loader select the booted disk as "hd0" correctly?
> 
> If you booted from 29GB disk, "machine diskinfo" must be:
> 
>   DiskBlkSiz  IoAlign SizeFlags   Checksum
>   hd0 512 1   29GB0x2 0xad4a42c3
>   hd1 512 1   4MB 0x0 0x0
>   hd2 512 1   4MB 0x0 0x0
>

There is still a problem because I booted from the 29GB disk, the 
bootloader selects hd0, but the machine diskinfo order is:
DiskBlkSiz  IoAlign SizeFlags   Checksum
hd0 512 1   4MB 0x0 0x0
hd1 512 1   4MB 0x0 0x0
hd2 512 1   29GB0x2 0xad4a42c3

I don't know if it is related but a problem is probably 
(efiboot.c, line 87) here:
status = EFI_CALL(BS->HandleProtocol, imgp->DeviceHandle,
_guid, (void **));

where status is EFI_SUCCESS but dp0 remains NULL, so the following 
for loop loops through invalid device paths until a causal 
IsDevicePathEnd() true.

I not sure of what I'm saying because I have not investigated yet, 
I have to read some EFI documentation first to understand what's 
happening.


Thank you for the help,
Michele
 
> --yasuoka



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-11 Thread YASUOKA Masahiko
Hi,

Thank you for your tests,

On Thu, 11 May 2017 07:40:42 +0200
Michele Curti  wrote:
> On Wed, May 10, 2017 at 08:35:28PM +0200, Patrick Wildt wrote:
>> On Wed, May 10, 2017 at 03:14:30PM +0200, Stefan Sperling wrote:
>> > On Tue, May 09, 2017 at 09:47:14PM +0200, Michele Curti wrote:
>> > > On Tue, May 09, 2017 at 09:36:02PM +0200, Michele Curti wrote:
>> > > > On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
>> > > > > Hi all, I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay
>> > > > > trail, 32 bit efi, 64 bit os) but the bootloader do not correctly
>> > > > > detect the internal disk.
>> > > > > 
>> > > > > I also tried a fresh install, but things do not change.  Boot fails
>> > > > > and when I do a "machine diskinfo" I got a lot of "?" symbols (a 
>> > > > > video
>> > > > > here https://www.youtube.com/watch?v=fsomNX-oFTQ )
>> > > > > 
> 
> Thanks to yasuoka fix I just noted that using dp0 instead of dp 
> changes the diskinfo disks order

Yes,

> # setting efi_bootdp = dp;
> 
> Disk  BlkSiz  IoAlign SizeFlags   Checksum
> hd0   512 1   29GB0x2 0xad4a42c3
> hd1   512 1   4MB 0x0 0x0
> hd2   512 1   4MB 0x0 0x0
> 
> # setting efi_bootdp = dp0;
> 
> Disk  BlkSiz  IoAlign SizeFlags   Checksum
> hd0   512 1   4MB 0x0 0x0
> hd1   512 1   4MB 0x0 0x0
> hd2   512 1   29GB0x2 0xad4a42c3
> 
> So I can use the stock bootloader without changes but I must do a 
> 
> boot> set device hd2a

I'm not clear whether we still have a problem.

Does the boot loader select the booted disk as "hd0" correctly?

If you booted from 29GB disk, "machine diskinfo" must be:

  Disk  BlkSiz  IoAlign SizeFlags   Checksum
  hd0   512 1   29GB0x2 0xad4a42c3
  hd1   512 1   4MB 0x0 0x0
  hd2   512 1   4MB 0x0 0x0

--yasuoka



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread Michele Curti
On Wed, May 10, 2017 at 08:35:28PM +0200, Patrick Wildt wrote:
> On Wed, May 10, 2017 at 03:14:30PM +0200, Stefan Sperling wrote:
> > On Tue, May 09, 2017 at 09:47:14PM +0200, Michele Curti wrote:
> > > On Tue, May 09, 2017 at 09:36:02PM +0200, Michele Curti wrote:
> > > > On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
> > > > > Hi all, I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay
> > > > > trail, 32 bit efi, 64 bit os) but the bootloader do not correctly
> > > > > detect the internal disk.
> > > > > 
> > > > > I also tried a fresh install, but things do not change.  Boot fails
> > > > > and when I do a "machine diskinfo" I got a lot of "?" symbols (a video
> > > > > here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> > > > > 

Thanks to yasuoka fix I just noted that using dp0 instead of dp 
changes the diskinfo disks order

# setting efi_bootdp = dp;

DiskBlkSiz  IoAlign SizeFlags   Checksum
hd0 512 1   29GB0x2 0xad4a42c3
hd1 512 1   4MB 0x0 0x0
hd2 512 1   4MB 0x0 0x0

# setting efi_bootdp = dp0;

DiskBlkSiz  IoAlign SizeFlags   Checksum
hd0 512 1   4MB 0x0 0x0
hd1 512 1   4MB 0x0 0x0
hd2 512 1   29GB0x2 0xad4a42c3

So I can use the stock bootloader without changes but I must do a 

boot> set device hd2a

Do not know how much useful is this info...

Michele



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread Michele Curti
On Thu, May 11, 2017 at 10:42:04AM +0900, YASUOKA Masahiko wrote:
> Hi,
> 
> On Tue, 9 May 2017 10:20:03 +0200
> Michele Curti  wrote:
> > I also tried a fresh install, but things do not change.
> > Boot fails and when I do a "machine diskinfo" I got a lot of "?" 
> > symbols (a video here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> 
> Hanging on "machine diskinfo" seems to be a different problem.
> The diff is already committed.  Can you test this?

Yes, no more hangs, thank you!

boot> machine diskinfo
DiskBlkSiz  IoAlign SizeFlags   Checksum
hd0 512 1   4MB 0x0 0x0
hd1 512 1   4MB 0x0 0x0
hd2 512 1   29GB0x2 0xad4a42c3

Michele

> 
> (I'll look into another problem later)
> 
> Index: sys/arch/amd64/stand/efiboot/efidev.c
> ===
> RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efidev.c,v
> retrieving revision 1.24
> diff -u -p -r1.24 efidev.c
> --- sys/arch/amd64/stand/efiboot/efidev.c 24 Dec 2016 08:41:13 -  
> 1.24
> +++ sys/arch/amd64/stand/efiboot/efidev.c 11 May 2017 01:31:13 -
> @@ -789,7 +789,7 @@ efi_dump_diskinfo(void)
>   printf("hd%d\t%u\t%u\t%u%s\t0x%x\t0x%x\t%s\n",
>   (bdi->bios_number & 0x7f),
>   ed->blkio->Media->BlockSize,
> - ed->blkio->Media->IoAlign, siz, sizu,
> + ed->blkio->Media->IoAlign, (int)siz, sizu,
>   bdi->flags, bdi->checksum,
>   (ed->blkio->Media->RemovableMedia)? "Removable" : "");
>   }
> 



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread YASUOKA Masahiko
Hi,

On Tue, 9 May 2017 10:20:03 +0200
Michele Curti  wrote:
> I also tried a fresh install, but things do not change.
> Boot fails and when I do a "machine diskinfo" I got a lot of "?" 
> symbols (a video here https://www.youtube.com/watch?v=fsomNX-oFTQ )

Hanging on "machine diskinfo" seems to be a different problem.
The diff is already committed.  Can you test this?

(I'll look into another problem later)

Index: sys/arch/amd64/stand/efiboot/efidev.c
===
RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efidev.c,v
retrieving revision 1.24
diff -u -p -r1.24 efidev.c
--- sys/arch/amd64/stand/efiboot/efidev.c   24 Dec 2016 08:41:13 -  
1.24
+++ sys/arch/amd64/stand/efiboot/efidev.c   11 May 2017 01:31:13 -
@@ -789,7 +789,7 @@ efi_dump_diskinfo(void)
printf("hd%d\t%u\t%u\t%u%s\t0x%x\t0x%x\t%s\n",
(bdi->bios_number & 0x7f),
ed->blkio->Media->BlockSize,
-   ed->blkio->Media->IoAlign, siz, sizu,
+   ed->blkio->Media->IoAlign, (int)siz, sizu,
bdi->flags, bdi->checksum,
(ed->blkio->Media->RemovableMedia)? "Removable" : "");
}



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread Michele Curti
On Wed, May 10, 2017 at 08:35:28PM +0200, Patrick Wildt wrote:
> On Wed, May 10, 2017 at 03:14:30PM +0200, Stefan Sperling wrote:
> > On Tue, May 09, 2017 at 09:47:14PM +0200, Michele Curti wrote:
> > >   bios_bootdev = 0x80;
> > > - efi_bootdp = dp0;
> > > + efi_bootdp = dp;
> > >   break;
> > >   }
> > >   }
> > > 
> > 
> 
> I don't think this is the correct fix.  It might solve your issue, but I
> don't think it's completely right.  So EFI has those so called device
> paths.  A path is basically a list of nodes.  To compare two paths you
> need to compare the whole path and not just a single node of it.  If you
> store dp instead of dp0 you will basically only save a part of the path,
> not the full path.
> 
> What you can do is print the full path of efi_bootdp like..
> 
> for (dp = efi_bootdp; !IsDevicePathEnd(dp);
> dp = NextDevicePathNode(dp)) {
> printf("%x %x - ", DevicePathType(dp), DevicePathSubType(dp));
> }
> printf("\n");
> 

4e 6f - 5f 2d - 22 4e - 4e 55 - 3a 48 - 1e ce - and many others 

I got the same values starting the for loop with dp = dp0 or dp = NULL

So dp0 was not intialized by the EFI_CALL() above?

if (status == EFI_SUCCESS)
status = EFI_CALL(BS->HandleProtocol, imgp->DeviceHandle,
_guid, (void **));
if (status == EFI_SUCCESS) {


I'm going to study a bit about EFI.. :p

Thanks,
Michele

> And do the same for the DPs that are being put into the
> efi_device_path_cmp function.  That will at least print the types, but
> not the content of the nodes.  That's a start into figuring out why it
> does not correctly compare the paths.
> 
> Maybe there's a bug in the compare code?



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread Patrick Wildt
On Wed, May 10, 2017 at 03:14:30PM +0200, Stefan Sperling wrote:
> On Tue, May 09, 2017 at 09:47:14PM +0200, Michele Curti wrote:
> > On Tue, May 09, 2017 at 09:36:02PM +0200, Michele Curti wrote:
> > > On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
> > > > Hi all, I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay
> > > > trail, 32 bit efi, 64 bit os) but the bootloader do not correctly
> > > > detect the internal disk.
> > > > 
> > > > I also tried a fresh install, but things do not change.  Boot fails
> > > > and when I do a "machine diskinfo" I got a lot of "?" symbols (a video
> > > > here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> > > > 
> > > > How can I debug the issue?
> > > > 
> > > 
> > > Compiling bootia32.efi :p
> > > 
> > > With sys/arch/amd64/stand/efiboot/efiboot.c revision 1.15 it works,
> > > revision 1.16 it fails.
> > > 
> > > I'll try to understand, thanks, Michele
> > 
> > 
> > With the following diff it works, bye!
> 
> Looks good to me. Is anyone handling this patch?
> 
> > Index: efiboot/efiboot.c
> > ===
> > RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
> > retrieving revision 1.17
> > diff -u -p -r1.17 efiboot.c
> > --- efiboot/efiboot.c   3 Mar 2017 08:56:18 -   1.17
> > +++ efiboot/efiboot.c   9 May 2017 19:44:30 -
> > @@ -92,7 +92,7 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
> > if (DevicePathType(dp) == MEDIA_DEVICE_PATH &&
> > DevicePathSubType(dp) == MEDIA_HARDDRIVE_DP) {
> > bios_bootdev = 0x80;
> > -   efi_bootdp = dp0;
> > +   efi_bootdp = dp;
> > break;
> > }
> > }
> > 
> 

I don't think this is the correct fix.  It might solve your issue, but I
don't think it's completely right.  So EFI has those so called device
paths.  A path is basically a list of nodes.  To compare two paths you
need to compare the whole path and not just a single node of it.  If you
store dp instead of dp0 you will basically only save a part of the path,
not the full path.

What you can do is print the full path of efi_bootdp like..

for (dp = efi_bootdp; !IsDevicePathEnd(dp);
dp = NextDevicePathNode(dp)) {
printf("%x %x - ", DevicePathType(dp), DevicePathSubType(dp));
}
printf("\n");

And do the same for the DPs that are being put into the
efi_device_path_cmp function.  That will at least print the types, but
not the content of the nodes.  That's a start into figuring out why it
does not correctly compare the paths.

Maybe there's a bug in the compare code?



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-10 Thread Stefan Sperling
On Tue, May 09, 2017 at 09:47:14PM +0200, Michele Curti wrote:
> On Tue, May 09, 2017 at 09:36:02PM +0200, Michele Curti wrote:
> > On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
> > > Hi all, I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay
> > > trail, 32 bit efi, 64 bit os) but the bootloader do not correctly
> > > detect the internal disk.
> > > 
> > > I also tried a fresh install, but things do not change.  Boot fails
> > > and when I do a "machine diskinfo" I got a lot of "?" symbols (a video
> > > here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> > > 
> > > How can I debug the issue?
> > > 
> > 
> > Compiling bootia32.efi :p
> > 
> > With sys/arch/amd64/stand/efiboot/efiboot.c revision 1.15 it works,
> > revision 1.16 it fails.
> > 
> > I'll try to understand, thanks, Michele
> 
> 
> With the following diff it works, bye!

Looks good to me. Is anyone handling this patch?

> Index: efiboot/efiboot.c
> ===
> RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 efiboot.c
> --- efiboot/efiboot.c 3 Mar 2017 08:56:18 -   1.17
> +++ efiboot/efiboot.c 9 May 2017 19:44:30 -
> @@ -92,7 +92,7 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
>   if (DevicePathType(dp) == MEDIA_DEVICE_PATH &&
>   DevicePathSubType(dp) == MEDIA_HARDDRIVE_DP) {
>   bios_bootdev = 0x80;
> - efi_bootdp = dp0;
> + efi_bootdp = dp;
>   break;
>   }
>   }
> 



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-09 Thread Michele Curti
On Tue, May 09, 2017 at 09:36:02PM +0200, Michele Curti wrote:
> On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
> > Hi all, I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay
> > trail, 32 bit efi, 64 bit os) but the bootloader do not correctly
> > detect the internal disk.
> > 
> > I also tried a fresh install, but things do not change.  Boot fails
> > and when I do a "machine diskinfo" I got a lot of "?" symbols (a video
> > here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> > 
> > How can I debug the issue?
> > 
> 
> Compiling bootia32.efi :p
> 
> With sys/arch/amd64/stand/efiboot/efiboot.c revision 1.15 it works,
> revision 1.16 it fails.
> 
> I'll try to understand, thanks, Michele


With the following diff it works, bye!


Index: efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
retrieving revision 1.17
diff -u -p -r1.17 efiboot.c
--- efiboot/efiboot.c   3 Mar 2017 08:56:18 -   1.17
+++ efiboot/efiboot.c   9 May 2017 19:44:30 -
@@ -92,7 +92,7 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TA
if (DevicePathType(dp) == MEDIA_DEVICE_PATH &&
DevicePathSubType(dp) == MEDIA_HARDDRIVE_DP) {
bios_bootdev = 0x80;
-   efi_bootdp = dp0;
+   efi_bootdp = dp;
break;
}
}



Re: OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-09 Thread Michele Curti
On Tue, May 09, 2017 at 10:20:03AM +0200, Michele Curti wrote:
> Hi all,
> I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay trail, 32 bit
> efi, 64 bit os) but the bootloader do not correctly detect the internal
> disk.
> 
> I also tried a fresh install, but things do not change.
> Boot fails and when I do a "machine diskinfo" I got a lot of "?" 
> symbols (a video here https://www.youtube.com/watch?v=fsomNX-oFTQ )
> 
> How can I debug the issue?
> 

Compiling bootia32.efi :p

With sys/arch/amd64/stand/efiboot/efiboot.c revision 1.15 it works,
revision 1.16 it fails.

I'll try to understand, thanks,
Michele

> Thanks,
> Michele
> 



OpenBSD 6.1: BOOTIA32 3.32 issue

2017-05-09 Thread Michele Curti
Hi all,
I tried to upgrade to OpenBSD 6.1 on an Asus X205TA (bay trail, 32 bit
efi, 64 bit os) but the bootloader do not correctly detect the internal
disk.

I also tried a fresh install, but things do not change.
Boot fails and when I do a "machine diskinfo" I got a lot of "?" 
symbols (a video here https://www.youtube.com/watch?v=fsomNX-oFTQ )

How can I debug the issue?

Thanks,
Michele