uboot/arch/mips/mach-octeon/include/mach/cvmx-sso-defs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2020 Marvell International Ltd.
   4 *
   5 * Configuration and status register (CSR) type definitions for
   6 * Octeon sso.
   7 */
   8
   9#ifndef __CVMX_SSO_DEFS_H__
  10#define __CVMX_SSO_DEFS_H__
  11
  12#define CVMX_SSO_ACTIVE_CYCLES          (0x00016700000010E8ull)
  13#define CVMX_SSO_ACTIVE_CYCLESX(offset) (0x0001670000001100ull + ((offset) & 3) * 8)
  14#define CVMX_SSO_AW_ADD                 (0x0001670000002080ull)
  15#define CVMX_SSO_AW_CFG                 (0x00016700000010F0ull)
  16#define CVMX_SSO_AW_ECO                 (0x0001670000001030ull)
  17#define CVMX_SSO_AW_READ_ARB            (0x0001670000002090ull)
  18#define CVMX_SSO_AW_STATUS              (0x00016700000010E0ull)
  19#define CVMX_SSO_AW_TAG_LATENCY_PC      (0x00016700000020A8ull)
  20#define CVMX_SSO_AW_TAG_REQ_PC          (0x00016700000020A0ull)
  21#define CVMX_SSO_AW_WE                  (0x0001670000001080ull)
  22#define CVMX_SSO_BIST_STAT              (0x0001670000001078ull)
  23#define CVMX_SSO_BIST_STATUS0           (0x0001670000001200ull)
  24#define CVMX_SSO_BIST_STATUS1           (0x0001670000001208ull)
  25#define CVMX_SSO_BIST_STATUS2           (0x0001670000001210ull)
  26#define CVMX_SSO_CFG                    (0x0001670000001088ull)
  27#define CVMX_SSO_DS_PC                  (0x0001670000001070ull)
  28#define CVMX_SSO_ECC_CTL0               (0x0001670000001280ull)
  29#define CVMX_SSO_ECC_CTL1               (0x0001670000001288ull)
  30#define CVMX_SSO_ECC_CTL2               (0x0001670000001290ull)
  31#define CVMX_SSO_ERR                    (0x0001670000001038ull)
  32#define CVMX_SSO_ERR0                   (0x0001670000001240ull)
  33#define CVMX_SSO_ERR1                   (0x0001670000001248ull)
  34#define CVMX_SSO_ERR2                   (0x0001670000001250ull)
  35#define CVMX_SSO_ERR_ENB                (0x0001670000001030ull)
  36#define CVMX_SSO_FIDX_ECC_CTL           (0x00016700000010D0ull)
  37#define CVMX_SSO_FIDX_ECC_ST            (0x00016700000010D8ull)
  38#define CVMX_SSO_FPAGE_CNT              (0x0001670000001090ull)
  39#define CVMX_SSO_GRPX_AQ_CNT(offset)    (0x0001670020000700ull + ((offset) & 255) * 0x10000ull)
  40#define CVMX_SSO_GRPX_AQ_THR(offset)    (0x0001670020000800ull + ((offset) & 255) * 0x10000ull)
  41#define CVMX_SSO_GRPX_DS_PC(offset)     (0x0001670020001400ull + ((offset) & 255) * 0x10000ull)
  42#define CVMX_SSO_GRPX_EXT_PC(offset)    (0x0001670020001100ull + ((offset) & 255) * 0x10000ull)
  43#define CVMX_SSO_GRPX_IAQ_THR(offset)   (0x0001670020000000ull + ((offset) & 255) * 0x10000ull)
  44#define CVMX_SSO_GRPX_INT(offset)       (0x0001670020000400ull + ((offset) & 255) * 0x10000ull)
  45#define CVMX_SSO_GRPX_INT_CNT(offset)   (0x0001670020000600ull + ((offset) & 255) * 0x10000ull)
  46#define CVMX_SSO_GRPX_INT_THR(offset)   (0x0001670020000500ull + ((offset) & 255) * 0x10000ull)
  47#define CVMX_SSO_GRPX_PRI(offset)       (0x0001670020000200ull + ((offset) & 255) * 0x10000ull)
  48#define CVMX_SSO_GRPX_TAQ_THR(offset)   (0x0001670020000100ull + ((offset) & 255) * 0x10000ull)
  49#define CVMX_SSO_GRPX_TS_PC(offset)     (0x0001670020001300ull + ((offset) & 255) * 0x10000ull)
  50#define CVMX_SSO_GRPX_WA_PC(offset)     (0x0001670020001200ull + ((offset) & 255) * 0x10000ull)
  51#define CVMX_SSO_GRPX_WS_PC(offset)     (0x0001670020001000ull + ((offset) & 255) * 0x10000ull)
  52#define CVMX_SSO_GWE_CFG                (0x0001670000001098ull)
  53#define CVMX_SSO_GWE_RANDOM             (0x00016700000010B0ull)
  54#define CVMX_SSO_GW_ECO                 (0x0001670000001038ull)
  55#define CVMX_SSO_IDX_ECC_CTL            (0x00016700000010C0ull)
  56#define CVMX_SSO_IDX_ECC_ST             (0x00016700000010C8ull)
  57#define CVMX_SSO_IENTX_LINKS(offset)    (0x00016700A0060000ull + ((offset) & 4095) * 8)
  58#define CVMX_SSO_IENTX_PENDTAG(offset)  (0x00016700A0040000ull + ((offset) & 4095) * 8)
  59#define CVMX_SSO_IENTX_QLINKS(offset)   (0x00016700A0080000ull + ((offset) & 4095) * 8)
  60#define CVMX_SSO_IENTX_TAG(offset)      (0x00016700A0000000ull + ((offset) & 4095) * 8)
  61#define CVMX_SSO_IENTX_WQPGRP(offset)   (0x00016700A0020000ull + ((offset) & 4095) * 8)
  62#define CVMX_SSO_IPL_CONFX(offset)      (0x0001670080080000ull + ((offset) & 255) * 8)
  63#define CVMX_SSO_IPL_DESCHEDX(offset)   (0x0001670080060000ull + ((offset) & 255) * 8)
  64#define CVMX_SSO_IPL_FREEX(offset)      (0x0001670080000000ull + ((offset) & 7) * 8)
  65#define CVMX_SSO_IPL_IAQX(offset)       (0x0001670080040000ull + ((offset) & 255) * 8)
  66#define CVMX_SSO_IQ_CNTX(offset)        (0x0001670000009000ull + ((offset) & 7) * 8)
  67#define CVMX_SSO_IQ_COM_CNT             (0x0001670000001058ull)
  68#define CVMX_SSO_IQ_INT                 (0x0001670000001048ull)
  69#define CVMX_SSO_IQ_INT_EN              (0x0001670000001050ull)
  70#define CVMX_SSO_IQ_THRX(offset)        (0x000167000000A000ull + ((offset) & 7) * 8)
  71#define CVMX_SSO_NOS_CNT                (0x0001670000001040ull)
  72#define CVMX_SSO_NW_TIM                 (0x0001670000001028ull)
  73#define CVMX_SSO_OTH_ECC_CTL            (0x00016700000010B0ull)
  74#define CVMX_SSO_OTH_ECC_ST             (0x00016700000010B8ull)
  75#define CVMX_SSO_PAGE_CNT               (0x0001670000001090ull)
  76#define CVMX_SSO_PND_ECC_CTL            (0x00016700000010A0ull)
  77#define CVMX_SSO_PND_ECC_ST             (0x00016700000010A8ull)
  78#define CVMX_SSO_PPX_ARB(offset)        (0x0001670040000000ull + ((offset) & 63) * 0x10000ull)
  79#define CVMX_SSO_PPX_GRP_MSK(offset)    (0x0001670000006000ull + ((offset) & 31) * 8)
  80#define CVMX_SSO_PPX_QOS_PRI(offset)    (0x0001670000003000ull + ((offset) & 31) * 8)
  81#define CVMX_SSO_PPX_SX_GRPMSKX(a, b, c)                                                           \
  82        (0x0001670040001000ull + ((a) << 16) + ((b) << 5) + ((c) << 3))
  83#define CVMX_SSO_PP_STRICT        (0x00016700000010E0ull)
  84#define CVMX_SSO_QOSX_RND(offset) (0x0001670000002000ull + ((offset) & 7) * 8)
  85#define CVMX_SSO_QOS_THRX(offset) (0x000167000000B000ull + ((offset) & 7) * 8)
  86#define CVMX_SSO_QOS_WE           (0x0001670000001080ull)
  87#define CVMX_SSO_RESET            CVMX_SSO_RESET_FUNC()
  88static inline u64 CVMX_SSO_RESET_FUNC(void)
  89{
  90        switch (cvmx_get_octeon_family()) {
  91        case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
  92        case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
  93                if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
  94                        return 0x00016700000010F8ull;
  95                if (OCTEON_IS_MODEL(OCTEON_CN78XX))
  96                        return 0x00016700000010F8ull;
  97        case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
  98                return 0x00016700000010F8ull;
  99        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 100                return 0x00016700000010F0ull;
 101        }
 102        return 0x00016700000010F8ull;
 103}
 104
 105#define CVMX_SSO_RWQ_HEAD_PTRX(offset)  (0x000167000000C000ull + ((offset) & 7) * 8)
 106#define CVMX_SSO_RWQ_POP_FPTR           (0x000167000000C408ull)
 107#define CVMX_SSO_RWQ_PSH_FPTR           (0x000167000000C400ull)
 108#define CVMX_SSO_RWQ_TAIL_PTRX(offset)  (0x000167000000C200ull + ((offset) & 7) * 8)
 109#define CVMX_SSO_SL_PPX_LINKS(offset)   (0x0001670060000040ull + ((offset) & 63) * 0x10000ull)
 110#define CVMX_SSO_SL_PPX_PENDTAG(offset) (0x0001670060000000ull + ((offset) & 63) * 0x10000ull)
 111#define CVMX_SSO_SL_PPX_PENDWQP(offset) (0x0001670060000010ull + ((offset) & 63) * 0x10000ull)
 112#define CVMX_SSO_SL_PPX_TAG(offset)     (0x0001670060000020ull + ((offset) & 63) * 0x10000ull)
 113#define CVMX_SSO_SL_PPX_WQP(offset)     (0x0001670060000030ull + ((offset) & 63) * 0x10000ull)
 114#define CVMX_SSO_TAQX_LINK(offset)      (0x00016700C0000000ull + ((offset) & 2047) * 4096)
 115#define CVMX_SSO_TAQX_WAEX_TAG(offset, block_id)                                                   \
 116        (0x00016700D0000000ull + (((offset) & 15) + ((block_id) & 2047) * 0x100ull) * 16)
 117#define CVMX_SSO_TAQX_WAEX_WQP(offset, block_id)                                                   \
 118        (0x00016700D0000008ull + (((offset) & 15) + ((block_id) & 2047) * 0x100ull) * 16)
 119#define CVMX_SSO_TAQ_ADD                (0x00016700000020E0ull)
 120#define CVMX_SSO_TAQ_CNT                (0x00016700000020C0ull)
 121#define CVMX_SSO_TIAQX_STATUS(offset)   (0x00016700000C0000ull + ((offset) & 255) * 8)
 122#define CVMX_SSO_TOAQX_STATUS(offset)   (0x00016700000D0000ull + ((offset) & 255) * 8)
 123#define CVMX_SSO_TS_PC                  (0x0001670000001068ull)
 124#define CVMX_SSO_WA_COM_PC              (0x0001670000001060ull)
 125#define CVMX_SSO_WA_PCX(offset)         (0x0001670000005000ull + ((offset) & 7) * 8)
 126#define CVMX_SSO_WQ_INT                 (0x0001670000001000ull)
 127#define CVMX_SSO_WQ_INT_CNTX(offset)    (0x0001670000008000ull + ((offset) & 63) * 8)
 128#define CVMX_SSO_WQ_INT_PC              (0x0001670000001020ull)
 129#define CVMX_SSO_WQ_INT_THRX(offset)    (0x0001670000007000ull + ((offset) & 63) * 8)
 130#define CVMX_SSO_WQ_IQ_DIS              (0x0001670000001010ull)
 131#define CVMX_SSO_WS_CFG                 (0x0001670000001088ull)
 132#define CVMX_SSO_WS_ECO                 (0x0001670000001048ull)
 133#define CVMX_SSO_WS_PCX(offset)         (0x0001670000004000ull + ((offset) & 63) * 8)
 134#define CVMX_SSO_XAQX_HEAD_NEXT(offset) (0x00016700000A0000ull + ((offset) & 255) * 8)
 135#define CVMX_SSO_XAQX_HEAD_PTR(offset)  (0x0001670000080000ull + ((offset) & 255) * 8)
 136#define CVMX_SSO_XAQX_TAIL_NEXT(offset) (0x00016700000B0000ull + ((offset) & 255) * 8)
 137#define CVMX_SSO_XAQX_TAIL_PTR(offset)  (0x0001670000090000ull + ((offset) & 255) * 8)
 138#define CVMX_SSO_XAQ_AURA               (0x0001670000002100ull)
 139#define CVMX_SSO_XAQ_LATENCY_PC         (0x00016700000020B8ull)
 140#define CVMX_SSO_XAQ_REQ_PC             (0x00016700000020B0ull)
 141
 142/**
 143 * cvmx_sso_active_cycles
 144 *
 145 * SSO_ACTIVE_CYCLES = SSO cycles SSO active
 146 *
 147 * This register counts every sclk cycle that the SSO clocks are active.
 148 * **NOTE: Added in pass 2.0
 149 */
 150union cvmx_sso_active_cycles {
 151        u64 u64;
 152        struct cvmx_sso_active_cycles_s {
 153                u64 act_cyc : 64;
 154        } s;
 155        struct cvmx_sso_active_cycles_s cn68xx;
 156};
 157
 158typedef union cvmx_sso_active_cycles cvmx_sso_active_cycles_t;
 159
 160/**
 161 * cvmx_sso_active_cycles#
 162 *
 163 * This register counts every coprocessor clock (SCLK) cycle that the SSO clocks are active.
 164 *
 165 */
 166union cvmx_sso_active_cyclesx {
 167        u64 u64;
 168        struct cvmx_sso_active_cyclesx_s {
 169                u64 act_cyc : 64;
 170        } s;
 171        struct cvmx_sso_active_cyclesx_s cn73xx;
 172        struct cvmx_sso_active_cyclesx_s cn78xx;
 173        struct cvmx_sso_active_cyclesx_s cn78xxp1;
 174        struct cvmx_sso_active_cyclesx_s cnf75xx;
 175};
 176
 177typedef union cvmx_sso_active_cyclesx cvmx_sso_active_cyclesx_t;
 178
 179/**
 180 * cvmx_sso_aw_add
 181 */
 182union cvmx_sso_aw_add {
 183        u64 u64;
 184        struct cvmx_sso_aw_add_s {
 185                u64 reserved_30_63 : 34;
 186                u64 rsvd_free : 14;
 187                u64 reserved_0_15 : 16;
 188        } s;
 189        struct cvmx_sso_aw_add_s cn73xx;
 190        struct cvmx_sso_aw_add_s cn78xx;
 191        struct cvmx_sso_aw_add_s cn78xxp1;
 192        struct cvmx_sso_aw_add_s cnf75xx;
 193};
 194
 195typedef union cvmx_sso_aw_add cvmx_sso_aw_add_t;
 196
 197/**
 198 * cvmx_sso_aw_cfg
 199 *
 200 * This register controls the operation of the add-work block (AW).
 201 *
 202 */
 203union cvmx_sso_aw_cfg {
 204        u64 u64;
 205        struct cvmx_sso_aw_cfg_s {
 206                u64 reserved_9_63 : 55;
 207                u64 ldt_short : 1;
 208                u64 lol : 1;
 209                u64 xaq_alloc_dis : 1;
 210                u64 ocla_bp : 1;
 211                u64 xaq_byp_dis : 1;
 212                u64 stt : 1;
 213                u64 ldt : 1;
 214                u64 ldwb : 1;
 215                u64 rwen : 1;
 216        } s;
 217        struct cvmx_sso_aw_cfg_s cn73xx;
 218        struct cvmx_sso_aw_cfg_s cn78xx;
 219        struct cvmx_sso_aw_cfg_s cn78xxp1;
 220        struct cvmx_sso_aw_cfg_s cnf75xx;
 221};
 222
 223typedef union cvmx_sso_aw_cfg cvmx_sso_aw_cfg_t;
 224
 225/**
 226 * cvmx_sso_aw_eco
 227 */
 228union cvmx_sso_aw_eco {
 229        u64 u64;
 230        struct cvmx_sso_aw_eco_s {
 231                u64 reserved_8_63 : 56;
 232                u64 eco_rw : 8;
 233        } s;
 234        struct cvmx_sso_aw_eco_s cn73xx;
 235        struct cvmx_sso_aw_eco_s cnf75xx;
 236};
 237
 238typedef union cvmx_sso_aw_eco cvmx_sso_aw_eco_t;
 239
 240/**
 241 * cvmx_sso_aw_read_arb
 242 *
 243 * This register fine tunes the AW read arbiter and is for diagnostic use.
 244 *
 245 */
 246union cvmx_sso_aw_read_arb {
 247        u64 u64;
 248        struct cvmx_sso_aw_read_arb_s {
 249                u64 reserved_30_63 : 34;
 250                u64 xaq_lev : 6;
 251                u64 reserved_21_23 : 3;
 252                u64 xaq_min : 5;
 253                u64 reserved_14_15 : 2;
 254                u64 aw_tag_lev : 6;
 255                u64 reserved_5_7 : 3;
 256                u64 aw_tag_min : 5;
 257        } s;
 258        struct cvmx_sso_aw_read_arb_s cn73xx;
 259        struct cvmx_sso_aw_read_arb_s cn78xx;
 260        struct cvmx_sso_aw_read_arb_s cn78xxp1;
 261        struct cvmx_sso_aw_read_arb_s cnf75xx;
 262};
 263
 264typedef union cvmx_sso_aw_read_arb cvmx_sso_aw_read_arb_t;
 265
 266/**
 267 * cvmx_sso_aw_status
 268 *
 269 * This register indicates the status of the add-work block (AW).
 270 *
 271 */
 272union cvmx_sso_aw_status {
 273        u64 u64;
 274        struct cvmx_sso_aw_status_s {
 275                u64 reserved_6_63 : 58;
 276                u64 xaq_buf_cached : 6;
 277        } s;
 278        struct cvmx_sso_aw_status_s cn73xx;
 279        struct cvmx_sso_aw_status_s cn78xx;
 280        struct cvmx_sso_aw_status_s cn78xxp1;
 281        struct cvmx_sso_aw_status_s cnf75xx;
 282};
 283
 284typedef union cvmx_sso_aw_status cvmx_sso_aw_status_t;
 285
 286/**
 287 * cvmx_sso_aw_tag_latency_pc
 288 */
 289union cvmx_sso_aw_tag_latency_pc {
 290        u64 u64;
 291        struct cvmx_sso_aw_tag_latency_pc_s {
 292                u64 count : 64;
 293        } s;
 294        struct cvmx_sso_aw_tag_latency_pc_s cn73xx;
 295        struct cvmx_sso_aw_tag_latency_pc_s cn78xx;
 296        struct cvmx_sso_aw_tag_latency_pc_s cn78xxp1;
 297        struct cvmx_sso_aw_tag_latency_pc_s cnf75xx;
 298};
 299
 300typedef union cvmx_sso_aw_tag_latency_pc cvmx_sso_aw_tag_latency_pc_t;
 301
 302/**
 303 * cvmx_sso_aw_tag_req_pc
 304 */
 305union cvmx_sso_aw_tag_req_pc {
 306        u64 u64;
 307        struct cvmx_sso_aw_tag_req_pc_s {
 308                u64 count : 64;
 309        } s;
 310        struct cvmx_sso_aw_tag_req_pc_s cn73xx;
 311        struct cvmx_sso_aw_tag_req_pc_s cn78xx;
 312        struct cvmx_sso_aw_tag_req_pc_s cn78xxp1;
 313        struct cvmx_sso_aw_tag_req_pc_s cnf75xx;
 314};
 315
 316typedef union cvmx_sso_aw_tag_req_pc cvmx_sso_aw_tag_req_pc_t;
 317
 318/**
 319 * cvmx_sso_aw_we
 320 */
 321union cvmx_sso_aw_we {
 322        u64 u64;
 323        struct cvmx_sso_aw_we_s {
 324                u64 reserved_29_63 : 35;
 325                u64 rsvd_free : 13;
 326                u64 reserved_13_15 : 3;
 327                u64 free_cnt : 13;
 328        } s;
 329        struct cvmx_sso_aw_we_s cn73xx;
 330        struct cvmx_sso_aw_we_s cn78xx;
 331        struct cvmx_sso_aw_we_s cn78xxp1;
 332        struct cvmx_sso_aw_we_s cnf75xx;
 333};
 334
 335typedef union cvmx_sso_aw_we cvmx_sso_aw_we_t;
 336
 337/**
 338 * cvmx_sso_bist_stat
 339 *
 340 * SSO_BIST_STAT = SSO BIST Status Register
 341 *
 342 * Contains the BIST status for the SSO memories ('0' = pass, '1' = fail).
 343 * Note that PP BIST status is not reported here as it was in previous designs.
 344 *
 345 *   There may be more for DDR interface buffers.
 346 *   It's possible that a RAM will be used for SSO_PP_QOS_RND.
 347 */
 348union cvmx_sso_bist_stat {
 349        u64 u64;
 350        struct cvmx_sso_bist_stat_s {
 351                u64 reserved_62_63 : 2;
 352                u64 odu_pref : 2;
 353                u64 reserved_54_59 : 6;
 354                u64 fptr : 2;
 355                u64 reserved_45_51 : 7;
 356                u64 rwo_dat : 1;
 357                u64 rwo : 2;
 358                u64 reserved_35_41 : 7;
 359                u64 rwi_dat : 1;
 360                u64 reserved_32_33 : 2;
 361                u64 soc : 1;
 362                u64 reserved_28_30 : 3;
 363                u64 ncbo : 4;
 364                u64 reserved_21_23 : 3;
 365                u64 index : 1;
 366                u64 reserved_17_19 : 3;
 367                u64 fidx : 1;
 368                u64 reserved_10_15 : 6;
 369                u64 pend : 2;
 370                u64 reserved_2_7 : 6;
 371                u64 oth : 2;
 372        } s;
 373        struct cvmx_sso_bist_stat_s cn68xx;
 374        struct cvmx_sso_bist_stat_cn68xxp1 {
 375                u64 reserved_54_63 : 10;
 376                u64 fptr : 2;
 377                u64 reserved_45_51 : 7;
 378                u64 rwo_dat : 1;
 379                u64 rwo : 2;
 380                u64 reserved_35_41 : 7;
 381                u64 rwi_dat : 1;
 382                u64 reserved_32_33 : 2;
 383                u64 soc : 1;
 384                u64 reserved_28_30 : 3;
 385                u64 ncbo : 4;
 386                u64 reserved_21_23 : 3;
 387                u64 index : 1;
 388                u64 reserved_17_19 : 3;
 389                u64 fidx : 1;
 390                u64 reserved_10_15 : 6;
 391                u64 pend : 2;
 392                u64 reserved_2_7 : 6;
 393                u64 oth : 2;
 394        } cn68xxp1;
 395};
 396
 397typedef union cvmx_sso_bist_stat cvmx_sso_bist_stat_t;
 398
 399/**
 400 * cvmx_sso_bist_status0
 401 *
 402 * Contains the BIST status for the SSO memories.
 403 *
 404 */
 405union cvmx_sso_bist_status0 {
 406        u64 u64;
 407        struct cvmx_sso_bist_status0_s {
 408                u64 reserved_10_63 : 54;
 409                u64 bist : 10;
 410        } s;
 411        struct cvmx_sso_bist_status0_s cn73xx;
 412        struct cvmx_sso_bist_status0_s cn78xx;
 413        struct cvmx_sso_bist_status0_s cn78xxp1;
 414        struct cvmx_sso_bist_status0_s cnf75xx;
 415};
 416
 417typedef union cvmx_sso_bist_status0 cvmx_sso_bist_status0_t;
 418
 419/**
 420 * cvmx_sso_bist_status1
 421 *
 422 * Contains the BIST status for the SSO memories.
 423 *
 424 */
 425union cvmx_sso_bist_status1 {
 426        u64 u64;
 427        struct cvmx_sso_bist_status1_s {
 428                u64 reserved_7_63 : 57;
 429                u64 bist : 7;
 430        } s;
 431        struct cvmx_sso_bist_status1_s cn73xx;
 432        struct cvmx_sso_bist_status1_s cn78xx;
 433        struct cvmx_sso_bist_status1_s cn78xxp1;
 434        struct cvmx_sso_bist_status1_s cnf75xx;
 435};
 436
 437typedef union cvmx_sso_bist_status1 cvmx_sso_bist_status1_t;
 438
 439/**
 440 * cvmx_sso_bist_status2
 441 *
 442 * Contains the BIST status for the SSO memories.
 443 *
 444 */
 445union cvmx_sso_bist_status2 {
 446        u64 u64;
 447        struct cvmx_sso_bist_status2_s {
 448                u64 reserved_9_63 : 55;
 449                u64 bist : 9;
 450        } s;
 451        struct cvmx_sso_bist_status2_s cn73xx;
 452        struct cvmx_sso_bist_status2_s cn78xx;
 453        struct cvmx_sso_bist_status2_s cn78xxp1;
 454        struct cvmx_sso_bist_status2_s cnf75xx;
 455};
 456
 457typedef union cvmx_sso_bist_status2 cvmx_sso_bist_status2_t;
 458
 459/**
 460 * cvmx_sso_cfg
 461 *
 462 * SSO_CFG = SSO Config
 463 *
 464 * This register is an assortment of various SSO configuration bits.
 465 */
 466union cvmx_sso_cfg {
 467        u64 u64;
 468        struct cvmx_sso_cfg_s {
 469                u64 reserved_16_63 : 48;
 470                u64 qck_gw_rsp_adj : 3;
 471                u64 qck_gw_rsp_dis : 1;
 472                u64 qck_sw_dis : 1;
 473                u64 rwq_alloc_dis : 1;
 474                u64 soc_ccam_dis : 1;
 475                u64 sso_cclk_dis : 1;
 476                u64 rwo_flush : 1;
 477                u64 wfe_thr : 1;
 478                u64 rwio_byp_dis : 1;
 479                u64 rwq_byp_dis : 1;
 480                u64 stt : 1;
 481                u64 ldt : 1;
 482                u64 dwb : 1;
 483                u64 rwen : 1;
 484        } s;
 485        struct cvmx_sso_cfg_s cn68xx;
 486        struct cvmx_sso_cfg_cn68xxp1 {
 487                u64 reserved_8_63 : 56;
 488                u64 rwo_flush : 1;
 489                u64 wfe_thr : 1;
 490                u64 rwio_byp_dis : 1;
 491                u64 rwq_byp_dis : 1;
 492                u64 stt : 1;
 493                u64 ldt : 1;
 494                u64 dwb : 1;
 495                u64 rwen : 1;
 496        } cn68xxp1;
 497};
 498
 499typedef union cvmx_sso_cfg cvmx_sso_cfg_t;
 500
 501/**
 502 * cvmx_sso_ds_pc
 503 *
 504 * SSO_DS_PC = SSO De-Schedule Performance Counter
 505 *
 506 * Counts the number of de-schedule requests.
 507 * Counter rolls over through zero when max value exceeded.
 508 */
 509union cvmx_sso_ds_pc {
 510        u64 u64;
 511        struct cvmx_sso_ds_pc_s {
 512                u64 ds_pc : 64;
 513        } s;
 514        struct cvmx_sso_ds_pc_s cn68xx;
 515        struct cvmx_sso_ds_pc_s cn68xxp1;
 516};
 517
 518typedef union cvmx_sso_ds_pc cvmx_sso_ds_pc_t;
 519
 520/**
 521 * cvmx_sso_ecc_ctl0
 522 */
 523union cvmx_sso_ecc_ctl0 {
 524        u64 u64;
 525        struct cvmx_sso_ecc_ctl0_s {
 526                u64 reserved_30_63 : 34;
 527                u64 toaqt_flip : 2;
 528                u64 toaqt_cdis : 1;
 529                u64 toaqh_flip : 2;
 530                u64 toaqh_cdis : 1;
 531                u64 tiaqt_flip : 2;
 532                u64 tiaqt_cdis : 1;
 533                u64 tiaqh_flip : 2;
 534                u64 tiaqh_cdis : 1;
 535                u64 llm_flip : 2;
 536                u64 llm_cdis : 1;
 537                u64 inp_flip : 2;
 538                u64 inp_cdis : 1;
 539                u64 qtc_flip : 2;
 540                u64 qtc_cdis : 1;
 541                u64 xaq_flip : 2;
 542                u64 xaq_cdis : 1;
 543                u64 fff_flip : 2;
 544                u64 fff_cdis : 1;
 545                u64 wes_flip : 2;
 546                u64 wes_cdis : 1;
 547        } s;
 548        struct cvmx_sso_ecc_ctl0_s cn73xx;
 549        struct cvmx_sso_ecc_ctl0_s cn78xx;
 550        struct cvmx_sso_ecc_ctl0_s cn78xxp1;
 551        struct cvmx_sso_ecc_ctl0_s cnf75xx;
 552};
 553
 554typedef union cvmx_sso_ecc_ctl0 cvmx_sso_ecc_ctl0_t;
 555
 556/**
 557 * cvmx_sso_ecc_ctl1
 558 */
 559union cvmx_sso_ecc_ctl1 {
 560        u64 u64;
 561        struct cvmx_sso_ecc_ctl1_s {
 562                u64 reserved_21_63 : 43;
 563                u64 thrint_flip : 2;
 564                u64 thrint_cdis : 1;
 565                u64 mask_flip : 2;
 566                u64 mask_cdis : 1;
 567                u64 gdw_flip : 2;
 568                u64 gdw_cdis : 1;
 569                u64 qidx_flip : 2;
 570                u64 qidx_cdis : 1;
 571                u64 tptr_flip : 2;
 572                u64 tptr_cdis : 1;
 573                u64 hptr_flip : 2;
 574                u64 hptr_cdis : 1;
 575                u64 cntr_flip : 2;
 576                u64 cntr_cdis : 1;
 577        } s;
 578        struct cvmx_sso_ecc_ctl1_s cn73xx;
 579        struct cvmx_sso_ecc_ctl1_s cn78xx;
 580        struct cvmx_sso_ecc_ctl1_s cn78xxp1;
 581        struct cvmx_sso_ecc_ctl1_s cnf75xx;
 582};
 583
 584typedef union cvmx_sso_ecc_ctl1 cvmx_sso_ecc_ctl1_t;
 585
 586/**
 587 * cvmx_sso_ecc_ctl2
 588 */
 589union cvmx_sso_ecc_ctl2 {
 590        u64 u64;
 591        struct cvmx_sso_ecc_ctl2_s {
 592                u64 reserved_15_63 : 49;
 593                u64 ncbo_flip : 2;
 594                u64 ncbo_cdis : 1;
 595                u64 pnd_flip : 2;
 596                u64 pnd_cdis : 1;
 597                u64 oth_flip : 2;
 598                u64 oth_cdis : 1;
 599                u64 nidx_flip : 2;
 600                u64 nidx_cdis : 1;
 601                u64 pidx_flip : 2;
 602                u64 pidx_cdis : 1;
 603        } s;
 604        struct cvmx_sso_ecc_ctl2_s cn73xx;
 605        struct cvmx_sso_ecc_ctl2_s cn78xx;
 606        struct cvmx_sso_ecc_ctl2_s cn78xxp1;
 607        struct cvmx_sso_ecc_ctl2_s cnf75xx;
 608};
 609
 610typedef union cvmx_sso_ecc_ctl2 cvmx_sso_ecc_ctl2_t;
 611
 612/**
 613 * cvmx_sso_err
 614 *
 615 * SSO_ERR = SSO Error Register
 616 *
 617 * Contains ECC and other misc error bits.
 618 *
 619 * <45> The free page error bit will assert when SSO_FPAGE_CNT <= 16 and
 620 *      SSO_CFG[RWEN] is 1.  Software will want to disable the interrupt
 621 *      associated with this error when recovering SSO pointers from the
 622 *      FPA and SSO.
 623 *
 624 * This register also contains the illegal operation error bits:
 625 *
 626 * <42> Received ADDWQ with tag specified as EMPTY
 627 * <41> Received illegal opcode
 628 * <40> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE
 629 *      from WS with CLR_NSCHED pending
 630 * <39> Received CLR_NSCHED
 631 *      from WS with SWTAG_DESCH/DESCH/CLR_NSCHED pending
 632 * <38> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE
 633 *      from WS with ALLOC_WE pending
 634 * <37> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/ALLOC_WE/CLR_NSCHED
 635 *      from WS with GET_WORK pending
 636 * <36> Received SWTAG_FULL/SWTAG_DESCH
 637 *      with tag specified as UNSCHEDULED
 638 * <35> Received SWTAG/SWTAG_FULL/SWTAG_DESCH
 639 *      with tag specified as EMPTY
 640 * <34> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK
 641 *      from WS with pending tag switch to ORDERED or ATOMIC
 642 * <33> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP
 643 *      from WS in UNSCHEDULED state
 644 * <32> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP
 645 *      from WS in EMPTY state
 646 */
 647union cvmx_sso_err {
 648        u64 u64;
 649        struct cvmx_sso_err_s {
 650                u64 reserved_48_63 : 16;
 651                u64 bfp : 1;
 652                u64 awe : 1;
 653                u64 fpe : 1;
 654                u64 reserved_43_44 : 2;
 655                u64 iop : 11;
 656                u64 reserved_12_31 : 20;
 657                u64 pnd_dbe0 : 1;
 658                u64 pnd_sbe0 : 1;
 659                u64 pnd_dbe1 : 1;
 660                u64 pnd_sbe1 : 1;
 661                u64 oth_dbe0 : 1;
 662                u64 oth_sbe0 : 1;
 663                u64 oth_dbe1 : 1;
 664                u64 oth_sbe1 : 1;
 665                u64 idx_dbe : 1;
 666                u64 idx_sbe : 1;
 667                u64 fidx_dbe : 1;
 668                u64 fidx_sbe : 1;
 669        } s;
 670        struct cvmx_sso_err_s cn68xx;
 671        struct cvmx_sso_err_s cn68xxp1;
 672};
 673
 674typedef union cvmx_sso_err cvmx_sso_err_t;
 675
 676/**
 677 * cvmx_sso_err0
 678 *
 679 * This register contains ECC and other miscellaneous error bits.
 680 *
 681 */
 682union cvmx_sso_err0 {
 683        u64 u64;
 684        struct cvmx_sso_err0_s {
 685                u64 reserved_52_63 : 12;
 686                u64 toaqt_dbe : 1;
 687                u64 toaqt_sbe : 1;
 688                u64 toaqh_dbe : 1;
 689                u64 toaqh_sbe : 1;
 690                u64 tiaqt_dbe : 1;
 691                u64 tiaqt_sbe : 1;
 692                u64 tiaqh_dbe : 1;
 693                u64 tiaqh_sbe : 1;
 694                u64 llm_dbe : 1;
 695                u64 llm_sbe : 1;
 696                u64 inp_dbe : 1;
 697                u64 inp_sbe : 1;
 698                u64 qtc_dbe : 1;
 699                u64 qtc_sbe : 1;
 700                u64 xaq_dbe : 1;
 701                u64 xaq_sbe : 1;
 702                u64 fff_dbe : 1;
 703                u64 fff_sbe : 1;
 704                u64 wes_dbe : 1;
 705                u64 wes_sbe : 1;
 706                u64 reserved_6_31 : 26;
 707                u64 addwq_dropped : 1;
 708                u64 awempty : 1;
 709                u64 grpdis : 1;
 710                u64 bfp : 1;
 711                u64 awe : 1;
 712                u64 fpe : 1;
 713        } s;
 714        struct cvmx_sso_err0_s cn73xx;
 715        struct cvmx_sso_err0_s cn78xx;
 716        struct cvmx_sso_err0_s cn78xxp1;
 717        struct cvmx_sso_err0_s cnf75xx;
 718};
 719
 720typedef union cvmx_sso_err0 cvmx_sso_err0_t;
 721
 722/**
 723 * cvmx_sso_err1
 724 *
 725 * This register contains ECC and other miscellaneous error bits.
 726 *
 727 */
 728union cvmx_sso_err1 {
 729        u64 u64;
 730        struct cvmx_sso_err1_s {
 731                u64 reserved_14_63 : 50;
 732                u64 thrint_dbe : 1;
 733                u64 thrint_sbe : 1;
 734                u64 mask_dbe : 1;
 735                u64 mask_sbe : 1;
 736                u64 gdw_dbe : 1;
 737                u64 gdw_sbe : 1;
 738                u64 qidx_dbe : 1;
 739                u64 qidx_sbe : 1;
 740                u64 tptr_dbe : 1;
 741                u64 tptr_sbe : 1;
 742                u64 hptr_dbe : 1;
 743                u64 hptr_sbe : 1;
 744                u64 cntr_dbe : 1;
 745                u64 cntr_sbe : 1;
 746        } s;
 747        struct cvmx_sso_err1_s cn73xx;
 748        struct cvmx_sso_err1_s cn78xx;
 749        struct cvmx_sso_err1_s cn78xxp1;
 750        struct cvmx_sso_err1_s cnf75xx;
 751};
 752
 753typedef union cvmx_sso_err1 cvmx_sso_err1_t;
 754
 755/**
 756 * cvmx_sso_err2
 757 *
 758 * This register contains ECC and other miscellaneous error bits.
 759 *
 760 */
 761union cvmx_sso_err2 {
 762        u64 u64;
 763        struct cvmx_sso_err2_s {
 764                u64 reserved_42_63 : 22;
 765                u64 ncbo_dbe : 1;
 766                u64 ncbo_sbe : 1;
 767                u64 pnd_dbe : 1;
 768                u64 pnd_sbe : 1;
 769                u64 oth_dbe : 1;
 770                u64 oth_sbe : 1;
 771                u64 nidx_dbe : 1;
 772                u64 nidx_sbe : 1;
 773                u64 pidx_dbe : 1;
 774                u64 pidx_sbe : 1;
 775                u64 reserved_13_31 : 19;
 776                u64 iop : 13;
 777        } s;
 778        struct cvmx_sso_err2_s cn73xx;
 779        struct cvmx_sso_err2_s cn78xx;
 780        struct cvmx_sso_err2_s cn78xxp1;
 781        struct cvmx_sso_err2_s cnf75xx;
 782};
 783
 784typedef union cvmx_sso_err2 cvmx_sso_err2_t;
 785
 786/**
 787 * cvmx_sso_err_enb
 788 *
 789 * SSO_ERR_ENB = SSO Error Enable Register
 790 *
 791 * Contains the interrupt enables corresponding to SSO_ERR.
 792 */
 793union cvmx_sso_err_enb {
 794        u64 u64;
 795        struct cvmx_sso_err_enb_s {
 796                u64 reserved_48_63 : 16;
 797                u64 bfp_ie : 1;
 798                u64 awe_ie : 1;
 799                u64 fpe_ie : 1;
 800                u64 reserved_43_44 : 2;
 801                u64 iop_ie : 11;
 802                u64 reserved_12_31 : 20;
 803                u64 pnd_dbe0_ie : 1;
 804                u64 pnd_sbe0_ie : 1;
 805                u64 pnd_dbe1_ie : 1;
 806                u64 pnd_sbe1_ie : 1;
 807                u64 oth_dbe0_ie : 1;
 808                u64 oth_sbe0_ie : 1;
 809                u64 oth_dbe1_ie : 1;
 810                u64 oth_sbe1_ie : 1;
 811                u64 idx_dbe_ie : 1;
 812                u64 idx_sbe_ie : 1;
 813                u64 fidx_dbe_ie : 1;
 814                u64 fidx_sbe_ie : 1;
 815        } s;
 816        struct cvmx_sso_err_enb_s cn68xx;
 817        struct cvmx_sso_err_enb_s cn68xxp1;
 818};
 819
 820typedef union cvmx_sso_err_enb cvmx_sso_err_enb_t;
 821
 822/**
 823 * cvmx_sso_fidx_ecc_ctl
 824 *
 825 * SSO_FIDX_ECC_CTL = SSO FIDX ECC Control
 826 *
 827 */
 828union cvmx_sso_fidx_ecc_ctl {
 829        u64 u64;
 830        struct cvmx_sso_fidx_ecc_ctl_s {
 831                u64 reserved_3_63 : 61;
 832                u64 flip_synd : 2;
 833                u64 ecc_ena : 1;
 834        } s;
 835        struct cvmx_sso_fidx_ecc_ctl_s cn68xx;
 836        struct cvmx_sso_fidx_ecc_ctl_s cn68xxp1;
 837};
 838
 839typedef union cvmx_sso_fidx_ecc_ctl cvmx_sso_fidx_ecc_ctl_t;
 840
 841/**
 842 * cvmx_sso_fidx_ecc_st
 843 *
 844 * SSO_FIDX_ECC_ST = SSO FIDX ECC Status
 845 *
 846 */
 847union cvmx_sso_fidx_ecc_st {
 848        u64 u64;
 849        struct cvmx_sso_fidx_ecc_st_s {
 850                u64 reserved_27_63 : 37;
 851                u64 addr : 11;
 852                u64 reserved_9_15 : 7;
 853                u64 syndrom : 5;
 854                u64 reserved_0_3 : 4;
 855        } s;
 856        struct cvmx_sso_fidx_ecc_st_s cn68xx;
 857        struct cvmx_sso_fidx_ecc_st_s cn68xxp1;
 858};
 859
 860typedef union cvmx_sso_fidx_ecc_st cvmx_sso_fidx_ecc_st_t;
 861
 862/**
 863 * cvmx_sso_fpage_cnt
 864 *
 865 * SSO_FPAGE_CNT = SSO Free Page Cnt
 866 *
 867 * This register keeps track of the number of free pages pointers available for use in external memory.
 868 */
 869union cvmx_sso_fpage_cnt {
 870        u64 u64;
 871        struct cvmx_sso_fpage_cnt_s {
 872                u64 reserved_32_63 : 32;
 873                u64 fpage_cnt : 32;
 874        } s;
 875        struct cvmx_sso_fpage_cnt_s cn68xx;
 876        struct cvmx_sso_fpage_cnt_s cn68xxp1;
 877};
 878
 879typedef union cvmx_sso_fpage_cnt cvmx_sso_fpage_cnt_t;
 880
 881/**
 882 * cvmx_sso_grp#_aq_cnt
 883 */
 884union cvmx_sso_grpx_aq_cnt {
 885        u64 u64;
 886        struct cvmx_sso_grpx_aq_cnt_s {
 887                u64 reserved_33_63 : 31;
 888                u64 aq_cnt : 33;
 889        } s;
 890        struct cvmx_sso_grpx_aq_cnt_s cn73xx;
 891        struct cvmx_sso_grpx_aq_cnt_s cn78xx;
 892        struct cvmx_sso_grpx_aq_cnt_s cn78xxp1;
 893        struct cvmx_sso_grpx_aq_cnt_s cnf75xx;
 894};
 895
 896typedef union cvmx_sso_grpx_aq_cnt cvmx_sso_grpx_aq_cnt_t;
 897
 898/**
 899 * cvmx_sso_grp#_aq_thr
 900 */
 901union cvmx_sso_grpx_aq_thr {
 902        u64 u64;
 903        struct cvmx_sso_grpx_aq_thr_s {
 904                u64 reserved_33_63 : 31;
 905                u64 aq_thr : 33;
 906        } s;
 907        struct cvmx_sso_grpx_aq_thr_s cn73xx;
 908        struct cvmx_sso_grpx_aq_thr_s cn78xx;
 909        struct cvmx_sso_grpx_aq_thr_s cn78xxp1;
 910        struct cvmx_sso_grpx_aq_thr_s cnf75xx;
 911};
 912
 913typedef union cvmx_sso_grpx_aq_thr cvmx_sso_grpx_aq_thr_t;
 914
 915/**
 916 * cvmx_sso_grp#_ds_pc
 917 *
 918 * Counts the number of deschedule requests for each group. Counter rolls over through zero when
 919 * max value exceeded.
 920 */
 921union cvmx_sso_grpx_ds_pc {
 922        u64 u64;
 923        struct cvmx_sso_grpx_ds_pc_s {
 924                u64 cnt : 64;
 925        } s;
 926        struct cvmx_sso_grpx_ds_pc_s cn73xx;
 927        struct cvmx_sso_grpx_ds_pc_s cn78xx;
 928        struct cvmx_sso_grpx_ds_pc_s cn78xxp1;
 929        struct cvmx_sso_grpx_ds_pc_s cnf75xx;
 930};
 931
 932typedef union cvmx_sso_grpx_ds_pc cvmx_sso_grpx_ds_pc_t;
 933
 934/**
 935 * cvmx_sso_grp#_ext_pc
 936 *
 937 * Counts the number of cache lines of WAEs sent to L2/DDR. Counter rolls over through zero when
 938 * max value exceeded.
 939 */
 940union cvmx_sso_grpx_ext_pc {
 941        u64 u64;
 942        struct cvmx_sso_grpx_ext_pc_s {
 943                u64 cnt : 64;
 944        } s;
 945        struct cvmx_sso_grpx_ext_pc_s cn73xx;
 946        struct cvmx_sso_grpx_ext_pc_s cn78xx;
 947        struct cvmx_sso_grpx_ext_pc_s cn78xxp1;
 948        struct cvmx_sso_grpx_ext_pc_s cnf75xx;
 949};
 950
 951typedef union cvmx_sso_grpx_ext_pc cvmx_sso_grpx_ext_pc_t;
 952
 953/**
 954 * cvmx_sso_grp#_iaq_thr
 955 *
 956 * These registers contain the thresholds for allocating SSO in-unit admission queue entries, see
 957 * In-Unit Thresholds.
 958 */
 959union cvmx_sso_grpx_iaq_thr {
 960        u64 u64;
 961        struct cvmx_sso_grpx_iaq_thr_s {
 962                u64 reserved_61_63 : 3;
 963                u64 grp_cnt : 13;
 964                u64 reserved_45_47 : 3;
 965                u64 max_thr : 13;
 966                u64 reserved_13_31 : 19;
 967                u64 rsvd_thr : 13;
 968        } s;
 969        struct cvmx_sso_grpx_iaq_thr_s cn73xx;
 970        struct cvmx_sso_grpx_iaq_thr_s cn78xx;
 971        struct cvmx_sso_grpx_iaq_thr_s cn78xxp1;
 972        struct cvmx_sso_grpx_iaq_thr_s cnf75xx;
 973};
 974
 975typedef union cvmx_sso_grpx_iaq_thr cvmx_sso_grpx_iaq_thr_t;
 976
 977/**
 978 * cvmx_sso_grp#_int
 979 *
 980 * Contains the per-group interrupts and are used to clear these interrupts. For more information
 981 * on this register, refer to Interrupts.
 982 */
 983union cvmx_sso_grpx_int {
 984        u64 u64;
 985        struct cvmx_sso_grpx_int_s {
 986                u64 exe_dis : 1;
 987                u64 reserved_2_62 : 61;
 988                u64 exe_int : 1;
 989                u64 aq_int : 1;
 990        } s;
 991        struct cvmx_sso_grpx_int_s cn73xx;
 992        struct cvmx_sso_grpx_int_s cn78xx;
 993        struct cvmx_sso_grpx_int_s cn78xxp1;
 994        struct cvmx_sso_grpx_int_s cnf75xx;
 995};
 996
 997typedef union cvmx_sso_grpx_int cvmx_sso_grpx_int_t;
 998
 999/**
1000 * cvmx_sso_grp#_int_cnt
1001 *
1002 * These registers contain a read-only copy of the counts used to trigger work-queue interrupts
1003 * (one per group). For more information on this register, refer to Interrupts.
1004 */
1005union cvmx_sso_grpx_int_cnt {
1006        u64 u64;
1007        struct cvmx_sso_grpx_int_cnt_s {
1008                u64 reserved_61_63 : 3;
1009                u64 tc_cnt : 13;
1010                u64 reserved_45_47 : 3;
1011                u64 cq_cnt : 13;
1012                u64 reserved_29_31 : 3;
1013                u64 ds_cnt : 13;
1014                u64 reserved_13_15 : 3;
1015                u64 iaq_cnt : 13;
1016        } s;
1017        struct cvmx_sso_grpx_int_cnt_s cn73xx;
1018        struct cvmx_sso_grpx_int_cnt_s cn78xx;
1019        struct cvmx_sso_grpx_int_cnt_s cn78xxp1;
1020        struct cvmx_sso_grpx_int_cnt_s cnf75xx;
1021};
1022
1023typedef union cvmx_sso_grpx_int_cnt cvmx_sso_grpx_int_cnt_t;
1024
1025/**
1026 * cvmx_sso_grp#_int_thr
1027 *
1028 * These registers contain the thresholds for enabling and setting work-queue interrupts (one per
1029 * group). For more information on this register, refer to Interrupts.
1030 */
1031union cvmx_sso_grpx_int_thr {
1032        u64 u64;
1033        struct cvmx_sso_grpx_int_thr_s {
1034                u64 tc_en : 1;
1035                u64 reserved_61_62 : 2;
1036                u64 tc_thr : 13;
1037                u64 reserved_45_47 : 3;
1038                u64 cq_thr : 13;
1039                u64 reserved_29_31 : 3;
1040                u64 ds_thr : 13;
1041                u64 reserved_13_15 : 3;
1042                u64 iaq_thr : 13;
1043        } s;
1044        struct cvmx_sso_grpx_int_thr_s cn73xx;
1045        struct cvmx_sso_grpx_int_thr_s cn78xx;
1046        struct cvmx_sso_grpx_int_thr_s cn78xxp1;
1047        struct cvmx_sso_grpx_int_thr_s cnf75xx;
1048};
1049
1050typedef union cvmx_sso_grpx_int_thr cvmx_sso_grpx_int_thr_t;
1051
1052/**
1053 * cvmx_sso_grp#_pri
1054 *
1055 * Controls the priority and group affinity arbitration for each group.
1056 *
1057 */
1058union cvmx_sso_grpx_pri {
1059        u64 u64;
1060        struct cvmx_sso_grpx_pri_s {
1061                u64 reserved_30_63 : 34;
1062                u64 wgt_left : 6;
1063                u64 reserved_22_23 : 2;
1064                u64 weight : 6;
1065                u64 reserved_12_15 : 4;
1066                u64 affinity : 4;
1067                u64 reserved_3_7 : 5;
1068                u64 pri : 3;
1069        } s;
1070        struct cvmx_sso_grpx_pri_s cn73xx;
1071        struct cvmx_sso_grpx_pri_s cn78xx;
1072        struct cvmx_sso_grpx_pri_s cn78xxp1;
1073        struct cvmx_sso_grpx_pri_s cnf75xx;
1074};
1075
1076typedef union cvmx_sso_grpx_pri cvmx_sso_grpx_pri_t;
1077
1078/**
1079 * cvmx_sso_grp#_taq_thr
1080 *
1081 * These registers contain the thresholds for allocating SSO transitory admission queue storage
1082 * buffers, see Transitory-Admission Thresholds.
1083 */
1084union cvmx_sso_grpx_taq_thr {
1085        u64 u64;
1086        struct cvmx_sso_grpx_taq_thr_s {
1087                u64 reserved_59_63 : 5;
1088                u64 grp_cnt : 11;
1089                u64 reserved_43_47 : 5;
1090                u64 max_thr : 11;
1091                u64 reserved_11_31 : 21;
1092                u64 rsvd_thr : 11;
1093        } s;
1094        struct cvmx_sso_grpx_taq_thr_s cn73xx;
1095        struct cvmx_sso_grpx_taq_thr_s cn78xx;
1096        struct cvmx_sso_grpx_taq_thr_s cn78xxp1;
1097        struct cvmx_sso_grpx_taq_thr_s cnf75xx;
1098};
1099
1100typedef union cvmx_sso_grpx_taq_thr cvmx_sso_grpx_taq_thr_t;
1101
1102/**
1103 * cvmx_sso_grp#_ts_pc
1104 *
1105 * Counts the number of tag switch requests for each group being switched to. Counter rolls over
1106 * through zero when max value exceeded.
1107 */
1108union cvmx_sso_grpx_ts_pc {
1109        u64 u64;
1110        struct cvmx_sso_grpx_ts_pc_s {
1111                u64 cnt : 64;
1112        } s;
1113        struct cvmx_sso_grpx_ts_pc_s cn73xx;
1114        struct cvmx_sso_grpx_ts_pc_s cn78xx;
1115        struct cvmx_sso_grpx_ts_pc_s cn78xxp1;
1116        struct cvmx_sso_grpx_ts_pc_s cnf75xx;
1117};
1118
1119typedef union cvmx_sso_grpx_ts_pc cvmx_sso_grpx_ts_pc_t;
1120
1121/**
1122 * cvmx_sso_grp#_wa_pc
1123 *
1124 * Counts the number of add new work requests for each group. The counter rolls over through zero
1125 * when the max value exceeded.
1126 */
1127union cvmx_sso_grpx_wa_pc {
1128        u64 u64;
1129        struct cvmx_sso_grpx_wa_pc_s {
1130                u64 cnt : 64;
1131        } s;
1132        struct cvmx_sso_grpx_wa_pc_s cn73xx;
1133        struct cvmx_sso_grpx_wa_pc_s cn78xx;
1134        struct cvmx_sso_grpx_wa_pc_s cn78xxp1;
1135        struct cvmx_sso_grpx_wa_pc_s cnf75xx;
1136};
1137
1138typedef union cvmx_sso_grpx_wa_pc cvmx_sso_grpx_wa_pc_t;
1139
1140/**
1141 * cvmx_sso_grp#_ws_pc
1142 *
1143 * Counts the number of work schedules for each group. The counter rolls over through zero when
1144 * the maximum value is exceeded.
1145 */
1146union cvmx_sso_grpx_ws_pc {
1147        u64 u64;
1148        struct cvmx_sso_grpx_ws_pc_s {
1149                u64 cnt : 64;
1150        } s;
1151        struct cvmx_sso_grpx_ws_pc_s cn73xx;
1152        struct cvmx_sso_grpx_ws_pc_s cn78xx;
1153        struct cvmx_sso_grpx_ws_pc_s cn78xxp1;
1154        struct cvmx_sso_grpx_ws_pc_s cnf75xx;
1155};
1156
1157typedef union cvmx_sso_grpx_ws_pc cvmx_sso_grpx_ws_pc_t;
1158
1159/**
1160 * cvmx_sso_gw_eco
1161 */
1162union cvmx_sso_gw_eco {
1163        u64 u64;
1164        struct cvmx_sso_gw_eco_s {
1165                u64 reserved_8_63 : 56;
1166                u64 eco_rw : 8;
1167        } s;
1168        struct cvmx_sso_gw_eco_s cn73xx;
1169        struct cvmx_sso_gw_eco_s cnf75xx;
1170};
1171
1172typedef union cvmx_sso_gw_eco cvmx_sso_gw_eco_t;
1173
1174/**
1175 * cvmx_sso_gwe_cfg
1176 *
1177 * This register controls the operation of the get-work examiner (GWE).
1178 *
1179 */
1180union cvmx_sso_gwe_cfg {
1181        u64 u64;
1182        struct cvmx_sso_gwe_cfg_s {
1183                u64 reserved_12_63 : 52;
1184                u64 odu_ffpgw_dis : 1;
1185                u64 gwe_rfpgw_dis : 1;
1186                u64 odu_prf_dis : 1;
1187                u64 reserved_0_8 : 9;
1188        } s;
1189        struct cvmx_sso_gwe_cfg_cn68xx {
1190                u64 reserved_12_63 : 52;
1191                u64 odu_ffpgw_dis : 1;
1192                u64 gwe_rfpgw_dis : 1;
1193                u64 odu_prf_dis : 1;
1194                u64 odu_bmp_dis : 1;
1195                u64 reserved_5_7 : 3;
1196                u64 gwe_hvy_dis : 1;
1197                u64 gwe_poe : 1;
1198                u64 gwe_fpor : 1;
1199                u64 gwe_rah : 1;
1200                u64 gwe_dis : 1;
1201        } cn68xx;
1202        struct cvmx_sso_gwe_cfg_cn68xxp1 {
1203                u64 reserved_4_63 : 60;
1204                u64 gwe_poe : 1;
1205                u64 gwe_fpor : 1;
1206                u64 gwe_rah : 1;
1207                u64 gwe_dis : 1;
1208        } cn68xxp1;
1209        struct cvmx_sso_gwe_cfg_cn73xx {
1210                u64 reserved_9_63 : 55;
1211                u64 dis_wgt_credit : 1;
1212                u64 ws_retries : 8;
1213        } cn73xx;
1214        struct cvmx_sso_gwe_cfg_cn73xx cn78xx;
1215        struct cvmx_sso_gwe_cfg_cn73xx cn78xxp1;
1216        struct cvmx_sso_gwe_cfg_cn73xx cnf75xx;
1217};
1218
1219typedef union cvmx_sso_gwe_cfg cvmx_sso_gwe_cfg_t;
1220
1221/**
1222 * cvmx_sso_gwe_random
1223 *
1224 * This register contains the random search start position for the get-work examiner (GWE).
1225 *
1226 */
1227union cvmx_sso_gwe_random {
1228        u64 u64;
1229        struct cvmx_sso_gwe_random_s {
1230                u64 reserved_16_63 : 48;
1231                u64 rnd : 16;
1232        } s;
1233        struct cvmx_sso_gwe_random_s cn73xx;
1234        struct cvmx_sso_gwe_random_s cn78xx;
1235        struct cvmx_sso_gwe_random_s cn78xxp1;
1236        struct cvmx_sso_gwe_random_s cnf75xx;
1237};
1238
1239typedef union cvmx_sso_gwe_random cvmx_sso_gwe_random_t;
1240
1241/**
1242 * cvmx_sso_idx_ecc_ctl
1243 *
1244 * SSO_IDX_ECC_CTL = SSO IDX ECC Control
1245 *
1246 */
1247union cvmx_sso_idx_ecc_ctl {
1248        u64 u64;
1249        struct cvmx_sso_idx_ecc_ctl_s {
1250                u64 reserved_3_63 : 61;
1251                u64 flip_synd : 2;
1252                u64 ecc_ena : 1;
1253        } s;
1254        struct cvmx_sso_idx_ecc_ctl_s cn68xx;
1255        struct cvmx_sso_idx_ecc_ctl_s cn68xxp1;
1256};
1257
1258typedef union cvmx_sso_idx_ecc_ctl cvmx_sso_idx_ecc_ctl_t;
1259
1260/**
1261 * cvmx_sso_idx_ecc_st
1262 *
1263 * SSO_IDX_ECC_ST = SSO IDX ECC Status
1264 *
1265 */
1266union cvmx_sso_idx_ecc_st {
1267        u64 u64;
1268        struct cvmx_sso_idx_ecc_st_s {
1269                u64 reserved_27_63 : 37;
1270                u64 addr : 11;
1271                u64 reserved_9_15 : 7;
1272                u64 syndrom : 5;
1273                u64 reserved_0_3 : 4;
1274        } s;
1275        struct cvmx_sso_idx_ecc_st_s cn68xx;
1276        struct cvmx_sso_idx_ecc_st_s cn68xxp1;
1277};
1278
1279typedef union cvmx_sso_idx_ecc_st cvmx_sso_idx_ecc_st_t;
1280
1281/**
1282 * cvmx_sso_ient#_links
1283 *
1284 * Returns unit memory status for an index.
1285 *
1286 */
1287union cvmx_sso_ientx_links {
1288        u64 u64;
1289        struct cvmx_sso_ientx_links_s {
1290                u64 reserved_28_63 : 36;
1291                u64 prev_index : 12;
1292                u64 reserved_0_15 : 16;
1293        } s;
1294        struct cvmx_sso_ientx_links_cn73xx {
1295                u64 reserved_26_63 : 38;
1296                u64 prev_index : 10;
1297                u64 reserved_11_15 : 5;
1298                u64 next_index_vld : 1;
1299                u64 next_index : 10;
1300        } cn73xx;
1301        struct cvmx_sso_ientx_links_cn78xx {
1302                u64 reserved_28_63 : 36;
1303                u64 prev_index : 12;
1304                u64 reserved_13_15 : 3;
1305                u64 next_index_vld : 1;
1306                u64 next_index : 12;
1307        } cn78xx;
1308        struct cvmx_sso_ientx_links_cn78xx cn78xxp1;
1309        struct cvmx_sso_ientx_links_cn73xx cnf75xx;
1310};
1311
1312typedef union cvmx_sso_ientx_links cvmx_sso_ientx_links_t;
1313
1314/**
1315 * cvmx_sso_ient#_pendtag
1316 *
1317 * Returns unit memory status for an index.
1318 *
1319 */
1320union cvmx_sso_ientx_pendtag {
1321        u64 u64;
1322        struct cvmx_sso_ientx_pendtag_s {
1323                u64 reserved_38_63 : 26;
1324                u64 pend_switch : 1;
1325                u64 reserved_34_36 : 3;
1326                u64 pend_tt : 2;
1327                u64 pend_tag : 32;
1328        } s;
1329        struct cvmx_sso_ientx_pendtag_s cn73xx;
1330        struct cvmx_sso_ientx_pendtag_s cn78xx;
1331        struct cvmx_sso_ientx_pendtag_s cn78xxp1;
1332        struct cvmx_sso_ientx_pendtag_s cnf75xx;
1333};
1334
1335typedef union cvmx_sso_ientx_pendtag cvmx_sso_ientx_pendtag_t;
1336
1337/**
1338 * cvmx_sso_ient#_qlinks
1339 *
1340 * Returns unit memory status for an index.
1341 *
1342 */
1343union cvmx_sso_ientx_qlinks {
1344        u64 u64;
1345        struct cvmx_sso_ientx_qlinks_s {
1346                u64 reserved_12_63 : 52;
1347                u64 next_index : 12;
1348        } s;
1349        struct cvmx_sso_ientx_qlinks_s cn73xx;
1350        struct cvmx_sso_ientx_qlinks_s cn78xx;
1351        struct cvmx_sso_ientx_qlinks_s cn78xxp1;
1352        struct cvmx_sso_ientx_qlinks_s cnf75xx;
1353};
1354
1355typedef union cvmx_sso_ientx_qlinks cvmx_sso_ientx_qlinks_t;
1356
1357/**
1358 * cvmx_sso_ient#_tag
1359 *
1360 * Returns unit memory status for an index.
1361 *
1362 */
1363union cvmx_sso_ientx_tag {
1364        u64 u64;
1365        struct cvmx_sso_ientx_tag_s {
1366                u64 reserved_39_63 : 25;
1367                u64 tailc : 1;
1368                u64 tail : 1;
1369                u64 reserved_34_36 : 3;
1370                u64 tt : 2;
1371                u64 tag : 32;
1372        } s;
1373        struct cvmx_sso_ientx_tag_s cn73xx;
1374        struct cvmx_sso_ientx_tag_s cn78xx;
1375        struct cvmx_sso_ientx_tag_s cn78xxp1;
1376        struct cvmx_sso_ientx_tag_s cnf75xx;
1377};
1378
1379typedef union cvmx_sso_ientx_tag cvmx_sso_ientx_tag_t;
1380
1381/**
1382 * cvmx_sso_ient#_wqpgrp
1383 *
1384 * Returns unit memory status for an index.
1385 *
1386 */
1387union cvmx_sso_ientx_wqpgrp {
1388        u64 u64;
1389        struct cvmx_sso_ientx_wqpgrp_s {
1390                u64 reserved_62_63 : 2;
1391                u64 head : 1;
1392                u64 nosched : 1;
1393                u64 reserved_58_59 : 2;
1394                u64 grp : 10;
1395                u64 reserved_42_47 : 6;
1396                u64 wqp : 42;
1397        } s;
1398        struct cvmx_sso_ientx_wqpgrp_cn73xx {
1399                u64 reserved_62_63 : 2;
1400                u64 head : 1;
1401                u64 nosched : 1;
1402                u64 reserved_56_59 : 4;
1403                u64 grp : 8;
1404                u64 reserved_42_47 : 6;
1405                u64 wqp : 42;
1406        } cn73xx;
1407        struct cvmx_sso_ientx_wqpgrp_s cn78xx;
1408        struct cvmx_sso_ientx_wqpgrp_s cn78xxp1;
1409        struct cvmx_sso_ientx_wqpgrp_cn73xx cnf75xx;
1410};
1411
1412typedef union cvmx_sso_ientx_wqpgrp cvmx_sso_ientx_wqpgrp_t;
1413
1414/**
1415 * cvmx_sso_ipl_conf#
1416 *
1417 * Returns list status for the conflicted list indexed by group.  Register
1418 * fields are identical to those in SSO_IPL_IAQ() above.
1419 */
1420union cvmx_sso_ipl_confx {
1421        u64 u64;
1422        struct cvmx_sso_ipl_confx_s {
1423                u64 reserved_28_63 : 36;
1424                u64 queue_val : 1;
1425                u64 queue_one : 1;
1426                u64 reserved_25_25 : 1;
1427                u64 queue_head : 12;
1428                u64 reserved_12_12 : 1;
1429                u64 queue_tail : 12;
1430        } s;
1431        struct cvmx_sso_ipl_confx_s cn73xx;
1432        struct cvmx_sso_ipl_confx_s cn78xx;
1433        struct cvmx_sso_ipl_confx_s cn78xxp1;
1434        struct cvmx_sso_ipl_confx_s cnf75xx;
1435};
1436
1437typedef union cvmx_sso_ipl_confx cvmx_sso_ipl_confx_t;
1438
1439/**
1440 * cvmx_sso_ipl_desched#
1441 *
1442 * Returns list status for the deschedule list indexed by group.  Register
1443 * fields are identical to those in SSO_IPL_IAQ() above.
1444 */
1445union cvmx_sso_ipl_deschedx {
1446        u64 u64;
1447        struct cvmx_sso_ipl_deschedx_s {
1448                u64 reserved_28_63 : 36;
1449                u64 queue_val : 1;
1450                u64 queue_one : 1;
1451                u64 reserved_25_25 : 1;
1452                u64 queue_head : 12;
1453                u64 reserved_12_12 : 1;
1454                u64 queue_tail : 12;
1455        } s;
1456        struct cvmx_sso_ipl_deschedx_s cn73xx;
1457        struct cvmx_sso_ipl_deschedx_s cn78xx;
1458        struct cvmx_sso_ipl_deschedx_s cn78xxp1;
1459        struct cvmx_sso_ipl_deschedx_s cnf75xx;
1460};
1461
1462typedef union cvmx_sso_ipl_deschedx cvmx_sso_ipl_deschedx_t;
1463
1464/**
1465 * cvmx_sso_ipl_free#
1466 *
1467 * Returns list status.
1468 *
1469 */
1470union cvmx_sso_ipl_freex {
1471        u64 u64;
1472        struct cvmx_sso_ipl_freex_s {
1473                u64 reserved_62_63 : 2;
1474                u64 qnum_head : 3;
1475                u64 qnum_tail : 3;
1476                u64 reserved_28_55 : 28;
1477                u64 queue_val : 1;
1478                u64 reserved_25_26 : 2;
1479                u64 queue_head : 12;
1480                u64 reserved_12_12 : 1;
1481                u64 queue_tail : 12;
1482        } s;
1483        struct cvmx_sso_ipl_freex_cn73xx {
1484                u64 reserved_62_63 : 2;
1485                u64 qnum_head : 3;
1486                u64 qnum_tail : 3;
1487                u64 reserved_28_55 : 28;
1488                u64 queue_val : 1;
1489                u64 reserved_23_26 : 4;
1490                u64 queue_head : 10;
1491                u64 reserved_10_12 : 3;
1492                u64 queue_tail : 10;
1493        } cn73xx;
1494        struct cvmx_sso_ipl_freex_s cn78xx;
1495        struct cvmx_sso_ipl_freex_s cn78xxp1;
1496        struct cvmx_sso_ipl_freex_cn73xx cnf75xx;
1497};
1498
1499typedef union cvmx_sso_ipl_freex cvmx_sso_ipl_freex_t;
1500
1501/**
1502 * cvmx_sso_ipl_iaq#
1503 *
1504 * Returns list status for the internal admission queue indexed by group.
1505 *
1506 */
1507union cvmx_sso_ipl_iaqx {
1508        u64 u64;
1509        struct cvmx_sso_ipl_iaqx_s {
1510                u64 reserved_28_63 : 36;
1511                u64 queue_val : 1;
1512                u64 queue_one : 1;
1513                u64 reserved_25_25 : 1;
1514                u64 queue_head : 12;
1515                u64 reserved_12_12 : 1;
1516                u64 queue_tail : 12;
1517        } s;
1518        struct cvmx_sso_ipl_iaqx_s cn73xx;
1519        struct cvmx_sso_ipl_iaqx_s cn78xx;
1520        struct cvmx_sso_ipl_iaqx_s cn78xxp1;
1521        struct cvmx_sso_ipl_iaqx_s cnf75xx;
1522};
1523
1524typedef union cvmx_sso_ipl_iaqx cvmx_sso_ipl_iaqx_t;
1525
1526/**
1527 * cvmx_sso_iq_cnt#
1528 *
1529 * CSR reserved addresses: (64): 0x8200..0x83f8
1530 * CSR align addresses: ===========================================================================================================
1531 * SSO_IQ_CNTX = SSO Input Queue Count Register
1532 *               (one per QOS level)
1533 *
1534 * Contains a read-only count of the number of work queue entries for each QOS
1535 * level. Counts both in-unit and in-memory entries.
1536 */
1537union cvmx_sso_iq_cntx {
1538        u64 u64;
1539        struct cvmx_sso_iq_cntx_s {
1540                u64 reserved_32_63 : 32;
1541                u64 iq_cnt : 32;
1542        } s;
1543        struct cvmx_sso_iq_cntx_s cn68xx;
1544        struct cvmx_sso_iq_cntx_s cn68xxp1;
1545};
1546
1547typedef union cvmx_sso_iq_cntx cvmx_sso_iq_cntx_t;
1548
1549/**
1550 * cvmx_sso_iq_com_cnt
1551 *
1552 * SSO_IQ_COM_CNT = SSO Input Queue Combined Count Register
1553 *
1554 * Contains a read-only count of the total number of work queue entries in all
1555 * QOS levels.  Counts both in-unit and in-memory entries.
1556 */
1557union cvmx_sso_iq_com_cnt {
1558        u64 u64;
1559        struct cvmx_sso_iq_com_cnt_s {
1560                u64 reserved_32_63 : 32;
1561                u64 iq_cnt : 32;
1562        } s;
1563        struct cvmx_sso_iq_com_cnt_s cn68xx;
1564        struct cvmx_sso_iq_com_cnt_s cn68xxp1;
1565};
1566
1567typedef union cvmx_sso_iq_com_cnt cvmx_sso_iq_com_cnt_t;
1568
1569/**
1570 * cvmx_sso_iq_int
1571 *
1572 * SSO_IQ_INT = SSO Input Queue Interrupt Register
1573 *
1574 * Contains the bits (one per QOS level) that can trigger the input queue
1575 * interrupt.  An IQ_INT bit will be set if SSO_IQ_CNT#QOS# changes and the
1576 * resulting value is equal to SSO_IQ_THR#QOS#.
1577 */
1578union cvmx_sso_iq_int {
1579        u64 u64;
1580        struct cvmx_sso_iq_int_s {
1581                u64 reserved_8_63 : 56;
1582                u64 iq_int : 8;
1583        } s;
1584        struct cvmx_sso_iq_int_s cn68xx;
1585        struct cvmx_sso_iq_int_s cn68xxp1;
1586};
1587
1588typedef union cvmx_sso_iq_int cvmx_sso_iq_int_t;
1589
1590/**
1591 * cvmx_sso_iq_int_en
1592 *
1593 * SSO_IQ_INT_EN = SSO Input Queue Interrupt Enable Register
1594 *
1595 * Contains the bits (one per QOS level) that enable the input queue interrupt.
1596 */
1597union cvmx_sso_iq_int_en {
1598        u64 u64;
1599        struct cvmx_sso_iq_int_en_s {
1600                u64 reserved_8_63 : 56;
1601                u64 int_en : 8;
1602        } s;
1603        struct cvmx_sso_iq_int_en_s cn68xx;
1604        struct cvmx_sso_iq_int_en_s cn68xxp1;
1605};
1606
1607typedef union cvmx_sso_iq_int_en cvmx_sso_iq_int_en_t;
1608
1609/**
1610 * cvmx_sso_iq_thr#
1611 *
1612 * CSR reserved addresses: (24): 0x9040..0x90f8
1613 * CSR align addresses: ===========================================================================================================
1614 * SSO_IQ_THRX = SSO Input Queue Threshold Register
1615 *               (one per QOS level)
1616 *
1617 * Threshold value for triggering input queue interrupts.
1618 */
1619union cvmx_sso_iq_thrx {
1620        u64 u64;
1621        struct cvmx_sso_iq_thrx_s {
1622                u64 reserved_32_63 : 32;
1623                u64 iq_thr : 32;
1624        } s;
1625        struct cvmx_sso_iq_thrx_s cn68xx;
1626        struct cvmx_sso_iq_thrx_s cn68xxp1;
1627};
1628
1629typedef union cvmx_sso_iq_thrx cvmx_sso_iq_thrx_t;
1630
1631/**
1632 * cvmx_sso_nos_cnt
1633 *
1634 * Contains the number of work-queue entries on the no-schedule list.
1635 *
1636 */
1637union cvmx_sso_nos_cnt {
1638        u64 u64;
1639        struct cvmx_sso_nos_cnt_s {
1640                u64 reserved_13_63 : 51;
1641                u64 nos_cnt : 13;
1642        } s;
1643        struct cvmx_sso_nos_cnt_cn68xx {
1644                u64 reserved_12_63 : 52;
1645                u64 nos_cnt : 12;
1646        } cn68xx;
1647        struct cvmx_sso_nos_cnt_cn68xx cn68xxp1;
1648        struct cvmx_sso_nos_cnt_s cn73xx;
1649        struct cvmx_sso_nos_cnt_s cn78xx;
1650        struct cvmx_sso_nos_cnt_s cn78xxp1;
1651        struct cvmx_sso_nos_cnt_s cnf75xx;
1652};
1653
1654typedef union cvmx_sso_nos_cnt cvmx_sso_nos_cnt_t;
1655
1656/**
1657 * cvmx_sso_nw_tim
1658 *
1659 * Sets the minimum period for a new-work-request timeout. The period is specified in n-1
1660 * notation, with the increment value of 1024 clock cycles. Thus, a value of 0x0 in this register
1661 * translates to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc.
1662 */
1663union cvmx_sso_nw_tim {
1664        u64 u64;
1665        struct cvmx_sso_nw_tim_s {
1666                u64 reserved_10_63 : 54;
1667                u64 nw_tim : 10;
1668        } s;
1669        struct cvmx_sso_nw_tim_s cn68xx;
1670        struct cvmx_sso_nw_tim_s cn68xxp1;
1671        struct cvmx_sso_nw_tim_s cn73xx;
1672        struct cvmx_sso_nw_tim_s cn78xx;
1673        struct cvmx_sso_nw_tim_s cn78xxp1;
1674        struct cvmx_sso_nw_tim_s cnf75xx;
1675};
1676
1677typedef union cvmx_sso_nw_tim cvmx_sso_nw_tim_t;
1678
1679/**
1680 * cvmx_sso_oth_ecc_ctl
1681 *
1682 * SSO_OTH_ECC_CTL = SSO OTH ECC Control
1683 *
1684 */
1685union cvmx_sso_oth_ecc_ctl {
1686        u64 u64;
1687        struct cvmx_sso_oth_ecc_ctl_s {
1688                u64 reserved_6_63 : 58;
1689                u64 flip_synd1 : 2;
1690                u64 ecc_ena1 : 1;
1691                u64 flip_synd0 : 2;
1692                u64 ecc_ena0 : 1;
1693        } s;
1694        struct cvmx_sso_oth_ecc_ctl_s cn68xx;
1695        struct cvmx_sso_oth_ecc_ctl_s cn68xxp1;
1696};
1697
1698typedef union cvmx_sso_oth_ecc_ctl cvmx_sso_oth_ecc_ctl_t;
1699
1700/**
1701 * cvmx_sso_oth_ecc_st
1702 *
1703 * SSO_OTH_ECC_ST = SSO OTH ECC Status
1704 *
1705 */
1706union cvmx_sso_oth_ecc_st {
1707        u64 u64;
1708        struct cvmx_sso_oth_ecc_st_s {
1709                u64 reserved_59_63 : 5;
1710                u64 addr1 : 11;
1711                u64 reserved_43_47 : 5;
1712                u64 syndrom1 : 7;
1713                u64 reserved_27_35 : 9;
1714                u64 addr0 : 11;
1715                u64 reserved_11_15 : 5;
1716                u64 syndrom0 : 7;
1717                u64 reserved_0_3 : 4;
1718        } s;
1719        struct cvmx_sso_oth_ecc_st_s cn68xx;
1720        struct cvmx_sso_oth_ecc_st_s cn68xxp1;
1721};
1722
1723typedef union cvmx_sso_oth_ecc_st cvmx_sso_oth_ecc_st_t;
1724
1725/**
1726 * cvmx_sso_page_cnt
1727 */
1728union cvmx_sso_page_cnt {
1729        u64 u64;
1730        struct cvmx_sso_page_cnt_s {
1731                u64 reserved_32_63 : 32;
1732                u64 cnt : 32;
1733        } s;
1734        struct cvmx_sso_page_cnt_s cn73xx;
1735        struct cvmx_sso_page_cnt_s cn78xx;
1736        struct cvmx_sso_page_cnt_s cn78xxp1;
1737        struct cvmx_sso_page_cnt_s cnf75xx;
1738};
1739
1740typedef union cvmx_sso_page_cnt cvmx_sso_page_cnt_t;
1741
1742/**
1743 * cvmx_sso_pnd_ecc_ctl
1744 *
1745 * SSO_PND_ECC_CTL = SSO PND ECC Control
1746 *
1747 */
1748union cvmx_sso_pnd_ecc_ctl {
1749        u64 u64;
1750        struct cvmx_sso_pnd_ecc_ctl_s {
1751                u64 reserved_6_63 : 58;
1752                u64 flip_synd1 : 2;
1753                u64 ecc_ena1 : 1;
1754                u64 flip_synd0 : 2;
1755                u64 ecc_ena0 : 1;
1756        } s;
1757        struct cvmx_sso_pnd_ecc_ctl_s cn68xx;
1758        struct cvmx_sso_pnd_ecc_ctl_s cn68xxp1;
1759};
1760
1761typedef union cvmx_sso_pnd_ecc_ctl cvmx_sso_pnd_ecc_ctl_t;
1762
1763/**
1764 * cvmx_sso_pnd_ecc_st
1765 *
1766 * SSO_PND_ECC_ST = SSO PND ECC Status
1767 *
1768 */
1769union cvmx_sso_pnd_ecc_st {
1770        u64 u64;
1771        struct cvmx_sso_pnd_ecc_st_s {
1772                u64 reserved_59_63 : 5;
1773                u64 addr1 : 11;
1774                u64 reserved_43_47 : 5;
1775                u64 syndrom1 : 7;
1776                u64 reserved_27_35 : 9;
1777                u64 addr0 : 11;
1778                u64 reserved_11_15 : 5;
1779                u64 syndrom0 : 7;
1780                u64 reserved_0_3 : 4;
1781        } s;
1782        struct cvmx_sso_pnd_ecc_st_s cn68xx;
1783        struct cvmx_sso_pnd_ecc_st_s cn68xxp1;
1784};
1785
1786typedef union cvmx_sso_pnd_ecc_st cvmx_sso_pnd_ecc_st_t;
1787
1788/**
1789 * cvmx_sso_pp#_arb
1790 *
1791 * For diagnostic use, returns the group affinity arbitration state for each core.
1792 *
1793 */
1794union cvmx_sso_ppx_arb {
1795        u64 u64;
1796        struct cvmx_sso_ppx_arb_s {
1797                u64 reserved_20_63 : 44;
1798                u64 aff_left : 4;
1799                u64 reserved_8_15 : 8;
1800                u64 last_grp : 8;
1801        } s;
1802        struct cvmx_sso_ppx_arb_s cn73xx;
1803        struct cvmx_sso_ppx_arb_s cn78xx;
1804        struct cvmx_sso_ppx_arb_s cn78xxp1;
1805        struct cvmx_sso_ppx_arb_s cnf75xx;
1806};
1807
1808typedef union cvmx_sso_ppx_arb cvmx_sso_ppx_arb_t;
1809
1810/**
1811 * cvmx_sso_pp#_grp_msk
1812 *
1813 * CSR reserved addresses: (24): 0x5040..0x50f8
1814 * CSR align addresses: ===========================================================================================================
1815 * SSO_PPX_GRP_MSK = SSO PP Group Mask Register
1816 *                   (one bit per group per PP)
1817 *
1818 * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the
1819 * PP's membership in the corresponding group.  A value of 0x0 will prevent the
1820 * PP from receiving new work.
1821 *
1822 * Note that these do not contain QOS level priorities for each PP.  This is a
1823 * change from previous POW designs.
1824 */
1825union cvmx_sso_ppx_grp_msk {
1826        u64 u64;
1827        struct cvmx_sso_ppx_grp_msk_s {
1828                u64 grp_msk : 64;
1829        } s;
1830        struct cvmx_sso_ppx_grp_msk_s cn68xx;
1831        struct cvmx_sso_ppx_grp_msk_s cn68xxp1;
1832};
1833
1834typedef union cvmx_sso_ppx_grp_msk cvmx_sso_ppx_grp_msk_t;
1835
1836/**
1837 * cvmx_sso_pp#_qos_pri
1838 *
1839 * CSR reserved addresses: (56): 0x2040..0x21f8
1840 * CSR align addresses: ===========================================================================================================
1841 * SSO_PP(0..31)_QOS_PRI = SSO PP QOS Priority Register
1842 *                                (one field per IQ per PP)
1843 *
1844 * Contains the QOS level priorities for each PP.
1845 *      0x0       is the highest priority
1846 *      0x7       is the lowest priority
1847 *      0xf       prevents the PP from receiving work from that QOS level
1848 *      0x8-0xe   Reserved
1849 *
1850 * For a given PP, priorities should begin at 0x0, and remain contiguous
1851 * throughout the range.  Failure to do so may result in severe
1852 * performance degradation.
1853 *
1854 *
1855 * Priorities for IQs 0..7
1856 */
1857union cvmx_sso_ppx_qos_pri {
1858        u64 u64;
1859        struct cvmx_sso_ppx_qos_pri_s {
1860                u64 reserved_60_63 : 4;
1861                u64 qos7_pri : 4;
1862                u64 reserved_52_55 : 4;
1863                u64 qos6_pri : 4;
1864                u64 reserved_44_47 : 4;
1865                u64 qos5_pri : 4;
1866                u64 reserved_36_39 : 4;
1867                u64 qos4_pri : 4;
1868                u64 reserved_28_31 : 4;
1869                u64 qos3_pri : 4;
1870                u64 reserved_20_23 : 4;
1871                u64 qos2_pri : 4;
1872                u64 reserved_12_15 : 4;
1873                u64 qos1_pri : 4;
1874                u64 reserved_4_7 : 4;
1875                u64 qos0_pri : 4;
1876        } s;
1877        struct cvmx_sso_ppx_qos_pri_s cn68xx;
1878        struct cvmx_sso_ppx_qos_pri_s cn68xxp1;
1879};
1880
1881typedef union cvmx_sso_ppx_qos_pri cvmx_sso_ppx_qos_pri_t;
1882
1883/**
1884 * cvmx_sso_pp#_s#_grpmsk#
1885 *
1886 * These registers select which group or groups a core belongs to. There are 2 sets of masks per
1887 * core, each with 1 register corresponding to 64 groups.
1888 */
1889union cvmx_sso_ppx_sx_grpmskx {
1890        u64 u64;
1891        struct cvmx_sso_ppx_sx_grpmskx_s {
1892                u64 grp_msk : 64;
1893        } s;
1894        struct cvmx_sso_ppx_sx_grpmskx_s cn73xx;
1895        struct cvmx_sso_ppx_sx_grpmskx_s cn78xx;
1896        struct cvmx_sso_ppx_sx_grpmskx_s cn78xxp1;
1897        struct cvmx_sso_ppx_sx_grpmskx_s cnf75xx;
1898};
1899
1900typedef union cvmx_sso_ppx_sx_grpmskx cvmx_sso_ppx_sx_grpmskx_t;
1901
1902/**
1903 * cvmx_sso_pp_strict
1904 *
1905 * SSO_PP_STRICT = SSO Strict Priority
1906 *
1907 * This register controls getting work from the input queues.  If the bit
1908 * corresponding to a PP is set, that PP will not take work off the input
1909 * queues until it is known that there is no higher-priority work available.
1910 *
1911 * Setting SSO_PP_STRICT may incur a performance penalty if highest-priority
1912 * work is not found early.
1913 *
1914 * It is possible to starve a PP of work with SSO_PP_STRICT.  If the
1915 * SSO_PPX_GRP_MSK for a PP masks-out much of the work added to the input
1916 * queues that are higher-priority for that PP, and if there is a constant
1917 * stream of work through one or more of those higher-priority input queues,
1918 * then that PP may not accept work from lower-priority input queues.  This can
1919 * be alleviated by ensuring that most or all the work added to the
1920 * higher-priority input queues for a PP with SSO_PP_STRICT set are in a group
1921 * acceptable to that PP.
1922 *
1923 * It is also possible to neglect work in an input queue if SSO_PP_STRICT is
1924 * used.  If an input queue is a lower-priority queue for all PPs, and if all
1925 * the PPs have their corresponding bit in SSO_PP_STRICT set, then work may
1926 * never be taken (or be seldom taken) from that queue.  This can be alleviated
1927 * by ensuring that work in all input queues can be serviced by one or more PPs
1928 * that do not have SSO_PP_STRICT set, or that the input queue is the
1929 * highest-priority input queue for one or more PPs that do have SSO_PP_STRICT
1930 * set.
1931 */
1932union cvmx_sso_pp_strict {
1933        u64 u64;
1934        struct cvmx_sso_pp_strict_s {
1935                u64 reserved_32_63 : 32;
1936                u64 pp_strict : 32;
1937        } s;
1938        struct cvmx_sso_pp_strict_s cn68xx;
1939        struct cvmx_sso_pp_strict_s cn68xxp1;
1940};
1941
1942typedef union cvmx_sso_pp_strict cvmx_sso_pp_strict_t;
1943
1944/**
1945 * cvmx_sso_qos#_rnd
1946 *
1947 * CSR align addresses: ===========================================================================================================
1948 * SSO_QOS(0..7)_RND = SSO QOS Issue Round Register
1949 *                (one per IQ)
1950 *
1951 * The number of arbitration rounds each QOS level participates in.
1952 */
1953union cvmx_sso_qosx_rnd {
1954        u64 u64;
1955        struct cvmx_sso_qosx_rnd_s {
1956                u64 reserved_8_63 : 56;
1957                u64 rnds_qos : 8;
1958        } s;
1959        struct cvmx_sso_qosx_rnd_s cn68xx;
1960        struct cvmx_sso_qosx_rnd_s cn68xxp1;
1961};
1962
1963typedef union cvmx_sso_qosx_rnd cvmx_sso_qosx_rnd_t;
1964
1965/**
1966 * cvmx_sso_qos_thr#
1967 *
1968 * CSR reserved addresses: (24): 0xa040..0xa0f8
1969 * CSR align addresses: ===========================================================================================================
1970 * SSO_QOS_THRX = SSO QOS Threshold Register
1971 *                (one per QOS level)
1972 *
1973 * Contains the thresholds for allocating SSO internal storage buffers.  If the
1974 * number of remaining free buffers drops below the minimum threshold (MIN_THR)
1975 * or the number of allocated buffers for this QOS level rises above the
1976 * maximum threshold (MAX_THR), future incoming work queue entries will be
1977 * buffered externally rather than internally.  This register also contains the
1978 * number of internal buffers currently allocated to this QOS level (BUF_CNT).
1979 */
1980union cvmx_sso_qos_thrx {
1981        u64 u64;
1982        struct cvmx_sso_qos_thrx_s {
1983                u64 reserved_40_63 : 24;
1984                u64 buf_cnt : 12;
1985                u64 reserved_26_27 : 2;
1986                u64 max_thr : 12;
1987                u64 reserved_12_13 : 2;
1988                u64 min_thr : 12;
1989        } s;
1990        struct cvmx_sso_qos_thrx_s cn68xx;
1991        struct cvmx_sso_qos_thrx_s cn68xxp1;
1992};
1993
1994typedef union cvmx_sso_qos_thrx cvmx_sso_qos_thrx_t;
1995
1996/**
1997 * cvmx_sso_qos_we
1998 *
1999 * SSO_QOS_WE = SSO WE Buffers
2000 *
2001 * This register contains a read-only count of the current number of free
2002 * buffers (FREE_CNT) and the total number of tag chain heads on the de-schedule list
2003 * (DES_CNT) (which is not the same as the total number of entries on all of the descheduled
2004 * tag chains.)
2005 */
2006union cvmx_sso_qos_we {
2007        u64 u64;
2008        struct cvmx_sso_qos_we_s {
2009                u64 reserved_26_63 : 38;
2010                u64 des_cnt : 12;
2011                u64 reserved_12_13 : 2;
2012                u64 free_cnt : 12;
2013        } s;
2014        struct cvmx_sso_qos_we_s cn68xx;
2015        struct cvmx_sso_qos_we_s cn68xxp1;
2016};
2017
2018typedef union cvmx_sso_qos_we cvmx_sso_qos_we_t;
2019
2020/**
2021 * cvmx_sso_reset
2022 *
2023 * Writing a 1 to SSO_RESET[RESET] resets the SSO. After receiving a store to this CSR, the SSO
2024 * must not be sent any other operations for 2500 coprocessor (SCLK) cycles. Note that the
2025 * contents of this register are reset along with the rest of the SSO.
2026 */
2027union cvmx_sso_reset {
2028        u64 u64;
2029        struct cvmx_sso_reset_s {
2030                u64 busy : 1;
2031                u64 reserved_1_62 : 62;
2032                u64 reset : 1;
2033        } s;
2034        struct cvmx_sso_reset_cn68xx {
2035                u64 reserved_1_63 : 63;
2036                u64 reset : 1;
2037        } cn68xx;
2038        struct cvmx_sso_reset_s cn73xx;
2039        struct cvmx_sso_reset_s cn78xx;
2040        struct cvmx_sso_reset_s cn78xxp1;
2041        struct cvmx_sso_reset_s cnf75xx;
2042};
2043
2044typedef union cvmx_sso_reset cvmx_sso_reset_t;
2045
2046/**
2047 * cvmx_sso_rwq_head_ptr#
2048 *
2049 * CSR reserved addresses: (24): 0xb040..0xb0f8
2050 * CSR align addresses: ===========================================================================================================
2051 * SSO_RWQ_HEAD_PTRX = SSO Remote Queue Head Register
2052 *                (one per QOS level)
2053 * Contains the ptr to the first entry of the remote linked list(s) for a particular
2054 * QoS level. SW should initialize the remote linked list(s) by programming
2055 * SSO_RWQ_HEAD_PTRX and SSO_RWQ_TAIL_PTRX to identical values.
2056 */
2057union cvmx_sso_rwq_head_ptrx {
2058        u64 u64;
2059        struct cvmx_sso_rwq_head_ptrx_s {
2060                u64 reserved_38_63 : 26;
2061                u64 ptr : 31;
2062                u64 reserved_5_6 : 2;
2063                u64 rctr : 5;
2064        } s;
2065        struct cvmx_sso_rwq_head_ptrx_s cn68xx;
2066        struct cvmx_sso_rwq_head_ptrx_s cn68xxp1;
2067};
2068
2069typedef union cvmx_sso_rwq_head_ptrx cvmx_sso_rwq_head_ptrx_t;
2070
2071/**
2072 * cvmx_sso_rwq_pop_fptr
2073 *
2074 * SSO_RWQ_POP_FPTR = SSO Pop Free Pointer
2075 *
2076 * This register is used by SW to remove pointers for buffer-reallocation and diagnostics, and
2077 * should only be used when SSO is idle.
2078 *
2079 * To remove ALL pointers, software must insure that there are modulus 16
2080 * pointers in the FPA.  To do this, SSO_CFG.RWQ_BYP_DIS must be set, the FPA
2081 * pointer count read, and enough fake buffers pushed via SSO_RWQ_PSH_FPTR to
2082 * bring the FPA pointer count up to mod 16.
2083 */
2084union cvmx_sso_rwq_pop_fptr {
2085        u64 u64;
2086        struct cvmx_sso_rwq_pop_fptr_s {
2087                u64 val : 1;
2088                u64 reserved_38_62 : 25;
2089                u64 fptr : 31;
2090                u64 reserved_0_6 : 7;
2091        } s;
2092        struct cvmx_sso_rwq_pop_fptr_s cn68xx;
2093        struct cvmx_sso_rwq_pop_fptr_s cn68xxp1;
2094};
2095
2096typedef union cvmx_sso_rwq_pop_fptr cvmx_sso_rwq_pop_fptr_t;
2097
2098/**
2099 * cvmx_sso_rwq_psh_fptr
2100 *
2101 * CSR reserved addresses: (56): 0xc240..0xc3f8
2102 * SSO_RWQ_PSH_FPTR = SSO Free Pointer FIFO
2103 *
2104 * This register is used by SW to initialize the SSO with a pool of free
2105 * pointers by writing the FPTR field whenever FULL = 0. Free pointers are
2106 * fetched/released from/to the pool when accessing WQE entries stored remotely
2107 * (in remote linked lists).  Free pointers should be 128 byte aligned, each of
2108 * 256 bytes. This register should only be used when SSO is idle.
2109 *
2110 * Software needs to set aside buffering for
2111 *      8 + 48 + ROUNDUP(N/26)
2112 *
2113 * where as many as N DRAM work queue entries may be used.  The first 8 buffers
2114 * are used to setup the SSO_RWQ_HEAD_PTR and SSO_RWQ_TAIL_PTRs, and the
2115 * remainder are pushed via this register.
2116 *
2117 * IMPLEMENTATION NOTES--NOT FOR SPEC:
2118 *      48 avoids false out of buffer error due to (16) FPA and in-sso FPA buffering (32)
2119 *      26 is number of WAE's per 256B buffer
2120 */
2121union cvmx_sso_rwq_psh_fptr {
2122        u64 u64;
2123        struct cvmx_sso_rwq_psh_fptr_s {
2124                u64 full : 1;
2125                u64 reserved_38_62 : 25;
2126                u64 fptr : 31;
2127                u64 reserved_0_6 : 7;
2128        } s;
2129        struct cvmx_sso_rwq_psh_fptr_s cn68xx;
2130        struct cvmx_sso_rwq_psh_fptr_s cn68xxp1;
2131};
2132
2133typedef union cvmx_sso_rwq_psh_fptr cvmx_sso_rwq_psh_fptr_t;
2134
2135/**
2136 * cvmx_sso_rwq_tail_ptr#
2137 *
2138 * CSR reserved addresses: (56): 0xc040..0xc1f8
2139 * SSO_RWQ_TAIL_PTRX = SSO Remote Queue Tail Register
2140 *                (one per QOS level)
2141 * Contains the ptr to the last entry of the remote linked list(s) for a particular
2142 * QoS level. SW must initialize the remote linked list(s) by programming
2143 * SSO_RWQ_HEAD_PTRX and SSO_RWQ_TAIL_PTRX to identical values.
2144 */
2145union cvmx_sso_rwq_tail_ptrx {
2146        u64 u64;
2147        struct cvmx_sso_rwq_tail_ptrx_s {
2148                u64 reserved_38_63 : 26;
2149                u64 ptr : 31;
2150                u64 reserved_5_6 : 2;
2151                u64 rctr : 5;
2152        } s;
2153        struct cvmx_sso_rwq_tail_ptrx_s cn68xx;
2154        struct cvmx_sso_rwq_tail_ptrx_s cn68xxp1;
2155};
2156
2157typedef union cvmx_sso_rwq_tail_ptrx cvmx_sso_rwq_tail_ptrx_t;
2158
2159/**
2160 * cvmx_sso_sl_pp#_links
2161 *
2162 * Returns status of each core.
2163 *
2164 */
2165union cvmx_sso_sl_ppx_links {
2166        u64 u64;
2167        struct cvmx_sso_sl_ppx_links_s {
2168                u64 tailc : 1;
2169                u64 reserved_60_62 : 3;
2170                u64 index : 12;
2171                u64 reserved_38_47 : 10;
2172                u64 grp : 10;
2173                u64 head : 1;
2174                u64 tail : 1;
2175                u64 reserved_0_25 : 26;
2176        } s;
2177        struct cvmx_sso_sl_ppx_links_cn73xx {
2178                u64 tailc : 1;
2179                u64 reserved_58_62 : 5;
2180                u64 index : 10;
2181                u64 reserved_36_47 : 12;
2182                u64 grp : 8;
2183                u64 head : 1;
2184                u64 tail : 1;
2185                u64 reserved_21_25 : 5;
2186                u64 revlink_index : 10;
2187                u64 link_index_vld : 1;
2188                u64 link_index : 10;
2189        } cn73xx;
2190        struct cvmx_sso_sl_ppx_links_cn78xx {
2191                u64 tailc : 1;
2192                u64 reserved_60_62 : 3;
2193                u64 index : 12;
2194                u64 reserved_38_47 : 10;
2195                u64 grp : 10;
2196                u64 head : 1;
2197                u64 tail : 1;
2198                u64 reserved_25_25 : 1;
2199                u64 revlink_index : 12;
2200                u64 link_index_vld : 1;
2201                u64 link_index : 12;
2202        } cn78xx;
2203        struct cvmx_sso_sl_ppx_links_cn78xx cn78xxp1;
2204        struct cvmx_sso_sl_ppx_links_cn73xx cnf75xx;
2205};
2206
2207typedef union cvmx_sso_sl_ppx_links cvmx_sso_sl_ppx_links_t;
2208
2209/**
2210 * cvmx_sso_sl_pp#_pendtag
2211 *
2212 * Returns status of each core.
2213 *
2214 */
2215union cvmx_sso_sl_ppx_pendtag {
2216        u64 u64;
2217        struct cvmx_sso_sl_ppx_pendtag_s {
2218                u64 pend_switch : 1;
2219                u64 pend_get_work : 1;
2220                u64 pend_get_work_wait : 1;
2221                u64 pend_nosched : 1;
2222                u64 pend_nosched_clr : 1;
2223                u64 pend_desched : 1;
2224                u64 pend_alloc_we : 1;
2225                u64 pend_gw_insert : 1;
2226                u64 reserved_34_55 : 22;
2227                u64 pend_tt : 2;
2228                u64 pend_tag : 32;
2229        } s;
2230        struct cvmx_sso_sl_ppx_pendtag_s cn73xx;
2231        struct cvmx_sso_sl_ppx_pendtag_s cn78xx;
2232        struct cvmx_sso_sl_ppx_pendtag_s cn78xxp1;
2233        struct cvmx_sso_sl_ppx_pendtag_s cnf75xx;
2234};
2235
2236typedef union cvmx_sso_sl_ppx_pendtag cvmx_sso_sl_ppx_pendtag_t;
2237
2238/**
2239 * cvmx_sso_sl_pp#_pendwqp
2240 *
2241 * Returns status of each core.
2242 *
2243 */
2244union cvmx_sso_sl_ppx_pendwqp {
2245        u64 u64;
2246        struct cvmx_sso_sl_ppx_pendwqp_s {
2247                u64 pend_switch : 1;
2248                u64 pend_get_work : 1;
2249                u64 pend_get_work_wait : 1;
2250                u64 pend_nosched : 1;
2251                u64 pend_nosched_clr : 1;
2252                u64 pend_desched : 1;
2253                u64 pend_alloc_we : 1;
2254                u64 reserved_56_56 : 1;
2255                u64 pend_index : 12;
2256                u64 reserved_42_43 : 2;
2257                u64 pend_wqp : 42;
2258        } s;
2259        struct cvmx_sso_sl_ppx_pendwqp_cn73xx {
2260                u64 pend_switch : 1;
2261                u64 pend_get_work : 1;
2262                u64 pend_get_work_wait : 1;
2263                u64 pend_nosched : 1;
2264                u64 pend_nosched_clr : 1;
2265                u64 pend_desched : 1;
2266                u64 pend_alloc_we : 1;
2267                u64 reserved_54_56 : 3;
2268                u64 pend_index : 10;
2269                u64 reserved_42_43 : 2;
2270                u64 pend_wqp : 42;
2271        } cn73xx;
2272        struct cvmx_sso_sl_ppx_pendwqp_s cn78xx;
2273        struct cvmx_sso_sl_ppx_pendwqp_s cn78xxp1;
2274        struct cvmx_sso_sl_ppx_pendwqp_cn73xx cnf75xx;
2275};
2276
2277typedef union cvmx_sso_sl_ppx_pendwqp cvmx_sso_sl_ppx_pendwqp_t;
2278
2279/**
2280 * cvmx_sso_sl_pp#_tag
2281 *
2282 * Returns status of each core.
2283 *
2284 */
2285union cvmx_sso_sl_ppx_tag {
2286        u64 u64;
2287        struct cvmx_sso_sl_ppx_tag_s {
2288                u64 tailc : 1;
2289                u64 reserved_60_62 : 3;
2290                u64 index : 12;
2291                u64 reserved_46_47 : 2;
2292                u64 grp : 10;
2293                u64 head : 1;
2294                u64 tail : 1;
2295                u64 tt : 2;
2296                u64 tag : 32;
2297        } s;
2298        struct cvmx_sso_sl_ppx_tag_cn73xx {
2299                u64 tailc : 1;
2300                u64 reserved_58_62 : 5;
2301                u64 index : 10;
2302                u64 reserved_44_47 : 4;
2303                u64 grp : 8;
2304                u64 head : 1;
2305                u64 tail : 1;
2306                u64 tt : 2;
2307                u64 tag : 32;
2308        } cn73xx;
2309        struct cvmx_sso_sl_ppx_tag_s cn78xx;
2310        struct cvmx_sso_sl_ppx_tag_s cn78xxp1;
2311        struct cvmx_sso_sl_ppx_tag_cn73xx cnf75xx;
2312};
2313
2314typedef union cvmx_sso_sl_ppx_tag cvmx_sso_sl_ppx_tag_t;
2315
2316/**
2317 * cvmx_sso_sl_pp#_wqp
2318 *
2319 * Returns status of each core.
2320 *
2321 */
2322union cvmx_sso_sl_ppx_wqp {
2323        u64 u64;
2324        struct cvmx_sso_sl_ppx_wqp_s {
2325                u64 reserved_58_63 : 6;
2326                u64 grp : 10;
2327                u64 reserved_42_47 : 6;
2328                u64 wqp : 42;
2329        } s;
2330        struct cvmx_sso_sl_ppx_wqp_cn73xx {
2331                u64 reserved_56_63 : 8;
2332                u64 grp : 8;
2333                u64 reserved_42_47 : 6;
2334                u64 wqp : 42;
2335        } cn73xx;
2336        struct cvmx_sso_sl_ppx_wqp_s cn78xx;
2337        struct cvmx_sso_sl_ppx_wqp_s cn78xxp1;
2338        struct cvmx_sso_sl_ppx_wqp_cn73xx cnf75xx;
2339};
2340
2341typedef union cvmx_sso_sl_ppx_wqp cvmx_sso_sl_ppx_wqp_t;
2342
2343/**
2344 * cvmx_sso_taq#_link
2345 *
2346 * Returns TAQ status for a given line.
2347 *
2348 */
2349union cvmx_sso_taqx_link {
2350        u64 u64;
2351        struct cvmx_sso_taqx_link_s {
2352                u64 reserved_11_63 : 53;
2353                u64 next : 11;
2354        } s;
2355        struct cvmx_sso_taqx_link_s cn73xx;
2356        struct cvmx_sso_taqx_link_s cn78xx;
2357        struct cvmx_sso_taqx_link_s cn78xxp1;
2358        struct cvmx_sso_taqx_link_s cnf75xx;
2359};
2360
2361typedef union cvmx_sso_taqx_link cvmx_sso_taqx_link_t;
2362
2363/**
2364 * cvmx_sso_taq#_wae#_tag
2365 *
2366 * Returns TAQ status for a given line and WAE within that line.
2367 *
2368 */
2369union cvmx_sso_taqx_waex_tag {
2370        u64 u64;
2371        struct cvmx_sso_taqx_waex_tag_s {
2372                u64 reserved_34_63 : 30;
2373                u64 tt : 2;
2374                u64 tag : 32;
2375        } s;
2376        struct cvmx_sso_taqx_waex_tag_s cn73xx;
2377        struct cvmx_sso_taqx_waex_tag_s cn78xx;
2378        struct cvmx_sso_taqx_waex_tag_s cn78xxp1;
2379        struct cvmx_sso_taqx_waex_tag_s cnf75xx;
2380};
2381
2382typedef union cvmx_sso_taqx_waex_tag cvmx_sso_taqx_waex_tag_t;
2383
2384/**
2385 * cvmx_sso_taq#_wae#_wqp
2386 *
2387 * Returns TAQ status for a given line and WAE within that line.
2388 *
2389 */
2390union cvmx_sso_taqx_waex_wqp {
2391        u64 u64;
2392        struct cvmx_sso_taqx_waex_wqp_s {
2393                u64 reserved_42_63 : 22;
2394                u64 wqp : 42;
2395        } s;
2396        struct cvmx_sso_taqx_waex_wqp_s cn73xx;
2397        struct cvmx_sso_taqx_waex_wqp_s cn78xx;
2398        struct cvmx_sso_taqx_waex_wqp_s cn78xxp1;
2399        struct cvmx_sso_taqx_waex_wqp_s cnf75xx;
2400};
2401
2402typedef union cvmx_sso_taqx_waex_wqp cvmx_sso_taqx_waex_wqp_t;
2403
2404/**
2405 * cvmx_sso_taq_add
2406 */
2407union cvmx_sso_taq_add {
2408        u64 u64;
2409        struct cvmx_sso_taq_add_s {
2410                u64 reserved_29_63 : 35;
2411                u64 rsvd_free : 13;
2412                u64 reserved_0_15 : 16;
2413        } s;
2414        struct cvmx_sso_taq_add_s cn73xx;
2415        struct cvmx_sso_taq_add_s cn78xx;
2416        struct cvmx_sso_taq_add_s cn78xxp1;
2417        struct cvmx_sso_taq_add_s cnf75xx;
2418};
2419
2420typedef union cvmx_sso_taq_add cvmx_sso_taq_add_t;
2421
2422/**
2423 * cvmx_sso_taq_cnt
2424 */
2425union cvmx_sso_taq_cnt {
2426        u64 u64;
2427        struct cvmx_sso_taq_cnt_s {
2428                u64 reserved_27_63 : 37;
2429                u64 rsvd_free : 11;
2430                u64 reserved_11_15 : 5;
2431                u64 free_cnt : 11;
2432        } s;
2433        struct cvmx_sso_taq_cnt_s cn73xx;
2434        struct cvmx_sso_taq_cnt_s cn78xx;
2435        struct cvmx_sso_taq_cnt_s cn78xxp1;
2436        struct cvmx_sso_taq_cnt_s cnf75xx;
2437};
2438
2439typedef union cvmx_sso_taq_cnt cvmx_sso_taq_cnt_t;
2440
2441/**
2442 * cvmx_sso_tiaq#_status
2443 *
2444 * Returns TAQ inbound status indexed by group.
2445 *
2446 */
2447union cvmx_sso_tiaqx_status {
2448        u64 u64;
2449        struct cvmx_sso_tiaqx_status_s {
2450                u64 wae_head : 4;
2451                u64 wae_tail : 4;
2452                u64 reserved_47_55 : 9;
2453                u64 wae_used : 15;
2454                u64 reserved_23_31 : 9;
2455                u64 ent_head : 11;
2456                u64 reserved_11_11 : 1;
2457                u64 ent_tail : 11;
2458        } s;
2459        struct cvmx_sso_tiaqx_status_s cn73xx;
2460        struct cvmx_sso_tiaqx_status_s cn78xx;
2461        struct cvmx_sso_tiaqx_status_s cn78xxp1;
2462        struct cvmx_sso_tiaqx_status_s cnf75xx;
2463};
2464
2465typedef union cvmx_sso_tiaqx_status cvmx_sso_tiaqx_status_t;
2466
2467/**
2468 * cvmx_sso_toaq#_status
2469 *
2470 * Returns TAQ outbound status indexed by group.
2471 *
2472 */
2473union cvmx_sso_toaqx_status {
2474        u64 u64;
2475        struct cvmx_sso_toaqx_status_s {
2476                u64 reserved_62_63 : 2;
2477                u64 ext_vld : 1;
2478                u64 partial : 1;
2479                u64 wae_tail : 4;
2480                u64 reserved_43_55 : 13;
2481                u64 cl_used : 11;
2482                u64 reserved_23_31 : 9;
2483                u64 ent_head : 11;
2484                u64 reserved_11_11 : 1;
2485                u64 ent_tail : 11;
2486        } s;
2487        struct cvmx_sso_toaqx_status_s cn73xx;
2488        struct cvmx_sso_toaqx_status_s cn78xx;
2489        struct cvmx_sso_toaqx_status_s cn78xxp1;
2490        struct cvmx_sso_toaqx_status_s cnf75xx;
2491};
2492
2493typedef union cvmx_sso_toaqx_status cvmx_sso_toaqx_status_t;
2494
2495/**
2496 * cvmx_sso_ts_pc
2497 *
2498 * SSO_TS_PC = SSO Tag Switch Performance Counter
2499 *
2500 * Counts the number of tag switch requests.
2501 * Counter rolls over through zero when max value exceeded.
2502 */
2503union cvmx_sso_ts_pc {
2504        u64 u64;
2505        struct cvmx_sso_ts_pc_s {
2506                u64 ts_pc : 64;
2507        } s;
2508        struct cvmx_sso_ts_pc_s cn68xx;
2509        struct cvmx_sso_ts_pc_s cn68xxp1;
2510};
2511
2512typedef union cvmx_sso_ts_pc cvmx_sso_ts_pc_t;
2513
2514/**
2515 * cvmx_sso_wa_com_pc
2516 *
2517 * SSO_WA_COM_PC = SSO Work Add Combined Performance Counter
2518 *
2519 * Counts the number of add new work requests for all QOS levels.
2520 * Counter rolls over through zero when max value exceeded.
2521 */
2522union cvmx_sso_wa_com_pc {
2523        u64 u64;
2524        struct cvmx_sso_wa_com_pc_s {
2525                u64 wa_pc : 64;
2526        } s;
2527        struct cvmx_sso_wa_com_pc_s cn68xx;
2528        struct cvmx_sso_wa_com_pc_s cn68xxp1;
2529};
2530
2531typedef union cvmx_sso_wa_com_pc cvmx_sso_wa_com_pc_t;
2532
2533/**
2534 * cvmx_sso_wa_pc#
2535 *
2536 * CSR reserved addresses: (64): 0x4200..0x43f8
2537 * CSR align addresses: ===========================================================================================================
2538 * SSO_WA_PCX = SSO Work Add Performance Counter
2539 *             (one per QOS level)
2540 *
2541 * Counts the number of add new work requests for each QOS level.
2542 * Counter rolls over through zero when max value exceeded.
2543 */
2544union cvmx_sso_wa_pcx {
2545        u64 u64;
2546        struct cvmx_sso_wa_pcx_s {
2547                u64 wa_pc : 64;
2548        } s;
2549        struct cvmx_sso_wa_pcx_s cn68xx;
2550        struct cvmx_sso_wa_pcx_s cn68xxp1;
2551};
2552
2553typedef union cvmx_sso_wa_pcx cvmx_sso_wa_pcx_t;
2554
2555/**
2556 * cvmx_sso_wq_int
2557 *
2558 * Note, the old POW offsets ran from 0x0 to 0x3f8, leaving the next available slot at 0x400.
2559 * To ensure no overlap, start on 4k boundary: 0x1000.
2560 * SSO_WQ_INT = SSO Work Queue Interrupt Register
2561 *
2562 * Contains the bits (one per group) that set work queue interrupts and are
2563 * used to clear these interrupts.  For more information regarding this
2564 * register, see the interrupt section of the SSO spec.
2565 */
2566union cvmx_sso_wq_int {
2567        u64 u64;
2568        struct cvmx_sso_wq_int_s {
2569                u64 wq_int : 64;
2570        } s;
2571        struct cvmx_sso_wq_int_s cn68xx;
2572        struct cvmx_sso_wq_int_s cn68xxp1;
2573};
2574
2575typedef union cvmx_sso_wq_int cvmx_sso_wq_int_t;
2576
2577/**
2578 * cvmx_sso_wq_int_cnt#
2579 *
2580 * CSR reserved addresses: (64): 0x7200..0x73f8
2581 * CSR align addresses: ===========================================================================================================
2582 * SSO_WQ_INT_CNTX = SSO Work Queue Interrupt Count Register
2583 *                   (one per group)
2584 *
2585 * Contains a read-only copy of the counts used to trigger work queue
2586 * interrupts.  For more information regarding this register, see the interrupt
2587 * section.
2588 */
2589union cvmx_sso_wq_int_cntx {
2590        u64 u64;
2591        struct cvmx_sso_wq_int_cntx_s {
2592                u64 reserved_32_63 : 32;
2593                u64 tc_cnt : 4;
2594                u64 reserved_26_27 : 2;
2595                u64 ds_cnt : 12;
2596                u64 reserved_12_13 : 2;
2597                u64 iq_cnt : 12;
2598        } s;
2599        struct cvmx_sso_wq_int_cntx_s cn68xx;
2600        struct cvmx_sso_wq_int_cntx_s cn68xxp1;
2601};
2602
2603typedef union cvmx_sso_wq_int_cntx cvmx_sso_wq_int_cntx_t;
2604
2605/**
2606 * cvmx_sso_wq_int_pc
2607 *
2608 * Contains the threshold value for the work-executable interrupt periodic counter and also a
2609 * read-only copy of the periodic counter. For more information on this register, refer to
2610 * Interrupts.
2611 */
2612union cvmx_sso_wq_int_pc {
2613        u64 u64;
2614        struct cvmx_sso_wq_int_pc_s {
2615                u64 reserved_60_63 : 4;
2616                u64 pc : 28;
2617                u64 reserved_28_31 : 4;
2618                u64 pc_thr : 20;
2619                u64 reserved_0_7 : 8;
2620        } s;
2621        struct cvmx_sso_wq_int_pc_s cn68xx;
2622        struct cvmx_sso_wq_int_pc_s cn68xxp1;
2623        struct cvmx_sso_wq_int_pc_s cn73xx;
2624        struct cvmx_sso_wq_int_pc_s cn78xx;
2625        struct cvmx_sso_wq_int_pc_s cn78xxp1;
2626        struct cvmx_sso_wq_int_pc_s cnf75xx;
2627};
2628
2629typedef union cvmx_sso_wq_int_pc cvmx_sso_wq_int_pc_t;
2630
2631/**
2632 * cvmx_sso_wq_int_thr#
2633 *
2634 * CSR reserved addresses: (96): 0x6100..0x63f8
2635 * CSR align addresses: ===========================================================================================================
2636 * SSO_WQ_INT_THR(0..63) = SSO Work Queue Interrupt Threshold Registers
2637 *                         (one per group)
2638 *
2639 * Contains the thresholds for enabling and setting work queue interrupts.  For
2640 * more information, see the interrupt section.
2641 *
2642 * Note: Up to 16 of the SSO's internal storage buffers can be allocated
2643 * for hardware use and are therefore not available for incoming work queue
2644 * entries.  Additionally, any WS that is not in the EMPTY state consumes a
2645 * buffer.  Thus in a 32 PP system, it is not advisable to set either IQ_THR or
2646 * DS_THR to greater than 2048 - 16 - 32*2 = 1968.  Doing so may prevent the
2647 * interrupt from ever triggering.
2648 *
2649 * Priorities for QOS levels 0..7
2650 */
2651union cvmx_sso_wq_int_thrx {
2652        u64 u64;
2653        struct cvmx_sso_wq_int_thrx_s {
2654                u64 reserved_33_63 : 31;
2655                u64 tc_en : 1;
2656                u64 tc_thr : 4;
2657                u64 reserved_26_27 : 2;
2658                u64 ds_thr : 12;
2659                u64 reserved_12_13 : 2;
2660                u64 iq_thr : 12;
2661        } s;
2662        struct cvmx_sso_wq_int_thrx_s cn68xx;
2663        struct cvmx_sso_wq_int_thrx_s cn68xxp1;
2664};
2665
2666typedef union cvmx_sso_wq_int_thrx cvmx_sso_wq_int_thrx_t;
2667
2668/**
2669 * cvmx_sso_wq_iq_dis
2670 *
2671 * CSR reserved addresses: (1): 0x1008..0x1008
2672 * SSO_WQ_IQ_DIS = SSO Input Queue Interrupt Temporary Disable Mask
2673 *
2674 * Contains the input queue interrupt temporary disable bits (one per group).
2675 * For more information regarding this register, see the interrupt section.
2676 */
2677union cvmx_sso_wq_iq_dis {
2678        u64 u64;
2679        struct cvmx_sso_wq_iq_dis_s {
2680                u64 iq_dis : 64;
2681        } s;
2682        struct cvmx_sso_wq_iq_dis_s cn68xx;
2683        struct cvmx_sso_wq_iq_dis_s cn68xxp1;
2684};
2685
2686typedef union cvmx_sso_wq_iq_dis cvmx_sso_wq_iq_dis_t;
2687
2688/**
2689 * cvmx_sso_ws_cfg
2690 *
2691 * This register contains various SSO work-slot configuration bits.
2692 *
2693 */
2694union cvmx_sso_ws_cfg {
2695        u64 u64;
2696        struct cvmx_sso_ws_cfg_s {
2697                u64 reserved_56_63 : 8;
2698                u64 ocla_bp : 8;
2699                u64 reserved_7_47 : 41;
2700                u64 aw_clk_dis : 1;
2701                u64 gw_clk_dis : 1;
2702                u64 disable_pw : 1;
2703                u64 arbc_step_en : 1;
2704                u64 ncbo_step_en : 1;
2705                u64 soc_ccam_dis : 1;
2706                u64 sso_cclk_dis : 1;
2707        } s;
2708        struct cvmx_sso_ws_cfg_s cn73xx;
2709        struct cvmx_sso_ws_cfg_cn78xx {
2710                u64 reserved_56_63 : 8;
2711                u64 ocla_bp : 8;
2712                u64 reserved_5_47 : 43;
2713                u64 disable_pw : 1;
2714                u64 arbc_step_en : 1;
2715                u64 ncbo_step_en : 1;
2716                u64 soc_ccam_dis : 1;
2717                u64 sso_cclk_dis : 1;
2718        } cn78xx;
2719        struct cvmx_sso_ws_cfg_cn78xx cn78xxp1;
2720        struct cvmx_sso_ws_cfg_s cnf75xx;
2721};
2722
2723typedef union cvmx_sso_ws_cfg cvmx_sso_ws_cfg_t;
2724
2725/**
2726 * cvmx_sso_ws_eco
2727 */
2728union cvmx_sso_ws_eco {
2729        u64 u64;
2730        struct cvmx_sso_ws_eco_s {
2731                u64 reserved_8_63 : 56;
2732                u64 eco_rw : 8;
2733        } s;
2734        struct cvmx_sso_ws_eco_s cn73xx;
2735        struct cvmx_sso_ws_eco_s cnf75xx;
2736};
2737
2738typedef union cvmx_sso_ws_eco cvmx_sso_ws_eco_t;
2739
2740/**
2741 * cvmx_sso_ws_pc#
2742 *
2743 * CSR reserved addresses: (225): 0x3100..0x3800
2744 * CSR align addresses: ===========================================================================================================
2745 * SSO_WS_PCX = SSO Work Schedule Performance Counter
2746 *              (one per group)
2747 *
2748 * Counts the number of work schedules for each group.
2749 * Counter rolls over through zero when max value exceeded.
2750 */
2751union cvmx_sso_ws_pcx {
2752        u64 u64;
2753        struct cvmx_sso_ws_pcx_s {
2754                u64 ws_pc : 64;
2755        } s;
2756        struct cvmx_sso_ws_pcx_s cn68xx;
2757        struct cvmx_sso_ws_pcx_s cn68xxp1;
2758};
2759
2760typedef union cvmx_sso_ws_pcx cvmx_sso_ws_pcx_t;
2761
2762/**
2763 * cvmx_sso_xaq#_head_next
2764 *
2765 * These registers contain the pointer to the next buffer to become the head when the final cache
2766 * line in this buffer is read.
2767 */
2768union cvmx_sso_xaqx_head_next {
2769        u64 u64;
2770        struct cvmx_sso_xaqx_head_next_s {
2771                u64 reserved_42_63 : 22;
2772                u64 ptr : 35;
2773                u64 reserved_0_6 : 7;
2774        } s;
2775        struct cvmx_sso_xaqx_head_next_s cn73xx;
2776        struct cvmx_sso_xaqx_head_next_s cn78xx;
2777        struct cvmx_sso_xaqx_head_next_s cn78xxp1;
2778        struct cvmx_sso_xaqx_head_next_s cnf75xx;
2779};
2780
2781typedef union cvmx_sso_xaqx_head_next cvmx_sso_xaqx_head_next_t;
2782
2783/**
2784 * cvmx_sso_xaq#_head_ptr
2785 *
2786 * These registers contain the pointer to the first entry of the external linked list(s) for a
2787 * particular group. Software must initialize the external linked list(s) by programming
2788 * SSO_XAQ()_HEAD_PTR, SSO_XAQ()_HEAD_NEXT, SSO_XAQ()_TAIL_PTR and
2789 * SSO_XAQ()_TAIL_NEXT to identical values.
2790 */
2791union cvmx_sso_xaqx_head_ptr {
2792        u64 u64;
2793        struct cvmx_sso_xaqx_head_ptr_s {
2794                u64 reserved_42_63 : 22;
2795                u64 ptr : 35;
2796                u64 reserved_5_6 : 2;
2797                u64 cl : 5;
2798        } s;
2799        struct cvmx_sso_xaqx_head_ptr_s cn73xx;
2800        struct cvmx_sso_xaqx_head_ptr_s cn78xx;
2801        struct cvmx_sso_xaqx_head_ptr_s cn78xxp1;
2802        struct cvmx_sso_xaqx_head_ptr_s cnf75xx;
2803};
2804
2805typedef union cvmx_sso_xaqx_head_ptr cvmx_sso_xaqx_head_ptr_t;
2806
2807/**
2808 * cvmx_sso_xaq#_tail_next
2809 *
2810 * These registers contain the pointer to the next buffer to become the tail when the final cache
2811 * line in this buffer is written.  Register fields are identical to those in
2812 * SSO_XAQ()_HEAD_NEXT above.
2813 */
2814union cvmx_sso_xaqx_tail_next {
2815        u64 u64;
2816        struct cvmx_sso_xaqx_tail_next_s {
2817                u64 reserved_42_63 : 22;
2818                u64 ptr : 35;
2819                u64 reserved_0_6 : 7;
2820        } s;
2821        struct cvmx_sso_xaqx_tail_next_s cn73xx;
2822        struct cvmx_sso_xaqx_tail_next_s cn78xx;
2823        struct cvmx_sso_xaqx_tail_next_s cn78xxp1;
2824        struct cvmx_sso_xaqx_tail_next_s cnf75xx;
2825};
2826
2827typedef union cvmx_sso_xaqx_tail_next cvmx_sso_xaqx_tail_next_t;
2828
2829/**
2830 * cvmx_sso_xaq#_tail_ptr
2831 *
2832 * These registers contain the pointer to the last entry of the external linked list(s) for a
2833 * particular group.  Register fields are identical to those in SSO_XAQ()_HEAD_PTR above.
2834 * Software must initialize the external linked list(s) by programming
2835 * SSO_XAQ()_HEAD_PTR, SSO_XAQ()_HEAD_NEXT, SSO_XAQ()_TAIL_PTR and
2836 * SSO_XAQ()_TAIL_NEXT to identical values.
2837 */
2838union cvmx_sso_xaqx_tail_ptr {
2839        u64 u64;
2840        struct cvmx_sso_xaqx_tail_ptr_s {
2841                u64 reserved_42_63 : 22;
2842                u64 ptr : 35;
2843                u64 reserved_5_6 : 2;
2844                u64 cl : 5;
2845        } s;
2846        struct cvmx_sso_xaqx_tail_ptr_s cn73xx;
2847        struct cvmx_sso_xaqx_tail_ptr_s cn78xx;
2848        struct cvmx_sso_xaqx_tail_ptr_s cn78xxp1;
2849        struct cvmx_sso_xaqx_tail_ptr_s cnf75xx;
2850};
2851
2852typedef union cvmx_sso_xaqx_tail_ptr cvmx_sso_xaqx_tail_ptr_t;
2853
2854/**
2855 * cvmx_sso_xaq_aura
2856 */
2857union cvmx_sso_xaq_aura {
2858        u64 u64;
2859        struct cvmx_sso_xaq_aura_s {
2860                u64 reserved_12_63 : 52;
2861                u64 node : 2;
2862                u64 laura : 10;
2863        } s;
2864        struct cvmx_sso_xaq_aura_s cn73xx;
2865        struct cvmx_sso_xaq_aura_s cn78xx;
2866        struct cvmx_sso_xaq_aura_s cn78xxp1;
2867        struct cvmx_sso_xaq_aura_s cnf75xx;
2868};
2869
2870typedef union cvmx_sso_xaq_aura cvmx_sso_xaq_aura_t;
2871
2872/**
2873 * cvmx_sso_xaq_latency_pc
2874 */
2875union cvmx_sso_xaq_latency_pc {
2876        u64 u64;
2877        struct cvmx_sso_xaq_latency_pc_s {
2878                u64 count : 64;
2879        } s;
2880        struct cvmx_sso_xaq_latency_pc_s cn73xx;
2881        struct cvmx_sso_xaq_latency_pc_s cn78xx;
2882        struct cvmx_sso_xaq_latency_pc_s cn78xxp1;
2883        struct cvmx_sso_xaq_latency_pc_s cnf75xx;
2884};
2885
2886typedef union cvmx_sso_xaq_latency_pc cvmx_sso_xaq_latency_pc_t;
2887
2888/**
2889 * cvmx_sso_xaq_req_pc
2890 */
2891union cvmx_sso_xaq_req_pc {
2892        u64 u64;
2893        struct cvmx_sso_xaq_req_pc_s {
2894                u64 count : 64;
2895        } s;
2896        struct cvmx_sso_xaq_req_pc_s cn73xx;
2897        struct cvmx_sso_xaq_req_pc_s cn78xx;
2898        struct cvmx_sso_xaq_req_pc_s cn78xxp1;
2899        struct cvmx_sso_xaq_req_pc_s cnf75xx;
2900};
2901
2902typedef union cvmx_sso_xaq_req_pc cvmx_sso_xaq_req_pc_t;
2903
2904#endif
2905