mirror of https://github.com/OpenIPC/firmware.git
55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
diff -drupN a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
|
|
--- a/arch/arm64/kernel/head.S 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/arch/arm64/kernel/head.S 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -326,14 +326,14 @@ __create_page_tables:
|
|
* dirty cache lines being evicted.
|
|
*/
|
|
adrp x0, idmap_pg_dir
|
|
- adrp x1, swapper_pg_dir + SWAPPER_DIR_SIZE
|
|
+ adrp x1, swapper_pg_dir + SWAPPER_DIR_SIZE + RESERVED_TTBR0_SIZE
|
|
bl __inval_cache_range
|
|
|
|
/*
|
|
* Clear the idmap and swapper page tables.
|
|
*/
|
|
adrp x0, idmap_pg_dir
|
|
- adrp x6, swapper_pg_dir + SWAPPER_DIR_SIZE
|
|
+ adrp x6, swapper_pg_dir + SWAPPER_DIR_SIZE + RESERVED_TTBR0_SIZE
|
|
1: stp xzr, xzr, [x0], #16
|
|
stp xzr, xzr, [x0], #16
|
|
stp xzr, xzr, [x0], #16
|
|
@@ -412,7 +412,7 @@ __create_page_tables:
|
|
* tables again to remove any speculatively loaded cache lines.
|
|
*/
|
|
adrp x0, idmap_pg_dir
|
|
- adrp x1, swapper_pg_dir + SWAPPER_DIR_SIZE
|
|
+ adrp x1, swapper_pg_dir + SWAPPER_DIR_SIZE + RESERVED_TTBR0_SIZE
|
|
dmb sy
|
|
bl __inval_cache_range
|
|
|
|
@@ -428,7 +428,8 @@ ENDPROC(__create_page_tables)
|
|
__primary_switched:
|
|
adrp x4, init_thread_union
|
|
add sp, x4, #THREAD_SIZE
|
|
- msr sp_el0, x4 // Save thread_info
|
|
+ adr_l x5, init_task
|
|
+ msr sp_el0, x5 // Save thread_info
|
|
|
|
adr_l x8, vectors // load VBAR_EL1 with virtual
|
|
msr vbar_el1, x8 // vector table address
|
|
@@ -700,10 +701,10 @@ __secondary_switched:
|
|
isb
|
|
|
|
adr_l x0, secondary_data
|
|
- ldr x0, [x0, #CPU_BOOT_STACK] // get secondary_data.stack
|
|
- mov sp, x0
|
|
- and x0, x0, #~(THREAD_SIZE - 1)
|
|
- msr sp_el0, x0 // save thread_info
|
|
+ ldr x1, [x0, #CPU_BOOT_STACK] // get secondary_data.stack
|
|
+ mov sp, x1
|
|
+ ldr x2, [x0, #CPU_BOOT_TASK]
|
|
+ msr sp_el0, x2
|
|
mov x29, #0
|
|
b secondary_start_kernel
|
|
ENDPROC(__secondary_switched)
|