18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2020 Loongson Technology Co., Ltd.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/linkage.h>
78c2ecf20Sopenharmony_ci#include <asm/addrspace.h>
88c2ecf20Sopenharmony_ci#include <asm/asm.h>
98c2ecf20Sopenharmony_ci#include <asm/loongarchregs.h>
108c2ecf20Sopenharmony_ci#include <asm/regdef.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ciSYM_CODE_START(start)
138c2ecf20Sopenharmony_ci	/* Save boot rom start args */
148c2ecf20Sopenharmony_ci	move	s0, a0
158c2ecf20Sopenharmony_ci	move	s1, a1
168c2ecf20Sopenharmony_ci	move	s2, a2
178c2ecf20Sopenharmony_ci	move	s3, a3 /* for kdump */
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	/* Config Direct Mapping */
208c2ecf20Sopenharmony_ci	li.d	t0, CSR_DMW0_INIT
218c2ecf20Sopenharmony_ci	csrwr	t0, LOONGARCH_CSR_DMWIN0
228c2ecf20Sopenharmony_ci	li.d	t0, CSR_DMW1_INIT
238c2ecf20Sopenharmony_ci	csrwr	t0, LOONGARCH_CSR_DMWIN1
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	/* Clear BSS */
268c2ecf20Sopenharmony_ci	la.pcrel a0, _edata
278c2ecf20Sopenharmony_ci	la.pcrel a2, _end
288c2ecf20Sopenharmony_ci1:	st.d	zero, a0, 0
298c2ecf20Sopenharmony_ci	addi.d	a0, a0, 8
308c2ecf20Sopenharmony_ci	bne	a2, a0, 1b
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	la.pcrel a0, .heap	   /* heap address */
338c2ecf20Sopenharmony_ci	la.pcrel sp, .stack + 8192  /* stack address */
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	la.pcrel a0, .heap	  /* heap address */
368c2ecf20Sopenharmony_ci	move	a1, a3		  /* kdump relocate offset */
378c2ecf20Sopenharmony_ci	bnez	a3, 2f
388c2ecf20Sopenharmony_ci	li.w	a1, 0
398c2ecf20Sopenharmony_ci	li.w	s3, 0
408c2ecf20Sopenharmony_ci2:
418c2ecf20Sopenharmony_ci	la.pcrel ra, 3f
428c2ecf20Sopenharmony_ci	la.pcrel t4, decompress_kernel
438c2ecf20Sopenharmony_ci	jirl	zero, t4, 0
448c2ecf20Sopenharmony_ci3:
458c2ecf20Sopenharmony_ci	move	a0, s0
468c2ecf20Sopenharmony_ci	move	a1, s1
478c2ecf20Sopenharmony_ci	move	a2, s2
488c2ecf20Sopenharmony_ci	move	a3, s3
498c2ecf20Sopenharmony_ci	PTR_LI	t4, KERNEL_ENTRY
508c2ecf20Sopenharmony_ci	add.d	t4, t4, a3
518c2ecf20Sopenharmony_ci	jirl	zero, t4, 0
528c2ecf20Sopenharmony_ci4:
538c2ecf20Sopenharmony_ci	b	4b
548c2ecf20Sopenharmony_ciSYM_CODE_END(start)
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	.comm .heap,BOOT_HEAP_SIZE,4
578c2ecf20Sopenharmony_ci	.comm .stack,4096*2,4
58