Module Name:    src
Committed By:   skrll
Date:           Thu Aug 15 06:15:17 UTC 2024

Modified Files:
        src/sys/stand/efiboot: efiboot_machdep.h efifdt.c version
        src/sys/stand/efiboot/bootaa64: efibootaa64.c
        src/sys/stand/efiboot/bootarm: efibootarm.c
        src/sys/stand/efiboot/bootriscv64: efibootriscv64.c

Log Message:
Allow an MD check in prepare_boot and use it on arm64 (aarch64) to check
that, if a big endian kernel is seen, the CPU is capable of supporting BE
data accesses at EL0 via ID_AA64MMFR0_EL1.BigEnd.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/stand/efiboot/efiboot_machdep.h
cvs rdiff -u -r1.36 -r1.37 src/sys/stand/efiboot/efifdt.c
cvs rdiff -u -r1.31 -r1.32 src/sys/stand/efiboot/version
cvs rdiff -u -r1.6 -r1.7 src/sys/stand/efiboot/bootaa64/efibootaa64.c
cvs rdiff -u -r1.3 -r1.4 src/sys/stand/efiboot/bootarm/efibootarm.c
cvs rdiff -u -r1.1 -r1.2 src/sys/stand/efiboot/bootriscv64/efibootriscv64.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/stand/efiboot/efiboot_machdep.h
diff -u src/sys/stand/efiboot/efiboot_machdep.h:1.4 src/sys/stand/efiboot/efiboot_machdep.h:1.5
--- src/sys/stand/efiboot/efiboot_machdep.h:1.4	Tue Aug  1 07:04:16 2023
+++ src/sys/stand/efiboot/efiboot_machdep.h	Thu Aug 15 06:15:16 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: efiboot_machdep.h,v 1.4 2023/08/01 07:04:16 mrg Exp $ */
+/* $NetBSD: efiboot_machdep.h,v 1.5 2024/08/15 06:15:16 skrll Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca>
@@ -33,3 +33,4 @@
 void efi_dcache_flush(u_long, u_long);
 void efi_boot_kernel(u_long[MARK_MAX]);
 void efi_md_show(void);
+int efi_md_prepare_boot(const char *, const char *, u_long *);

Index: src/sys/stand/efiboot/efifdt.c
diff -u src/sys/stand/efiboot/efifdt.c:1.36 src/sys/stand/efiboot/efifdt.c:1.37
--- src/sys/stand/efiboot/efifdt.c:1.36	Thu Aug 15 05:59:49 2024
+++ src/sys/stand/efiboot/efifdt.c	Thu Aug 15 06:15:16 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: efifdt.c,v 1.36 2024/08/15 05:59:49 skrll Exp $ */
+/* $NetBSD: efifdt.c,v 1.37 2024/08/15 06:15:16 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jason R. Thorpe
@@ -598,13 +598,19 @@ load_modules(const char *kernel_name)
 int
 efi_fdt_prepare_boot(const char *fname, const char *args, u_long *marks)
 {
+	int error;
+
 	load_file(get_initrd_path(), 0, false, &initrd_addr, &initrd_size);
 	load_file(get_dtb_path(), 0, false, &dtb_addr, &dtb_size);
 
+	error = efi_md_prepare_boot(fname, args, marks);
+	if (error) {
+		return error;
+	}
 #ifdef EFIBOOT_ACPI
 	/* ACPI support only works for little endian kernels */
 	if (efi_acpi_available() && netbsd_elf_data == ELFDATA2LSB) {
-		int error = efi_fdt_create_acpifdt();
+		error = efi_fdt_create_acpifdt();
 		if (error != 0) {
 			return error;
 		}

Index: src/sys/stand/efiboot/version
diff -u src/sys/stand/efiboot/version:1.31 src/sys/stand/efiboot/version:1.32
--- src/sys/stand/efiboot/version:1.31	Sat Apr  2 11:16:07 2022
+++ src/sys/stand/efiboot/version	Thu Aug 15 06:15:16 2024
@@ -1,4 +1,4 @@
-$NetBSD: version,v 1.31 2022/04/02 11:16:07 skrll Exp $
+$NetBSD: version,v 1.32 2024/08/15 06:15:16 skrll Exp $
 
 NOTE ANY CHANGES YOU MAKE TO THE EFI BOOTLOADER HERE.  The format of this
 file is important - make sure the entries are appended on end, last item
@@ -34,3 +34,4 @@ is taken as the current.
 2.11:	Add support for changing the video mode.
 2.12:	Add userconf support.
 2.13:	Add Arm RT support and change Arm64 (aarch64) RT VAs.
+2.14:	Arm64: check cpu support for big endian kernel.

Index: src/sys/stand/efiboot/bootaa64/efibootaa64.c
diff -u src/sys/stand/efiboot/bootaa64/efibootaa64.c:1.6 src/sys/stand/efiboot/bootaa64/efibootaa64.c:1.7
--- src/sys/stand/efiboot/bootaa64/efibootaa64.c:1.6	Sun Aug 14 11:26:41 2022
+++ src/sys/stand/efiboot/bootaa64/efibootaa64.c	Thu Aug 15 06:15:17 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: efibootaa64.c,v 1.6 2022/08/14 11:26:41 jmcneill Exp $	*/
+/*	$NetBSD: efibootaa64.c,v 1.7 2024/08/15 06:15:17 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2016 Kimihiro Nonaka <non...@netbsd.org>
@@ -29,6 +29,7 @@
 #include "../efiboot.h"
 #include "../efifdt.h"
 
+#include <sys/cdefs.h>
 #include <sys/bootblock.h>
 
 #include <loadfile.h>
@@ -76,8 +77,29 @@ efi_aarch64_current_el(void)
 	return (el >> 2) & 0x3;
 }
 
+static bool
+efi_aarch64_BigEnd(void)
+{
+	uint64_t id_aa64mmfr0_el1;
+	__asm __volatile ("mrs %[mmfr0], id_aa64mmfr0_el1"
+            : [mmfr0] "=r" (id_aa64mmfr0_el1) :: "memory");
+	return __SHIFTOUT(id_aa64mmfr0_el1, __BITS(11, 8)) == 1;
+}
+
 void
 efi_md_show(void)
 {
 	command_printtab("CurrentEL", "EL%u\n", efi_aarch64_current_el());
 }
+
+int
+efi_md_prepare_boot(const char *fname, const char *args, u_long *marks)
+{
+	if (netbsd_elf_data == ELFDATA2MSB) {
+		if (!efi_aarch64_BigEnd()) {
+			printf("Processor does not support big endian at EL1\n");
+			return ENOTSUP;
+		}
+	}
+	return 0;
+}

Index: src/sys/stand/efiboot/bootarm/efibootarm.c
diff -u src/sys/stand/efiboot/bootarm/efibootarm.c:1.3 src/sys/stand/efiboot/bootarm/efibootarm.c:1.4
--- src/sys/stand/efiboot/bootarm/efibootarm.c:1.3	Sat Nov 28 14:02:09 2020
+++ src/sys/stand/efiboot/bootarm/efibootarm.c	Thu Aug 15 06:15:17 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: efibootarm.c,v 1.3 2020/11/28 14:02:09 jmcneill Exp $ */
+/* $NetBSD: efibootarm.c,v 1.4 2024/08/15 06:15:17 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared McNeill <jmcne...@invisible.ca>
@@ -63,3 +63,9 @@ void
 efi_md_show(void)
 {
 }
+
+int
+efi_md_prepare_boot(const char *fname, const char *args, u_long *marks)
+{
+        return 0;
+}

Index: src/sys/stand/efiboot/bootriscv64/efibootriscv64.c
diff -u src/sys/stand/efiboot/bootriscv64/efibootriscv64.c:1.1 src/sys/stand/efiboot/bootriscv64/efibootriscv64.c:1.2
--- src/sys/stand/efiboot/bootriscv64/efibootriscv64.c:1.1	Sun May  2 15:22:27 2021
+++ src/sys/stand/efiboot/bootriscv64/efibootriscv64.c	Thu Aug 15 06:15:17 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: efibootriscv64.c,v 1.1 2021/05/02 15:22:27 jmcneill Exp $ */
+/* $NetBSD: efibootriscv64.c,v 1.2 2024/08/15 06:15:17 skrll Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca>
@@ -76,3 +76,9 @@ void
 efi_dcache_flush(u_long start, u_long size)
 {
 }
+
+int
+efi_md_prepare_boot(const char *fname, const char *args, u_long *marks)
+{
+	return 0;
+}

Reply via email to