forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
59 lines
1.2 KiB
/* 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__ |
|
|
|
#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: https://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
|
|
|