xref: /openbmc/linux/arch/riscv/include/asm/xip_fixup.h (revision e7681beb)
1*e7681bebSPalmer Dabbelt /* SPDX-License-Identifier: GPL-2.0-only */
2*e7681bebSPalmer Dabbelt /*
3*e7681bebSPalmer Dabbelt  * XIP fixup macros, only useful in assembly.
4*e7681bebSPalmer Dabbelt  */
5*e7681bebSPalmer Dabbelt #ifndef _ASM_RISCV_XIP_FIXUP_H
6*e7681bebSPalmer Dabbelt #define _ASM_RISCV_XIP_FIXUP_H
7*e7681bebSPalmer Dabbelt 
8*e7681bebSPalmer Dabbelt #include <linux/pgtable.h>
9*e7681bebSPalmer Dabbelt 
10*e7681bebSPalmer Dabbelt #ifdef CONFIG_XIP_KERNEL
11*e7681bebSPalmer Dabbelt .macro XIP_FIXUP_OFFSET reg
12*e7681bebSPalmer Dabbelt         REG_L t0, _xip_fixup
13*e7681bebSPalmer Dabbelt         add \reg, \reg, t0
14*e7681bebSPalmer Dabbelt .endm
15*e7681bebSPalmer Dabbelt .macro XIP_FIXUP_FLASH_OFFSET reg
16*e7681bebSPalmer Dabbelt 	la t1, __data_loc
17*e7681bebSPalmer Dabbelt 	REG_L t1, _xip_phys_offset
18*e7681bebSPalmer Dabbelt 	sub \reg, \reg, t1
19*e7681bebSPalmer Dabbelt 	add \reg, \reg, t0
20*e7681bebSPalmer Dabbelt .endm
21*e7681bebSPalmer Dabbelt 
22*e7681bebSPalmer Dabbelt _xip_fixup: .dword CONFIG_PHYS_RAM_BASE - CONFIG_XIP_PHYS_ADDR - XIP_OFFSET
23*e7681bebSPalmer Dabbelt _xip_phys_offset: .dword CONFIG_XIP_PHYS_ADDR + XIP_OFFSET
24*e7681bebSPalmer Dabbelt #else
25*e7681bebSPalmer Dabbelt .macro XIP_FIXUP_OFFSET reg
26*e7681bebSPalmer Dabbelt .endm
27*e7681bebSPalmer Dabbelt .macro XIP_FIXUP_FLASH_OFFSET reg
28*e7681bebSPalmer Dabbelt .endm
29*e7681bebSPalmer Dabbelt #endif /* CONFIG_XIP_KERNEL */
30*e7681bebSPalmer Dabbelt 
31*e7681bebSPalmer Dabbelt #endif
32