uboot/arch/mips/mach-octeon/include/mach/cvmx-pcsx-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 pcsx.
   7 */
   8
   9#ifndef __CVMX_PCSX_DEFS_H__
  10#define __CVMX_PCSX_DEFS_H__
  11
  12static inline u64 CVMX_PCSX_ANX_ADV_REG(unsigned long offset, unsigned long block_id)
  13{
  14        switch (cvmx_get_octeon_family()) {
  15        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  16        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  17        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  18                return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  19        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
  20                return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  21        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
  22        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  23                return 0x00011800B0001010ull + ((offset) + (block_id) * 0x4000ull) * 1024;
  24        }
  25        return 0x00011800B0001010ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  26}
  27
  28static inline u64 CVMX_PCSX_ANX_EXT_ST_REG(unsigned long offset, unsigned long block_id)
  29{
  30        switch (cvmx_get_octeon_family()) {
  31        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  32        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  33        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  34                return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  35        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
  36                return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  37        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
  38        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  39                return 0x00011800B0001028ull + ((offset) + (block_id) * 0x4000ull) * 1024;
  40        }
  41        return 0x00011800B0001028ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  42}
  43
  44static inline u64 CVMX_PCSX_ANX_LP_ABIL_REG(unsigned long offset, unsigned long block_id)
  45{
  46        switch (cvmx_get_octeon_family()) {
  47        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  48        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  49        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  50                return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  51        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
  52                return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  53        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
  54        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  55                return 0x00011800B0001018ull + ((offset) + (block_id) * 0x4000ull) * 1024;
  56        }
  57        return 0x00011800B0001018ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  58}
  59
  60static inline u64 CVMX_PCSX_ANX_RESULTS_REG(unsigned long offset, unsigned long block_id)
  61{
  62        switch (cvmx_get_octeon_family()) {
  63        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  64        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  65        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  66                return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  67        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
  68                return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  69        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
  70        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  71                return 0x00011800B0001020ull + ((offset) + (block_id) * 0x4000ull) * 1024;
  72        }
  73        return 0x00011800B0001020ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  74}
  75
  76static inline u64 CVMX_PCSX_INTX_EN_REG(unsigned long offset, unsigned long block_id)
  77{
  78        switch (cvmx_get_octeon_family()) {
  79        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  80        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  81        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  82                return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  83        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
  84                return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  85        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
  86        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  87                return 0x00011800B0001088ull + ((offset) + (block_id) * 0x4000ull) * 1024;
  88        }
  89        return 0x00011800B0001088ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  90}
  91
  92static inline u64 CVMX_PCSX_INTX_REG(unsigned long offset, unsigned long block_id)
  93{
  94        switch (cvmx_get_octeon_family()) {
  95        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
  96        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
  97        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
  98                return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
  99        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 100                return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 101        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 102        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 103                return 0x00011800B0001080ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 104        }
 105        return 0x00011800B0001080ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 106}
 107
 108static inline u64 CVMX_PCSX_LINKX_TIMER_COUNT_REG(unsigned long offset, unsigned long block_id)
 109{
 110        switch (cvmx_get_octeon_family()) {
 111        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 112        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 113        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 114                return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 115        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 116                return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 117        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 118        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 119                return 0x00011800B0001040ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 120        }
 121        return 0x00011800B0001040ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 122}
 123
 124static inline u64 CVMX_PCSX_LOG_ANLX_REG(unsigned long offset, unsigned long block_id)
 125{
 126        switch (cvmx_get_octeon_family()) {
 127        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 128        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 129        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 130                return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 131        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 132                return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 133        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 134        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 135                return 0x00011800B0001090ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 136        }
 137        return 0x00011800B0001090ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 138}
 139
 140#define CVMX_PCSX_MAC_CRDT_CNTX_REG(offset, block_id)                                              \
 141        (0x00011800B00010B0ull + (((offset) & 3) + ((block_id) & 1) * 0x20000ull) * 1024)
 142static inline u64 CVMX_PCSX_MISCX_CTL_REG(unsigned long offset, unsigned long block_id)
 143{
 144        switch (cvmx_get_octeon_family()) {
 145        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 146        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 147        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 148                return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 149        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 150                return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 151        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 152        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 153                return 0x00011800B0001078ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 154        }
 155        return 0x00011800B0001078ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 156}
 157
 158static inline u64 CVMX_PCSX_MRX_CONTROL_REG(unsigned long offset, unsigned long block_id)
 159{
 160        switch (cvmx_get_octeon_family()) {
 161        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 162        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 163        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 164                return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 165        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 166                return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 167        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 168        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 169                return 0x00011800B0001000ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 170        }
 171        return 0x00011800B0001000ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 172}
 173
 174static inline u64 CVMX_PCSX_MRX_STATUS_REG(unsigned long offset, unsigned long block_id)
 175{
 176        switch (cvmx_get_octeon_family()) {
 177        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 178        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 179        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 180                return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 181        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 182                return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 183        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 184        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 185                return 0x00011800B0001008ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 186        }
 187        return 0x00011800B0001008ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 188}
 189
 190static inline u64 CVMX_PCSX_RXX_STATES_REG(unsigned long offset, unsigned long block_id)
 191{
 192        switch (cvmx_get_octeon_family()) {
 193        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 194        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 195        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 196                return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 197        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 198                return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 199        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 200        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 201                return 0x00011800B0001058ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 202        }
 203        return 0x00011800B0001058ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 204}
 205
 206static inline u64 CVMX_PCSX_RXX_SYNC_REG(unsigned long offset, unsigned long block_id)
 207{
 208        switch (cvmx_get_octeon_family()) {
 209        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 210        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 211        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 212                return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 213        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 214                return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 215        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 216        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 217                return 0x00011800B0001050ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 218        }
 219        return 0x00011800B0001050ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 220}
 221
 222#define CVMX_PCSX_SERDES_CRDT_CNTX_REG(offset, block_id)                                           \
 223        (0x00011800B00010A0ull + (((offset) & 3) + ((block_id) & 1) * 0x20000ull) * 1024)
 224static inline u64 CVMX_PCSX_SGMX_AN_ADV_REG(unsigned long offset, unsigned long block_id)
 225{
 226        switch (cvmx_get_octeon_family()) {
 227        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 228        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 229        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 230                return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 231        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 232                return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 233        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 234        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 235                return 0x00011800B0001068ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 236        }
 237        return 0x00011800B0001068ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 238}
 239
 240static inline u64 CVMX_PCSX_SGMX_LP_ADV_REG(unsigned long offset, unsigned long block_id)
 241{
 242        switch (cvmx_get_octeon_family()) {
 243        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 244        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 245        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 246                return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 247        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 248                return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 249        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 250        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 251                return 0x00011800B0001070ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 252        }
 253        return 0x00011800B0001070ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 254}
 255
 256static inline u64 CVMX_PCSX_TXX_STATES_REG(unsigned long offset, unsigned long block_id)
 257{
 258        switch (cvmx_get_octeon_family()) {
 259        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 260        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 261        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 262                return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 263        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 264                return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 265        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 266        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 267                return 0x00011800B0001060ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 268        }
 269        return 0x00011800B0001060ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 270}
 271
 272static inline u64 CVMX_PCSX_TX_RXX_POLARITY_REG(unsigned long offset, unsigned long block_id)
 273{
 274        switch (cvmx_get_octeon_family()) {
 275        case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
 276        case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
 277        case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
 278                return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 279        case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
 280                return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 281        case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
 282        case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
 283                return 0x00011800B0001048ull + ((offset) + (block_id) * 0x4000ull) * 1024;
 284        }
 285        return 0x00011800B0001048ull + ((offset) + (block_id) * 0x20000ull) * 1024;
 286}
 287
 288/**
 289 * cvmx_pcs#_an#_adv_reg
 290 *
 291 * Bits [15:9] in the Status Register indicate ability to operate as per those signalling specification,
 292 * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0, indicating
 293 * that the chip cannot operate in the corresponding modes.
 294 *
 295 * Bit [4] RM_FLT is a don't care when the selected mode is SGMII.
 296 *
 297 *
 298 *
 299 * PCS_AN_ADV_REG = AN Advertisement Register4
 300 */
 301union cvmx_pcsx_anx_adv_reg {
 302        u64 u64;
 303        struct cvmx_pcsx_anx_adv_reg_s {
 304                u64 reserved_16_63 : 48;
 305                u64 np : 1;
 306                u64 reserved_14_14 : 1;
 307                u64 rem_flt : 2;
 308                u64 reserved_9_11 : 3;
 309                u64 pause : 2;
 310                u64 hfd : 1;
 311                u64 fd : 1;
 312                u64 reserved_0_4 : 5;
 313        } s;
 314        struct cvmx_pcsx_anx_adv_reg_s cn52xx;
 315        struct cvmx_pcsx_anx_adv_reg_s cn52xxp1;
 316        struct cvmx_pcsx_anx_adv_reg_s cn56xx;
 317        struct cvmx_pcsx_anx_adv_reg_s cn56xxp1;
 318        struct cvmx_pcsx_anx_adv_reg_s cn61xx;
 319        struct cvmx_pcsx_anx_adv_reg_s cn63xx;
 320        struct cvmx_pcsx_anx_adv_reg_s cn63xxp1;
 321        struct cvmx_pcsx_anx_adv_reg_s cn66xx;
 322        struct cvmx_pcsx_anx_adv_reg_s cn68xx;
 323        struct cvmx_pcsx_anx_adv_reg_s cn68xxp1;
 324        struct cvmx_pcsx_anx_adv_reg_s cn70xx;
 325        struct cvmx_pcsx_anx_adv_reg_s cn70xxp1;
 326        struct cvmx_pcsx_anx_adv_reg_s cnf71xx;
 327};
 328
 329typedef union cvmx_pcsx_anx_adv_reg cvmx_pcsx_anx_adv_reg_t;
 330
 331/**
 332 * cvmx_pcs#_an#_ext_st_reg
 333 *
 334 * as per IEEE802.3 Clause 22
 335 *
 336 */
 337union cvmx_pcsx_anx_ext_st_reg {
 338        u64 u64;
 339        struct cvmx_pcsx_anx_ext_st_reg_s {
 340                u64 reserved_16_63 : 48;
 341                u64 thou_xfd : 1;
 342                u64 thou_xhd : 1;
 343                u64 thou_tfd : 1;
 344                u64 thou_thd : 1;
 345                u64 reserved_0_11 : 12;
 346        } s;
 347        struct cvmx_pcsx_anx_ext_st_reg_s cn52xx;
 348        struct cvmx_pcsx_anx_ext_st_reg_s cn52xxp1;
 349        struct cvmx_pcsx_anx_ext_st_reg_s cn56xx;
 350        struct cvmx_pcsx_anx_ext_st_reg_s cn56xxp1;
 351        struct cvmx_pcsx_anx_ext_st_reg_s cn61xx;
 352        struct cvmx_pcsx_anx_ext_st_reg_s cn63xx;
 353        struct cvmx_pcsx_anx_ext_st_reg_s cn63xxp1;
 354        struct cvmx_pcsx_anx_ext_st_reg_s cn66xx;
 355        struct cvmx_pcsx_anx_ext_st_reg_s cn68xx;
 356        struct cvmx_pcsx_anx_ext_st_reg_s cn68xxp1;
 357        struct cvmx_pcsx_anx_ext_st_reg_cn70xx {
 358                u64 reserved_16_63 : 48;
 359                u64 thou_xfd : 1;
 360                u64 thou_xhd : 1;
 361                u64 thou_tfd : 1;
 362                u64 thou_thd : 1;
 363                u64 reserved_11_0 : 12;
 364        } cn70xx;
 365        struct cvmx_pcsx_anx_ext_st_reg_cn70xx cn70xxp1;
 366        struct cvmx_pcsx_anx_ext_st_reg_s cnf71xx;
 367};
 368
 369typedef union cvmx_pcsx_anx_ext_st_reg cvmx_pcsx_anx_ext_st_reg_t;
 370
 371/**
 372 * cvmx_pcs#_an#_lp_abil_reg
 373 *
 374 * as per IEEE802.3 Clause 37
 375 *
 376 */
 377union cvmx_pcsx_anx_lp_abil_reg {
 378        u64 u64;
 379        struct cvmx_pcsx_anx_lp_abil_reg_s {
 380                u64 reserved_16_63 : 48;
 381                u64 np : 1;
 382                u64 ack : 1;
 383                u64 rem_flt : 2;
 384                u64 reserved_9_11 : 3;
 385                u64 pause : 2;
 386                u64 hfd : 1;
 387                u64 fd : 1;
 388                u64 reserved_0_4 : 5;
 389        } s;
 390        struct cvmx_pcsx_anx_lp_abil_reg_s cn52xx;
 391        struct cvmx_pcsx_anx_lp_abil_reg_s cn52xxp1;
 392        struct cvmx_pcsx_anx_lp_abil_reg_s cn56xx;
 393        struct cvmx_pcsx_anx_lp_abil_reg_s cn56xxp1;
 394        struct cvmx_pcsx_anx_lp_abil_reg_s cn61xx;
 395        struct cvmx_pcsx_anx_lp_abil_reg_s cn63xx;
 396        struct cvmx_pcsx_anx_lp_abil_reg_s cn63xxp1;
 397        struct cvmx_pcsx_anx_lp_abil_reg_s cn66xx;
 398        struct cvmx_pcsx_anx_lp_abil_reg_s cn68xx;
 399        struct cvmx_pcsx_anx_lp_abil_reg_s cn68xxp1;
 400        struct cvmx_pcsx_anx_lp_abil_reg_s cn70xx;
 401        struct cvmx_pcsx_anx_lp_abil_reg_s cn70xxp1;
 402        struct cvmx_pcsx_anx_lp_abil_reg_s cnf71xx;
 403};
 404
 405typedef union cvmx_pcsx_anx_lp_abil_reg cvmx_pcsx_anx_lp_abil_reg_t;
 406
 407/**
 408 * cvmx_pcs#_an#_results_reg
 409 *
 410 * NOTE:
 411 * an_results_reg is don't care when AN_OVRD is set to 1. If AN_OVRD=0 and AN_CPT=1
 412 * the an_results_reg is valid.
 413 */
 414union cvmx_pcsx_anx_results_reg {
 415        u64 u64;
 416        struct cvmx_pcsx_anx_results_reg_s {
 417                u64 reserved_7_63 : 57;
 418                u64 pause : 2;
 419                u64 spd : 2;
 420                u64 an_cpt : 1;
 421                u64 dup : 1;
 422                u64 link_ok : 1;
 423        } s;
 424        struct cvmx_pcsx_anx_results_reg_s cn52xx;
 425        struct cvmx_pcsx_anx_results_reg_s cn52xxp1;
 426        struct cvmx_pcsx_anx_results_reg_s cn56xx;
 427        struct cvmx_pcsx_anx_results_reg_s cn56xxp1;
 428        struct cvmx_pcsx_anx_results_reg_s cn61xx;
 429        struct cvmx_pcsx_anx_results_reg_s cn63xx;
 430        struct cvmx_pcsx_anx_results_reg_s cn63xxp1;
 431        struct cvmx_pcsx_anx_results_reg_s cn66xx;
 432        struct cvmx_pcsx_anx_results_reg_s cn68xx;
 433        struct cvmx_pcsx_anx_results_reg_s cn68xxp1;
 434        struct cvmx_pcsx_anx_results_reg_s cn70xx;
 435        struct cvmx_pcsx_anx_results_reg_s cn70xxp1;
 436        struct cvmx_pcsx_anx_results_reg_s cnf71xx;
 437};
 438
 439typedef union cvmx_pcsx_anx_results_reg cvmx_pcsx_anx_results_reg_t;
 440
 441/**
 442 * cvmx_pcs#_int#_en_reg
 443 *
 444 * PCS Interrupt Enable Register
 445 *
 446 */
 447union cvmx_pcsx_intx_en_reg {
 448        u64 u64;
 449        struct cvmx_pcsx_intx_en_reg_s {
 450                u64 reserved_13_63 : 51;
 451                u64 dbg_sync_en : 1;
 452                u64 dup : 1;
 453                u64 sync_bad_en : 1;
 454                u64 an_bad_en : 1;
 455                u64 rxlock_en : 1;
 456                u64 rxbad_en : 1;
 457                u64 rxerr_en : 1;
 458                u64 txbad_en : 1;
 459                u64 txfifo_en : 1;
 460                u64 txfifu_en : 1;
 461                u64 an_err_en : 1;
 462                u64 xmit_en : 1;
 463                u64 lnkspd_en : 1;
 464        } s;
 465        struct cvmx_pcsx_intx_en_reg_cn52xx {
 466                u64 reserved_12_63 : 52;
 467                u64 dup : 1;
 468                u64 sync_bad_en : 1;
 469                u64 an_bad_en : 1;
 470                u64 rxlock_en : 1;
 471                u64 rxbad_en : 1;
 472                u64 rxerr_en : 1;
 473                u64 txbad_en : 1;
 474                u64 txfifo_en : 1;
 475                u64 txfifu_en : 1;
 476                u64 an_err_en : 1;
 477                u64 xmit_en : 1;
 478                u64 lnkspd_en : 1;
 479        } cn52xx;
 480        struct cvmx_pcsx_intx_en_reg_cn52xx cn52xxp1;
 481        struct cvmx_pcsx_intx_en_reg_cn52xx cn56xx;
 482        struct cvmx_pcsx_intx_en_reg_cn52xx cn56xxp1;
 483        struct cvmx_pcsx_intx_en_reg_s cn61xx;
 484        struct cvmx_pcsx_intx_en_reg_s cn63xx;
 485        struct cvmx_pcsx_intx_en_reg_s cn63xxp1;
 486        struct cvmx_pcsx_intx_en_reg_s cn66xx;
 487        struct cvmx_pcsx_intx_en_reg_s cn68xx;
 488        struct cvmx_pcsx_intx_en_reg_s cn68xxp1;
 489        struct cvmx_pcsx_intx_en_reg_s cn70xx;
 490        struct cvmx_pcsx_intx_en_reg_s cn70xxp1;
 491        struct cvmx_pcsx_intx_en_reg_s cnf71xx;
 492};
 493
 494typedef union cvmx_pcsx_intx_en_reg cvmx_pcsx_intx_en_reg_t;
 495
 496/**
 497 * cvmx_pcs#_int#_reg
 498 *
 499 * PCS Interrupt Register
 500 * NOTE: RXERR and TXERR conditions to be discussed with Dan before finalising
 501 * DBG_SYNC interrupt fires when code group synchronization state machine makes a transition from
 502 * SYNC_ACQUIRED_1 state to SYNC_ACQUIRED_2 state(See IEEE 802.3-2005 figure 37-9). It is an
 503 * indication that a bad code group
 504 * was received after code group synchronizaton was achieved. This interrupt should be disabled
 505 * during normal link operation.
 506 * Use it as a debug help feature only.
 507 */
 508union cvmx_pcsx_intx_reg {
 509        u64 u64;
 510        struct cvmx_pcsx_intx_reg_s {
 511                u64 reserved_13_63 : 51;
 512                u64 dbg_sync : 1;
 513                u64 dup : 1;
 514                u64 sync_bad : 1;
 515                u64 an_bad : 1;
 516                u64 rxlock : 1;
 517                u64 rxbad : 1;
 518                u64 rxerr : 1;
 519                u64 txbad : 1;
 520                u64 txfifo : 1;
 521                u64 txfifu : 1;
 522                u64 an_err : 1;
 523                u64 xmit : 1;
 524                u64 lnkspd : 1;
 525        } s;
 526        struct cvmx_pcsx_intx_reg_cn52xx {
 527                u64 reserved_12_63 : 52;
 528                u64 dup : 1;
 529                u64 sync_bad : 1;
 530                u64 an_bad : 1;
 531                u64 rxlock : 1;
 532                u64 rxbad : 1;
 533                u64 rxerr : 1;
 534                u64 txbad : 1;
 535                u64 txfifo : 1;
 536                u64 txfifu : 1;
 537                u64 an_err : 1;
 538                u64 xmit : 1;
 539                u64 lnkspd : 1;
 540        } cn52xx;
 541        struct cvmx_pcsx_intx_reg_cn52xx cn52xxp1;
 542        struct cvmx_pcsx_intx_reg_cn52xx cn56xx;
 543        struct cvmx_pcsx_intx_reg_cn52xx cn56xxp1;
 544        struct cvmx_pcsx_intx_reg_s cn61xx;
 545        struct cvmx_pcsx_intx_reg_s cn63xx;
 546        struct cvmx_pcsx_intx_reg_s cn63xxp1;
 547        struct cvmx_pcsx_intx_reg_s cn66xx;
 548        struct cvmx_pcsx_intx_reg_s cn68xx;
 549        struct cvmx_pcsx_intx_reg_s cn68xxp1;
 550        struct cvmx_pcsx_intx_reg_s cn70xx;
 551        struct cvmx_pcsx_intx_reg_s cn70xxp1;
 552        struct cvmx_pcsx_intx_reg_s cnf71xx;
 553};
 554
 555typedef union cvmx_pcsx_intx_reg cvmx_pcsx_intx_reg_t;
 556
 557/**
 558 * cvmx_pcs#_link#_timer_count_reg
 559 *
 560 * PCS_LINK_TIMER_COUNT_REG = 1.6ms nominal link timer register
 561 *
 562 */
 563union cvmx_pcsx_linkx_timer_count_reg {
 564        u64 u64;
 565        struct cvmx_pcsx_linkx_timer_count_reg_s {
 566                u64 reserved_16_63 : 48;
 567                u64 count : 16;
 568        } s;
 569        struct cvmx_pcsx_linkx_timer_count_reg_s cn52xx;
 570        struct cvmx_pcsx_linkx_timer_count_reg_s cn52xxp1;
 571        struct cvmx_pcsx_linkx_timer_count_reg_s cn56xx;
 572        struct cvmx_pcsx_linkx_timer_count_reg_s cn56xxp1;
 573        struct cvmx_pcsx_linkx_timer_count_reg_s cn61xx;
 574        struct cvmx_pcsx_linkx_timer_count_reg_s cn63xx;
 575        struct cvmx_pcsx_linkx_timer_count_reg_s cn63xxp1;
 576        struct cvmx_pcsx_linkx_timer_count_reg_s cn66xx;
 577        struct cvmx_pcsx_linkx_timer_count_reg_s cn68xx;
 578        struct cvmx_pcsx_linkx_timer_count_reg_s cn68xxp1;
 579        struct cvmx_pcsx_linkx_timer_count_reg_s cn70xx;
 580        struct cvmx_pcsx_linkx_timer_count_reg_s cn70xxp1;
 581        struct cvmx_pcsx_linkx_timer_count_reg_s cnf71xx;
 582};
 583
 584typedef union cvmx_pcsx_linkx_timer_count_reg cvmx_pcsx_linkx_timer_count_reg_t;
 585
 586/**
 587 * cvmx_pcs#_log_anl#_reg
 588 *
 589 * PCS Logic Analyzer Register
 590 * NOTE: Logic Analyzer is enabled with LA_EN for the specified PCS lane only. PKT_SZ is
 591 * effective only when LA_EN=1
 592 * For normal operation(sgmii or 1000Base-X), this bit must be 0.
 593 * See pcsx.csr for xaui logic analyzer mode.
 594 * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt
 595 */
 596union cvmx_pcsx_log_anlx_reg {
 597        u64 u64;
 598        struct cvmx_pcsx_log_anlx_reg_s {
 599                u64 reserved_4_63 : 60;
 600                u64 lafifovfl : 1;
 601                u64 la_en : 1;
 602                u64 pkt_sz : 2;
 603        } s;
 604        struct cvmx_pcsx_log_anlx_reg_s cn52xx;
 605        struct cvmx_pcsx_log_anlx_reg_s cn52xxp1;
 606        struct cvmx_pcsx_log_anlx_reg_s cn56xx;
 607        struct cvmx_pcsx_log_anlx_reg_s cn56xxp1;
 608        struct cvmx_pcsx_log_anlx_reg_s cn61xx;
 609        struct cvmx_pcsx_log_anlx_reg_s cn63xx;
 610        struct cvmx_pcsx_log_anlx_reg_s cn63xxp1;
 611        struct cvmx_pcsx_log_anlx_reg_s cn66xx;
 612        struct cvmx_pcsx_log_anlx_reg_s cn68xx;
 613        struct cvmx_pcsx_log_anlx_reg_s cn68xxp1;
 614        struct cvmx_pcsx_log_anlx_reg_s cn70xx;
 615        struct cvmx_pcsx_log_anlx_reg_s cn70xxp1;
 616        struct cvmx_pcsx_log_anlx_reg_s cnf71xx;
 617};
 618
 619typedef union cvmx_pcsx_log_anlx_reg cvmx_pcsx_log_anlx_reg_t;
 620
 621/**
 622 * cvmx_pcs#_mac_crdt_cnt#_reg
 623 *
 624 * PCS MAC Credit Count
 625 *
 626 */
 627union cvmx_pcsx_mac_crdt_cntx_reg {
 628        u64 u64;
 629        struct cvmx_pcsx_mac_crdt_cntx_reg_s {
 630                u64 reserved_5_63 : 59;
 631                u64 cnt : 5;
 632        } s;
 633        struct cvmx_pcsx_mac_crdt_cntx_reg_s cn70xx;
 634        struct cvmx_pcsx_mac_crdt_cntx_reg_s cn70xxp1;
 635};
 636
 637typedef union cvmx_pcsx_mac_crdt_cntx_reg cvmx_pcsx_mac_crdt_cntx_reg_t;
 638
 639/**
 640 * cvmx_pcs#_misc#_ctl_reg
 641 *
 642 * SGMII Misc Control Register
 643 * SGMII bit [12] is really a misnomer, it is a decode  of pi_qlm_cfg pins to indicate SGMII or
 644 * 1000Base-X modes.
 645 * Note: MODE bit
 646 * When MODE=1,  1000Base-X mode is selected. Auto negotiation will follow IEEE 802.3 clause 37.
 647 * When MODE=0,  SGMII mode is selected and the following note will apply.
 648 * Repeat note from SGM_AN_ADV register
 649 * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the
 650 * MAC_PHY mode bit in misc_ctl_reg
 651 * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit
 652 * and [0] is always 1.
 653 * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
 654 */
 655union cvmx_pcsx_miscx_ctl_reg {
 656        u64 u64;
 657        struct cvmx_pcsx_miscx_ctl_reg_s {
 658                u64 reserved_13_63 : 51;
 659                u64 sgmii : 1;
 660                u64 gmxeno : 1;
 661                u64 loopbck2 : 1;
 662                u64 mac_phy : 1;
 663                u64 mode : 1;
 664                u64 an_ovrd : 1;
 665                u64 samp_pt : 7;
 666        } s;
 667        struct cvmx_pcsx_miscx_ctl_reg_s cn52xx;
 668        struct cvmx_pcsx_miscx_ctl_reg_s cn52xxp1;
 669        struct cvmx_pcsx_miscx_ctl_reg_s cn56xx;
 670        struct cvmx_pcsx_miscx_ctl_reg_s cn56xxp1;
 671        struct cvmx_pcsx_miscx_ctl_reg_s cn61xx;
 672        struct cvmx_pcsx_miscx_ctl_reg_s cn63xx;
 673        struct cvmx_pcsx_miscx_ctl_reg_s cn63xxp1;
 674        struct cvmx_pcsx_miscx_ctl_reg_s cn66xx;
 675        struct cvmx_pcsx_miscx_ctl_reg_s cn68xx;
 676        struct cvmx_pcsx_miscx_ctl_reg_s cn68xxp1;
 677        struct cvmx_pcsx_miscx_ctl_reg_cn70xx {
 678                u64 reserved_12_63 : 52;
 679                u64 gmxeno : 1;
 680                u64 loopbck2 : 1;
 681                u64 mac_phy : 1;
 682                u64 mode : 1;
 683                u64 an_ovrd : 1;
 684                u64 samp_pt : 7;
 685        } cn70xx;
 686        struct cvmx_pcsx_miscx_ctl_reg_cn70xx cn70xxp1;
 687        struct cvmx_pcsx_miscx_ctl_reg_s cnf71xx;
 688};
 689
 690typedef union cvmx_pcsx_miscx_ctl_reg cvmx_pcsx_miscx_ctl_reg_t;
 691
 692/**
 693 * cvmx_pcs#_mr#_control_reg
 694 *
 695 * NOTE:
 696 * Whenever AN_EN bit[12] is set, Auto negotiation is allowed to happen. The results
 697 * of the auto negotiation process set the fields in the AN_RESULTS reg. When AN_EN is not set,
 698 * AN_RESULTS reg is don't care. The effective SPD, DUP etc.. get their values
 699 * from the pcs_mr_ctrl reg.
 700 */
 701union cvmx_pcsx_mrx_control_reg {
 702        u64 u64;
 703        struct cvmx_pcsx_mrx_control_reg_s {
 704                u64 reserved_16_63 : 48;
 705                u64 reset : 1;
 706                u64 loopbck1 : 1;
 707                u64 spdlsb : 1;
 708                u64 an_en : 1;
 709                u64 pwr_dn : 1;
 710                u64 reserved_10_10 : 1;
 711                u64 rst_an : 1;
 712                u64 dup : 1;
 713                u64 coltst : 1;
 714                u64 spdmsb : 1;
 715                u64 uni : 1;
 716                u64 reserved_0_4 : 5;
 717        } s;
 718        struct cvmx_pcsx_mrx_control_reg_s cn52xx;
 719        struct cvmx_pcsx_mrx_control_reg_s cn52xxp1;
 720        struct cvmx_pcsx_mrx_control_reg_s cn56xx;
 721        struct cvmx_pcsx_mrx_control_reg_s cn56xxp1;
 722        struct cvmx_pcsx_mrx_control_reg_s cn61xx;
 723        struct cvmx_pcsx_mrx_control_reg_s cn63xx;
 724        struct cvmx_pcsx_mrx_control_reg_s cn63xxp1;
 725        struct cvmx_pcsx_mrx_control_reg_s cn66xx;
 726        struct cvmx_pcsx_mrx_control_reg_s cn68xx;
 727        struct cvmx_pcsx_mrx_control_reg_s cn68xxp1;
 728        struct cvmx_pcsx_mrx_control_reg_s cn70xx;
 729        struct cvmx_pcsx_mrx_control_reg_s cn70xxp1;
 730        struct cvmx_pcsx_mrx_control_reg_s cnf71xx;
 731};
 732
 733typedef union cvmx_pcsx_mrx_control_reg cvmx_pcsx_mrx_control_reg_t;
 734
 735/**
 736 * cvmx_pcs#_mr#_status_reg
 737 *
 738 * Bits [15:9] in the Status Register indicate ability to operate as per those signalling
 739 * specification,
 740 * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0,
 741 * indicating
 742 * that the chip cannot operate in the corresponding modes.
 743 * Bit [4] RM_FLT is a don't care when the selected mode is SGMII.
 744 */
 745union cvmx_pcsx_mrx_status_reg {
 746        u64 u64;
 747        struct cvmx_pcsx_mrx_status_reg_s {
 748                u64 reserved_16_63 : 48;
 749                u64 hun_t4 : 1;
 750                u64 hun_xfd : 1;
 751                u64 hun_xhd : 1;
 752                u64 ten_fd : 1;
 753                u64 ten_hd : 1;
 754                u64 hun_t2fd : 1;
 755                u64 hun_t2hd : 1;
 756                u64 ext_st : 1;
 757                u64 reserved_7_7 : 1;
 758                u64 prb_sup : 1;
 759                u64 an_cpt : 1;
 760                u64 rm_flt : 1;
 761                u64 an_abil : 1;
 762                u64 lnk_st : 1;
 763                u64 reserved_1_1 : 1;
 764                u64 extnd : 1;
 765        } s;
 766        struct cvmx_pcsx_mrx_status_reg_s cn52xx;
 767        struct cvmx_pcsx_mrx_status_reg_s cn52xxp1;
 768        struct cvmx_pcsx_mrx_status_reg_s cn56xx;
 769        struct cvmx_pcsx_mrx_status_reg_s cn56xxp1;
 770        struct cvmx_pcsx_mrx_status_reg_s cn61xx;
 771        struct cvmx_pcsx_mrx_status_reg_s cn63xx;
 772        struct cvmx_pcsx_mrx_status_reg_s cn63xxp1;
 773        struct cvmx_pcsx_mrx_status_reg_s cn66xx;
 774        struct cvmx_pcsx_mrx_status_reg_s cn68xx;
 775        struct cvmx_pcsx_mrx_status_reg_s cn68xxp1;
 776        struct cvmx_pcsx_mrx_status_reg_s cn70xx;
 777        struct cvmx_pcsx_mrx_status_reg_s cn70xxp1;
 778        struct cvmx_pcsx_mrx_status_reg_s cnf71xx;
 779};
 780
 781typedef union cvmx_pcsx_mrx_status_reg cvmx_pcsx_mrx_status_reg_t;
 782
 783/**
 784 * cvmx_pcs#_rx#_states_reg
 785 *
 786 * PCS_RX_STATES_REG = RX State Machines states register
 787 *
 788 */
 789union cvmx_pcsx_rxx_states_reg {
 790        u64 u64;
 791        struct cvmx_pcsx_rxx_states_reg_s {
 792                u64 reserved_16_63 : 48;
 793                u64 rx_bad : 1;
 794                u64 rx_st : 5;
 795                u64 sync_bad : 1;
 796                u64 sync : 4;
 797                u64 an_bad : 1;
 798                u64 an_st : 4;
 799        } s;
 800        struct cvmx_pcsx_rxx_states_reg_s cn52xx;
 801        struct cvmx_pcsx_rxx_states_reg_s cn52xxp1;
 802        struct cvmx_pcsx_rxx_states_reg_s cn56xx;
 803        struct cvmx_pcsx_rxx_states_reg_s cn56xxp1;
 804        struct cvmx_pcsx_rxx_states_reg_s cn61xx;
 805        struct cvmx_pcsx_rxx_states_reg_s cn63xx;
 806        struct cvmx_pcsx_rxx_states_reg_s cn63xxp1;
 807        struct cvmx_pcsx_rxx_states_reg_s cn66xx;
 808        struct cvmx_pcsx_rxx_states_reg_s cn68xx;
 809        struct cvmx_pcsx_rxx_states_reg_s cn68xxp1;
 810        struct cvmx_pcsx_rxx_states_reg_s cn70xx;
 811        struct cvmx_pcsx_rxx_states_reg_s cn70xxp1;
 812        struct cvmx_pcsx_rxx_states_reg_s cnf71xx;
 813};
 814
 815typedef union cvmx_pcsx_rxx_states_reg cvmx_pcsx_rxx_states_reg_t;
 816
 817/**
 818 * cvmx_pcs#_rx#_sync_reg
 819 *
 820 * Note:
 821 * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after code grp synchronization is achieved.
 822 *
 823 *
 824 *  PCS_RX_SYNC_REG = Code Group synchronization reg
 825 */
 826union cvmx_pcsx_rxx_sync_reg {
 827        u64 u64;
 828        struct cvmx_pcsx_rxx_sync_reg_s {
 829                u64 reserved_2_63 : 62;
 830                u64 sync : 1;
 831                u64 bit_lock : 1;
 832        } s;
 833        struct cvmx_pcsx_rxx_sync_reg_s cn52xx;
 834        struct cvmx_pcsx_rxx_sync_reg_s cn52xxp1;
 835        struct cvmx_pcsx_rxx_sync_reg_s cn56xx;
 836        struct cvmx_pcsx_rxx_sync_reg_s cn56xxp1;
 837        struct cvmx_pcsx_rxx_sync_reg_s cn61xx;
 838        struct cvmx_pcsx_rxx_sync_reg_s cn63xx;
 839        struct cvmx_pcsx_rxx_sync_reg_s cn63xxp1;
 840        struct cvmx_pcsx_rxx_sync_reg_s cn66xx;
 841        struct cvmx_pcsx_rxx_sync_reg_s cn68xx;
 842        struct cvmx_pcsx_rxx_sync_reg_s cn68xxp1;
 843        struct cvmx_pcsx_rxx_sync_reg_s cn70xx;
 844        struct cvmx_pcsx_rxx_sync_reg_s cn70xxp1;
 845        struct cvmx_pcsx_rxx_sync_reg_s cnf71xx;
 846};
 847
 848typedef union cvmx_pcsx_rxx_sync_reg cvmx_pcsx_rxx_sync_reg_t;
 849
 850/**
 851 * cvmx_pcs#_serdes_crdt_cnt#_reg
 852 *
 853 * PCS SERDES Credit Count
 854 *
 855 */
 856union cvmx_pcsx_serdes_crdt_cntx_reg {
 857        u64 u64;
 858        struct cvmx_pcsx_serdes_crdt_cntx_reg_s {
 859                u64 reserved_5_63 : 59;
 860                u64 cnt : 5;
 861        } s;
 862        struct cvmx_pcsx_serdes_crdt_cntx_reg_s cn70xx;
 863        struct cvmx_pcsx_serdes_crdt_cntx_reg_s cn70xxp1;
 864};
 865
 866typedef union cvmx_pcsx_serdes_crdt_cntx_reg cvmx_pcsx_serdes_crdt_cntx_reg_t;
 867
 868/**
 869 * cvmx_pcs#_sgm#_an_adv_reg
 870 *
 871 * SGMII AN Advertisement Register (sent out as tx_config_reg)
 872 * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the
 873 * MAC_PHY mode bit in misc_ctl_reg
 874 * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit
 875 * and [0] is always 1.
 876 * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
 877 */
 878union cvmx_pcsx_sgmx_an_adv_reg {
 879        u64 u64;
 880        struct cvmx_pcsx_sgmx_an_adv_reg_s {
 881                u64 reserved_16_63 : 48;
 882                u64 link : 1;
 883                u64 ack : 1;
 884                u64 reserved_13_13 : 1;
 885                u64 dup : 1;
 886                u64 speed : 2;
 887                u64 reserved_1_9 : 9;
 888                u64 one : 1;
 889        } s;
 890        struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xx;
 891        struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xxp1;
 892        struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xx;
 893        struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xxp1;
 894        struct cvmx_pcsx_sgmx_an_adv_reg_s cn61xx;
 895        struct cvmx_pcsx_sgmx_an_adv_reg_s cn63xx;
 896        struct cvmx_pcsx_sgmx_an_adv_reg_s cn63xxp1;
 897        struct cvmx_pcsx_sgmx_an_adv_reg_s cn66xx;
 898        struct cvmx_pcsx_sgmx_an_adv_reg_s cn68xx;
 899        struct cvmx_pcsx_sgmx_an_adv_reg_s cn68xxp1;
 900        struct cvmx_pcsx_sgmx_an_adv_reg_s cn70xx;
 901        struct cvmx_pcsx_sgmx_an_adv_reg_s cn70xxp1;
 902        struct cvmx_pcsx_sgmx_an_adv_reg_s cnf71xx;
 903};
 904
 905typedef union cvmx_pcsx_sgmx_an_adv_reg cvmx_pcsx_sgmx_an_adv_reg_t;
 906
 907/**
 908 * cvmx_pcs#_sgm#_lp_adv_reg
 909 *
 910 * SGMII LP Advertisement Register (received as rx_config_reg)
 911 *
 912 */
 913union cvmx_pcsx_sgmx_lp_adv_reg {
 914        u64 u64;
 915        struct cvmx_pcsx_sgmx_lp_adv_reg_s {
 916                u64 reserved_16_63 : 48;
 917                u64 link : 1;
 918                u64 reserved_13_14 : 2;
 919                u64 dup : 1;
 920                u64 speed : 2;
 921                u64 reserved_1_9 : 9;
 922                u64 one : 1;
 923        } s;
 924        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xx;
 925        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xxp1;
 926        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xx;
 927        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xxp1;
 928        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn61xx;
 929        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn63xx;
 930        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn63xxp1;
 931        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn66xx;
 932        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn68xx;
 933        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn68xxp1;
 934        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn70xx;
 935        struct cvmx_pcsx_sgmx_lp_adv_reg_s cn70xxp1;
 936        struct cvmx_pcsx_sgmx_lp_adv_reg_s cnf71xx;
 937};
 938
 939typedef union cvmx_pcsx_sgmx_lp_adv_reg cvmx_pcsx_sgmx_lp_adv_reg_t;
 940
 941/**
 942 * cvmx_pcs#_tx#_states_reg
 943 *
 944 * PCS_TX_STATES_REG = TX State Machines states register
 945 *
 946 */
 947union cvmx_pcsx_txx_states_reg {
 948        u64 u64;
 949        struct cvmx_pcsx_txx_states_reg_s {
 950                u64 reserved_7_63 : 57;
 951                u64 xmit : 2;
 952                u64 tx_bad : 1;
 953                u64 ord_st : 4;
 954        } s;
 955        struct cvmx_pcsx_txx_states_reg_s cn52xx;
 956        struct cvmx_pcsx_txx_states_reg_s cn52xxp1;
 957        struct cvmx_pcsx_txx_states_reg_s cn56xx;
 958        struct cvmx_pcsx_txx_states_reg_s cn56xxp1;
 959        struct cvmx_pcsx_txx_states_reg_s cn61xx;
 960        struct cvmx_pcsx_txx_states_reg_s cn63xx;
 961        struct cvmx_pcsx_txx_states_reg_s cn63xxp1;
 962        struct cvmx_pcsx_txx_states_reg_s cn66xx;
 963        struct cvmx_pcsx_txx_states_reg_s cn68xx;
 964        struct cvmx_pcsx_txx_states_reg_s cn68xxp1;
 965        struct cvmx_pcsx_txx_states_reg_s cn70xx;
 966        struct cvmx_pcsx_txx_states_reg_s cn70xxp1;
 967        struct cvmx_pcsx_txx_states_reg_s cnf71xx;
 968};
 969
 970typedef union cvmx_pcsx_txx_states_reg cvmx_pcsx_txx_states_reg_t;
 971
 972/**
 973 * cvmx_pcs#_tx_rx#_polarity_reg
 974 *
 975 * Note:
 976 * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after
 977 * code grp synchronization is achieved.
 978 */
 979union cvmx_pcsx_tx_rxx_polarity_reg {
 980        u64 u64;
 981        struct cvmx_pcsx_tx_rxx_polarity_reg_s {
 982                u64 reserved_4_63 : 60;
 983                u64 rxovrd : 1;
 984                u64 autorxpl : 1;
 985                u64 rxplrt : 1;
 986                u64 txplrt : 1;
 987        } s;
 988        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xx;
 989        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xxp1;
 990        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xx;
 991        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xxp1;
 992        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn61xx;
 993        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn63xx;
 994        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn63xxp1;
 995        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn66xx;
 996        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn68xx;
 997        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn68xxp1;
 998        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn70xx;
 999        struct cvmx_pcsx_tx_rxx_polarity_reg_s cn70xxp1;
1000        struct cvmx_pcsx_tx_rxx_polarity_reg_s cnf71xx;
1001};
1002
1003typedef union cvmx_pcsx_tx_rxx_polarity_reg cvmx_pcsx_tx_rxx_polarity_reg_t;
1004
1005#endif
1006