1 /* SPDX-License-Identifier: GPL-2.0-only */ 1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 2 /* 3 * Copyright (C) 2016-2017 Synopsys, Inc. (www 3 * Copyright (C) 2016-2017 Synopsys, Inc. (www.synopsys.com) 4 */ 4 */ 5 5 6 #ifndef __SOC_ARC_AUX_H__ 6 #ifndef __SOC_ARC_AUX_H__ 7 #define __SOC_ARC_AUX_H__ 7 #define __SOC_ARC_AUX_H__ 8 8 9 #ifdef CONFIG_ARC 9 #ifdef CONFIG_ARC 10 10 11 #define read_aux_reg(r) __builtin_arc_ 11 #define read_aux_reg(r) __builtin_arc_lr(r) 12 12 13 /* gcc builtin sr needs reg param to be long i 13 /* gcc builtin sr needs reg param to be long immediate */ 14 #define write_aux_reg(r, v) __builtin_arc_ 14 #define write_aux_reg(r, v) __builtin_arc_sr((unsigned int)(v), r) 15 15 16 #else /* !CONFIG_ARC */ 16 #else /* !CONFIG_ARC */ 17 17 18 static inline int read_aux_reg(u32 r) 18 static inline int read_aux_reg(u32 r) 19 { 19 { 20 return 0; 20 return 0; 21 } 21 } 22 22 23 /* 23 /* 24 * function helps elide unused variable warnin 24 * function helps elide unused variable warning 25 * see: https://lists.infradead.org/pipermail/ !! 25 * see: http://lists.infradead.org/pipermail/linux-snps-arc/2016-November/001748.html 26 */ 26 */ 27 static inline void write_aux_reg(u32 r, u32 v) 27 static inline void write_aux_reg(u32 r, u32 v) 28 { 28 { 29 ; 29 ; 30 } 30 } 31 31 32 #endif 32 #endif 33 33 34 #define READ_BCR(reg, into) 34 #define READ_BCR(reg, into) \ 35 { 35 { \ 36 unsigned int tmp; 36 unsigned int tmp; \ 37 tmp = read_aux_reg(reg); 37 tmp = read_aux_reg(reg); \ 38 if (sizeof(tmp) == sizeof(into)) { 38 if (sizeof(tmp) == sizeof(into)) { \ 39 into = *((typeof(into) *)&tmp) 39 into = *((typeof(into) *)&tmp); \ 40 } else { 40 } else { \ 41 extern void bogus_undefined(vo 41 extern void bogus_undefined(void); \ 42 bogus_undefined(); 42 bogus_undefined(); \ 43 } 43 } \ 44 } 44 } 45 45 46 #define WRITE_AUX(reg, into) 46 #define WRITE_AUX(reg, into) \ 47 { 47 { \ 48 unsigned int tmp; 48 unsigned int tmp; \ 49 if (sizeof(tmp) == sizeof(into)) { 49 if (sizeof(tmp) == sizeof(into)) { \ 50 tmp = (*(unsigned int *)&(into 50 tmp = (*(unsigned int *)&(into)); \ 51 write_aux_reg(reg, tmp); 51 write_aux_reg(reg, tmp); \ 52 } else { 52 } else { \ 53 extern void bogus_undefined(vo 53 extern void bogus_undefined(void); \ 54 bogus_undefined(); 54 bogus_undefined(); \ 55 } 55 } \ 56 } 56 } 57 57 58 58 59 #endif 59 #endif 60 60
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.