linux/arch/csky/abiv2/inc/abi/entry.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2
   3#ifndef __ASM_CSKY_ENTRY_H
   4#define __ASM_CSKY_ENTRY_H
   5
   6#include <asm/setup.h>
   7#include <abi/regdef.h>
   8
   9#define LSAVE_PC        8
  10#define LSAVE_PSR       12
  11#define LSAVE_A0        24
  12#define LSAVE_A1        28
  13#define LSAVE_A2        32
  14#define LSAVE_A3        36
  15#define LSAVE_A4        40
  16#define LSAVE_A5        44
  17
  18#define KSPTOUSP
  19#define USPTOKSP
  20
  21#define usp cr<14, 1>
  22
  23.macro SAVE_ALL epc_inc
  24        subi    sp, 152
  25        stw     tls, (sp, 0)
  26        stw     lr, (sp, 4)
  27
  28        RD_MEH  lr
  29        WR_MEH  lr
  30
  31        mfcr    lr, epc
  32        movi    tls, \epc_inc
  33        add     lr, tls
  34        stw     lr, (sp, 8)
  35
  36        mfcr    lr, epsr
  37        stw     lr, (sp, 12)
  38        btsti   lr, 31
  39        bf      1f
  40        addi    lr, sp, 152
  41        br      2f
  421:
  43        mfcr    lr, usp
  442:
  45        stw     lr, (sp, 16)
  46
  47        stw     a0, (sp, 20)
  48        stw     a0, (sp, 24)
  49        stw     a1, (sp, 28)
  50        stw     a2, (sp, 32)
  51        stw     a3, (sp, 36)
  52
  53        addi    sp, 40
  54        stm     r4-r13, (sp)
  55
  56        addi    sp, 40
  57        stm     r16-r30, (sp)
  58#ifdef CONFIG_CPU_HAS_HILO
  59        mfhi    lr
  60        stw     lr, (sp, 60)
  61        mflo    lr
  62        stw     lr, (sp, 64)
  63        mfcr    lr, cr14
  64        stw     lr, (sp, 68)
  65#endif
  66        subi    sp, 80
  67.endm
  68
  69.macro  RESTORE_ALL
  70        ldw     tls, (sp, 0)
  71        ldw     lr, (sp, 4)
  72        ldw     a0, (sp, 8)
  73        mtcr    a0, epc
  74        ldw     a0, (sp, 12)
  75        mtcr    a0, epsr
  76        btsti   a0, 31
  77        ldw     a0, (sp, 16)
  78        mtcr    a0, usp
  79        mtcr    a0, ss0
  80
  81#ifdef CONFIG_CPU_HAS_HILO
  82        ldw     a0, (sp, 140)
  83        mthi    a0
  84        ldw     a0, (sp, 144)
  85        mtlo    a0
  86        ldw     a0, (sp, 148)
  87        mtcr    a0, cr14
  88#endif
  89
  90        ldw     a0, (sp, 24)
  91        ldw     a1, (sp, 28)
  92        ldw     a2, (sp, 32)
  93        ldw     a3, (sp, 36)
  94
  95        addi    sp, 40
  96        ldm     r4-r13, (sp)
  97        addi    sp, 40
  98        ldm     r16-r30, (sp)
  99        addi    sp, 72
 100        bf      1f
 101        mfcr    sp, ss0
 1021:
 103        rte
 104.endm
 105
 106.macro SAVE_REGS_FTRACE
 107        subi    sp, 152
 108        stw     tls, (sp, 0)
 109        stw     lr, (sp, 4)
 110
 111        mfcr    lr, psr
 112        stw     lr, (sp, 12)
 113
 114        addi    lr, sp, 152
 115        stw     lr, (sp, 16)
 116
 117        stw     a0, (sp, 20)
 118        stw     a0, (sp, 24)
 119        stw     a1, (sp, 28)
 120        stw     a2, (sp, 32)
 121        stw     a3, (sp, 36)
 122
 123        addi    sp, 40
 124        stm     r4-r13, (sp)
 125
 126        addi    sp, 40
 127        stm     r16-r30, (sp)
 128#ifdef CONFIG_CPU_HAS_HILO
 129        mfhi    lr
 130        stw     lr, (sp, 60)
 131        mflo    lr
 132        stw     lr, (sp, 64)
 133        mfcr    lr, cr14
 134        stw     lr, (sp, 68)
 135#endif
 136        subi    sp, 80
 137.endm
 138
 139.macro  RESTORE_REGS_FTRACE
 140        ldw     tls, (sp, 0)
 141
 142#ifdef CONFIG_CPU_HAS_HILO
 143        ldw     a0, (sp, 140)
 144        mthi    a0
 145        ldw     a0, (sp, 144)
 146        mtlo    a0
 147        ldw     a0, (sp, 148)
 148        mtcr    a0, cr14
 149#endif
 150
 151        ldw     a0, (sp, 24)
 152        ldw     a1, (sp, 28)
 153        ldw     a2, (sp, 32)
 154        ldw     a3, (sp, 36)
 155
 156        addi    sp, 40
 157        ldm     r4-r13, (sp)
 158        addi    sp, 40
 159        ldm     r16-r30, (sp)
 160        addi    sp, 72
 161.endm
 162
 163.macro SAVE_SWITCH_STACK
 164        subi    sp, 64
 165        stm     r4-r11, (sp)
 166        stw     lr,  (sp, 32)
 167        stw     r16, (sp, 36)
 168        stw     r17, (sp, 40)
 169        stw     r26, (sp, 44)
 170        stw     r27, (sp, 48)
 171        stw     r28, (sp, 52)
 172        stw     r29, (sp, 56)
 173        stw     r30, (sp, 60)
 174#ifdef CONFIG_CPU_HAS_HILO
 175        subi    sp, 16
 176        mfhi    lr
 177        stw     lr, (sp, 0)
 178        mflo    lr
 179        stw     lr, (sp, 4)
 180        mfcr    lr, cr14
 181        stw     lr, (sp, 8)
 182#endif
 183.endm
 184
 185.macro RESTORE_SWITCH_STACK
 186#ifdef CONFIG_CPU_HAS_HILO
 187        ldw     lr, (sp, 0)
 188        mthi    lr
 189        ldw     lr, (sp, 4)
 190        mtlo    lr
 191        ldw     lr, (sp, 8)
 192        mtcr    lr, cr14
 193        addi    sp, 16
 194#endif
 195        ldm     r4-r11, (sp)
 196        ldw     lr,  (sp, 32)
 197        ldw     r16, (sp, 36)
 198        ldw     r17, (sp, 40)
 199        ldw     r26, (sp, 44)
 200        ldw     r27, (sp, 48)
 201        ldw     r28, (sp, 52)
 202        ldw     r29, (sp, 56)
 203        ldw     r30, (sp, 60)
 204        addi    sp, 64
 205.endm
 206
 207/* MMU registers operators. */
 208.macro RD_MIR rx
 209        mfcr    \rx, cr<0, 15>
 210.endm
 211
 212.macro RD_MEH rx
 213        mfcr    \rx, cr<4, 15>
 214.endm
 215
 216.macro RD_MCIR rx
 217        mfcr    \rx, cr<8, 15>
 218.endm
 219
 220.macro RD_PGDR rx
 221        mfcr    \rx, cr<29, 15>
 222.endm
 223
 224.macro RD_PGDR_K rx
 225        mfcr    \rx, cr<28, 15>
 226.endm
 227
 228.macro WR_MEH rx
 229        mtcr    \rx, cr<4, 15>
 230.endm
 231
 232.macro WR_MCIR rx
 233        mtcr    \rx, cr<8, 15>
 234.endm
 235
 236#ifdef CONFIG_PAGE_OFFSET_80000000
 237#define MSA_SET cr<30, 15>
 238#define MSA_CLR cr<31, 15>
 239#endif
 240
 241#ifdef CONFIG_PAGE_OFFSET_A0000000
 242#define MSA_SET cr<31, 15>
 243#define MSA_CLR cr<30, 15>
 244#endif
 245
 246.macro SETUP_MMU
 247        /* Init psr and enable ee */
 248        lrw     r6, DEFAULT_PSR_VALUE
 249        mtcr    r6, psr
 250        psrset  ee
 251
 252        /* Invalid I/Dcache BTB BHT */
 253        movi    r6, 7
 254        lsli    r6, 16
 255        addi    r6, (1<<4) | 3
 256        mtcr    r6, cr17
 257
 258        /* Invalid all TLB */
 259        bgeni   r6, 26
 260        mtcr    r6, cr<8, 15> /* Set MCIR */
 261
 262        /* Check MMU on/off */
 263        mfcr    r6, cr18
 264        btsti   r6, 0
 265        bt      1f
 266
 267        /* MMU off: setup mapping tlb entry */
 268        movi    r6, 0
 269        mtcr    r6, cr<6, 15> /* Set MPR with 4K page size */
 270
 271        grs     r6, 1f /* Get current pa by PC */
 272        bmaski  r7, (PAGE_SHIFT + 1) /* r7 = 0x1fff */
 273        andn    r6, r7
 274        mtcr    r6, cr<4, 15> /* Set MEH */
 275
 276        mov     r8, r6
 277        movi    r7, 0x00000006
 278        or      r8, r7
 279        mtcr    r8, cr<2, 15> /* Set MEL0 */
 280        movi    r7, 0x00001006
 281        or      r8, r7
 282        mtcr    r8, cr<3, 15> /* Set MEL1 */
 283
 284        bgeni   r8, 28
 285        mtcr    r8, cr<8, 15> /* Set MCIR to write TLB */
 286
 287        br      2f
 2881:
 289        /*
 290         * MMU on: use origin MSA value from bootloader
 291         *
 292         * cr<30/31, 15> MSA register format:
 293         * 31 - 29 | 28 - 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
 294         *   BA     Reserved  SH  WA  B   SO SEC  C   D   V
 295         */
 296        mfcr    r6, MSA_SET /* Get MSA */
 2972:
 298        lsri    r6, 29
 299        lsli    r6, 29
 300        addi    r6, 0x1ce
 301        mtcr    r6, MSA_SET /* Set MSA */
 302
 303        movi    r6, 0
 304        mtcr    r6, MSA_CLR /* Clr MSA */
 305
 306        /* enable MMU */
 307        mfcr    r6, cr18
 308        bseti   r6, 0
 309        mtcr    r6, cr18
 310
 311        jmpi    3f /* jump to va */
 3123:
 313.endm
 314#endif /* __ASM_CSKY_ENTRY_H */
 315