1803b0fc5SHuacai Chen/* SPDX-License-Identifier: GPL-2.0 */ 2803b0fc5SHuacai Chen/* 3803b0fc5SHuacai Chen * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4803b0fc5SHuacai Chen */ 5803b0fc5SHuacai Chen#include <asm/asm.h> 6803b0fc5SHuacai Chen#include <asm/asmmacro.h> 7803b0fc5SHuacai Chen#include <asm/asm-offsets.h> 8803b0fc5SHuacai Chen#include <asm/loongarch.h> 9803b0fc5SHuacai Chen#include <asm/regdef.h> 10803b0fc5SHuacai Chen#include <asm/stackframe.h> 11803b0fc5SHuacai Chen#include <asm/thread_info.h> 12803b0fc5SHuacai Chen 13803b0fc5SHuacai Chen/* 14803b0fc5SHuacai Chen * task_struct *__switch_to(task_struct *prev, task_struct *next, 15803b0fc5SHuacai Chen * struct thread_info *next_ti) 16803b0fc5SHuacai Chen */ 17803b0fc5SHuacai Chen .align 5 18803b0fc5SHuacai ChenSYM_FUNC_START(__switch_to) 19803b0fc5SHuacai Chen csrrd t1, LOONGARCH_CSR_PRMD 20803b0fc5SHuacai Chen stptr.d t1, a0, THREAD_CSRPRMD 21803b0fc5SHuacai Chen 22803b0fc5SHuacai Chen cpu_save_nonscratch a0 23803b0fc5SHuacai Chen stptr.d ra, a0, THREAD_REG01 2493a4fa62SQing Zhang stptr.d a3, a0, THREAD_SCHED_RA 2593a4fa62SQing Zhang stptr.d a4, a0, THREAD_SCHED_CFA 26*09f33601SHuacai Chen#if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_SMP) 27*09f33601SHuacai Chen la t7, __stack_chk_guard 28*09f33601SHuacai Chen LONG_L t8, a1, TASK_STACK_CANARY 29*09f33601SHuacai Chen LONG_S t8, t7, 0 30*09f33601SHuacai Chen#endif 31803b0fc5SHuacai Chen move tp, a2 32803b0fc5SHuacai Chen cpu_restore_nonscratch a1 33803b0fc5SHuacai Chen 34b40fa75eSJinyang He li.w t0, _THREAD_SIZE 35803b0fc5SHuacai Chen PTR_ADD t0, t0, tp 36803b0fc5SHuacai Chen set_saved_sp t0, t1, t2 37803b0fc5SHuacai Chen 38803b0fc5SHuacai Chen ldptr.d t1, a1, THREAD_CSRPRMD 39803b0fc5SHuacai Chen csrwr t1, LOONGARCH_CSR_PRMD 40803b0fc5SHuacai Chen 41803b0fc5SHuacai Chen jr ra 42803b0fc5SHuacai ChenSYM_FUNC_END(__switch_to) 43