| /* | 
 |  * 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 |