162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef __ASM_CSKY_ENTRY_H 462306a36Sopenharmony_ci#define __ASM_CSKY_ENTRY_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <asm/setup.h> 762306a36Sopenharmony_ci#include <abi/regdef.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#define LSAVE_PC 8 1062306a36Sopenharmony_ci#define LSAVE_PSR 12 1162306a36Sopenharmony_ci#define LSAVE_A0 24 1262306a36Sopenharmony_ci#define LSAVE_A1 28 1362306a36Sopenharmony_ci#define LSAVE_A2 32 1462306a36Sopenharmony_ci#define LSAVE_A3 36 1562306a36Sopenharmony_ci#define LSAVE_A4 40 1662306a36Sopenharmony_ci#define LSAVE_A5 44 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define usp ss1 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci.macro USPTOKSP 2162306a36Sopenharmony_ci mtcr sp, usp 2262306a36Sopenharmony_ci mfcr sp, ss0 2362306a36Sopenharmony_ci.endm 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci.macro KSPTOUSP 2662306a36Sopenharmony_ci mtcr sp, ss0 2762306a36Sopenharmony_ci mfcr sp, usp 2862306a36Sopenharmony_ci.endm 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci.macro SAVE_ALL epc_inc 3162306a36Sopenharmony_ci mtcr r13, ss2 3262306a36Sopenharmony_ci mfcr r13, epsr 3362306a36Sopenharmony_ci btsti r13, 31 3462306a36Sopenharmony_ci bt 1f 3562306a36Sopenharmony_ci USPTOKSP 3662306a36Sopenharmony_ci1: 3762306a36Sopenharmony_ci subi sp, 32 3862306a36Sopenharmony_ci subi sp, 32 3962306a36Sopenharmony_ci subi sp, 16 4062306a36Sopenharmony_ci stw r13, (sp, 12) 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci stw lr, (sp, 4) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci mfcr lr, epc 4562306a36Sopenharmony_ci movi r13, \epc_inc 4662306a36Sopenharmony_ci add lr, r13 4762306a36Sopenharmony_ci stw lr, (sp, 8) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci mov lr, sp 5062306a36Sopenharmony_ci addi lr, 32 5162306a36Sopenharmony_ci addi lr, 32 5262306a36Sopenharmony_ci addi lr, 16 5362306a36Sopenharmony_ci bt 2f 5462306a36Sopenharmony_ci mfcr lr, ss1 5562306a36Sopenharmony_ci2: 5662306a36Sopenharmony_ci stw lr, (sp, 16) 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci stw a0, (sp, 20) 5962306a36Sopenharmony_ci stw a0, (sp, 24) 6062306a36Sopenharmony_ci stw a1, (sp, 28) 6162306a36Sopenharmony_ci stw a2, (sp, 32) 6262306a36Sopenharmony_ci stw a3, (sp, 36) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci addi sp, 32 6562306a36Sopenharmony_ci addi sp, 8 6662306a36Sopenharmony_ci mfcr r13, ss2 6762306a36Sopenharmony_ci stw r6, (sp) 6862306a36Sopenharmony_ci stw r7, (sp, 4) 6962306a36Sopenharmony_ci stw r8, (sp, 8) 7062306a36Sopenharmony_ci stw r9, (sp, 12) 7162306a36Sopenharmony_ci stw r10, (sp, 16) 7262306a36Sopenharmony_ci stw r11, (sp, 20) 7362306a36Sopenharmony_ci stw r12, (sp, 24) 7462306a36Sopenharmony_ci stw r13, (sp, 28) 7562306a36Sopenharmony_ci stw r14, (sp, 32) 7662306a36Sopenharmony_ci stw r1, (sp, 36) 7762306a36Sopenharmony_ci subi sp, 32 7862306a36Sopenharmony_ci subi sp, 8 7962306a36Sopenharmony_ci.endm 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci.macro RESTORE_ALL 8262306a36Sopenharmony_ci ldw lr, (sp, 4) 8362306a36Sopenharmony_ci ldw a0, (sp, 8) 8462306a36Sopenharmony_ci mtcr a0, epc 8562306a36Sopenharmony_ci ldw a0, (sp, 12) 8662306a36Sopenharmony_ci mtcr a0, epsr 8762306a36Sopenharmony_ci btsti a0, 31 8862306a36Sopenharmony_ci bt 1f 8962306a36Sopenharmony_ci ldw a0, (sp, 16) 9062306a36Sopenharmony_ci mtcr a0, ss1 9162306a36Sopenharmony_ci1: 9262306a36Sopenharmony_ci ldw a0, (sp, 24) 9362306a36Sopenharmony_ci ldw a1, (sp, 28) 9462306a36Sopenharmony_ci ldw a2, (sp, 32) 9562306a36Sopenharmony_ci ldw a3, (sp, 36) 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci addi sp, 32 9862306a36Sopenharmony_ci addi sp, 8 9962306a36Sopenharmony_ci ldw r6, (sp) 10062306a36Sopenharmony_ci ldw r7, (sp, 4) 10162306a36Sopenharmony_ci ldw r8, (sp, 8) 10262306a36Sopenharmony_ci ldw r9, (sp, 12) 10362306a36Sopenharmony_ci ldw r10, (sp, 16) 10462306a36Sopenharmony_ci ldw r11, (sp, 20) 10562306a36Sopenharmony_ci ldw r12, (sp, 24) 10662306a36Sopenharmony_ci ldw r13, (sp, 28) 10762306a36Sopenharmony_ci ldw r14, (sp, 32) 10862306a36Sopenharmony_ci ldw r1, (sp, 36) 10962306a36Sopenharmony_ci addi sp, 32 11062306a36Sopenharmony_ci addi sp, 8 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci bt 2f 11362306a36Sopenharmony_ci KSPTOUSP 11462306a36Sopenharmony_ci2: 11562306a36Sopenharmony_ci rte 11662306a36Sopenharmony_ci.endm 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci.macro SAVE_SWITCH_STACK 11962306a36Sopenharmony_ci subi sp, 32 12062306a36Sopenharmony_ci stm r8-r15, (sp) 12162306a36Sopenharmony_ci.endm 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci.macro RESTORE_SWITCH_STACK 12462306a36Sopenharmony_ci ldm r8-r15, (sp) 12562306a36Sopenharmony_ci addi sp, 32 12662306a36Sopenharmony_ci.endm 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci/* MMU registers operators. */ 12962306a36Sopenharmony_ci.macro RD_MIR rx 13062306a36Sopenharmony_ci cprcr \rx, cpcr0 13162306a36Sopenharmony_ci.endm 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci.macro RD_MEH rx 13462306a36Sopenharmony_ci cprcr \rx, cpcr4 13562306a36Sopenharmony_ci.endm 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci.macro RD_MCIR rx 13862306a36Sopenharmony_ci cprcr \rx, cpcr8 13962306a36Sopenharmony_ci.endm 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci.macro RD_PGDR rx 14262306a36Sopenharmony_ci cprcr \rx, cpcr29 14362306a36Sopenharmony_ci.endm 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci.macro WR_MEH rx 14662306a36Sopenharmony_ci cpwcr \rx, cpcr4 14762306a36Sopenharmony_ci.endm 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci.macro WR_MCIR rx 15062306a36Sopenharmony_ci cpwcr \rx, cpcr8 15162306a36Sopenharmony_ci.endm 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci.macro SETUP_MMU 15462306a36Sopenharmony_ci /* Init psr and enable ee */ 15562306a36Sopenharmony_ci lrw r6, DEFAULT_PSR_VALUE 15662306a36Sopenharmony_ci mtcr r6, psr 15762306a36Sopenharmony_ci psrset ee 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci /* Select MMU as co-processor */ 16062306a36Sopenharmony_ci cpseti cp15 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci /* 16362306a36Sopenharmony_ci * cpcr30 format: 16462306a36Sopenharmony_ci * 31 - 29 | 28 - 4 | 3 | 2 | 1 | 0 16562306a36Sopenharmony_ci * BA Reserved C D V 16662306a36Sopenharmony_ci */ 16762306a36Sopenharmony_ci cprcr r6, cpcr30 16862306a36Sopenharmony_ci lsri r6, 29 16962306a36Sopenharmony_ci lsli r6, 29 17062306a36Sopenharmony_ci addi r6, 0xe 17162306a36Sopenharmony_ci cpwcr r6, cpcr30 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci movi r6, 0 17462306a36Sopenharmony_ci cpwcr r6, cpcr31 17562306a36Sopenharmony_ci.endm 17662306a36Sopenharmony_ci#endif /* __ASM_CSKY_ENTRY_H */ 177