linux/arch/mips/include/asm/octeon/cvmx-ciu-defs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* Octeon CIU definitions
   3 *
   4 * Copyright (C) 2003-2018 Cavium, Inc.
   5 */
   6
   7#ifndef __CVMX_CIU_DEFS_H__
   8#define __CVMX_CIU_DEFS_H__
   9
  10#include <asm/bitfield.h>
  11
  12#define CVMX_CIU_ADDR(addr, coreid, coremask, offset)                          \
  13        (CVMX_ADD_IO_SEG(0x0001070000000000ull + addr##ull) +                  \
  14        (((coreid) & (coremask)) * offset))
  15
  16#define CVMX_CIU_EN2_PPX_IP4(c)         CVMX_CIU_ADDR(0xA400, c, 0x0F, 8)
  17#define CVMX_CIU_EN2_PPX_IP4_W1C(c)     CVMX_CIU_ADDR(0xCC00, c, 0x0F, 8)
  18#define CVMX_CIU_EN2_PPX_IP4_W1S(c)     CVMX_CIU_ADDR(0xAC00, c, 0x0F, 8)
  19#define CVMX_CIU_FUSE                   CVMX_CIU_ADDR(0x0728, 0, 0x00, 0)
  20#define CVMX_CIU_INT_SUM1               CVMX_CIU_ADDR(0x0108, 0, 0x00, 0)
  21#define CVMX_CIU_INTX_EN0(c)            CVMX_CIU_ADDR(0x0200, c, 0x3F, 16)
  22#define CVMX_CIU_INTX_EN0_W1C(c)        CVMX_CIU_ADDR(0x2200, c, 0x3F, 16)
  23#define CVMX_CIU_INTX_EN0_W1S(c)        CVMX_CIU_ADDR(0x6200, c, 0x3F, 16)
  24#define CVMX_CIU_INTX_EN1(c)            CVMX_CIU_ADDR(0x0208, c, 0x3F, 16)
  25#define CVMX_CIU_INTX_EN1_W1C(c)        CVMX_CIU_ADDR(0x2208, c, 0x3F, 16)
  26#define CVMX_CIU_INTX_EN1_W1S(c)        CVMX_CIU_ADDR(0x6208, c, 0x3F, 16)
  27#define CVMX_CIU_INTX_SUM0(c)           CVMX_CIU_ADDR(0x0000, c, 0x3F, 8)
  28#define CVMX_CIU_NMI                    CVMX_CIU_ADDR(0x0718, 0, 0x00, 0)
  29#define CVMX_CIU_PCI_INTA               CVMX_CIU_ADDR(0x0750, 0, 0x00, 0)
  30#define CVMX_CIU_PP_BIST_STAT           CVMX_CIU_ADDR(0x07E0, 0, 0x00, 0)
  31#define CVMX_CIU_PP_DBG                 CVMX_CIU_ADDR(0x0708, 0, 0x00, 0)
  32#define CVMX_CIU_PP_RST                 CVMX_CIU_ADDR(0x0700, 0, 0x00, 0)
  33#define CVMX_CIU_QLM0                   CVMX_CIU_ADDR(0x0780, 0, 0x00, 0)
  34#define CVMX_CIU_QLM1                   CVMX_CIU_ADDR(0x0788, 0, 0x00, 0)
  35#define CVMX_CIU_QLM_JTGC               CVMX_CIU_ADDR(0x0768, 0, 0x00, 0)
  36#define CVMX_CIU_QLM_JTGD               CVMX_CIU_ADDR(0x0770, 0, 0x00, 0)
  37#define CVMX_CIU_SOFT_BIST              CVMX_CIU_ADDR(0x0738, 0, 0x00, 0)
  38#define CVMX_CIU_SOFT_PRST1             CVMX_CIU_ADDR(0x0758, 0, 0x00, 0)
  39#define CVMX_CIU_SOFT_PRST              CVMX_CIU_ADDR(0x0748, 0, 0x00, 0)
  40#define CVMX_CIU_SOFT_RST               CVMX_CIU_ADDR(0x0740, 0, 0x00, 0)
  41#define CVMX_CIU_SUM2_PPX_IP4(c)        CVMX_CIU_ADDR(0x8C00, c, 0x0F, 8)
  42#define CVMX_CIU_TIM_MULTI_CAST         CVMX_CIU_ADDR(0xC200, 0, 0x00, 0)
  43#define CVMX_CIU_TIMX(c)                CVMX_CIU_ADDR(0x0480, c, 0x0F, 8)
  44
  45static inline uint64_t CVMX_CIU_MBOX_CLRX(unsigned int coreid)
  46{
  47        if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
  48                return CVMX_CIU_ADDR(0x100100600, coreid, 0x0F, 8);
  49        else
  50                return CVMX_CIU_ADDR(0x000000680, coreid, 0x0F, 8);
  51}
  52
  53static inline uint64_t CVMX_CIU_MBOX_SETX(unsigned int coreid)
  54{
  55        if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
  56                return CVMX_CIU_ADDR(0x100100400, coreid, 0x0F, 8);
  57        else
  58                return CVMX_CIU_ADDR(0x000000600, coreid, 0x0F, 8);
  59}
  60
  61static inline uint64_t CVMX_CIU_PP_POKEX(unsigned int coreid)
  62{
  63        switch (cvmx_get_octeon_family()) {
  64        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  65                return CVMX_CIU_ADDR(0x100100200, coreid, 0x0F, 8);
  66        case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
  67        case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
  68        case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
  69                return CVMX_CIU_ADDR(0x000030000, coreid, 0x0F, 8) -
  70                        0x60000000000ull;
  71        default:
  72                return CVMX_CIU_ADDR(0x000000580, coreid, 0x0F, 8);
  73        }
  74}
  75
  76static inline uint64_t CVMX_CIU_WDOGX(unsigned int coreid)
  77{
  78        switch (cvmx_get_octeon_family()) {
  79        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  80                return CVMX_CIU_ADDR(0x100100000, coreid, 0x0F, 8);
  81        case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
  82        case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
  83        case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
  84                return CVMX_CIU_ADDR(0x000020000, coreid, 0x0F, 8) -
  85                        0x60000000000ull;
  86        default:
  87                return CVMX_CIU_ADDR(0x000000500, coreid, 0x0F, 8);
  88        }
  89}
  90
  91
  92union cvmx_ciu_qlm {
  93        uint64_t u64;
  94        struct cvmx_ciu_qlm_s {
  95                __BITFIELD_FIELD(uint64_t g2bypass:1,
  96                __BITFIELD_FIELD(uint64_t reserved_53_62:10,
  97                __BITFIELD_FIELD(uint64_t g2deemph:5,
  98                __BITFIELD_FIELD(uint64_t reserved_45_47:3,
  99                __BITFIELD_FIELD(uint64_t g2margin:5,
 100                __BITFIELD_FIELD(uint64_t reserved_32_39:8,
 101                __BITFIELD_FIELD(uint64_t txbypass:1,
 102                __BITFIELD_FIELD(uint64_t reserved_21_30:10,
 103                __BITFIELD_FIELD(uint64_t txdeemph:5,
 104                __BITFIELD_FIELD(uint64_t reserved_13_15:3,
 105                __BITFIELD_FIELD(uint64_t txmargin:5,
 106                __BITFIELD_FIELD(uint64_t reserved_4_7:4,
 107                __BITFIELD_FIELD(uint64_t lane_en:4,
 108                ;)))))))))))))
 109        } s;
 110};
 111
 112union cvmx_ciu_qlm_jtgc {
 113        uint64_t u64;
 114        struct cvmx_ciu_qlm_jtgc_s {
 115                __BITFIELD_FIELD(uint64_t reserved_17_63:47,
 116                __BITFIELD_FIELD(uint64_t bypass_ext:1,
 117                __BITFIELD_FIELD(uint64_t reserved_11_15:5,
 118                __BITFIELD_FIELD(uint64_t clk_div:3,
 119                __BITFIELD_FIELD(uint64_t reserved_7_7:1,
 120                __BITFIELD_FIELD(uint64_t mux_sel:3,
 121                __BITFIELD_FIELD(uint64_t bypass:4,
 122                ;)))))))
 123        } s;
 124};
 125
 126union cvmx_ciu_qlm_jtgd {
 127        uint64_t u64;
 128        struct cvmx_ciu_qlm_jtgd_s {
 129                __BITFIELD_FIELD(uint64_t capture:1,
 130                __BITFIELD_FIELD(uint64_t shift:1,
 131                __BITFIELD_FIELD(uint64_t update:1,
 132                __BITFIELD_FIELD(uint64_t reserved_45_60:16,
 133                __BITFIELD_FIELD(uint64_t select:5,
 134                __BITFIELD_FIELD(uint64_t reserved_37_39:3,
 135                __BITFIELD_FIELD(uint64_t shft_cnt:5,
 136                __BITFIELD_FIELD(uint64_t shft_reg:32,
 137                ;))))))))
 138        } s;
 139};
 140
 141union cvmx_ciu_soft_prst {
 142        uint64_t u64;
 143        struct cvmx_ciu_soft_prst_s {
 144                __BITFIELD_FIELD(uint64_t reserved_3_63:61,
 145                __BITFIELD_FIELD(uint64_t host64:1,
 146                __BITFIELD_FIELD(uint64_t npi:1,
 147                __BITFIELD_FIELD(uint64_t soft_prst:1,
 148                ;))))
 149        } s;
 150};
 151
 152union cvmx_ciu_timx {
 153        uint64_t u64;
 154        struct cvmx_ciu_timx_s {
 155                __BITFIELD_FIELD(uint64_t reserved_37_63:27,
 156                __BITFIELD_FIELD(uint64_t one_shot:1,
 157                __BITFIELD_FIELD(uint64_t len:36,
 158                ;)))
 159        } s;
 160};
 161
 162union cvmx_ciu_wdogx {
 163        uint64_t u64;
 164        struct cvmx_ciu_wdogx_s {
 165                __BITFIELD_FIELD(uint64_t reserved_46_63:18,
 166                __BITFIELD_FIELD(uint64_t gstopen:1,
 167                __BITFIELD_FIELD(uint64_t dstop:1,
 168                __BITFIELD_FIELD(uint64_t cnt:24,
 169                __BITFIELD_FIELD(uint64_t len:16,
 170                __BITFIELD_FIELD(uint64_t state:2,
 171                __BITFIELD_FIELD(uint64_t mode:2,
 172                ;)))))))
 173        } s;
 174};
 175
 176#endif /* __CVMX_CIU_DEFS_H__ */
 177