linux/drivers/crypto/cavium/zip/zip_regs.h
<<
>>
Prefs
   1/***********************license start************************************
   2 * Copyright (c) 2003-2017 Cavium, Inc.
   3 * All rights reserved.
   4 *
   5 * License: one of 'Cavium License' or 'GNU General Public License Version 2'
   6 *
   7 * This file is provided under the terms of the Cavium License (see below)
   8 * or under the terms of GNU General Public License, Version 2, as
   9 * published by the Free Software Foundation. When using or redistributing
  10 * this file, you may do so under either license.
  11 *
  12 * Cavium License:  Redistribution and use in source and binary forms, with
  13 * or without modification, are permitted provided that the following
  14 * conditions are met:
  15 *
  16 *  * Redistributions of source code must retain the above copyright
  17 *    notice, this list of conditions and the following disclaimer.
  18 *
  19 *  * Redistributions in binary form must reproduce the above
  20 *    copyright notice, this list of conditions and the following
  21 *    disclaimer in the documentation and/or other materials provided
  22 *    with the distribution.
  23 *
  24 *  * Neither the name of Cavium Inc. nor the names of its contributors may be
  25 *    used to endorse or promote products derived from this software without
  26 *    specific prior written permission.
  27 *
  28 * This Software, including technical data, may be subject to U.S. export
  29 * control laws, including the U.S. Export Administration Act and its
  30 * associated regulations, and may be subject to export or import
  31 * regulations in other countries.
  32 *
  33 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
  34 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS
  35 * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
  36 * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
  37 * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
  38 * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY)
  39 * WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A
  40 * PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET
  41 * ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE
  42 * ENTIRE  RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES
  43 * WITH YOU.
  44 ***********************license end**************************************/
  45
  46#ifndef __ZIP_REGS_H__
  47#define __ZIP_REGS_H__
  48
  49/*
  50 * Configuration and status register (CSR) address and type definitions for
  51 * Cavium ZIP.
  52 */
  53
  54#include <linux/kern_levels.h>
  55
  56/* ZIP invocation result completion status codes */
  57#define ZIP_CMD_NOTDONE        0x0
  58
  59/* Successful completion. */
  60#define ZIP_CMD_SUCCESS        0x1
  61
  62/* Output truncated */
  63#define ZIP_CMD_DTRUNC         0x2
  64
  65/* Dynamic Stop */
  66#define ZIP_CMD_DYNAMIC_STOP   0x3
  67
  68/* Uncompress ran out of input data when IWORD0[EF] was set */
  69#define ZIP_CMD_ITRUNC         0x4
  70
  71/* Uncompress found the reserved block type 3 */
  72#define ZIP_CMD_RBLOCK         0x5
  73
  74/*
  75 * Uncompress found LEN != ZIP_CMD_NLEN in an uncompressed block in the input.
  76 */
  77#define ZIP_CMD_NLEN           0x6
  78
  79/* Uncompress found a bad code in the main Huffman codes. */
  80#define ZIP_CMD_BADCODE        0x7
  81
  82/* Uncompress found a bad code in the 19 Huffman codes encoding lengths. */
  83#define ZIP_CMD_BADCODE2       0x8
  84
  85/* Compress found a zero-length input. */
  86#define ZIP_CMD_ZERO_LEN       0x9
  87
  88/* The compress or decompress encountered an internal parity error. */
  89#define ZIP_CMD_PARITY         0xA
  90
  91/*
  92 * Uncompress found a string identifier that precedes the uncompressed data and
  93 * decompression history.
  94 */
  95#define ZIP_CMD_FATAL          0xB
  96
  97/**
  98 * enum zip_int_vec_e - ZIP MSI-X Vector Enumeration, enumerates the MSI-X
  99 * interrupt vectors.
 100 */
 101enum zip_int_vec_e {
 102        ZIP_INT_VEC_E_ECCE = 0x10,
 103        ZIP_INT_VEC_E_FIFE = 0x11,
 104        ZIP_INT_VEC_E_QUE0_DONE = 0x0,
 105        ZIP_INT_VEC_E_QUE0_ERR = 0x8,
 106        ZIP_INT_VEC_E_QUE1_DONE = 0x1,
 107        ZIP_INT_VEC_E_QUE1_ERR = 0x9,
 108        ZIP_INT_VEC_E_QUE2_DONE = 0x2,
 109        ZIP_INT_VEC_E_QUE2_ERR = 0xa,
 110        ZIP_INT_VEC_E_QUE3_DONE = 0x3,
 111        ZIP_INT_VEC_E_QUE3_ERR = 0xb,
 112        ZIP_INT_VEC_E_QUE4_DONE = 0x4,
 113        ZIP_INT_VEC_E_QUE4_ERR = 0xc,
 114        ZIP_INT_VEC_E_QUE5_DONE = 0x5,
 115        ZIP_INT_VEC_E_QUE5_ERR = 0xd,
 116        ZIP_INT_VEC_E_QUE6_DONE = 0x6,
 117        ZIP_INT_VEC_E_QUE6_ERR = 0xe,
 118        ZIP_INT_VEC_E_QUE7_DONE = 0x7,
 119        ZIP_INT_VEC_E_QUE7_ERR = 0xf,
 120        ZIP_INT_VEC_E_ENUM_LAST = 0x12,
 121};
 122
 123/**
 124 * union zip_zptr_addr_s - ZIP Generic Pointer Structure for ADDR.
 125 *
 126 * It is the generic format of pointers in ZIP_INST_S.
 127 */
 128union zip_zptr_addr_s {
 129        u64 u_reg64;
 130        struct {
 131#if defined(__BIG_ENDIAN_BITFIELD)
 132                u64 reserved_49_63              : 15;
 133                u64 addr                        : 49;
 134#elif defined(__LITTLE_ENDIAN_BITFIELD)
 135                u64 addr                        : 49;
 136                u64 reserved_49_63              : 15;
 137#endif
 138        } s;
 139
 140};
 141
 142/**
 143 * union zip_zptr_ctl_s - ZIP Generic Pointer Structure for CTL.
 144 *
 145 * It is the generic format of pointers in ZIP_INST_S.
 146 */
 147union zip_zptr_ctl_s {
 148        u64 u_reg64;
 149        struct {
 150#if defined(__BIG_ENDIAN_BITFIELD)
 151                u64 reserved_112_127            : 16;
 152                u64 length                      : 16;
 153                u64 reserved_67_95              : 29;
 154                u64 fw                          : 1;
 155                u64 nc                          : 1;
 156                u64 data_be                     : 1;
 157#elif defined(__LITTLE_ENDIAN_BITFIELD)
 158                u64 data_be                     : 1;
 159                u64 nc                          : 1;
 160                u64 fw                          : 1;
 161                u64 reserved_67_95              : 29;
 162                u64 length                      : 16;
 163                u64 reserved_112_127            : 16;
 164#endif
 165        } s;
 166};
 167
 168/**
 169 * union zip_inst_s - ZIP Instruction Structure.
 170 * Each ZIP instruction has 16 words (they are called IWORD0 to IWORD15 within
 171 * the structure).
 172 */
 173union zip_inst_s {
 174        u64 u_reg64[16];
 175        struct {
 176#if defined(__BIG_ENDIAN_BITFIELD)
 177                u64 doneint                     : 1;
 178                u64 reserved_56_62              : 7;
 179                u64 totaloutputlength           : 24;
 180                u64 reserved_27_31              : 5;
 181                u64 exn                         : 3;
 182                u64 reserved_23_23              : 1;
 183                u64 exbits                      : 7;
 184                u64 reserved_12_15              : 4;
 185                u64 sf                          : 1;
 186                u64 ss                          : 2;
 187                u64 cc                          : 2;
 188                u64 ef                          : 1;
 189                u64 bf                          : 1;
 190                u64 ce                          : 1;
 191                u64 reserved_3_3                : 1;
 192                u64 ds                          : 1;
 193                u64 dg                          : 1;
 194                u64 hg                          : 1;
 195#elif defined(__LITTLE_ENDIAN_BITFIELD)
 196                u64 hg                          : 1;
 197                u64 dg                          : 1;
 198                u64 ds                          : 1;
 199                u64 reserved_3_3                : 1;
 200                u64 ce                          : 1;
 201                u64 bf                          : 1;
 202                u64 ef                          : 1;
 203                u64 cc                          : 2;
 204                u64 ss                          : 2;
 205                u64 sf                          : 1;
 206                u64 reserved_12_15              : 4;
 207                u64 exbits                      : 7;
 208                u64 reserved_23_23              : 1;
 209                u64 exn                         : 3;
 210                u64 reserved_27_31              : 5;
 211                u64 totaloutputlength           : 24;
 212                u64 reserved_56_62              : 7;
 213                u64 doneint                     : 1;
 214#endif
 215#if defined(__BIG_ENDIAN_BITFIELD)
 216                u64 historylength               : 16;
 217                u64 reserved_96_111             : 16;
 218                u64 adlercrc32                  : 32;
 219#elif defined(__LITTLE_ENDIAN_BITFIELD)
 220                u64 adlercrc32                  : 32;
 221                u64 reserved_96_111             : 16;
 222                u64 historylength               : 16;
 223#endif
 224                union zip_zptr_addr_s ctx_ptr_addr;
 225                union zip_zptr_ctl_s ctx_ptr_ctl;
 226                union zip_zptr_addr_s his_ptr_addr;
 227                union zip_zptr_ctl_s his_ptr_ctl;
 228                union zip_zptr_addr_s inp_ptr_addr;
 229                union zip_zptr_ctl_s inp_ptr_ctl;
 230                union zip_zptr_addr_s out_ptr_addr;
 231                union zip_zptr_ctl_s out_ptr_ctl;
 232                union zip_zptr_addr_s res_ptr_addr;
 233                union zip_zptr_ctl_s res_ptr_ctl;
 234#if defined(__BIG_ENDIAN_BITFIELD)
 235                u64 reserved_817_831            : 15;
 236                u64 wq_ptr                      : 49;
 237#elif defined(__LITTLE_ENDIAN_BITFIELD)
 238                u64 wq_ptr                      : 49;
 239                u64 reserved_817_831            : 15;
 240#endif
 241#if defined(__BIG_ENDIAN_BITFIELD)
 242                u64 reserved_882_895            : 14;
 243                u64 tt                          : 2;
 244                u64 reserved_874_879            : 6;
 245                u64 grp                         : 10;
 246                u64 tag                         : 32;
 247#elif defined(__LITTLE_ENDIAN_BITFIELD)
 248                u64 tag                         : 32;
 249                u64 grp                         : 10;
 250                u64 reserved_874_879            : 6;
 251                u64 tt                          : 2;
 252                u64 reserved_882_895            : 14;
 253#endif
 254#if defined(__BIG_ENDIAN_BITFIELD)
 255                u64 reserved_896_959            : 64;
 256#elif defined(__LITTLE_ENDIAN_BITFIELD)
 257                u64 reserved_896_959            : 64;
 258#endif
 259#if defined(__BIG_ENDIAN_BITFIELD)
 260                u64 reserved_960_1023           : 64;
 261#elif defined(__LITTLE_ENDIAN_BITFIELD)
 262                u64 reserved_960_1023           : 64;
 263#endif
 264        } s;
 265};
 266
 267/**
 268 * union zip_nptr_s - ZIP Instruction Next-Chunk-Buffer Pointer (NPTR)
 269 * Structure
 270 *
 271 * ZIP_NPTR structure is used to chain all the zip instruction buffers
 272 * together. ZIP instruction buffers are managed (allocated and released) by
 273 * the software.
 274 */
 275union zip_nptr_s {
 276        u64 u_reg64;
 277        struct {
 278#if defined(__BIG_ENDIAN_BITFIELD)
 279                u64 reserved_49_63              : 15;
 280                u64 addr                        : 49;
 281#elif defined(__LITTLE_ENDIAN_BITFIELD)
 282                u64 addr                        : 49;
 283                u64 reserved_49_63              : 15;
 284#endif
 285        } s;
 286};
 287
 288/**
 289 * union zip_zptr_s - ZIP Generic Pointer Structure.
 290 *
 291 * It is the generic format of pointers in ZIP_INST_S.
 292 */
 293union zip_zptr_s {
 294        u64 u_reg64[2];
 295        struct {
 296#if defined(__BIG_ENDIAN_BITFIELD)
 297                u64 reserved_49_63              : 15;
 298                u64 addr                        : 49;
 299#elif defined(__LITTLE_ENDIAN_BITFIELD)
 300                u64 addr                        : 49;
 301                u64 reserved_49_63              : 15;
 302#endif
 303#if defined(__BIG_ENDIAN_BITFIELD)
 304                u64 reserved_112_127            : 16;
 305                u64 length                      : 16;
 306                u64 reserved_67_95              : 29;
 307                u64 fw                          : 1;
 308                u64 nc                          : 1;
 309                u64 data_be                     : 1;
 310#elif defined(__LITTLE_ENDIAN_BITFIELD)
 311                u64 data_be                     : 1;
 312                u64 nc                          : 1;
 313                u64 fw                          : 1;
 314                u64 reserved_67_95              : 29;
 315                u64 length                      : 16;
 316                u64 reserved_112_127            : 16;
 317#endif
 318        } s;
 319};
 320
 321/**
 322 * union zip_zres_s - ZIP Result Structure
 323 *
 324 * The ZIP coprocessor writes the result structure after it completes the
 325 * invocation. The result structure is exactly 24 bytes, and each invocation of
 326 * the ZIP coprocessor produces exactly one result structure.
 327 */
 328union zip_zres_s {
 329        u64 u_reg64[3];
 330        struct {
 331#if defined(__BIG_ENDIAN_BITFIELD)
 332                u64 crc32                       : 32;
 333                u64 adler32                     : 32;
 334#elif defined(__LITTLE_ENDIAN_BITFIELD)
 335                u64 adler32                     : 32;
 336                u64 crc32                       : 32;
 337#endif
 338#if defined(__BIG_ENDIAN_BITFIELD)
 339                u64 totalbyteswritten           : 32;
 340                u64 totalbytesread              : 32;
 341#elif defined(__LITTLE_ENDIAN_BITFIELD)
 342                u64 totalbytesread              : 32;
 343                u64 totalbyteswritten           : 32;
 344#endif
 345#if defined(__BIG_ENDIAN_BITFIELD)
 346                u64 totalbitsprocessed          : 32;
 347                u64 doneint                     : 1;
 348                u64 reserved_155_158            : 4;
 349                u64 exn                         : 3;
 350                u64 reserved_151_151            : 1;
 351                u64 exbits                      : 7;
 352                u64 reserved_137_143            : 7;
 353                u64 ef                          : 1;
 354
 355                volatile u64 compcode           : 8;
 356#elif defined(__LITTLE_ENDIAN_BITFIELD)
 357
 358                volatile u64 compcode           : 8;
 359                u64 ef                          : 1;
 360                u64 reserved_137_143            : 7;
 361                u64 exbits                      : 7;
 362                u64 reserved_151_151            : 1;
 363                u64 exn                         : 3;
 364                u64 reserved_155_158            : 4;
 365                u64 doneint                     : 1;
 366                u64 totalbitsprocessed          : 32;
 367#endif
 368        } s;
 369};
 370
 371/**
 372 * union zip_cmd_ctl - Structure representing the register that controls
 373 * clock and reset.
 374 */
 375union zip_cmd_ctl {
 376        u64 u_reg64;
 377        struct zip_cmd_ctl_s {
 378#if defined(__BIG_ENDIAN_BITFIELD)
 379                u64 reserved_2_63               : 62;
 380                u64 forceclk                    : 1;
 381                u64 reset                       : 1;
 382#elif defined(__LITTLE_ENDIAN_BITFIELD)
 383                u64 reset                       : 1;
 384                u64 forceclk                    : 1;
 385                u64 reserved_2_63               : 62;
 386#endif
 387        } s;
 388};
 389
 390#define ZIP_CMD_CTL 0x0ull
 391
 392/**
 393 * union zip_constants - Data structure representing the register that contains
 394 * all of the current implementation-related parameters of the zip core in this
 395 * chip.
 396 */
 397union zip_constants {
 398        u64 u_reg64;
 399        struct zip_constants_s {
 400#if defined(__BIG_ENDIAN_BITFIELD)
 401                u64 nexec                       : 8;
 402                u64 reserved_49_55              : 7;
 403                u64 syncflush_capable           : 1;
 404                u64 depth                       : 16;
 405                u64 onfsize                     : 12;
 406                u64 ctxsize                     : 12;
 407                u64 reserved_1_7                : 7;
 408                u64 disabled                    : 1;
 409#elif defined(__LITTLE_ENDIAN_BITFIELD)
 410                u64 disabled                    : 1;
 411                u64 reserved_1_7                : 7;
 412                u64 ctxsize                     : 12;
 413                u64 onfsize                     : 12;
 414                u64 depth                       : 16;
 415                u64 syncflush_capable           : 1;
 416                u64 reserved_49_55              : 7;
 417                u64 nexec                       : 8;
 418#endif
 419        } s;
 420};
 421
 422#define ZIP_CONSTANTS 0x00A0ull
 423
 424/**
 425 * union zip_corex_bist_status - Represents registers which have the BIST
 426 * status of memories in zip cores.
 427 *
 428 * Each bit is the BIST result of an individual memory
 429 * (per bit, 0 = pass and 1 = fail).
 430 */
 431union zip_corex_bist_status {
 432        u64 u_reg64;
 433        struct zip_corex_bist_status_s {
 434#if defined(__BIG_ENDIAN_BITFIELD)
 435                u64 reserved_53_63              : 11;
 436                u64 bstatus                     : 53;
 437#elif defined(__LITTLE_ENDIAN_BITFIELD)
 438                u64 bstatus                     : 53;
 439                u64 reserved_53_63              : 11;
 440#endif
 441        } s;
 442};
 443
 444static inline u64 ZIP_COREX_BIST_STATUS(u64 param1)
 445{
 446        if (param1 <= 1)
 447                return 0x0520ull + (param1 & 1) * 0x8ull;
 448        pr_err("ZIP_COREX_BIST_STATUS: %llu\n", param1);
 449        return 0;
 450}
 451
 452/**
 453 * union zip_ctl_bist_status - Represents register that has the BIST status of
 454 * memories in ZIP_CTL (instruction buffer, G/S pointer FIFO, input data
 455 * buffer, output data buffers).
 456 *
 457 * Each bit is the BIST result of an individual memory
 458 * (per bit, 0 = pass and 1 = fail).
 459 */
 460union zip_ctl_bist_status {
 461        u64 u_reg64;
 462        struct zip_ctl_bist_status_s {
 463#if defined(__BIG_ENDIAN_BITFIELD)
 464                u64 reserved_9_63               : 55;
 465                u64 bstatus                     : 9;
 466#elif defined(__LITTLE_ENDIAN_BITFIELD)
 467                u64 bstatus                     : 9;
 468                u64 reserved_9_63               : 55;
 469#endif
 470        } s;
 471};
 472
 473#define ZIP_CTL_BIST_STATUS 0x0510ull
 474
 475/**
 476 * union zip_ctl_cfg - Represents the register that controls the behavior of
 477 * the ZIP DMA engines.
 478 *
 479 * It is recommended to keep default values for normal operation. Changing the
 480 * values of the fields may be useful for diagnostics.
 481 */
 482union zip_ctl_cfg {
 483        u64 u_reg64;
 484        struct zip_ctl_cfg_s {
 485#if defined(__BIG_ENDIAN_BITFIELD)
 486                u64 reserved_52_63              : 12;
 487                u64 ildf                        : 4;
 488                u64 reserved_36_47              : 12;
 489                u64 drtf                        : 4;
 490                u64 reserved_27_31              : 5;
 491                u64 stcf                        : 3;
 492                u64 reserved_19_23              : 5;
 493                u64 ldf                         : 3;
 494                u64 reserved_2_15               : 14;
 495                u64 busy                        : 1;
 496                u64 reserved_0_0                : 1;
 497#elif defined(__LITTLE_ENDIAN_BITFIELD)
 498                u64 reserved_0_0                : 1;
 499                u64 busy                        : 1;
 500                u64 reserved_2_15               : 14;
 501                u64 ldf                         : 3;
 502                u64 reserved_19_23              : 5;
 503                u64 stcf                        : 3;
 504                u64 reserved_27_31              : 5;
 505                u64 drtf                        : 4;
 506                u64 reserved_36_47              : 12;
 507                u64 ildf                        : 4;
 508                u64 reserved_52_63              : 12;
 509#endif
 510        } s;
 511};
 512
 513#define ZIP_CTL_CFG 0x0560ull
 514
 515/**
 516 * union zip_dbg_corex_inst - Represents the registers that reflect the status
 517 * of the current instruction that the ZIP core is executing or has executed.
 518 *
 519 * These registers are only for debug use.
 520 */
 521union zip_dbg_corex_inst {
 522        u64 u_reg64;
 523        struct zip_dbg_corex_inst_s {
 524#if defined(__BIG_ENDIAN_BITFIELD)
 525                u64 busy                        : 1;
 526                u64 reserved_35_62              : 28;
 527                u64 qid                         : 3;
 528                u64 iid                         : 32;
 529#elif defined(__LITTLE_ENDIAN_BITFIELD)
 530                u64 iid                         : 32;
 531                u64 qid                         : 3;
 532                u64 reserved_35_62              : 28;
 533                u64 busy                        : 1;
 534#endif
 535        } s;
 536};
 537
 538static inline u64 ZIP_DBG_COREX_INST(u64 param1)
 539{
 540        if (param1 <= 1)
 541                return 0x0640ull + (param1 & 1) * 0x8ull;
 542        pr_err("ZIP_DBG_COREX_INST: %llu\n", param1);
 543        return 0;
 544}
 545
 546/**
 547 * union zip_dbg_corex_sta - Represents registers that reflect the status of
 548 * the zip cores.
 549 *
 550 * They are for debug use only.
 551 */
 552union zip_dbg_corex_sta {
 553        u64 u_reg64;
 554        struct zip_dbg_corex_sta_s {
 555#if defined(__BIG_ENDIAN_BITFIELD)
 556                u64 busy                        : 1;
 557                u64 reserved_37_62              : 26;
 558                u64 ist                         : 5;
 559                u64 nie                         : 32;
 560#elif defined(__LITTLE_ENDIAN_BITFIELD)
 561                u64 nie                         : 32;
 562                u64 ist                         : 5;
 563                u64 reserved_37_62              : 26;
 564                u64 busy                        : 1;
 565#endif
 566        } s;
 567};
 568
 569static inline u64 ZIP_DBG_COREX_STA(u64 param1)
 570{
 571        if (param1 <= 1)
 572                return 0x0680ull + (param1 & 1) * 0x8ull;
 573        pr_err("ZIP_DBG_COREX_STA: %llu\n", param1);
 574        return 0;
 575}
 576
 577/**
 578 * union zip_dbg_quex_sta - Represets registers that reflect status of the zip
 579 * instruction queues.
 580 *
 581 * They are for debug use only.
 582 */
 583union zip_dbg_quex_sta {
 584        u64 u_reg64;
 585        struct zip_dbg_quex_sta_s {
 586#if defined(__BIG_ENDIAN_BITFIELD)
 587                u64 busy                        : 1;
 588                u64 reserved_56_62              : 7;
 589                u64 rqwc                        : 24;
 590                u64 nii                         : 32;
 591#elif defined(__LITTLE_ENDIAN_BITFIELD)
 592                u64 nii                         : 32;
 593                u64 rqwc                        : 24;
 594                u64 reserved_56_62              : 7;
 595                u64 busy                        : 1;
 596#endif
 597        } s;
 598};
 599
 600static inline u64 ZIP_DBG_QUEX_STA(u64 param1)
 601{
 602        if (param1 <= 7)
 603                return 0x1800ull + (param1 & 7) * 0x8ull;
 604        pr_err("ZIP_DBG_QUEX_STA: %llu\n", param1);
 605        return 0;
 606}
 607
 608/**
 609 * union zip_ecc_ctl - Represents the register that enables ECC for each
 610 * individual internal memory that requires ECC.
 611 *
 612 * For debug purpose, it can also flip one or two bits in the ECC data.
 613 */
 614union zip_ecc_ctl {
 615        u64 u_reg64;
 616        struct zip_ecc_ctl_s {
 617#if defined(__BIG_ENDIAN_BITFIELD)
 618                u64 reserved_19_63              : 45;
 619                u64 vmem_cdis                   : 1;
 620                u64 vmem_fs                     : 2;
 621                u64 reserved_15_15              : 1;
 622                u64 idf1_cdis                   : 1;
 623                u64 idf1_fs                     : 2;
 624                u64 reserved_11_11              : 1;
 625                u64 idf0_cdis                   : 1;
 626                u64 idf0_fs                     : 2;
 627                u64 reserved_7_7                : 1;
 628                u64 gspf_cdis                   : 1;
 629                u64 gspf_fs                     : 2;
 630                u64 reserved_3_3                : 1;
 631                u64 iqf_cdis                    : 1;
 632                u64 iqf_fs                      : 2;
 633#elif defined(__LITTLE_ENDIAN_BITFIELD)
 634                u64 iqf_fs                      : 2;
 635                u64 iqf_cdis                    : 1;
 636                u64 reserved_3_3                : 1;
 637                u64 gspf_fs                     : 2;
 638                u64 gspf_cdis                   : 1;
 639                u64 reserved_7_7                : 1;
 640                u64 idf0_fs                     : 2;
 641                u64 idf0_cdis                   : 1;
 642                u64 reserved_11_11              : 1;
 643                u64 idf1_fs                     : 2;
 644                u64 idf1_cdis                   : 1;
 645                u64 reserved_15_15              : 1;
 646                u64 vmem_fs                     : 2;
 647                u64 vmem_cdis                   : 1;
 648                u64 reserved_19_63              : 45;
 649#endif
 650        } s;
 651};
 652
 653#define ZIP_ECC_CTL 0x0568ull
 654
 655/* NCB - zip_ecce_ena_w1c */
 656union zip_ecce_ena_w1c {
 657        u64 u_reg64;
 658        struct zip_ecce_ena_w1c_s {
 659#if defined(__BIG_ENDIAN_BITFIELD)
 660                u64 reserved_37_63              : 27;
 661                u64 dbe                         : 5;
 662                u64 reserved_5_31               : 27;
 663                u64 sbe                         : 5;
 664#elif defined(__LITTLE_ENDIAN_BITFIELD)
 665                u64 sbe                         : 5;
 666                u64 reserved_5_31               : 27;
 667                u64 dbe                         : 5;
 668                u64 reserved_37_63              : 27;
 669#endif
 670        } s;
 671};
 672
 673#define ZIP_ECCE_ENA_W1C 0x0598ull
 674
 675/* NCB - zip_ecce_ena_w1s */
 676union zip_ecce_ena_w1s {
 677        u64 u_reg64;
 678        struct zip_ecce_ena_w1s_s {
 679#if defined(__BIG_ENDIAN_BITFIELD)
 680                u64 reserved_37_63              : 27;
 681                u64 dbe                         : 5;
 682                u64 reserved_5_31               : 27;
 683                u64 sbe                         : 5;
 684#elif defined(__LITTLE_ENDIAN_BITFIELD)
 685                u64 sbe                         : 5;
 686                u64 reserved_5_31               : 27;
 687                u64 dbe                         : 5;
 688                u64 reserved_37_63              : 27;
 689#endif
 690        } s;
 691};
 692
 693#define ZIP_ECCE_ENA_W1S 0x0590ull
 694
 695/**
 696 * union zip_ecce_int - Represents the register that contains the status of the
 697 * ECC interrupt sources.
 698 */
 699union zip_ecce_int {
 700        u64 u_reg64;
 701        struct zip_ecce_int_s {
 702#if defined(__BIG_ENDIAN_BITFIELD)
 703                u64 reserved_37_63              : 27;
 704                u64 dbe                         : 5;
 705                u64 reserved_5_31               : 27;
 706                u64 sbe                         : 5;
 707#elif defined(__LITTLE_ENDIAN_BITFIELD)
 708                u64 sbe                         : 5;
 709                u64 reserved_5_31               : 27;
 710                u64 dbe                         : 5;
 711                u64 reserved_37_63              : 27;
 712#endif
 713        } s;
 714};
 715
 716#define ZIP_ECCE_INT 0x0580ull
 717
 718/* NCB - zip_ecce_int_w1s */
 719union zip_ecce_int_w1s {
 720        u64 u_reg64;
 721        struct zip_ecce_int_w1s_s {
 722#if defined(__BIG_ENDIAN_BITFIELD)
 723                u64 reserved_37_63              : 27;
 724                u64 dbe                         : 5;
 725                u64 reserved_5_31               : 27;
 726                u64 sbe                         : 5;
 727#elif defined(__LITTLE_ENDIAN_BITFIELD)
 728                u64 sbe                         : 5;
 729                u64 reserved_5_31               : 27;
 730                u64 dbe                         : 5;
 731                u64 reserved_37_63              : 27;
 732#endif
 733        } s;
 734};
 735
 736#define ZIP_ECCE_INT_W1S 0x0588ull
 737
 738/* NCB - zip_fife_ena_w1c */
 739union zip_fife_ena_w1c {
 740        u64 u_reg64;
 741        struct zip_fife_ena_w1c_s {
 742#if defined(__BIG_ENDIAN_BITFIELD)
 743                u64 reserved_42_63              : 22;
 744                u64 asserts                     : 42;
 745#elif defined(__LITTLE_ENDIAN_BITFIELD)
 746                u64 asserts                     : 42;
 747                u64 reserved_42_63              : 22;
 748#endif
 749        } s;
 750};
 751
 752#define ZIP_FIFE_ENA_W1C 0x0090ull
 753
 754/* NCB - zip_fife_ena_w1s */
 755union zip_fife_ena_w1s {
 756        u64 u_reg64;
 757        struct zip_fife_ena_w1s_s {
 758#if defined(__BIG_ENDIAN_BITFIELD)
 759                u64 reserved_42_63              : 22;
 760                u64 asserts                     : 42;
 761#elif defined(__LITTLE_ENDIAN_BITFIELD)
 762                u64 asserts                     : 42;
 763                u64 reserved_42_63              : 22;
 764#endif
 765        } s;
 766};
 767
 768#define ZIP_FIFE_ENA_W1S 0x0088ull
 769
 770/* NCB - zip_fife_int */
 771union zip_fife_int {
 772        u64 u_reg64;
 773        struct zip_fife_int_s {
 774#if defined(__BIG_ENDIAN_BITFIELD)
 775                u64 reserved_42_63              : 22;
 776                u64 asserts                     : 42;
 777#elif defined(__LITTLE_ENDIAN_BITFIELD)
 778                u64 asserts                     : 42;
 779                u64 reserved_42_63              : 22;
 780#endif
 781        } s;
 782};
 783
 784#define ZIP_FIFE_INT 0x0078ull
 785
 786/* NCB - zip_fife_int_w1s */
 787union zip_fife_int_w1s {
 788        u64 u_reg64;
 789        struct zip_fife_int_w1s_s {
 790#if defined(__BIG_ENDIAN_BITFIELD)
 791                u64 reserved_42_63              : 22;
 792                u64 asserts                     : 42;
 793#elif defined(__LITTLE_ENDIAN_BITFIELD)
 794                u64 asserts                     : 42;
 795                u64 reserved_42_63              : 22;
 796#endif
 797        } s;
 798};
 799
 800#define ZIP_FIFE_INT_W1S 0x0080ull
 801
 802/**
 803 * union zip_msix_pbax - Represents the register that is the MSI-X PBA table
 804 *
 805 * The bit number is indexed by the ZIP_INT_VEC_E enumeration.
 806 */
 807union zip_msix_pbax {
 808        u64 u_reg64;
 809        struct zip_msix_pbax_s {
 810#if defined(__BIG_ENDIAN_BITFIELD)
 811                u64 pend                        : 64;
 812#elif defined(__LITTLE_ENDIAN_BITFIELD)
 813                u64 pend                        : 64;
 814#endif
 815        } s;
 816};
 817
 818static inline u64 ZIP_MSIX_PBAX(u64 param1)
 819{
 820        if (param1 == 0)
 821                return 0x0000838000FF0000ull;
 822        pr_err("ZIP_MSIX_PBAX: %llu\n", param1);
 823        return 0;
 824}
 825
 826/**
 827 * union zip_msix_vecx_addr - Represents the register that is the MSI-X vector
 828 * table, indexed by the ZIP_INT_VEC_E enumeration.
 829 */
 830union zip_msix_vecx_addr {
 831        u64 u_reg64;
 832        struct zip_msix_vecx_addr_s {
 833#if defined(__BIG_ENDIAN_BITFIELD)
 834                u64 reserved_49_63              : 15;
 835                u64 addr                        : 47;
 836                u64 reserved_1_1                : 1;
 837                u64 secvec                      : 1;
 838#elif defined(__LITTLE_ENDIAN_BITFIELD)
 839                u64 secvec                      : 1;
 840                u64 reserved_1_1                : 1;
 841                u64 addr                        : 47;
 842                u64 reserved_49_63              : 15;
 843#endif
 844        } s;
 845};
 846
 847static inline u64 ZIP_MSIX_VECX_ADDR(u64 param1)
 848{
 849        if (param1 <= 17)
 850                return 0x0000838000F00000ull + (param1 & 31) * 0x10ull;
 851        pr_err("ZIP_MSIX_VECX_ADDR: %llu\n", param1);
 852        return 0;
 853}
 854
 855/**
 856 * union zip_msix_vecx_ctl - Represents the register that is the MSI-X vector
 857 * table, indexed by the ZIP_INT_VEC_E enumeration.
 858 */
 859union zip_msix_vecx_ctl {
 860        u64 u_reg64;
 861        struct zip_msix_vecx_ctl_s {
 862#if defined(__BIG_ENDIAN_BITFIELD)
 863                u64 reserved_33_63              : 31;
 864                u64 mask                        : 1;
 865                u64 reserved_20_31              : 12;
 866                u64 data                        : 20;
 867#elif defined(__LITTLE_ENDIAN_BITFIELD)
 868                u64 data                        : 20;
 869                u64 reserved_20_31              : 12;
 870                u64 mask                        : 1;
 871                u64 reserved_33_63              : 31;
 872#endif
 873        } s;
 874};
 875
 876static inline u64 ZIP_MSIX_VECX_CTL(u64 param1)
 877{
 878        if (param1 <= 17)
 879                return 0x0000838000F00008ull + (param1 & 31) * 0x10ull;
 880        pr_err("ZIP_MSIX_VECX_CTL: %llu\n", param1);
 881        return 0;
 882}
 883
 884/**
 885 * union zip_quex_done - Represents the registers that contain the per-queue
 886 * instruction done count.
 887 */
 888union zip_quex_done {
 889        u64 u_reg64;
 890        struct zip_quex_done_s {
 891#if defined(__BIG_ENDIAN_BITFIELD)
 892                u64 reserved_20_63              : 44;
 893                u64 done                        : 20;
 894#elif defined(__LITTLE_ENDIAN_BITFIELD)
 895                u64 done                        : 20;
 896                u64 reserved_20_63              : 44;
 897#endif
 898        } s;
 899};
 900
 901static inline u64 ZIP_QUEX_DONE(u64 param1)
 902{
 903        if (param1 <= 7)
 904                return 0x2000ull + (param1 & 7) * 0x8ull;
 905        pr_err("ZIP_QUEX_DONE: %llu\n", param1);
 906        return 0;
 907}
 908
 909/**
 910 * union zip_quex_done_ack - Represents the registers on write to which will
 911 * decrement the per-queue instructiona done count.
 912 */
 913union zip_quex_done_ack {
 914        u64 u_reg64;
 915        struct zip_quex_done_ack_s {
 916#if defined(__BIG_ENDIAN_BITFIELD)
 917                u64 reserved_20_63              : 44;
 918                u64 done_ack                    : 20;
 919#elif defined(__LITTLE_ENDIAN_BITFIELD)
 920                u64 done_ack                    : 20;
 921                u64 reserved_20_63              : 44;
 922#endif
 923        } s;
 924};
 925
 926static inline u64 ZIP_QUEX_DONE_ACK(u64 param1)
 927{
 928        if (param1 <= 7)
 929                return 0x2200ull + (param1 & 7) * 0x8ull;
 930        pr_err("ZIP_QUEX_DONE_ACK: %llu\n", param1);
 931        return 0;
 932}
 933
 934/**
 935 * union zip_quex_done_ena_w1c - Represents the register which when written
 936 * 1 to will disable the DONEINT interrupt for the queue.
 937 */
 938union zip_quex_done_ena_w1c {
 939        u64 u_reg64;
 940        struct zip_quex_done_ena_w1c_s {
 941#if defined(__BIG_ENDIAN_BITFIELD)
 942                u64 reserved_1_63               : 63;
 943                u64 done_ena                    : 1;
 944#elif defined(__LITTLE_ENDIAN_BITFIELD)
 945                u64 done_ena                    : 1;
 946                u64 reserved_1_63               : 63;
 947#endif
 948        } s;
 949};
 950
 951static inline u64 ZIP_QUEX_DONE_ENA_W1C(u64 param1)
 952{
 953        if (param1 <= 7)
 954                return 0x2600ull + (param1 & 7) * 0x8ull;
 955        pr_err("ZIP_QUEX_DONE_ENA_W1C: %llu\n", param1);
 956        return 0;
 957}
 958
 959/**
 960 * union zip_quex_done_ena_w1s - Represents the register that when written 1 to
 961 * will enable the DONEINT interrupt for the queue.
 962 */
 963union zip_quex_done_ena_w1s {
 964        u64 u_reg64;
 965        struct zip_quex_done_ena_w1s_s {
 966#if defined(__BIG_ENDIAN_BITFIELD)
 967                u64 reserved_1_63               : 63;
 968                u64 done_ena                    : 1;
 969#elif defined(__LITTLE_ENDIAN_BITFIELD)
 970                u64 done_ena                    : 1;
 971                u64 reserved_1_63               : 63;
 972#endif
 973        } s;
 974};
 975
 976static inline u64 ZIP_QUEX_DONE_ENA_W1S(u64 param1)
 977{
 978        if (param1 <= 7)
 979                return 0x2400ull + (param1 & 7) * 0x8ull;
 980        pr_err("ZIP_QUEX_DONE_ENA_W1S: %llu\n", param1);
 981        return 0;
 982}
 983
 984/**
 985 * union zip_quex_done_wait - Represents the register that specifies the per
 986 * queue interrupt coalescing settings.
 987 */
 988union zip_quex_done_wait {
 989        u64 u_reg64;
 990        struct zip_quex_done_wait_s {
 991#if defined(__BIG_ENDIAN_BITFIELD)
 992                u64 reserved_48_63              : 16;
 993                u64 time_wait                   : 16;
 994                u64 reserved_20_31              : 12;
 995                u64 num_wait                    : 20;
 996#elif defined(__LITTLE_ENDIAN_BITFIELD)
 997                u64 num_wait                    : 20;
 998                u64 reserved_20_31              : 12;
 999                u64 time_wait                   : 16;
1000                u64 reserved_48_63              : 16;
1001#endif
1002        } s;
1003};
1004
1005static inline u64 ZIP_QUEX_DONE_WAIT(u64 param1)
1006{
1007        if (param1 <= 7)
1008                return 0x2800ull + (param1 & 7) * 0x8ull;
1009        pr_err("ZIP_QUEX_DONE_WAIT: %llu\n", param1);
1010        return 0;
1011}
1012
1013/**
1014 * union zip_quex_doorbell - Represents doorbell registers for the ZIP
1015 * instruction queues.
1016 */
1017union zip_quex_doorbell {
1018        u64 u_reg64;
1019        struct zip_quex_doorbell_s {
1020#if defined(__BIG_ENDIAN_BITFIELD)
1021                u64 reserved_20_63              : 44;
1022                u64 dbell_cnt                   : 20;
1023#elif defined(__LITTLE_ENDIAN_BITFIELD)
1024                u64 dbell_cnt                   : 20;
1025                u64 reserved_20_63              : 44;
1026#endif
1027        } s;
1028};
1029
1030static inline u64 ZIP_QUEX_DOORBELL(u64 param1)
1031{
1032        if (param1 <= 7)
1033                return 0x4000ull + (param1 & 7) * 0x8ull;
1034        pr_err("ZIP_QUEX_DOORBELL: %llu\n", param1);
1035        return 0;
1036}
1037
1038union zip_quex_err_ena_w1c {
1039        u64 u_reg64;
1040        struct zip_quex_err_ena_w1c_s {
1041#if defined(__BIG_ENDIAN_BITFIELD)
1042                u64 reserved_5_63               : 59;
1043                u64 mdbe                        : 1;
1044                u64 nwrp                        : 1;
1045                u64 nrrp                        : 1;
1046                u64 irde                        : 1;
1047                u64 dovf                        : 1;
1048#elif defined(__LITTLE_ENDIAN_BITFIELD)
1049                u64 dovf                        : 1;
1050                u64 irde                        : 1;
1051                u64 nrrp                        : 1;
1052                u64 nwrp                        : 1;
1053                u64 mdbe                        : 1;
1054                u64 reserved_5_63               : 59;
1055#endif
1056        } s;
1057};
1058
1059static inline u64 ZIP_QUEX_ERR_ENA_W1C(u64 param1)
1060{
1061        if (param1 <= 7)
1062                return 0x3600ull + (param1 & 7) * 0x8ull;
1063        pr_err("ZIP_QUEX_ERR_ENA_W1C: %llu\n", param1);
1064        return 0;
1065}
1066
1067union zip_quex_err_ena_w1s {
1068        u64 u_reg64;
1069        struct zip_quex_err_ena_w1s_s {
1070#if defined(__BIG_ENDIAN_BITFIELD)
1071                u64 reserved_5_63               : 59;
1072                u64 mdbe                        : 1;
1073                u64 nwrp                        : 1;
1074                u64 nrrp                        : 1;
1075                u64 irde                        : 1;
1076                u64 dovf                        : 1;
1077#elif defined(__LITTLE_ENDIAN_BITFIELD)
1078                u64 dovf                        : 1;
1079                u64 irde                        : 1;
1080                u64 nrrp                        : 1;
1081                u64 nwrp                        : 1;
1082                u64 mdbe                        : 1;
1083                u64 reserved_5_63               : 59;
1084#endif
1085        } s;
1086};
1087
1088static inline u64 ZIP_QUEX_ERR_ENA_W1S(u64 param1)
1089{
1090        if (param1 <= 7)
1091                return 0x3400ull + (param1 & 7) * 0x8ull;
1092        pr_err("ZIP_QUEX_ERR_ENA_W1S: %llu\n", param1);
1093        return 0;
1094}
1095
1096/**
1097 * union zip_quex_err_int - Represents registers that contain the per-queue
1098 * error interrupts.
1099 */
1100union zip_quex_err_int {
1101        u64 u_reg64;
1102        struct zip_quex_err_int_s {
1103#if defined(__BIG_ENDIAN_BITFIELD)
1104                u64 reserved_5_63               : 59;
1105                u64 mdbe                        : 1;
1106                u64 nwrp                        : 1;
1107                u64 nrrp                        : 1;
1108                u64 irde                        : 1;
1109                u64 dovf                        : 1;
1110#elif defined(__LITTLE_ENDIAN_BITFIELD)
1111                u64 dovf                        : 1;
1112                u64 irde                        : 1;
1113                u64 nrrp                        : 1;
1114                u64 nwrp                        : 1;
1115                u64 mdbe                        : 1;
1116                u64 reserved_5_63               : 59;
1117#endif
1118        } s;
1119};
1120
1121static inline u64 ZIP_QUEX_ERR_INT(u64 param1)
1122{
1123        if (param1 <= 7)
1124                return 0x3000ull + (param1 & 7) * 0x8ull;
1125        pr_err("ZIP_QUEX_ERR_INT: %llu\n", param1);
1126        return 0;
1127}
1128
1129/* NCB - zip_que#_err_int_w1s */
1130union zip_quex_err_int_w1s {
1131        u64 u_reg64;
1132        struct zip_quex_err_int_w1s_s {
1133#if defined(__BIG_ENDIAN_BITFIELD)
1134                u64 reserved_5_63               : 59;
1135                u64 mdbe                        : 1;
1136                u64 nwrp                        : 1;
1137                u64 nrrp                        : 1;
1138                u64 irde                        : 1;
1139                u64 dovf                        : 1;
1140#elif defined(__LITTLE_ENDIAN_BITFIELD)
1141                u64 dovf                        : 1;
1142                u64 irde                        : 1;
1143                u64 nrrp                        : 1;
1144                u64 nwrp                        : 1;
1145                u64 mdbe                        : 1;
1146                u64 reserved_5_63               : 59;
1147#endif
1148        } s;
1149};
1150
1151static inline u64 ZIP_QUEX_ERR_INT_W1S(u64 param1)
1152{
1153        if (param1 <= 7)
1154                return 0x3200ull + (param1 & 7) * 0x8ull;
1155        pr_err("ZIP_QUEX_ERR_INT_W1S: %llu\n", param1);
1156        return 0;
1157}
1158
1159/**
1160 * union zip_quex_gcfg - Represents the registers that reflect status of the
1161 * zip instruction queues,debug use only.
1162 */
1163union zip_quex_gcfg {
1164        u64 u_reg64;
1165        struct zip_quex_gcfg_s {
1166#if defined(__BIG_ENDIAN_BITFIELD)
1167                u64 reserved_4_63               : 60;
1168                u64 iqb_ldwb                    : 1;
1169                u64 cbw_sty                     : 1;
1170                u64 l2ld_cmd                    : 2;
1171#elif defined(__LITTLE_ENDIAN_BITFIELD)
1172                u64 l2ld_cmd                    : 2;
1173                u64 cbw_sty                     : 1;
1174                u64 iqb_ldwb                    : 1;
1175                u64 reserved_4_63               : 60;
1176#endif
1177        } s;
1178};
1179
1180static inline u64 ZIP_QUEX_GCFG(u64 param1)
1181{
1182        if (param1 <= 7)
1183                return 0x1A00ull + (param1 & 7) * 0x8ull;
1184        pr_err("ZIP_QUEX_GCFG: %llu\n", param1);
1185        return 0;
1186}
1187
1188/**
1189 * union zip_quex_map - Represents the registers that control how each
1190 * instruction queue maps to zip cores.
1191 */
1192union zip_quex_map {
1193        u64 u_reg64;
1194        struct zip_quex_map_s {
1195#if defined(__BIG_ENDIAN_BITFIELD)
1196                u64 reserved_2_63               : 62;
1197                u64 zce                         : 2;
1198#elif defined(__LITTLE_ENDIAN_BITFIELD)
1199                u64 zce                         : 2;
1200                u64 reserved_2_63               : 62;
1201#endif
1202        } s;
1203};
1204
1205static inline u64 ZIP_QUEX_MAP(u64 param1)
1206{
1207        if (param1 <= 7)
1208                return 0x1400ull + (param1 & 7) * 0x8ull;
1209        pr_err("ZIP_QUEX_MAP: %llu\n", param1);
1210        return 0;
1211}
1212
1213/**
1214 * union zip_quex_sbuf_addr - Represents the registers that set the buffer
1215 * parameters for the instruction queues.
1216 *
1217 * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite
1218 * this register to effectively reset the command buffer state machine.
1219 * These registers must be programmed after SW programs the corresponding
1220 * ZIP_QUE(0..7)_SBUF_CTL.
1221 */
1222union zip_quex_sbuf_addr {
1223        u64 u_reg64;
1224        struct zip_quex_sbuf_addr_s {
1225#if defined(__BIG_ENDIAN_BITFIELD)
1226                u64 reserved_49_63              : 15;
1227                u64 ptr                         : 42;
1228                u64 off                         : 7;
1229#elif defined(__LITTLE_ENDIAN_BITFIELD)
1230                u64 off                         : 7;
1231                u64 ptr                         : 42;
1232                u64 reserved_49_63              : 15;
1233#endif
1234        } s;
1235};
1236
1237static inline u64 ZIP_QUEX_SBUF_ADDR(u64 param1)
1238{
1239        if (param1 <= 7)
1240                return 0x1000ull + (param1 & 7) * 0x8ull;
1241        pr_err("ZIP_QUEX_SBUF_ADDR: %llu\n", param1);
1242        return 0;
1243}
1244
1245/**
1246 * union zip_quex_sbuf_ctl - Represents the registers that set the buffer
1247 * parameters for the instruction queues.
1248 *
1249 * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite
1250 * this register to effectively reset the command buffer state machine.
1251 * These registers must be programmed before SW programs the corresponding
1252 * ZIP_QUE(0..7)_SBUF_ADDR.
1253 */
1254union zip_quex_sbuf_ctl {
1255        u64 u_reg64;
1256        struct zip_quex_sbuf_ctl_s {
1257#if defined(__BIG_ENDIAN_BITFIELD)
1258                u64 reserved_45_63              : 19;
1259                u64 size                        : 13;
1260                u64 inst_be                     : 1;
1261                u64 reserved_24_30              : 7;
1262                u64 stream_id                   : 8;
1263                u64 reserved_12_15              : 4;
1264                u64 aura                        : 12;
1265#elif defined(__LITTLE_ENDIAN_BITFIELD)
1266                u64 aura                        : 12;
1267                u64 reserved_12_15              : 4;
1268                u64 stream_id                   : 8;
1269                u64 reserved_24_30              : 7;
1270                u64 inst_be                     : 1;
1271                u64 size                        : 13;
1272                u64 reserved_45_63              : 19;
1273#endif
1274        } s;
1275};
1276
1277static inline u64 ZIP_QUEX_SBUF_CTL(u64 param1)
1278{
1279        if (param1 <= 7)
1280                return 0x1200ull + (param1 & 7) * 0x8ull;
1281        pr_err("ZIP_QUEX_SBUF_CTL: %llu\n", param1);
1282        return 0;
1283}
1284
1285/**
1286 * union zip_que_ena - Represents queue enable register
1287 *
1288 * If a queue is disabled, ZIP_CTL stops fetching instructions from the queue.
1289 */
1290union zip_que_ena {
1291        u64 u_reg64;
1292        struct zip_que_ena_s {
1293#if defined(__BIG_ENDIAN_BITFIELD)
1294                u64 reserved_8_63               : 56;
1295                u64 ena                         : 8;
1296#elif defined(__LITTLE_ENDIAN_BITFIELD)
1297                u64 ena                         : 8;
1298                u64 reserved_8_63               : 56;
1299#endif
1300        } s;
1301};
1302
1303#define ZIP_QUE_ENA 0x0500ull
1304
1305/**
1306 * union zip_que_pri - Represents the register that defines the priority
1307 * between instruction queues.
1308 */
1309union zip_que_pri {
1310        u64 u_reg64;
1311        struct zip_que_pri_s {
1312#if defined(__BIG_ENDIAN_BITFIELD)
1313                u64 reserved_8_63               : 56;
1314                u64 pri                         : 8;
1315#elif defined(__LITTLE_ENDIAN_BITFIELD)
1316                u64 pri                         : 8;
1317                u64 reserved_8_63               : 56;
1318#endif
1319        } s;
1320};
1321
1322#define ZIP_QUE_PRI 0x0508ull
1323
1324/**
1325 * union zip_throttle - Represents the register that controls the maximum
1326 * number of in-flight X2I data fetch transactions.
1327 *
1328 * Writing 0 to this register causes the ZIP module to temporarily suspend NCB
1329 * accesses; it is not recommended for normal operation, but may be useful for
1330 * diagnostics.
1331 */
1332union zip_throttle {
1333        u64 u_reg64;
1334        struct zip_throttle_s {
1335#if defined(__BIG_ENDIAN_BITFIELD)
1336                u64 reserved_6_63               : 58;
1337                u64 ld_infl                     : 6;
1338#elif defined(__LITTLE_ENDIAN_BITFIELD)
1339                u64 ld_infl                     : 6;
1340                u64 reserved_6_63               : 58;
1341#endif
1342        } s;
1343};
1344
1345#define ZIP_THROTTLE 0x0010ull
1346
1347#endif /* _CSRS_ZIP__ */
1348