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