12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * Copyright (C) 2016-2017 Synopsys, Inc. (www.synopsys.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
- #ifndef __SOC_ARC_AUX_H__
- #define __SOC_ARC_AUX_H__
- #ifdef CONFIG_ARC
- #define read_aux_reg(r) __builtin_arc_lr(r)
- /* gcc builtin sr needs reg param to be long immediate */
- #define write_aux_reg(r, v) __builtin_arc_sr((unsigned int)(v), r)
- #else /* !CONFIG_ARC */
- static inline int read_aux_reg(u32 r)
- {
- return 0;
- }
- /*
- * function helps elide unused variable warning
- * see: http://lists.infradead.org/pipermail/linux-snps-arc/2016-November/001748.html
- */
- static inline void write_aux_reg(u32 r, u32 v)
- {
- ;
- }
- #endif
- #define READ_BCR(reg, into) \
- { \
- unsigned int tmp; \
- tmp = read_aux_reg(reg); \
- if (sizeof(tmp) == sizeof(into)) { \
- into = *((typeof(into) *)&tmp); \
- } else { \
- extern void bogus_undefined(void); \
- bogus_undefined(); \
- } \
- }
- #define WRITE_AUX(reg, into) \
- { \
- unsigned int tmp; \
- if (sizeof(tmp) == sizeof(into)) { \
- tmp = (*(unsigned int *)&(into)); \
- write_aux_reg(reg, tmp); \
- } else { \
- extern void bogus_undefined(void); \
- bogus_undefined(); \
- } \
- }
- #endif
|