LCOV - code coverage report
Current view: top level - zephyr/arch/arc/v2/secureshield - arc_secure.h Coverage Total Hit
Test: new.info Lines: 0.0 % 10 0
Test Date: 2025-03-11 06:50:38

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2018 Synopsys, Inc. All rights reserved.
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : 
       8              : #ifndef ZEPHYR_INCLUDE_ARCH_ARC_V2_SJLI_H
       9              : #define ZEPHYR_INCLUDE_ARCH_ARC_V2_SJLI_H
      10              : 
      11            0 : #define SJLI_CALL_ARC_SECURE    0
      12              : 
      13            0 : #define ARC_S_CALL_AUX_READ             0
      14            0 : #define ARC_S_CALL_AUX_WRITE    1
      15            0 : #define ARC_S_CALL_IRQ_ALLOC    2
      16            0 : #define ARC_S_CALL_CLRI                 3
      17            0 : #define ARC_S_CALL_SETI                 4
      18            0 : #define ARC_S_CALL_LIMIT                5
      19              : 
      20              : 
      21              : 
      22            0 : #define ARC_N_IRQ_START_LEVEL ((CONFIG_NUM_IRQ_PRIO_LEVELS + 1) / 2)
      23              : 
      24              : #ifndef _ASMLANGUAGE
      25              : 
      26              : #include <zephyr/types.h>
      27              : #include <stdbool.h>
      28              : 
      29              : #include <zephyr/arch/arc/v2/aux_regs.h>
      30              : 
      31              : #ifdef __cplusplus
      32              : extern "C" {
      33              : #endif
      34              : 
      35              : 
      36            0 : #define arc_sjli(id)    \
      37              :                 (__asm__ volatile("sjli %[sjli_id]\n" :: [sjli_id] "i" (id)))
      38              : 
      39              : #ifdef CONFIG_ARC_SECURE_FIRMWARE
      40              : typedef uint32_t (*_arc_s_call_handler_t)(uint32_t arg1, uint32_t arg2, uint32_t arg3,
      41              :                                       uint32_t arg4, uint32_t arg5, uint32_t arg6);
      42              : 
      43              : 
      44              : extern void arc_go_to_normal(uint32_t addr);
      45              : extern void _arc_do_secure_call(void);
      46              : extern const _arc_s_call_handler_t arc_s_call_table[ARC_S_CALL_LIMIT];
      47              : 
      48              : #endif
      49              : 
      50              : 
      51              : #ifdef CONFIG_ARC_NORMAL_FIRMWARE
      52              : 
      53              : static inline uint32_t _arc_s_call_invoke6(uint32_t arg1, uint32_t arg2, uint32_t arg3,
      54              :                                           uint32_t arg4, uint32_t arg5, uint32_t arg6,
      55              :                                           uint32_t call_id)
      56              : {
      57              :         register uint32_t ret __asm__("r0") = arg1;
      58              :         register uint32_t r1 __asm__("r1") = arg2;
      59              :         register uint32_t r2 __asm__("r2") = arg3;
      60              :         register uint32_t r3 __asm__("r3") = arg4;
      61              :         register uint32_t r4 __asm__("r4") = arg5;
      62              :         register uint32_t r5 __asm__("r5") = arg6;
      63              :         register uint32_t r6 __asm__("r6") = call_id;
      64              : 
      65              :         compiler_barrier();
      66              : 
      67              :         __asm__ volatile(
      68              :                          "sjli %[id]\n"
      69              :                          : "=r"(ret)
      70              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
      71              :                            "r" (ret), "r" (r1), "r" (r2), "r" (r3),
      72              :                            "r" (r4), "r" (r5), "r" (r6));
      73              : 
      74              :         return ret;
      75              : }
      76              : 
      77              : static inline uint32_t _arc_s_call_invoke5(uint32_t arg1, uint32_t arg2, uint32_t arg3,
      78              :                                           uint32_t arg4, uint32_t arg5, uint32_t call_id)
      79              : {
      80              :         register uint32_t ret __asm__("r0") = arg1;
      81              :         register uint32_t r1 __asm__("r1") = arg2;
      82              :         register uint32_t r2 __asm__("r2") = arg3;
      83              :         register uint32_t r3 __asm__("r3") = arg4;
      84              :         register uint32_t r4 __asm__("r4") = arg5;
      85              :         register uint32_t r6 __asm__("r6") = call_id;
      86              : 
      87              :         compiler_barrier();
      88              : 
      89              :         __asm__ volatile(
      90              :                          "sjli %[id]\n"
      91              :                          : "=r"(ret)
      92              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
      93              :                            "r" (ret), "r" (r1), "r" (r2), "r" (r3),
      94              :                            "r" (r4), "r" (r6));
      95              : 
      96              :         return ret;
      97              : }
      98              : 
      99              : static inline uint32_t _arc_s_call_invoke4(uint32_t arg1, uint32_t arg2, uint32_t arg3,
     100              :                                           uint32_t arg4, uint32_t call_id)
     101              : {
     102              :         register uint32_t ret __asm__("r0") = arg1;
     103              :         register uint32_t r1 __asm__("r1") = arg2;
     104              :         register uint32_t r2 __asm__("r2") = arg3;
     105              :         register uint32_t r3 __asm__("r3") = arg4;
     106              :         register uint32_t r6 __asm__("r6") = call_id;
     107              : 
     108              :         compiler_barrier();
     109              : 
     110              :         __asm__ volatile(
     111              :                          "sjli %[id]\n"
     112              :                          : "=r"(ret)
     113              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
     114              :                            "r" (ret), "r" (r1), "r" (r2), "r" (r3),
     115              :                            "r" (r6));
     116              : 
     117              :         return ret;
     118              : }
     119              : 
     120              : static inline uint32_t _arc_s_call_invoke3(uint32_t arg1, uint32_t arg2, uint32_t arg3,
     121              :                                           uint32_t call_id)
     122              : {
     123              :         register uint32_t ret __asm__("r0") = arg1;
     124              :         register uint32_t r1 __asm__("r1") = arg2;
     125              :         register uint32_t r2 __asm__("r2") = arg3;
     126              :         register uint32_t r6 __asm__("r6") = call_id;
     127              : 
     128              :         compiler_barrier();
     129              : 
     130              :         __asm__ volatile(
     131              :                          "sjli %[id]\n"
     132              :                          : "=r"(ret)
     133              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
     134              :                            "r" (ret), "r" (r1), "r" (r2), "r" (r6));
     135              : 
     136              :         return ret;
     137              : }
     138              : 
     139              : static inline uint32_t _arc_s_call_invoke2(uint32_t arg1, uint32_t arg2, uint32_t call_id)
     140              : {
     141              :         register uint32_t ret __asm__("r0") = arg1;
     142              :         register uint32_t r1 __asm__("r1") = arg2;
     143              :         register uint32_t r6 __asm__("r6") = call_id;
     144              : 
     145              :         compiler_barrier();
     146              : 
     147              :         __asm__ volatile(
     148              :                          "sjli %[id]\n"
     149              :                          : "=r"(ret)
     150              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
     151              :                            "r" (ret), "r" (r1), "r" (r6));
     152              : 
     153              :         return ret;
     154              : }
     155              : 
     156              : static inline uint32_t _arc_s_call_invoke1(uint32_t arg1, uint32_t call_id)
     157              : {
     158              :         register uint32_t ret __asm__("r0") = arg1;
     159              :         register uint32_t r6 __asm__("r6") = call_id;
     160              : 
     161              :         compiler_barrier();
     162              : 
     163              :         __asm__ volatile(
     164              :                          "sjli %[id]\n"
     165              :                          : "=r"(ret)
     166              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
     167              :                            "r" (ret), "r" (r6));
     168              : 
     169              :         return ret;
     170              : }
     171              : 
     172              : static inline uint32_t _arc_s_call_invoke0(uint32_t call_id)
     173              : {
     174              :         register uint32_t ret __asm__("r0");
     175              :         register uint32_t r6 __asm__("r6") = call_id;
     176              : 
     177              :         compiler_barrier();
     178              : 
     179              :         __asm__ volatile(
     180              :                          "sjli %[id]\n"
     181              :                          : "=r"(ret)
     182              :                          : [id] "i" (SJLI_CALL_ARC_SECURE),
     183              :                            "r" (ret), "r" (r6));
     184              : 
     185              :         return ret;
     186              : }
     187              : 
     188              : static inline bool _arch_is_user_context(void)
     189              : {
     190              :         uint32_t status;
     191              : 
     192              :         compiler_barrier();
     193              : 
     194              :         __asm__ volatile("lr %0, [%[status32]]\n"
     195              :                          : "=r"(status)
     196              :                          : [status32] "i" (_ARC_V2_STATUS32));
     197              : 
     198              :         return !(status & _ARC_V2_STATUS32_US) ? true : false;
     199              : }
     200              : 
     201              : 
     202              : 
     203              : 
     204              : #endif /* CONFIG_ARC_NORMAL_FIRMWARE */
     205              : 
     206              : #ifdef __cplusplus
     207              : }
     208              : #endif
     209              : 
     210              : #endif /* _ASMLANGUAGE */
     211              : 
     212              : #endif /* ZEPHYR_INCLUDE_ARCH_ARC_V2_SECURE_H */
        

Generated by: LCOV version 2.0-1