1 /* 2 * Copyright (C) 2016-2017 Synopsys, Inc. (www.synopsys.com) 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 */ 9 10 #ifndef __SOC_ARC_AUX_H__ 11 #define __SOC_ARC_AUX_H__ 12 13 #ifdef CONFIG_ARC 14 15 #define read_aux_reg(r) __builtin_arc_lr(r) 16 17 /* gcc builtin sr needs reg param to be long immediate */ 18 #define write_aux_reg(r, v) __builtin_arc_sr((unsigned int)(v), r) 19 20 #else /* !CONFIG_ARC */ 21 22 static inline int read_aux_reg(u32 r) 23 { 24 return 0; 25 } 26 27 /* 28 * function helps elide unused variable warning 29 * see: http://lists.infradead.org/pipermail/linux-snps-arc/2016-November/001748.html 30 */ 31 static inline void write_aux_reg(u32 r, u32 v) 32 { 33 ; 34 } 35 36 #endif 37 38 #define READ_BCR(reg, into) \ 39 { \ 40 unsigned int tmp; \ 41 tmp = read_aux_reg(reg); \ 42 if (sizeof(tmp) == sizeof(into)) { \ 43 into = *((typeof(into) *)&tmp); \ 44 } else { \ 45 extern void bogus_undefined(void); \ 46 bogus_undefined(); \ 47 } \ 48 } 49 50 #define WRITE_AUX(reg, into) \ 51 { \ 52 unsigned int tmp; \ 53 if (sizeof(tmp) == sizeof(into)) { \ 54 tmp = (*(unsigned int *)&(into)); \ 55 write_aux_reg(reg, tmp); \ 56 } else { \ 57 extern void bogus_undefined(void); \ 58 bogus_undefined(); \ 59 } \ 60 } 61 62 63 #endif 64