| /* SPDX-License-Identifier: GPL-2.0-only */ |
| * Copyright (C) 2016-2017 Synopsys, Inc. (www.synopsys.com) |
| #ifndef __SOC_ARC_AUX_H__ |
| #define __SOC_ARC_AUX_H__ |
| #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) |
| static inline int read_aux_reg(u32 r) |
| * function helps elide unused variable warning |
| * see: https://lists.infradead.org/pipermail/linux-snps-arc/2016-November/001748.html |
| static inline void write_aux_reg(u32 r, u32 v) |
| #define READ_BCR(reg, into) \ |
| tmp = read_aux_reg(reg); \ |
| if (sizeof(tmp) == sizeof(into)) { \ |
| into = *((typeof(into) *)&tmp); \ |
| extern void bogus_undefined(void); \ |
| #define WRITE_AUX(reg, into) \ |
| if (sizeof(tmp) == sizeof(into)) { \ |
| tmp = (*(unsigned int *)&(into)); \ |
| write_aux_reg(reg, tmp); \ |
| extern void bogus_undefined(void); \ |