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