Re: efiboot machine exit for armv7 and amd64

2017-08-06 Thread Jonathan Gray
On Sun, Aug 06, 2017 at 09:54:44PM +0200, Mark Kettenis wrote:
> This adds a "machine exit" command like we already have on amd64.
> Main motivation is that this would help including our bootloader in
> the U-Boot regression tests.
> 
> This also changes the code to use RS->ResetSystem() on arm64.  It
> seems we don't need the Cubox-i workaround there.  Still doesn't do
> the right thing on my overdrive 1000 though :(.
> 
> ok?

Perhaps add poweroff at the same time?

Either way ok jsg@

> 
> 
> Index: arch/armv7/stand/efiboot/conf.c
> ===
> RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/conf.c,v
> retrieving revision 1.9
> diff -u -p -r1.9 conf.c
> --- arch/armv7/stand/efiboot/conf.c   31 Jul 2017 14:05:57 -  1.9
> +++ arch/armv7/stand/efiboot/conf.c   6 Aug 2017 19:50:19 -
> @@ -35,7 +35,7 @@
>  #include "efiboot.h"
>  #include "efidev.h"
>  
> -const char version[] = "0.8";
> +const char version[] = "0.9";
>  int  debug = 0;
>  
>  struct fs_ops file_system[] = {
> Index: arch/armv7/stand/efiboot/efiboot.c
> ===
> RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/efiboot.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 efiboot.c
> --- arch/armv7/stand/efiboot/efiboot.c31 Jul 2017 14:05:57 -  
> 1.17
> +++ arch/armv7/stand/efiboot/efiboot.c6 Aug 2017 19:50:19 -
> @@ -374,7 +374,7 @@ _rtt(void)
>   efi_cons_getc(0);
>  #endif
>   /*
> -  * XXX ResetSystem doesn't seem to work on U-Boot 2016.05 on
> +  * XXX ResetSystem doesn't seem to work on U-Boot 2017.03 on
>* the CuBox-i.  So trigger an unimplemented instruction trap
>* instead.
>*/
> @@ -540,4 +540,23 @@ devopen(struct open_file *f, const char 
>   f->f_dev = dp;
>  
>   return (*dp->dv_open)(f, unit, part);
> +}
> +
> +/*
> + * Commands
> + */
> +
> +int Xexit_efi(void);
> +
> +const struct cmd_table cmd_machine[] = {
> + { "exit",   CMDT_CMD, Xexit_efi },
> + { NULL, 0 }
> +};
> +
> +int
> +Xexit_efi(void)
> +{
> + EFI_CALL(BS->Exit, IH, 0, 0, NULL);
> + while (1) { };
> + return (0);
>  }
> Index: arch/armv7/stand/efiboot/libsa.h
> ===
> RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/libsa.h,v
> retrieving revision 1.2
> diff -u -p -r1.2 libsa.h
> --- arch/armv7/stand/efiboot/libsa.h  17 May 2016 23:16:10 -  1.2
> +++ arch/armv7/stand/efiboot/libsa.h  6 Aug 2017 19:50:19 -
> @@ -28,3 +28,5 @@
>  
>  void machdep(void);
>  void devboot(dev_t, char *);
> +
> +#define MACHINE_CMD  cmd_machine
> Index: arch/arm64/stand/efiboot/conf.c
> ===
> RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/conf.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 conf.c
> --- arch/arm64/stand/efiboot/conf.c   31 Jul 2017 14:06:29 -  1.6
> +++ arch/arm64/stand/efiboot/conf.c   6 Aug 2017 19:50:19 -
> @@ -35,7 +35,7 @@
>  #include "efiboot.h"
>  #include "efidev.h"
>  
> -const char version[] = "0.6";
> +const char version[] = "0.7";
>  int  debug = 0;
>  
>  struct fs_ops file_system[] = {
> Index: arch/arm64/stand/efiboot/efiboot.c
> ===
> RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/efiboot.c,v
> retrieving revision 1.10
> diff -u -p -r1.10 efiboot.c
> --- arch/arm64/stand/efiboot/efiboot.c31 Jul 2017 14:06:29 -  
> 1.10
> +++ arch/arm64/stand/efiboot/efiboot.c6 Aug 2017 19:50:19 -
> @@ -395,16 +395,7 @@ _rtt(void)
>   printf("Hit any key to reboot\n");
>   efi_cons_getc(0);
>  #endif
> - /*
> -  * XXX ResetSystem doesn't seem to work on U-Boot 2016.05 on
> -  * the CuBox-i.  So trigger an unimplemented instruction trap
> -  * instead.
> -  */
> -#if 1
> - asm volatile(".word 0xa000f7f0\n");
> -#else
>   RS->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
> -#endif
>   while (1) { }
>  }
>  
> @@ -634,4 +625,23 @@ efi_memprobe_find(UINTN pages, UINTN ali
>   }
>   }
>   return EFI_OUT_OF_RESOURCES;
> +}
> +
> +/*
> + * Commands
> + */
> +
> +int Xexit_efi(void);
> +
> +const struct cmd_table cmd_machine[] = {
> + { "exit",   CMDT_CMD, Xexit_efi },
> + { NULL, 0 }
> +};
> +
> +int
> +Xexit_efi(void)
> +{
> + EFI_CALL(BS->Exit, IH, 0, 0, NULL);
> + while (1) { };
> + return (0);
>  }
> Index: arch/arm64/stand/efiboot/libsa.h
> ===
> RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/libsa.h,v
> retrieving revision 1.1
> diff -u -p -r1.1 libsa.h
> --- arch/arm64/stand/efiboot/libsa.h  17 Dec 2016 23:38:33 -  1.1
> +++ arch/arm64/stand/efiboot/libsa.h  6 Aug 2017 19:50:19 -
> @@ -28,3 +28,5 @@
>  
>  void machdep(void);
>  void devboot(dev_t

efiboot machine exit for armv7 and amd64

2017-08-06 Thread Mark Kettenis
This adds a "machine exit" command like we already have on amd64.
Main motivation is that this would help including our bootloader in
the U-Boot regression tests.

This also changes the code to use RS->ResetSystem() on arm64.  It
seems we don't need the Cubox-i workaround there.  Still doesn't do
the right thing on my overdrive 1000 though :(.

ok?


Index: arch/armv7/stand/efiboot/conf.c
===
RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/conf.c,v
retrieving revision 1.9
diff -u -p -r1.9 conf.c
--- arch/armv7/stand/efiboot/conf.c 31 Jul 2017 14:05:57 -  1.9
+++ arch/armv7/stand/efiboot/conf.c 6 Aug 2017 19:50:19 -
@@ -35,7 +35,7 @@
 #include "efiboot.h"
 #include "efidev.h"
 
-const char version[] = "0.8";
+const char version[] = "0.9";
 intdebug = 0;
 
 struct fs_ops file_system[] = {
Index: arch/armv7/stand/efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/efiboot.c,v
retrieving revision 1.17
diff -u -p -r1.17 efiboot.c
--- arch/armv7/stand/efiboot/efiboot.c  31 Jul 2017 14:05:57 -  1.17
+++ arch/armv7/stand/efiboot/efiboot.c  6 Aug 2017 19:50:19 -
@@ -374,7 +374,7 @@ _rtt(void)
efi_cons_getc(0);
 #endif
/*
-* XXX ResetSystem doesn't seem to work on U-Boot 2016.05 on
+* XXX ResetSystem doesn't seem to work on U-Boot 2017.03 on
 * the CuBox-i.  So trigger an unimplemented instruction trap
 * instead.
 */
@@ -540,4 +540,23 @@ devopen(struct open_file *f, const char 
f->f_dev = dp;
 
return (*dp->dv_open)(f, unit, part);
+}
+
+/*
+ * Commands
+ */
+
+int Xexit_efi(void);
+
+const struct cmd_table cmd_machine[] = {
+   { "exit",   CMDT_CMD, Xexit_efi },
+   { NULL, 0 }
+};
+
+int
+Xexit_efi(void)
+{
+   EFI_CALL(BS->Exit, IH, 0, 0, NULL);
+   while (1) { };
+   return (0);
 }
Index: arch/armv7/stand/efiboot/libsa.h
===
RCS file: /cvs/src/sys/arch/armv7/stand/efiboot/libsa.h,v
retrieving revision 1.2
diff -u -p -r1.2 libsa.h
--- arch/armv7/stand/efiboot/libsa.h17 May 2016 23:16:10 -  1.2
+++ arch/armv7/stand/efiboot/libsa.h6 Aug 2017 19:50:19 -
@@ -28,3 +28,5 @@
 
 void machdep(void);
 void devboot(dev_t, char *);
+
+#define MACHINE_CMDcmd_machine
Index: arch/arm64/stand/efiboot/conf.c
===
RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/conf.c,v
retrieving revision 1.6
diff -u -p -r1.6 conf.c
--- arch/arm64/stand/efiboot/conf.c 31 Jul 2017 14:06:29 -  1.6
+++ arch/arm64/stand/efiboot/conf.c 6 Aug 2017 19:50:19 -
@@ -35,7 +35,7 @@
 #include "efiboot.h"
 #include "efidev.h"
 
-const char version[] = "0.6";
+const char version[] = "0.7";
 intdebug = 0;
 
 struct fs_ops file_system[] = {
Index: arch/arm64/stand/efiboot/efiboot.c
===
RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/efiboot.c,v
retrieving revision 1.10
diff -u -p -r1.10 efiboot.c
--- arch/arm64/stand/efiboot/efiboot.c  31 Jul 2017 14:06:29 -  1.10
+++ arch/arm64/stand/efiboot/efiboot.c  6 Aug 2017 19:50:19 -
@@ -395,16 +395,7 @@ _rtt(void)
printf("Hit any key to reboot\n");
efi_cons_getc(0);
 #endif
-   /*
-* XXX ResetSystem doesn't seem to work on U-Boot 2016.05 on
-* the CuBox-i.  So trigger an unimplemented instruction trap
-* instead.
-*/
-#if 1
-   asm volatile(".word 0xa000f7f0\n");
-#else
RS->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
-#endif
while (1) { }
 }
 
@@ -634,4 +625,23 @@ efi_memprobe_find(UINTN pages, UINTN ali
}
}
return EFI_OUT_OF_RESOURCES;
+}
+
+/*
+ * Commands
+ */
+
+int Xexit_efi(void);
+
+const struct cmd_table cmd_machine[] = {
+   { "exit",   CMDT_CMD, Xexit_efi },
+   { NULL, 0 }
+};
+
+int
+Xexit_efi(void)
+{
+   EFI_CALL(BS->Exit, IH, 0, 0, NULL);
+   while (1) { };
+   return (0);
 }
Index: arch/arm64/stand/efiboot/libsa.h
===
RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/libsa.h,v
retrieving revision 1.1
diff -u -p -r1.1 libsa.h
--- arch/arm64/stand/efiboot/libsa.h17 Dec 2016 23:38:33 -  1.1
+++ arch/arm64/stand/efiboot/libsa.h6 Aug 2017 19:50:19 -
@@ -28,3 +28,5 @@
 
 void machdep(void);
 void devboot(dev_t, char *);
+
+#define MACHINE_CMDcmd_machine