diff options
-rw-r--r-- | arch/arm64/kernel/smp_spin_table.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm64/kernel/smp_spin_table.c b/arch/arm64/kernel/smp_spin_table.c index 27f08367a6e7..44c22805d2e2 100644 --- a/arch/arm64/kernel/smp_spin_table.c +++ b/arch/arm64/kernel/smp_spin_table.c | |||
@@ -72,7 +72,16 @@ static int smp_spin_table_cpu_prepare(unsigned int cpu) | |||
72 | return -ENODEV; | 72 | return -ENODEV; |
73 | 73 | ||
74 | release_addr = __va(cpu_release_addr[cpu]); | 74 | release_addr = __va(cpu_release_addr[cpu]); |
75 | release_addr[0] = (void *)__pa(secondary_holding_pen); | 75 | |
76 | /* | ||
77 | * We write the release address as LE regardless of the native | ||
78 | * endianess of the kernel. Therefore, any boot-loaders that | ||
79 | * read this address need to convert this address to the | ||
80 | * boot-loader's endianess before jumping. This is mandated by | ||
81 | * the boot protocol. | ||
82 | */ | ||
83 | release_addr[0] = (void *) cpu_to_le64(__pa(secondary_holding_pen)); | ||
84 | |||
76 | __flush_dcache_area(release_addr, sizeof(release_addr[0])); | 85 | __flush_dcache_area(release_addr, sizeof(release_addr[0])); |
77 | 86 | ||
78 | /* | 87 | /* |