linux/include/soc/arc/aux.h
<<
>>
Prefs
   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
  18static inline int read_aux_reg(u32 r)
  19{
  20        return 0;
  21}
  22
  23/*
  24 * function helps elide unused variable warning
  25 * see: https://lists.infradead.org/pipermail/linux-snps-arc/2016-November/001748.html
  26 */
  27static 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
  60