• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_METAG_CORE_REG_H_
3 #define __ASM_METAG_CORE_REG_H_
4 
5 #include <asm/metag_regs.h>
6 
7 extern void core_reg_write(int unit, int reg, int thread, unsigned int val);
8 extern unsigned int core_reg_read(int unit, int reg, int thread);
9 
10 /*
11  * These macros allow direct access from C to any register known to the
12  * assembler. Example candidates are TXTACTCYC, TXIDLECYC, and TXPRIVEXT.
13  */
14 
15 #define __core_reg_get(reg) ({						\
16 	unsigned int __grvalue;						\
17 	asm volatile("MOV	%0," #reg				\
18 		     : "=r" (__grvalue));				\
19 	__grvalue;							\
20 })
21 
22 #define __core_reg_set(reg, value) do {					\
23 	unsigned int __srvalue = (value);				\
24 	asm volatile("MOV	" #reg ",%0"				\
25 		     :							\
26 		     : "r" (__srvalue));				\
27 } while (0)
28 
29 #define __core_reg_swap(reg, value) do {				\
30 	unsigned int __srvalue = (value);				\
31 	asm volatile("SWAP	" #reg ",%0"				\
32 		     : "+r" (__srvalue));				\
33 	(value) = __srvalue;						\
34 } while (0)
35 
36 #endif
37