uboot/arch/arm/include/asm/arch-octeontx2/csrs/csrs-mio_emm.h
<<
>>
Prefs
   1/* SPDX-License-Identifier:    GPL-2.0
   2 *
   3 * Copyright (C) 2020 Marvell International Ltd.
   4 *
   5 * https://spdx.org/licenses
   6 */
   7#ifndef __CSRS_MIO_EMM_H__
   8#define __CSRS_MIO_EMM_H__
   9
  10/**
  11 * @file
  12 *
  13 * Configuration and status register (CSR) address and type definitions for
  14 * MIO_EMM.
  15 *
  16 * This file is auto generated.  Do not edit.
  17 *
  18 */
  19
  20/**
  21 * Enumeration mio_emm_bar_e
  22 *
  23 * eMMC Base Address Register Enumeration Enumerates the base address
  24 * registers.
  25 */
  26#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR0_CN8 (0x87e009000000ll)
  27#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR0_CN8_SIZE 0x800000ull
  28#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR0_CN9 (0x87e009000000ll)
  29#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR0_CN9_SIZE 0x10000ull
  30#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR4 (0x87e009f00000ll)
  31#define MIO_EMM_BAR_E_MIO_EMM_PF_BAR4_SIZE 0x100000ull
  32
  33/**
  34 * Enumeration mio_emm_int_vec_e
  35 *
  36 * eMMC MSI-X Vector Enumeration Enumerates the MSI-X interrupt vectors.
  37 */
  38#define MIO_EMM_INT_VEC_E_DMA_INT_DONE (8)
  39#define MIO_EMM_INT_VEC_E_DMA_INT_FIFO (7)
  40#define MIO_EMM_INT_VEC_E_EMM_BUF_DONE (0)
  41#define MIO_EMM_INT_VEC_E_EMM_CMD_DONE (1)
  42#define MIO_EMM_INT_VEC_E_EMM_CMD_ERR (3)
  43#define MIO_EMM_INT_VEC_E_EMM_DMA_DONE (2)
  44#define MIO_EMM_INT_VEC_E_EMM_DMA_ERR (4)
  45#define MIO_EMM_INT_VEC_E_EMM_SWITCH_DONE (5)
  46#define MIO_EMM_INT_VEC_E_EMM_SWITCH_ERR (6)
  47#define MIO_EMM_INT_VEC_E_NCB_FLT (9)
  48#define MIO_EMM_INT_VEC_E_NCB_RAS (0xa)
  49
  50/**
  51 * Register (RSL) mio_emm_access_wdog
  52 *
  53 * eMMC Access Watchdog Register
  54 */
  55union mio_emm_access_wdog {
  56        u64 u;
  57        struct mio_emm_access_wdog_s {
  58                u64 clk_cnt                          : 32;
  59                u64 reserved_32_63                   : 32;
  60        } s;
  61        /* struct mio_emm_access_wdog_s cn; */
  62};
  63
  64static inline u64 MIO_EMM_ACCESS_WDOG(void)
  65        __attribute__ ((pure, always_inline));
  66static inline u64 MIO_EMM_ACCESS_WDOG(void)
  67{
  68        return 0x20f0;
  69}
  70
  71/**
  72 * Register (RSL) mio_emm_buf_dat
  73 *
  74 * eMMC Data Buffer Access Register
  75 */
  76union mio_emm_buf_dat {
  77        u64 u;
  78        struct mio_emm_buf_dat_s {
  79                u64 dat                              : 64;
  80        } s;
  81        /* struct mio_emm_buf_dat_s cn; */
  82};
  83
  84static inline u64 MIO_EMM_BUF_DAT(void)
  85        __attribute__ ((pure, always_inline));
  86static inline u64 MIO_EMM_BUF_DAT(void)
  87{
  88        return 0x20e8;
  89}
  90
  91/**
  92 * Register (RSL) mio_emm_buf_idx
  93 *
  94 * eMMC Data Buffer Address Register
  95 */
  96union mio_emm_buf_idx {
  97        u64 u;
  98        struct mio_emm_buf_idx_s {
  99                u64 offset                           : 6;
 100                u64 buf_num                          : 1;
 101                u64 reserved_7_15                    : 9;
 102                u64 inc                              : 1;
 103                u64 reserved_17_63                   : 47;
 104        } s;
 105        /* struct mio_emm_buf_idx_s cn; */
 106};
 107
 108static inline u64 MIO_EMM_BUF_IDX(void)
 109        __attribute__ ((pure, always_inline));
 110static inline u64 MIO_EMM_BUF_IDX(void)
 111{
 112        return 0x20e0;
 113}
 114
 115/**
 116 * Register (RSL) mio_emm_calb
 117 *
 118 * eMMC Calbration Register This register initiates delay line
 119 * characterization.
 120 */
 121union mio_emm_calb {
 122        u64 u;
 123        struct mio_emm_calb_s {
 124                u64 start                            : 1;
 125                u64 reserved_1_63                    : 63;
 126        } s;
 127        /* struct mio_emm_calb_s cn; */
 128};
 129
 130static inline u64 MIO_EMM_CALB(void)
 131        __attribute__ ((pure, always_inline));
 132static inline u64 MIO_EMM_CALB(void)
 133{
 134        return 0x20c0;
 135}
 136
 137/**
 138 * Register (RSL) mio_emm_cfg
 139 *
 140 * eMMC Configuration Register
 141 */
 142union mio_emm_cfg {
 143        u64 u;
 144        struct mio_emm_cfg_s {
 145                u64 bus_ena                          : 4;
 146                u64 reserved_4_63                    : 60;
 147        } s;
 148        /* struct mio_emm_cfg_s cn; */
 149};
 150
 151static inline u64 MIO_EMM_CFG(void)
 152        __attribute__ ((pure, always_inline));
 153static inline u64 MIO_EMM_CFG(void)
 154{
 155        return 0x2000;
 156}
 157
 158/**
 159 * Register (RSL) mio_emm_cmd
 160 *
 161 * eMMC Command Register
 162 */
 163union mio_emm_cmd {
 164        u64 u;
 165        struct mio_emm_cmd_s {
 166                u64 arg                              : 32;
 167                u64 cmd_idx                          : 6;
 168                u64 rtype_xor                        : 3;
 169                u64 ctype_xor                        : 2;
 170                u64 reserved_43_48                   : 6;
 171                u64 offset                           : 6;
 172                u64 dbuf                             : 1;
 173                u64 reserved_56_58                   : 3;
 174                u64 cmd_val                          : 1;
 175                u64 bus_id                           : 2;
 176                u64 skip_busy                        : 1;
 177                u64 reserved_63                      : 1;
 178        } s;
 179        /* struct mio_emm_cmd_s cn; */
 180};
 181
 182static inline u64 MIO_EMM_CMD(void)
 183        __attribute__ ((pure, always_inline));
 184static inline u64 MIO_EMM_CMD(void)
 185{
 186        return 0x2058;
 187}
 188
 189/**
 190 * Register (RSL) mio_emm_comp
 191 *
 192 * eMMC Compensation Register
 193 */
 194union mio_emm_comp {
 195        u64 u;
 196        struct mio_emm_comp_s {
 197                u64 nctl                             : 3;
 198                u64 reserved_3_7                     : 5;
 199                u64 pctl                             : 3;
 200                u64 reserved_11_63                   : 53;
 201        } s;
 202        /* struct mio_emm_comp_s cn; */
 203};
 204
 205static inline u64 MIO_EMM_COMP(void)
 206        __attribute__ ((pure, always_inline));
 207static inline u64 MIO_EMM_COMP(void)
 208{
 209        return 0x2040;
 210}
 211
 212/**
 213 * Register (RSL) mio_emm_debug
 214 *
 215 * eMMC Debug Register
 216 */
 217union mio_emm_debug {
 218        u64 u;
 219        struct mio_emm_debug_s {
 220                u64 clk_on                           : 1;
 221                u64 reserved_1_7                     : 7;
 222                u64 cmd_sm                           : 4;
 223                u64 data_sm                          : 4;
 224                u64 dma_sm                           : 4;
 225                u64 emmc_clk_disable                 : 1;
 226                u64 rdsync_rst                       : 1;
 227                u64 reserved_22_63                   : 42;
 228        } s;
 229        struct mio_emm_debug_cn96xxp1 {
 230                u64 clk_on                           : 1;
 231                u64 reserved_1_7                     : 7;
 232                u64 cmd_sm                           : 4;
 233                u64 data_sm                          : 4;
 234                u64 dma_sm                           : 4;
 235                u64 reserved_20_63                   : 44;
 236        } cn96xxp1;
 237        /* struct mio_emm_debug_s cn96xxp3; */
 238        /* struct mio_emm_debug_cn96xxp1 cnf95xx; */
 239};
 240
 241static inline u64 MIO_EMM_DEBUG(void)
 242        __attribute__ ((pure, always_inline));
 243static inline u64 MIO_EMM_DEBUG(void)
 244{
 245        return 0x20f8;
 246}
 247
 248/**
 249 * Register (RSL) mio_emm_dma
 250 *
 251 * eMMC External DMA Configuration Register
 252 */
 253union mio_emm_dma {
 254        u64 u;
 255        struct mio_emm_dma_s {
 256                u64 card_addr                        : 32;
 257                u64 block_cnt                        : 16;
 258                u64 multi                            : 1;
 259                u64 rw                               : 1;
 260                u64 rel_wr                           : 1;
 261                u64 thres                            : 6;
 262                u64 dat_null                         : 1;
 263                u64 sector                           : 1;
 264                u64 dma_val                          : 1;
 265                u64 bus_id                           : 2;
 266                u64 skip_busy                        : 1;
 267                u64 extra_args                       : 1;
 268        } s;
 269        struct mio_emm_dma_cn8 {
 270                u64 card_addr                        : 32;
 271                u64 block_cnt                        : 16;
 272                u64 multi                            : 1;
 273                u64 rw                               : 1;
 274                u64 rel_wr                           : 1;
 275                u64 thres                            : 6;
 276                u64 dat_null                         : 1;
 277                u64 sector                           : 1;
 278                u64 dma_val                          : 1;
 279                u64 bus_id                           : 2;
 280                u64 skip_busy                        : 1;
 281                u64 reserved_63                      : 1;
 282        } cn8;
 283        struct mio_emm_dma_cn9 {
 284                u64 card_addr                        : 32;
 285                u64 block_cnt                        : 16;
 286                u64 multi                            : 1;
 287                u64 rw                               : 1;
 288                u64 reserved_50                      : 1;
 289                u64 thres                            : 6;
 290                u64 dat_null                         : 1;
 291                u64 sector                           : 1;
 292                u64 dma_val                          : 1;
 293                u64 bus_id                           : 2;
 294                u64 skip_busy                        : 1;
 295                u64 extra_args                       : 1;
 296        } cn9;
 297};
 298
 299static inline u64 MIO_EMM_DMA(void)
 300        __attribute__ ((pure, always_inline));
 301static inline u64 MIO_EMM_DMA(void)
 302{
 303        return 0x2050;
 304}
 305
 306/**
 307 * Register (RSL) mio_emm_dma_adr
 308 *
 309 * eMMC DMA Address Register This register sets the address for eMMC/SD
 310 * flash transfers to/from memory. Sixty-four-bit operations must be used
 311 * to access this register. This register is updated by the DMA hardware
 312 * and can be reloaded by the values placed in the MIO_EMM_DMA_FIFO_ADR.
 313 */
 314union mio_emm_dma_adr {
 315        u64 u;
 316        struct mio_emm_dma_adr_s {
 317                u64 adr                              : 53;
 318                u64 reserved_53_63                   : 11;
 319        } s;
 320        struct mio_emm_dma_adr_cn8 {
 321                u64 adr                              : 49;
 322                u64 reserved_49_63                   : 15;
 323        } cn8;
 324        /* struct mio_emm_dma_adr_s cn9; */
 325};
 326
 327static inline u64 MIO_EMM_DMA_ADR(void)
 328        __attribute__ ((pure, always_inline));
 329static inline u64 MIO_EMM_DMA_ADR(void)
 330{
 331        return 0x188;
 332}
 333
 334/**
 335 * Register (RSL) mio_emm_dma_arg
 336 *
 337 * eMMC External DMA Extra Arguments Register
 338 */
 339union mio_emm_dma_arg {
 340        u64 u;
 341        struct mio_emm_dma_arg_s {
 342                u64 cmd23_args                       : 8;
 343                u64 force_pgm                        : 1;
 344                u64 context_id                       : 4;
 345                u64 tag_req                          : 1;
 346                u64 pack_cmd                         : 1;
 347                u64 rel_wr                           : 1;
 348                u64 alt_cmd                          : 6;
 349                u64 skip_blk_cmd                     : 1;
 350                u64 reserved_23_31                   : 9;
 351                u64 alt_cmd_arg                      : 32;
 352        } s;
 353        /* struct mio_emm_dma_arg_s cn; */
 354};
 355
 356static inline u64 MIO_EMM_DMA_ARG(void)
 357        __attribute__ ((pure, always_inline));
 358static inline u64 MIO_EMM_DMA_ARG(void)
 359{
 360        return 0x2090;
 361}
 362
 363/**
 364 * Register (RSL) mio_emm_dma_cfg
 365 *
 366 * eMMC DMA Configuration Register This register controls the internal
 367 * DMA engine used with the eMMC/SD flash controller. Sixty- four-bit
 368 * operations must be used to access this register. This register is
 369 * updated by the hardware DMA engine and can also be reloaded by writes
 370 * to the MIO_EMM_DMA_FIFO_CMD register.
 371 */
 372union mio_emm_dma_cfg {
 373        u64 u;
 374        struct mio_emm_dma_cfg_s {
 375                u64 reserved_0_35                    : 36;
 376                u64 size                             : 20;
 377                u64 endian                           : 1;
 378                u64 swap8                            : 1;
 379                u64 swap16                           : 1;
 380                u64 swap32                           : 1;
 381                u64 reserved_60                      : 1;
 382                u64 clr                              : 1;
 383                u64 rw                               : 1;
 384                u64 en                               : 1;
 385        } s;
 386        /* struct mio_emm_dma_cfg_s cn; */
 387};
 388
 389static inline u64 MIO_EMM_DMA_CFG(void)
 390        __attribute__ ((pure, always_inline));
 391static inline u64 MIO_EMM_DMA_CFG(void)
 392{
 393        return 0x180;
 394}
 395
 396/**
 397 * Register (RSL) mio_emm_dma_fifo_adr
 398 *
 399 * eMMC Internal DMA FIFO Address Register This register specifies the
 400 * internal address that is loaded into the eMMC internal DMA FIFO. The
 401 * FIFO is used to queue up operations for the
 402 * MIO_EMM_DMA_CFG/MIO_EMM_DMA_ADR when the DMA completes successfully.
 403 */
 404union mio_emm_dma_fifo_adr {
 405        u64 u;
 406        struct mio_emm_dma_fifo_adr_s {
 407                u64 reserved_0_2                     : 3;
 408                u64 adr                              : 50;
 409                u64 reserved_53_63                   : 11;
 410        } s;
 411        struct mio_emm_dma_fifo_adr_cn8 {
 412                u64 reserved_0_2                     : 3;
 413                u64 adr                              : 46;
 414                u64 reserved_49_63                   : 15;
 415        } cn8;
 416        /* struct mio_emm_dma_fifo_adr_s cn9; */
 417};
 418
 419static inline u64 MIO_EMM_DMA_FIFO_ADR(void)
 420        __attribute__ ((pure, always_inline));
 421static inline u64 MIO_EMM_DMA_FIFO_ADR(void)
 422{
 423        return 0x170;
 424}
 425
 426/**
 427 * Register (RSL) mio_emm_dma_fifo_cfg
 428 *
 429 * eMMC Internal DMA FIFO Configuration Register This register controls
 430 * DMA FIFO operations.
 431 */
 432union mio_emm_dma_fifo_cfg {
 433        u64 u;
 434        struct mio_emm_dma_fifo_cfg_s {
 435                u64 count                            : 5;
 436                u64 reserved_5_7                     : 3;
 437                u64 int_lvl                          : 5;
 438                u64 reserved_13_15                   : 3;
 439                u64 clr                              : 1;
 440                u64 reserved_17_63                   : 47;
 441        } s;
 442        /* struct mio_emm_dma_fifo_cfg_s cn; */
 443};
 444
 445static inline u64 MIO_EMM_DMA_FIFO_CFG(void)
 446        __attribute__ ((pure, always_inline));
 447static inline u64 MIO_EMM_DMA_FIFO_CFG(void)
 448{
 449        return 0x160;
 450}
 451
 452/**
 453 * Register (RSL) mio_emm_dma_fifo_cmd
 454 *
 455 * eMMC Internal DMA FIFO Command Register This register specifies a
 456 * command that is loaded into the eMMC internal DMA FIFO.  The FIFO is
 457 * used to queue up operations for the MIO_EMM_DMA_CFG/MIO_EMM_DMA_ADR
 458 * when the DMA completes successfully. Writes to this register store
 459 * both the MIO_EMM_DMA_FIFO_CMD and the MIO_EMM_DMA_FIFO_ADR contents
 460 * into the FIFO and increment the MIO_EMM_DMA_FIFO_CFG[COUNT] field.
 461 * Note: This register has a similar format to MIO_EMM_DMA_CFG with the
 462 * exception that the EN and CLR fields are absent. These are supported
 463 * in MIO_EMM_DMA_FIFO_CFG.
 464 */
 465union mio_emm_dma_fifo_cmd {
 466        u64 u;
 467        struct mio_emm_dma_fifo_cmd_s {
 468                u64 reserved_0_35                    : 36;
 469                u64 size                             : 20;
 470                u64 endian                           : 1;
 471                u64 swap8                            : 1;
 472                u64 swap16                           : 1;
 473                u64 swap32                           : 1;
 474                u64 intdis                           : 1;
 475                u64 reserved_61                      : 1;
 476                u64 rw                               : 1;
 477                u64 reserved_63                      : 1;
 478        } s;
 479        /* struct mio_emm_dma_fifo_cmd_s cn; */
 480};
 481
 482static inline u64 MIO_EMM_DMA_FIFO_CMD(void)
 483        __attribute__ ((pure, always_inline));
 484static inline u64 MIO_EMM_DMA_FIFO_CMD(void)
 485{
 486        return 0x178;
 487}
 488
 489/**
 490 * Register (RSL) mio_emm_dma_int
 491 *
 492 * eMMC DMA Interrupt Register Sixty-four-bit operations must be used to
 493 * access this register.
 494 */
 495union mio_emm_dma_int {
 496        u64 u;
 497        struct mio_emm_dma_int_s {
 498                u64 done                             : 1;
 499                u64 fifo                             : 1;
 500                u64 reserved_2_63                    : 62;
 501        } s;
 502        /* struct mio_emm_dma_int_s cn; */
 503};
 504
 505static inline u64 MIO_EMM_DMA_INT(void)
 506        __attribute__ ((pure, always_inline));
 507static inline u64 MIO_EMM_DMA_INT(void)
 508{
 509        return 0x190;
 510}
 511
 512/**
 513 * Register (RSL) mio_emm_dma_int_ena_w1c
 514 *
 515 * eMMC DMA Interrupt Enable Clear Register This register clears
 516 * interrupt enable bits.
 517 */
 518union mio_emm_dma_int_ena_w1c {
 519        u64 u;
 520        struct mio_emm_dma_int_ena_w1c_s {
 521                u64 done                             : 1;
 522                u64 fifo                             : 1;
 523                u64 reserved_2_63                    : 62;
 524        } s;
 525        /* struct mio_emm_dma_int_ena_w1c_s cn; */
 526};
 527
 528static inline u64 MIO_EMM_DMA_INT_ENA_W1C(void)
 529        __attribute__ ((pure, always_inline));
 530static inline u64 MIO_EMM_DMA_INT_ENA_W1C(void)
 531{
 532        return 0x1a8;
 533}
 534
 535/**
 536 * Register (RSL) mio_emm_dma_int_ena_w1s
 537 *
 538 * eMMC DMA Interrupt Enable Set Register This register sets interrupt
 539 * enable bits.
 540 */
 541union mio_emm_dma_int_ena_w1s {
 542        u64 u;
 543        struct mio_emm_dma_int_ena_w1s_s {
 544                u64 done                             : 1;
 545                u64 fifo                             : 1;
 546                u64 reserved_2_63                    : 62;
 547        } s;
 548        /* struct mio_emm_dma_int_ena_w1s_s cn; */
 549};
 550
 551static inline u64 MIO_EMM_DMA_INT_ENA_W1S(void)
 552        __attribute__ ((pure, always_inline));
 553static inline u64 MIO_EMM_DMA_INT_ENA_W1S(void)
 554{
 555        return 0x1a0;
 556}
 557
 558/**
 559 * Register (RSL) mio_emm_dma_int_w1s
 560 *
 561 * eMMC DMA Interrupt Set Register This register sets interrupt bits.
 562 */
 563union mio_emm_dma_int_w1s {
 564        u64 u;
 565        struct mio_emm_dma_int_w1s_s {
 566                u64 done                             : 1;
 567                u64 fifo                             : 1;
 568                u64 reserved_2_63                    : 62;
 569        } s;
 570        /* struct mio_emm_dma_int_w1s_s cn; */
 571};
 572
 573static inline u64 MIO_EMM_DMA_INT_W1S(void)
 574        __attribute__ ((pure, always_inline));
 575static inline u64 MIO_EMM_DMA_INT_W1S(void)
 576{
 577        return 0x198;
 578}
 579
 580/**
 581 * Register (RSL) mio_emm_int
 582 *
 583 * eMMC Interrupt Register
 584 */
 585union mio_emm_int {
 586        u64 u;
 587        struct mio_emm_int_s {
 588                u64 buf_done                         : 1;
 589                u64 cmd_done                         : 1;
 590                u64 dma_done                         : 1;
 591                u64 cmd_err                          : 1;
 592                u64 dma_err                          : 1;
 593                u64 switch_done                      : 1;
 594                u64 switch_err                       : 1;
 595                u64 ncb_flt                          : 1;
 596                u64 ncb_ras                          : 1;
 597                u64 reserved_9_63                    : 55;
 598        } s;
 599        struct mio_emm_int_cn8 {
 600                u64 buf_done                         : 1;
 601                u64 cmd_done                         : 1;
 602                u64 dma_done                         : 1;
 603                u64 cmd_err                          : 1;
 604                u64 dma_err                          : 1;
 605                u64 switch_done                      : 1;
 606                u64 switch_err                       : 1;
 607                u64 reserved_7_63                    : 57;
 608        } cn8;
 609        /* struct mio_emm_int_s cn9; */
 610};
 611
 612static inline u64 MIO_EMM_INT(void)
 613        __attribute__ ((pure, always_inline));
 614static inline u64 MIO_EMM_INT(void)
 615{
 616        return 0x2078;
 617}
 618
 619/**
 620 * Register (RSL) mio_emm_int_ena_w1c
 621 *
 622 * eMMC Interrupt Enable Clear Register This register clears interrupt
 623 * enable bits.
 624 */
 625union mio_emm_int_ena_w1c {
 626        u64 u;
 627        struct mio_emm_int_ena_w1c_s {
 628                u64 buf_done                         : 1;
 629                u64 cmd_done                         : 1;
 630                u64 dma_done                         : 1;
 631                u64 cmd_err                          : 1;
 632                u64 dma_err                          : 1;
 633                u64 switch_done                      : 1;
 634                u64 switch_err                       : 1;
 635                u64 ncb_flt                          : 1;
 636                u64 ncb_ras                          : 1;
 637                u64 reserved_9_63                    : 55;
 638        } s;
 639        struct mio_emm_int_ena_w1c_cn8 {
 640                u64 buf_done                         : 1;
 641                u64 cmd_done                         : 1;
 642                u64 dma_done                         : 1;
 643                u64 cmd_err                          : 1;
 644                u64 dma_err                          : 1;
 645                u64 switch_done                      : 1;
 646                u64 switch_err                       : 1;
 647                u64 reserved_7_63                    : 57;
 648        } cn8;
 649        /* struct mio_emm_int_ena_w1c_s cn9; */
 650};
 651
 652static inline u64 MIO_EMM_INT_ENA_W1C(void)
 653        __attribute__ ((pure, always_inline));
 654static inline u64 MIO_EMM_INT_ENA_W1C(void)
 655{
 656        return 0x20b8;
 657}
 658
 659/**
 660 * Register (RSL) mio_emm_int_ena_w1s
 661 *
 662 * eMMC Interrupt Enable Set Register This register sets interrupt enable
 663 * bits.
 664 */
 665union mio_emm_int_ena_w1s {
 666        u64 u;
 667        struct mio_emm_int_ena_w1s_s {
 668                u64 buf_done                         : 1;
 669                u64 cmd_done                         : 1;
 670                u64 dma_done                         : 1;
 671                u64 cmd_err                          : 1;
 672                u64 dma_err                          : 1;
 673                u64 switch_done                      : 1;
 674                u64 switch_err                       : 1;
 675                u64 ncb_flt                          : 1;
 676                u64 ncb_ras                          : 1;
 677                u64 reserved_9_63                    : 55;
 678        } s;
 679        struct mio_emm_int_ena_w1s_cn8 {
 680                u64 buf_done                         : 1;
 681                u64 cmd_done                         : 1;
 682                u64 dma_done                         : 1;
 683                u64 cmd_err                          : 1;
 684                u64 dma_err                          : 1;
 685                u64 switch_done                      : 1;
 686                u64 switch_err                       : 1;
 687                u64 reserved_7_63                    : 57;
 688        } cn8;
 689        /* struct mio_emm_int_ena_w1s_s cn9; */
 690};
 691
 692static inline u64 MIO_EMM_INT_ENA_W1S(void)
 693        __attribute__ ((pure, always_inline));
 694static inline u64 MIO_EMM_INT_ENA_W1S(void)
 695{
 696        return 0x20b0;
 697}
 698
 699/**
 700 * Register (RSL) mio_emm_int_w1s
 701 *
 702 * eMMC Interrupt Set Register This register sets interrupt bits.
 703 */
 704union mio_emm_int_w1s {
 705        u64 u;
 706        struct mio_emm_int_w1s_s {
 707                u64 buf_done                         : 1;
 708                u64 cmd_done                         : 1;
 709                u64 dma_done                         : 1;
 710                u64 cmd_err                          : 1;
 711                u64 dma_err                          : 1;
 712                u64 switch_done                      : 1;
 713                u64 switch_err                       : 1;
 714                u64 ncb_flt                          : 1;
 715                u64 ncb_ras                          : 1;
 716                u64 reserved_9_63                    : 55;
 717        } s;
 718        struct mio_emm_int_w1s_cn8 {
 719                u64 buf_done                         : 1;
 720                u64 cmd_done                         : 1;
 721                u64 dma_done                         : 1;
 722                u64 cmd_err                          : 1;
 723                u64 dma_err                          : 1;
 724                u64 switch_done                      : 1;
 725                u64 switch_err                       : 1;
 726                u64 reserved_7_63                    : 57;
 727        } cn8;
 728        /* struct mio_emm_int_w1s_s cn9; */
 729};
 730
 731static inline u64 MIO_EMM_INT_W1S(void)
 732        __attribute__ ((pure, always_inline));
 733static inline u64 MIO_EMM_INT_W1S(void)
 734{
 735        return 0x2080;
 736}
 737
 738/**
 739 * Register (RSL) mio_emm_io_ctl
 740 *
 741 * eMMC I/O Control Register
 742 */
 743union mio_emm_io_ctl {
 744        u64 u;
 745        struct mio_emm_io_ctl_s {
 746                u64 slew                             : 1;
 747                u64 reserved_1                       : 1;
 748                u64 drive                            : 2;
 749                u64 reserved_4_63                    : 60;
 750        } s;
 751        /* struct mio_emm_io_ctl_s cn; */
 752};
 753
 754static inline u64 MIO_EMM_IO_CTL(void)
 755        __attribute__ ((pure, always_inline));
 756static inline u64 MIO_EMM_IO_CTL(void)
 757{
 758        return 0x2040;
 759}
 760
 761/**
 762 * Register (RSL) mio_emm_mode#
 763 *
 764 * eMMC Operating Mode Register
 765 */
 766union mio_emm_modex {
 767        u64 u;
 768        struct mio_emm_modex_s {
 769                u64 clk_lo                           : 16;
 770                u64 clk_hi                           : 16;
 771                u64 power_class                      : 4;
 772                u64 clk_swap                         : 1;
 773                u64 reserved_37_39                   : 3;
 774                u64 bus_width                        : 3;
 775                u64 reserved_43_47                   : 5;
 776                u64 hs_timing                        : 1;
 777                u64 hs200_timing                     : 1;
 778                u64 hs400_timing                     : 1;
 779                u64 reserved_51_63                   : 13;
 780        } s;
 781        struct mio_emm_modex_cn8 {
 782                u64 clk_lo                           : 16;
 783                u64 clk_hi                           : 16;
 784                u64 power_class                      : 4;
 785                u64 reserved_36_39                   : 4;
 786                u64 bus_width                        : 3;
 787                u64 reserved_43_47                   : 5;
 788                u64 hs_timing                        : 1;
 789                u64 reserved_49_63                   : 15;
 790        } cn8;
 791        struct mio_emm_modex_cn96xxp1 {
 792                u64 clk_lo                           : 16;
 793                u64 clk_hi                           : 16;
 794                u64 power_class                      : 4;
 795                u64 reserved_36_39                   : 4;
 796                u64 bus_width                        : 3;
 797                u64 reserved_43_47                   : 5;
 798                u64 hs_timing                        : 1;
 799                u64 hs200_timing                     : 1;
 800                u64 hs400_timing                     : 1;
 801                u64 reserved_51_63                   : 13;
 802        } cn96xxp1;
 803        /* struct mio_emm_modex_s cn96xxp3; */
 804        /* struct mio_emm_modex_s cnf95xx; */
 805};
 806
 807static inline u64 MIO_EMM_MODEX(u64 a)
 808        __attribute__ ((pure, always_inline));
 809static inline u64 MIO_EMM_MODEX(u64 a)
 810{
 811        return 0x2008 + 8 * a;
 812}
 813
 814/**
 815 * Register (RSL) mio_emm_msix_pba#
 816 *
 817 * eMMC MSI-X Pending Bit Array Registers This register is the MSI-X PBA
 818 * table; the bit number is indexed by the MIO_EMM_INT_VEC_E enumeration.
 819 */
 820union mio_emm_msix_pbax {
 821        u64 u;
 822        struct mio_emm_msix_pbax_s {
 823                u64 pend                             : 64;
 824        } s;
 825        /* struct mio_emm_msix_pbax_s cn; */
 826};
 827
 828static inline u64 MIO_EMM_MSIX_PBAX(u64 a)
 829        __attribute__ ((pure, always_inline));
 830static inline u64 MIO_EMM_MSIX_PBAX(u64 a)
 831{
 832        return 0xf0000 + 8 * a;
 833}
 834
 835/**
 836 * Register (RSL) mio_emm_msix_vec#_addr
 837 *
 838 * eMMC MSI-X Vector-Table Address Register This register is the MSI-X
 839 * vector table, indexed by the MIO_EMM_INT_VEC_E enumeration.
 840 */
 841union mio_emm_msix_vecx_addr {
 842        u64 u;
 843        struct mio_emm_msix_vecx_addr_s {
 844                u64 secvec                           : 1;
 845                u64 reserved_1                       : 1;
 846                u64 addr                             : 51;
 847                u64 reserved_53_63                   : 11;
 848        } s;
 849        struct mio_emm_msix_vecx_addr_cn8 {
 850                u64 secvec                           : 1;
 851                u64 reserved_1                       : 1;
 852                u64 addr                             : 47;
 853                u64 reserved_49_63                   : 15;
 854        } cn8;
 855        /* struct mio_emm_msix_vecx_addr_s cn9; */
 856};
 857
 858static inline u64 MIO_EMM_MSIX_VECX_ADDR(u64 a)
 859        __attribute__ ((pure, always_inline));
 860static inline u64 MIO_EMM_MSIX_VECX_ADDR(u64 a)
 861{
 862        return 0 + 0x10 * a;
 863}
 864
 865/**
 866 * Register (RSL) mio_emm_msix_vec#_ctl
 867 *
 868 * eMMC MSI-X Vector-Table Control and Data Register This register is the
 869 * MSI-X vector table, indexed by the MIO_EMM_INT_VEC_E enumeration.
 870 */
 871union mio_emm_msix_vecx_ctl {
 872        u64 u;
 873        struct mio_emm_msix_vecx_ctl_s {
 874                u64 data                             : 32;
 875                u64 mask                             : 1;
 876                u64 reserved_33_63                   : 31;
 877        } s;
 878        struct mio_emm_msix_vecx_ctl_cn8 {
 879                u64 data                             : 20;
 880                u64 reserved_20_31                   : 12;
 881                u64 mask                             : 1;
 882                u64 reserved_33_63                   : 31;
 883        } cn8;
 884        /* struct mio_emm_msix_vecx_ctl_s cn9; */
 885};
 886
 887static inline u64 MIO_EMM_MSIX_VECX_CTL(u64 a)
 888        __attribute__ ((pure, always_inline));
 889static inline u64 MIO_EMM_MSIX_VECX_CTL(u64 a)
 890{
 891        return 8 + 0x10 * a;
 892}
 893
 894/**
 895 * Register (RSL) mio_emm_rca
 896 *
 897 * eMMC Relative Card Address Register
 898 */
 899union mio_emm_rca {
 900        u64 u;
 901        struct mio_emm_rca_s {
 902                u64 card_rca                         : 16;
 903                u64 reserved_16_63                   : 48;
 904        } s;
 905        /* struct mio_emm_rca_s cn; */
 906};
 907
 908static inline u64 MIO_EMM_RCA(void)
 909        __attribute__ ((pure, always_inline));
 910static inline u64 MIO_EMM_RCA(void)
 911{
 912        return 0x20a0;
 913}
 914
 915/**
 916 * Register (RSL) mio_emm_rsp_hi
 917 *
 918 * eMMC Response Data High Register
 919 */
 920union mio_emm_rsp_hi {
 921        u64 u;
 922        struct mio_emm_rsp_hi_s {
 923                u64 dat                              : 64;
 924        } s;
 925        /* struct mio_emm_rsp_hi_s cn; */
 926};
 927
 928static inline u64 MIO_EMM_RSP_HI(void)
 929        __attribute__ ((pure, always_inline));
 930static inline u64 MIO_EMM_RSP_HI(void)
 931{
 932        return 0x2070;
 933}
 934
 935/**
 936 * Register (RSL) mio_emm_rsp_lo
 937 *
 938 * eMMC Response Data Low Register
 939 */
 940union mio_emm_rsp_lo {
 941        u64 u;
 942        struct mio_emm_rsp_lo_s {
 943                u64 dat                              : 64;
 944        } s;
 945        /* struct mio_emm_rsp_lo_s cn; */
 946};
 947
 948static inline u64 MIO_EMM_RSP_LO(void)
 949        __attribute__ ((pure, always_inline));
 950static inline u64 MIO_EMM_RSP_LO(void)
 951{
 952        return 0x2068;
 953}
 954
 955/**
 956 * Register (RSL) mio_emm_rsp_sts
 957 *
 958 * eMMC Response Status Register
 959 */
 960union mio_emm_rsp_sts {
 961        u64 u;
 962        struct mio_emm_rsp_sts_s {
 963                u64 cmd_done                         : 1;
 964                u64 cmd_idx                          : 6;
 965                u64 cmd_type                         : 2;
 966                u64 rsp_type                         : 3;
 967                u64 rsp_val                          : 1;
 968                u64 rsp_bad_sts                      : 1;
 969                u64 rsp_crc_err                      : 1;
 970                u64 rsp_timeout                      : 1;
 971                u64 stp_val                          : 1;
 972                u64 stp_bad_sts                      : 1;
 973                u64 stp_crc_err                      : 1;
 974                u64 stp_timeout                      : 1;
 975                u64 rsp_busybit                      : 1;
 976                u64 blk_crc_err                      : 1;
 977                u64 blk_timeout                      : 1;
 978                u64 dbuf                             : 1;
 979                u64 reserved_24_27                   : 4;
 980                u64 dbuf_err                         : 1;
 981                u64 reserved_29_54                   : 26;
 982                u64 acc_timeout                      : 1;
 983                u64 dma_pend                         : 1;
 984                u64 dma_val                          : 1;
 985                u64 switch_val                       : 1;
 986                u64 cmd_val                          : 1;
 987                u64 bus_id                           : 2;
 988                u64 reserved_62_63                   : 2;
 989        } s;
 990        /* struct mio_emm_rsp_sts_s cn; */
 991};
 992
 993static inline u64 MIO_EMM_RSP_STS(void)
 994        __attribute__ ((pure, always_inline));
 995static inline u64 MIO_EMM_RSP_STS(void)
 996{
 997        return 0x2060;
 998}
 999
1000/**
1001 * Register (RSL) mio_emm_sample
1002 *
1003 * eMMC Sampling Register
1004 */
1005union mio_emm_sample {
1006        u64 u;
1007        struct mio_emm_sample_s {
1008                u64 dat_cnt                          : 10;
1009                u64 reserved_10_15                   : 6;
1010                u64 cmd_cnt                          : 10;
1011                u64 reserved_26_63                   : 38;
1012        } s;
1013        /* struct mio_emm_sample_s cn; */
1014};
1015
1016static inline u64 MIO_EMM_SAMPLE(void)
1017        __attribute__ ((pure, always_inline));
1018static inline u64 MIO_EMM_SAMPLE(void)
1019{
1020        return 0x2090;
1021}
1022
1023/**
1024 * Register (RSL) mio_emm_sts_mask
1025 *
1026 * eMMC Status Mask Register
1027 */
1028union mio_emm_sts_mask {
1029        u64 u;
1030        struct mio_emm_sts_mask_s {
1031                u64 sts_msk                          : 32;
1032                u64 reserved_32_63                   : 32;
1033        } s;
1034        /* struct mio_emm_sts_mask_s cn; */
1035};
1036
1037static inline u64 MIO_EMM_STS_MASK(void)
1038        __attribute__ ((pure, always_inline));
1039static inline u64 MIO_EMM_STS_MASK(void)
1040{
1041        return 0x2098;
1042}
1043
1044/**
1045 * Register (RSL) mio_emm_switch
1046 *
1047 * eMMC Operating Mode Switch Register This register allows software to
1048 * change eMMC related parameters associated with a specific BUS_ID.  The
1049 * MIO_EMM_MODE() registers contain the current setting for each BUS.
1050 * This register is also used to switch the [CLK_HI] and [CLK_LO]
1051 * settings associated with the common EMMC_CLK.  These settings can only
1052 * be changed when [BUS_ID] = 0.
1053 */
1054union mio_emm_switch {
1055        u64 u;
1056        struct mio_emm_switch_s {
1057                u64 clk_lo                           : 16;
1058                u64 clk_hi                           : 16;
1059                u64 power_class                      : 4;
1060                u64 clk_swap                         : 1;
1061                u64 reserved_37_39                   : 3;
1062                u64 bus_width                        : 3;
1063                u64 reserved_43_47                   : 5;
1064                u64 hs_timing                        : 1;
1065                u64 hs200_timing                     : 1;
1066                u64 hs400_timing                     : 1;
1067                u64 reserved_51_55                   : 5;
1068                u64 switch_err2                      : 1;
1069                u64 switch_err1                      : 1;
1070                u64 switch_err0                      : 1;
1071                u64 switch_exe                       : 1;
1072                u64 bus_id                           : 2;
1073                u64 reserved_62_63                   : 2;
1074        } s;
1075        struct mio_emm_switch_cn8 {
1076                u64 clk_lo                           : 16;
1077                u64 clk_hi                           : 16;
1078                u64 power_class                      : 4;
1079                u64 reserved_36_39                   : 4;
1080                u64 bus_width                        : 3;
1081                u64 reserved_43_47                   : 5;
1082                u64 hs_timing                        : 1;
1083                u64 reserved_49_55                   : 7;
1084                u64 switch_err2                      : 1;
1085                u64 switch_err1                      : 1;
1086                u64 switch_err0                      : 1;
1087                u64 switch_exe                       : 1;
1088                u64 bus_id                           : 2;
1089                u64 reserved_62_63                   : 2;
1090        } cn8;
1091        struct mio_emm_switch_cn96xxp1 {
1092                u64 clk_lo                           : 16;
1093                u64 clk_hi                           : 16;
1094                u64 power_class                      : 4;
1095                u64 reserved_36_39                   : 4;
1096                u64 bus_width                        : 3;
1097                u64 reserved_43_47                   : 5;
1098                u64 hs_timing                        : 1;
1099                u64 hs200_timing                     : 1;
1100                u64 hs400_timing                     : 1;
1101                u64 reserved_51_55                   : 5;
1102                u64 switch_err2                      : 1;
1103                u64 switch_err1                      : 1;
1104                u64 switch_err0                      : 1;
1105                u64 switch_exe                       : 1;
1106                u64 bus_id                           : 2;
1107                u64 reserved_62_63                   : 2;
1108        } cn96xxp1;
1109        /* struct mio_emm_switch_s cn96xxp3; */
1110        /* struct mio_emm_switch_s cnf95xx; */
1111};
1112
1113static inline u64 MIO_EMM_SWITCH(void)
1114        __attribute__ ((pure, always_inline));
1115static inline u64 MIO_EMM_SWITCH(void)
1116{
1117        return 0x2048;
1118}
1119
1120/**
1121 * Register (RSL) mio_emm_tap
1122 *
1123 * eMMC TAP Delay Register This register indicates the delay line
1124 * characteristics.
1125 */
1126union mio_emm_tap {
1127        u64 u;
1128        struct mio_emm_tap_s {
1129                u64 delay                            : 8;
1130                u64 reserved_8_63                    : 56;
1131        } s;
1132        /* struct mio_emm_tap_s cn; */
1133};
1134
1135static inline u64 MIO_EMM_TAP(void)
1136        __attribute__ ((pure, always_inline));
1137static inline u64 MIO_EMM_TAP(void)
1138{
1139        return 0x20c8;
1140}
1141
1142/**
1143 * Register (RSL) mio_emm_timing
1144 *
1145 * eMMC Timing Register This register determines the number of tap delays
1146 * the EMM_DAT, EMM_DS, and EMM_CMD lines are transmitted or received in
1147 * relation to EMM_CLK. These values should only be changed when the eMMC
1148 * bus is idle.
1149 */
1150union mio_emm_timing {
1151        u64 u;
1152        struct mio_emm_timing_s {
1153                u64 data_out_tap                     : 6;
1154                u64 reserved_6_15                    : 10;
1155                u64 data_in_tap                      : 6;
1156                u64 reserved_22_31                   : 10;
1157                u64 cmd_out_tap                      : 6;
1158                u64 reserved_38_47                   : 10;
1159                u64 cmd_in_tap                       : 6;
1160                u64 reserved_54_63                   : 10;
1161        } s;
1162        /* struct mio_emm_timing_s cn; */
1163};
1164
1165static inline u64 MIO_EMM_TIMING(void)
1166        __attribute__ ((pure, always_inline));
1167static inline u64 MIO_EMM_TIMING(void)
1168{
1169        return 0x20d0;
1170}
1171
1172/**
1173 * Register (RSL) mio_emm_wdog
1174 *
1175 * eMMC Watchdog Register
1176 */
1177union mio_emm_wdog {
1178        u64 u;
1179        struct mio_emm_wdog_s {
1180                u64 clk_cnt                          : 26;
1181                u64 reserved_26_63                   : 38;
1182        } s;
1183        /* struct mio_emm_wdog_s cn; */
1184};
1185
1186static inline u64 MIO_EMM_WDOG(void)
1187        __attribute__ ((pure, always_inline));
1188static inline u64 MIO_EMM_WDOG(void)
1189{
1190        return 0x2088;
1191}
1192
1193#endif /* __CSRS_MIO_EMM_H__ */
1194