@@ -125,12 +125,18 @@ _start:
ldp x0, x1, [sp, #16]
- /* Align sp; this is necessary due to way we store cpu0's thread_info */
+ /*
+ * Switch to our own stack and align sp; this is necessary due
+ * to way we store cpu0's thread_info
+ */
+ adrp x2, stacktop
+ add x2, x2, :lo12:stacktop
+ and x2, x2, #THREAD_MASK
+ mov x3, sp
+ mov sp, x2
+ stp xzr, xzr, [sp, #-16]!
mov x29, sp
- mov x30, sp
- and x30, x30, #THREAD_MASK
- mov sp, x30
- str x29, [sp, #-16]!
+ str x3, [sp, #-16]!
bl efi_main
@@ -140,3 +146,9 @@ _start:
0: ldp x29, x30, [sp], #32
ret
+
+ .section .data
+
+.balign 65536
+.space 65536
+stacktop:
@@ -340,10 +340,6 @@ efi_status_t setup_efi(efi_bootinfo_t *efi_bootinfo)
{
efi_status_t status;
- struct thread_info *ti = current_thread_info();
-
- memset(ti, 0, sizeof(*ti));
-
exceptions_init();
memregions_init(arm_mem_regions, NR_MEM_REGIONS);
@@ -114,12 +114,6 @@ void memregions_efi_init(struct efi_boot_memmap *mem_map,
break;
case EFI_LOADER_DATA:
break;
- case EFI_BOOT_SERVICES_DATA:
- /*
- * FIXME: This would ideally be MR_F_RESERVED, but the
- * primary stack is in a region of this EFI type.
- */
- break;
case EFI_PERSISTENT_MEMORY:
r.flags = MR_F_PERSISTENT;
break;