1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020 Loongson Technology Co., Ltd.
4 */
5
6#include <linux/linkage.h>
7#include <asm/addrspace.h>
8#include <asm/asm.h>
9#include <asm/loongarchregs.h>
10#include <asm/regdef.h>
11
12SYM_CODE_START(start)
13	/* Save boot rom start args */
14	move	s0, a0
15	move	s1, a1
16	move	s2, a2
17	move	s3, a3 /* for kdump */
18
19	/* Config Direct Mapping */
20	li.d	t0, CSR_DMW0_INIT
21	csrwr	t0, LOONGARCH_CSR_DMWIN0
22	li.d	t0, CSR_DMW1_INIT
23	csrwr	t0, LOONGARCH_CSR_DMWIN1
24
25	/* Clear BSS */
26	la.pcrel a0, _edata
27	la.pcrel a2, _end
281:	st.d	zero, a0, 0
29	addi.d	a0, a0, 8
30	bne	a2, a0, 1b
31
32	la.pcrel a0, .heap	   /* heap address */
33	la.pcrel sp, .stack + 8192  /* stack address */
34
35	la.pcrel a0, .heap	  /* heap address */
36	move	a1, a3		  /* kdump relocate offset */
37	bnez	a3, 2f
38	li.w	a1, 0
39	li.w	s3, 0
402:
41	la.pcrel ra, 3f
42	la.pcrel t4, decompress_kernel
43	jirl	zero, t4, 0
443:
45	move	a0, s0
46	move	a1, s1
47	move	a2, s2
48	move	a3, s3
49	PTR_LI	t4, KERNEL_ENTRY
50	add.d	t4, t4, a3
51	jirl	zero, t4, 0
524:
53	b	4b
54SYM_CODE_END(start)
55
56	.comm .heap,BOOT_HEAP_SIZE,4
57	.comm .stack,4096*2,4
58