root/include/soc/arc/aux.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. read_aux_reg
  2. write_aux_reg

   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

/* [<][>][^][v][top][bottom][index][help] */