mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
fb197c5d2f
When alignment handling is delegated to the kernel, everything must be
word-aligned in purgatory, since the trap handler is then set to the
kexec one. Without the alignment, hitting the exception would
ultimately crash. On other occasions, the kernel's handler would take
care of exceptions.
This has been tested on a JH7110 SoC with oreboot and its SBI delegating
unaligned access exceptions and the kernel configured to handle them.
Fixes: 736e30af58
("RISC-V: Add purgatory")
Signed-off-by: Daniel Maslowski <cyrevolt@gmail.com>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20240719170437.247457-1-cyrevolt@gmail.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
42 lines
635 B
ArmAsm
42 lines
635 B
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* purgatory: Runs between two kernels
|
|
*
|
|
* Copyright (C) 2022 Huawei Technologies Co, Ltd.
|
|
*
|
|
* Author: Li Zhengyu (lizhengyu3@huawei.com)
|
|
*
|
|
*/
|
|
#include <asm/asm.h>
|
|
#include <linux/linkage.h>
|
|
|
|
.text
|
|
|
|
SYM_CODE_START(purgatory_start)
|
|
|
|
lla sp, .Lstack
|
|
mv s0, a0 /* The hartid of the current hart */
|
|
mv s1, a1 /* Phys address of the FDT image */
|
|
|
|
jal purgatory
|
|
|
|
/* Start new image. */
|
|
mv a0, s0
|
|
mv a1, s1
|
|
ld a2, riscv_kernel_entry
|
|
jr a2
|
|
SYM_CODE_END(purgatory_start)
|
|
|
|
.align 4
|
|
.rept 256
|
|
.quad 0
|
|
.endr
|
|
.Lstack:
|
|
|
|
.data
|
|
|
|
.align LGREG
|
|
SYM_DATA(riscv_kernel_entry, .quad 0)
|
|
|
|
.end
|