Merge tag 'kconfig-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[sfrench/cifs-2.6.git] / include / soc / arc / aux.h
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: http://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