linux/drivers/crypto/cavium/nitrox/nitrox_csr.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __NITROX_CSR_H
   3#define __NITROX_CSR_H
   4
   5#include <asm/byteorder.h>
   6#include <linux/types.h>
   7
   8/* EMU clusters */
   9#define NR_CLUSTERS             4
  10#define AE_CORES_PER_CLUSTER    20
  11#define SE_CORES_PER_CLUSTER    16
  12
  13/* BIST registers */
  14#define EMU_BIST_STATUSX(_i)    (0x1402700 + ((_i) * 0x40000))
  15#define UCD_BIST_STATUS         0x12C0070
  16#define NPS_CORE_BIST_REG       0x10000E8
  17#define NPS_CORE_NPC_BIST_REG   0x1000128
  18#define NPS_PKT_SLC_BIST_REG    0x1040088
  19#define NPS_PKT_IN_BIST_REG     0x1040100
  20#define POM_BIST_REG            0x11C0100
  21#define BMI_BIST_REG            0x1140080
  22#define EFL_CORE_BIST_REGX(_i)  (0x1240100 + ((_i) * 0x400))
  23#define EFL_TOP_BIST_STAT       0x1241090
  24#define BMO_BIST_REG            0x1180080
  25#define LBC_BIST_STATUS         0x1200020
  26#define PEM_BIST_STATUSX(_i)    (0x1080468 | ((_i) << 18))
  27
  28/* EMU registers */
  29#define EMU_SE_ENABLEX(_i)      (0x1400000 + ((_i) * 0x40000))
  30#define EMU_AE_ENABLEX(_i)      (0x1400008 + ((_i) * 0x40000))
  31#define EMU_WD_INT_ENA_W1SX(_i) (0x1402318 + ((_i) * 0x40000))
  32#define EMU_GE_INT_ENA_W1SX(_i) (0x1402518 + ((_i) * 0x40000))
  33#define EMU_FUSE_MAPX(_i)       (0x1402708 + ((_i) * 0x40000))
  34
  35/* UCD registers */
  36#define UCD_UCODE_LOAD_BLOCK_NUM        0x12C0010
  37#define UCD_UCODE_LOAD_IDX_DATAX(_i)    (0x12C0018 + ((_i) * 0x20))
  38#define UCD_SE_EID_UCODE_BLOCK_NUMX(_i) (0x12C0000 + ((_i) * 0x1000))
  39
  40/* NPS core registers */
  41#define NPS_CORE_GBL_VFCFG      0x1000000
  42#define NPS_CORE_CONTROL        0x1000008
  43#define NPS_CORE_INT_ACTIVE     0x1000080
  44#define NPS_CORE_INT            0x10000A0
  45#define NPS_CORE_INT_ENA_W1S    0x10000B8
  46#define NPS_STATS_PKT_DMA_RD_CNT        0x1000180
  47#define NPS_STATS_PKT_DMA_WR_CNT        0x1000190
  48
  49/* NPS packet registers */
  50#define NPS_PKT_INT                             0x1040018
  51#define NPS_PKT_IN_RERR_HI              0x1040108
  52#define NPS_PKT_IN_RERR_HI_ENA_W1S      0x1040120
  53#define NPS_PKT_IN_RERR_LO              0x1040128
  54#define NPS_PKT_IN_RERR_LO_ENA_W1S      0x1040140
  55#define NPS_PKT_IN_ERR_TYPE             0x1040148
  56#define NPS_PKT_IN_ERR_TYPE_ENA_W1S     0x1040160
  57#define NPS_PKT_IN_INSTR_CTLX(_i)       (0x10060 + ((_i) * 0x40000))
  58#define NPS_PKT_IN_INSTR_BADDRX(_i)     (0x10068 + ((_i) * 0x40000))
  59#define NPS_PKT_IN_INSTR_RSIZEX(_i)     (0x10070 + ((_i) * 0x40000))
  60#define NPS_PKT_IN_DONE_CNTSX(_i)       (0x10080 + ((_i) * 0x40000))
  61#define NPS_PKT_IN_INSTR_BAOFF_DBELLX(_i)       (0x10078 + ((_i) * 0x40000))
  62#define NPS_PKT_IN_INT_LEVELSX(_i)              (0x10088 + ((_i) * 0x40000))
  63
  64#define NPS_PKT_SLC_RERR_HI             0x1040208
  65#define NPS_PKT_SLC_RERR_HI_ENA_W1S     0x1040220
  66#define NPS_PKT_SLC_RERR_LO             0x1040228
  67#define NPS_PKT_SLC_RERR_LO_ENA_W1S     0x1040240
  68#define NPS_PKT_SLC_ERR_TYPE            0x1040248
  69#define NPS_PKT_SLC_ERR_TYPE_ENA_W1S    0x1040260
  70#define NPS_PKT_SLC_CTLX(_i)            (0x10000 + ((_i) * 0x40000))
  71#define NPS_PKT_SLC_CNTSX(_i)           (0x10008 + ((_i) * 0x40000))
  72#define NPS_PKT_SLC_INT_LEVELSX(_i)     (0x10010 + ((_i) * 0x40000))
  73
  74/* POM registers */
  75#define POM_INT_ENA_W1S         0x11C0018
  76#define POM_GRP_EXECMASKX(_i)   (0x11C1100 | ((_i) * 8))
  77#define POM_INT         0x11C0000
  78#define POM_PERF_CTL    0x11CC400
  79
  80/* BMI registers */
  81#define BMI_INT         0x1140000
  82#define BMI_CTL         0x1140020
  83#define BMI_INT_ENA_W1S 0x1140018
  84#define BMI_NPS_PKT_CNT 0x1140070
  85
  86/* EFL registers */
  87#define EFL_CORE_INT_ENA_W1SX(_i)               (0x1240018 + ((_i) * 0x400))
  88#define EFL_CORE_VF_ERR_INT0X(_i)               (0x1240050 + ((_i) * 0x400))
  89#define EFL_CORE_VF_ERR_INT0_ENA_W1SX(_i)       (0x1240068 + ((_i) * 0x400))
  90#define EFL_CORE_VF_ERR_INT1X(_i)               (0x1240070 + ((_i) * 0x400))
  91#define EFL_CORE_VF_ERR_INT1_ENA_W1SX(_i)       (0x1240088 + ((_i) * 0x400))
  92#define EFL_CORE_SE_ERR_INTX(_i)                (0x12400A0 + ((_i) * 0x400))
  93#define EFL_RNM_CTL_STATUS                      0x1241800
  94#define EFL_CORE_INTX(_i)                       (0x1240000 + ((_i) * 0x400))
  95
  96/* BMO registers */
  97#define BMO_CTL2                0x1180028
  98#define BMO_NPS_SLC_PKT_CNT     0x1180078
  99
 100/* LBC registers */
 101#define LBC_INT                 0x1200000
 102#define LBC_INVAL_CTL           0x1201010
 103#define LBC_PLM_VF1_64_INT      0x1202008
 104#define LBC_INVAL_STATUS        0x1202010
 105#define LBC_INT_ENA_W1S         0x1203000
 106#define LBC_PLM_VF1_64_INT_ENA_W1S      0x1205008
 107#define LBC_PLM_VF65_128_INT            0x1206008
 108#define LBC_ELM_VF1_64_INT              0x1208000
 109#define LBC_PLM_VF65_128_INT_ENA_W1S    0x1209008
 110#define LBC_ELM_VF1_64_INT_ENA_W1S      0x120B000
 111#define LBC_ELM_VF65_128_INT            0x120C000
 112#define LBC_ELM_VF65_128_INT_ENA_W1S    0x120F000
 113
 114/* PEM registers */
 115#define PEM0_INT 0x1080428
 116
 117/**
 118 * struct emu_fuse_map - EMU Fuse Map Registers
 119 * @ae_fuse: Fuse settings for AE 19..0
 120 * @se_fuse: Fuse settings for SE 15..0
 121 *
 122 * A set bit indicates the unit is fuse disabled.
 123 */
 124union emu_fuse_map {
 125        u64 value;
 126        struct {
 127#if (defined(__BIG_ENDIAN_BITFIELD))
 128                u64 valid : 1;
 129                u64 raz_52_62 : 11;
 130                u64 ae_fuse : 20;
 131                u64 raz_16_31 : 16;
 132                u64 se_fuse : 16;
 133#else
 134                u64 se_fuse : 16;
 135                u64 raz_16_31 : 16;
 136                u64 ae_fuse : 20;
 137                u64 raz_52_62 : 11;
 138                u64 valid : 1;
 139#endif
 140        } s;
 141};
 142
 143/**
 144 * struct emu_se_enable - Symmetric Engine Enable Registers
 145 * @enable: Individual enables for each of the clusters
 146 *   16 symmetric engines.
 147 */
 148union emu_se_enable {
 149        u64 value;
 150        struct {
 151#if (defined(__BIG_ENDIAN_BITFIELD))
 152                u64 raz : 48;
 153                u64 enable : 16;
 154#else
 155                u64 enable : 16;
 156                u64 raz : 48;
 157#endif
 158        } s;
 159};
 160
 161/**
 162 * struct emu_ae_enable - EMU Asymmetric engines.
 163 * @enable: Individual enables for each of the cluster's
 164 *   20 Asymmetric Engines.
 165 */
 166union emu_ae_enable {
 167        u64 value;
 168        struct {
 169#if (defined(__BIG_ENDIAN_BITFIELD))
 170                u64 raz : 44;
 171                u64 enable : 20;
 172#else
 173                u64 enable : 20;
 174                u64 raz : 44;
 175#endif
 176        } s;
 177};
 178
 179/**
 180 * struct emu_wd_int_ena_w1s - EMU Interrupt Enable Registers
 181 * @ae_wd: Reads or sets enable for EMU(0..3)_WD_INT[AE_WD]
 182 * @se_wd: Reads or sets enable for EMU(0..3)_WD_INT[SE_WD]
 183 */
 184union emu_wd_int_ena_w1s {
 185        u64 value;
 186        struct {
 187#if (defined(__BIG_ENDIAN_BITFIELD))
 188                u64 raz2 : 12;
 189                u64 ae_wd : 20;
 190                u64 raz1 : 16;
 191                u64 se_wd : 16;
 192#else
 193                u64 se_wd : 16;
 194                u64 raz1 : 16;
 195                u64 ae_wd : 20;
 196                u64 raz2 : 12;
 197#endif
 198        } s;
 199};
 200
 201/**
 202 * struct emu_ge_int_ena_w1s - EMU Interrupt Enable set registers
 203 * @ae_ge: Reads or sets enable for EMU(0..3)_GE_INT[AE_GE]
 204 * @se_ge: Reads or sets enable for EMU(0..3)_GE_INT[SE_GE]
 205 */
 206union emu_ge_int_ena_w1s {
 207        u64 value;
 208        struct {
 209#if (defined(__BIG_ENDIAN_BITFIELD))
 210                u64 raz_52_63 : 12;
 211                u64 ae_ge : 20;
 212                u64 raz_16_31: 16;
 213                u64 se_ge : 16;
 214#else
 215                u64 se_ge : 16;
 216                u64 raz_16_31: 16;
 217                u64 ae_ge : 20;
 218                u64 raz_52_63 : 12;
 219#endif
 220        } s;
 221};
 222
 223/**
 224 * struct nps_pkt_slc_ctl - Solicited Packet Out Control Registers
 225 * @rh: Indicates whether to remove or include the response header
 226 *   1 = Include, 0 = Remove
 227 * @z: If set, 8 trailing 0x00 bytes will be added to the end of the
 228 *   outgoing packet.
 229 * @enb: Enable for this port.
 230 */
 231union nps_pkt_slc_ctl {
 232        u64 value;
 233        struct {
 234#if defined(__BIG_ENDIAN_BITFIELD)
 235                u64 raz : 61;
 236                u64 rh : 1;
 237                u64 z : 1;
 238                u64 enb : 1;
 239#else
 240                u64 enb : 1;
 241                u64 z : 1;
 242                u64 rh : 1;
 243                u64 raz : 61;
 244#endif
 245        } s;
 246};
 247
 248/**
 249 * struct nps_pkt_slc_cnts - Solicited Packet Out Count Registers
 250 * @slc_int: Returns a 1 when:
 251 *   NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT], or
 252 *   NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SLC(i)_INT_LEVELS[TIMET].
 253 *   To clear the bit, the CNTS register must be written to clear.
 254 * @in_int: Returns a 1 when:
 255 *   NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT].
 256 *   To clear the bit, the DONE_CNTS register must be written to clear.
 257 * @mbox_int: Returns a 1 when:
 258 *   NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set. To clear the bit,
 259 *   write NPS_PKT_MBOX_PF_VF(i)_INT[INTR] with 1.
 260 * @timer: Timer, incremented every 2048 coprocessor clock cycles
 261 *   when [CNT] is not zero. The hardware clears both [TIMER] and
 262 *   [INT] when [CNT] goes to 0.
 263 * @cnt: Packet counter. Hardware adds to [CNT] as it sends packets out.
 264 *   On a write to this CSR, hardware subtracts the amount written to the
 265 *   [CNT] field from [CNT].
 266 */
 267union nps_pkt_slc_cnts {
 268        u64 value;
 269        struct {
 270#if defined(__BIG_ENDIAN_BITFIELD)
 271                u64 slc_int : 1;
 272                u64 uns_int : 1;
 273                u64 in_int : 1;
 274                u64 mbox_int : 1;
 275                u64 resend : 1;
 276                u64 raz : 5;
 277                u64 timer : 22;
 278                u64 cnt : 32;
 279#else
 280                u64 cnt : 32;
 281                u64 timer : 22;
 282                u64 raz : 5;
 283                u64 resend : 1;
 284                u64 mbox_int : 1;
 285                u64 in_int : 1;
 286                u64 uns_int : 1;
 287                u64 slc_int : 1;
 288#endif
 289        } s;
 290};
 291
 292/**
 293 * struct nps_pkt_slc_int_levels - Solicited Packet Out Interrupt Levels
 294 *   Registers.
 295 * @bmode: Determines whether NPS_PKT_SLC_CNTS[CNT] is a byte or
 296 *   packet counter.
 297 * @timet: Output port counter time interrupt threshold.
 298 * @cnt: Output port counter interrupt threshold.
 299 */
 300union nps_pkt_slc_int_levels {
 301        u64 value;
 302        struct {
 303#if defined(__BIG_ENDIAN_BITFIELD)
 304                u64 bmode : 1;
 305                u64 raz : 9;
 306                u64 timet : 22;
 307                u64 cnt : 32;
 308#else
 309                u64 cnt : 32;
 310                u64 timet : 22;
 311                u64 raz : 9;
 312                u64 bmode : 1;
 313#endif
 314        } s;
 315};
 316
 317/**
 318 * struct nps_pkt_inst - NPS Packet Interrupt Register
 319 * @in_err: Set when any NPS_PKT_IN_RERR_HI/LO bit and
 320 *    corresponding NPS_PKT_IN_RERR_*_ENA_* bit are bot set.
 321 * @uns_err: Set when any NSP_PKT_UNS_RERR_HI/LO bit and
 322 *    corresponding NPS_PKT_UNS_RERR_*_ENA_* bit are both set.
 323 * @slc_er: Set when any NSP_PKT_SLC_RERR_HI/LO bit and
 324 *    corresponding NPS_PKT_SLC_RERR_*_ENA_* bit are both set.
 325 */
 326union nps_pkt_int {
 327        u64 value;
 328        struct {
 329#if defined(__BIG_ENDIAN_BITFIELD)
 330                u64 raz : 54;
 331                u64 uns_wto : 1;
 332                u64 in_err : 1;
 333                u64 uns_err : 1;
 334                u64 slc_err : 1;
 335                u64 in_dbe : 1;
 336                u64 in_sbe : 1;
 337                u64 uns_dbe : 1;
 338                u64 uns_sbe : 1;
 339                u64 slc_dbe : 1;
 340                u64 slc_sbe : 1;
 341#else
 342                u64 slc_sbe : 1;
 343                u64 slc_dbe : 1;
 344                u64 uns_sbe : 1;
 345                u64 uns_dbe : 1;
 346                u64 in_sbe : 1;
 347                u64 in_dbe : 1;
 348                u64 slc_err : 1;
 349                u64 uns_err : 1;
 350                u64 in_err : 1;
 351                u64 uns_wto : 1;
 352                u64 raz : 54;
 353#endif
 354        } s;
 355};
 356
 357/**
 358 * struct nps_pkt_in_done_cnts - Input instruction ring counts registers
 359 * @slc_cnt: Returns a 1 when:
 360 *    NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT], or
 361 *    NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SCL(i)_INT_LEVELS[TIMET]
 362 *    To clear the bit, the CNTS register must be
 363 *    written to clear the underlying condition
 364 * @uns_int: Return a 1 when:
 365 *    NPS_PKT_UNS(i)_CNTS[CNT] > NPS_PKT_UNS(i)_INT_LEVELS[CNT], or
 366 *    NPS_PKT_UNS(i)_CNTS[TIMER] > NPS_PKT_UNS(i)_INT_LEVELS[TIMET]
 367 *    To clear the bit, the CNTS register must be
 368 *    written to clear the underlying condition
 369 * @in_int: Returns a 1 when:
 370 *    NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT]
 371 *    To clear the bit, the DONE_CNTS register
 372 *    must be written to clear the underlying condition
 373 * @mbox_int: Returns a 1 when:
 374 *    NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set.
 375 *    To clear the bit, write NPS_PKT_MBOX_PF_VF(i)_INT[INTR]
 376 *    with 1.
 377 * @resend: A write of 1 will resend an MSI-X interrupt message if any
 378 *    of the following conditions are true for this ring "i".
 379 *    NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT]
 380 *    NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SLC(i)_INT_LEVELS[TIMET]
 381 *    NPS_PKT_UNS(i)_CNTS[CNT] > NPS_PKT_UNS(i)_INT_LEVELS[CNT]
 382 *    NPS_PKT_UNS(i)_CNTS[TIMER] > NPS_PKT_UNS(i)_INT_LEVELS[TIMET]
 383 *    NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT]
 384 *    NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set
 385 * @cnt: Packet counter. Hardware adds to [CNT] as it reads
 386 *    packets. On a write to this CSR, hardware substracts the
 387 *    amount written to the [CNT] field from [CNT], which will
 388 *    clear PKT_IN(i)_INT_STATUS[INTR] if [CNT] becomes <=
 389 *    NPS_PKT_IN(i)_INT_LEVELS[CNT]. This register should be
 390 *    cleared before enabling a ring by reading the current
 391 *    value and writing it back.
 392 */
 393union nps_pkt_in_done_cnts {
 394        u64 value;
 395        struct {
 396#if defined(__BIG_ENDIAN_BITFIELD)
 397                u64 slc_int : 1;
 398                u64 uns_int : 1;
 399                u64 in_int : 1;
 400                u64 mbox_int : 1;
 401                u64 resend : 1;
 402                u64 raz : 27;
 403                u64 cnt : 32;
 404#else
 405                u64 cnt : 32;
 406                u64 raz : 27;
 407                u64 resend : 1;
 408                u64 mbox_int : 1;
 409                u64 in_int : 1;
 410                u64 uns_int : 1;
 411                u64 slc_int : 1;
 412#endif
 413        } s;
 414};
 415
 416/**
 417 * struct nps_pkt_in_instr_ctl - Input Instruction Ring Control Registers.
 418 * @is64b: If 1, the ring uses 64-byte instructions. If 0, the
 419 *   ring uses 32-byte instructions.
 420 * @enb: Enable for the input ring.
 421 */
 422union nps_pkt_in_instr_ctl {
 423        u64 value;
 424        struct {
 425#if (defined(__BIG_ENDIAN_BITFIELD))
 426                u64 raz : 62;
 427                u64 is64b : 1;
 428                u64 enb : 1;
 429#else
 430                u64 enb : 1;
 431                u64 is64b : 1;
 432                u64 raz : 62;
 433#endif
 434        } s;
 435};
 436
 437/**
 438 * struct nps_pkt_in_instr_rsize - Input instruction ring size registers
 439 * @rsize: Ring size (number of instructions)
 440 */
 441union nps_pkt_in_instr_rsize {
 442        u64 value;
 443        struct {
 444#if (defined(__BIG_ENDIAN_BITFIELD))
 445                u64 raz : 32;
 446                u64 rsize : 32;
 447#else
 448                u64 rsize : 32;
 449                u64 raz : 32;
 450#endif
 451        } s;
 452};
 453
 454/**
 455 * struct nps_pkt_in_instr_baoff_dbell - Input instruction ring
 456 *   base address offset and doorbell registers
 457 * @aoff: Address offset. The offset from the NPS_PKT_IN_INSTR_BADDR
 458 *   where the next pointer is read.
 459 * @dbell: Pointer list doorbell count. Write operations to this field
 460 *   increments the present value here. Read operations return the
 461 *   present value.
 462 */
 463union nps_pkt_in_instr_baoff_dbell {
 464        u64 value;
 465        struct {
 466#if (defined(__BIG_ENDIAN_BITFIELD))
 467                u64 aoff : 32;
 468                u64 dbell : 32;
 469#else
 470                u64 dbell : 32;
 471                u64 aoff : 32;
 472#endif
 473        } s;
 474};
 475
 476/**
 477 * struct nps_core_int_ena_w1s - NPS core interrupt enable set register
 478 * @host_nps_wr_err: Reads or sets enable for
 479 *   NPS_CORE_INT[HOST_NPS_WR_ERR].
 480 * @npco_dma_malform: Reads or sets enable for
 481 *   NPS_CORE_INT[NPCO_DMA_MALFORM].
 482 * @exec_wr_timeout: Reads or sets enable for
 483 *   NPS_CORE_INT[EXEC_WR_TIMEOUT].
 484 * @host_wr_timeout: Reads or sets enable for
 485 *   NPS_CORE_INT[HOST_WR_TIMEOUT].
 486 * @host_wr_err: Reads or sets enable for
 487 *   NPS_CORE_INT[HOST_WR_ERR]
 488 */
 489union nps_core_int_ena_w1s {
 490        u64 value;
 491        struct {
 492#if (defined(__BIG_ENDIAN_BITFIELD))
 493                u64 raz4 : 55;
 494                u64 host_nps_wr_err : 1;
 495                u64 npco_dma_malform : 1;
 496                u64 exec_wr_timeout : 1;
 497                u64 host_wr_timeout : 1;
 498                u64 host_wr_err : 1;
 499                u64 raz3 : 1;
 500                u64 raz2 : 1;
 501                u64 raz1 : 1;
 502                u64 raz0 : 1;
 503#else
 504                u64 raz0 : 1;
 505                u64 raz1 : 1;
 506                u64 raz2 : 1;
 507                u64 raz3 : 1;
 508                u64 host_wr_err : 1;
 509                u64 host_wr_timeout : 1;
 510                u64 exec_wr_timeout : 1;
 511                u64 npco_dma_malform : 1;
 512                u64 host_nps_wr_err : 1;
 513                u64 raz4 : 55;
 514#endif
 515        } s;
 516};
 517
 518/**
 519 * struct nps_core_gbl_vfcfg - Global VF Configuration Register.
 520 * @ilk_disable: When set, this bit indicates that the ILK interface has
 521 *    been disabled.
 522 * @obaf: BMO allocation control
 523 *    0 = allocate per queue
 524 *    1 = allocate per VF
 525 * @ibaf: BMI allocation control
 526 *    0 = allocate per queue
 527 *    1 = allocate per VF
 528 * @zaf: ZIP allocation control
 529 *    0 = allocate per queue
 530 *    1 = allocate per VF
 531 * @aeaf: AE allocation control
 532 *    0 = allocate per queue
 533 *    1 = allocate per VF
 534 * @seaf: SE allocation control
 535 *    0 = allocation per queue
 536 *    1 = allocate per VF
 537 * @cfg: VF/PF mode.
 538 */
 539union nps_core_gbl_vfcfg {
 540        u64 value;
 541        struct {
 542#if (defined(__BIG_ENDIAN_BITFIELD))
 543                u64  raz :55;
 544                u64  ilk_disable :1;
 545                u64  obaf :1;
 546                u64  ibaf :1;
 547                u64  zaf :1;
 548                u64  aeaf :1;
 549                u64  seaf :1;
 550                u64  cfg :3;
 551#else
 552                u64  cfg :3;
 553                u64  seaf :1;
 554                u64  aeaf :1;
 555                u64  zaf :1;
 556                u64  ibaf :1;
 557                u64  obaf :1;
 558                u64  ilk_disable :1;
 559                u64  raz :55;
 560#endif
 561        } s;
 562};
 563
 564/**
 565 * struct nps_core_int_active - NPS Core Interrupt Active Register
 566 * @resend: Resend MSI-X interrupt if needs to handle interrupts
 567 *    Sofware can set this bit and then exit the ISR.
 568 * @ocla: Set when any OCLA(0)_INT and corresponding OCLA(0_INT_ENA_W1C
 569 *    bit are set
 570 * @mbox: Set when any NPS_PKT_MBOX_INT_LO/HI and corresponding
 571 *    NPS_PKT_MBOX_INT_LO_ENA_W1C/HI_ENA_W1C bits are set
 572 * @emu: bit i is set in [EMU] when any EMU(i)_INT bit is set
 573 * @bmo: Set when any BMO_INT bit is set
 574 * @bmi: Set when any BMI_INT bit is set or when any non-RO
 575 *    BMI_INT and corresponding BMI_INT_ENA_W1C bits are both set
 576 * @aqm: Set when any AQM_INT bit is set
 577 * @zqm: Set when any ZQM_INT bit is set
 578 * @efl: Set when any EFL_INT RO bit is set or when any non-RO EFL_INT
 579 *    and corresponding EFL_INT_ENA_W1C bits are both set
 580 * @ilk: Set when any ILK_INT bit is set
 581 * @lbc: Set when any LBC_INT RO bit is set or when any non-RO LBC_INT
 582 *    and corresponding LBC_INT_ENA_W1C bits are bot set
 583 * @pem: Set when any PEM(0)_INT RO bit is set or when any non-RO
 584 *    PEM(0)_INT and corresponding PEM(0)_INT_ENA_W1C bit are both set
 585 * @ucd: Set when any UCD_INT bit is set
 586 * @zctl: Set when any ZIP_INT RO bit is set or when any non-RO ZIP_INT
 587 *    and corresponding ZIP_INT_ENA_W1C bits are both set
 588 * @lbm: Set when any LBM_INT bit is set
 589 * @nps_pkt: Set when any NPS_PKT_INT bit is set
 590 * @nps_core: Set when any NPS_CORE_INT RO bit is set or when non-RO
 591 *    NPS_CORE_INT and corresponding NSP_CORE_INT_ENA_W1C bits are both set
 592 */
 593union nps_core_int_active {
 594        u64 value;
 595        struct {
 596#if (defined(__BIG_ENDIAN_BITFIELD))
 597                u64 resend : 1;
 598                u64 raz : 43;
 599                u64 ocla : 1;
 600                u64 mbox : 1;
 601                u64 emu : 4;
 602                u64 bmo : 1;
 603                u64 bmi : 1;
 604                u64 aqm : 1;
 605                u64 zqm : 1;
 606                u64 efl : 1;
 607                u64 ilk : 1;
 608                u64 lbc : 1;
 609                u64 pem : 1;
 610                u64 pom : 1;
 611                u64 ucd : 1;
 612                u64 zctl : 1;
 613                u64 lbm : 1;
 614                u64 nps_pkt : 1;
 615                u64 nps_core : 1;
 616#else
 617                u64 nps_core : 1;
 618                u64 nps_pkt : 1;
 619                u64 lbm : 1;
 620                u64 zctl: 1;
 621                u64 ucd : 1;
 622                u64 pom : 1;
 623                u64 pem : 1;
 624                u64 lbc : 1;
 625                u64 ilk : 1;
 626                u64 efl : 1;
 627                u64 zqm : 1;
 628                u64 aqm : 1;
 629                u64 bmi : 1;
 630                u64 bmo : 1;
 631                u64 emu : 4;
 632                u64 mbox : 1;
 633                u64 ocla : 1;
 634                u64 raz : 43;
 635                u64 resend : 1;
 636#endif
 637        } s;
 638};
 639
 640/**
 641 * struct efl_core_int - EFL Interrupt Registers
 642 * @epci_decode_err: EPCI decoded a transacation that was unknown
 643 *    This error should only occurred when there is a micrcode/SE error
 644 *    and should be considered fatal
 645 * @ae_err: An AE uncorrectable error occurred.
 646 *    See EFL_CORE(0..3)_AE_ERR_INT
 647 * @se_err: An SE uncorrectable error occurred.
 648 *    See EFL_CORE(0..3)_SE_ERR_INT
 649 * @dbe: Double-bit error occurred in EFL
 650 * @sbe: Single-bit error occurred in EFL
 651 * @d_left: Asserted when new POM-Header-BMI-data is
 652 *    being sent to an Exec, and that Exec has Not read all BMI
 653 *    data associated with the previous POM header
 654 * @len_ovr: Asserted when an Exec-Read is issued that is more than
 655 *    14 greater in length that the BMI data left to be read
 656 */
 657union efl_core_int {
 658        u64 value;
 659        struct {
 660#if (defined(__BIG_ENDIAN_BITFIELD))
 661                u64 raz : 57;
 662                u64 epci_decode_err : 1;
 663                u64 ae_err : 1;
 664                u64 se_err : 1;
 665                u64 dbe : 1;
 666                u64 sbe : 1;
 667                u64 d_left : 1;
 668                u64 len_ovr : 1;
 669#else
 670                u64 len_ovr : 1;
 671                u64 d_left : 1;
 672                u64 sbe : 1;
 673                u64 dbe : 1;
 674                u64 se_err : 1;
 675                u64 ae_err : 1;
 676                u64 epci_decode_err  : 1;
 677                u64 raz : 57;
 678#endif
 679        } s;
 680};
 681
 682/**
 683 * struct efl_core_int_ena_w1s - EFL core interrupt enable set register
 684 * @epci_decode_err: Reads or sets enable for
 685 *   EFL_CORE(0..3)_INT[EPCI_DECODE_ERR].
 686 * @d_left: Reads or sets enable for
 687 *   EFL_CORE(0..3)_INT[D_LEFT].
 688 * @len_ovr: Reads or sets enable for
 689 *   EFL_CORE(0..3)_INT[LEN_OVR].
 690 */
 691union efl_core_int_ena_w1s {
 692        u64 value;
 693        struct {
 694#if (defined(__BIG_ENDIAN_BITFIELD))
 695                u64 raz_7_63 : 57;
 696                u64 epci_decode_err : 1;
 697                u64 raz_2_5 : 4;
 698                u64 d_left : 1;
 699                u64 len_ovr : 1;
 700#else
 701                u64 len_ovr : 1;
 702                u64 d_left : 1;
 703                u64 raz_2_5 : 4;
 704                u64 epci_decode_err : 1;
 705                u64 raz_7_63 : 57;
 706#endif
 707        } s;
 708};
 709
 710/**
 711 * struct efl_rnm_ctl_status - RNM Control and Status Register
 712 * @ent_sel: Select input to RNM FIFO
 713 * @exp_ent: Exported entropy enable for random number generator
 714 * @rng_rst: Reset to RNG. Setting this bit to 1 cancels the generation
 715 *    of the current random number.
 716 * @rnm_rst: Reset the RNM. Setting this bit to 1 clears all sorted numbers
 717 *    in the random number memory.
 718 * @rng_en: Enabled the output of the RNG.
 719 * @ent_en: Entropy enable for random number generator.
 720 */
 721union efl_rnm_ctl_status {
 722        u64 value;
 723        struct {
 724#if (defined(__BIG_ENDIAN_BITFIELD))
 725                u64 raz_9_63 : 55;
 726                u64 ent_sel : 4;
 727                u64 exp_ent : 1;
 728                u64 rng_rst : 1;
 729                u64 rnm_rst : 1;
 730                u64 rng_en : 1;
 731                u64 ent_en : 1;
 732#else
 733                u64 ent_en : 1;
 734                u64 rng_en : 1;
 735                u64 rnm_rst : 1;
 736                u64 rng_rst : 1;
 737                u64 exp_ent : 1;
 738                u64 ent_sel : 4;
 739                u64 raz_9_63 : 55;
 740#endif
 741        } s;
 742};
 743
 744/**
 745 * struct bmi_ctl - BMI control register
 746 * @ilk_hdrq_thrsh: Maximum number of header queue locations
 747 *   that ILK packets may consume. When the threshold is
 748 *   exceeded ILK_XOFF is sent to the BMI_X2P_ARB.
 749 * @nps_hdrq_thrsh: Maximum number of header queue locations
 750 *   that NPS packets may consume. When the threshold is
 751 *   exceeded NPS_XOFF is sent to the BMI_X2P_ARB.
 752 * @totl_hdrq_thrsh: Maximum number of header queue locations
 753 *   that the sum of ILK and NPS packets may consume.
 754 * @ilk_free_thrsh: Maximum number of buffers that ILK packet
 755 *   flows may consume before ILK_XOFF is sent to the BMI_X2P_ARB.
 756 * @nps_free_thrsh: Maximum number of buffers that NPS packet
 757 *   flows may consume before NPS XOFF is sent to the BMI_X2p_ARB.
 758 * @totl_free_thrsh: Maximum number of buffers that bot ILK and NPS
 759 *   packet flows may consume before both NPS_XOFF and ILK_XOFF
 760 *   are asserted to the BMI_X2P_ARB.
 761 * @max_pkt_len: Maximum packet length, integral number of 256B
 762 *   buffers.
 763 */
 764union bmi_ctl {
 765        u64 value;
 766        struct {
 767#if (defined(__BIG_ENDIAN_BITFIELD))
 768                u64 raz_56_63 : 8;
 769                u64 ilk_hdrq_thrsh : 8;
 770                u64 nps_hdrq_thrsh : 8;
 771                u64 totl_hdrq_thrsh : 8;
 772                u64 ilk_free_thrsh : 8;
 773                u64 nps_free_thrsh : 8;
 774                u64 totl_free_thrsh : 8;
 775                u64 max_pkt_len : 8;
 776#else
 777                u64 max_pkt_len : 8;
 778                u64 totl_free_thrsh : 8;
 779                u64 nps_free_thrsh : 8;
 780                u64 ilk_free_thrsh : 8;
 781                u64 totl_hdrq_thrsh : 8;
 782                u64 nps_hdrq_thrsh : 8;
 783                u64 ilk_hdrq_thrsh : 8;
 784                u64 raz_56_63 : 8;
 785#endif
 786        } s;
 787};
 788
 789/**
 790 * struct bmi_int_ena_w1s - BMI interrupt enable set register
 791 * @ilk_req_oflw: Reads or sets enable for
 792 *   BMI_INT[ILK_REQ_OFLW].
 793 * @nps_req_oflw: Reads or sets enable for
 794 *   BMI_INT[NPS_REQ_OFLW].
 795 * @fpf_undrrn: Reads or sets enable for
 796 *   BMI_INT[FPF_UNDRRN].
 797 * @eop_err_ilk: Reads or sets enable for
 798 *   BMI_INT[EOP_ERR_ILK].
 799 * @eop_err_nps: Reads or sets enable for
 800 *   BMI_INT[EOP_ERR_NPS].
 801 * @sop_err_ilk: Reads or sets enable for
 802 *   BMI_INT[SOP_ERR_ILK].
 803 * @sop_err_nps: Reads or sets enable for
 804 *   BMI_INT[SOP_ERR_NPS].
 805 * @pkt_rcv_err_ilk: Reads or sets enable for
 806 *   BMI_INT[PKT_RCV_ERR_ILK].
 807 * @pkt_rcv_err_nps: Reads or sets enable for
 808 *   BMI_INT[PKT_RCV_ERR_NPS].
 809 * @max_len_err_ilk: Reads or sets enable for
 810 *   BMI_INT[MAX_LEN_ERR_ILK].
 811 * @max_len_err_nps: Reads or sets enable for
 812 *   BMI_INT[MAX_LEN_ERR_NPS].
 813 */
 814union bmi_int_ena_w1s {
 815        u64 value;
 816        struct {
 817#if (defined(__BIG_ENDIAN_BITFIELD))
 818                u64 raz_13_63   : 51;
 819                u64 ilk_req_oflw : 1;
 820                u64 nps_req_oflw : 1;
 821                u64 raz_10 : 1;
 822                u64 raz_9 : 1;
 823                u64 fpf_undrrn  : 1;
 824                u64 eop_err_ilk : 1;
 825                u64 eop_err_nps : 1;
 826                u64 sop_err_ilk : 1;
 827                u64 sop_err_nps : 1;
 828                u64 pkt_rcv_err_ilk : 1;
 829                u64 pkt_rcv_err_nps : 1;
 830                u64 max_len_err_ilk : 1;
 831                u64 max_len_err_nps : 1;
 832#else
 833                u64 max_len_err_nps : 1;
 834                u64 max_len_err_ilk : 1;
 835                u64 pkt_rcv_err_nps : 1;
 836                u64 pkt_rcv_err_ilk : 1;
 837                u64 sop_err_nps : 1;
 838                u64 sop_err_ilk : 1;
 839                u64 eop_err_nps : 1;
 840                u64 eop_err_ilk : 1;
 841                u64 fpf_undrrn  : 1;
 842                u64 raz_9 : 1;
 843                u64 raz_10 : 1;
 844                u64 nps_req_oflw : 1;
 845                u64 ilk_req_oflw : 1;
 846                u64 raz_13_63 : 51;
 847#endif
 848        } s;
 849};
 850
 851/**
 852 * struct bmo_ctl2 - BMO Control2 Register
 853 * @arb_sel: Determines P2X Arbitration
 854 * @ilk_buf_thrsh: Maximum number of buffers that the
 855 *    ILK packet flows may consume before ILK XOFF is
 856 *    asserted to the POM.
 857 * @nps_slc_buf_thrsh: Maximum number of buffers that the
 858 *    NPS_SLC packet flow may consume before NPS_SLC XOFF is
 859 *    asserted to the POM.
 860 * @nps_uns_buf_thrsh: Maximum number of buffers that the
 861 *    NPS_UNS packet flow may consume before NPS_UNS XOFF is
 862 *    asserted to the POM.
 863 * @totl_buf_thrsh: Maximum number of buffers that ILK, NPS_UNS and
 864 *    NPS_SLC packet flows may consume before NPS_UNS XOFF, NSP_SLC and
 865 *    ILK_XOFF are all asserted POM.
 866 */
 867union bmo_ctl2 {
 868        u64 value;
 869        struct {
 870#if (defined(__BIG_ENDIAN_BITFIELD))
 871                u64 arb_sel : 1;
 872                u64 raz_32_62 : 31;
 873                u64 ilk_buf_thrsh : 8;
 874                u64 nps_slc_buf_thrsh : 8;
 875                u64 nps_uns_buf_thrsh : 8;
 876                u64 totl_buf_thrsh : 8;
 877#else
 878                u64 totl_buf_thrsh : 8;
 879                u64 nps_uns_buf_thrsh : 8;
 880                u64 nps_slc_buf_thrsh : 8;
 881                u64 ilk_buf_thrsh : 8;
 882                u64 raz_32_62 : 31;
 883                u64 arb_sel : 1;
 884#endif
 885        } s;
 886};
 887
 888/**
 889 * struct pom_int_ena_w1s - POM interrupt enable set register
 890 * @illegal_intf: Reads or sets enable for POM_INT[ILLEGAL_INTF].
 891 * @illegal_dport: Reads or sets enable for POM_INT[ILLEGAL_DPORT].
 892 */
 893union pom_int_ena_w1s {
 894        u64 value;
 895        struct {
 896#if (defined(__BIG_ENDIAN_BITFIELD))
 897                u64 raz2 : 60;
 898                u64 illegal_intf : 1;
 899                u64 illegal_dport : 1;
 900                u64 raz1 : 1;
 901                u64 raz0 : 1;
 902#else
 903                u64 raz0 : 1;
 904                u64 raz1 : 1;
 905                u64 illegal_dport : 1;
 906                u64 illegal_intf : 1;
 907                u64 raz2 : 60;
 908#endif
 909        } s;
 910};
 911
 912/**
 913 * struct lbc_inval_ctl - LBC invalidation control register
 914 * @wait_timer: Wait timer for wait state. [WAIT_TIMER] must
 915 *   always be written with its reset value.
 916 * @cam_inval_start: Software should write [CAM_INVAL_START]=1
 917 *   to initiate an LBC cache invalidation. After this, software
 918 *   should read LBC_INVAL_STATUS until LBC_INVAL_STATUS[DONE] is set.
 919 *   LBC hardware clears [CAVM_INVAL_START] before software can
 920 *   observed LBC_INVAL_STATUS[DONE] to be set
 921 */
 922union lbc_inval_ctl {
 923        u64 value;
 924        struct {
 925#if (defined(__BIG_ENDIAN_BITFIELD))
 926                u64 raz2 : 48;
 927                u64 wait_timer : 8;
 928                u64 raz1 : 6;
 929                u64 cam_inval_start : 1;
 930                u64 raz0 : 1;
 931#else
 932                u64 raz0 : 1;
 933                u64 cam_inval_start : 1;
 934                u64 raz1 : 6;
 935                u64 wait_timer : 8;
 936                u64 raz2 : 48;
 937#endif
 938        } s;
 939};
 940
 941/**
 942 * struct lbc_int_ena_w1s - LBC interrupt enable set register
 943 * @cam_hard_err: Reads or sets enable for LBC_INT[CAM_HARD_ERR].
 944 * @cam_inval_abort: Reads or sets enable for LBC_INT[CAM_INVAL_ABORT].
 945 * @over_fetch_err: Reads or sets enable for LBC_INT[OVER_FETCH_ERR].
 946 * @cache_line_to_err: Reads or sets enable for
 947 *   LBC_INT[CACHE_LINE_TO_ERR].
 948 * @cam_soft_err: Reads or sets enable for
 949 *   LBC_INT[CAM_SOFT_ERR].
 950 * @dma_rd_err: Reads or sets enable for
 951 *   LBC_INT[DMA_RD_ERR].
 952 */
 953union lbc_int_ena_w1s {
 954        u64 value;
 955        struct {
 956#if (defined(__BIG_ENDIAN_BITFIELD))
 957                u64 raz_10_63 : 54;
 958                u64 cam_hard_err : 1;
 959                u64 cam_inval_abort : 1;
 960                u64 over_fetch_err : 1;
 961                u64 cache_line_to_err : 1;
 962                u64 raz_2_5 : 4;
 963                u64 cam_soft_err : 1;
 964                u64 dma_rd_err : 1;
 965#else
 966                u64 dma_rd_err : 1;
 967                u64 cam_soft_err : 1;
 968                u64 raz_2_5 : 4;
 969                u64 cache_line_to_err : 1;
 970                u64 over_fetch_err : 1;
 971                u64 cam_inval_abort : 1;
 972                u64 cam_hard_err : 1;
 973                u64 raz_10_63 : 54;
 974#endif
 975        } s;
 976};
 977
 978/**
 979 * struct lbc_int - LBC interrupt summary register
 980 * @cam_hard_err: indicates a fatal hardware error.
 981 *   It requires system reset.
 982 *   When [CAM_HARD_ERR] is set, LBC stops logging any new information in
 983 *   LBC_POM_MISS_INFO_LOG,
 984 *   LBC_POM_MISS_ADDR_LOG,
 985 *   LBC_EFL_MISS_INFO_LOG, and
 986 *   LBC_EFL_MISS_ADDR_LOG.
 987 *   Software should sample them.
 988 * @cam_inval_abort: indicates a fatal hardware error.
 989 *   System reset is required.
 990 * @over_fetch_err: indicates a fatal hardware error
 991 *   System reset is required
 992 * @cache_line_to_err: is a debug feature.
 993 *   This timeout interrupt bit tells the software that
 994 *   a cacheline in LBC has non-zero usage and the context
 995 *   has not been used for greater than the
 996 *   LBC_TO_CNT[TO_CNT] time interval.
 997 * @sbe: Memory SBE error. This is recoverable via ECC.
 998 *   See LBC_ECC_INT for more details.
 999 * @dbe: Memory DBE error. This is a fatal and requires a
1000 *   system reset.
1001 * @pref_dat_len_mismatch_err: Summary bit for context length
1002 *   mismatch errors.
1003 * @rd_dat_len_mismatch_err: Summary bit for SE read data length
1004 *   greater than data prefect length errors.
1005 * @cam_soft_err: is recoverable. Software must complete a
1006 *   LBC_INVAL_CTL[CAM_INVAL_START] invalidation sequence and
1007 *   then clear [CAM_SOFT_ERR].
1008 * @dma_rd_err: A context prefect read of host memory returned with
1009 *   a read error.
1010 */
1011union lbc_int {
1012        u64 value;
1013        struct {
1014#if (defined(__BIG_ENDIAN_BITFIELD))
1015                u64 raz_10_63 : 54;
1016                u64 cam_hard_err : 1;
1017                u64 cam_inval_abort : 1;
1018                u64 over_fetch_err : 1;
1019                u64 cache_line_to_err : 1;
1020                u64 sbe : 1;
1021                u64 dbe : 1;
1022                u64 pref_dat_len_mismatch_err : 1;
1023                u64 rd_dat_len_mismatch_err : 1;
1024                u64 cam_soft_err : 1;
1025                u64 dma_rd_err : 1;
1026#else
1027                u64 dma_rd_err : 1;
1028                u64 cam_soft_err : 1;
1029                u64 rd_dat_len_mismatch_err : 1;
1030                u64 pref_dat_len_mismatch_err : 1;
1031                u64 dbe : 1;
1032                u64 sbe : 1;
1033                u64 cache_line_to_err : 1;
1034                u64 over_fetch_err : 1;
1035                u64 cam_inval_abort : 1;
1036                u64 cam_hard_err : 1;
1037                u64 raz_10_63 : 54;
1038#endif
1039        } s;
1040};
1041
1042/**
1043 * struct lbc_inval_status: LBC Invalidation status register
1044 * @cam_clean_entry_complete_cnt: The number of entries that are
1045 *   cleaned up successfully.
1046 * @cam_clean_entry_cnt: The number of entries that have the CAM
1047 *   inval command issued.
1048 * @cam_inval_state: cam invalidation FSM state
1049 * @cam_inval_abort: cam invalidation abort
1050 * @cam_rst_rdy: lbc_cam reset ready
1051 * @done: LBC clears [DONE] when
1052 *   LBC_INVAL_CTL[CAM_INVAL_START] is written with a one,
1053 *   and sets [DONE] when it completes the invalidation
1054 *   sequence.
1055 */
1056union lbc_inval_status {
1057        u64 value;
1058        struct {
1059#if (defined(__BIG_ENDIAN_BITFIELD))
1060                u64 raz3 : 23;
1061                u64 cam_clean_entry_complete_cnt : 9;
1062                u64 raz2 : 7;
1063                u64 cam_clean_entry_cnt : 9;
1064                u64 raz1 : 5;
1065                u64 cam_inval_state : 3;
1066                u64 raz0 : 5;
1067                u64 cam_inval_abort : 1;
1068                u64 cam_rst_rdy : 1;
1069                u64 done : 1;
1070#else
1071                u64 done : 1;
1072                u64 cam_rst_rdy : 1;
1073                u64 cam_inval_abort : 1;
1074                u64 raz0 : 5;
1075                u64 cam_inval_state : 3;
1076                u64 raz1 : 5;
1077                u64 cam_clean_entry_cnt : 9;
1078                u64 raz2 : 7;
1079                u64 cam_clean_entry_complete_cnt : 9;
1080                u64 raz3 : 23;
1081#endif
1082        } s;
1083};
1084
1085#endif /* __NITROX_CSR_H */
1086