| /* SPDX-License-Identifier: GPL-2.0 */ |
| |
| #ifndef __ASM_CSKY_ENTRY_H |
| #define __ASM_CSKY_ENTRY_H |
| |
| #include <asm/setup.h> |
| #include <abi/regdef.h> |
| |
| #define LSAVE_PC 8 |
| #define LSAVE_PSR 12 |
| #define LSAVE_A0 24 |
| #define LSAVE_A1 28 |
| #define LSAVE_A2 32 |
| #define LSAVE_A3 36 |
| #define LSAVE_A4 40 |
| #define LSAVE_A5 44 |
| |
| #define usp ss1 |
| |
| .macro USPTOKSP |
| mtcr sp, usp |
| mfcr sp, ss0 |
| .endm |
| |
| .macro KSPTOUSP |
| mtcr sp, ss0 |
| mfcr sp, usp |
| .endm |
| |
| .macro SAVE_ALL epc_inc |
| mtcr r13, ss2 |
| mfcr r13, epsr |
| btsti r13, 31 |
| bt 1f |
| USPTOKSP |
| 1: |
| subi sp, 32 |
| subi sp, 32 |
| subi sp, 16 |
| stw r13, (sp, 12) |
| |
| stw lr, (sp, 4) |
| |
| mfcr lr, epc |
| movi r13, \epc_inc |
| add lr, r13 |
| stw lr, (sp, 8) |
| |
| mov lr, sp |
| addi lr, 32 |
| addi lr, 32 |
| addi lr, 16 |
| bt 2f |
| mfcr lr, ss1 |
| 2: |
| stw lr, (sp, 16) |
| |
| stw a0, (sp, 20) |
| stw a0, (sp, 24) |
| stw a1, (sp, 28) |
| stw a2, (sp, 32) |
| stw a3, (sp, 36) |
| |
| addi sp, 32 |
| addi sp, 8 |
| mfcr r13, ss2 |
| stw r6, (sp) |
| stw r7, (sp, 4) |
| stw r8, (sp, 8) |
| stw r9, (sp, 12) |
| stw r10, (sp, 16) |
| stw r11, (sp, 20) |
| stw r12, (sp, 24) |
| stw r13, (sp, 28) |
| stw r14, (sp, 32) |
| stw r1, (sp, 36) |
| subi sp, 32 |
| subi sp, 8 |
| .endm |
| |
| .macro RESTORE_ALL |
| ldw lr, (sp, 4) |
| ldw a0, (sp, 8) |
| mtcr a0, epc |
| ldw a0, (sp, 12) |
| mtcr a0, epsr |
| btsti a0, 31 |
| bt 1f |
| ldw a0, (sp, 16) |
| mtcr a0, ss1 |
| 1: |
| ldw a0, (sp, 24) |
| ldw a1, (sp, 28) |
| ldw a2, (sp, 32) |
| ldw a3, (sp, 36) |
| |
| addi sp, 32 |
| addi sp, 8 |
| ldw r6, (sp) |
| ldw r7, (sp, 4) |
| ldw r8, (sp, 8) |
| ldw r9, (sp, 12) |
| ldw r10, (sp, 16) |
| ldw r11, (sp, 20) |
| ldw r12, (sp, 24) |
| ldw r13, (sp, 28) |
| ldw r14, (sp, 32) |
| ldw r1, (sp, 36) |
| addi sp, 32 |
| addi sp, 8 |
| |
| bt 2f |
| KSPTOUSP |
| 2: |
| rte |
| .endm |
| |
| .macro SAVE_SWITCH_STACK |
| subi sp, 32 |
| stm r8-r15, (sp) |
| .endm |
| |
| .macro RESTORE_SWITCH_STACK |
| ldm r8-r15, (sp) |
| addi sp, 32 |
| .endm |
| |
| /* MMU registers operators. */ |
| .macro RD_MIR rx |
| cprcr \rx, cpcr0 |
| .endm |
| |
| .macro RD_MEH rx |
| cprcr \rx, cpcr4 |
| .endm |
| |
| .macro RD_MCIR rx |
| cprcr \rx, cpcr8 |
| .endm |
| |
| .macro RD_PGDR rx |
| cprcr \rx, cpcr29 |
| .endm |
| |
| .macro WR_MEH rx |
| cpwcr \rx, cpcr4 |
| .endm |
| |
| .macro WR_MCIR rx |
| cpwcr \rx, cpcr8 |
| .endm |
| |
| .macro SETUP_MMU |
| /* Init psr and enable ee */ |
| lrw r6, DEFAULT_PSR_VALUE |
| mtcr r6, psr |
| psrset ee |
| |
| /* Select MMU as co-processor */ |
| cpseti cp15 |
| |
| /* |
| * cpcr30 format: |
| * 31 - 29 | 28 - 4 | 3 | 2 | 1 | 0 |
| * BA Reserved C D V |
| */ |
| cprcr r6, cpcr30 |
| lsri r6, 29 |
| lsli r6, 29 |
| addi r6, 0xe |
| cpwcr r6, cpcr30 |
| |
| movi r6, 0 |
| cpwcr r6, cpcr31 |
| .endm |
| #endif /* __ASM_CSKY_ENTRY_H */ |