| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| 2 | /* |
| 3 | * Minimal LoongArch system boot code. |
| 4 | * |
| 5 | * Copyright (c) 2021 Loongson Technology Corporation Limited |
| 6 | */ |
| 7 | |
| 8 | #include "regdef.h" |
| 9 | |
| 10 | .global _start |
| 11 | .align 16 |
| 12 | _start: |
| 13 | la.local t0, stack_end |
| 14 | move sp, t0 |
| 15 | bl main |
| 16 | |
| 17 | .type _start 2 |
| 18 | .size _start, .-_start |
| 19 | |
| 20 | .global _exit |
| 21 | .align 16 |
| 22 | _exit: |
| 23 | 2: /* QEMU ACPI poweroff */ |
| 24 | li.w t0, 0x34 |
| 25 | li.w t1, 0x100e001c |
| 26 | st.b t0, t1, 0 |
| 27 | |
| 28 | idle 0 |
| 29 | bl 2b |
| 30 | |
| 31 | .type _exit 2 |
| 32 | .size _exit, .-_exit |
| 33 | |
| 34 | .global __sys_outc |
| 35 | __sys_outc: |
| 36 | li.d t1, 1000000 |
| 37 | loop: |
| 38 | lu12i.w t2, 0x1fe00 |
| 39 | ori t0, t2, 0x1e5 |
| 40 | ld.bu t0, t0, 0 |
| 41 | andi t0, t0, 0x20 |
| 42 | ext.w.b t0, t0 |
| 43 | bnez t0, in |
| 44 | addi.w t1, t1, -1 |
| 45 | bnez t1, loop |
| 46 | in: |
| 47 | ext.w.b a0, a0 |
| 48 | lu12i.w t0, 0x1fe00 |
| 49 | ori t0, t0, 0x1e0 |
| 50 | st.b a0, t0, 0 |
| 51 | jirl $r0, ra, 0 |
| 52 | |
| 53 | .data |
| 54 | .align 4 |
| 55 | stack: |
| 56 | .space 65536 |
| 57 | stack_end: |