aux.h (1184B)
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 18static 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 */ 27static 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