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