| /* SPDX-License-Identifier: GPL-2.0+ */ | |
| /* | |
| * (C) 2022 Arm Ltd. | |
| */ | |
| #include <config.h> | |
| #include <asm/macro.h> | |
| #include <linux/linkage.h> | |
| .pushsection .text.smh_trap, "ax" | |
| /* long smh_trap(unsigned int sysnum, void *addr); */ | |
| ENTRY(smh_trap) | |
| #if defined(CONFIG_ARM64) | |
| hlt #0xf000 | |
| #elif defined(CONFIG_CPU_V7M) | |
| bkpt #0xab | |
| #elif defined(CONFIG_SYS_THUMB_BUILD) | |
| svc #0xab | |
| #else | |
| #if CONFIG_SYS_ARM_ARCH < 7 | |
| /* Before the ARMv7 exception model, svc (swi) clobbers lr */ | |
| mov r2, lr | |
| #endif | |
| svc #0x123456 | |
| #endif | |
| #if defined(CONFIG_ARM64) | |
| ret | |
| #elif CONFIG_SYS_ARM_ARCH < 7 | |
| bx r2 | |
| #else | |
| bx lr | |
| #endif | |
| ENDPROC(smh_trap) | |
| .popsection |