57 lines
821 B
ArmAsm
57 lines
821 B
ArmAsm
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||
|
/*
|
||
|
* Minimal LoongArch system boot code.
|
||
|
*
|
||
|
* Copyright (c) 2021 Loongson Technology Corporation Limited
|
||
|
*/
|
||
|
|
||
|
#include "regdef.h"
|
||
|
|
||
|
.global _start
|
||
|
.align 16
|
||
|
_start:
|
||
|
la.local t0, stack_end
|
||
|
move sp, t0
|
||
|
bl main
|
||
|
|
||
|
.type _start 2
|
||
|
.size _start, .-_start
|
||
|
|
||
|
.global _exit
|
||
|
.align 16
|
||
|
_exit:
|
||
|
2: /* QEMU ACPI poweroff */
|
||
|
li.w t0, 0xff
|
||
|
li.w t1, 0x10080010
|
||
|
st.w t0, t1, 0
|
||
|
idle 0
|
||
|
bl 2b
|
||
|
|
||
|
.type _exit 2
|
||
|
.size _exit, .-_exit
|
||
|
|
||
|
.global __sys_outc
|
||
|
__sys_outc:
|
||
|
li.d t1, 1000000
|
||
|
loop:
|
||
|
lu12i.w t2, 0x1fe00
|
||
|
ori t0, t2, 0x1e5
|
||
|
ld.bu t0, t0, 0
|
||
|
andi t0, t0, 0x20
|
||
|
ext.w.b t0, t0
|
||
|
bnez t0, in
|
||
|
addi.w t1, t1, -1
|
||
|
bnez t1, loop
|
||
|
in:
|
||
|
ext.w.b a0, a0
|
||
|
lu12i.w t0, 0x1fe00
|
||
|
ori t0, t0, 0x1e0
|
||
|
st.b a0, t0, 0
|
||
|
jirl $r0, ra, 0
|
||
|
|
||
|
.data
|
||
|
.align 4
|
||
|
stack:
|
||
|
.space 65536
|
||
|
stack_end:
|