#ifndef __BDK_CSRS_GSERN_H__ #define __BDK_CSRS_GSERN_H__ /* This file is auto-generated. Do not edit */ /***********************license start*************** * Copyright (c) 2003-2017 Cavium Inc. (support@cavium.com). All rights * reserved. * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of Cavium Inc. nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written * permission. * This Software, including technical data, may be subject to U.S. export control * laws, including the U.S. Export Administration Act and its associated * regulations, and may be subject to export or import regulations in other * countries. * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. ***********************license end**************************************/ /** * @file * * Configuration and status register (CSR) address and type definitions for * Cavium GSERN. * * This file is auto generated. Do not edit. * */ /** * Enumeration gsern_bar_e * * GSER Base Address Register Enumeration * Enumerates the base address registers. */ #define BDK_GSERN_BAR_E_GSERNX_PF_BAR0(a) (0x87e090000000ll + 0x1000000ll * (a)) #define BDK_GSERN_BAR_E_GSERNX_PF_BAR0_SIZE 0x100000ull /** * Enumeration gsern_psb_acc_e * * GSERN Power Serial Bus Accumulator Enumeration * Enumerates the GSERN accumulators for LMC slaves, which correspond to index {b} of * PSBS_SYS()_ACCUM(). */ #define BDK_GSERN_PSB_ACC_E_TBD0 (0) #define BDK_GSERN_PSB_ACC_E_TBD1 (1) #define BDK_GSERN_PSB_ACC_E_TBD2 (2) #define BDK_GSERN_PSB_ACC_E_TBD3 (3) /** * Enumeration gsern_psb_event_e * * GSERN Power Serial Bus Event Enumeration * Enumerates the event numbers for GSERN slaves, which correspond to index {b} of * PSBS_SYS()_EVENT()_CFG. */ #define BDK_GSERN_PSB_EVENT_E_TBD0 (0) /** * Register (RSL) gsern#_common_bias_bcfg * * GSER Common Bias Base Configuration Register */ union bdk_gsernx_common_bias_bcfg { uint64_t u; struct bdk_gsernx_common_bias_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_36_63 : 28; uint64_t dac1 : 4; /**< [ 35: 32](R/W) Ir25 reference current trim. Default setting (0x8) selects 0% trim. Minimum and Maximum settings allow for up to + or - 12.5% trim. For debug use only. */ uint64_t reserved_28_31 : 4; uint64_t dac0 : 4; /**< [ 27: 24](R/W) Ic25 reference current trim. Default setting (0x8) selects 0% trim. Minimum and Maximum settings allow for up to + or - 12.5% trim. For debug use only. */ uint64_t reserved_18_23 : 6; uint64_t bias : 2; /**< [ 17: 16](R/W) Opamp bias current setting. For debug use only. 0x0 = 33 uA. 0x1 = 25 uA. 0x2 = 20 uA. 0x3 = 17 uA. */ uint64_t reserved_9_15 : 7; uint64_t bypass : 1; /**< [ 8: 8](R/W) Assert to bypass the bandgap reference and use a resistive divider from VDDA instead. For diagnostic use only. */ uint64_t reserved_1_7 : 7; uint64_t bias_pwdn : 1; /**< [ 0: 0](R/W) Bias current power down control. */ #else /* Word 0 - Little Endian */ uint64_t bias_pwdn : 1; /**< [ 0: 0](R/W) Bias current power down control. */ uint64_t reserved_1_7 : 7; uint64_t bypass : 1; /**< [ 8: 8](R/W) Assert to bypass the bandgap reference and use a resistive divider from VDDA instead. For diagnostic use only. */ uint64_t reserved_9_15 : 7; uint64_t bias : 2; /**< [ 17: 16](R/W) Opamp bias current setting. For debug use only. 0x0 = 33 uA. 0x1 = 25 uA. 0x2 = 20 uA. 0x3 = 17 uA. */ uint64_t reserved_18_23 : 6; uint64_t dac0 : 4; /**< [ 27: 24](R/W) Ic25 reference current trim. Default setting (0x8) selects 0% trim. Minimum and Maximum settings allow for up to + or - 12.5% trim. For debug use only. */ uint64_t reserved_28_31 : 4; uint64_t dac1 : 4; /**< [ 35: 32](R/W) Ir25 reference current trim. Default setting (0x8) selects 0% trim. Minimum and Maximum settings allow for up to + or - 12.5% trim. For debug use only. */ uint64_t reserved_36_63 : 28; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_bias_bcfg_s cn; */ }; typedef union bdk_gsernx_common_bias_bcfg bdk_gsernx_common_bias_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_BIAS_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_BIAS_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0330ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_BIAS_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_BIAS_BCFG(a) bdk_gsernx_common_bias_bcfg_t #define bustype_BDK_GSERNX_COMMON_BIAS_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_BIAS_BCFG(a) "GSERNX_COMMON_BIAS_BCFG" #define device_bar_BDK_GSERNX_COMMON_BIAS_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_BIAS_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_BIAS_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_const * * GSER Common Constants Register */ union bdk_gsernx_common_const { uint64_t u; struct bdk_gsernx_common_const_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_0_63 : 64; #else /* Word 0 - Little Endian */ uint64_t reserved_0_63 : 64; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_const_s cn; */ }; typedef union bdk_gsernx_common_const bdk_gsernx_common_const_t; static inline uint64_t BDK_GSERNX_COMMON_CONST(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_CONST(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0088ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_CONST", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_CONST(a) bdk_gsernx_common_const_t #define bustype_BDK_GSERNX_COMMON_CONST(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_CONST(a) "GSERNX_COMMON_CONST" #define device_bar_BDK_GSERNX_COMMON_CONST(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_CONST(a) (a) #define arguments_BDK_GSERNX_COMMON_CONST(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_const1 * * GSER Common Constants Register 1 */ union bdk_gsernx_common_const1 { uint64_t u; struct bdk_gsernx_common_const1_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_4_63 : 60; uint64_t number_lanes : 4; /**< [ 3: 0](RO/H) The number of lanes in this module, e.g., 4 for a QLM or 2 for a DLM. Internal: FIXME reset value 4 (done). Add reset_matches_size (not done). Note: for dlm tieoffs will set reset value to 2. */ #else /* Word 0 - Little Endian */ uint64_t number_lanes : 4; /**< [ 3: 0](RO/H) The number of lanes in this module, e.g., 4 for a QLM or 2 for a DLM. Internal: FIXME reset value 4 (done). Add reset_matches_size (not done). Note: for dlm tieoffs will set reset value to 2. */ uint64_t reserved_4_63 : 60; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_const1_s cn; */ }; typedef union bdk_gsernx_common_const1 bdk_gsernx_common_const1_t; static inline uint64_t BDK_GSERNX_COMMON_CONST1(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_CONST1(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0110ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_CONST1", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_CONST1(a) bdk_gsernx_common_const1_t #define bustype_BDK_GSERNX_COMMON_CONST1(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_CONST1(a) "GSERNX_COMMON_CONST1" #define device_bar_BDK_GSERNX_COMMON_CONST1(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_CONST1(a) (a) #define arguments_BDK_GSERNX_COMMON_CONST1(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_eco * * INTERNAL: GSER Common ECO Register */ union bdk_gsernx_common_eco { uint64_t u; struct bdk_gsernx_common_eco_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t eco_rw : 62; /**< [ 63: 2](R/W) Internal: Reserved for ECO use. */ uint64_t eco_rw_pll : 2; /**< [ 1: 0](R/W) Internal: Pre-connected to the PLL. Reserved for ECO use. */ #else /* Word 0 - Little Endian */ uint64_t eco_rw_pll : 2; /**< [ 1: 0](R/W) Internal: Pre-connected to the PLL. Reserved for ECO use. */ uint64_t eco_rw : 62; /**< [ 63: 2](R/W) Internal: Reserved for ECO use. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_eco_s cn; */ }; typedef union bdk_gsernx_common_eco bdk_gsernx_common_eco_t; static inline uint64_t BDK_GSERNX_COMMON_ECO(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_ECO(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0770ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_ECO", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_ECO(a) bdk_gsernx_common_eco_t #define bustype_BDK_GSERNX_COMMON_ECO(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_ECO(a) "GSERNX_COMMON_ECO" #define device_bar_BDK_GSERNX_COMMON_ECO(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_ECO(a) (a) #define arguments_BDK_GSERNX_COMMON_ECO(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_init_bsts * * GSER Common Initialization Base-level Status Register */ union bdk_gsernx_common_init_bsts { uint64_t u; struct bdk_gsernx_common_init_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_20_63 : 44; uint64_t pll_cp_cal : 4; /**< [ 19: 16](RO/H) PLL calibration state machine's resulting charge pump setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_13_15 : 3; uint64_t pll_band_cal : 5; /**< [ 12: 8](RO/H) PLL calibration state machine's resulting VCO band setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_7 : 1; uint64_t deep_idle : 1; /**< [ 6: 6](RO/H) PLL reset state machine state is deep idle. */ uint64_t rst_sm_complete : 1; /**< [ 5: 5](RO/H) PLL reset state machine has completed. If [RST_SM_COMPLETE] is set and [RST_SM_READY] is not, there may still be CSR register settings preventing the PLL from being ready for use, e.g., power-down or reset overrides. */ uint64_t rst_sm_ready : 1; /**< [ 4: 4](RO/H) PLL reset state machine status indicating that the reset sequence has completed and this PLL is ready for use. */ uint64_t lock : 1; /**< [ 3: 3](RO/H) PLL lock status; only valid if [LOCK_READY] is set. */ uint64_t lock_ready : 1; /**< [ 2: 2](RO/H) PLL lock status check is complete following most recent PLL reset or assertion of GSERN()_COMMON_RST_BCFG[LOCK_CHECK]. */ uint64_t cal_fail : 1; /**< [ 1: 1](RO/H) PLL calibration failed; valid only if [CAL_READY] is set. */ uint64_t cal_ready : 1; /**< [ 0: 0](RO/H) PLL calibration completed. */ #else /* Word 0 - Little Endian */ uint64_t cal_ready : 1; /**< [ 0: 0](RO/H) PLL calibration completed. */ uint64_t cal_fail : 1; /**< [ 1: 1](RO/H) PLL calibration failed; valid only if [CAL_READY] is set. */ uint64_t lock_ready : 1; /**< [ 2: 2](RO/H) PLL lock status check is complete following most recent PLL reset or assertion of GSERN()_COMMON_RST_BCFG[LOCK_CHECK]. */ uint64_t lock : 1; /**< [ 3: 3](RO/H) PLL lock status; only valid if [LOCK_READY] is set. */ uint64_t rst_sm_ready : 1; /**< [ 4: 4](RO/H) PLL reset state machine status indicating that the reset sequence has completed and this PLL is ready for use. */ uint64_t rst_sm_complete : 1; /**< [ 5: 5](RO/H) PLL reset state machine has completed. If [RST_SM_COMPLETE] is set and [RST_SM_READY] is not, there may still be CSR register settings preventing the PLL from being ready for use, e.g., power-down or reset overrides. */ uint64_t deep_idle : 1; /**< [ 6: 6](RO/H) PLL reset state machine state is deep idle. */ uint64_t reserved_7 : 1; uint64_t pll_band_cal : 5; /**< [ 12: 8](RO/H) PLL calibration state machine's resulting VCO band setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_13_15 : 3; uint64_t pll_cp_cal : 4; /**< [ 19: 16](RO/H) PLL calibration state machine's resulting charge pump setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_20_63 : 44; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_init_bsts_s cn; */ }; typedef union bdk_gsernx_common_init_bsts bdk_gsernx_common_init_bsts_t; static inline uint64_t BDK_GSERNX_COMMON_INIT_BSTS(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_INIT_BSTS(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f05d8ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_INIT_BSTS", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_INIT_BSTS(a) bdk_gsernx_common_init_bsts_t #define bustype_BDK_GSERNX_COMMON_INIT_BSTS(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_INIT_BSTS(a) "GSERNX_COMMON_INIT_BSTS" #define device_bar_BDK_GSERNX_COMMON_INIT_BSTS(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_INIT_BSTS(a) (a) #define arguments_BDK_GSERNX_COMMON_INIT_BSTS(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_pll_1_bcfg * * GSER Common PLL Base Configuration Register 1 */ union bdk_gsernx_common_pll_1_bcfg { uint64_t u; struct bdk_gsernx_common_pll_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t reserved_36_37 : 2; uint64_t post_div : 9; /**< [ 35: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. Divider range is between 8 - 511. If a number less than 8 is selected it will be added to the minimum value of 8. For example, if 2 is specified the value will be interpreted to be 10. */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion (divide by 2^18 to find fraction, e.g., 2621 is ~10,000 ppm). */ #else /* Word 0 - Little Endian */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion (divide by 2^18 to find fraction, e.g., 2621 is ~10,000 ppm). */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t post_div : 9; /**< [ 35: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. Divider range is between 8 - 511. If a number less than 8 is selected it will be added to the minimum value of 8. For example, if 2 is specified the value will be interpreted to be 10. */ uint64_t reserved_36_37 : 2; uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_pll_1_bcfg_s cn; */ }; typedef union bdk_gsernx_common_pll_1_bcfg bdk_gsernx_common_pll_1_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_PLL_1_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_PLL_1_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0220ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_PLL_1_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_PLL_1_BCFG(a) bdk_gsernx_common_pll_1_bcfg_t #define bustype_BDK_GSERNX_COMMON_PLL_1_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_PLL_1_BCFG(a) "GSERNX_COMMON_PLL_1_BCFG" #define device_bar_BDK_GSERNX_COMMON_PLL_1_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_PLL_1_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_PLL_1_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_pll_2_bcfg * * GSER Common PLL Base Configuration Register 2 */ union bdk_gsernx_common_pll_2_bcfg { uint64_t u; struct bdk_gsernx_common_pll_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t mio_refclk_en : 1; /**< [ 56: 56](R/W) Reserved. Internal: Enable sending the common PLL reference clock to the counter in MIO. */ uint64_t lock_check_cnt_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [LOCK_CHECK_CNT_OVRD]. */ uint64_t lock_check_cnt_ovrd : 15; /**< [ 54: 40](R/W) Lock check counter override value. This counter is used to wait for PLL lock to be valid. It counts every reference clock cycle and once its done asserts GSERN()_COMMON_INIT_BSTS[LOCK_READY]. For common PLL, the reference clock is the input from the pad. For lane PLLs, the reference clock is the output of the common PLL. To use value assert GSERN()_LANE()_RST1_BCFG[LOCK_CHECK] or trigger a PLL reset sequence. */ uint64_t reserved_34_39 : 6; uint64_t vcm_sel : 1; /**< [ 33: 33](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t cp_boost : 1; /**< [ 32: 32](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t ssc_sata_mode : 2; /**< [ 31: 30](R/W) PLL SATA spread spectrum control. 0x0 = Down spreading. PPM triangle wave total peak-to-peak spread subtracted from nominal frequency. 0x1 = Up spreading. PPM triangle wave total peak-to-peak spread added to nominal frequency. 0x2 = Center spreading. PPM triangle wave total peak-to-peak spread centered at nominal frequency. 0x3 = Square wave subtracted from nominal frequency. */ uint64_t ssc_ppm : 2; /**< [ 29: 28](R/W) Spread-spectrum clocking total peak-to-peak spread. 0x0 = 5000 PPM. 0x1 = 3000 PPM. 0x2 = 2500 PPM. 0x3 = 1000 PPM. */ uint64_t pnr_refclk_en : 1; /**< [ 27: 27](R/W) Enable PLL reference clock to internal logic. */ uint64_t ssc_en : 1; /**< [ 26: 26](R/W) Spread-spectrum clocking enable. */ uint64_t ref_clk_bypass : 1; /**< [ 25: 25](R/W) Bypass reference clock to the PLL output. */ uint64_t pfd_offset : 1; /**< [ 24: 24](R/W) PLL PFD offset enable. */ uint64_t opamp : 4; /**< [ 23: 20](R/W) PLL loop filter op-amp configuration. */ uint64_t res : 4; /**< [ 19: 16](R/W) PLL loop filter configuration. */ uint64_t reserved_15 : 1; uint64_t vco_bias : 3; /**< [ 14: 12](R/W) VCO bias control. */ uint64_t cal_dac_low : 4; /**< [ 11: 8](R/W) PLL calibration DAC low control. */ uint64_t cal_dac_mid : 4; /**< [ 7: 4](R/W) PLL calibration DAC middle control. */ uint64_t cal_dac_high : 4; /**< [ 3: 0](R/W) PLL calibration DAC high control. */ #else /* Word 0 - Little Endian */ uint64_t cal_dac_high : 4; /**< [ 3: 0](R/W) PLL calibration DAC high control. */ uint64_t cal_dac_mid : 4; /**< [ 7: 4](R/W) PLL calibration DAC middle control. */ uint64_t cal_dac_low : 4; /**< [ 11: 8](R/W) PLL calibration DAC low control. */ uint64_t vco_bias : 3; /**< [ 14: 12](R/W) VCO bias control. */ uint64_t reserved_15 : 1; uint64_t res : 4; /**< [ 19: 16](R/W) PLL loop filter configuration. */ uint64_t opamp : 4; /**< [ 23: 20](R/W) PLL loop filter op-amp configuration. */ uint64_t pfd_offset : 1; /**< [ 24: 24](R/W) PLL PFD offset enable. */ uint64_t ref_clk_bypass : 1; /**< [ 25: 25](R/W) Bypass reference clock to the PLL output. */ uint64_t ssc_en : 1; /**< [ 26: 26](R/W) Spread-spectrum clocking enable. */ uint64_t pnr_refclk_en : 1; /**< [ 27: 27](R/W) Enable PLL reference clock to internal logic. */ uint64_t ssc_ppm : 2; /**< [ 29: 28](R/W) Spread-spectrum clocking total peak-to-peak spread. 0x0 = 5000 PPM. 0x1 = 3000 PPM. 0x2 = 2500 PPM. 0x3 = 1000 PPM. */ uint64_t ssc_sata_mode : 2; /**< [ 31: 30](R/W) PLL SATA spread spectrum control. 0x0 = Down spreading. PPM triangle wave total peak-to-peak spread subtracted from nominal frequency. 0x1 = Up spreading. PPM triangle wave total peak-to-peak spread added to nominal frequency. 0x2 = Center spreading. PPM triangle wave total peak-to-peak spread centered at nominal frequency. 0x3 = Square wave subtracted from nominal frequency. */ uint64_t cp_boost : 1; /**< [ 32: 32](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t vcm_sel : 1; /**< [ 33: 33](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t reserved_34_39 : 6; uint64_t lock_check_cnt_ovrd : 15; /**< [ 54: 40](R/W) Lock check counter override value. This counter is used to wait for PLL lock to be valid. It counts every reference clock cycle and once its done asserts GSERN()_COMMON_INIT_BSTS[LOCK_READY]. For common PLL, the reference clock is the input from the pad. For lane PLLs, the reference clock is the output of the common PLL. To use value assert GSERN()_LANE()_RST1_BCFG[LOCK_CHECK] or trigger a PLL reset sequence. */ uint64_t lock_check_cnt_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [LOCK_CHECK_CNT_OVRD]. */ uint64_t mio_refclk_en : 1; /**< [ 56: 56](R/W) Reserved. Internal: Enable sending the common PLL reference clock to the counter in MIO. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_pll_2_bcfg_s cn; */ }; typedef union bdk_gsernx_common_pll_2_bcfg bdk_gsernx_common_pll_2_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_PLL_2_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_PLL_2_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f02a8ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_PLL_2_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_PLL_2_BCFG(a) bdk_gsernx_common_pll_2_bcfg_t #define bustype_BDK_GSERNX_COMMON_PLL_2_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_PLL_2_BCFG(a) "GSERNX_COMMON_PLL_2_BCFG" #define device_bar_BDK_GSERNX_COMMON_PLL_2_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_PLL_2_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_PLL_2_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_refclk_bcfg * * GSER Common PLL Base Configuration Register 1 */ union bdk_gsernx_common_refclk_bcfg { uint64_t u; struct bdk_gsernx_common_refclk_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_5_63 : 59; uint64_t hcsl : 1; /**< [ 4: 4](R/W) Enable [HCSL] and [OCT] to set HCSL on chip termination in the receiver of the off-chip reference clock, e.g., for a PCIe reference clock. Leave [HCSL] low for LVPECL on-chip termination. */ uint64_t oct : 1; /**< [ 3: 3](R/W) Enable on chip termination (OCT) in the receiver of the off-chip reference clock. */ uint64_t pwdn : 1; /**< [ 2: 2](R/W) Power down. 0 = Power on. Set to 0 if any lanes in this module will be used. 1 = All paths through the common block reference clock receiver will be powered off and no reference clock will reach the common PLL (or its bypass path). */ uint64_t cclksel : 2; /**< [ 1: 0](R/W) Selection controls for the reference clock 0x0 = Choose on-chip common clock zero. 0x1 = Choose on-chip common clock one. 0x2 = Choose on-chip common clock two. 0x3 = Choose the off-chip reference clock (requires that [PWDN] be low). */ #else /* Word 0 - Little Endian */ uint64_t cclksel : 2; /**< [ 1: 0](R/W) Selection controls for the reference clock 0x0 = Choose on-chip common clock zero. 0x1 = Choose on-chip common clock one. 0x2 = Choose on-chip common clock two. 0x3 = Choose the off-chip reference clock (requires that [PWDN] be low). */ uint64_t pwdn : 1; /**< [ 2: 2](R/W) Power down. 0 = Power on. Set to 0 if any lanes in this module will be used. 1 = All paths through the common block reference clock receiver will be powered off and no reference clock will reach the common PLL (or its bypass path). */ uint64_t oct : 1; /**< [ 3: 3](R/W) Enable on chip termination (OCT) in the receiver of the off-chip reference clock. */ uint64_t hcsl : 1; /**< [ 4: 4](R/W) Enable [HCSL] and [OCT] to set HCSL on chip termination in the receiver of the off-chip reference clock, e.g., for a PCIe reference clock. Leave [HCSL] low for LVPECL on-chip termination. */ uint64_t reserved_5_63 : 59; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_refclk_bcfg_s cn; */ }; typedef union bdk_gsernx_common_refclk_bcfg bdk_gsernx_common_refclk_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_REFCLK_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_REFCLK_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0198ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_REFCLK_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_REFCLK_BCFG(a) bdk_gsernx_common_refclk_bcfg_t #define bustype_BDK_GSERNX_COMMON_REFCLK_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_REFCLK_BCFG(a) "GSERNX_COMMON_REFCLK_BCFG" #define device_bar_BDK_GSERNX_COMMON_REFCLK_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_REFCLK_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_REFCLK_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_refclk_ctr * * GSER Common Reference Clock Cycle Counter Register * A free-running counter of common PLL reference clock cycles to enable rough * confirmation of reference clock frequency via software. Read the counter; wait some * time, e.g., 100ms; read the counter; calculate frequency based on the difference in * values during the known wait time. */ union bdk_gsernx_common_refclk_ctr { uint64_t u; struct bdk_gsernx_common_refclk_ctr_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t count : 64; /**< [ 63: 0](R/W/H) Running count of common PLL reference clock cycles. */ #else /* Word 0 - Little Endian */ uint64_t count : 64; /**< [ 63: 0](R/W/H) Running count of common PLL reference clock cycles. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_refclk_ctr_s cn; */ }; typedef union bdk_gsernx_common_refclk_ctr bdk_gsernx_common_refclk_ctr_t; static inline uint64_t BDK_GSERNX_COMMON_REFCLK_CTR(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_REFCLK_CTR(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f06e8ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_REFCLK_CTR", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_REFCLK_CTR(a) bdk_gsernx_common_refclk_ctr_t #define bustype_BDK_GSERNX_COMMON_REFCLK_CTR(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_REFCLK_CTR(a) "GSERNX_COMMON_REFCLK_CTR" #define device_bar_BDK_GSERNX_COMMON_REFCLK_CTR(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_REFCLK_CTR(a) (a) #define arguments_BDK_GSERNX_COMMON_REFCLK_CTR(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rev * * GSER Common Revision Register * Revision number */ union bdk_gsernx_common_rev { uint64_t u; struct bdk_gsernx_common_rev_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_8_63 : 56; uint64_t rev : 8; /**< [ 7: 0](RO/H) Revision number for GSERN common subblock. Internal: Used primarily for E5. */ #else /* Word 0 - Little Endian */ uint64_t rev : 8; /**< [ 7: 0](RO/H) Revision number for GSERN common subblock. Internal: Used primarily for E5. */ uint64_t reserved_8_63 : 56; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rev_s cn; */ }; typedef union bdk_gsernx_common_rev bdk_gsernx_common_rev_t; static inline uint64_t BDK_GSERNX_COMMON_REV(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_REV(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0000ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_REV", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_REV(a) bdk_gsernx_common_rev_t #define bustype_BDK_GSERNX_COMMON_REV(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_REV(a) "GSERNX_COMMON_REV" #define device_bar_BDK_GSERNX_COMMON_REV(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_REV(a) (a) #define arguments_BDK_GSERNX_COMMON_REV(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rst_bcfg * * GSER Common Reset State Machine Controls and Overrides Register */ union bdk_gsernx_common_rst_bcfg { uint64_t u; struct bdk_gsernx_common_rst_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t domain_rst_en : 1; /**< [ 55: 55](R/W) Domain reset enable. 0 = Prevent reseting lane logic with domain reset. 1 = Enable reseting all lane logic with domain reset. For PCIe configurations, typically 1 for a root complex and 0 for an endpoint. */ uint64_t reserved_49_54 : 6; uint64_t rst_pll_rst_sm : 1; /**< [ 48: 48](R/W) Set to reset the full PLL reset state machine; deassert to run the complete reset initialization sequence starting with common PLL initialization. */ uint64_t reserved_13_47 : 35; uint64_t pll_go2deep_idle : 1; /**< [ 12: 12](R/W) Set to cycle the common PLL into deep idle. */ uint64_t lock_ppm : 2; /**< [ 11: 10](R/W) PLL lock PPM setting; after GSERN()_COMMON_RST_BCFG[LOCK_WAIT], compare reference clock and divided VCO clock for this many cycles: 0x0 = Compare after 5000 reference clock cycles. 0x1 = Compare after 10000 reference clock cycles. 0x2 = Compare after 20000 reference clock cycles. 0x3 = Compare after 2500 reference clock cycles. */ uint64_t lock_wait : 2; /**< [ 9: 8](R/W) Wait time for PLL lock check function to start: 0x0 = Wait 2500 reference clock cycles. 0x1 = Wait 5000 reference clock cycles. 0x2 = Wait 10000 reference clock cycles. 0x3 = Wait 1250 reference clock cycles. */ uint64_t lock_check : 1; /**< [ 7: 7](R/W) Trigger a PLL lock status check; result returned in GSERN()_COMMON_INIT_BSTS[LOCK] when GSERN()_COMMON_INIT_BSTS[LOCK_READY] asserts. deassert and re-assert to repeat checking. */ uint64_t vco_cal_reset : 1; /**< [ 6: 6](R/W) PLL VCO calibration state machine reset. */ uint64_t fracn_reset : 1; /**< [ 5: 5](R/W) PLL fractional-N state machine reset. */ uint64_t ssc_reset : 1; /**< [ 4: 4](R/W) PLL SSC state machine reset. */ uint64_t post_div_reset : 1; /**< [ 3: 3](RO) Reserved. Internal: Was common PLL post divider reset. No longer used. */ uint64_t reset : 1; /**< [ 2: 2](R/W) PLL primary reset; must assert [POST_DIV_RESET] if [RESET] is asserted. */ uint64_t cal_en : 1; /**< [ 1: 1](R/W) Enable PLL calibration procedure. */ uint64_t pwdn : 1; /**< [ 0: 0](R/W) PLL power down control. */ #else /* Word 0 - Little Endian */ uint64_t pwdn : 1; /**< [ 0: 0](R/W) PLL power down control. */ uint64_t cal_en : 1; /**< [ 1: 1](R/W) Enable PLL calibration procedure. */ uint64_t reset : 1; /**< [ 2: 2](R/W) PLL primary reset; must assert [POST_DIV_RESET] if [RESET] is asserted. */ uint64_t post_div_reset : 1; /**< [ 3: 3](RO) Reserved. Internal: Was common PLL post divider reset. No longer used. */ uint64_t ssc_reset : 1; /**< [ 4: 4](R/W) PLL SSC state machine reset. */ uint64_t fracn_reset : 1; /**< [ 5: 5](R/W) PLL fractional-N state machine reset. */ uint64_t vco_cal_reset : 1; /**< [ 6: 6](R/W) PLL VCO calibration state machine reset. */ uint64_t lock_check : 1; /**< [ 7: 7](R/W) Trigger a PLL lock status check; result returned in GSERN()_COMMON_INIT_BSTS[LOCK] when GSERN()_COMMON_INIT_BSTS[LOCK_READY] asserts. deassert and re-assert to repeat checking. */ uint64_t lock_wait : 2; /**< [ 9: 8](R/W) Wait time for PLL lock check function to start: 0x0 = Wait 2500 reference clock cycles. 0x1 = Wait 5000 reference clock cycles. 0x2 = Wait 10000 reference clock cycles. 0x3 = Wait 1250 reference clock cycles. */ uint64_t lock_ppm : 2; /**< [ 11: 10](R/W) PLL lock PPM setting; after GSERN()_COMMON_RST_BCFG[LOCK_WAIT], compare reference clock and divided VCO clock for this many cycles: 0x0 = Compare after 5000 reference clock cycles. 0x1 = Compare after 10000 reference clock cycles. 0x2 = Compare after 20000 reference clock cycles. 0x3 = Compare after 2500 reference clock cycles. */ uint64_t pll_go2deep_idle : 1; /**< [ 12: 12](R/W) Set to cycle the common PLL into deep idle. */ uint64_t reserved_13_47 : 35; uint64_t rst_pll_rst_sm : 1; /**< [ 48: 48](R/W) Set to reset the full PLL reset state machine; deassert to run the complete reset initialization sequence starting with common PLL initialization. */ uint64_t reserved_49_54 : 6; uint64_t domain_rst_en : 1; /**< [ 55: 55](R/W) Domain reset enable. 0 = Prevent reseting lane logic with domain reset. 1 = Enable reseting all lane logic with domain reset. For PCIe configurations, typically 1 for a root complex and 0 for an endpoint. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rst_bcfg_s cn; */ }; typedef union bdk_gsernx_common_rst_bcfg bdk_gsernx_common_rst_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_RST_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_RST_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f03b8ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_RST_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_RST_BCFG(a) bdk_gsernx_common_rst_bcfg_t #define bustype_BDK_GSERNX_COMMON_RST_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_RST_BCFG(a) "GSERNX_COMMON_RST_BCFG" #define device_bar_BDK_GSERNX_COMMON_RST_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_RST_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_RST_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rst_cnt0_bcfg * * GSER Common Reset State Machine Delay Count Register 0 * Wait counts for the common block reset state machines. All fields must be set * before bringing the common block out of reset. */ union bdk_gsernx_common_rst_cnt0_bcfg { uint64_t u; struct bdk_gsernx_common_rst_cnt0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_7_63 : 57; uint64_t pre_bias_pwup_wait : 7; /**< [ 6: 0](R/W) Wait count in service clock cycles after initial trigger before deasserting powerdown to the bias generator. The actual delay will be three cycles more than set here, so set this field to the minimum specified delay, 0x40, minus three, or greater. */ #else /* Word 0 - Little Endian */ uint64_t pre_bias_pwup_wait : 7; /**< [ 6: 0](R/W) Wait count in service clock cycles after initial trigger before deasserting powerdown to the bias generator. The actual delay will be three cycles more than set here, so set this field to the minimum specified delay, 0x40, minus three, or greater. */ uint64_t reserved_7_63 : 57; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rst_cnt0_bcfg_s cn; */ }; typedef union bdk_gsernx_common_rst_cnt0_bcfg bdk_gsernx_common_rst_cnt0_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_RST_CNT0_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_RST_CNT0_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0440ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_RST_CNT0_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) bdk_gsernx_common_rst_cnt0_bcfg_t #define bustype_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) "GSERNX_COMMON_RST_CNT0_BCFG" #define device_bar_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_RST_CNT0_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rst_cnt1_bcfg * * GSER Common Reset State Machine Delay Count Register 1 * Wait counts for the common block reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_common_rst_cnt1_bcfg { uint64_t u; struct bdk_gsernx_common_rst_cnt1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_50_63 : 14; uint64_t cal_en_wait : 18; /**< [ 49: 32](R/W) Wait count in service clock cycles after calibration enable before deasserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_28_31 : 4; uint64_t pre_cal_en_wait : 12; /**< [ 27: 16](R/W) Wait count in service clock cycles after deasserting resets to the PLL fracn, ssc, and cal_en state machines before asserting calibration enable to the PLL. Set this to one less than the desired number of cycles of delay. */ uint64_t reserved_11_15 : 5; uint64_t pre_pwup_wait : 11; /**< [ 10: 0](R/W) Wait count in service clock cycles after powering up the bias generator before deasserting pwdn to the PLL. The actual delay will be one cycle more than set here, so set this field to the minimum specified delay, 0x400, minus one, or greater. */ #else /* Word 0 - Little Endian */ uint64_t pre_pwup_wait : 11; /**< [ 10: 0](R/W) Wait count in service clock cycles after powering up the bias generator before deasserting pwdn to the PLL. The actual delay will be one cycle more than set here, so set this field to the minimum specified delay, 0x400, minus one, or greater. */ uint64_t reserved_11_15 : 5; uint64_t pre_cal_en_wait : 12; /**< [ 27: 16](R/W) Wait count in service clock cycles after deasserting resets to the PLL fracn, ssc, and cal_en state machines before asserting calibration enable to the PLL. Set this to one less than the desired number of cycles of delay. */ uint64_t reserved_28_31 : 4; uint64_t cal_en_wait : 18; /**< [ 49: 32](R/W) Wait count in service clock cycles after calibration enable before deasserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_50_63 : 14; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rst_cnt1_bcfg_s cn; */ }; typedef union bdk_gsernx_common_rst_cnt1_bcfg bdk_gsernx_common_rst_cnt1_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_RST_CNT1_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_RST_CNT1_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f04c8ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_RST_CNT1_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) bdk_gsernx_common_rst_cnt1_bcfg_t #define bustype_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) "GSERNX_COMMON_RST_CNT1_BCFG" #define device_bar_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_RST_CNT1_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rst_cnt2_bcfg * * GSER Common Reset State Machine Delay Count Register 2 * Wait counts for the common block reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_common_rst_cnt2_bcfg { uint64_t u; struct bdk_gsernx_common_rst_cnt2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t pre_run_wait : 14; /**< [ 61: 48](R/W) Wait count in service clock cycles after the PLL is running before deasserting common lane reset to bring the lanes out of reset. */ uint64_t reserved_41_47 : 7; uint64_t pre_pll_sm_reset_wait : 9; /**< [ 40: 32](R/W) Wait count in service clock cycles after deasserting pwdn before deasserting resets to the PLL fracn, ssc, and cal_en state machines. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_29_31 : 3; uint64_t pre_pdiv_reset_wait : 13; /**< [ 28: 16](R/W) Reserved. Internal: The PLL no longer has a postdivider reset. */ uint64_t reserved_12_15 : 4; uint64_t pre_pll_reset_wait : 12; /**< [ 11: 0](R/W) Wait count in service clock cycles after calibration enable deasserts before deasserting reset to the PLL. Set this field to one less than the desired number of cycles of delay. */ #else /* Word 0 - Little Endian */ uint64_t pre_pll_reset_wait : 12; /**< [ 11: 0](R/W) Wait count in service clock cycles after calibration enable deasserts before deasserting reset to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_12_15 : 4; uint64_t pre_pdiv_reset_wait : 13; /**< [ 28: 16](R/W) Reserved. Internal: The PLL no longer has a postdivider reset. */ uint64_t reserved_29_31 : 3; uint64_t pre_pll_sm_reset_wait : 9; /**< [ 40: 32](R/W) Wait count in service clock cycles after deasserting pwdn before deasserting resets to the PLL fracn, ssc, and cal_en state machines. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_41_47 : 7; uint64_t pre_run_wait : 14; /**< [ 61: 48](R/W) Wait count in service clock cycles after the PLL is running before deasserting common lane reset to bring the lanes out of reset. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rst_cnt2_bcfg_s cn; */ }; typedef union bdk_gsernx_common_rst_cnt2_bcfg bdk_gsernx_common_rst_cnt2_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_RST_CNT2_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_RST_CNT2_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0550ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_RST_CNT2_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) bdk_gsernx_common_rst_cnt2_bcfg_t #define bustype_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) "GSERNX_COMMON_RST_CNT2_BCFG" #define device_bar_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_RST_CNT2_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_common_rst_rdy_bcfg * * GSER Common Reset Ready Control Register */ union bdk_gsernx_common_rst_rdy_bcfg { uint64_t u; struct bdk_gsernx_common_rst_rdy_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_4_63 : 60; uint64_t ln_en : 4; /**< [ 3: 0](R/W) Enables for lane reset ready inclusion in aggregated QLM reset ready output to the reset controller. Each bit enables contribution from the corresponding lane. \<0\> = Include lane 0. \<1\> = Include lane 1. \<2\> = Include lane 2. \<3\> = Include lane 3. */ #else /* Word 0 - Little Endian */ uint64_t ln_en : 4; /**< [ 3: 0](R/W) Enables for lane reset ready inclusion in aggregated QLM reset ready output to the reset controller. Each bit enables contribution from the corresponding lane. \<0\> = Include lane 0. \<1\> = Include lane 1. \<2\> = Include lane 2. \<3\> = Include lane 3. */ uint64_t reserved_4_63 : 60; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_common_rst_rdy_bcfg_s cn; */ }; typedef union bdk_gsernx_common_rst_rdy_bcfg bdk_gsernx_common_rst_rdy_bcfg_t; static inline uint64_t BDK_GSERNX_COMMON_RST_RDY_BCFG(unsigned long a) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_COMMON_RST_RDY_BCFG(unsigned long a) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=7)) return 0x87e0900f0660ll + 0x1000000ll * ((a) & 0x7); __bdk_csr_fatal("GSERNX_COMMON_RST_RDY_BCFG", 1, a, 0, 0, 0); } #define typedef_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) bdk_gsernx_common_rst_rdy_bcfg_t #define bustype_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) "GSERNX_COMMON_RST_RDY_BCFG" #define device_bar_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) (a) #define arguments_BDK_GSERNX_COMMON_RST_RDY_BCFG(a) (a),-1,-1,-1 /** * Register (RSL) gsern#_lane#_btsclk_cfg * * GSER Lane BTS Synchronous Ethernet Clock Control Register * Register controls settings for providing a clock output from the lane which is * synchronous to the clock recovered from the received data stream. */ union bdk_gsernx_lanex_btsclk_cfg { uint64_t u; struct bdk_gsernx_lanex_btsclk_cfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_9_63 : 55; uint64_t en : 1; /**< [ 8: 8](R/W) Enable driving the clock output from the lane. This bit should be set low before changing [DRATIO]; it may be written to 1 in the same cycle that [DRATIO] is written. */ uint64_t reserved_2_7 : 6; uint64_t dratio : 2; /**< [ 1: 0](R/W) Divider ratio for the clock output from the lane relative to the clock for the parallel receive data. 0x0 = Divide by 1, i.e., no division. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. */ #else /* Word 0 - Little Endian */ uint64_t dratio : 2; /**< [ 1: 0](R/W) Divider ratio for the clock output from the lane relative to the clock for the parallel receive data. 0x0 = Divide by 1, i.e., no division. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. */ uint64_t reserved_2_7 : 6; uint64_t en : 1; /**< [ 8: 8](R/W) Enable driving the clock output from the lane. This bit should be set low before changing [DRATIO]; it may be written to 1 in the same cycle that [DRATIO] is written. */ uint64_t reserved_9_63 : 55; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_btsclk_cfg_s cn; */ }; typedef union bdk_gsernx_lanex_btsclk_cfg bdk_gsernx_lanex_btsclk_cfg_t; static inline uint64_t BDK_GSERNX_LANEX_BTSCLK_CFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_BTSCLK_CFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003870ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_BTSCLK_CFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) bdk_gsernx_lanex_btsclk_cfg_t #define bustype_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) "GSERNX_LANEX_BTSCLK_CFG" #define device_bar_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_BTSCLK_CFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_cdrfsm_bcfg * * GSER Lane Receiver CDR FSM Base Configuration Register * Controls for the clock data recover PLL control finite state * machine. Set these controls prior to bringing the analog receiver out of * reset. */ union bdk_gsernx_lanex_cdrfsm_bcfg { uint64_t u; struct bdk_gsernx_lanex_cdrfsm_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_34_63 : 30; uint64_t voter_sp_mask : 1; /**< [ 33: 33](R/W/H) Set to mask out "010" and "101" patterns in RX cdr voter. */ uint64_t rst_n : 1; /**< [ 32: 32](R/W/H) Clear to hold the receive CDR FSM in reset. */ uint64_t clk_sel : 2; /**< [ 31: 30](R/W/H) 0x0 = Run off div5clk from TX. 0x1 = Run off div3clk from TX. 0x2 = Run off div5clk from RX. 0x3 = Run off div3clk from RX. [CLK_SEL]\<0\> is also used in GSER TX to allow clocking the CDR FSM with a divided copy of the transmit clock. This field should be set as desired before sequencing the transmitter and/or receiver reset state machine(s). */ uint64_t trunc : 2; /**< [ 29: 28](R/W/H) Reserved. Internal: state2[16:0] is CDR state machine 2nd order loop state variable. 0x0 = state2[16:0] is truncated to 13 bits (plus sign bit). 0x1 = state2[16:0] is truncated to 14 bits (plus sign bit). 0x2 = state2[16:0] is truncated to 15 bits (plus sign bit). 0x3 = state2[16:0] is truncated to 16 bits (plus sign bit, no truncation). */ uint64_t limit : 2; /**< [ 27: 26](R/W/H) 0x0 = Pass-through next state at boundaries. 0x1 = Limit next state at boundaries. 0x2-3 = Limit & pause next state at boundaries. */ uint64_t eoffs : 7; /**< [ 25: 19](R/W/H) E interp state offset. */ uint64_t qoffs : 7; /**< [ 18: 12](R/W/H) Q interp state offset. */ uint64_t inc2 : 6; /**< [ 11: 6](R/W/H) 2nd order loop inc. */ uint64_t inc1 : 6; /**< [ 5: 0](R/W/H) 1st order loop inc. */ #else /* Word 0 - Little Endian */ uint64_t inc1 : 6; /**< [ 5: 0](R/W/H) 1st order loop inc. */ uint64_t inc2 : 6; /**< [ 11: 6](R/W/H) 2nd order loop inc. */ uint64_t qoffs : 7; /**< [ 18: 12](R/W/H) Q interp state offset. */ uint64_t eoffs : 7; /**< [ 25: 19](R/W/H) E interp state offset. */ uint64_t limit : 2; /**< [ 27: 26](R/W/H) 0x0 = Pass-through next state at boundaries. 0x1 = Limit next state at boundaries. 0x2-3 = Limit & pause next state at boundaries. */ uint64_t trunc : 2; /**< [ 29: 28](R/W/H) Reserved. Internal: state2[16:0] is CDR state machine 2nd order loop state variable. 0x0 = state2[16:0] is truncated to 13 bits (plus sign bit). 0x1 = state2[16:0] is truncated to 14 bits (plus sign bit). 0x2 = state2[16:0] is truncated to 15 bits (plus sign bit). 0x3 = state2[16:0] is truncated to 16 bits (plus sign bit, no truncation). */ uint64_t clk_sel : 2; /**< [ 31: 30](R/W/H) 0x0 = Run off div5clk from TX. 0x1 = Run off div3clk from TX. 0x2 = Run off div5clk from RX. 0x3 = Run off div3clk from RX. [CLK_SEL]\<0\> is also used in GSER TX to allow clocking the CDR FSM with a divided copy of the transmit clock. This field should be set as desired before sequencing the transmitter and/or receiver reset state machine(s). */ uint64_t rst_n : 1; /**< [ 32: 32](R/W/H) Clear to hold the receive CDR FSM in reset. */ uint64_t voter_sp_mask : 1; /**< [ 33: 33](R/W/H) Set to mask out "010" and "101" patterns in RX cdr voter. */ uint64_t reserved_34_63 : 30; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_cdrfsm_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_cdrfsm_bcfg bdk_gsernx_lanex_cdrfsm_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_CDRFSM_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_CDRFSM_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001cf0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_CDRFSM_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) bdk_gsernx_lanex_cdrfsm_bcfg_t #define bustype_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) "GSERNX_LANEX_CDRFSM_BCFG" #define device_bar_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_CDRFSM_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_cgx_txeq_bcfg * * GSER Lane CGX Tx Equalizer Base Configuration Register * Register controls settings for the transmitter equalizer taps * when the GSER is configured for CGX mode and KR training is not enabled. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] is set to 'CGX'. */ union bdk_gsernx_lanex_cgx_txeq_bcfg { uint64_t u; struct bdk_gsernx_lanex_cgx_txeq_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_28_63 : 36; uint64_t tx_coeff_update : 1; /**< [ 27: 27](R/W/H) Transmitter coefficient update. An asserting edge will start the transmitter coefficient update sequencer. This field self-clears when the sequence has completed. To update the GSER transmitter euqalizer coefficients program * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CSPD]. then write [TX_COEFF_UPDATE] to 1. */ uint64_t tx_enable : 1; /**< [ 26: 26](R/W) Transmitter enable. 0 = Disable the serdes transmitter. 1 = Enable the serdes transmitter. Internal: Drives the cgx_tx_enable input to the GSERN src_mux. */ uint64_t tx_stuff : 1; /**< [ 25: 25](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter bit stuffing. Programs the transmitter PCS lite layer for bit stuffing. Not used for Ethernet connections. Leave programmed to 0x0. Drives the cgx_tx_stuff input to the GSERN src_mux. */ uint64_t tx_oob : 1; /**< [ 24: 24](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter OOB signaling. Not typically used for Ethernet connnections. Leave programmed to 0x0. Drives the cgx_tx_oob input to the GSERN src_mux. */ uint64_t tx_idle : 1; /**< [ 23: 23](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter electrical idle. Used to force the transmitter to electrical idle. Not typically used for Ethernet connections. Leave progreammed to 0x0. Drives the cgx_tx_idle input to the GSERN src_mux. */ uint64_t tx_cspd : 1; /**< [ 22: 22](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ uint64_t tx_bs : 6; /**< [ 21: 16](R/W) TX bias/swing selection. This setting only takes effect if [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t tx_cpost : 5; /**< [ 15: 11](R/W) Transmitter Post (C+1) equalizer tap coefficient value. Programs the transmitter Post tap. Valid range is 0 to 0x10. See GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_cmain : 6; /**< [ 10: 5](R/W) Transmitter Main (C0) equalizer tap coefficient value. Programs the serdes transmitter Main tap. Valid range is 0x30 to 0x18. When programing the transmitter Pre, Main, and Post taps the following rules must be adhered to: _ ([TX_CMAIN] + [TX_CPRE] + [TX_CPOST]) \<= 0x30. _ ([TX_CMAIN] - [TX_CPRE] - [TX_CPOST]) \>= 0x6. _ 0x30 \<= [TX_CMAIN] \<= 0x18. _ 0x16 \>= [TX_CPRE] \>= 0x0. _ 0x16 \>= [TX_CPOST] \>= 0x0. [TX_CMAIN] should be adjusted when either [TX_CPRE] or [TX_CPOST] is adjusted to provide constant power transmitter amplitude adjustments. To update the GSER serdes transmitter Pre, Main, and Post equalizer taps from the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] fields write GSERN()_LANE()_CGX_TXEQ_BCFG[TX_COEFF_UPDATE] to 1 and subsequently clear [TX_COEFF_UPDATE] to 0. This step transfers the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] to the serdes transmitter equalizer. Related CSRs: * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_COEFF_UPDATE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CSPD]. */ uint64_t tx_cpre : 5; /**< [ 4: 0](R/W) Transmitter Pre (C-1) equalizer tap coefficient value. Programs the transmitter Pre tap. Valid range is 0 to 0x10. See GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. */ #else /* Word 0 - Little Endian */ uint64_t tx_cpre : 5; /**< [ 4: 0](R/W) Transmitter Pre (C-1) equalizer tap coefficient value. Programs the transmitter Pre tap. Valid range is 0 to 0x10. See GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_cmain : 6; /**< [ 10: 5](R/W) Transmitter Main (C0) equalizer tap coefficient value. Programs the serdes transmitter Main tap. Valid range is 0x30 to 0x18. When programing the transmitter Pre, Main, and Post taps the following rules must be adhered to: _ ([TX_CMAIN] + [TX_CPRE] + [TX_CPOST]) \<= 0x30. _ ([TX_CMAIN] - [TX_CPRE] - [TX_CPOST]) \>= 0x6. _ 0x30 \<= [TX_CMAIN] \<= 0x18. _ 0x16 \>= [TX_CPRE] \>= 0x0. _ 0x16 \>= [TX_CPOST] \>= 0x0. [TX_CMAIN] should be adjusted when either [TX_CPRE] or [TX_CPOST] is adjusted to provide constant power transmitter amplitude adjustments. To update the GSER serdes transmitter Pre, Main, and Post equalizer taps from the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] fields write GSERN()_LANE()_CGX_TXEQ_BCFG[TX_COEFF_UPDATE] to 1 and subsequently clear [TX_COEFF_UPDATE] to 0. This step transfers the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] to the serdes transmitter equalizer. Related CSRs: * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_COEFF_UPDATE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CSPD]. */ uint64_t tx_cpost : 5; /**< [ 15: 11](R/W) Transmitter Post (C+1) equalizer tap coefficient value. Programs the transmitter Post tap. Valid range is 0 to 0x10. See GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_bs : 6; /**< [ 21: 16](R/W) TX bias/swing selection. This setting only takes effect if [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t tx_cspd : 1; /**< [ 22: 22](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ uint64_t tx_idle : 1; /**< [ 23: 23](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter electrical idle. Used to force the transmitter to electrical idle. Not typically used for Ethernet connections. Leave progreammed to 0x0. Drives the cgx_tx_idle input to the GSERN src_mux. */ uint64_t tx_oob : 1; /**< [ 24: 24](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter OOB signaling. Not typically used for Ethernet connnections. Leave programmed to 0x0. Drives the cgx_tx_oob input to the GSERN src_mux. */ uint64_t tx_stuff : 1; /**< [ 25: 25](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter bit stuffing. Programs the transmitter PCS lite layer for bit stuffing. Not used for Ethernet connections. Leave programmed to 0x0. Drives the cgx_tx_stuff input to the GSERN src_mux. */ uint64_t tx_enable : 1; /**< [ 26: 26](R/W) Transmitter enable. 0 = Disable the serdes transmitter. 1 = Enable the serdes transmitter. Internal: Drives the cgx_tx_enable input to the GSERN src_mux. */ uint64_t tx_coeff_update : 1; /**< [ 27: 27](R/W/H) Transmitter coefficient update. An asserting edge will start the transmitter coefficient update sequencer. This field self-clears when the sequence has completed. To update the GSER transmitter euqalizer coefficients program * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CMAIN]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_CGX_TXEQ_BCFG[TX_CSPD]. then write [TX_COEFF_UPDATE] to 1. */ uint64_t reserved_28_63 : 36; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_cgx_txeq_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_cgx_txeq_bcfg bdk_gsernx_lanex_cgx_txeq_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003450ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_CGX_TXEQ_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) bdk_gsernx_lanex_cgx_txeq_bcfg_t #define bustype_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) "GSERNX_LANEX_CGX_TXEQ_BCFG" #define device_bar_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_CGX_TXEQ_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_const * * GSER Lane CONST Register * Lane number within the multilane macro. */ union bdk_gsernx_lanex_const { uint64_t u; struct bdk_gsernx_lanex_const_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_8_63 : 56; uint64_t lane_num : 8; /**< [ 7: 0](RO/H) Lane number of this lane within the multilane module */ #else /* Word 0 - Little Endian */ uint64_t lane_num : 8; /**< [ 7: 0](RO/H) Lane number of this lane within the multilane module */ uint64_t reserved_8_63 : 56; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_const_s cn; */ }; typedef union bdk_gsernx_lanex_const bdk_gsernx_lanex_const_t; static inline uint64_t BDK_GSERNX_LANEX_CONST(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_CONST(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000100ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_CONST", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_CONST(a,b) bdk_gsernx_lanex_const_t #define bustype_BDK_GSERNX_LANEX_CONST(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_CONST(a,b) "GSERNX_LANEX_CONST" #define device_bar_BDK_GSERNX_LANEX_CONST(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_CONST(a,b) (a) #define arguments_BDK_GSERNX_LANEX_CONST(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eco * * INTERNAL: GSER Lane ECO Register */ union bdk_gsernx_lanex_eco { uint64_t u; struct bdk_gsernx_lanex_eco_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t eco_rw : 50; /**< [ 63: 14](R/W) Internal: Reserved for ECO use. */ uint64_t eco_rw_pll : 2; /**< [ 13: 12](R/W) Internal: Pre-connected to the PLL. Reserved for ECO use. */ uint64_t eco_rw_tx : 4; /**< [ 11: 8](R/W) Internal: Pre-connected to Tx custom. Reserved for ECO use. */ uint64_t eco_rw_rx_top : 4; /**< [ 7: 4](R/W) Internal: Pre-connected to the north side of Rx custom. Reserved for ECO use. */ uint64_t eco_rw_rx_bot : 4; /**< [ 3: 0](R/W) Internal: Pre-connected to the south side of Rx custom. Reserved for ECO use. */ #else /* Word 0 - Little Endian */ uint64_t eco_rw_rx_bot : 4; /**< [ 3: 0](R/W) Internal: Pre-connected to the south side of Rx custom. Reserved for ECO use. */ uint64_t eco_rw_rx_top : 4; /**< [ 7: 4](R/W) Internal: Pre-connected to the north side of Rx custom. Reserved for ECO use. */ uint64_t eco_rw_tx : 4; /**< [ 11: 8](R/W) Internal: Pre-connected to Tx custom. Reserved for ECO use. */ uint64_t eco_rw_pll : 2; /**< [ 13: 12](R/W) Internal: Pre-connected to the PLL. Reserved for ECO use. */ uint64_t eco_rw : 50; /**< [ 63: 14](R/W) Internal: Reserved for ECO use. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eco_s cn; */ }; typedef union bdk_gsernx_lanex_eco bdk_gsernx_lanex_eco_t; static inline uint64_t BDK_GSERNX_LANEX_ECO(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_ECO(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003970ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_ECO", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_ECO(a,b) bdk_gsernx_lanex_eco_t #define bustype_BDK_GSERNX_LANEX_ECO(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_ECO(a,b) "GSERNX_LANEX_ECO" #define device_bar_BDK_GSERNX_LANEX_ECO(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_ECO(a,b) (a) #define arguments_BDK_GSERNX_LANEX_ECO(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eee_bcfg * * INTERNAL: GSER Lane EEE Base Configuration Register * * Reserved. * Internal: * Register controls settings for GSER behavior when Energy Efficient Ethernet (EEE) is * in use on the link. */ union bdk_gsernx_lanex_eee_bcfg { uint64_t u; struct bdk_gsernx_lanex_eee_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_58_63 : 6; uint64_t rx_qa_sqlch_cnt : 12; /**< [ 57: 46](R/W) Reserved. Internal: Receiever QUIET to DATA squelch count. Used to implement a delay or filter function for the receive data to the CGX MAC when the receiver transitions from the EEE QUIET state to the EEE ACTIVE state. [RX_QA_SQLCH_CNT] counter is in units of 10ns. Used in conjuncton with GSERN()_LANE()_EEE_BCFG[RX_QA_SQLCH_EN]. */ uint64_t rx_qa_sqlch_en : 1; /**< [ 45: 45](R/W) Reserved. Internal: Receiever QUIET to DATA squelch enable. When [RX_QA_SQLCH_EN] is enabled the receive data to the CGX MAC will be suppressed following the transition from receiver EEE QUIET state to receiver EEE ACTIVE state for the time defined by the GSERN()_LANE()_EEE_BCFG[RX_QA_SQLCH_CNT] squelch count in units of 10ns. This is a optional filtering function to prevent garbage data to the CGX MAC as the receiver is transitioning from the EEE QUIET to EEE ACTIVE states. */ uint64_t tx_quiet_drv_en : 1; /**< [ 44: 44](R/W) Reserved. Internal: Transmitter QUIET drive enable. When [TX_QUIET_DRV_EN] is set to one the transmitter Tx+/Tx- driver outputs will drive to electrical idle when either the CGX MAC moves the SerDes transmitter block from the EEE ACTIVE state to the EEE QUIET state or the GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD] is set to one. This ensures that the link partner receiver energy detector sees the local device transmitter transition from the EEE ACTIVE state to the EEE QUIET state. When [TX_QUIET_DRV_EN] is set to one the transmitter Tx+/Tx- driver outputs will drive to electrical idle even if the GSERN()_LANE()_EEE_BCFG[TX_PWRDN_EN] is cleared to zero to inhibit the transmitter from powering down during EEE deep sleep TX QUIET state. When [TX_QUIET_DRV_EN] is cleared to zero the Transmitter Tx+/Tx- outputs will only drive to electrical idle when the transmitter is powered down by CGX or GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD] is set to one and GSERN()_LANE()_EEE_BCFG[TX_PWRDN_EN] is also set to one to enable transmitter power down. */ uint64_t eee_edet : 1; /**< [ 43: 43](RO/H) Reserved. Internal: EEE energy detected. For diagnostic use only. Reflects the state of the EEE energy detector. Used to test signals for the wake from EEE deep sleep power down modes of the SerDes. */ uint64_t eee_ovrrd : 1; /**< [ 42: 42](R/W) Reserved. Internal: EEE override. For diagnostic use only. When [EEE_OVRRD] is set to one the SerDes EEE rx and tx modes are controlled by GSERN()_LANE()_EEE_BCFG[EEE_RX_OVRRD] and GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes. */ uint64_t eee_tx_ovrrd : 2; /**< [ 41: 40](R/W) Reserved. Internal: EEE Tx override. For diagnostic use only. When GSERN()_LANE()_EEE_BCFG[EEE_OVRRD] is set to one the SerDes transmitter modes are controlled by [EEE_TX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes transmitter. 0x0 = ACTIVE/DATA mode 0x1 = QUIET 0x2 = ALERT 0x3 = Reserved. */ uint64_t eee_rx_ovrrd : 1; /**< [ 39: 39](R/W) Reserved. Internal: EEE Rx override. For diagnostic use only. When GSERN()_LANE()_EEE_BCFG[EEE_OVRRD] is set to one the SerDes receiver modes are controlled by [EEE_RX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes receiver. 0x0 = ACTIVE/DATA mode 0x1 = QUIET */ uint64_t bypass_edet : 1; /**< [ 38: 38](R/W) Reserved. Internal: EEE energy detect bypass. 0 = The Energy Detect EDET signal to CGX will behave normally. EDET will be set to one when energy is detected at the lane receiver and EDET will be cleared to zero when there is no energy detected at the lane receiver. 1 = The Energy Detect EDET signal to CGX will always be set to 1 bypassing the energy detect function. */ uint64_t pwrdn_mode : 2; /**< [ 37: 36](R/W) Reserved. Internal: Programs the PHY power mode down during EEE. Used to select the P1, P2, or Shutdown powe states when entering deep sleep mode. 0x0 = Reserved. 0x1 = The PHY will power down to the P1 power state and the power state cntrols will be configured from the GSERN()_LANE()_EEE_RSTP1_BCFG register. 0x2 = The PHY will power down to the P2 power state and the power state controls will be configured from the GSERN()_LANE()_EEE_RSTP2_BCFG register. 0x3 = The PHY will power down to the shutdown (SHDN) power state and the power state controls will be configured from the GSERN()_LANE()_EEE_RSTSHDN_BCFG register. */ uint64_t eyemon_pwrdn_en : 1; /**< [ 35: 35](R/W) Reserved. Internal: Programs the behavior of the eye monitor power down during EEE. 0 = The eye monitor will not power down during EEE quiet mode. 1 = The eye monitor will power down during the EEE quiet mode. */ uint64_t lpll_pwrdn_en : 1; /**< [ 34: 34](R/W) Reserved. Internal: Programs the behavior of the lane PLL power down during EEE. 0 = The lane PLL will not power down during EEE quiet mode. 1 = The lane PLL will power down during the EEE quiet mode. */ uint64_t tx_pwrdn_en : 1; /**< [ 33: 33](R/W) Reserved. Internal: Programs the behavior of the transmitter power down during EEE. 0 = The transmitter will not power down during EEE quiet mode. 1 = The transmitter will power down during the EEE quiet mode. */ uint64_t rx_pwrdn_en : 1; /**< [ 32: 32](R/W) Reserved. Internal: Programs the behavior of the receiver power down during EEE. 0 = The receiver will not power down during EEE quiet mode. 1 = The receiver will power down during the EEE Quiet mode. */ uint64_t tx_dly_cnt : 16; /**< [ 31: 16](R/W) Reserved. Internal: Programs the delay of the TX PCS layer when the Tx side is transitione from the EEE QUIET phase to the ALERT or ACTIVE phase. This programmable delay adds delau to ensure that txdivclk is running and stable before Tx data resumes. The delay units are in units of service-clock cycles. For diagnostic use only. */ uint64_t rx_dly_cnt : 16; /**< [ 15: 0](R/W) Reserved. Internal: Programs the delay of the RX PCS layer when the receiver is transitioned froom the EEE QUIET to ACTIVE phase. The programmable delay adds delay to ensure that the rxdivclk is running and stable before Rx data resumes. The delay units are in units of service-clock cycles. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t rx_dly_cnt : 16; /**< [ 15: 0](R/W) Reserved. Internal: Programs the delay of the RX PCS layer when the receiver is transitioned froom the EEE QUIET to ACTIVE phase. The programmable delay adds delay to ensure that the rxdivclk is running and stable before Rx data resumes. The delay units are in units of service-clock cycles. For diagnostic use only. */ uint64_t tx_dly_cnt : 16; /**< [ 31: 16](R/W) Reserved. Internal: Programs the delay of the TX PCS layer when the Tx side is transitione from the EEE QUIET phase to the ALERT or ACTIVE phase. This programmable delay adds delau to ensure that txdivclk is running and stable before Tx data resumes. The delay units are in units of service-clock cycles. For diagnostic use only. */ uint64_t rx_pwrdn_en : 1; /**< [ 32: 32](R/W) Reserved. Internal: Programs the behavior of the receiver power down during EEE. 0 = The receiver will not power down during EEE quiet mode. 1 = The receiver will power down during the EEE Quiet mode. */ uint64_t tx_pwrdn_en : 1; /**< [ 33: 33](R/W) Reserved. Internal: Programs the behavior of the transmitter power down during EEE. 0 = The transmitter will not power down during EEE quiet mode. 1 = The transmitter will power down during the EEE quiet mode. */ uint64_t lpll_pwrdn_en : 1; /**< [ 34: 34](R/W) Reserved. Internal: Programs the behavior of the lane PLL power down during EEE. 0 = The lane PLL will not power down during EEE quiet mode. 1 = The lane PLL will power down during the EEE quiet mode. */ uint64_t eyemon_pwrdn_en : 1; /**< [ 35: 35](R/W) Reserved. Internal: Programs the behavior of the eye monitor power down during EEE. 0 = The eye monitor will not power down during EEE quiet mode. 1 = The eye monitor will power down during the EEE quiet mode. */ uint64_t pwrdn_mode : 2; /**< [ 37: 36](R/W) Reserved. Internal: Programs the PHY power mode down during EEE. Used to select the P1, P2, or Shutdown powe states when entering deep sleep mode. 0x0 = Reserved. 0x1 = The PHY will power down to the P1 power state and the power state cntrols will be configured from the GSERN()_LANE()_EEE_RSTP1_BCFG register. 0x2 = The PHY will power down to the P2 power state and the power state controls will be configured from the GSERN()_LANE()_EEE_RSTP2_BCFG register. 0x3 = The PHY will power down to the shutdown (SHDN) power state and the power state controls will be configured from the GSERN()_LANE()_EEE_RSTSHDN_BCFG register. */ uint64_t bypass_edet : 1; /**< [ 38: 38](R/W) Reserved. Internal: EEE energy detect bypass. 0 = The Energy Detect EDET signal to CGX will behave normally. EDET will be set to one when energy is detected at the lane receiver and EDET will be cleared to zero when there is no energy detected at the lane receiver. 1 = The Energy Detect EDET signal to CGX will always be set to 1 bypassing the energy detect function. */ uint64_t eee_rx_ovrrd : 1; /**< [ 39: 39](R/W) Reserved. Internal: EEE Rx override. For diagnostic use only. When GSERN()_LANE()_EEE_BCFG[EEE_OVRRD] is set to one the SerDes receiver modes are controlled by [EEE_RX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes receiver. 0x0 = ACTIVE/DATA mode 0x1 = QUIET */ uint64_t eee_tx_ovrrd : 2; /**< [ 41: 40](R/W) Reserved. Internal: EEE Tx override. For diagnostic use only. When GSERN()_LANE()_EEE_BCFG[EEE_OVRRD] is set to one the SerDes transmitter modes are controlled by [EEE_TX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes transmitter. 0x0 = ACTIVE/DATA mode 0x1 = QUIET 0x2 = ALERT 0x3 = Reserved. */ uint64_t eee_ovrrd : 1; /**< [ 42: 42](R/W) Reserved. Internal: EEE override. For diagnostic use only. When [EEE_OVRRD] is set to one the SerDes EEE rx and tx modes are controlled by GSERN()_LANE()_EEE_BCFG[EEE_RX_OVRRD] and GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD]. Used to test the EEE deep sleep power down modes of the SerDes. */ uint64_t eee_edet : 1; /**< [ 43: 43](RO/H) Reserved. Internal: EEE energy detected. For diagnostic use only. Reflects the state of the EEE energy detector. Used to test signals for the wake from EEE deep sleep power down modes of the SerDes. */ uint64_t tx_quiet_drv_en : 1; /**< [ 44: 44](R/W) Reserved. Internal: Transmitter QUIET drive enable. When [TX_QUIET_DRV_EN] is set to one the transmitter Tx+/Tx- driver outputs will drive to electrical idle when either the CGX MAC moves the SerDes transmitter block from the EEE ACTIVE state to the EEE QUIET state or the GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD] is set to one. This ensures that the link partner receiver energy detector sees the local device transmitter transition from the EEE ACTIVE state to the EEE QUIET state. When [TX_QUIET_DRV_EN] is set to one the transmitter Tx+/Tx- driver outputs will drive to electrical idle even if the GSERN()_LANE()_EEE_BCFG[TX_PWRDN_EN] is cleared to zero to inhibit the transmitter from powering down during EEE deep sleep TX QUIET state. When [TX_QUIET_DRV_EN] is cleared to zero the Transmitter Tx+/Tx- outputs will only drive to electrical idle when the transmitter is powered down by CGX or GSERN()_LANE()_EEE_BCFG[EEE_TX_OVRRD] is set to one and GSERN()_LANE()_EEE_BCFG[TX_PWRDN_EN] is also set to one to enable transmitter power down. */ uint64_t rx_qa_sqlch_en : 1; /**< [ 45: 45](R/W) Reserved. Internal: Receiever QUIET to DATA squelch enable. When [RX_QA_SQLCH_EN] is enabled the receive data to the CGX MAC will be suppressed following the transition from receiver EEE QUIET state to receiver EEE ACTIVE state for the time defined by the GSERN()_LANE()_EEE_BCFG[RX_QA_SQLCH_CNT] squelch count in units of 10ns. This is a optional filtering function to prevent garbage data to the CGX MAC as the receiver is transitioning from the EEE QUIET to EEE ACTIVE states. */ uint64_t rx_qa_sqlch_cnt : 12; /**< [ 57: 46](R/W) Reserved. Internal: Receiever QUIET to DATA squelch count. Used to implement a delay or filter function for the receive data to the CGX MAC when the receiver transitions from the EEE QUIET state to the EEE ACTIVE state. [RX_QA_SQLCH_CNT] counter is in units of 10ns. Used in conjuncton with GSERN()_LANE()_EEE_BCFG[RX_QA_SQLCH_EN]. */ uint64_t reserved_58_63 : 6; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eee_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_eee_bcfg bdk_gsernx_lanex_eee_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_EEE_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EEE_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003650ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EEE_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EEE_BCFG(a,b) bdk_gsernx_lanex_eee_bcfg_t #define bustype_BDK_GSERNX_LANEX_EEE_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EEE_BCFG(a,b) "GSERNX_LANEX_EEE_BCFG" #define device_bar_BDK_GSERNX_LANEX_EEE_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EEE_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EEE_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eee_rstp1_bcfg * * INTERNAL: GSER Lane EEE PowerDown P1 Reset States Control Register * * Reserved. * Internal: * Controls the power down and reset states of the serdes lane PLL, transmitter, receiver, * receiver adaptation, and eye monitor blocks during the EEE deep sleep power down P1 state. */ union bdk_gsernx_lanex_eee_rstp1_bcfg { uint64_t u; struct bdk_gsernx_lanex_eee_rstp1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_33_63 : 31; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep P1 PowerDown state. Note: this value is never likely to be changed from the normal run state (0x8). */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep P1 PowerDown state. Note: this value is never likely to be changed from the normal run state (0x8). */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep P1 PowerDown state. */ uint64_t reserved_33_63 : 31; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eee_rstp1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_eee_rstp1_bcfg bdk_gsernx_lanex_eee_rstp1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003750ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EEE_RSTP1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) bdk_gsernx_lanex_eee_rstp1_bcfg_t #define bustype_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) "GSERNX_LANEX_EEE_RSTP1_BCFG" #define device_bar_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EEE_RSTP1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eee_rstp2_bcfg * * INTERNAL: GSER Lane EEE PowerDown P2 Reset States Control Register * * Reserved. * Internal: * Controls the power down and reset states of the serdes lane PLL, transmitter, receiver, * receiver adaptation, and eye monitor blocks during the EEE deep sleep power down P2 state. */ union bdk_gsernx_lanex_eee_rstp2_bcfg { uint64_t u; struct bdk_gsernx_lanex_eee_rstp2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_33_63 : 31; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep P2 PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep P2 PowerDown state. */ uint64_t reserved_33_63 : 31; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eee_rstp2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_eee_rstp2_bcfg bdk_gsernx_lanex_eee_rstp2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003760ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EEE_RSTP2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) bdk_gsernx_lanex_eee_rstp2_bcfg_t #define bustype_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) "GSERNX_LANEX_EEE_RSTP2_BCFG" #define device_bar_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EEE_RSTP2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eee_rstshdn_bcfg * * INTERNAL: GSER Lane EEE PowerDown P2 Reset States Control Register * * Reserved. * Internal: * Controls the power down and reset states of the serdes lane PLL, transmitter, receiver, * receiver adaptation, and eye monitor blocks during the EEE deep sleep power shut down state. */ union bdk_gsernx_lanex_eee_rstshdn_bcfg { uint64_t u; struct bdk_gsernx_lanex_eee_rstshdn_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_33_63 : 31; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep shutdown PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: LANE PLL reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: TX reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: RX reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: Eye monitor reset state during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: Rx Adapt state Pause (0) or Hard Reset (1) during EEE deep sleep shutdown PowerDown state. */ uint64_t reserved_33_63 : 31; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eee_rstshdn_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_eee_rstshdn_bcfg bdk_gsernx_lanex_eee_rstshdn_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003770ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EEE_RSTSHDN_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) bdk_gsernx_lanex_eee_rstshdn_bcfg_t #define bustype_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) "GSERNX_LANEX_EEE_RSTSHDN_BCFG" #define device_bar_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EEE_RSTSHDN_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eye_ctl * * GSER Lane PCS Lite Eye Data Gathering Control Register */ union bdk_gsernx_lanex_eye_ctl { uint64_t u; struct bdk_gsernx_lanex_eye_ctl_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t rst_n : 1; /**< [ 56: 56](R/W) Clear and then set to reset the cycle count timer, the done indicator, and the eye error counts. */ uint64_t reserved_49_55 : 7; uint64_t eye_en : 1; /**< [ 48: 48](R/W) Enable eye error counting (with or without cycle count limits, depending on GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN]). If the cycle count limit feature is not used, counting will stop when GSERN()_LANE()_EYE_CTL[EYE_EN] deasserts. Set this bit prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use the eye data gathering feature. */ uint64_t reserved_41_47 : 7; uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W) Enable use of GSERN()_LANE()_EYE_CTL[CYCLE_CNT] to limit number of cycles of PCS RX clock over which the errors are accumulated. Set this bit prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use cycle count limiting in the eye data gathering feature. */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W) When enabled, this contains the count of PCS receive-clock cycles over which error counts are accumulated. Set GSERN()_LANE()_EYE_CTL[CYCLE_CNT] prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use cycle count limiting in the eye data gathering feature. */ #else /* Word 0 - Little Endian */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W) When enabled, this contains the count of PCS receive-clock cycles over which error counts are accumulated. Set GSERN()_LANE()_EYE_CTL[CYCLE_CNT] prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use cycle count limiting in the eye data gathering feature. */ uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W) Enable use of GSERN()_LANE()_EYE_CTL[CYCLE_CNT] to limit number of cycles of PCS RX clock over which the errors are accumulated. Set this bit prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use cycle count limiting in the eye data gathering feature. */ uint64_t reserved_41_47 : 7; uint64_t eye_en : 1; /**< [ 48: 48](R/W) Enable eye error counting (with or without cycle count limits, depending on GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN]). If the cycle count limit feature is not used, counting will stop when GSERN()_LANE()_EYE_CTL[EYE_EN] deasserts. Set this bit prior to deasserting GSERN()_LANE()_EYE_CTL[RST_N] to use the eye data gathering feature. */ uint64_t reserved_49_55 : 7; uint64_t rst_n : 1; /**< [ 56: 56](R/W) Clear and then set to reset the cycle count timer, the done indicator, and the eye error counts. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eye_ctl_s cn; */ }; typedef union bdk_gsernx_lanex_eye_ctl bdk_gsernx_lanex_eye_ctl_t; static inline uint64_t BDK_GSERNX_LANEX_EYE_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EYE_CTL(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900007b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EYE_CTL", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EYE_CTL(a,b) bdk_gsernx_lanex_eye_ctl_t #define bustype_BDK_GSERNX_LANEX_EYE_CTL(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EYE_CTL(a,b) "GSERNX_LANEX_EYE_CTL" #define device_bar_BDK_GSERNX_LANEX_EYE_CTL(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EYE_CTL(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EYE_CTL(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eye_ctl_2 * * GSER Lane PCS Lite Eye Data Gathering Control Register 2 * The low 4 bits in this register allow for shifting either the doutq or * doute_cal data by 1 or 2 UI to allow for an offset in the framing of the * deserialized data between these two data paths in the receiver. Software * will need to iterate eye or scope measurement with identical settings * for the quadurature and eye datapaths, adjusting the shift bits in this * register until no differences are accumulated. (Note that shifting both * doutq and doute_cal would typically not be useful, since the resulting * alignment would be the same as if neither were shifted.) * * The remaining bits control various aspects of the eye monitor error * counting logic. */ union bdk_gsernx_lanex_eye_ctl_2 { uint64_t u; struct bdk_gsernx_lanex_eye_ctl_2_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_41_63 : 23; uint64_t capture_ones_en : 1; /**< [ 40: 40](R/W) Set to enable capture ones, so that a full eye diagram can be generated. deassert to capture half an eye. The default is to enable the full eye. */ uint64_t capture_ones : 1; /**< [ 39: 39](R/W) Set to choose to capture eye data for ones bits in the serial order in the received data stream. Clear to choose to capture eye data for zero bits in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_EDGEMODE], this signal sets the mode within the eye monitor only. For 00 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=0. For 01 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=1. For 10 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=1. For 11 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=0. */ uint64_t reserved_33_38 : 6; uint64_t eye_adapt_en : 1; /**< [ 32: 32](R/W) Set to enable eye path in the RX calibration DFE (rxcaldfe). It can be asserted/deasserted with GSERN()_LANE()_EYE_CTL[EYE_EN]. It must be enabled for [CAPTURE_EDGEMODE] and GSERN()_LANE()_RX_OS_5_BCFG[C1_E_ADJUST] to be applied to the eye/E path. */ uint64_t reserved_25_31 : 7; uint64_t capture_edgemode : 1; /**< [ 24: 24](R/W) Set to choose capture of eye data for bits that transitioned in serial order in the received data stream. Clear to choose capture of eye data for bits that did not transitioned in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_TRANS] and GSERN()_LANE()_RX_8_BCFG[DFE_EDGEMODE_OVRD], this signal controls the calculation of the c1 bits for the eye/E path. */ uint64_t reserved_17_23 : 7; uint64_t capture_trans : 1; /**< [ 16: 16](R/W) Set to choose capture of eye data for bits that transitioned in serial order in the received data stream. Clear to choose capture of eye data for bits that did not transitioned in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_EDGEMODE], this signal sets the mode within the eye monitor only. For 00 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=0. For 01 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=1. For 10 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=1. For 11 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=0. */ uint64_t reserved_10_15 : 6; uint64_t dbl_shift_doute : 1; /**< [ 9: 9](R/W) Set to shift the doute_cal (receiver eye calibration path) data by 2 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t shift_doute : 1; /**< [ 8: 8](R/W) Set to shift the doute_cal (receiver eye path) data by 1 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t reserved_2_7 : 6; uint64_t dbl_shift_doutq : 1; /**< [ 1: 1](R/W) Set to shift the doutq (receiver normal quadrature path) data by 2 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t shift_doutq : 1; /**< [ 0: 0](R/W) Set to shift the doutq (receiver normal quadrature path) data by 1 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ #else /* Word 0 - Little Endian */ uint64_t shift_doutq : 1; /**< [ 0: 0](R/W) Set to shift the doutq (receiver normal quadrature path) data by 1 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t dbl_shift_doutq : 1; /**< [ 1: 1](R/W) Set to shift the doutq (receiver normal quadrature path) data by 2 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t reserved_2_7 : 6; uint64_t shift_doute : 1; /**< [ 8: 8](R/W) Set to shift the doute_cal (receiver eye path) data by 1 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t dbl_shift_doute : 1; /**< [ 9: 9](R/W) Set to shift the doute_cal (receiver eye calibration path) data by 2 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t reserved_10_15 : 6; uint64_t capture_trans : 1; /**< [ 16: 16](R/W) Set to choose capture of eye data for bits that transitioned in serial order in the received data stream. Clear to choose capture of eye data for bits that did not transitioned in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_EDGEMODE], this signal sets the mode within the eye monitor only. For 00 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=0. For 01 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=1. For 10 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=1. For 11 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=0. */ uint64_t reserved_17_23 : 7; uint64_t capture_edgemode : 1; /**< [ 24: 24](R/W) Set to choose capture of eye data for bits that transitioned in serial order in the received data stream. Clear to choose capture of eye data for bits that did not transitioned in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_TRANS] and GSERN()_LANE()_RX_8_BCFG[DFE_EDGEMODE_OVRD], this signal controls the calculation of the c1 bits for the eye/E path. */ uint64_t reserved_25_31 : 7; uint64_t eye_adapt_en : 1; /**< [ 32: 32](R/W) Set to enable eye path in the RX calibration DFE (rxcaldfe). It can be asserted/deasserted with GSERN()_LANE()_EYE_CTL[EYE_EN]. It must be enabled for [CAPTURE_EDGEMODE] and GSERN()_LANE()_RX_OS_5_BCFG[C1_E_ADJUST] to be applied to the eye/E path. */ uint64_t reserved_33_38 : 6; uint64_t capture_ones : 1; /**< [ 39: 39](R/W) Set to choose to capture eye data for ones bits in the serial order in the received data stream. Clear to choose to capture eye data for zero bits in serial order in the received data stream. Program as desired before enabling eye data capture. Unlike [CAPTURE_EDGEMODE], this signal sets the mode within the eye monitor only. For 00 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=0. For 01 bit sequence errors, use [CAPTURE_ONES]=0 and [CAPTURE_TRANS]=1. For 10 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=1. For 11 bit sequence errors, use [CAPTURE_ONES]=1 and [CAPTURE_TRANS]=0. */ uint64_t capture_ones_en : 1; /**< [ 40: 40](R/W) Set to enable capture ones, so that a full eye diagram can be generated. deassert to capture half an eye. The default is to enable the full eye. */ uint64_t reserved_41_63 : 23; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eye_ctl_2_s cn; */ }; typedef union bdk_gsernx_lanex_eye_ctl_2 bdk_gsernx_lanex_eye_ctl_2_t; static inline uint64_t BDK_GSERNX_LANEX_EYE_CTL_2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EYE_CTL_2(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900007c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EYE_CTL_2", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) bdk_gsernx_lanex_eye_ctl_2_t #define bustype_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) "GSERNX_LANEX_EYE_CTL_2" #define device_bar_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EYE_CTL_2(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_eye_dat * * GSER Lane PCS Lite Eye Data Gathering Result Register */ union bdk_gsernx_lanex_eye_dat { uint64_t u; struct bdk_gsernx_lanex_eye_dat_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_50_63 : 14; uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_EYE_CTL[CYCLE_CNT] has expired if GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] is asserted. If GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] is deasserted, this bit will always read as asserted. */ uint64_t reserved_48 : 1; uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When set indicates GSERN()_LANE()_EYE_DAT[ERR_CNT] overflowed and is not accurate. */ uint64_t reserved_45_46 : 2; uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of bit errors seen in doute_cal relative to doutq. If GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] and GSERN()_LANE()_EYE_DAT[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_EYE_DAT[ERR_CNT] may not be reliable unless GSERN()_LANE()_EYE_CTL[EYE_EN] is first cleared (to stop the error counter). */ #else /* Word 0 - Little Endian */ uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of bit errors seen in doute_cal relative to doutq. If GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] and GSERN()_LANE()_EYE_DAT[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_EYE_DAT[ERR_CNT] may not be reliable unless GSERN()_LANE()_EYE_CTL[EYE_EN] is first cleared (to stop the error counter). */ uint64_t reserved_45_46 : 2; uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When set indicates GSERN()_LANE()_EYE_DAT[ERR_CNT] overflowed and is not accurate. */ uint64_t reserved_48 : 1; uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_EYE_CTL[CYCLE_CNT] has expired if GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] is asserted. If GSERN()_LANE()_EYE_CTL[CYCLE_CNT_EN] is deasserted, this bit will always read as asserted. */ uint64_t reserved_50_63 : 14; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_eye_dat_s cn; */ }; typedef union bdk_gsernx_lanex_eye_dat bdk_gsernx_lanex_eye_dat_t; static inline uint64_t BDK_GSERNX_LANEX_EYE_DAT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_EYE_DAT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900007d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_EYE_DAT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_EYE_DAT(a,b) bdk_gsernx_lanex_eye_dat_t #define bustype_BDK_GSERNX_LANEX_EYE_DAT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_EYE_DAT(a,b) "GSERNX_LANEX_EYE_DAT" #define device_bar_BDK_GSERNX_LANEX_EYE_DAT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_EYE_DAT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_EYE_DAT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_idledet_hys * * GSER Lane Receiver Idle Detector Hysteresis Control Register * Parameters controlling hystersis in the custom receiver's idle detector. When * enabled, the hysteresis function adjusts the idle detector offset to bias the * detector in favor of the current idle state after the current state has been stable * for some time. The [HYS_CNT], [HYS_POS], and [HYS_NEG] control fields should be set * before or concurrently with writing [HYS_EN] to 1 when the hystersis function is to * be used. */ union bdk_gsernx_lanex_idledet_hys { uint64_t u; struct bdk_gsernx_lanex_idledet_hys_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_17_63 : 47; uint64_t hys_en : 1; /**< [ 16: 16](R/W) Enable the hysteresis function. */ uint64_t reserved_14_15 : 2; uint64_t hys_cnt : 6; /**< [ 13: 8](R/W) Count of 10 ns cycles after a change in idle offset hysteresis direction before a new hysteresis direction will be applied. */ uint64_t hys_pos : 4; /**< [ 7: 4](R/W) Offset shift to bias the idle detector in favor of not idle after the the detector has reported not idle for [HYS_CNT] cycles. The offset shift is incremented approximately 5 mV per step. */ uint64_t hys_neg : 4; /**< [ 3: 0](R/W) Offset shift to bias the idle detector in favor of idle after the detector has reported idle for [HYS_CNT] cycles. The offset shift is incremented approximately 5 mV per step. */ #else /* Word 0 - Little Endian */ uint64_t hys_neg : 4; /**< [ 3: 0](R/W) Offset shift to bias the idle detector in favor of idle after the detector has reported idle for [HYS_CNT] cycles. The offset shift is incremented approximately 5 mV per step. */ uint64_t hys_pos : 4; /**< [ 7: 4](R/W) Offset shift to bias the idle detector in favor of not idle after the the detector has reported not idle for [HYS_CNT] cycles. The offset shift is incremented approximately 5 mV per step. */ uint64_t hys_cnt : 6; /**< [ 13: 8](R/W) Count of 10 ns cycles after a change in idle offset hysteresis direction before a new hysteresis direction will be applied. */ uint64_t reserved_14_15 : 2; uint64_t hys_en : 1; /**< [ 16: 16](R/W) Enable the hysteresis function. */ uint64_t reserved_17_63 : 47; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_idledet_hys_s cn; */ }; typedef union bdk_gsernx_lanex_idledet_hys bdk_gsernx_lanex_idledet_hys_t; static inline uint64_t BDK_GSERNX_LANEX_IDLEDET_HYS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_IDLEDET_HYS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900010f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_IDLEDET_HYS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) bdk_gsernx_lanex_idledet_hys_t #define bustype_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) "GSERNX_LANEX_IDLEDET_HYS" #define device_bar_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_IDLEDET_HYS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_imapsel_bcfg * * GSER Lane Interpolator Map Selection Register * Selection control for the interpolator map. Set prior to bringing the analog * receiver out of reset. */ union bdk_gsernx_lanex_imapsel_bcfg { uint64_t u; struct bdk_gsernx_lanex_imapsel_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_5_63 : 59; uint64_t map_case : 5; /**< [ 4: 0](R/W) Interpolator map case selector. 0x0 = data_500_erc_2_c_0_20_mean. 0x1 = data_407_erc_2_c_0_20_mean. 0x2 = data_333_erc_3_c_0_20_mean. 0x3 = data_167_erc_5_c_0_20_mean. 0x4 = data_80_erc_8_c_0_20_mean. 0x5 = data_63_erc_10_c_0_20_mean. 0x6 = data_50_erc_11_c_0_20_mean. 0x7 = data_40_erc_13_c_0_20_mean. 0x8 = data_39_erc_14_c_0_20_mean. 0x9 = data_36_erc_15_c_0_20_mean. 0xa = data_31_erc_15_c_0_20_mean. 0xf = {GSERN()_LANE()_MAP1, GSERN()_LANE()_MAP0}. all others = 0. */ #else /* Word 0 - Little Endian */ uint64_t map_case : 5; /**< [ 4: 0](R/W) Interpolator map case selector. 0x0 = data_500_erc_2_c_0_20_mean. 0x1 = data_407_erc_2_c_0_20_mean. 0x2 = data_333_erc_3_c_0_20_mean. 0x3 = data_167_erc_5_c_0_20_mean. 0x4 = data_80_erc_8_c_0_20_mean. 0x5 = data_63_erc_10_c_0_20_mean. 0x6 = data_50_erc_11_c_0_20_mean. 0x7 = data_40_erc_13_c_0_20_mean. 0x8 = data_39_erc_14_c_0_20_mean. 0x9 = data_36_erc_15_c_0_20_mean. 0xa = data_31_erc_15_c_0_20_mean. 0xf = {GSERN()_LANE()_MAP1, GSERN()_LANE()_MAP0}. all others = 0. */ uint64_t reserved_5_63 : 59; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_imapsel_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_imapsel_bcfg bdk_gsernx_lanex_imapsel_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_IMAPSEL_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_IMAPSEL_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001df0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_IMAPSEL_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) bdk_gsernx_lanex_imapsel_bcfg_t #define bustype_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) "GSERNX_LANEX_IMAPSEL_BCFG" #define device_bar_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_IMAPSEL_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_init_bsts * * GSER Lane Initialization Base-level Status Register */ union bdk_gsernx_lanex_init_bsts { uint64_t u; struct bdk_gsernx_lanex_init_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_43_63 : 21; uint64_t eye_deep_idle : 1; /**< [ 42: 42](RO/H) Receiver eye path state is deep idle. */ uint64_t eye_rst_sm_complete : 1; /**< [ 41: 41](RO/H) Indicates that the lane eye receive reset state machine has completed. If [EYE_RST_SM_COMPLETE] is set and [EYE_READY] is not, there may be CSR register setting which prevent the receiver eye data path from being ready for use, e.g., power-down or reset overrides. */ uint64_t eye_ready : 1; /**< [ 40: 40](RO/H) Lane analog receiver eye data path reset state machine completion status indicating that the lane receiver eye path ready for use. */ uint64_t tx_pcie_p2 : 1; /**< [ 39: 39](RO/H) Transmitter state is PCIe power state P2. */ uint64_t tx_pcie_p1s2 : 1; /**< [ 38: 38](RO/H) Transmitter state is PCIe power state P1 substate 2. */ uint64_t tx_pcie_p1s1 : 1; /**< [ 37: 37](RO/H) Transmitter state is PCIe power state P1 substate 1. */ uint64_t tx_pcie_p1cpm : 1; /**< [ 36: 36](RO/H) Transmitter state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t tx_pcie_p1 : 1; /**< [ 35: 35](RO/H) Transmitter state is PCIe power state P1. */ uint64_t tx_deep_idle : 1; /**< [ 34: 34](RO/H) Transmitter state is deep idle. */ uint64_t tx_rst_sm_complete : 1; /**< [ 33: 33](RO/H) Indicates that the lane transmitter reset state machine has completed. If [TX_RST_SM_COMPLETE] is set and [TX_READY] is not, there may be CSR register setting which prevent the transmitter from being ready for use, e.g., power-down or reset overrides. */ uint64_t tx_ready : 1; /**< [ 32: 32](RO/H) Lane analog transmitter reset state machine completion status indicating that the lane transmitter is in "idle" configuration and ready to start transmitting data after changing the transmitter drive settings to transmit data. */ uint64_t rx_pcie_p2 : 1; /**< [ 31: 31](RO/H) Receiver state is PCIe power state P2. */ uint64_t rx_pcie_p1s2 : 1; /**< [ 30: 30](RO/H) Receiver state is PCIe power state P1 substate 2. */ uint64_t rx_pcie_p1s1 : 1; /**< [ 29: 29](RO/H) Receiver state is PCIe power state P1 substate 1. */ uint64_t rx_pcie_p1cpm : 1; /**< [ 28: 28](RO/H) Receiver state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t rx_pcie_p1 : 1; /**< [ 27: 27](RO/H) Receiver state is PCIe power state P1. */ uint64_t rx_deep_idle : 1; /**< [ 26: 26](RO/H) Receiver state is deep idle. */ uint64_t rx_rst_sm_complete : 1; /**< [ 25: 25](RO/H) Indicates that the lane receiver reset state machine has completed. If [RX_RST_SM_COMPLETE] is set and [RX_READY] is not, there may be CSR register setting which prevent the receiver from being ready for use, e.g., power-down or reset overrides. */ uint64_t rx_ready : 1; /**< [ 24: 24](RO/H) Lane analog receiver reset state machine completion status that the reset sequence has completed and the lane receiver is ready for afe and dfe adaptation. */ uint64_t pll_cp_cal : 4; /**< [ 23: 20](RO/H) PLL calibration state machine's resulting charge pump setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_17_19 : 3; uint64_t pll_band_cal : 5; /**< [ 16: 12](RO/H) PLL calibration state machine's resulting VCO band setting. Only valid if [CAL_READY] is set. */ uint64_t pll_pcie_p2 : 1; /**< [ 11: 11](RO/H) Lane PLL state is PCIe power state P2. */ uint64_t pll_pcie_p1s2 : 1; /**< [ 10: 10](RO/H) Lane PLL state is PCIe power state P1 substate 2. */ uint64_t pll_pcie_p1s1 : 1; /**< [ 9: 9](RO/H) Lane PLL state is PCIe power state P1 substate 1. */ uint64_t pll_pcie_p1cpm : 1; /**< [ 8: 8](RO/H) Lane PLL state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t pll_pcie_p1 : 1; /**< [ 7: 7](RO/H) Lane PLL state is PCIe power state P1. */ uint64_t pll_deep_idle : 1; /**< [ 6: 6](RO/H) Lane PLL state is deep idle. */ uint64_t rst_sm_complete : 1; /**< [ 5: 5](RO/H) PLL reset state machine has completed. If [RST_SM_COMPLETE] is set and [RST_SM_READY] is not, there may still be CSR register settings preventing the PLL from being ready for use, e.g., power-down or reset overrides. */ uint64_t rst_sm_ready : 1; /**< [ 4: 4](RO/H) PLL reset state machine status indicating that the reset sequence has completed and this PLL is ready for use. */ uint64_t lock : 1; /**< [ 3: 3](RO/H) PLL lock status; only valid if [LOCK_READY] is set. */ uint64_t lock_ready : 1; /**< [ 2: 2](RO/H) PLL lock status check is complete following most recent PLL reset or assertion of GSERN()_LANE()_RST1_BCFG[LOCK_CHECK]. */ uint64_t cal_fail : 1; /**< [ 1: 1](RO/H) PLL calibration failed; valid only if [CAL_READY] is set. */ uint64_t cal_ready : 1; /**< [ 0: 0](RO/H) PLL calibration completed */ #else /* Word 0 - Little Endian */ uint64_t cal_ready : 1; /**< [ 0: 0](RO/H) PLL calibration completed */ uint64_t cal_fail : 1; /**< [ 1: 1](RO/H) PLL calibration failed; valid only if [CAL_READY] is set. */ uint64_t lock_ready : 1; /**< [ 2: 2](RO/H) PLL lock status check is complete following most recent PLL reset or assertion of GSERN()_LANE()_RST1_BCFG[LOCK_CHECK]. */ uint64_t lock : 1; /**< [ 3: 3](RO/H) PLL lock status; only valid if [LOCK_READY] is set. */ uint64_t rst_sm_ready : 1; /**< [ 4: 4](RO/H) PLL reset state machine status indicating that the reset sequence has completed and this PLL is ready for use. */ uint64_t rst_sm_complete : 1; /**< [ 5: 5](RO/H) PLL reset state machine has completed. If [RST_SM_COMPLETE] is set and [RST_SM_READY] is not, there may still be CSR register settings preventing the PLL from being ready for use, e.g., power-down or reset overrides. */ uint64_t pll_deep_idle : 1; /**< [ 6: 6](RO/H) Lane PLL state is deep idle. */ uint64_t pll_pcie_p1 : 1; /**< [ 7: 7](RO/H) Lane PLL state is PCIe power state P1. */ uint64_t pll_pcie_p1cpm : 1; /**< [ 8: 8](RO/H) Lane PLL state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t pll_pcie_p1s1 : 1; /**< [ 9: 9](RO/H) Lane PLL state is PCIe power state P1 substate 1. */ uint64_t pll_pcie_p1s2 : 1; /**< [ 10: 10](RO/H) Lane PLL state is PCIe power state P1 substate 2. */ uint64_t pll_pcie_p2 : 1; /**< [ 11: 11](RO/H) Lane PLL state is PCIe power state P2. */ uint64_t pll_band_cal : 5; /**< [ 16: 12](RO/H) PLL calibration state machine's resulting VCO band setting. Only valid if [CAL_READY] is set. */ uint64_t reserved_17_19 : 3; uint64_t pll_cp_cal : 4; /**< [ 23: 20](RO/H) PLL calibration state machine's resulting charge pump setting. Only valid if [CAL_READY] is set. */ uint64_t rx_ready : 1; /**< [ 24: 24](RO/H) Lane analog receiver reset state machine completion status that the reset sequence has completed and the lane receiver is ready for afe and dfe adaptation. */ uint64_t rx_rst_sm_complete : 1; /**< [ 25: 25](RO/H) Indicates that the lane receiver reset state machine has completed. If [RX_RST_SM_COMPLETE] is set and [RX_READY] is not, there may be CSR register setting which prevent the receiver from being ready for use, e.g., power-down or reset overrides. */ uint64_t rx_deep_idle : 1; /**< [ 26: 26](RO/H) Receiver state is deep idle. */ uint64_t rx_pcie_p1 : 1; /**< [ 27: 27](RO/H) Receiver state is PCIe power state P1. */ uint64_t rx_pcie_p1cpm : 1; /**< [ 28: 28](RO/H) Receiver state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t rx_pcie_p1s1 : 1; /**< [ 29: 29](RO/H) Receiver state is PCIe power state P1 substate 1. */ uint64_t rx_pcie_p1s2 : 1; /**< [ 30: 30](RO/H) Receiver state is PCIe power state P1 substate 2. */ uint64_t rx_pcie_p2 : 1; /**< [ 31: 31](RO/H) Receiver state is PCIe power state P2. */ uint64_t tx_ready : 1; /**< [ 32: 32](RO/H) Lane analog transmitter reset state machine completion status indicating that the lane transmitter is in "idle" configuration and ready to start transmitting data after changing the transmitter drive settings to transmit data. */ uint64_t tx_rst_sm_complete : 1; /**< [ 33: 33](RO/H) Indicates that the lane transmitter reset state machine has completed. If [TX_RST_SM_COMPLETE] is set and [TX_READY] is not, there may be CSR register setting which prevent the transmitter from being ready for use, e.g., power-down or reset overrides. */ uint64_t tx_deep_idle : 1; /**< [ 34: 34](RO/H) Transmitter state is deep idle. */ uint64_t tx_pcie_p1 : 1; /**< [ 35: 35](RO/H) Transmitter state is PCIe power state P1. */ uint64_t tx_pcie_p1cpm : 1; /**< [ 36: 36](RO/H) Transmitter state is PCIe power state P1.CPM (entry to P1 substates or clock disabled state for normal P1 with clock PM support). */ uint64_t tx_pcie_p1s1 : 1; /**< [ 37: 37](RO/H) Transmitter state is PCIe power state P1 substate 1. */ uint64_t tx_pcie_p1s2 : 1; /**< [ 38: 38](RO/H) Transmitter state is PCIe power state P1 substate 2. */ uint64_t tx_pcie_p2 : 1; /**< [ 39: 39](RO/H) Transmitter state is PCIe power state P2. */ uint64_t eye_ready : 1; /**< [ 40: 40](RO/H) Lane analog receiver eye data path reset state machine completion status indicating that the lane receiver eye path ready for use. */ uint64_t eye_rst_sm_complete : 1; /**< [ 41: 41](RO/H) Indicates that the lane eye receive reset state machine has completed. If [EYE_RST_SM_COMPLETE] is set and [EYE_READY] is not, there may be CSR register setting which prevent the receiver eye data path from being ready for use, e.g., power-down or reset overrides. */ uint64_t eye_deep_idle : 1; /**< [ 42: 42](RO/H) Receiver eye path state is deep idle. */ uint64_t reserved_43_63 : 21; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_init_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_init_bsts bdk_gsernx_lanex_init_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_INIT_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_INIT_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000480ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_INIT_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_INIT_BSTS(a,b) bdk_gsernx_lanex_init_bsts_t #define bustype_BDK_GSERNX_LANEX_INIT_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_INIT_BSTS(a,b) "GSERNX_LANEX_INIT_BSTS" #define device_bar_BDK_GSERNX_LANEX_INIT_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_INIT_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_INIT_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_lt_bcfg * * GSER Lane PCS Lite Configuration (Transmit, Receive, and Loopback) Register */ union bdk_gsernx_lanex_lt_bcfg { uint64_t u; struct bdk_gsernx_lanex_lt_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t inj_err_cnt_rst_n : 1; /**< [ 63: 63](R/W/H) Set to zero to hold the error injection counter in reset. */ uint64_t inj_err_cnt_en : 1; /**< [ 62: 62](R/W) PCS will inject a single bit error every other cycle in the transmit data stream at some time following an assertion of [INJ_ERR_CNT_EN]. The number of error cycles to insert is set by [INJ_ERR_CNT_LEN] and it increments the error bit index each cycle. Once all the errors have been transmitted GSER sets GSERN()_LANE()_LT_BSTS[INJ_ERR_CNT_DONE]. Injection of a second set of errors will require clearing the counter by holding [INJ_ERR_CNT_RST_N], asserting [INJ_ERR_CNT_EN], then releasing [INJ_ERR_CNT_RST_N]. This mode should be used separately from [INJ_ERR_BURST_EN] and only one of them can be asserted at any time. */ uint64_t inj_err_cnt_len : 6; /**< [ 61: 56](R/W) Tells the PCS lite error injection logic the total number of bit errors to insert in a walking pattern. Every other cycle 1 bit error will be inserted in a walking index up to the count value specified. The max value is set by the valid data width transmitted. For example, if 8 bits of valid data are transmitted each cycle only from 1-8 count values can be set. The same for 10, 16, 20, 32, and 40 bits. */ uint64_t reserved_55 : 1; uint64_t inj_err_burst_en : 1; /**< [ 54: 54](R/W) PCS will inject a contiguous set of error bits in the transmit data stream at some time following an assertion of [INJ_ERR_BURST_EN]. The length of contiguous errors is set by [INJ_ERR_BURST_LEN]. Injection of a second set of errors will require deasserting and then asserting [INJ_ERR_BURST_EN] again. This mode should be used separately from [INJ_ERR_CNT_EN] and only one of them can be asserted at any time. */ uint64_t inj_err_burst_len : 6; /**< [ 53: 48](R/W) Tells the PCS lite error injection logic what length the burst error mask should be. The max value is set by the valid data width transmitted. For example, if 8 bits of valid data are transmitted each cycle, only from 1-8 bits of contiguous errors can be set. The same for 10, 16, 20, 32, and 40 bits. */ uint64_t reserved_44_47 : 4; uint64_t pat_dp_width : 3; /**< [ 43: 41](R/W/H) Tells the pattern memory generator/checker logic what width to use in the generator and checker data paths. 0x0 = 8 (requires bit-stuffing/unstuffing or for debug). 0x1 = 10 (requires bit-stuffing/unstuffing or for debug). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. Checking of received data works correctly only for clock divider ratios of 10, 20, and 40. The transmit data sequence is correct for all clock ratios. */ uint64_t prbs_dp_width : 3; /**< [ 40: 38](R/W/H) Tells the PCS lite layer PRBS logic what width to use in the generator and checker data paths. 0x0 = 8 (requires bit-stuffing/unstuffing or for debug). 0x1 = 10 (requires bit-stuffing/unstuffing or for debug). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. */ uint64_t rx_dp_width : 3; /**< [ 37: 35](R/W/H) Tells the PCS lite layer logic what width to use in the receive data path between the analog macro and downstream logic, hence what data bits of the doutq[39:0] bus are in use. 0x0 = 8 (reserved; debug only). 0x1 = 10 (reserved; debug only). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. This value must only be changed while lite layer is in reset. */ uint64_t tx_dp_width : 3; /**< [ 34: 32](R/W/H) Tells the PCS lite layer logic what width to use in the transmit data path between the lite layer FIFO and the analog macro, hence what data bits of the tx_data[39:0] bus are in use. Values: 0x0 = 8 (reserved; debug only). 0x1 = 10 (reserved; debug only). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. This value must only be changed while lite layer is in reset. */ uint64_t reserved_26_31 : 6; uint64_t core_loopback_mode : 1; /**< [ 25: 25](R/W/H) Enable the core-side loopback mode; controller transmit data are looped back to the controller as receive data in the PCS lite layer. This value must only be changed while lite layer is in reset. */ uint64_t sloop_mode : 1; /**< [ 24: 24](R/W/H) Enable shallow loopback mode (SerDes receive data looped back to SerDes transmit in the PCS lite layer). This value must only be changed while lite layer is in reset. */ uint64_t reserved_23 : 1; uint64_t bitstuff_rx_drop_even : 1; /**< [ 22: 22](R/W/H) Tells the PCS lite receive datapath to drop even bits in the vector of received data from the PMA when [BITSTUFF_RX_EN] is set: 0 = Drop bits 1, 3, 5, 7, ... 1 = Drop bits 0, 2, 4, 6, ... This bit is also used in the eye monitor to mask out the dropped bits when counting mismatches. This value must only be changed while lite layer is in reset. */ uint64_t bitstuff_rx_en : 1; /**< [ 21: 21](R/W/H) Set to expect duplicates on the PMA RX data and drop bits after alignment & ordering for PCS layer to consume. The drop ordering is determined by [BITSTUFF_RX_DROP_EVEN]. This value must only be changed while lite layer is in reset. */ uint64_t inv_rx_polarity : 1; /**< [ 20: 20](R/W/H) Set to invert the polarity of the received data bits. Note that the PCS-lite PRBS checker will require [INV_RX_POLARITY] to be asserted when it is in use to check standard PRBS data from an external source. This value must only be changed while lite layer is in reset. */ uint64_t reverse_rx_bit_order : 1; /**< [ 19: 19](R/W/H) While asserted, the normal receive order (lowest valid bit index received first, highest valid index last) is reversed so the highest valid bit index is received first and lowest valid index is received last. This control needs to be asserted for PRBS testing using the PRBS checker in the GSER macro and for PCIe Gen-1 and Gen-2. */ uint64_t reserved_18 : 1; uint64_t use_bph_wrreq_psh : 1; /**< [ 17: 17](R/W) Reserved. Internal: Delay the transmit FIFO push request synchronization to the pop side by one txdivclk phase. This is a diagnostic / debug tool to help with transmit lane alignment issues. */ uint64_t fifo_algn_qlm_mask : 4; /**< [ 16: 13](R/W) Selection control for which QLMs in this QLM's link group to align in timing the deassertion of reset to this lane's transmitter's clock alignment FIFO. \<0\> = Wait for QLM 0. \<1\> = Wait for QLM 1. \<2\> = Wait for QLM 2. \<3\> = Wait for QLM 3. If a link is made up of lanes in multiple QLMs, the mask in each lane must include all active QLMs (including the QLM containing the current lane). */ uint64_t fifo_algn_lane_mask : 4; /**< [ 12: 9](R/W) Selection control for which lanes in the current QLM to align in timing the deassertion of reset to this lane's transmitter's clock alignment FIFO. \<0\> = Wait for Lane 0. \<1\> = Wait for Lane 1. \<2\> = Wait for Lane 2. \<3\> = Wait for Lane 3. The bit corresponding to the current Lane is ignored. */ uint64_t fifo_bypass_en : 1; /**< [ 8: 8](R/W) For diagnostic use only. Internal: This control is currently inactive and is left as a placeholder for possible re-inclusion in 7nm. Set to bypass the PCS lite layer transmit asynchronous FIFO with a single flop. This saves 1-2 cycles of latency in the transmit path, but imposes additional constraints on static timing closure. Note that shallow loopback data cannot bypass the FIFO. */ uint64_t tx_fifo_pop_start_addr : 3; /**< [ 7: 5](R/W) Reserved. Internal: Starting address for lite transmit FIFO pops (reads). Changing this allows shifting the latency through the FIFO in steps of 1 txdivclk cycle (8, 10, 16, 20, 32, or 40 UI, depending on data path width setting). The function is similar to FIFO_UNLOAD_DLY, but provides a wider range of adjustment. For diagnostic use only. */ uint64_t fifo_unload_dly : 1; /**< [ 4: 4](R/W/H) Set to add one cycle delay to the PCS lite layer transmit asynchronous FIFO pop data. This value must only be changed before releasing [FIFO_RST_N]. */ uint64_t fifo_rst_n : 1; /**< [ 3: 3](R/W/H) Clear to hold the PCS lite layer transmit asynchronous FIFO in reset. */ uint64_t bitstuff_tx_en : 1; /**< [ 2: 2](R/W/H) Set to duplicate the first 20 bits of TX data before alignment & ordering for lower data rates. This could be PCS TX data, PRBS data, or shallow-loopback RX data depending on mode. This value must only be changed while lite layer is in reset. */ uint64_t inv_tx_polarity : 1; /**< [ 1: 1](R/W/H) Set to invert the polarity of the transmit data bits. Note that the PCS-lite PRBS generator will require [INV_TX_POLARITY] to be asserted when PRBS data are being transmitted to match the expected polarity of the standard PRBS patterns. This value must only be changed while lite layer is in reset. */ uint64_t reverse_tx_bit_order : 1; /**< [ 0: 0](R/W/H) Assertion causes the normal transmit order (lowest valid bit index transmitted first, highest valid index last) to be reversed so the highest valid bit index is transmitted first and lowest valid index is transmitted last. Note that the PCS-lite PRBS generator will require [REVERSE_TX_BIT_ORDER] to be asserted. This value must only be changed while lite layer is in reset. */ #else /* Word 0 - Little Endian */ uint64_t reverse_tx_bit_order : 1; /**< [ 0: 0](R/W/H) Assertion causes the normal transmit order (lowest valid bit index transmitted first, highest valid index last) to be reversed so the highest valid bit index is transmitted first and lowest valid index is transmitted last. Note that the PCS-lite PRBS generator will require [REVERSE_TX_BIT_ORDER] to be asserted. This value must only be changed while lite layer is in reset. */ uint64_t inv_tx_polarity : 1; /**< [ 1: 1](R/W/H) Set to invert the polarity of the transmit data bits. Note that the PCS-lite PRBS generator will require [INV_TX_POLARITY] to be asserted when PRBS data are being transmitted to match the expected polarity of the standard PRBS patterns. This value must only be changed while lite layer is in reset. */ uint64_t bitstuff_tx_en : 1; /**< [ 2: 2](R/W/H) Set to duplicate the first 20 bits of TX data before alignment & ordering for lower data rates. This could be PCS TX data, PRBS data, or shallow-loopback RX data depending on mode. This value must only be changed while lite layer is in reset. */ uint64_t fifo_rst_n : 1; /**< [ 3: 3](R/W/H) Clear to hold the PCS lite layer transmit asynchronous FIFO in reset. */ uint64_t fifo_unload_dly : 1; /**< [ 4: 4](R/W/H) Set to add one cycle delay to the PCS lite layer transmit asynchronous FIFO pop data. This value must only be changed before releasing [FIFO_RST_N]. */ uint64_t tx_fifo_pop_start_addr : 3; /**< [ 7: 5](R/W) Reserved. Internal: Starting address for lite transmit FIFO pops (reads). Changing this allows shifting the latency through the FIFO in steps of 1 txdivclk cycle (8, 10, 16, 20, 32, or 40 UI, depending on data path width setting). The function is similar to FIFO_UNLOAD_DLY, but provides a wider range of adjustment. For diagnostic use only. */ uint64_t fifo_bypass_en : 1; /**< [ 8: 8](R/W) For diagnostic use only. Internal: This control is currently inactive and is left as a placeholder for possible re-inclusion in 7nm. Set to bypass the PCS lite layer transmit asynchronous FIFO with a single flop. This saves 1-2 cycles of latency in the transmit path, but imposes additional constraints on static timing closure. Note that shallow loopback data cannot bypass the FIFO. */ uint64_t fifo_algn_lane_mask : 4; /**< [ 12: 9](R/W) Selection control for which lanes in the current QLM to align in timing the deassertion of reset to this lane's transmitter's clock alignment FIFO. \<0\> = Wait for Lane 0. \<1\> = Wait for Lane 1. \<2\> = Wait for Lane 2. \<3\> = Wait for Lane 3. The bit corresponding to the current Lane is ignored. */ uint64_t fifo_algn_qlm_mask : 4; /**< [ 16: 13](R/W) Selection control for which QLMs in this QLM's link group to align in timing the deassertion of reset to this lane's transmitter's clock alignment FIFO. \<0\> = Wait for QLM 0. \<1\> = Wait for QLM 1. \<2\> = Wait for QLM 2. \<3\> = Wait for QLM 3. If a link is made up of lanes in multiple QLMs, the mask in each lane must include all active QLMs (including the QLM containing the current lane). */ uint64_t use_bph_wrreq_psh : 1; /**< [ 17: 17](R/W) Reserved. Internal: Delay the transmit FIFO push request synchronization to the pop side by one txdivclk phase. This is a diagnostic / debug tool to help with transmit lane alignment issues. */ uint64_t reserved_18 : 1; uint64_t reverse_rx_bit_order : 1; /**< [ 19: 19](R/W/H) While asserted, the normal receive order (lowest valid bit index received first, highest valid index last) is reversed so the highest valid bit index is received first and lowest valid index is received last. This control needs to be asserted for PRBS testing using the PRBS checker in the GSER macro and for PCIe Gen-1 and Gen-2. */ uint64_t inv_rx_polarity : 1; /**< [ 20: 20](R/W/H) Set to invert the polarity of the received data bits. Note that the PCS-lite PRBS checker will require [INV_RX_POLARITY] to be asserted when it is in use to check standard PRBS data from an external source. This value must only be changed while lite layer is in reset. */ uint64_t bitstuff_rx_en : 1; /**< [ 21: 21](R/W/H) Set to expect duplicates on the PMA RX data and drop bits after alignment & ordering for PCS layer to consume. The drop ordering is determined by [BITSTUFF_RX_DROP_EVEN]. This value must only be changed while lite layer is in reset. */ uint64_t bitstuff_rx_drop_even : 1; /**< [ 22: 22](R/W/H) Tells the PCS lite receive datapath to drop even bits in the vector of received data from the PMA when [BITSTUFF_RX_EN] is set: 0 = Drop bits 1, 3, 5, 7, ... 1 = Drop bits 0, 2, 4, 6, ... This bit is also used in the eye monitor to mask out the dropped bits when counting mismatches. This value must only be changed while lite layer is in reset. */ uint64_t reserved_23 : 1; uint64_t sloop_mode : 1; /**< [ 24: 24](R/W/H) Enable shallow loopback mode (SerDes receive data looped back to SerDes transmit in the PCS lite layer). This value must only be changed while lite layer is in reset. */ uint64_t core_loopback_mode : 1; /**< [ 25: 25](R/W/H) Enable the core-side loopback mode; controller transmit data are looped back to the controller as receive data in the PCS lite layer. This value must only be changed while lite layer is in reset. */ uint64_t reserved_26_31 : 6; uint64_t tx_dp_width : 3; /**< [ 34: 32](R/W/H) Tells the PCS lite layer logic what width to use in the transmit data path between the lite layer FIFO and the analog macro, hence what data bits of the tx_data[39:0] bus are in use. Values: 0x0 = 8 (reserved; debug only). 0x1 = 10 (reserved; debug only). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. This value must only be changed while lite layer is in reset. */ uint64_t rx_dp_width : 3; /**< [ 37: 35](R/W/H) Tells the PCS lite layer logic what width to use in the receive data path between the analog macro and downstream logic, hence what data bits of the doutq[39:0] bus are in use. 0x0 = 8 (reserved; debug only). 0x1 = 10 (reserved; debug only). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. This value must only be changed while lite layer is in reset. */ uint64_t prbs_dp_width : 3; /**< [ 40: 38](R/W/H) Tells the PCS lite layer PRBS logic what width to use in the generator and checker data paths. 0x0 = 8 (requires bit-stuffing/unstuffing or for debug). 0x1 = 10 (requires bit-stuffing/unstuffing or for debug). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. */ uint64_t pat_dp_width : 3; /**< [ 43: 41](R/W/H) Tells the pattern memory generator/checker logic what width to use in the generator and checker data paths. 0x0 = 8 (requires bit-stuffing/unstuffing or for debug). 0x1 = 10 (requires bit-stuffing/unstuffing or for debug). 0x2 = 16. 0x3 = 20. 0x4 = 32. 0x5 = 40. Checking of received data works correctly only for clock divider ratios of 10, 20, and 40. The transmit data sequence is correct for all clock ratios. */ uint64_t reserved_44_47 : 4; uint64_t inj_err_burst_len : 6; /**< [ 53: 48](R/W) Tells the PCS lite error injection logic what length the burst error mask should be. The max value is set by the valid data width transmitted. For example, if 8 bits of valid data are transmitted each cycle, only from 1-8 bits of contiguous errors can be set. The same for 10, 16, 20, 32, and 40 bits. */ uint64_t inj_err_burst_en : 1; /**< [ 54: 54](R/W) PCS will inject a contiguous set of error bits in the transmit data stream at some time following an assertion of [INJ_ERR_BURST_EN]. The length of contiguous errors is set by [INJ_ERR_BURST_LEN]. Injection of a second set of errors will require deasserting and then asserting [INJ_ERR_BURST_EN] again. This mode should be used separately from [INJ_ERR_CNT_EN] and only one of them can be asserted at any time. */ uint64_t reserved_55 : 1; uint64_t inj_err_cnt_len : 6; /**< [ 61: 56](R/W) Tells the PCS lite error injection logic the total number of bit errors to insert in a walking pattern. Every other cycle 1 bit error will be inserted in a walking index up to the count value specified. The max value is set by the valid data width transmitted. For example, if 8 bits of valid data are transmitted each cycle only from 1-8 count values can be set. The same for 10, 16, 20, 32, and 40 bits. */ uint64_t inj_err_cnt_en : 1; /**< [ 62: 62](R/W) PCS will inject a single bit error every other cycle in the transmit data stream at some time following an assertion of [INJ_ERR_CNT_EN]. The number of error cycles to insert is set by [INJ_ERR_CNT_LEN] and it increments the error bit index each cycle. Once all the errors have been transmitted GSER sets GSERN()_LANE()_LT_BSTS[INJ_ERR_CNT_DONE]. Injection of a second set of errors will require clearing the counter by holding [INJ_ERR_CNT_RST_N], asserting [INJ_ERR_CNT_EN], then releasing [INJ_ERR_CNT_RST_N]. This mode should be used separately from [INJ_ERR_BURST_EN] and only one of them can be asserted at any time. */ uint64_t inj_err_cnt_rst_n : 1; /**< [ 63: 63](R/W/H) Set to zero to hold the error injection counter in reset. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_lt_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_lt_bcfg bdk_gsernx_lanex_lt_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_LT_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_LT_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000580ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_LT_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_LT_BCFG(a,b) bdk_gsernx_lanex_lt_bcfg_t #define bustype_BDK_GSERNX_LANEX_LT_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_LT_BCFG(a,b) "GSERNX_LANEX_LT_BCFG" #define device_bar_BDK_GSERNX_LANEX_LT_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_LT_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_LT_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_lt_bsts * * GSER Lane PCS Lite Status Register */ union bdk_gsernx_lanex_lt_bsts { uint64_t u; struct bdk_gsernx_lanex_lt_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_3_63 : 61; uint64_t inj_err_cnt_done : 1; /**< [ 2: 2](RO/H) Indicates the PCS error injection counter is done. */ uint64_t bitstuff_rx_algn_is_odd : 1;/**< [ 1: 1](RO/H) Indicates the PCS receive data path has detected bit-stuffed receive data that is aligned with duplicate bits in pairs as (1,2), (3,4), (5.6), ... The indication is valid only if the receive data are bit-stuffed and error-free. */ uint64_t bitstuff_rx_algn_is_even : 1;/**< [ 0: 0](RO/H) Indicates the PCS receive data path has detected bit-stuffed receive data that is aligned with duplicate bits in pairs as (0,1), (2,3), (4,5), ... The indication is valid only if the receive data are bit-stuffed and error-free. */ #else /* Word 0 - Little Endian */ uint64_t bitstuff_rx_algn_is_even : 1;/**< [ 0: 0](RO/H) Indicates the PCS receive data path has detected bit-stuffed receive data that is aligned with duplicate bits in pairs as (0,1), (2,3), (4,5), ... The indication is valid only if the receive data are bit-stuffed and error-free. */ uint64_t bitstuff_rx_algn_is_odd : 1;/**< [ 1: 1](RO/H) Indicates the PCS receive data path has detected bit-stuffed receive data that is aligned with duplicate bits in pairs as (1,2), (3,4), (5.6), ... The indication is valid only if the receive data are bit-stuffed and error-free. */ uint64_t inj_err_cnt_done : 1; /**< [ 2: 2](RO/H) Indicates the PCS error injection counter is done. */ uint64_t reserved_3_63 : 61; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_lt_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_lt_bsts bdk_gsernx_lanex_lt_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_LT_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_LT_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000590ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_LT_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_LT_BSTS(a,b) bdk_gsernx_lanex_lt_bsts_t #define bustype_BDK_GSERNX_LANEX_LT_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_LT_BSTS(a,b) "GSERNX_LANEX_LT_BSTS" #define device_bar_BDK_GSERNX_LANEX_LT_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_LT_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_LT_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_lt_prbs1_bcfg * * GSER Lane PCS Lite PRBS Checker Control Register 1 */ union bdk_gsernx_lanex_lt_prbs1_bcfg { uint64_t u; struct bdk_gsernx_lanex_lt_prbs1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t prbs_rx_rst_n : 1; /**< [ 59: 59](R/W/H) Clear to hold the receive PRBS pattern checker in reset. */ uint64_t prbs_rx_mode : 1; /**< [ 58: 58](R/W/H) Enables PRBS checking in the PCS lite layer receive data path. If using PRBS checking, assert GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_MODE] prior to deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_RST_N]. Software can deassert this bit to stop accumulating error counts without resetting the counter. */ uint64_t prbs_tx_rst_n : 1; /**< [ 57: 57](R/W/H) Clear to hold the transmit PRBS pattern generator in reset. */ uint64_t prbs_tx_mode : 1; /**< [ 56: 56](R/W/H) Enables PRBS generation and sending PRBS transmit data to the SERDES macro. If using PRBS transmitting, set GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_MODE] prior to deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. Note that the PCS-lite PRBS generator will require GSERN()_LANE()_LT_BCFG[REVERSE_TX_BIT_ORDER] to be asserted. */ uint64_t reserved_52_55 : 4; uint64_t prbs_mode : 4; /**< [ 51: 48](R/W/H) Selects the PRBS pattern mode for both transmit generation and receive checking: 0 = Prbs07 (taps at 6 & 7; reset default). 1 = Prbs7a (taps at 3 & 7). 2 = Prbs09 (taps at 5 & 9). 3 = Prbs11 (taps at 9 & 11). 4 = Prbs15 (taps at 14 & 15). 5 = Prbs20 (taps at 3 & 20). 6 = Prbs23 (taps at 18 & 23). 7 = Prbs29 (taps at 27 & 29). 8 = Prbs31 (taps at 28 & 31). others reserved. */ uint64_t reserved_41_47 : 7; uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W/H) Enable use of GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT] to limit number of cycles of PCS RX clock over which PRBS errors are accumulated. */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W/H) When enabled, this contains the count of PCS receive-clock cycles over which PRBS error counts are accumulated. */ #else /* Word 0 - Little Endian */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W/H) When enabled, this contains the count of PCS receive-clock cycles over which PRBS error counts are accumulated. */ uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W/H) Enable use of GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT] to limit number of cycles of PCS RX clock over which PRBS errors are accumulated. */ uint64_t reserved_41_47 : 7; uint64_t prbs_mode : 4; /**< [ 51: 48](R/W/H) Selects the PRBS pattern mode for both transmit generation and receive checking: 0 = Prbs07 (taps at 6 & 7; reset default). 1 = Prbs7a (taps at 3 & 7). 2 = Prbs09 (taps at 5 & 9). 3 = Prbs11 (taps at 9 & 11). 4 = Prbs15 (taps at 14 & 15). 5 = Prbs20 (taps at 3 & 20). 6 = Prbs23 (taps at 18 & 23). 7 = Prbs29 (taps at 27 & 29). 8 = Prbs31 (taps at 28 & 31). others reserved. */ uint64_t reserved_52_55 : 4; uint64_t prbs_tx_mode : 1; /**< [ 56: 56](R/W/H) Enables PRBS generation and sending PRBS transmit data to the SERDES macro. If using PRBS transmitting, set GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_MODE] prior to deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. Note that the PCS-lite PRBS generator will require GSERN()_LANE()_LT_BCFG[REVERSE_TX_BIT_ORDER] to be asserted. */ uint64_t prbs_tx_rst_n : 1; /**< [ 57: 57](R/W/H) Clear to hold the transmit PRBS pattern generator in reset. */ uint64_t prbs_rx_mode : 1; /**< [ 58: 58](R/W/H) Enables PRBS checking in the PCS lite layer receive data path. If using PRBS checking, assert GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_MODE] prior to deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_RST_N]. Software can deassert this bit to stop accumulating error counts without resetting the counter. */ uint64_t prbs_rx_rst_n : 1; /**< [ 59: 59](R/W/H) Clear to hold the receive PRBS pattern checker in reset. */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_lt_prbs1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_lt_prbs1_bcfg bdk_gsernx_lanex_lt_prbs1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000690ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_LT_PRBS1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) bdk_gsernx_lanex_lt_prbs1_bcfg_t #define bustype_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) "GSERNX_LANEX_LT_PRBS1_BCFG" #define device_bar_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_LT_PRBS1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_lt_prbs2_bcfg * * GSER Lane PCS Lite PRBS Checker Control Register 2 */ union bdk_gsernx_lanex_lt_prbs2_bcfg { uint64_t u; struct bdk_gsernx_lanex_lt_prbs2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t lock_cnt : 8; /**< [ 55: 48](R/W/H) One less than the number of cycles of matching receive data the PRBS checker needs to see before starting to count errors. Default is 31, for 32 cycles of matching data before starting the PRBS error counter; the maximum setting is 255. Set GSERN()_LANE()_LT_PRBS2_BCFG[LOCK_CNT] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_RST_N]. */ uint64_t reserved_41_47 : 7; uint64_t tx_lfsr_use_preload : 1; /**< [ 40: 40](R/W/H) Enables use of the GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] instead of all zeros in the transmitter LFSR PRBS generator. Set GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD] and GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. */ uint64_t tx_lfsr_preload_value : 40; /**< [ 39: 0](R/W/H) Initial state of the transmitter LFSR PRBS generator (if enabled by GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD]). When enabled, this value will be loaded when GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N] asserts (low). Do not set to all ones, or the LFSR will lock up. Set GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD] and GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. */ #else /* Word 0 - Little Endian */ uint64_t tx_lfsr_preload_value : 40; /**< [ 39: 0](R/W/H) Initial state of the transmitter LFSR PRBS generator (if enabled by GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD]). When enabled, this value will be loaded when GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N] asserts (low). Do not set to all ones, or the LFSR will lock up. Set GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD] and GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. */ uint64_t tx_lfsr_use_preload : 1; /**< [ 40: 40](R/W/H) Enables use of the GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] instead of all zeros in the transmitter LFSR PRBS generator. Set GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_USE_PRELOAD] and GSERN()_LANE()_LT_PRBS2_BCFG[TX_LFSR_PRELOAD_VALUE] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_TX_RST_N]. */ uint64_t reserved_41_47 : 7; uint64_t lock_cnt : 8; /**< [ 55: 48](R/W/H) One less than the number of cycles of matching receive data the PRBS checker needs to see before starting to count errors. Default is 31, for 32 cycles of matching data before starting the PRBS error counter; the maximum setting is 255. Set GSERN()_LANE()_LT_PRBS2_BCFG[LOCK_CNT] as desired before deasserting GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_RST_N]. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_lt_prbs2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_lt_prbs2_bcfg bdk_gsernx_lanex_lt_prbs2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900006a0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_LT_PRBS2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) bdk_gsernx_lanex_lt_prbs2_bcfg_t #define bustype_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) "GSERNX_LANEX_LT_PRBS2_BCFG" #define device_bar_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_LT_PRBS2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_lt_prbs_sts * * GSER Lane PCS Lite PRBS Checker Status Register */ union bdk_gsernx_lanex_lt_prbs_sts { uint64_t u; struct bdk_gsernx_lanex_lt_prbs_sts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_50_63 : 14; uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT] has expired if GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] is set. If GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] is clear, this bit will always read as clear. */ uint64_t lock : 1; /**< [ 48: 48](RO/H) Indicates the PRBS checker logic has achieved lock prior to starting error counting. */ uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When asserted indicates GSERN()_LANE()_LT_PRBS_STS[ERR_CNT] overflowed and is not accurate. */ uint64_t reserved_45_46 : 2; uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of PRBS bit errors seen. If GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] and GSERN()_LANE()_LT_PRBS_STS[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_LT_PRBS_STS[ERR_CNT] may not be reliable unless GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_MODE] is first deasserted (to stop the error counter). */ #else /* Word 0 - Little Endian */ uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of PRBS bit errors seen. If GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] and GSERN()_LANE()_LT_PRBS_STS[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_LT_PRBS_STS[ERR_CNT] may not be reliable unless GSERN()_LANE()_LT_PRBS1_BCFG[PRBS_RX_MODE] is first deasserted (to stop the error counter). */ uint64_t reserved_45_46 : 2; uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When asserted indicates GSERN()_LANE()_LT_PRBS_STS[ERR_CNT] overflowed and is not accurate. */ uint64_t lock : 1; /**< [ 48: 48](RO/H) Indicates the PRBS checker logic has achieved lock prior to starting error counting. */ uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT] has expired if GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] is set. If GSERN()_LANE()_LT_PRBS1_BCFG[CYCLE_CNT_EN] is clear, this bit will always read as clear. */ uint64_t reserved_50_63 : 14; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_lt_prbs_sts_s cn; */ }; typedef union bdk_gsernx_lanex_lt_prbs_sts bdk_gsernx_lanex_lt_prbs_sts_t; static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS_STS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_LT_PRBS_STS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900006b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_LT_PRBS_STS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) bdk_gsernx_lanex_lt_prbs_sts_t #define bustype_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) "GSERNX_LANEX_LT_PRBS_STS" #define device_bar_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_LT_PRBS_STS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_map0 * * GSER Lane Programmable Map Register 0 * Manually settable option for the interpolator map. If using * GSERN()_LANE()_IMAPSEL_BCFG[MAP_CASE]=0xf, set these bits prior to bringing analog * receiver out of reset. */ union bdk_gsernx_lanex_map0 { uint64_t u; struct bdk_gsernx_lanex_map0_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t dat : 64; /**< [ 63: 0](R/W) map register 0, 64 LSB of map 128b vector. */ #else /* Word 0 - Little Endian */ uint64_t dat : 64; /**< [ 63: 0](R/W) map register 0, 64 LSB of map 128b vector. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_map0_s cn; */ }; typedef union bdk_gsernx_lanex_map0 bdk_gsernx_lanex_map0_t; static inline uint64_t BDK_GSERNX_LANEX_MAP0(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_MAP0(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001e00ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_MAP0", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_MAP0(a,b) bdk_gsernx_lanex_map0_t #define bustype_BDK_GSERNX_LANEX_MAP0(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_MAP0(a,b) "GSERNX_LANEX_MAP0" #define device_bar_BDK_GSERNX_LANEX_MAP0(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_MAP0(a,b) (a) #define arguments_BDK_GSERNX_LANEX_MAP0(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_map1 * * GSER Lane Programmable Map Register 1 * Manually settable option for the interpolator map. If using * (GSERN()_LANE()_IMAPSEL_BCFG[MAP_CASE]=0xf), set these bits prior to bringing * analog receiver out of reset. */ union bdk_gsernx_lanex_map1 { uint64_t u; struct bdk_gsernx_lanex_map1_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t dat : 64; /**< [ 63: 0](R/W) Map register 1, 64 most significant bits of map 128-bit vector. */ #else /* Word 0 - Little Endian */ uint64_t dat : 64; /**< [ 63: 0](R/W) Map register 1, 64 most significant bits of map 128-bit vector. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_map1_s cn; */ }; typedef union bdk_gsernx_lanex_map1 bdk_gsernx_lanex_map1_t; static inline uint64_t BDK_GSERNX_LANEX_MAP1(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_MAP1(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001e10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_MAP1", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_MAP1(a,b) bdk_gsernx_lanex_map1_t #define bustype_BDK_GSERNX_LANEX_MAP1(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_MAP1(a,b) "GSERNX_LANEX_MAP1" #define device_bar_BDK_GSERNX_LANEX_MAP1(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_MAP1(a,b) (a) #define arguments_BDK_GSERNX_LANEX_MAP1(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_max_oob_add_count * * GSER Lane RX OOB Maximum ADDER Durations Counted Register * Observes the maximum number of times we had to delay the idle offset * recalibration because of a collision with an OOB event. */ union bdk_gsernx_lanex_max_oob_add_count { uint64_t u; struct bdk_gsernx_lanex_max_oob_add_count_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_8_63 : 56; uint64_t accumulated_oob_adders : 8; /**< [ 7: 0](RO/H) Observed maximum number of OOB ADDERS applied to the idle offset recalibration FSM that delay the calibration. This is in terms of how many GSERN()_LANE()_RX_IDLE_CAL_CFG[OOB_DELAY_ADDER_COUNT] ticks added to the duration between recalibration. */ #else /* Word 0 - Little Endian */ uint64_t accumulated_oob_adders : 8; /**< [ 7: 0](RO/H) Observed maximum number of OOB ADDERS applied to the idle offset recalibration FSM that delay the calibration. This is in terms of how many GSERN()_LANE()_RX_IDLE_CAL_CFG[OOB_DELAY_ADDER_COUNT] ticks added to the duration between recalibration. */ uint64_t reserved_8_63 : 56; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_max_oob_add_count_s cn; */ }; typedef union bdk_gsernx_lanex_max_oob_add_count bdk_gsernx_lanex_max_oob_add_count_t; static inline uint64_t BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001550ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_MAX_OOB_ADD_COUNT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) bdk_gsernx_lanex_max_oob_add_count_t #define bustype_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) "GSERNX_LANEX_MAX_OOB_ADD_COUNT" #define device_bar_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_MAX_OOB_ADD_COUNT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_ocx_txeq_bcfg * * GSER Lane OCX Tx Equalizer Base Configuration Register * Register controls settings for the transmitter equalizer taps * when the GSER is configured for OCX mode and KR training is not enabled. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] is set to 'OCX'. */ union bdk_gsernx_lanex_ocx_txeq_bcfg { uint64_t u; struct bdk_gsernx_lanex_ocx_txeq_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_28_63 : 36; uint64_t tx_coeff_update : 1; /**< [ 27: 27](R/W/H) Transmitter coefficient update. An asserting edge will start the transmitter coefficient update sequencer. This field self-clears when the sequence has completed. To update the GSER transmitter euqalizer coefficients program * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CSPD]. then write [TX_COEFF_UPDATE] to 1. */ uint64_t tx_enable : 1; /**< [ 26: 26](R/W) Transmitter enable. 0 = Disable the serdes transmitter. 1 = Enable the serdes transmitter. Internal: Drives the ocx_tx_enable input to the GSERN src_mux. */ uint64_t tx_stuff : 1; /**< [ 25: 25](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter bit stuffing. Programs the transmitter PCS lite layer for bit stuffing. Not used for OCX connections. Leave programmed to 0x0. Drives the ocx_tx_stuff input to the GSERN src_mux. */ uint64_t tx_oob : 1; /**< [ 24: 24](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter OOB signaling. Not typically used for OCX connnections. Leave programmed to 0x0. Drives the ocx_tx_oob input to the GSERN src_mux. */ uint64_t tx_idle : 1; /**< [ 23: 23](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter electrical idle. Used to force the transmitter to electrical idle. Not typically used for OCX connections. Leave progreammed to 0x0. Drives the ocx_tx_idle input to the GSERN src_mux. */ uint64_t tx_cspd : 1; /**< [ 22: 22](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ uint64_t tx_bs : 6; /**< [ 21: 16](R/W) TX bias/swing selection. This setting only takes effect if [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t tx_cpost : 5; /**< [ 15: 11](R/W) Transmitter Post (C+1) equalizer tap coefficient value. Programs the transmitter Post tap. Valid range is 0 to 0x10. See GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_cmain : 6; /**< [ 10: 5](R/W) Transmitter Main (C0) equalizer tap coefficient value. Programs the serdes transmitter Main tap. Valid range is 0x30 to 0x18. When programing the transmitter Pre, Main, and Post taps the following rules must be adhered to: _ ([TX_CMAIN] + [TX_CPRE] + [TX_CPOST]) \<= 0x30. _ ([TX_CMAIN] - [TX_CPRE] - [TX_CPOST]) \>= 0x6. _ 0x30 \<= [TX_CMAIN] \<= 0x18. _ 0x16 \>= [TX_CPRE] \>= 0x0. _ 0x16 \>= [TX_CPOST] \>= 0x0. [TX_CMAIN] should be adjusted when either [TX_CPRE] or [TX_CPOST] is adjusted to provide constant power transmitter amplitude adjustments. To update the GSER serdes transmitter Pre, Main, and Post equalizer taps from the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] fields write GSERN()_LANE()_OCX_TXEQ_BCFG[TX_COEFF_UPDATE] to 1 and subsequently clear [TX_COEFF_UPDATE] to 0. This step transfers the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] to the serdes transmitter equalizer. Related CSRs: * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_COEFF_UPDATE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CSPD]. */ uint64_t tx_cpre : 5; /**< [ 4: 0](R/W) Transmitter Pre (C-1) equalizer tap coefficient value. Programs the transmitter Pre tap. Valid range is 0 to 0x10. See GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. */ #else /* Word 0 - Little Endian */ uint64_t tx_cpre : 5; /**< [ 4: 0](R/W) Transmitter Pre (C-1) equalizer tap coefficient value. Programs the transmitter Pre tap. Valid range is 0 to 0x10. See GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_cmain : 6; /**< [ 10: 5](R/W) Transmitter Main (C0) equalizer tap coefficient value. Programs the serdes transmitter Main tap. Valid range is 0x30 to 0x18. When programing the transmitter Pre, Main, and Post taps the following rules must be adhered to: _ ([TX_CMAIN] + [TX_CPRE] + [TX_CPOST]) \<= 0x30. _ ([TX_CMAIN] - [TX_CPRE] - [TX_CPOST]) \>= 0x6. _ 0x30 \<= [TX_CMAIN] \<= 0x18. _ 0x16 \>= [TX_CPRE] \>= 0x0. _ 0x16 \>= [TX_CPOST] \>= 0x0. [TX_CMAIN] should be adjusted when either [TX_CPRE] or [TX_CPOST] is adjusted to provide constant power transmitter amplitude adjustments. To update the GSER serdes transmitter Pre, Main, and Post equalizer taps from the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] fields write GSERN()_LANE()_OCX_TXEQ_BCFG[TX_COEFF_UPDATE] to 1 and subsequently clear [TX_COEFF_UPDATE] to 0. This step transfers the [TX_CPOST], [TX_CMAIN], and [TX_CPRE] to the serdes transmitter equalizer. Related CSRs: * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_COEFF_UPDATE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CSPD]. */ uint64_t tx_cpost : 5; /**< [ 15: 11](R/W) Transmitter Post (C+1) equalizer tap coefficient value. Programs the transmitter Post tap. Valid range is 0 to 0x10. See GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. */ uint64_t tx_bs : 6; /**< [ 21: 16](R/W) TX bias/swing selection. This setting only takes effect if [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t tx_cspd : 1; /**< [ 22: 22](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ uint64_t tx_idle : 1; /**< [ 23: 23](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter electrical idle. Used to force the transmitter to electrical idle. Not typically used for OCX connections. Leave progreammed to 0x0. Drives the ocx_tx_idle input to the GSERN src_mux. */ uint64_t tx_oob : 1; /**< [ 24: 24](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter OOB signaling. Not typically used for OCX connnections. Leave programmed to 0x0. Drives the ocx_tx_oob input to the GSERN src_mux. */ uint64_t tx_stuff : 1; /**< [ 25: 25](R/W) Reserved. For Diagnostic Use Only. Internal: Transmitter bit stuffing. Programs the transmitter PCS lite layer for bit stuffing. Not used for OCX connections. Leave programmed to 0x0. Drives the ocx_tx_stuff input to the GSERN src_mux. */ uint64_t tx_enable : 1; /**< [ 26: 26](R/W) Transmitter enable. 0 = Disable the serdes transmitter. 1 = Enable the serdes transmitter. Internal: Drives the ocx_tx_enable input to the GSERN src_mux. */ uint64_t tx_coeff_update : 1; /**< [ 27: 27](R/W/H) Transmitter coefficient update. An asserting edge will start the transmitter coefficient update sequencer. This field self-clears when the sequence has completed. To update the GSER transmitter euqalizer coefficients program * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPOST]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CMAIN]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CPRE]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_BS]. * GSERN()_LANE()_OCX_TXEQ_BCFG[TX_CSPD]. then write [TX_COEFF_UPDATE] to 1. */ uint64_t reserved_28_63 : 36; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_ocx_txeq_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_ocx_txeq_bcfg bdk_gsernx_lanex_ocx_txeq_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003550ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_OCX_TXEQ_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) bdk_gsernx_lanex_ocx_txeq_bcfg_t #define bustype_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) "GSERNX_LANEX_OCX_TXEQ_BCFG" #define device_bar_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_OCX_TXEQ_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pat# * * GSER Lane Pattern Memory Register */ union bdk_gsernx_lanex_patx { uint64_t u; struct bdk_gsernx_lanex_patx_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_40_63 : 24; uint64_t dat : 40; /**< [ 39: 0](R/W) Pattern Memory Registers. All 40b of both registers are used under al clock ratios except 32:1. In 32b (32:1) mode bits [31:0] of each register are used. The total pattern length is 64b in 32b mode and 80b in all other clock modes. The bit pattern in bits [N-1:0] of PAT[0], where N is the clock ratio, must be unique within the overall pattern to allow the pattern checker to correctly lock before checking for errors. Internal: If the pattern data in this register is written while pattern transmission testing is in progress, the transmitted data may be briefly unpredictable. */ #else /* Word 0 - Little Endian */ uint64_t dat : 40; /**< [ 39: 0](R/W) Pattern Memory Registers. All 40b of both registers are used under al clock ratios except 32:1. In 32b (32:1) mode bits [31:0] of each register are used. The total pattern length is 64b in 32b mode and 80b in all other clock modes. The bit pattern in bits [N-1:0] of PAT[0], where N is the clock ratio, must be unique within the overall pattern to allow the pattern checker to correctly lock before checking for errors. Internal: If the pattern data in this register is written while pattern transmission testing is in progress, the transmitted data may be briefly unpredictable. */ uint64_t reserved_40_63 : 24; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_patx_s cn; */ }; typedef union bdk_gsernx_lanex_patx bdk_gsernx_lanex_patx_t; static inline uint64_t BDK_GSERNX_LANEX_PATX(unsigned long a, unsigned long b, unsigned long c) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PATX(unsigned long a, unsigned long b, unsigned long c) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4) && (c<=1))) return 0x87e090007ff0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7) + 8ll * ((c) & 0x1); __bdk_csr_fatal("GSERNX_LANEX_PATX", 3, a, b, c, 0); } #define typedef_BDK_GSERNX_LANEX_PATX(a,b,c) bdk_gsernx_lanex_patx_t #define bustype_BDK_GSERNX_LANEX_PATX(a,b,c) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PATX(a,b,c) "GSERNX_LANEX_PATX" #define device_bar_BDK_GSERNX_LANEX_PATX(a,b,c) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PATX(a,b,c) (a) #define arguments_BDK_GSERNX_LANEX_PATX(a,b,c) (a),(b),(c),-1 /** * Register (RSL) gsern#_lane#_pat_ctrl * * GSER Lane PCS Lite Pattern Memory Stress Control Register */ union bdk_gsernx_lanex_pat_ctrl { uint64_t u; struct bdk_gsernx_lanex_pat_ctrl_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_51_63 : 13; uint64_t tx_rst_n : 1; /**< [ 50: 50](R/W) Clear and then set to reset the pattern memory stress transmit data path, specifically the pattern memory index counter. */ uint64_t rx_rst_n : 1; /**< [ 49: 49](R/W) Clear and then set to reset the pattern memory stress receive checking data path, including the lock indication and the error counts. */ uint64_t en : 1; /**< [ 48: 48](R/W) Enable (i.e., start, or stop if deasserted) pattern memory stress generation and checking. */ uint64_t reserved_41_47 : 7; uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W) Enable use of GSERN()_LANE()_PAT_CTRL[CYCLE_CNT] to limit number of cycles of PCS RX clock over which the pattern memory loopback errors are accumulated. */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W) When enabled by GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN], this contains the count of PCS receive-clock cycles over which pattern memory loopback error counts are accumulated. */ #else /* Word 0 - Little Endian */ uint64_t cycle_cnt : 40; /**< [ 39: 0](R/W) When enabled by GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN], this contains the count of PCS receive-clock cycles over which pattern memory loopback error counts are accumulated. */ uint64_t cycle_cnt_en : 1; /**< [ 40: 40](R/W) Enable use of GSERN()_LANE()_PAT_CTRL[CYCLE_CNT] to limit number of cycles of PCS RX clock over which the pattern memory loopback errors are accumulated. */ uint64_t reserved_41_47 : 7; uint64_t en : 1; /**< [ 48: 48](R/W) Enable (i.e., start, or stop if deasserted) pattern memory stress generation and checking. */ uint64_t rx_rst_n : 1; /**< [ 49: 49](R/W) Clear and then set to reset the pattern memory stress receive checking data path, including the lock indication and the error counts. */ uint64_t tx_rst_n : 1; /**< [ 50: 50](R/W) Clear and then set to reset the pattern memory stress transmit data path, specifically the pattern memory index counter. */ uint64_t reserved_51_63 : 13; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pat_ctrl_s cn; */ }; typedef union bdk_gsernx_lanex_pat_ctrl bdk_gsernx_lanex_pat_ctrl_t; static inline uint64_t BDK_GSERNX_LANEX_PAT_CTRL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PAT_CTRL(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090007fd0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PAT_CTRL", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PAT_CTRL(a,b) bdk_gsernx_lanex_pat_ctrl_t #define bustype_BDK_GSERNX_LANEX_PAT_CTRL(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PAT_CTRL(a,b) "GSERNX_LANEX_PAT_CTRL" #define device_bar_BDK_GSERNX_LANEX_PAT_CTRL(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PAT_CTRL(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PAT_CTRL(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pat_dat * * GSER Lane PCS Lite Pattern Memory Stress Data Result Register */ union bdk_gsernx_lanex_pat_dat { uint64_t u; struct bdk_gsernx_lanex_pat_dat_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t framing_match : 1; /**< [ 63: 63](RO/H) Indicates that the pattern memory checker found a framing match. This field is valid only after enabling pattern memory generation and checking by setting GSERN()_LANE()_PAT_CTRL[EN]. */ uint64_t reserved_62 : 1; uint64_t framing_offset : 6; /**< [ 61: 56](RO/H) The offset the pattern memory checker found of the low bits of the pattern data in the receive data frame. This field is valid only when [FRAMING_MATCH] reads as asserted after enabling pattern memory generation and checking by setting GSERN()_LANE()_PAT_CTRL[EN]. */ uint64_t reserved_50_55 : 6; uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_PAT_CTRL[CYCLE_CNT] has expired if GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] is asserted. If GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] is deasserted, GSERN()_LANE()_PAT_DAT[CYCLE_CNT_DONE] will always read as asserted. */ uint64_t lock : 1; /**< [ 48: 48](RO/H) Indicates the pattern memory checker has achieved lock. */ uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When asserted indicates GSERN()_LANE()_PAT_DAT[ERR_CNT] overflowed and is not accurate. */ uint64_t reserved_45_46 : 2; uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of bit errors seen in pattern memory loopback testing. If GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] and GSERN()_LANE()_PAT_DAT[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_PAT_DAT[ERR_CNT] may not be reliable unless GSERN()_LANE()_PAT_CTRL[EN] is first deasserted (to stop the error counter). */ #else /* Word 0 - Little Endian */ uint64_t err_cnt : 45; /**< [ 44: 0](RO/H) Count of bit errors seen in pattern memory loopback testing. If GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] and GSERN()_LANE()_PAT_DAT[CYCLE_CNT_DONE] are not both asserted, GSERN()_LANE()_PAT_DAT[ERR_CNT] may not be reliable unless GSERN()_LANE()_PAT_CTRL[EN] is first deasserted (to stop the error counter). */ uint64_t reserved_45_46 : 2; uint64_t err_cnt_ovf : 1; /**< [ 47: 47](RO/H) When asserted indicates GSERN()_LANE()_PAT_DAT[ERR_CNT] overflowed and is not accurate. */ uint64_t lock : 1; /**< [ 48: 48](RO/H) Indicates the pattern memory checker has achieved lock. */ uint64_t cycle_cnt_done : 1; /**< [ 49: 49](RO/H) Indicates the GSERN()_LANE()_PAT_CTRL[CYCLE_CNT] has expired if GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] is asserted. If GSERN()_LANE()_PAT_CTRL[CYCLE_CNT_EN] is deasserted, GSERN()_LANE()_PAT_DAT[CYCLE_CNT_DONE] will always read as asserted. */ uint64_t reserved_50_55 : 6; uint64_t framing_offset : 6; /**< [ 61: 56](RO/H) The offset the pattern memory checker found of the low bits of the pattern data in the receive data frame. This field is valid only when [FRAMING_MATCH] reads as asserted after enabling pattern memory generation and checking by setting GSERN()_LANE()_PAT_CTRL[EN]. */ uint64_t reserved_62 : 1; uint64_t framing_match : 1; /**< [ 63: 63](RO/H) Indicates that the pattern memory checker found a framing match. This field is valid only after enabling pattern memory generation and checking by setting GSERN()_LANE()_PAT_CTRL[EN]. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pat_dat_s cn; */ }; typedef union bdk_gsernx_lanex_pat_dat bdk_gsernx_lanex_pat_dat_t; static inline uint64_t BDK_GSERNX_LANEX_PAT_DAT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PAT_DAT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090007fe0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PAT_DAT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PAT_DAT(a,b) bdk_gsernx_lanex_pat_dat_t #define bustype_BDK_GSERNX_LANEX_PAT_DAT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PAT_DAT(a,b) "GSERNX_LANEX_PAT_DAT" #define device_bar_BDK_GSERNX_LANEX_PAT_DAT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PAT_DAT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PAT_DAT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_pcs2_bcfg * * GSER Lane PCIe PCS Control 2 Register * Control settings for PCIe PCS functionality. */ union bdk_gsernx_lanex_pcie_pcs2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_pcs2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pause_adpt_rxstandby : 4; /**< [ 63: 60](R/W) Set to one to allow the PIPE RxStandby to pause all adaptation functions and hold the CDRFSM when the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t frc_unalgn_rxstandby : 4; /**< [ 59: 56](R/W) Enables use of RxStandby to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t frc_unalgn_rxelecidle : 4; /**< [ 55: 52](R/W) Enables use of detected RxElecIdle to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t frc_unalgn_blkalgnctl : 2; /**< [ 51: 50](R/W) Enables use of BlockAlignControl assertion to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen3. \<1\> = PCIe gen4. */ uint64_t pipe_tx_sel : 2; /**< [ 49: 48](R/W) Selects the source for the transmit PIPE controls: \<0\> = PCIe pipe 0 transmit. \<1\> = PCIe pipe 1 transmit. \<2\> = PCIe pipe 2 transmit. \<3\> = Reserved. */ uint64_t reserved_46_47 : 2; uint64_t gen34_pll_div_f : 18; /**< [ 45: 28](R/W) PLL feedback divider fractional portion. */ uint64_t reserved_26_27 : 2; uint64_t gen12_pll_div_f : 18; /**< [ 25: 8](R/W) PLL feedback divider fractional portion. */ uint64_t pause_adpt_on_idle : 4; /**< [ 7: 4](R/W) Set to one to allow the Rx Electrical Idle to pause all adaptation functions and hold the CDRFSM when the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_prevga_gn_adpt : 4; /**< [ 3: 0](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ #else /* Word 0 - Little Endian */ uint64_t do_prevga_gn_adpt : 4; /**< [ 3: 0](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t pause_adpt_on_idle : 4; /**< [ 7: 4](R/W) Set to one to allow the Rx Electrical Idle to pause all adaptation functions and hold the CDRFSM when the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t gen12_pll_div_f : 18; /**< [ 25: 8](R/W) PLL feedback divider fractional portion. */ uint64_t reserved_26_27 : 2; uint64_t gen34_pll_div_f : 18; /**< [ 45: 28](R/W) PLL feedback divider fractional portion. */ uint64_t reserved_46_47 : 2; uint64_t pipe_tx_sel : 2; /**< [ 49: 48](R/W) Selects the source for the transmit PIPE controls: \<0\> = PCIe pipe 0 transmit. \<1\> = PCIe pipe 1 transmit. \<2\> = PCIe pipe 2 transmit. \<3\> = Reserved. */ uint64_t frc_unalgn_blkalgnctl : 2; /**< [ 51: 50](R/W) Enables use of BlockAlignControl assertion to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen3. \<1\> = PCIe gen4. */ uint64_t frc_unalgn_rxelecidle : 4; /**< [ 55: 52](R/W) Enables use of detected RxElecIdle to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t frc_unalgn_rxstandby : 4; /**< [ 59: 56](R/W) Enables use of RxStandby to force the RX PCS into unalign state with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t pause_adpt_rxstandby : 4; /**< [ 63: 60](R/W) Set to one to allow the PIPE RxStandby to pause all adaptation functions and hold the CDRFSM when the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_pcs2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_pcs2_bcfg bdk_gsernx_lanex_pcie_pcs2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001f20ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_PCS2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) bdk_gsernx_lanex_pcie_pcs2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) "GSERNX_LANEX_PCIE_PCS2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_PCS2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_pcs3_bcfg * * GSER Lane PCIe PCS Control 3 Register * Control settings for PCIe PCS functionality. */ union bdk_gsernx_lanex_pcie_pcs3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_pcs3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_36_63 : 28; uint64_t tx_enfast : 4; /**< [ 35: 32](R/W) Enables fast slew on the TX preamp output with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_afeos_final : 4; /**< [ 31: 28](R/W) Set to one to allow AFEOS adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_AFEOS_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctlelte_final : 4; /**< [ 27: 24](R/W) Set to one to allow CTLELTE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLELTE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctlez_final : 4; /**< [ 23: 20](R/W) Set to one to allow CTLEZ adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLEZ_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctle_final : 4; /**< [ 19: 16](R/W) Set to one to allow CTLE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_dfe_final : 4; /**< [ 15: 12](R/W) Set to one to allow DFE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_DFE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_vga_final : 4; /**< [ 11: 8](R/W) Set to one to allow VGA adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_VGA_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_blwc_final : 4; /**< [ 7: 4](R/W) Set to one to allow BLWC adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_BLWC_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_prevga_gn_final : 4; /**< [ 3: 0](R/W) Set to one to allow PREVGA_GN adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS2_BCFG[DO_PREVGA_GN_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ #else /* Word 0 - Little Endian */ uint64_t do_prevga_gn_final : 4; /**< [ 3: 0](R/W) Set to one to allow PREVGA_GN adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS2_BCFG[DO_PREVGA_GN_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_blwc_final : 4; /**< [ 7: 4](R/W) Set to one to allow BLWC adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_BLWC_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_vga_final : 4; /**< [ 11: 8](R/W) Set to one to allow VGA adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_VGA_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_dfe_final : 4; /**< [ 15: 12](R/W) Set to one to allow DFE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_DFE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctle_final : 4; /**< [ 19: 16](R/W) Set to one to allow CTLE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctlez_final : 4; /**< [ 23: 20](R/W) Set to one to allow CTLEZ adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLEZ_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_ctlelte_final : 4; /**< [ 27: 24](R/W) Set to one to allow CTLELTE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_CTLELTE_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t do_afeos_final : 4; /**< [ 31: 28](R/W) Set to one to allow AFEOS adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_PCIE_PCS_BCFG[DO_AFEOS_ADPT] is set and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t tx_enfast : 4; /**< [ 35: 32](R/W) Enables fast slew on the TX preamp output with an individual control bit per PCIe rate mapped as following: \<0\> = PCIe Gen1. \<1\> = PCIe Gen2. \<2\> = PCIe Gen3. \<3\> = PCIe Gen4. */ uint64_t reserved_36_63 : 28; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_pcs3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_pcs3_bcfg bdk_gsernx_lanex_pcie_pcs3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001f30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_PCS3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) bdk_gsernx_lanex_pcie_pcs3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) "GSERNX_LANEX_PCIE_PCS3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_PCS3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_pcs_bcfg * * GSER Lane PCIe PCS Control Register * Control settings for PCIe PCS functionality. */ union bdk_gsernx_lanex_pcie_pcs_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_pcs_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t do_afeos_adpt : 4; /**< [ 63: 60](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctlelte_adpt : 4; /**< [ 59: 56](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctlez_adpt : 4; /**< [ 55: 52](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctle_adpt : 4; /**< [ 51: 48](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_dfe_adpt : 4; /**< [ 47: 44](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_vga_adpt : 4; /**< [ 43: 40](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_blwc_adpt : 4; /**< [ 39: 36](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t gen34_pll_div_n : 9; /**< [ 35: 27](R/W) PLL feedback divider integer portion. */ uint64_t reserved_25_26 : 2; uint64_t gen12_pll_div_n : 9; /**< [ 24: 16](R/W) PLL feedback divider integer portion. */ uint64_t skp_add_thr : 4; /**< [ 15: 12](R/W) SKP addition threshold. The receive elastic store will add a SKP symbol (Gen1/2) or add four SKP symbols (Gen3/4) when the store fill level is less than or equal to this value. */ uint64_t skp_del_thr : 4; /**< [ 11: 8](R/W) SKP deletion threshold. The receive elastic store will delete a SKP symbol (Gen1/2) or delete four SKP symbols (Gen3/4) when the store fill level is greater than or equal to this value plus 8. */ uint64_t comma_thr : 4; /**< [ 7: 4](R/W) COMMA detection threshold. The receive aligner must see this many COMMA characters at the same rotation before declaring symbol alignment (only used for Gen1/2). */ uint64_t error_thr : 4; /**< [ 3: 0](R/W) Error threshold. The receive aligner must see this many COMMA characters at a different rotation than currently in use before declaring loss of symbol alignment (Gen1/2). For Gen3/4 this is the number of invalid Sync Headers needed to cause the aligner to enter the Unaligned Phase and declare an alignment error. */ #else /* Word 0 - Little Endian */ uint64_t error_thr : 4; /**< [ 3: 0](R/W) Error threshold. The receive aligner must see this many COMMA characters at a different rotation than currently in use before declaring loss of symbol alignment (Gen1/2). For Gen3/4 this is the number of invalid Sync Headers needed to cause the aligner to enter the Unaligned Phase and declare an alignment error. */ uint64_t comma_thr : 4; /**< [ 7: 4](R/W) COMMA detection threshold. The receive aligner must see this many COMMA characters at the same rotation before declaring symbol alignment (only used for Gen1/2). */ uint64_t skp_del_thr : 4; /**< [ 11: 8](R/W) SKP deletion threshold. The receive elastic store will delete a SKP symbol (Gen1/2) or delete four SKP symbols (Gen3/4) when the store fill level is greater than or equal to this value plus 8. */ uint64_t skp_add_thr : 4; /**< [ 15: 12](R/W) SKP addition threshold. The receive elastic store will add a SKP symbol (Gen1/2) or add four SKP symbols (Gen3/4) when the store fill level is less than or equal to this value. */ uint64_t gen12_pll_div_n : 9; /**< [ 24: 16](R/W) PLL feedback divider integer portion. */ uint64_t reserved_25_26 : 2; uint64_t gen34_pll_div_n : 9; /**< [ 35: 27](R/W) PLL feedback divider integer portion. */ uint64_t do_blwc_adpt : 4; /**< [ 39: 36](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_vga_adpt : 4; /**< [ 43: 40](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_dfe_adpt : 4; /**< [ 47: 44](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctle_adpt : 4; /**< [ 51: 48](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctlez_adpt : 4; /**< [ 55: 52](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_ctlelte_adpt : 4; /**< [ 59: 56](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ uint64_t do_afeos_adpt : 4; /**< [ 63: 60](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the PCIe lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = PCIe gen1. \<1\> = PCIe gen2. \<2\> = PCIe gen3. \<3\> = PCIe gen4. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_pcs_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_pcs_bcfg bdk_gsernx_lanex_pcie_pcs_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001f10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_PCS_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) bdk_gsernx_lanex_pcie_pcs_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) "GSERNX_LANEX_PCIE_PCS_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_PCS_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_pcs_bsts * * GSER Lane PCIe PCS Status Register * Error Status for PCIe PCS functionality. */ union bdk_gsernx_lanex_pcie_pcs_bsts { uint64_t u; struct bdk_gsernx_lanex_pcie_pcs_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_28_63 : 36; uint64_t pcs_rx_eq_raw_fom : 12; /**< [ 27: 16](RO/H) Raw 12-bit figure of merit for last receiver equalization evaluation. */ uint64_t reserved_5_15 : 11; uint64_t pcs_8b10b_disp_error : 1; /**< [ 4: 4](R/W1C/H) 8B10B disparity error (PCIe Gen1/2 only). A valid 8B10B code word was received with invalid disparity. */ uint64_t pcs_decode_error : 1; /**< [ 3: 3](R/W1C/H) 8B10B decode error (PCIe Gen1/2). An invalid 8B10B code word was detected. The invalid code word was replaced by an EDB symbol (0xFE). 128B130B decode error (PCIe Gen3/4). An error was detected in the first 4N+1 symbols of a SKP ordered set. */ uint64_t es_underflow : 1; /**< [ 2: 2](R/W1C/H) Elastic store underflow. A read was attempted from the receive Elastic Store while it was empty. This would indicate a receive data rate slower than supported or a lack of SKP ordered sets to allow SKP symbol additions. */ uint64_t es_overflow : 1; /**< [ 1: 1](R/W1C/H) Elastic store overflow. A write was attempted to the receive Elastic Store while it was full. This would indicate a receive data rate faster than supported or a lack of SKP ordered sets to allow SKP symbol deletions. */ uint64_t align_error : 1; /**< [ 0: 0](R/W1C/H) Alignment error. The receive aligner has detected an error. For PCIe Gen1/2, an error is declared if GSERN()_LANE()_PCIE_PCS_BCFG[ERROR_THR] COMMA characters are detected at a 10 bit rotation that does not match the active rotation. The COMMAs do not have to all be at the same rotation. For PCIe Gen3/4, an error is declared if GSERN()_LANE()_PCIE_PCS_BCFG[ERROR_THR] invalid sync headers are detected at the current block alignment. */ #else /* Word 0 - Little Endian */ uint64_t align_error : 1; /**< [ 0: 0](R/W1C/H) Alignment error. The receive aligner has detected an error. For PCIe Gen1/2, an error is declared if GSERN()_LANE()_PCIE_PCS_BCFG[ERROR_THR] COMMA characters are detected at a 10 bit rotation that does not match the active rotation. The COMMAs do not have to all be at the same rotation. For PCIe Gen3/4, an error is declared if GSERN()_LANE()_PCIE_PCS_BCFG[ERROR_THR] invalid sync headers are detected at the current block alignment. */ uint64_t es_overflow : 1; /**< [ 1: 1](R/W1C/H) Elastic store overflow. A write was attempted to the receive Elastic Store while it was full. This would indicate a receive data rate faster than supported or a lack of SKP ordered sets to allow SKP symbol deletions. */ uint64_t es_underflow : 1; /**< [ 2: 2](R/W1C/H) Elastic store underflow. A read was attempted from the receive Elastic Store while it was empty. This would indicate a receive data rate slower than supported or a lack of SKP ordered sets to allow SKP symbol additions. */ uint64_t pcs_decode_error : 1; /**< [ 3: 3](R/W1C/H) 8B10B decode error (PCIe Gen1/2). An invalid 8B10B code word was detected. The invalid code word was replaced by an EDB symbol (0xFE). 128B130B decode error (PCIe Gen3/4). An error was detected in the first 4N+1 symbols of a SKP ordered set. */ uint64_t pcs_8b10b_disp_error : 1; /**< [ 4: 4](R/W1C/H) 8B10B disparity error (PCIe Gen1/2 only). A valid 8B10B code word was received with invalid disparity. */ uint64_t reserved_5_15 : 11; uint64_t pcs_rx_eq_raw_fom : 12; /**< [ 27: 16](RO/H) Raw 12-bit figure of merit for last receiver equalization evaluation. */ uint64_t reserved_28_63 : 36; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_pcs_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_pcs_bsts bdk_gsernx_lanex_pcie_pcs_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_PCS_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002a30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_PCS_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) bdk_gsernx_lanex_pcie_pcs_bsts_t #define bustype_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) "GSERNX_LANEX_PCIE_PCS_BSTS" #define device_bar_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_PCS_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstp1_bcfg * * GSER Lane PCIe PowerDown P1 Reset States Control Register * Controls the Reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) corresponding to * PCIe PowerDown state P1. */ union bdk_gsernx_lanex_pcie_rstp1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstp1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1 PowerDown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1 PowerDown state, but is only used when P1 is entered for lanes that were active in a link and that link has now returned to LTSSM.DETECT state and there are other lanes rejoining the link after having been turned off. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1 PowerDown state, but is only used when P1 is entered for lanes that were active in a link and that link has now returned to LTSSM.DETECT state and there are other lanes rejoining the link after having been turned off. Note: this value is never likely to be changed from the normal run state (0x8). */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1 PowerDown state, but is only used when P1 is entered for lanes that were active in a link and that link has now returned to LTSSM.DETECT state and there are other lanes rejoining the link after having been turned off. Note: this value is never likely to be changed from the normal run state (0x8). */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1 PowerDown state, but is only used when P1 is entered for lanes that were active in a link and that link has now returned to LTSSM.DETECT state and there are other lanes rejoining the link after having been turned off. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1 PowerDown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1 PowerDown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstp1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstp1_bcfg bdk_gsernx_lanex_pcie_rstp1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002030ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTP1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) bdk_gsernx_lanex_pcie_rstp1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTP1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTP1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstp1s0_bcfg * * GSER Lane PCIe PowerDown P1 CPM Reset States Control Register * Controls the Reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) corresponding to * PCIe PowerDown state P1 CPM (P1 substates entry). */ union bdk_gsernx_lanex_pcie_rstp1s0_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstp1s0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1 CPM PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1 CPM PowerDown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1 CPM PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1 CPM PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1 CPM PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1 CPM PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1 CPM PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1 CPM PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1 CPM PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1 CPM PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1 CPM PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1 CPM PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1 CPM PowerDown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1 CPM PowerDown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstp1s0_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstp1s0_bcfg bdk_gsernx_lanex_pcie_rstp1s0_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002040ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTP1S0_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) bdk_gsernx_lanex_pcie_rstp1s0_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTP1S0_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTP1S0_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstp1s1_bcfg * * GSER Lane PCIe PowerDown P1.1 Reset States Control Register * Controls the Reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) corresponding to * PCIe PowerDown state P1.1 (P1 substate). */ union bdk_gsernx_lanex_pcie_rstp1s1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstp1s1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1.1 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1.1 PowerDown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1.1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1.1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1.1 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1.1 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1.1 PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1.1 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1.1 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1.1 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1.1 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1.1 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1.1 PowerDown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1.1 PowerDown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstp1s1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstp1s1_bcfg bdk_gsernx_lanex_pcie_rstp1s1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002050ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTP1S1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) bdk_gsernx_lanex_pcie_rstp1s1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTP1S1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTP1S1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstp1s2_bcfg * * GSER Lane PCIe PowerDown P1.2 Reset States Control Register * Controls the Reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) corresponding to * PCIe PowerDown state P1.2 (P1 substate). */ union bdk_gsernx_lanex_pcie_rstp1s2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstp1s2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1.2 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1.2 PowerDown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1.2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1.2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1.2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1.2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1.2 PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P1.2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P1.2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P1.2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P1.2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P1.2 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P1.2 PowerDown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P1.2 PowerDown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstp1s2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstp1s2_bcfg bdk_gsernx_lanex_pcie_rstp1s2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002060ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTP1S2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) bdk_gsernx_lanex_pcie_rstp1s2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTP1S2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTP1S2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstp2_bcfg * * GSER Lane PCIe PowerDown P2 Reset States Control Register * Controls the Reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) corresponding to * PCIe PowerDown state P2. */ union bdk_gsernx_lanex_pcie_rstp2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstp2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P2 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P2 PowerDown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P2 PowerDown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during P2 PowerDown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during P2 PowerDown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during P2 PowerDown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during P2 PowerDown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during P2 PowerDown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during P2 PowerDown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during P2 PowerDown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstp2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstp2_bcfg bdk_gsernx_lanex_pcie_rstp2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002070ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTP2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) bdk_gsernx_lanex_pcie_rstp2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTP2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTP2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstrate_bcfg * * GSER Lane PCIe Lane Rate Change Reset States Control Register * This register controls the reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) * required for PCIe lane rate change. */ union bdk_gsernx_lanex_pcie_rstrate_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstrate_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during lane rate change. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during lane rate change. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during lane rate change. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during lane rate change. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during lane rate change. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during lane rate change. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during lane rate change. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during lane rate change. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during lane rate change. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during lane rate change. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during lane rate change. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during lane rate change. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx Electric Idle detection during lane rate change. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable Tx Common Mode voltage during lane rate change. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstrate_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstrate_bcfg bdk_gsernx_lanex_pcie_rstrate_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002090ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTRATE_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) bdk_gsernx_lanex_pcie_rstrate_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTRATE_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTRATE_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rstshdn_bcfg * * GSER Lane PCIe Lane Shutdown Reset States Control Register * This register controls the reset states (Lane PLL, Tx, Rx, Adapt and Eye Monitor) * corresponding to PCIe Lane Shutdown state enabled by the assertion of TxCompliance & * TxElecIdle. */ union bdk_gsernx_lanex_pcie_rstshdn_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rstshdn_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable TX common mode voltage during lane shutdown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx electric idle detection during lane shutdown state. */ uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during lane shutdown state. */ uint64_t reserved_29_31 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during lane shutdown state. */ uint64_t reserved_21_23 : 3; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during lane shutdown state. */ uint64_t reserved_12_15 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during lane shutdown state. */ uint64_t reserved_4_7 : 4; uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during lane shutdown state. */ #else /* Word 0 - Little Endian */ uint64_t lnpll_rst : 4; /**< [ 3: 0](R/W) Reserved. Internal: FIXME - add more details LANE PLL reset state during lane shutdown state. */ uint64_t reserved_4_7 : 4; uint64_t tx_rst : 4; /**< [ 11: 8](R/W) Reserved. Internal: FIXME - add more details TX reset state during lane shutdown state. */ uint64_t reserved_12_15 : 4; uint64_t rx_rst : 5; /**< [ 20: 16](R/W) Reserved. Internal: FIXME - add more details RX reset state during lane shutdown state. */ uint64_t reserved_21_23 : 3; uint64_t eye_rst : 5; /**< [ 28: 24](R/W) Reserved. Internal: FIXME - add more details Eye monitor reset state during lane shutdown state. */ uint64_t reserved_29_31 : 3; uint64_t adapt_rst : 1; /**< [ 32: 32](R/W) Reserved. Internal: FIXME - add more details Rx Adapt state Pause (0) or Hard Reset (1) during lane shutdown state. */ uint64_t rxidledet_disable : 1; /**< [ 33: 33](R/W) Reserved. Internal: Set to disable Rx electric idle detection during lane shutdown state. */ uint64_t txcmnmode_disable : 1; /**< [ 34: 34](R/W) Reserved. Internal: Set to disable TX common mode voltage during lane shutdown state. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rstshdn_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rstshdn_bcfg bdk_gsernx_lanex_pcie_rstshdn_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002080ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RSTSHDN_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) bdk_gsernx_lanex_pcie_rstshdn_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) "GSERNX_LANEX_PCIE_RSTSHDN_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RSTSHDN_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq1_1_bcfg * * GSER Lane PCIe Gen1 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during PCIe Gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq1_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq1_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_43_63 : 21; uint64_t pcie_g1_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t pcie_g1_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g1_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g1_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g1_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g1_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g1_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g1_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g1_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g1_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t pcie_g1_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g1_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g1_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g1_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g1_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g1_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g1_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g1_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_43_63 : 21; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq1_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq1_1_bcfg bdk_gsernx_lanex_pcie_rxeq1_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002300ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ1_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq1_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ1_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ1_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq1_2_bcfg * * GSER Lane PCIe Gen1 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during PCIe Gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq1_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq1_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g1_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g1_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq1_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq1_2_bcfg bdk_gsernx_lanex_pcie_rxeq1_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002310ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ1_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq1_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ1_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ1_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq1_3_bcfg * * GSER Lane PCIe Gen1 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during PCIe Gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq1_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq1_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t pcie_g1_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t pcie_g1_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g1_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g1_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g1_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g1_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t pcie_g1_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g1_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g1_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g1_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g1_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ uint64_t pcie_g1_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g1_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g1_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g1_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g1_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t pcie_g1_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g1_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g1_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g1_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq1_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq1_3_bcfg bdk_gsernx_lanex_pcie_rxeq1_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002320ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ1_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq1_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ1_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ1_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq1_4_bcfg * * GSER Lane PCIe Gen1 RX Equalizer Control Register 4 * Parameters controlling the custom receiver equalization during PCIe Gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq1_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq1_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g1_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g1_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g1_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g1_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq1_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq1_4_bcfg bdk_gsernx_lanex_pcie_rxeq1_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002330ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ1_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq1_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ1_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ1_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq2_1_bcfg * * GSER Lane PCIe Gen2 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during PCIe Gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq2_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq2_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_43_63 : 21; uint64_t pcie_g2_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t pcie_g2_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g2_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g2_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g2_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g2_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g2_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g2_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g2_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g2_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t pcie_g2_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g2_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g2_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g2_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g2_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g2_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g2_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g2_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_43_63 : 21; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq2_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq2_1_bcfg bdk_gsernx_lanex_pcie_rxeq2_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002340ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ2_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq2_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ2_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ2_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq2_2_bcfg * * GSER Lane PCIe Gen2 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during PCIe Gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq2_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq2_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g2_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g2_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq2_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq2_2_bcfg bdk_gsernx_lanex_pcie_rxeq2_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002350ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ2_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq2_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ2_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ2_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq2_3_bcfg * * GSER Lane PCIe Gen2 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during PCIe Gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq2_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq2_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t pcie_g2_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t pcie_g2_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g2_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g2_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g2_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g2_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t pcie_g2_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g2_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g2_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g2_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g2_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ uint64_t pcie_g2_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g2_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g2_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g2_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g2_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t pcie_g2_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g2_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g2_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g2_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq2_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq2_3_bcfg bdk_gsernx_lanex_pcie_rxeq2_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002360ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ2_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq2_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ2_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ2_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq2_4_bcfg * * GSER Lane PCIe Gen2 RX Equalizer Control Register 4 * Parameters controlling the custom receiver equalization during PCIe Gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq2_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq2_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g2_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g2_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g2_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g2_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq2_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq2_4_bcfg bdk_gsernx_lanex_pcie_rxeq2_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002370ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ2_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq2_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ2_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ2_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq3_1_bcfg * * GSER Lane PCIe Gen3 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during PCIe Gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq3_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq3_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_43_63 : 21; uint64_t pcie_g3_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t pcie_g3_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g3_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g3_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g3_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g3_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g3_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g3_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g3_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g3_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t pcie_g3_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g3_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g3_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g3_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g3_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g3_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g3_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g3_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_43_63 : 21; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq3_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq3_1_bcfg bdk_gsernx_lanex_pcie_rxeq3_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002380ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ3_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq3_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ3_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ3_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq3_2_bcfg * * GSER Lane PCIe Gen3 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during PCIe Gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq3_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq3_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g3_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g3_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq3_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq3_2_bcfg bdk_gsernx_lanex_pcie_rxeq3_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002390ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ3_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq3_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ3_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ3_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq3_3_bcfg * * GSER Lane PCIe Gen3 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during PCIe Gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq3_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq3_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t pcie_g3_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t pcie_g3_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g3_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g3_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g3_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g3_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t pcie_g3_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g3_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g3_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g3_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g3_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ uint64_t pcie_g3_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g3_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g3_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g3_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g3_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t pcie_g3_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g3_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g3_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g3_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq3_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq3_3_bcfg bdk_gsernx_lanex_pcie_rxeq3_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023a0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ3_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq3_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ3_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ3_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq3_4_bcfg * * GSER Lane PCIe Gen3 RX Equalizer Control Register 4 * Parameters controlling the custom receiver equalization during PCIe Gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq3_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq3_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g3_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g3_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g3_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g3_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq3_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq3_4_bcfg bdk_gsernx_lanex_pcie_rxeq3_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ3_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq3_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ3_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ3_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq4_1_bcfg * * GSER Lane PCIe Gen4 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during PCIe Gen4 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq4_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq4_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_43_63 : 21; uint64_t pcie_g4_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t pcie_g4_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g4_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g4_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g4_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g4_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g4_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g4_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g4_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g4_c1_q_adjust : 5; /**< [ 4: 0](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t pcie_g4_voter_sp_mask : 1; /**< [ 5: 5](R/W) Set to mask out "010" and "101" patterns in RX cdr voter. GSERN()_LANE()_CDRFSM_BCFG[VOTER_SP_MASK] will be updated by the hardware even when this bit drives the control. */ uint64_t pcie_g4_settle_wait : 4; /**< [ 9: 6](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t pcie_g4_ctle_lte_zero_ovrd : 4;/**< [ 13: 10](R/W) CTLE LTE zero frequency override value. */ uint64_t pcie_g4_ctle_lte_zero_ovrd_en : 1;/**< [ 14: 14](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t pcie_g4_c6_c15_limit_lo : 6;/**< [ 20: 15](R/W) C6 to C15 postcursor limit low. */ uint64_t pcie_g4_c6_c15_limit_hi : 6;/**< [ 26: 21](R/W) C6 to C15 postcursor limit high. */ uint64_t pcie_g4_erc : 4; /**< [ 30: 27](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. See GSERN()_LANE()_RX_ST_BCFG.ERC for detailed information. */ uint64_t pcie_g4_blwc_deadband : 12; /**< [ 42: 31](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_43_63 : 21; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq4_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq4_1_bcfg bdk_gsernx_lanex_pcie_rxeq4_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ4_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq4_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ4_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ4_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq4_2_bcfg * * GSER Lane PCIe Gen4 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during PCIe Gen4 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq4_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq4_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g4_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g4_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq4_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq4_2_bcfg bdk_gsernx_lanex_pcie_rxeq4_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ4_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq4_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ4_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ4_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq4_3_bcfg * * GSER Lane PCIe Gen4 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during PCIe Gen4 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq4_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq4_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t pcie_g4_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t pcie_g4_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g4_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g4_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g4_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g4_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t pcie_g4_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g4_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g4_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g4_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g4_c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ uint64_t pcie_g4_c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t pcie_g4_c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t pcie_g4_c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t pcie_g4_c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t reserved_30_31 : 2; uint64_t pcie_g4_c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t pcie_g4_c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t pcie_g4_c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t pcie_g4_c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t pcie_g4_c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq4_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq4_3_bcfg bdk_gsernx_lanex_pcie_rxeq4_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ4_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq4_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ4_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ4_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxeq4_4_bcfg * * GSER Lane PCIe Gen4 RX Equalizer Control Register 4 * Parameters controlling the custom receiver equalization during PCIe Gen4 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'PCIe'. */ union bdk_gsernx_lanex_pcie_rxeq4_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxeq4_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_g4_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g4_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g4_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t pcie_g4_blwc_subrate_init : 16;/**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_blwc_subrate_final : 16;/**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t pcie_g4_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t pcie_g4_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxeq4_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxeq4_4_bcfg bdk_gsernx_lanex_pcie_rxeq4_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900023f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXEQ4_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) bdk_gsernx_lanex_pcie_rxeq4_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) "GSERNX_LANEX_PCIE_RXEQ4_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXEQ4_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidl1a_bcfg * * GSER Lane PCIe Gen1 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 1. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidl1a_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidl1a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidl1a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidl1a_bcfg bdk_gsernx_lanex_pcie_rxidl1a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021a0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDL1A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidl1a_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDL1A_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDL1A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidl2a_bcfg * * GSER Lane PCIe Gen2 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 2. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidl2a_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidl2a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidl2a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidl2a_bcfg bdk_gsernx_lanex_pcie_rxidl2a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDL2A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidl2a_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDL2A_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDL2A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidl3a_bcfg * * GSER Lane PCIe Gen3 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 3. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidl3a_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidl3a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidl3a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidl3a_bcfg bdk_gsernx_lanex_pcie_rxidl3a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDL3A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidl3a_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDL3A_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDL3A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidl4a_bcfg * * GSER Lane PCIe Gen4 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 4. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidl4a_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidl4a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidl4a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidl4a_bcfg bdk_gsernx_lanex_pcie_rxidl4a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002200ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDL4A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidl4a_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDL4A_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDL4A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidle1_bcfg * * GSER Lane PCIe Gen1 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 1. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidle1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidle1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidle1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidle1_bcfg bdk_gsernx_lanex_pcie_rxidle1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002190ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDLE1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidle1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDLE1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDLE1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidle2_bcfg * * GSER Lane PCIe Gen2 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 2. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidle2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidle2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidle2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidle2_bcfg bdk_gsernx_lanex_pcie_rxidle2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDLE2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidle2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDLE2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDLE2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidle3_bcfg * * GSER Lane PCIe Gen3 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 3. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidle3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidle3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidle3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidle3_bcfg bdk_gsernx_lanex_pcie_rxidle3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDLE3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidle3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDLE3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDLE3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_rxidle4_bcfg * * GSER Lane PCIe Gen4 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for PCIe Gen 4. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_pcie_rxidle4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_rxidle4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_rxidle4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_rxidle4_bcfg bdk_gsernx_lanex_pcie_rxidle4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900021f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_RXIDLE4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) bdk_gsernx_lanex_pcie_rxidle4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) "GSERNX_LANEX_PCIE_RXIDLE4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_RXIDLE4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txbias_bcfg * * GSER Lane PCIe TX Margin BIAS Control Register * TX BIAS values corresponding to Full Scale, Half Scale and Margin levels for both. */ union bdk_gsernx_lanex_pcie_txbias_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txbias_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t tx_margin_h4 : 6; /**< [ 59: 54](R/W) TX BIAS setting for half scale, Margin 4 output drive. */ uint64_t tx_margin_h3 : 6; /**< [ 53: 48](R/W) TX BIAS setting for half scale, Margin 3 output drive. */ uint64_t tx_margin_h2 : 6; /**< [ 47: 42](R/W) TX BIAS setting for half scale, Margin 2 output drive. */ uint64_t tx_margin_h1 : 6; /**< [ 41: 36](R/W) TX BIAS setting for half scale, Margin 1 output drive. */ uint64_t tx_bias_half : 6; /**< [ 35: 30](R/W) TX BIAS setting for half scale output drive. */ uint64_t tx_margin_f4 : 6; /**< [ 29: 24](R/W) TX BIAS setting for full scale, Margin 4 output drive. */ uint64_t tx_margin_f3 : 6; /**< [ 23: 18](R/W) TX BIAS setting for full scale, Margin 3 output drive. */ uint64_t tx_margin_f2 : 6; /**< [ 17: 12](R/W) TX BIAS setting for full scale, Margin 2 output drive. */ uint64_t tx_margin_f1 : 6; /**< [ 11: 6](R/W) TX BIAS setting for full scale, Margin 1 output drive. */ uint64_t tx_bias_full : 6; /**< [ 5: 0](R/W) TX BIAS setting for full scale output drive. */ #else /* Word 0 - Little Endian */ uint64_t tx_bias_full : 6; /**< [ 5: 0](R/W) TX BIAS setting for full scale output drive. */ uint64_t tx_margin_f1 : 6; /**< [ 11: 6](R/W) TX BIAS setting for full scale, Margin 1 output drive. */ uint64_t tx_margin_f2 : 6; /**< [ 17: 12](R/W) TX BIAS setting for full scale, Margin 2 output drive. */ uint64_t tx_margin_f3 : 6; /**< [ 23: 18](R/W) TX BIAS setting for full scale, Margin 3 output drive. */ uint64_t tx_margin_f4 : 6; /**< [ 29: 24](R/W) TX BIAS setting for full scale, Margin 4 output drive. */ uint64_t tx_bias_half : 6; /**< [ 35: 30](R/W) TX BIAS setting for half scale output drive. */ uint64_t tx_margin_h1 : 6; /**< [ 41: 36](R/W) TX BIAS setting for half scale, Margin 1 output drive. */ uint64_t tx_margin_h2 : 6; /**< [ 47: 42](R/W) TX BIAS setting for half scale, Margin 2 output drive. */ uint64_t tx_margin_h3 : 6; /**< [ 53: 48](R/W) TX BIAS setting for half scale, Margin 3 output drive. */ uint64_t tx_margin_h4 : 6; /**< [ 59: 54](R/W) TX BIAS setting for half scale, Margin 4 output drive. */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txbias_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txbias_bcfg bdk_gsernx_lanex_pcie_txbias_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002930ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXBIAS_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) bdk_gsernx_lanex_pcie_txbias_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) "GSERNX_LANEX_PCIE_TXBIAS_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXBIAS_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txdrv_bcfg * * GSER Lane PCIe TX Drive Reserved Presets, FS & LF Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for the Reserved Presets * for Gen3 and Gen4 (the default coefficient values correspond to preset P4). * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the full * 6 bits defined in the PCIe specification are not needed. * This register also contains the control registers for the Local FS and LF. */ union bdk_gsernx_lanex_pcie_txdrv_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txdrv_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t g4_rsv_cpost : 5; /**< [ 60: 56](R/W) Gen4 Cpost value for all reserved presets. */ uint64_t reserved_54_55 : 2; uint64_t g4_rsv_cmain : 6; /**< [ 53: 48](R/W) Gen4 Cmain value for all reserved presets. */ uint64_t reserved_44_47 : 4; uint64_t g4_rsv_cpre : 4; /**< [ 43: 40](R/W) Gen4 Cpost value for all reserved presets. */ uint64_t reserved_38_39 : 2; uint64_t local_lf : 6; /**< [ 37: 32](R/W) Local LF value advertised to the MAC. */ uint64_t reserved_30_31 : 2; uint64_t local_fs : 6; /**< [ 29: 24](R/W) Local FS value advertised to the MAC. */ uint64_t reserved_21_23 : 3; uint64_t g3_rsv_cpost : 5; /**< [ 20: 16](R/W) Gen3 Cpost value for all reserved presets. */ uint64_t reserved_14_15 : 2; uint64_t g3_rsv_cmain : 6; /**< [ 13: 8](R/W) Gen3 Cmain value for all reserved presets. */ uint64_t reserved_4_7 : 4; uint64_t g3_rsv_cpre : 4; /**< [ 3: 0](R/W) Gen3 Cpost value for all reserved presets. */ #else /* Word 0 - Little Endian */ uint64_t g3_rsv_cpre : 4; /**< [ 3: 0](R/W) Gen3 Cpost value for all reserved presets. */ uint64_t reserved_4_7 : 4; uint64_t g3_rsv_cmain : 6; /**< [ 13: 8](R/W) Gen3 Cmain value for all reserved presets. */ uint64_t reserved_14_15 : 2; uint64_t g3_rsv_cpost : 5; /**< [ 20: 16](R/W) Gen3 Cpost value for all reserved presets. */ uint64_t reserved_21_23 : 3; uint64_t local_fs : 6; /**< [ 29: 24](R/W) Local FS value advertised to the MAC. */ uint64_t reserved_30_31 : 2; uint64_t local_lf : 6; /**< [ 37: 32](R/W) Local LF value advertised to the MAC. */ uint64_t reserved_38_39 : 2; uint64_t g4_rsv_cpre : 4; /**< [ 43: 40](R/W) Gen4 Cpost value for all reserved presets. */ uint64_t reserved_44_47 : 4; uint64_t g4_rsv_cmain : 6; /**< [ 53: 48](R/W) Gen4 Cmain value for all reserved presets. */ uint64_t reserved_54_55 : 2; uint64_t g4_rsv_cpost : 5; /**< [ 60: 56](R/W) Gen4 Cpost value for all reserved presets. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txdrv_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txdrv_bcfg bdk_gsernx_lanex_pcie_txdrv_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002830ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXDRV_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) bdk_gsernx_lanex_pcie_txdrv_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) "GSERNX_LANEX_PCIE_TXDRV_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXDRV_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst0_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P0. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst0_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p0_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P0. */ uint64_t reserved_14_15 : 2; uint64_t g3_p0_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P0. */ uint64_t reserved_4_7 : 4; uint64_t g3_p0_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P0. */ #else /* Word 0 - Little Endian */ uint64_t g3_p0_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P0. */ uint64_t reserved_4_7 : 4; uint64_t g3_p0_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P0. */ uint64_t reserved_14_15 : 2; uint64_t g3_p0_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P0. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst0_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst0_bcfg bdk_gsernx_lanex_pcie_txpst0_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900024f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST0_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst0_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST0_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST0_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst10_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P10. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst10_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst10_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p10_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P10. */ uint64_t reserved_14_15 : 2; uint64_t g3_p10_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P10. */ uint64_t reserved_4_7 : 4; uint64_t g3_p10_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P10. */ #else /* Word 0 - Little Endian */ uint64_t g3_p10_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P10. */ uint64_t reserved_4_7 : 4; uint64_t g3_p10_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P10. */ uint64_t reserved_14_15 : 2; uint64_t g3_p10_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P10. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst10_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst10_bcfg bdk_gsernx_lanex_pcie_txpst10_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002590ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST10_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst10_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST10_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST10_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst11_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P0. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst11_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst11_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p0_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P0. */ uint64_t reserved_14_15 : 2; uint64_t g4_p0_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P0. */ uint64_t reserved_4_7 : 4; uint64_t g4_p0_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P0. */ #else /* Word 0 - Little Endian */ uint64_t g4_p0_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P0. */ uint64_t reserved_4_7 : 4; uint64_t g4_p0_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P0. */ uint64_t reserved_14_15 : 2; uint64_t g4_p0_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P0. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst11_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst11_bcfg bdk_gsernx_lanex_pcie_txpst11_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002690ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST11_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst11_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST11_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST11_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst12_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P1. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst12_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst12_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p1_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P1. */ uint64_t reserved_14_15 : 2; uint64_t g4_p1_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P1. */ uint64_t reserved_4_7 : 4; uint64_t g4_p1_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P1. */ #else /* Word 0 - Little Endian */ uint64_t g4_p1_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P1. */ uint64_t reserved_4_7 : 4; uint64_t g4_p1_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P1. */ uint64_t reserved_14_15 : 2; uint64_t g4_p1_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P1. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst12_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst12_bcfg bdk_gsernx_lanex_pcie_txpst12_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026a0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST12_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst12_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST12_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST12_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst13_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P2. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst13_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst13_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p2_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P2. */ uint64_t reserved_14_15 : 2; uint64_t g4_p2_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P2. */ uint64_t reserved_4_7 : 4; uint64_t g4_p2_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P2. */ #else /* Word 0 - Little Endian */ uint64_t g4_p2_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P2. */ uint64_t reserved_4_7 : 4; uint64_t g4_p2_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P2. */ uint64_t reserved_14_15 : 2; uint64_t g4_p2_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P2. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst13_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst13_bcfg bdk_gsernx_lanex_pcie_txpst13_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST13_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst13_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST13_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST13_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst14_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P3. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst14_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst14_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p3_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P3. */ uint64_t reserved_14_15 : 2; uint64_t g4_p3_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P3. */ uint64_t reserved_4_7 : 4; uint64_t g4_p3_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P3. */ #else /* Word 0 - Little Endian */ uint64_t g4_p3_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P3. */ uint64_t reserved_4_7 : 4; uint64_t g4_p3_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P3. */ uint64_t reserved_14_15 : 2; uint64_t g4_p3_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P3. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst14_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst14_bcfg bdk_gsernx_lanex_pcie_txpst14_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST14_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst14_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST14_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST14_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst15_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P4. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst15_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst15_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p4_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P4. */ uint64_t reserved_14_15 : 2; uint64_t g4_p4_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P4. */ uint64_t reserved_4_7 : 4; uint64_t g4_p4_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P4. */ #else /* Word 0 - Little Endian */ uint64_t g4_p4_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P4. */ uint64_t reserved_4_7 : 4; uint64_t g4_p4_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P4. */ uint64_t reserved_14_15 : 2; uint64_t g4_p4_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P4. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst15_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst15_bcfg bdk_gsernx_lanex_pcie_txpst15_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST15_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst15_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST15_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST15_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst16_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P5. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst16_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst16_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p5_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P5. */ uint64_t reserved_14_15 : 2; uint64_t g4_p5_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P5. */ uint64_t reserved_4_7 : 4; uint64_t g4_p5_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P5. */ #else /* Word 0 - Little Endian */ uint64_t g4_p5_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P5. */ uint64_t reserved_4_7 : 4; uint64_t g4_p5_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P5. */ uint64_t reserved_14_15 : 2; uint64_t g4_p5_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P5. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst16_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst16_bcfg bdk_gsernx_lanex_pcie_txpst16_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST16_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst16_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST16_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST16_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst17_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P6. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst17_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst17_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p6_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P6. */ uint64_t reserved_14_15 : 2; uint64_t g4_p6_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P6. */ uint64_t reserved_4_7 : 4; uint64_t g4_p6_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P6. */ #else /* Word 0 - Little Endian */ uint64_t g4_p6_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P6. */ uint64_t reserved_4_7 : 4; uint64_t g4_p6_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P6. */ uint64_t reserved_14_15 : 2; uint64_t g4_p6_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P6. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst17_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst17_bcfg bdk_gsernx_lanex_pcie_txpst17_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900026f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST17_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst17_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST17_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST17_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst18_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P7. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst18_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst18_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p7_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P7. */ uint64_t reserved_14_15 : 2; uint64_t g4_p7_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P7. */ uint64_t reserved_4_7 : 4; uint64_t g4_p7_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P7. */ #else /* Word 0 - Little Endian */ uint64_t g4_p7_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P7. */ uint64_t reserved_4_7 : 4; uint64_t g4_p7_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P7. */ uint64_t reserved_14_15 : 2; uint64_t g4_p7_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P7. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst18_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst18_bcfg bdk_gsernx_lanex_pcie_txpst18_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002700ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST18_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst18_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST18_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST18_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst19_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P8. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst19_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst19_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p8_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P8. */ uint64_t reserved_14_15 : 2; uint64_t g4_p8_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P8. */ uint64_t reserved_4_7 : 4; uint64_t g4_p8_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P8. */ #else /* Word 0 - Little Endian */ uint64_t g4_p8_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P8. */ uint64_t reserved_4_7 : 4; uint64_t g4_p8_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P8. */ uint64_t reserved_14_15 : 2; uint64_t g4_p8_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P8. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst19_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst19_bcfg bdk_gsernx_lanex_pcie_txpst19_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002710ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST19_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst19_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST19_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST19_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst1_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P1. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p1_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P1. */ uint64_t reserved_14_15 : 2; uint64_t g3_p1_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P1. */ uint64_t reserved_4_7 : 4; uint64_t g3_p1_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P1. */ #else /* Word 0 - Little Endian */ uint64_t g3_p1_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P1. */ uint64_t reserved_4_7 : 4; uint64_t g3_p1_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P1. */ uint64_t reserved_14_15 : 2; uint64_t g3_p1_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P1. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst1_bcfg bdk_gsernx_lanex_pcie_txpst1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002500ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst20_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P9. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst20_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst20_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p9_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P9. */ uint64_t reserved_14_15 : 2; uint64_t g4_p9_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P9. */ uint64_t reserved_4_7 : 4; uint64_t g4_p9_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P9. */ #else /* Word 0 - Little Endian */ uint64_t g4_p9_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P9. */ uint64_t reserved_4_7 : 4; uint64_t g4_p9_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P9. */ uint64_t reserved_14_15 : 2; uint64_t g4_p9_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P9. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst20_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst20_bcfg bdk_gsernx_lanex_pcie_txpst20_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002720ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST20_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst20_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST20_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST20_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst21_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen4 preset P10. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst21_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst21_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g4_p10_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P10. */ uint64_t reserved_14_15 : 2; uint64_t g4_p10_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P10. */ uint64_t reserved_4_7 : 4; uint64_t g4_p10_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P10. */ #else /* Word 0 - Little Endian */ uint64_t g4_p10_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen4 preset P10. */ uint64_t reserved_4_7 : 4; uint64_t g4_p10_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen4 preset P10. */ uint64_t reserved_14_15 : 2; uint64_t g4_p10_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen4 preset P10. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst21_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst21_bcfg bdk_gsernx_lanex_pcie_txpst21_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002730ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST21_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst21_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST21_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST21_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst2_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P2. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p2_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P2. */ uint64_t reserved_14_15 : 2; uint64_t g3_p2_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P2. */ uint64_t reserved_4_7 : 4; uint64_t g3_p2_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P2. */ #else /* Word 0 - Little Endian */ uint64_t g3_p2_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P2. */ uint64_t reserved_4_7 : 4; uint64_t g3_p2_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P2. */ uint64_t reserved_14_15 : 2; uint64_t g3_p2_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P2. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst2_bcfg bdk_gsernx_lanex_pcie_txpst2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002510ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst3_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P3. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p3_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P3. */ uint64_t reserved_14_15 : 2; uint64_t g3_p3_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P3. */ uint64_t reserved_4_7 : 4; uint64_t g3_p3_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P3. */ #else /* Word 0 - Little Endian */ uint64_t g3_p3_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P3. */ uint64_t reserved_4_7 : 4; uint64_t g3_p3_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P3. */ uint64_t reserved_14_15 : 2; uint64_t g3_p3_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P3. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst3_bcfg bdk_gsernx_lanex_pcie_txpst3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002520ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst4_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P4. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst4_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p4_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P4. */ uint64_t reserved_14_15 : 2; uint64_t g3_p4_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P4. */ uint64_t reserved_4_7 : 4; uint64_t g3_p4_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P4. */ #else /* Word 0 - Little Endian */ uint64_t g3_p4_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P4. */ uint64_t reserved_4_7 : 4; uint64_t g3_p4_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P4. */ uint64_t reserved_14_15 : 2; uint64_t g3_p4_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P4. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst4_bcfg bdk_gsernx_lanex_pcie_txpst4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002530ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst4_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST4_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst5_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P5. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst5_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p5_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P5. */ uint64_t reserved_14_15 : 2; uint64_t g3_p5_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P5. */ uint64_t reserved_4_7 : 4; uint64_t g3_p5_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P5. */ #else /* Word 0 - Little Endian */ uint64_t g3_p5_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P5. */ uint64_t reserved_4_7 : 4; uint64_t g3_p5_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P5. */ uint64_t reserved_14_15 : 2; uint64_t g3_p5_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P5. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst5_bcfg bdk_gsernx_lanex_pcie_txpst5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002540ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst5_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST5_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst6_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P6. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst6_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst6_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p6_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P6. */ uint64_t reserved_14_15 : 2; uint64_t g3_p6_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P6. */ uint64_t reserved_4_7 : 4; uint64_t g3_p6_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P6. */ #else /* Word 0 - Little Endian */ uint64_t g3_p6_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P6. */ uint64_t reserved_4_7 : 4; uint64_t g3_p6_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P6. */ uint64_t reserved_14_15 : 2; uint64_t g3_p6_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P6. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst6_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst6_bcfg bdk_gsernx_lanex_pcie_txpst6_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002550ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST6_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst6_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST6_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST6_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst7_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P7. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst7_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst7_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p7_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P7. */ uint64_t reserved_14_15 : 2; uint64_t g3_p7_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P7. */ uint64_t reserved_4_7 : 4; uint64_t g3_p7_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P7. */ #else /* Word 0 - Little Endian */ uint64_t g3_p7_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P7. */ uint64_t reserved_4_7 : 4; uint64_t g3_p7_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P7. */ uint64_t reserved_14_15 : 2; uint64_t g3_p7_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P7. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst7_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst7_bcfg bdk_gsernx_lanex_pcie_txpst7_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002560ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST7_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst7_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST7_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST7_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst8_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P8. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst8_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst8_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p8_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P8. */ uint64_t reserved_14_15 : 2; uint64_t g3_p8_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P8. */ uint64_t reserved_4_7 : 4; uint64_t g3_p8_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P8. */ #else /* Word 0 - Little Endian */ uint64_t g3_p8_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P8. */ uint64_t reserved_4_7 : 4; uint64_t g3_p8_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P8. */ uint64_t reserved_14_15 : 2; uint64_t g3_p8_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P8. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst8_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst8_bcfg bdk_gsernx_lanex_pcie_txpst8_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002570ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST8_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst8_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST8_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST8_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcie_txpst9_bcfg * * GSER Lane PCIe TX Drive Preset Coefficients Control Register * TX drive Cpre, Cpost and Cmain Coefficient values for Gen3 preset P9. * Cpre and Cpost are only 4 and 5 bits in length, respectively, as the * full 6 bits defined in the PCIe specification are not needed. */ union bdk_gsernx_lanex_pcie_txpst9_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcie_txpst9_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_21_63 : 43; uint64_t g3_p9_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P9. */ uint64_t reserved_14_15 : 2; uint64_t g3_p9_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P9. */ uint64_t reserved_4_7 : 4; uint64_t g3_p9_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P9. */ #else /* Word 0 - Little Endian */ uint64_t g3_p9_cpre : 4; /**< [ 3: 0](R/W) Cpost value for Gen3 preset P9. */ uint64_t reserved_4_7 : 4; uint64_t g3_p9_cmain : 6; /**< [ 13: 8](R/W) Cmain value for Gen3 preset P9. */ uint64_t reserved_14_15 : 2; uint64_t g3_p9_cpost : 5; /**< [ 20: 16](R/W) Cpost value for Gen3 preset P9. */ uint64_t reserved_21_63 : 43; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcie_txpst9_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcie_txpst9_bcfg bdk_gsernx_lanex_pcie_txpst9_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002580ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCIE_TXPST9_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) bdk_gsernx_lanex_pcie_txpst9_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) "GSERNX_LANEX_PCIE_TXPST9_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCIE_TXPST9_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pcs_802p3_bcfg * * GSER Lane 802.3 PCS Base Configuration Register 0 * This register controls settings for Ethernet IEEE 802.3 PCS layer. */ union bdk_gsernx_lanex_pcs_802p3_bcfg { uint64_t u; struct bdk_gsernx_lanex_pcs_802p3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_4_63 : 60; uint64_t rx_wpk_order : 1; /**< [ 3: 3](R/W) Receiver word packing order. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_20B40B] is set two consecutive 20-bit RX data words from the PCS Lite Layer are packed into a 40-bit word for the Ethernet SGMII MAC. 0 = The first 20-bit word from the PCS Lite Layer is transferred to the lower 20-bit word position, bits[19:0] of the 40-bit word and the next consecutive 20-bit word from the PCS Lite layer is transferred to the upper 20-bit word position, bits[39:20] of the 40-bit word. The assembled 40-bit word is then forwarded the SGMII Ethernet MAC. 1 = The first 20-bit word from the PCS Lite Layer is transferred to the upper 20-bit word position, bits[39:20] of the 40-bit word and the next consecutive 20-bit word from the PCS Lite layer is transferred to the lower 20-bit word position, bits[19:0] of the 40-bit word. The assembled 40-bit word is then forwarded the SGMII Ethernet MAC. For diagnostic use only. */ uint64_t tx_wup_order : 1; /**< [ 2: 2](R/W) Transmitter word unpacking order. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When GSERN()_LANE()_PCS_802P3_BCFG[TX_WUP_40B20B] is set the 20-bit consecutive RX data word from the PCS Lite Layer are packed into 40-bit words for the Ethernet SGMII MAC. 0 = The lower 20-bit word, bits[19:0] of the 40-bit word are transferred to the PCS Lite layer followed by the upper 20-bit word, bits[39:20] of the 40-bit word.. 1 = The upper 20-bit word, bits[39:20], are transferred to the PCS Lite layer followed by the lower 20-bit word, bits[19:0], of the 40-bit word. For diagnostic use only. */ uint64_t rx_wpk_20b40b : 1; /**< [ 1: 1](R/W) RX Word Packing 20 bits to 40 bits. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When set, consecutive 20-bit RX data words from the PCS Lite Layer are packed into 40-bit words for the Ethernet SGMII MAC. Used in conjunction with GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. Refer to the description for GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. For diagnostic use only. */ uint64_t tx_wup_40b20b : 1; /**< [ 0: 0](R/W) TX Word UnPacking 40 bits to 20 bits. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When set, the 40-bit TX data words from the Ethernet SGMII MAC are transferred to the PCS Lite Layer using two consecutive 20-bit word transfers. Used in conjunction with GSERN()_LANE()_PCS_802P3_BCFG[TX_WUP_ORDER]. Refer to the description for GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t tx_wup_40b20b : 1; /**< [ 0: 0](R/W) TX Word UnPacking 40 bits to 20 bits. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When set, the 40-bit TX data words from the Ethernet SGMII MAC are transferred to the PCS Lite Layer using two consecutive 20-bit word transfers. Used in conjunction with GSERN()_LANE()_PCS_802P3_BCFG[TX_WUP_ORDER]. Refer to the description for GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. For diagnostic use only. */ uint64_t rx_wpk_20b40b : 1; /**< [ 1: 1](R/W) RX Word Packing 20 bits to 40 bits. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When set, consecutive 20-bit RX data words from the PCS Lite Layer are packed into 40-bit words for the Ethernet SGMII MAC. Used in conjunction with GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. Refer to the description for GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_ORDER]. For diagnostic use only. */ uint64_t tx_wup_order : 1; /**< [ 2: 2](R/W) Transmitter word unpacking order. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When GSERN()_LANE()_PCS_802P3_BCFG[TX_WUP_40B20B] is set the 20-bit consecutive RX data word from the PCS Lite Layer are packed into 40-bit words for the Ethernet SGMII MAC. 0 = The lower 20-bit word, bits[19:0] of the 40-bit word are transferred to the PCS Lite layer followed by the upper 20-bit word, bits[39:20] of the 40-bit word.. 1 = The upper 20-bit word, bits[39:20], are transferred to the PCS Lite layer followed by the lower 20-bit word, bits[19:0], of the 40-bit word. For diagnostic use only. */ uint64_t rx_wpk_order : 1; /**< [ 3: 3](R/W) Receiver word packing order. Used when the Ethernet MAC is configured for SGMII 1.25 GBaud. When GSERN()_LANE()_PCS_802P3_BCFG[RX_WPK_20B40B] is set two consecutive 20-bit RX data words from the PCS Lite Layer are packed into a 40-bit word for the Ethernet SGMII MAC. 0 = The first 20-bit word from the PCS Lite Layer is transferred to the lower 20-bit word position, bits[19:0] of the 40-bit word and the next consecutive 20-bit word from the PCS Lite layer is transferred to the upper 20-bit word position, bits[39:20] of the 40-bit word. The assembled 40-bit word is then forwarded the SGMII Ethernet MAC. 1 = The first 20-bit word from the PCS Lite Layer is transferred to the upper 20-bit word position, bits[39:20] of the 40-bit word and the next consecutive 20-bit word from the PCS Lite layer is transferred to the lower 20-bit word position, bits[19:0] of the 40-bit word. The assembled 40-bit word is then forwarded the SGMII Ethernet MAC. For diagnostic use only. */ uint64_t reserved_4_63 : 60; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pcs_802p3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pcs_802p3_bcfg bdk_gsernx_lanex_pcs_802p3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PCS_802P3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PCS_802P3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003350ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PCS_802P3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) bdk_gsernx_lanex_pcs_802p3_bcfg_t #define bustype_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) "GSERNX_LANEX_PCS_802P3_BCFG" #define device_bar_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PCS_802P3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pll_1_bcfg * * GSER Lane PLL Base Configuration Register 1 */ union bdk_gsernx_lanex_pll_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_pll_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t reserved_29_37 : 9; uint64_t post_div : 2; /**< [ 28: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. 0x0 = Divide PLL frequency by 1. 0x1 = Divide PLL frequency by 2. 0x2 = Divide PLL frequency by 4. 0x3 = Divide PLL frequency by 8. */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion. */ #else /* Word 0 - Little Endian */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion. */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t post_div : 2; /**< [ 28: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. 0x0 = Divide PLL frequency by 1. 0x1 = Divide PLL frequency by 2. 0x2 = Divide PLL frequency by 4. 0x3 = Divide PLL frequency by 8. */ uint64_t reserved_29_37 : 9; uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; struct bdk_gsernx_lanex_pll_1_bcfg_cn { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t reserved_36_37 : 2; uint64_t reserved_29_35 : 7; uint64_t post_div : 2; /**< [ 28: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. 0x0 = Divide PLL frequency by 1. 0x1 = Divide PLL frequency by 2. 0x2 = Divide PLL frequency by 4. 0x3 = Divide PLL frequency by 8. */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion. */ #else /* Word 0 - Little Endian */ uint64_t div_f : 18; /**< [ 17: 0](R/W) PLL feedback divider fractional portion. */ uint64_t div_n : 9; /**< [ 26: 18](R/W) PLL feedback divider integer portion. */ uint64_t post_div : 2; /**< [ 28: 27](R/W) Forward PLL divider. Used in conjunction with [DIV_N] to set the PLL frequency given a reference clock frequency. The output frequency will be the VCO frequency divided by [POST_DIV]. 0x0 = Divide PLL frequency by 1. 0x1 = Divide PLL frequency by 2. 0x2 = Divide PLL frequency by 4. 0x3 = Divide PLL frequency by 8. */ uint64_t reserved_29_35 : 7; uint64_t reserved_36_37 : 2; uint64_t sdm_en : 1; /**< [ 38: 38](R/W) Enable PLL fractional-N operation. */ uint64_t vco_sel : 1; /**< [ 39: 39](R/W) PLL select one of the two VCOs in the PLL. */ uint64_t cal_sel : 1; /**< [ 40: 40](R/W) PLL calibration method select. */ uint64_t dither_en : 1; /**< [ 41: 41](R/W) Enable the dithering bit of sigma delta modulator. */ uint64_t bg_clk_en : 1; /**< [ 42: 42](R/W) Enable chopping in the band gap circuit. */ uint64_t bg_div16 : 1; /**< [ 43: 43](R/W) Enable divide by 16 of reference clock to the band gap. */ uint64_t band_overide : 1; /**< [ 44: 44](R/W/H) Bypass PLL calibration and set PLL band with band field inputs. */ uint64_t band_limits : 3; /**< [ 47: 45](R/W) Band limits for the PLL calibration procedure. */ uint64_t band : 5; /**< [ 52: 48](R/W/H) PLL manual PLL band inputs; only effective if [BAND_OVERIDE] set. */ uint64_t band_ppm : 2; /**< [ 54: 53](R/W) PLL band ppm setting. */ uint64_t cp_overide : 1; /**< [ 55: 55](R/W) PLL charge pump override. */ uint64_t cp : 4; /**< [ 59: 56](R/W) PLL charge pump configuration. */ uint64_t cal_cp_mult : 2; /**< [ 61: 60](R/W) PLL cal charge pump mult control. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } cn; }; typedef union bdk_gsernx_lanex_pll_1_bcfg bdk_gsernx_lanex_pll_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PLL_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PLL_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000200ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PLL_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) bdk_gsernx_lanex_pll_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) "GSERNX_LANEX_PLL_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PLL_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_pll_2_bcfg * * GSER Lane PLL Base Configuration Register 2 */ union bdk_gsernx_lanex_pll_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_pll_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t lock_check_cnt_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [LOCK_CHECK_CNT_OVRD]. */ uint64_t lock_check_cnt_ovrd : 15; /**< [ 54: 40](R/W) Lock check counter value override. This counter is used to wait for PLL lock to be valid. It counts every REFCLK cycle and once its done asserts GSERN()_LANE()_INIT_BSTS[LOCK_READY]. For Common PLL, REFCLK is the input from the pad. For Lane PLL, REFCLK is the output of the common PLL. To use value assert GSERN()_LANE()_RST1_BCFG[LOCK_CHECK] or trigger a PLL reset sequence. */ uint64_t reserved_34_39 : 6; uint64_t vcm_sel : 1; /**< [ 33: 33](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t cp_boost : 1; /**< [ 32: 32](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t ssc_sata_mode : 2; /**< [ 31: 30](R/W) PLL SATA spread spectrum control. 0x0 = Down spreading. PPM triangle wave total peak-to-peak spread subtracted from nominal frequency. 0x1 = Up spreading. PPM triangle wave total peak-to-peak spread added to nominal frequency. 0x2 = Center spreading. PPM triangle wave total peak-to-peak spread centered at nominal frequency. 0x3 = Square wave subtracted from nominal frequency. */ uint64_t ssc_ppm : 2; /**< [ 29: 28](R/W) Spread-spectrum clocking total peak-to-peak spread. 0x0 = 5000 PPM. 0x1 = 3000 PPM. 0x2 = 2500 PPM. 0x3 = 1000 PPM. */ uint64_t pnr_refclk_en : 1; /**< [ 27: 27](R/W) Enable PLL reference clock to internal logic. */ uint64_t ssc_en : 1; /**< [ 26: 26](R/W) Spread-spectrum clocking enable. */ uint64_t shlb_en : 1; /**< [ 25: 25](R/W) Used when in shallow loopback mode to mux the CDR receive clock onto the transmit data path clock to ensure that the clock frequencies are matched (to prevent data overrun). */ uint64_t pfd_offset : 1; /**< [ 24: 24](R/W) PLL PFD offset enable. */ uint64_t opamp : 4; /**< [ 23: 20](R/W) PLL loop filter op-amp configuration. */ uint64_t res : 4; /**< [ 19: 16](R/W) PLL loop filter configuration. */ uint64_t reserved_15 : 1; uint64_t vco_bias : 3; /**< [ 14: 12](R/W) VCO bias control. */ uint64_t cal_dac_low : 4; /**< [ 11: 8](R/W) PLL calibration DAC low control. */ uint64_t cal_dac_mid : 4; /**< [ 7: 4](R/W) PLL calibration DAC middle control. */ uint64_t cal_dac_high : 4; /**< [ 3: 0](R/W) PLL calibration DAC high control. */ #else /* Word 0 - Little Endian */ uint64_t cal_dac_high : 4; /**< [ 3: 0](R/W) PLL calibration DAC high control. */ uint64_t cal_dac_mid : 4; /**< [ 7: 4](R/W) PLL calibration DAC middle control. */ uint64_t cal_dac_low : 4; /**< [ 11: 8](R/W) PLL calibration DAC low control. */ uint64_t vco_bias : 3; /**< [ 14: 12](R/W) VCO bias control. */ uint64_t reserved_15 : 1; uint64_t res : 4; /**< [ 19: 16](R/W) PLL loop filter configuration. */ uint64_t opamp : 4; /**< [ 23: 20](R/W) PLL loop filter op-amp configuration. */ uint64_t pfd_offset : 1; /**< [ 24: 24](R/W) PLL PFD offset enable. */ uint64_t shlb_en : 1; /**< [ 25: 25](R/W) Used when in shallow loopback mode to mux the CDR receive clock onto the transmit data path clock to ensure that the clock frequencies are matched (to prevent data overrun). */ uint64_t ssc_en : 1; /**< [ 26: 26](R/W) Spread-spectrum clocking enable. */ uint64_t pnr_refclk_en : 1; /**< [ 27: 27](R/W) Enable PLL reference clock to internal logic. */ uint64_t ssc_ppm : 2; /**< [ 29: 28](R/W) Spread-spectrum clocking total peak-to-peak spread. 0x0 = 5000 PPM. 0x1 = 3000 PPM. 0x2 = 2500 PPM. 0x3 = 1000 PPM. */ uint64_t ssc_sata_mode : 2; /**< [ 31: 30](R/W) PLL SATA spread spectrum control. 0x0 = Down spreading. PPM triangle wave total peak-to-peak spread subtracted from nominal frequency. 0x1 = Up spreading. PPM triangle wave total peak-to-peak spread added to nominal frequency. 0x2 = Center spreading. PPM triangle wave total peak-to-peak spread centered at nominal frequency. 0x3 = Square wave subtracted from nominal frequency. */ uint64_t cp_boost : 1; /**< [ 32: 32](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t vcm_sel : 1; /**< [ 33: 33](R/W) For diagnostic use only. Internal: See PLL designer for how to set these. */ uint64_t reserved_34_39 : 6; uint64_t lock_check_cnt_ovrd : 15; /**< [ 54: 40](R/W) Lock check counter value override. This counter is used to wait for PLL lock to be valid. It counts every REFCLK cycle and once its done asserts GSERN()_LANE()_INIT_BSTS[LOCK_READY]. For Common PLL, REFCLK is the input from the pad. For Lane PLL, REFCLK is the output of the common PLL. To use value assert GSERN()_LANE()_RST1_BCFG[LOCK_CHECK] or trigger a PLL reset sequence. */ uint64_t lock_check_cnt_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [LOCK_CHECK_CNT_OVRD]. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_pll_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_pll_2_bcfg bdk_gsernx_lanex_pll_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_PLL_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_PLL_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000210ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_PLL_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) bdk_gsernx_lanex_pll_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) "GSERNX_LANEX_PLL_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_PLL_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rev * * GSER Lane Revision Register * Revision number */ union bdk_gsernx_lanex_rev { uint64_t u; struct bdk_gsernx_lanex_rev_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_8_63 : 56; uint64_t rev : 8; /**< [ 7: 0](RO/H) Revision number for GSERN lane subblock. Internal: Used primarily for E5. */ #else /* Word 0 - Little Endian */ uint64_t rev : 8; /**< [ 7: 0](RO/H) Revision number for GSERN lane subblock. Internal: Used primarily for E5. */ uint64_t reserved_8_63 : 56; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rev_s cn; */ }; typedef union bdk_gsernx_lanex_rev bdk_gsernx_lanex_rev_t; static inline uint64_t BDK_GSERNX_LANEX_REV(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_REV(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000000ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_REV", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_REV(a,b) bdk_gsernx_lanex_rev_t #define bustype_BDK_GSERNX_LANEX_REV(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_REV(a,b) "GSERNX_LANEX_REV" #define device_bar_BDK_GSERNX_LANEX_REV(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_REV(a,b) (a) #define arguments_BDK_GSERNX_LANEX_REV(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst1_bcfg * * GSER Lane Reset State Machine Controls and Overrides Register 1 */ union bdk_gsernx_lanex_rst1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t domain_rst_en : 1; /**< [ 55: 55](R/W) Domain reset enable. 0 = Prevent reseting lane logic with domain reset. 1 = Enable reseting all lane logic with domain reset. For PCIe configurations, typically 1 for a root complex and 0 for an endpoint. */ uint64_t reserved_48_54 : 7; uint64_t rx_go2deep_idle : 1; /**< [ 47: 47](R/W) Set to sequence the receiver into deep idle. */ uint64_t rx_pd_qac_q : 1; /**< [ 46: 46](R/W) Power control for the custom analog quadrature accuracy corrector (QAC). This QAC corrects for phase error between the I clock and the Q (quadrature, doutq) clock. 0 = Power up the I/Q QAC. 1 = Power down the I/Q QAC. When in this state, GSERN()_LANE()_RX_QAC_BCFG[CDR_QAC_SELQ] should also be set to zero to disconnect the QAC from the clock data recovery (CDR) loop. */ uint64_t rx_pd_qac_e : 1; /**< [ 45: 45](R/W) Power control for the custom analog quadrature accuracy corrector (QAC). This QAC corrects for phase error between the I clock and the E (eye, doute) clock. 0 = Power up the I/E QAC. 1 = Power down the I/E QAC. When in this state, GSERN()_LANE()_RX_QAC_BCFG[CDR_QAC_SELQ] should also be set to zero to disconnect the QAC from the clock data recovery (CDR) loop. */ uint64_t rx_pd_idle : 1; /**< [ 44: 44](R/W) Set to power down the idle detector in the custom analog receiver. */ uint64_t rx_rst_deser : 1; /**< [ 43: 43](R/W) Set to reset the deserializers to the offset DAC, current bias DAC, and interpolator re-mapping. */ uint64_t rx_rst_dcc_q : 1; /**< [ 42: 42](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the Q (quadrature, data, doutq) path. */ uint64_t rx_rst_dcc_i : 1; /**< [ 41: 41](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the I (in-phase, edge, douti) path. */ uint64_t rx_rst_dcc_e : 1; /**< [ 40: 40](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the E (eye, doute) path */ uint64_t idle : 1; /**< [ 39: 39](R/W) Set to idle the custom receiver and baseline wander compensation (bwlc). */ uint64_t rx_rst_qac_q : 1; /**< [ 38: 38](R/W) Set reset to the doutq datapath quadrature corrector filter and associated logic. */ uint64_t rx_rst_qac_e : 1; /**< [ 37: 37](R/W) Set reset to the doute quadrature corrector filter and associated logic. */ uint64_t rx_rst_blwc : 1; /**< [ 36: 36](R/W) Set to reset the analog baseline wander compensation block. */ uint64_t rx_rst_cdrfsm : 1; /**< [ 35: 35](R/W) Set to reset the CDR FSM. */ uint64_t rx_rst_voter : 1; /**< [ 34: 34](R/W) Set to reset the analog voter block. */ uint64_t rx_rst_div_e : 1; /**< [ 33: 33](R/W) Set to reset the analog CDR clock dividers in the eye data path for div{5, 8, 10, 16, 20}. */ uint64_t rx_rst_div : 1; /**< [ 32: 32](R/W) Set to reset the analog CDR clock dividers in the quadrature data path for div{5, 8, 10, 16, 20}. */ uint64_t rx_rst_interp_q : 1; /**< [ 31: 31](R/W) Set to reset the Q (quadrature, doutq) pipe analog interpolator logic (only, not the full datapaths). */ uint64_t rx_rst_interp_i : 1; /**< [ 30: 30](R/W) Set to reset the I (in-phase, douti) pipe analog interpolator logic (only, not the full datapath). */ uint64_t rx_rst_interp_e : 1; /**< [ 29: 29](R/W) Set to reset the E (eye, doute) analog interpolator logic (only, not the full datapath). */ uint64_t rx_pd_interp_q : 1; /**< [ 28: 28](R/W) Set to power down the I (in-phase, douti) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_pd_interp_i : 1; /**< [ 27: 27](R/W) Set to power down the I (in-phase, douti) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_pd_interp_e : 1; /**< [ 26: 26](R/W) Set to power down the E (eye, doute) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_pd_dfe_x : 1; /**< [ 25: 25](R/W) Set to power down the DFE X path. The X path is passed to the DFE I (edge, douti) pipe depending on edgesel_{even,odd}. */ uint64_t rx_pd_dfe_q : 1; /**< [ 24: 24](R/W) Set to power down the DFE Q (data, doutq) path (only, not the full datapath) */ uint64_t rx_pd_dfe_i : 1; /**< [ 23: 23](R/W) Set to power down the DFE I (edge, douti) path (only, not the full datapath). */ uint64_t rx_pd_dfe_e : 1; /**< [ 22: 22](R/W) Set to power down the DFE E (eye, doute) path (only, not the full datapath). */ uint64_t rx_pd_dcc_q : 1; /**< [ 21: 21](R/W) Set to power down the duty-cycle corrector (DCC) of the Q (quadrature, doutq) clock after the interpolator and before the divider (only, not the full clock path). */ uint64_t rx_pd_dcc_i : 1; /**< [ 20: 20](R/W) Set to power down the duty-cycle corrector (DCC) of the I (in-phase, douti) clock after the interpolator and before the divider (not the full clock path). */ uint64_t rx_pd_dcc_e : 1; /**< [ 19: 19](R/W) Set to power down the duty-cycle corrector (DCC) of the E (eye, doute) clock after the interpolator and before the divider (not the full clock path). */ uint64_t rx_pd_biasdac : 1; /**< [ 18: 18](R/W) Set to power down the current bias DAC, which would power down any amplifier in the RX (CTLE, VGA, DFE summer, DCC, QAC, etc.). */ uint64_t rx_pd_afe : 1; /**< [ 17: 17](R/W) Set to power down the analog front-end (AFE). */ uint64_t rx_en_cdrfsm : 1; /**< [ 16: 16](R/W) Set to enable (power-up) the CDR FSM. */ uint64_t reserved_13_15 : 3; uint64_t pll_go2deep_idle : 1; /**< [ 12: 12](R/W) Set to cycle the PLL into deep idle. */ uint64_t lock_ppm : 2; /**< [ 11: 10](R/W) PLL lock PPM setting; after GSERN()_LANE()_RST1_BCFG[LOCK_WAIT], compare reference clock and divided VCO clock for this many cycles: 0x0 = Compare after 5000 reference clock cycles. 0x1 = Compare after 10000 reference clock cycles. 0x2 = Compare after 20000 reference clock cycles. 0x3 = Compare after 2500 reference clock cycles. */ uint64_t lock_wait : 2; /**< [ 9: 8](R/W) Wait time for PLL lock check function to start: 0x0 = Wait 2500 reference clock cycles. 0x1 = Wait 5000 reference clock cycles. 0x2 = Wait 10000 reference clock cycles. 0x3 = Wait 1250 reference clock cycles. */ uint64_t lock_check : 1; /**< [ 7: 7](R/W) Trigger a PLL lock status check; result returned in GSERN()_LANE()_INIT_BSTS[LOCK] when GSERN()_LANE()_INIT_BSTS[LOCK_READY] asserts. deassert and re-assert to repeat checking. */ uint64_t vco_cal_reset : 1; /**< [ 6: 6](R/W) PLL VCO calibration state machine reset. */ uint64_t fracn_reset : 1; /**< [ 5: 5](R/W) PLL fractional-N state machine reset. */ uint64_t ssc_reset : 1; /**< [ 4: 4](R/W) PLL SSC state machine reset. */ uint64_t post_div_reset : 1; /**< [ 3: 3](RO) Reserved. Internal: Was common PLL post divider reset. No longer used. */ uint64_t reset : 1; /**< [ 2: 2](R/W) PLL primary reset; must assert [POST_DIV_RESET] if [RESET] is asserted. */ uint64_t cal_en : 1; /**< [ 1: 1](R/W) Enable PLL calibration procedure. */ uint64_t pwdn : 1; /**< [ 0: 0](R/W) PLL power down control. */ #else /* Word 0 - Little Endian */ uint64_t pwdn : 1; /**< [ 0: 0](R/W) PLL power down control. */ uint64_t cal_en : 1; /**< [ 1: 1](R/W) Enable PLL calibration procedure. */ uint64_t reset : 1; /**< [ 2: 2](R/W) PLL primary reset; must assert [POST_DIV_RESET] if [RESET] is asserted. */ uint64_t post_div_reset : 1; /**< [ 3: 3](RO) Reserved. Internal: Was common PLL post divider reset. No longer used. */ uint64_t ssc_reset : 1; /**< [ 4: 4](R/W) PLL SSC state machine reset. */ uint64_t fracn_reset : 1; /**< [ 5: 5](R/W) PLL fractional-N state machine reset. */ uint64_t vco_cal_reset : 1; /**< [ 6: 6](R/W) PLL VCO calibration state machine reset. */ uint64_t lock_check : 1; /**< [ 7: 7](R/W) Trigger a PLL lock status check; result returned in GSERN()_LANE()_INIT_BSTS[LOCK] when GSERN()_LANE()_INIT_BSTS[LOCK_READY] asserts. deassert and re-assert to repeat checking. */ uint64_t lock_wait : 2; /**< [ 9: 8](R/W) Wait time for PLL lock check function to start: 0x0 = Wait 2500 reference clock cycles. 0x1 = Wait 5000 reference clock cycles. 0x2 = Wait 10000 reference clock cycles. 0x3 = Wait 1250 reference clock cycles. */ uint64_t lock_ppm : 2; /**< [ 11: 10](R/W) PLL lock PPM setting; after GSERN()_LANE()_RST1_BCFG[LOCK_WAIT], compare reference clock and divided VCO clock for this many cycles: 0x0 = Compare after 5000 reference clock cycles. 0x1 = Compare after 10000 reference clock cycles. 0x2 = Compare after 20000 reference clock cycles. 0x3 = Compare after 2500 reference clock cycles. */ uint64_t pll_go2deep_idle : 1; /**< [ 12: 12](R/W) Set to cycle the PLL into deep idle. */ uint64_t reserved_13_15 : 3; uint64_t rx_en_cdrfsm : 1; /**< [ 16: 16](R/W) Set to enable (power-up) the CDR FSM. */ uint64_t rx_pd_afe : 1; /**< [ 17: 17](R/W) Set to power down the analog front-end (AFE). */ uint64_t rx_pd_biasdac : 1; /**< [ 18: 18](R/W) Set to power down the current bias DAC, which would power down any amplifier in the RX (CTLE, VGA, DFE summer, DCC, QAC, etc.). */ uint64_t rx_pd_dcc_e : 1; /**< [ 19: 19](R/W) Set to power down the duty-cycle corrector (DCC) of the E (eye, doute) clock after the interpolator and before the divider (not the full clock path). */ uint64_t rx_pd_dcc_i : 1; /**< [ 20: 20](R/W) Set to power down the duty-cycle corrector (DCC) of the I (in-phase, douti) clock after the interpolator and before the divider (not the full clock path). */ uint64_t rx_pd_dcc_q : 1; /**< [ 21: 21](R/W) Set to power down the duty-cycle corrector (DCC) of the Q (quadrature, doutq) clock after the interpolator and before the divider (only, not the full clock path). */ uint64_t rx_pd_dfe_e : 1; /**< [ 22: 22](R/W) Set to power down the DFE E (eye, doute) path (only, not the full datapath). */ uint64_t rx_pd_dfe_i : 1; /**< [ 23: 23](R/W) Set to power down the DFE I (edge, douti) path (only, not the full datapath). */ uint64_t rx_pd_dfe_q : 1; /**< [ 24: 24](R/W) Set to power down the DFE Q (data, doutq) path (only, not the full datapath) */ uint64_t rx_pd_dfe_x : 1; /**< [ 25: 25](R/W) Set to power down the DFE X path. The X path is passed to the DFE I (edge, douti) pipe depending on edgesel_{even,odd}. */ uint64_t rx_pd_interp_e : 1; /**< [ 26: 26](R/W) Set to power down the E (eye, doute) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_pd_interp_i : 1; /**< [ 27: 27](R/W) Set to power down the I (in-phase, douti) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_pd_interp_q : 1; /**< [ 28: 28](R/W) Set to power down the I (in-phase, douti) analog interpolator logic and output clocks (only, not the full clock path). */ uint64_t rx_rst_interp_e : 1; /**< [ 29: 29](R/W) Set to reset the E (eye, doute) analog interpolator logic (only, not the full datapath). */ uint64_t rx_rst_interp_i : 1; /**< [ 30: 30](R/W) Set to reset the I (in-phase, douti) pipe analog interpolator logic (only, not the full datapath). */ uint64_t rx_rst_interp_q : 1; /**< [ 31: 31](R/W) Set to reset the Q (quadrature, doutq) pipe analog interpolator logic (only, not the full datapaths). */ uint64_t rx_rst_div : 1; /**< [ 32: 32](R/W) Set to reset the analog CDR clock dividers in the quadrature data path for div{5, 8, 10, 16, 20}. */ uint64_t rx_rst_div_e : 1; /**< [ 33: 33](R/W) Set to reset the analog CDR clock dividers in the eye data path for div{5, 8, 10, 16, 20}. */ uint64_t rx_rst_voter : 1; /**< [ 34: 34](R/W) Set to reset the analog voter block. */ uint64_t rx_rst_cdrfsm : 1; /**< [ 35: 35](R/W) Set to reset the CDR FSM. */ uint64_t rx_rst_blwc : 1; /**< [ 36: 36](R/W) Set to reset the analog baseline wander compensation block. */ uint64_t rx_rst_qac_e : 1; /**< [ 37: 37](R/W) Set reset to the doute quadrature corrector filter and associated logic. */ uint64_t rx_rst_qac_q : 1; /**< [ 38: 38](R/W) Set reset to the doutq datapath quadrature corrector filter and associated logic. */ uint64_t idle : 1; /**< [ 39: 39](R/W) Set to idle the custom receiver and baseline wander compensation (bwlc). */ uint64_t rx_rst_dcc_e : 1; /**< [ 40: 40](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the E (eye, doute) path */ uint64_t rx_rst_dcc_i : 1; /**< [ 41: 41](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the I (in-phase, edge, douti) path. */ uint64_t rx_rst_dcc_q : 1; /**< [ 42: 42](R/W) Set to reset the integrator in the duty-cycle corrector (DCC) on the Q (quadrature, data, doutq) path. */ uint64_t rx_rst_deser : 1; /**< [ 43: 43](R/W) Set to reset the deserializers to the offset DAC, current bias DAC, and interpolator re-mapping. */ uint64_t rx_pd_idle : 1; /**< [ 44: 44](R/W) Set to power down the idle detector in the custom analog receiver. */ uint64_t rx_pd_qac_e : 1; /**< [ 45: 45](R/W) Power control for the custom analog quadrature accuracy corrector (QAC). This QAC corrects for phase error between the I clock and the E (eye, doute) clock. 0 = Power up the I/E QAC. 1 = Power down the I/E QAC. When in this state, GSERN()_LANE()_RX_QAC_BCFG[CDR_QAC_SELQ] should also be set to zero to disconnect the QAC from the clock data recovery (CDR) loop. */ uint64_t rx_pd_qac_q : 1; /**< [ 46: 46](R/W) Power control for the custom analog quadrature accuracy corrector (QAC). This QAC corrects for phase error between the I clock and the Q (quadrature, doutq) clock. 0 = Power up the I/Q QAC. 1 = Power down the I/Q QAC. When in this state, GSERN()_LANE()_RX_QAC_BCFG[CDR_QAC_SELQ] should also be set to zero to disconnect the QAC from the clock data recovery (CDR) loop. */ uint64_t rx_go2deep_idle : 1; /**< [ 47: 47](R/W) Set to sequence the receiver into deep idle. */ uint64_t reserved_48_54 : 7; uint64_t domain_rst_en : 1; /**< [ 55: 55](R/W) Domain reset enable. 0 = Prevent reseting lane logic with domain reset. 1 = Enable reseting all lane logic with domain reset. For PCIe configurations, typically 1 for a root complex and 0 for an endpoint. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst1_bcfg bdk_gsernx_lanex_rst1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000310ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST1_BCFG(a,b) bdk_gsernx_lanex_rst1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST1_BCFG(a,b) "GSERNX_LANEX_RST1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst2_bcfg * * GSER Lane Reset State Machine Controls and Overrides Register 2 */ union bdk_gsernx_lanex_rst2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_58_63 : 6; uint64_t adpt_trigger_wait : 4; /**< [ 57: 54](R/W) Wait time for after triggering adaptation before checking adaptation status. Set to a minimum of 3. Set to the desired value before or at the same time as setting [RST_ADPT_RST_SM] to zero. */ uint64_t reserved_50_53 : 4; uint64_t adpt_wait : 18; /**< [ 49: 32](R/W) Wait time for adaptation to complete. Set at least as long as the maximum of: * GSERN()_LANE()_RX_5_BCFG[VGA_TIMER_MAX]. * GSERN()_LANE()_RX_5_BCFG[DFE_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLELTE_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLEZ_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLE_TIMER_MAX]. * GSERN()_LANE()_RX_12_BCFG[AFEOS_TIMER_MAX]. * GSERN()_LANE()_RX_19_BCFG[BLWC_TIMER_MAX]. * GSERN()_LANE()_RX_23_BCFG[PREVGA_GN_TIMER_MAX]. The adaptation state machine will move on when all enabled adaptation operations complete within the [ADPT_WAIT] count. If they do not complete within the wait time, the state machine will move on when the counter expires. Set to the desired value before or at the same time as setting [RST_ADPT_RST_SM] to zero. */ uint64_t reserved_30_31 : 2; uint64_t do_prevga_gn_adpt : 1; /**< [ 29: 29](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_blwc_adpt : 1; /**< [ 28: 28](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_afeos_adpt : 1; /**< [ 27: 27](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctlelte_adpt : 1; /**< [ 26: 26](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctlez_adpt : 1; /**< [ 25: 25](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctle_adpt : 1; /**< [ 24: 24](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_dfe_adpt : 1; /**< [ 23: 23](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_vga_adpt : 1; /**< [ 22: 22](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t rst_adpt_rst_sm : 1; /**< [ 21: 21](R/W) Set to one to reset the adaptation reset state machine; set to zero to allow the adaptation reset state machine to run. Leave set to one to run adaptation entirely under SW control through the GSERN()_LANE()_RX_7_BCFG[*_RST] controls. Write to zero at the same time or after the desired [DO_*_ADPT] controls are enabled to allow the reset state machine to initiate adaptation. Note - for pausing and restarting adaptation associated with PCIe rate changes and all power state transitions, the reset state machine should control adaptation. */ uint64_t rst_eye_rst_sm : 1; /**< [ 20: 20](R/W) Set to reset the eye data path reset and power-up/power-down state machine; set low to allow the eye data path reset and soft power-up/power-down state machine to run (if [LN_RESET_USE_EYE] is asserted). */ uint64_t ln_reset_use_eye : 1; /**< [ 19: 19](R/W) Set to enable the eye (doute) data path reset and power-up/power-down state machine to run at cold reset when [RST_EYE_RST_SM] deasserts. After cold reset, assert or deassert [LN_RESET_USE_EYE] to run the eye data path soft power-up or power-down sequence. */ uint64_t rst_rx_rst_sm : 1; /**< [ 18: 18](R/W) Set to reset the receiver reset state machine; set low to run the receiver reset initialization state machine. */ uint64_t rst_tx_rst_sm : 1; /**< [ 17: 17](R/W) Set to reset the transmitter reset state machine; set low to run the transmitter reset initialization state machine. */ uint64_t rst_pll_rst_sm : 1; /**< [ 16: 16](R/W) Set to reset the full lane reset state machine (PLL, TX, and RX); set low to run the complete reset initialization sequence starting with lane PLL initialization. */ uint64_t reserved_13_15 : 3; uint64_t tx_dcc_iboost : 1; /**< [ 12: 12](R/W) Set to assert the iboost control bit of the transmit duty cycle correcter. Should be programmed as desired before sequencing the transmitter reset state machine. Differs from [TX_DCC_LOWF] in the data rate range that it is set at. */ uint64_t tx_go2deep_idle : 1; /**< [ 11: 11](R/W) Set to sequence the transmitter into deep idle. */ uint64_t tx_dcc_lowf : 1; /**< [ 10: 10](R/W) Set to assert the low-frequency control bit of the transmit duty cycle correcter. Should be programmed as desired before sequencing the transmitter reset state machine. Set to 1 for data rates below 4 Gbaud. */ uint64_t tx_idle : 1; /**< [ 9: 9](R/W) Set to put the transmitter into idle (weak terminate). */ uint64_t tx_div_rst : 1; /**< [ 8: 8](R/W) Set to reset the counter in the analog transmitter clock divider. */ uint64_t tx_dcc_rst : 1; /**< [ 7: 7](R/W) Set to reset the analog duty cycle corrector in the transmitter. */ uint64_t reserved_6 : 1; uint64_t tx_enctl : 1; /**< [ 5: 5](R/W) Set to enable the analog TX controls (c*, en*). */ uint64_t tx_cdrdiv3 : 1; /**< [ 4: 4](R/W) Set to enable the analog divide by 3 post scalar divider in the TX divider. If GSERN()_LANE()_CDRFSM_BCFG[CLK_SEL] is set to use the div3clk from the transmitter this bit needs to be enabled. */ uint64_t tx_endiv5 : 1; /**< [ 3: 3](R/W) Set to enable the analog divide by 4 or 5 post scalar dividers in the TX divider. */ uint64_t reserved_2 : 1; uint64_t tx_pdb : 1; /**< [ 1: 1](R/W) Set to zero to power down the entire analog TX driver, disabling current mirrors, current DACs, and op-amps. */ uint64_t tx_dcc_pdb : 1; /**< [ 0: 0](R/W) Set to zero to power-down the low-swing input, CML to CMOS shifter, and duty cycle corrector. */ #else /* Word 0 - Little Endian */ uint64_t tx_dcc_pdb : 1; /**< [ 0: 0](R/W) Set to zero to power-down the low-swing input, CML to CMOS shifter, and duty cycle corrector. */ uint64_t tx_pdb : 1; /**< [ 1: 1](R/W) Set to zero to power down the entire analog TX driver, disabling current mirrors, current DACs, and op-amps. */ uint64_t reserved_2 : 1; uint64_t tx_endiv5 : 1; /**< [ 3: 3](R/W) Set to enable the analog divide by 4 or 5 post scalar dividers in the TX divider. */ uint64_t tx_cdrdiv3 : 1; /**< [ 4: 4](R/W) Set to enable the analog divide by 3 post scalar divider in the TX divider. If GSERN()_LANE()_CDRFSM_BCFG[CLK_SEL] is set to use the div3clk from the transmitter this bit needs to be enabled. */ uint64_t tx_enctl : 1; /**< [ 5: 5](R/W) Set to enable the analog TX controls (c*, en*). */ uint64_t reserved_6 : 1; uint64_t tx_dcc_rst : 1; /**< [ 7: 7](R/W) Set to reset the analog duty cycle corrector in the transmitter. */ uint64_t tx_div_rst : 1; /**< [ 8: 8](R/W) Set to reset the counter in the analog transmitter clock divider. */ uint64_t tx_idle : 1; /**< [ 9: 9](R/W) Set to put the transmitter into idle (weak terminate). */ uint64_t tx_dcc_lowf : 1; /**< [ 10: 10](R/W) Set to assert the low-frequency control bit of the transmit duty cycle correcter. Should be programmed as desired before sequencing the transmitter reset state machine. Set to 1 for data rates below 4 Gbaud. */ uint64_t tx_go2deep_idle : 1; /**< [ 11: 11](R/W) Set to sequence the transmitter into deep idle. */ uint64_t tx_dcc_iboost : 1; /**< [ 12: 12](R/W) Set to assert the iboost control bit of the transmit duty cycle correcter. Should be programmed as desired before sequencing the transmitter reset state machine. Differs from [TX_DCC_LOWF] in the data rate range that it is set at. */ uint64_t reserved_13_15 : 3; uint64_t rst_pll_rst_sm : 1; /**< [ 16: 16](R/W) Set to reset the full lane reset state machine (PLL, TX, and RX); set low to run the complete reset initialization sequence starting with lane PLL initialization. */ uint64_t rst_tx_rst_sm : 1; /**< [ 17: 17](R/W) Set to reset the transmitter reset state machine; set low to run the transmitter reset initialization state machine. */ uint64_t rst_rx_rst_sm : 1; /**< [ 18: 18](R/W) Set to reset the receiver reset state machine; set low to run the receiver reset initialization state machine. */ uint64_t ln_reset_use_eye : 1; /**< [ 19: 19](R/W) Set to enable the eye (doute) data path reset and power-up/power-down state machine to run at cold reset when [RST_EYE_RST_SM] deasserts. After cold reset, assert or deassert [LN_RESET_USE_EYE] to run the eye data path soft power-up or power-down sequence. */ uint64_t rst_eye_rst_sm : 1; /**< [ 20: 20](R/W) Set to reset the eye data path reset and power-up/power-down state machine; set low to allow the eye data path reset and soft power-up/power-down state machine to run (if [LN_RESET_USE_EYE] is asserted). */ uint64_t rst_adpt_rst_sm : 1; /**< [ 21: 21](R/W) Set to one to reset the adaptation reset state machine; set to zero to allow the adaptation reset state machine to run. Leave set to one to run adaptation entirely under SW control through the GSERN()_LANE()_RX_7_BCFG[*_RST] controls. Write to zero at the same time or after the desired [DO_*_ADPT] controls are enabled to allow the reset state machine to initiate adaptation. Note - for pausing and restarting adaptation associated with PCIe rate changes and all power state transitions, the reset state machine should control adaptation. */ uint64_t do_vga_adpt : 1; /**< [ 22: 22](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_dfe_adpt : 1; /**< [ 23: 23](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctle_adpt : 1; /**< [ 24: 24](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctlez_adpt : 1; /**< [ 25: 25](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_ctlelte_adpt : 1; /**< [ 26: 26](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_afeos_adpt : 1; /**< [ 27: 27](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_blwc_adpt : 1; /**< [ 28: 28](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t do_prevga_gn_adpt : 1; /**< [ 29: 29](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when [RST_ADPT_RST_SM] is deasserted. */ uint64_t reserved_30_31 : 2; uint64_t adpt_wait : 18; /**< [ 49: 32](R/W) Wait time for adaptation to complete. Set at least as long as the maximum of: * GSERN()_LANE()_RX_5_BCFG[VGA_TIMER_MAX]. * GSERN()_LANE()_RX_5_BCFG[DFE_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLELTE_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLEZ_TIMER_MAX]. * GSERN()_LANE()_RX_6_BCFG[CTLE_TIMER_MAX]. * GSERN()_LANE()_RX_12_BCFG[AFEOS_TIMER_MAX]. * GSERN()_LANE()_RX_19_BCFG[BLWC_TIMER_MAX]. * GSERN()_LANE()_RX_23_BCFG[PREVGA_GN_TIMER_MAX]. The adaptation state machine will move on when all enabled adaptation operations complete within the [ADPT_WAIT] count. If they do not complete within the wait time, the state machine will move on when the counter expires. Set to the desired value before or at the same time as setting [RST_ADPT_RST_SM] to zero. */ uint64_t reserved_50_53 : 4; uint64_t adpt_trigger_wait : 4; /**< [ 57: 54](R/W) Wait time for after triggering adaptation before checking adaptation status. Set to a minimum of 3. Set to the desired value before or at the same time as setting [RST_ADPT_RST_SM] to zero. */ uint64_t reserved_58_63 : 6; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst2_bcfg bdk_gsernx_lanex_rst2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000320ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST2_BCFG(a,b) bdk_gsernx_lanex_rst2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST2_BCFG(a,b) "GSERNX_LANEX_RST2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst_cnt1_bcfg * * GSER Lane Reset State Machine Delay Count Register 1 * Wait counts for the lane reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_lanex_rst_cnt1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst_cnt1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t cal_en_wait : 15; /**< [ 62: 48](R/W) Wait count in service clock cycles after calibration enable before deasserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. The service clock for the GSER PHY is connected to the reference clock used by the primary chip clock PLLs. Typically service clock is 100 MHz. */ uint64_t reserved_44_47 : 4; uint64_t pre_cal_en_wait : 12; /**< [ 43: 32](R/W) Wait count in service clock cycles after deasserting pwdn before asserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_25_31 : 7; uint64_t pre_pll_sm_reset_wait : 9; /**< [ 24: 16](R/W) Wait count in service clock cycles after deasserting pwdn before asserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_13_15 : 3; uint64_t pre_pwup_wait : 13; /**< [ 12: 0](R/W) Wait count in service clock cycles after initial trigger before deasserting power down to the PLL. The actual delay will be three cycles more than set here. The common block PLL state machine will typically wait 2^12 cycles before triggering the lane PLL to start. This field allows for staggering startup of different lanes by up to about 80us. */ #else /* Word 0 - Little Endian */ uint64_t pre_pwup_wait : 13; /**< [ 12: 0](R/W) Wait count in service clock cycles after initial trigger before deasserting power down to the PLL. The actual delay will be three cycles more than set here. The common block PLL state machine will typically wait 2^12 cycles before triggering the lane PLL to start. This field allows for staggering startup of different lanes by up to about 80us. */ uint64_t reserved_13_15 : 3; uint64_t pre_pll_sm_reset_wait : 9; /**< [ 24: 16](R/W) Wait count in service clock cycles after deasserting pwdn before asserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_25_31 : 7; uint64_t pre_cal_en_wait : 12; /**< [ 43: 32](R/W) Wait count in service clock cycles after deasserting pwdn before asserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_44_47 : 4; uint64_t cal_en_wait : 15; /**< [ 62: 48](R/W) Wait count in service clock cycles after calibration enable before deasserting calibration enable to the PLL. Set this field to one less than the desired number of cycles of delay. The service clock for the GSER PHY is connected to the reference clock used by the primary chip clock PLLs. Typically service clock is 100 MHz. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst_cnt1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst_cnt1_bcfg bdk_gsernx_lanex_rst_cnt1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST_CNT1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST_CNT1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000330ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST_CNT1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) bdk_gsernx_lanex_rst_cnt1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) "GSERNX_LANEX_RST_CNT1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST_CNT1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst_cnt2_bcfg * * GSER Lane Reset State Machine Delay Count Register 2 * Wait counts for the lane reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_lanex_rst_cnt2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst_cnt2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t rx_pre_qac_sel_wait : 9; /**< [ 56: 48](R/W) Wait count in service clock cycles after the deasserting reset to the QAC filter logic before asserting select to the q and e pipe qac filters. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_46_47 : 2; uint64_t txrx_pre_pwup_wait : 14; /**< [ 45: 32](R/W) Wait count in service clock cycles after the lane PLL exits reset before deasserting power down signals to the transmitter and receiver. Set this field to three less than the desired number of cycles of delay. */ uint64_t reserved_29_31 : 3; uint64_t pre_pdiv_reset_wait : 13; /**< [ 28: 16](R/W) Reserved. Internal: The lane PLL no longer has a postdivider reset. (This was the wait count in service clock cycles after deasserting reset before deasserting reset to the PLL postdivider. Set this field to one less than the desired number of cycles of delay.) */ uint64_t reserved_12_15 : 4; uint64_t pre_pll_reset_wait : 12; /**< [ 11: 0](R/W) Wait count in service clock cycles after calibration enable deasserts before deasserting reset to the PLL. Set this field to one less than the desired number of cycles of delay. */ #else /* Word 0 - Little Endian */ uint64_t pre_pll_reset_wait : 12; /**< [ 11: 0](R/W) Wait count in service clock cycles after calibration enable deasserts before deasserting reset to the PLL. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_12_15 : 4; uint64_t pre_pdiv_reset_wait : 13; /**< [ 28: 16](R/W) Reserved. Internal: The lane PLL no longer has a postdivider reset. (This was the wait count in service clock cycles after deasserting reset before deasserting reset to the PLL postdivider. Set this field to one less than the desired number of cycles of delay.) */ uint64_t reserved_29_31 : 3; uint64_t txrx_pre_pwup_wait : 14; /**< [ 45: 32](R/W) Wait count in service clock cycles after the lane PLL exits reset before deasserting power down signals to the transmitter and receiver. Set this field to three less than the desired number of cycles of delay. */ uint64_t reserved_46_47 : 2; uint64_t rx_pre_qac_sel_wait : 9; /**< [ 56: 48](R/W) Wait count in service clock cycles after the deasserting reset to the QAC filter logic before asserting select to the q and e pipe qac filters. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst_cnt2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst_cnt2_bcfg bdk_gsernx_lanex_rst_cnt2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST_CNT2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST_CNT2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000340ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST_CNT2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) bdk_gsernx_lanex_rst_cnt2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) "GSERNX_LANEX_RST_CNT2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST_CNT2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst_cnt3_bcfg * * GSER Lane Reset State Machine Delay Count Register 3 * Wait counts for the lane reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_lanex_rst_cnt3_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst_cnt3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_59_63 : 5; uint64_t rx_pre_run_wait : 11; /**< [ 58: 48](R/W) Wait count in service clock cycles after deasserting reset to the baseline wander correction logic before indicating that the receiver is ready. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_41_47 : 7; uint64_t pre_rst_iq_wait : 9; /**< [ 40: 32](R/W) Wait count in service clock cycles after deasserting reset to the receiver clock divider before deasserting reset to the i, q, and e pipe interpolators. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_25_31 : 7; uint64_t pre_tx_div_rst_wait : 9; /**< [ 24: 16](R/W) Wait count in service clock cycles after deasserting reset to the duty cycle correctors in the transmitter before deasserting reset to the transmitter clock divider. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_9_15 : 7; uint64_t pre_en_cdrfsm_wait : 9; /**< [ 8: 0](R/W) Wait count in service clock cycles after asserting power up to the custom receiver before enabling the CDR finite state machine. Set this field to one less than the desired number of cycles of delay. */ #else /* Word 0 - Little Endian */ uint64_t pre_en_cdrfsm_wait : 9; /**< [ 8: 0](R/W) Wait count in service clock cycles after asserting power up to the custom receiver before enabling the CDR finite state machine. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_9_15 : 7; uint64_t pre_tx_div_rst_wait : 9; /**< [ 24: 16](R/W) Wait count in service clock cycles after deasserting reset to the duty cycle correctors in the transmitter before deasserting reset to the transmitter clock divider. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_25_31 : 7; uint64_t pre_rst_iq_wait : 9; /**< [ 40: 32](R/W) Wait count in service clock cycles after deasserting reset to the receiver clock divider before deasserting reset to the i, q, and e pipe interpolators. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_41_47 : 7; uint64_t rx_pre_run_wait : 11; /**< [ 58: 48](R/W) Wait count in service clock cycles after deasserting reset to the baseline wander correction logic before indicating that the receiver is ready. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_59_63 : 5; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst_cnt3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst_cnt3_bcfg bdk_gsernx_lanex_rst_cnt3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST_CNT3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST_CNT3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000350ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST_CNT3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) bdk_gsernx_lanex_rst_cnt3_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) "GSERNX_LANEX_RST_CNT3_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST_CNT3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst_cnt4_bcfg * * GSER Lane Reset State Machine Delay Count Register 4 * Wait counts for the lane reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_lanex_rst_cnt4_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst_cnt4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t svc_clk_freq : 1; /**< [ 56: 56](R/W) For diagnostic use only. Internal: This bit reserved for future enhancements. The RTL to use it is not coded. Freq selection for service clock as used in the reset state machine. 0 = 100 MHz. 1 = 156.25 MHz. This scales only the wait counts not set via CSR registers. */ uint64_t reserved_50_55 : 6; uint64_t blwc_reset_wait : 18; /**< [ 49: 32](R/W) Wait count in service clock cycles after deasserting reset to the CDR FSM before deasserting reset to the baseline wander correction circuit (BLWC). The power-up document specifies this as 16 service clock cycles, but verbal communication says that's only correct for cases of small frequency offset between the lane PLL and the received data stream clock, i.e., it doesn't apply for SSC (except PCIe). Since the actual requirement is not specified, this field allows for the full range of the counter in the receiver reset state machine. */ uint64_t reserved_20_31 : 12; uint64_t dfe_afe_oscal_wait : 20; /**< [ 19: 0](R/W) Maximum wait count in service clock cycles after triggering the dfe and afe offset calibration sequences before deasserting reset_voter. Normally the receiver reset state machine will move on when DFE and AFE offset calibration is complete. This is a time-out parameter in case the offset calibration state machines do not complete. Set this field to one less than the desired number of cycles of delay. */ #else /* Word 0 - Little Endian */ uint64_t dfe_afe_oscal_wait : 20; /**< [ 19: 0](R/W) Maximum wait count in service clock cycles after triggering the dfe and afe offset calibration sequences before deasserting reset_voter. Normally the receiver reset state machine will move on when DFE and AFE offset calibration is complete. This is a time-out parameter in case the offset calibration state machines do not complete. Set this field to one less than the desired number of cycles of delay. */ uint64_t reserved_20_31 : 12; uint64_t blwc_reset_wait : 18; /**< [ 49: 32](R/W) Wait count in service clock cycles after deasserting reset to the CDR FSM before deasserting reset to the baseline wander correction circuit (BLWC). The power-up document specifies this as 16 service clock cycles, but verbal communication says that's only correct for cases of small frequency offset between the lane PLL and the received data stream clock, i.e., it doesn't apply for SSC (except PCIe). Since the actual requirement is not specified, this field allows for the full range of the counter in the receiver reset state machine. */ uint64_t reserved_50_55 : 6; uint64_t svc_clk_freq : 1; /**< [ 56: 56](R/W) For diagnostic use only. Internal: This bit reserved for future enhancements. The RTL to use it is not coded. Freq selection for service clock as used in the reset state machine. 0 = 100 MHz. 1 = 156.25 MHz. This scales only the wait counts not set via CSR registers. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst_cnt4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst_cnt4_bcfg bdk_gsernx_lanex_rst_cnt4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST_CNT4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST_CNT4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000360ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST_CNT4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) bdk_gsernx_lanex_rst_cnt4_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) "GSERNX_LANEX_RST_CNT4_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST_CNT4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rst_cnt5_bcfg * * GSER Lane Reset State Machine Delay Count Register 4 * Wait counts for the lane reset state machines. All fields must be set * before bringing the lane out of reset. */ union bdk_gsernx_lanex_rst_cnt5_bcfg { uint64_t u; struct bdk_gsernx_lanex_rst_cnt5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_33_63 : 31; uint64_t idle_exit_wait_en : 1; /**< [ 32: 32](R/W) Enable use of [IDLE_EXIT_WAIT] as a limit on the wait time for the receiver electrical idle indicator to deassert after resetting the voter. When [IDLE_EXIT_WAIT_EN] is low, the state machine will wait forever for the electrical idle signal to deassert. Note that the reset state machine will not see idle deassert until after the first idle offset calibration has completed after exiting reset. */ uint64_t reserved_28_31 : 4; uint64_t idle_exit_wait : 28; /**< [ 27: 0](R/W) Maximum wait count in service clock cycles for the receiver electrical idle indicator to deassert after resetting the voter. If the receiver electrical idle indication remains asserted, the reset state machine will move on after this count expires. */ #else /* Word 0 - Little Endian */ uint64_t idle_exit_wait : 28; /**< [ 27: 0](R/W) Maximum wait count in service clock cycles for the receiver electrical idle indicator to deassert after resetting the voter. If the receiver electrical idle indication remains asserted, the reset state machine will move on after this count expires. */ uint64_t reserved_28_31 : 4; uint64_t idle_exit_wait_en : 1; /**< [ 32: 32](R/W) Enable use of [IDLE_EXIT_WAIT] as a limit on the wait time for the receiver electrical idle indicator to deassert after resetting the voter. When [IDLE_EXIT_WAIT_EN] is low, the state machine will wait forever for the electrical idle signal to deassert. Note that the reset state machine will not see idle deassert until after the first idle offset calibration has completed after exiting reset. */ uint64_t reserved_33_63 : 31; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rst_cnt5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rst_cnt5_bcfg bdk_gsernx_lanex_rst_cnt5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RST_CNT5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RST_CNT5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000370ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RST_CNT5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) bdk_gsernx_lanex_rst_cnt5_bcfg_t #define bustype_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) "GSERNX_LANEX_RST_CNT5_BCFG" #define device_bar_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RST_CNT5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rstclkmsk_bcfg * * GSER Lane Reset State Machine Transmit Clock Alignment Register * Controls for transmit alignment of lanes within a link requiring aligned transmit * data. */ union bdk_gsernx_lanex_rstclkmsk_bcfg { uint64_t u; struct bdk_gsernx_lanex_rstclkmsk_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_44_63 : 20; uint64_t txdivrst_algn_qlm_mask : 4; /**< [ 43: 40](R/W) Selection control for which QLMs in this QLM's link group to align in timing the deassertion of reset to this lane's transmitter's clock divider. \<0\> = Wait for QLM 0. \<1\> = Wait for QLM 1. \<2\> = Wait for QLM 2. \<3\> = Wait for QLM 3. The bit corresponding to the current QLM is ignored. */ uint64_t reserved_36_39 : 4; uint64_t txdivrst_algn_lane_mask : 4;/**< [ 35: 32](R/W) Selection control for which lanes in the current QLM to align in timing the deassertion of reset to this lane's transmitter's clock divider. \<0\> = Wait for lane 0. \<1\> = Wait for lane 1. \<2\> = Wait for lane 2. \<3\> = Wait for lane 3. The bit corresponding to the current Lane is ignored. */ uint64_t reserved_21_31 : 11; uint64_t txdivrst_algn_wait_en : 1; /**< [ 20: 20](R/W) Enable use of [TXDIVRST_ALGN_WAIT] as a time out waiting for other lanes to be ready to start their divided transmit clocks. With this bit cleared the lane will wait indefinitely. */ uint64_t txdivrst_algn_wait : 20; /**< [ 19: 0](R/W) Maximum wait count in service clock cycles, after this lane is ready to start its divided transmit clock, for other lanes in the link to be ready to start their divided transmit clocks. This is the maximum wait time, after which the state machine will move on, whether the other lanes have indicated ready or not. */ #else /* Word 0 - Little Endian */ uint64_t txdivrst_algn_wait : 20; /**< [ 19: 0](R/W) Maximum wait count in service clock cycles, after this lane is ready to start its divided transmit clock, for other lanes in the link to be ready to start their divided transmit clocks. This is the maximum wait time, after which the state machine will move on, whether the other lanes have indicated ready or not. */ uint64_t txdivrst_algn_wait_en : 1; /**< [ 20: 20](R/W) Enable use of [TXDIVRST_ALGN_WAIT] as a time out waiting for other lanes to be ready to start their divided transmit clocks. With this bit cleared the lane will wait indefinitely. */ uint64_t reserved_21_31 : 11; uint64_t txdivrst_algn_lane_mask : 4;/**< [ 35: 32](R/W) Selection control for which lanes in the current QLM to align in timing the deassertion of reset to this lane's transmitter's clock divider. \<0\> = Wait for lane 0. \<1\> = Wait for lane 1. \<2\> = Wait for lane 2. \<3\> = Wait for lane 3. The bit corresponding to the current Lane is ignored. */ uint64_t reserved_36_39 : 4; uint64_t txdivrst_algn_qlm_mask : 4; /**< [ 43: 40](R/W) Selection control for which QLMs in this QLM's link group to align in timing the deassertion of reset to this lane's transmitter's clock divider. \<0\> = Wait for QLM 0. \<1\> = Wait for QLM 1. \<2\> = Wait for QLM 2. \<3\> = Wait for QLM 3. The bit corresponding to the current QLM is ignored. */ uint64_t reserved_44_63 : 20; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rstclkmsk_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rstclkmsk_bcfg bdk_gsernx_lanex_rstclkmsk_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000470ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RSTCLKMSK_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) bdk_gsernx_lanex_rstclkmsk_bcfg_t #define bustype_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) "GSERNX_LANEX_RSTCLKMSK_BCFG" #define device_bar_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RSTCLKMSK_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_0_bcfg * * GSER Lane RX Base Configuration Register 0 * Register controls for postcursor overrides from c2 through c9. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_0_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t c9_ovrd_en : 1; /**< [ 62: 62](R/W) Enable use of [C9_OVRD]. */ uint64_t c9_ovrd : 6; /**< [ 61: 56](R/W) 9th postcursor override value. */ uint64_t reserved_55 : 1; uint64_t c8_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [C8_OVRD]. */ uint64_t c8_ovrd : 6; /**< [ 53: 48](R/W) 8th postcursor override value. */ uint64_t reserved_47 : 1; uint64_t c7_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C7_OVRD]. */ uint64_t c7_ovrd : 6; /**< [ 45: 40](R/W) 7th postcursor override value. */ uint64_t reserved_39 : 1; uint64_t c6_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C6_OVRD]. */ uint64_t c6_ovrd : 6; /**< [ 37: 32](R/W) 6th postcursor override value. */ uint64_t reserved_31 : 1; uint64_t c5_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C5_OVRD]. */ uint64_t c5_ovrd : 6; /**< [ 29: 24](R/W) 5th postcursor override value. */ uint64_t reserved_23 : 1; uint64_t c4_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C4_OVRD]. */ uint64_t c4_ovrd : 6; /**< [ 21: 16](R/W) 4th postcursor value override. */ uint64_t reserved_15 : 1; uint64_t c3_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C3_OVRD]. */ uint64_t c3_ovrd : 6; /**< [ 13: 8](R/W) 3rd postcursor override value. */ uint64_t reserved_7 : 1; uint64_t c2_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C2_OVRD]. */ uint64_t c2_ovrd : 6; /**< [ 5: 0](R/W) Second postcursor override value. */ #else /* Word 0 - Little Endian */ uint64_t c2_ovrd : 6; /**< [ 5: 0](R/W) Second postcursor override value. */ uint64_t c2_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C2_OVRD]. */ uint64_t reserved_7 : 1; uint64_t c3_ovrd : 6; /**< [ 13: 8](R/W) 3rd postcursor override value. */ uint64_t c3_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C3_OVRD]. */ uint64_t reserved_15 : 1; uint64_t c4_ovrd : 6; /**< [ 21: 16](R/W) 4th postcursor value override. */ uint64_t c4_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C4_OVRD]. */ uint64_t reserved_23 : 1; uint64_t c5_ovrd : 6; /**< [ 29: 24](R/W) 5th postcursor override value. */ uint64_t c5_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C5_OVRD]. */ uint64_t reserved_31 : 1; uint64_t c6_ovrd : 6; /**< [ 37: 32](R/W) 6th postcursor override value. */ uint64_t c6_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C6_OVRD]. */ uint64_t reserved_39 : 1; uint64_t c7_ovrd : 6; /**< [ 45: 40](R/W) 7th postcursor override value. */ uint64_t c7_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C7_OVRD]. */ uint64_t reserved_47 : 1; uint64_t c8_ovrd : 6; /**< [ 53: 48](R/W) 8th postcursor override value. */ uint64_t c8_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [C8_OVRD]. */ uint64_t reserved_55 : 1; uint64_t c9_ovrd : 6; /**< [ 61: 56](R/W) 9th postcursor override value. */ uint64_t c9_ovrd_en : 1; /**< [ 62: 62](R/W) Enable use of [C9_OVRD]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_0_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_0_bcfg bdk_gsernx_lanex_rx_0_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_0_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_0_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000c60ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_0_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) bdk_gsernx_lanex_rx_0_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) "GSERNX_LANEX_RX_0_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_0_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_0_bsts * * GSER Lane RX Base Status Register 0 * Status registers for postcursor values (either calibration results or * overrides) from c2 through c9. Values in this register are only valid if * GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted (indicating DFE adaptation has * completed), or if the corresponding CSR override enable is asserted. */ union bdk_gsernx_lanex_rx_0_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_0_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t c9 : 6; /**< [ 61: 56](RO/H) 9th postcursor value. */ uint64_t reserved_54_55 : 2; uint64_t c8 : 6; /**< [ 53: 48](RO/H) 8th postcursor value. */ uint64_t reserved_46_47 : 2; uint64_t c7 : 6; /**< [ 45: 40](RO/H) 7th postcursor value. */ uint64_t reserved_38_39 : 2; uint64_t c6 : 6; /**< [ 37: 32](RO/H) 6th postcursor value. */ uint64_t reserved_30_31 : 2; uint64_t c5 : 6; /**< [ 29: 24](RO/H) 5th postcursor value. */ uint64_t reserved_22_23 : 2; uint64_t c4 : 6; /**< [ 21: 16](RO/H) 4th postcursor value. */ uint64_t reserved_14_15 : 2; uint64_t c3 : 6; /**< [ 13: 8](RO/H) 3rd postcursor value. */ uint64_t reserved_6_7 : 2; uint64_t c2 : 6; /**< [ 5: 0](RO/H) 2nd postcursor value. */ #else /* Word 0 - Little Endian */ uint64_t c2 : 6; /**< [ 5: 0](RO/H) 2nd postcursor value. */ uint64_t reserved_6_7 : 2; uint64_t c3 : 6; /**< [ 13: 8](RO/H) 3rd postcursor value. */ uint64_t reserved_14_15 : 2; uint64_t c4 : 6; /**< [ 21: 16](RO/H) 4th postcursor value. */ uint64_t reserved_22_23 : 2; uint64_t c5 : 6; /**< [ 29: 24](RO/H) 5th postcursor value. */ uint64_t reserved_30_31 : 2; uint64_t c6 : 6; /**< [ 37: 32](RO/H) 6th postcursor value. */ uint64_t reserved_38_39 : 2; uint64_t c7 : 6; /**< [ 45: 40](RO/H) 7th postcursor value. */ uint64_t reserved_46_47 : 2; uint64_t c8 : 6; /**< [ 53: 48](RO/H) 8th postcursor value. */ uint64_t reserved_54_55 : 2; uint64_t c9 : 6; /**< [ 61: 56](RO/H) 9th postcursor value. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_0_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_0_bsts bdk_gsernx_lanex_rx_0_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_0_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_0_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001650ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_0_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) bdk_gsernx_lanex_rx_0_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) "GSERNX_LANEX_RX_0_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_0_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_10_bcfg * * GSER Lane RX Base Configuration Register 10 * Configuration registers for LMS adaptation. Deadband increment settings for adaptation. */ union bdk_gsernx_lanex_rx_10_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_10_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t ctlelte_deadband_inc : 12; /**< [ 59: 48](R/W) CTLELTE adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t ctlez_deadband_inc : 12; /**< [ 47: 36](R/W) CTLEZ adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t ctle_deadband_inc : 12; /**< [ 35: 24](R/W) CTLE adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t dfe_deadband_inc : 12; /**< [ 23: 12](R/W) Coeff adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t vga_deadband_inc : 12; /**< [ 11: 0](R/W) VGA adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ #else /* Word 0 - Little Endian */ uint64_t vga_deadband_inc : 12; /**< [ 11: 0](R/W) VGA adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t dfe_deadband_inc : 12; /**< [ 23: 12](R/W) Coeff adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t ctle_deadband_inc : 12; /**< [ 35: 24](R/W) CTLE adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t ctlez_deadband_inc : 12; /**< [ 47: 36](R/W) CTLEZ adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t ctlelte_deadband_inc : 12; /**< [ 59: 48](R/W) CTLELTE adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_10_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_10_bcfg bdk_gsernx_lanex_rx_10_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_10_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_10_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d00ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_10_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) bdk_gsernx_lanex_rx_10_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) "GSERNX_LANEX_RX_10_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_10_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_10_bsts * * GSER Lane RX Base Status Register 10 * Status registers for BLWC LMS adaptation. Current BLWC Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_10_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_10_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t blwc_subrate_now : 16; /**< [ 63: 48](RO/H) BLWC subrate_now counter value. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t blwc_upv_count : 16; /**< [ 43: 28](RO/H) BLWC up-vote counter value. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t blwc_adapt_status : 1; /**< [ 27: 27](RO/H) BLWC adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t blwc_adapt_count : 15; /**< [ 26: 12](RO/H) BLWC adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t blwc_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of BLWC adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ #else /* Word 0 - Little Endian */ uint64_t blwc_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of BLWC adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t blwc_adapt_count : 15; /**< [ 26: 12](RO/H) BLWC adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t blwc_adapt_status : 1; /**< [ 27: 27](RO/H) BLWC adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t blwc_upv_count : 16; /**< [ 43: 28](RO/H) BLWC up-vote counter value. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t blwc_subrate_now : 16; /**< [ 63: 48](RO/H) BLWC subrate_now counter value. Only valid when GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is clear. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_10_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_10_bsts bdk_gsernx_lanex_rx_10_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_10_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_10_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_10_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) bdk_gsernx_lanex_rx_10_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) "GSERNX_LANEX_RX_10_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_10_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_11_bcfg * * GSER Lane RX Base Configuration Register 11 * Configuration registers for Offset Compensation. */ union bdk_gsernx_lanex_rx_11_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_11_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_16_63 : 48; uint64_t afe_oscomp_delay : 8; /**< [ 15: 8](R/W) Start delay for the AFE offset compensation, after DFE offset compensation completes. */ uint64_t dfe_oscomp_delay : 8; /**< [ 7: 0](R/W) Start delay for the DFE offset compensation. */ #else /* Word 0 - Little Endian */ uint64_t dfe_oscomp_delay : 8; /**< [ 7: 0](R/W) Start delay for the DFE offset compensation. */ uint64_t afe_oscomp_delay : 8; /**< [ 15: 8](R/W) Start delay for the AFE offset compensation, after DFE offset compensation completes. */ uint64_t reserved_16_63 : 48; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_11_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_11_bcfg bdk_gsernx_lanex_rx_11_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_11_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_11_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_11_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) bdk_gsernx_lanex_rx_11_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) "GSERNX_LANEX_RX_11_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_11_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_11_bsts * * GSER Lane RX Base Status Register 11 * Status registers for PREVGA_GN LMS adaptation. Current PREVGA_GN Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_11_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_11_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t prevga_gn_subrate_now : 16; /**< [ 63: 48](RO/H) PREVGA_GN subrate_now counter value. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t prevga_gn_upv_count : 16; /**< [ 43: 28](RO/H) PREVGA_GN up-vote counter value. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t prevga_gn_adapt_status : 1; /**< [ 27: 27](RO/H) PREVGA_GN adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t prevga_gn_adapt_count : 15; /**< [ 26: 12](RO/H) PREVGA_GN adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t prevga_gn_deadband_now : 12;/**< [ 11: 0](RO/H) Current 12-bit integer value of PREVGA_GN adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ #else /* Word 0 - Little Endian */ uint64_t prevga_gn_deadband_now : 12;/**< [ 11: 0](RO/H) Current 12-bit integer value of PREVGA_GN adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t prevga_gn_adapt_count : 15; /**< [ 26: 12](RO/H) PREVGA_GN adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t prevga_gn_adapt_status : 1; /**< [ 27: 27](RO/H) PREVGA_GN adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t prevga_gn_upv_count : 16; /**< [ 43: 28](RO/H) PREVGA_GN up-vote counter value. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t prevga_gn_subrate_now : 16; /**< [ 63: 48](RO/H) PREVGA_GN subrate_now counter value. Only valid when GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is clear. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_11_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_11_bsts bdk_gsernx_lanex_rx_11_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_11_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_11_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001700ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_11_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) bdk_gsernx_lanex_rx_11_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) "GSERNX_LANEX_RX_11_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_11_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_12_bcfg * * GSER Lane RX Base Configuration Register 12 * Configuration registers for AFE Offset Adaptation. */ union bdk_gsernx_lanex_rx_12_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_12_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t afeos_leak_sgn : 1; /**< [ 51: 51](R/W) AFEOS leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t afeos_deadband : 12; /**< [ 50: 39](R/W) AFE OS adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t afeos_deadband_inc : 12; /**< [ 38: 27](R/W) AFE OS adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t afeos_leak : 3; /**< [ 26: 24](R/W) AFEOS adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t reserved_19_23 : 5; uint64_t afeos_mu : 3; /**< [ 18: 16](R/W) AFEOS adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_15 : 1; uint64_t afeos_timer_max : 15; /**< [ 14: 0](R/W) AFEOS adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ #else /* Word 0 - Little Endian */ uint64_t afeos_timer_max : 15; /**< [ 14: 0](R/W) AFEOS adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t reserved_15 : 1; uint64_t afeos_mu : 3; /**< [ 18: 16](R/W) AFEOS adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_19_23 : 5; uint64_t afeos_leak : 3; /**< [ 26: 24](R/W) AFEOS adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t afeos_deadband_inc : 12; /**< [ 38: 27](R/W) AFE OS adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t afeos_deadband : 12; /**< [ 50: 39](R/W) AFE OS adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t afeos_leak_sgn : 1; /**< [ 51: 51](R/W) AFEOS leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_12_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_12_bcfg bdk_gsernx_lanex_rx_12_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_12_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_12_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d20ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_12_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) bdk_gsernx_lanex_rx_12_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) "GSERNX_LANEX_RX_12_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_12_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_13_bcfg * * GSER Lane RX Base Configuration Register 13 * Configuration registers for AFE LMS adaptation * Adaptation controls for Subrate parameters. */ union bdk_gsernx_lanex_rx_13_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_13_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t afeos_subrate_scale : 3; /**< [ 34: 32](R/W) AFE subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t afeos_subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t afeos_subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t afeos_subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t afeos_subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t afeos_subrate_scale : 3; /**< [ 34: 32](R/W) AFE subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_13_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_13_bcfg bdk_gsernx_lanex_rx_13_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_13_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_13_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_13_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) bdk_gsernx_lanex_rx_13_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) "GSERNX_LANEX_RX_13_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_13_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_14_bcfg * * GSER Lane RX Base Configuration Register 14 * This register configures LMS adaptation. */ union bdk_gsernx_lanex_rx_14_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_14_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_44_63 : 20; uint64_t c6_c15_limit_hi : 6; /**< [ 43: 38](R/W) C6 to C15 postcursor limit high. */ uint64_t c6_c15_limit_lo : 6; /**< [ 37: 32](R/W) C6 to C15 postcursor limit low. */ uint64_t reserved_24_31 : 8; uint64_t dfe_c1_deadband : 12; /**< [ 23: 12](R/W) DFE C1 adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t dfe_c1_deadband_inc : 12; /**< [ 11: 0](R/W) DFE C1 adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ #else /* Word 0 - Little Endian */ uint64_t dfe_c1_deadband_inc : 12; /**< [ 11: 0](R/W) DFE C1 adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t dfe_c1_deadband : 12; /**< [ 23: 12](R/W) DFE C1 adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_24_31 : 8; uint64_t c6_c15_limit_lo : 6; /**< [ 37: 32](R/W) C6 to C15 postcursor limit low. */ uint64_t c6_c15_limit_hi : 6; /**< [ 43: 38](R/W) C6 to C15 postcursor limit high. */ uint64_t reserved_44_63 : 20; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_14_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_14_bcfg bdk_gsernx_lanex_rx_14_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_14_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_14_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d40ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_14_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) bdk_gsernx_lanex_rx_14_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) "GSERNX_LANEX_RX_14_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_14_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_15_bcfg * * GSER Lane RX Base Configuration Register 15 * This register configures LMS adaptation. */ union bdk_gsernx_lanex_rx_15_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_15_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t reserved_30_31 : 2; uint64_t c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ #else /* Word 0 - Little Endian */ uint64_t c1_limit_lo : 6; /**< [ 5: 0](R/W) C1 postcursor limit low. */ uint64_t c2_limit_lo : 6; /**< [ 11: 6](R/W) C2 postcursor limit low. */ uint64_t c3_limit_lo : 6; /**< [ 17: 12](R/W) C3 postcursor limit low. */ uint64_t c4_limit_lo : 6; /**< [ 23: 18](R/W) C4 postcursor limit low. */ uint64_t c5_limit_lo : 6; /**< [ 29: 24](R/W) C5 postcursor limit low. */ uint64_t reserved_30_31 : 2; uint64_t c1_limit_hi : 6; /**< [ 37: 32](R/W) C1 postcursor limit high. */ uint64_t c2_limit_hi : 6; /**< [ 43: 38](R/W) C2 postcursor limit high. */ uint64_t c3_limit_hi : 6; /**< [ 49: 44](R/W) C3 postcursor limit high. */ uint64_t c4_limit_hi : 6; /**< [ 55: 50](R/W) C4 postcursor limit high. */ uint64_t c5_limit_hi : 6; /**< [ 61: 56](R/W) C5 postcursor limit high. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_15_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_15_bcfg bdk_gsernx_lanex_rx_15_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_15_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_15_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d50ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_15_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) bdk_gsernx_lanex_rx_15_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) "GSERNX_LANEX_RX_15_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_15_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_16_bcfg * * GSER Lane RX Base Configuration Register 16 * Override registers for LMS adaptation. Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_16_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_16_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t ctlez_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [CTLEZ_DEADBAND_NOW_OVRD]. */ uint64_t ctlez_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) CTLEZ adaptation deadband now override. */ uint64_t ctle_deadband_now_ovrd_en : 1;/**< [ 38: 38](R/W) Enable use of [CTLE_DEADBAND_NOW_OVRD]. */ uint64_t ctle_deadband_now_ovrd : 12;/**< [ 37: 26](R/W) CTLE adaptation deadband now override. */ uint64_t dfe_deadband_now_ovrd_en : 1;/**< [ 25: 25](R/W) Enable use of [DFE_DEADBAND_NOW_OVRD]. */ uint64_t dfe_deadband_now_ovrd : 12; /**< [ 24: 13](R/W) Coeff Adaptation deadband now override. */ uint64_t vga_deadband_now_ovrd_en : 1;/**< [ 12: 12](R/W) Enable use of [VGA_DEADBAND_NOW_OVRD]. */ uint64_t vga_deadband_now_ovrd : 12; /**< [ 11: 0](R/W) VGA adaptation deadband now override. */ #else /* Word 0 - Little Endian */ uint64_t vga_deadband_now_ovrd : 12; /**< [ 11: 0](R/W) VGA adaptation deadband now override. */ uint64_t vga_deadband_now_ovrd_en : 1;/**< [ 12: 12](R/W) Enable use of [VGA_DEADBAND_NOW_OVRD]. */ uint64_t dfe_deadband_now_ovrd : 12; /**< [ 24: 13](R/W) Coeff Adaptation deadband now override. */ uint64_t dfe_deadband_now_ovrd_en : 1;/**< [ 25: 25](R/W) Enable use of [DFE_DEADBAND_NOW_OVRD]. */ uint64_t ctle_deadband_now_ovrd : 12;/**< [ 37: 26](R/W) CTLE adaptation deadband now override. */ uint64_t ctle_deadband_now_ovrd_en : 1;/**< [ 38: 38](R/W) Enable use of [CTLE_DEADBAND_NOW_OVRD]. */ uint64_t ctlez_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) CTLEZ adaptation deadband now override. */ uint64_t ctlez_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [CTLEZ_DEADBAND_NOW_OVRD]. */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_16_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_16_bcfg bdk_gsernx_lanex_rx_16_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_16_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_16_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d60ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_16_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) bdk_gsernx_lanex_rx_16_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) "GSERNX_LANEX_RX_16_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_16_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_17_bcfg * * GSER Lane RX Base Configuration Register 17 * Override registers for LMS adaptation. Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_17_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_17_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t blwc_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [BLWC_DEADBAND_NOW_OVRD]. */ uint64_t blwc_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) BLWC adaptation deadband now override. */ uint64_t dfe_c1_deadband_now_ovrd_en : 1;/**< [ 38: 38](R/W) Enable use of [DFE_C1_DEADBAND_NOW_OVRD]. */ uint64_t dfe_c1_deadband_now_ovrd : 12;/**< [ 37: 26](R/W) DFE C1 Adaptation deadband now override. */ uint64_t afeos_deadband_now_ovrd_en : 1;/**< [ 25: 25](R/W) Enable use of [AFEOS_DEADBAND_NOW_OVRD]. */ uint64_t afeos_deadband_now_ovrd : 12;/**< [ 24: 13](R/W) AFE OS adaptation deadband now override. */ uint64_t ctlelte_deadband_now_ovrd_en : 1;/**< [ 12: 12](R/W) Enable use of [CTLELTE_DEADBAND_NOW_OVRD]. */ uint64_t ctlelte_deadband_now_ovrd : 12;/**< [ 11: 0](R/W) CTLELTE adaptation deadband now override. */ #else /* Word 0 - Little Endian */ uint64_t ctlelte_deadband_now_ovrd : 12;/**< [ 11: 0](R/W) CTLELTE adaptation deadband now override. */ uint64_t ctlelte_deadband_now_ovrd_en : 1;/**< [ 12: 12](R/W) Enable use of [CTLELTE_DEADBAND_NOW_OVRD]. */ uint64_t afeos_deadband_now_ovrd : 12;/**< [ 24: 13](R/W) AFE OS adaptation deadband now override. */ uint64_t afeos_deadband_now_ovrd_en : 1;/**< [ 25: 25](R/W) Enable use of [AFEOS_DEADBAND_NOW_OVRD]. */ uint64_t dfe_c1_deadband_now_ovrd : 12;/**< [ 37: 26](R/W) DFE C1 Adaptation deadband now override. */ uint64_t dfe_c1_deadband_now_ovrd_en : 1;/**< [ 38: 38](R/W) Enable use of [DFE_C1_DEADBAND_NOW_OVRD]. */ uint64_t blwc_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) BLWC adaptation deadband now override. */ uint64_t blwc_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [BLWC_DEADBAND_NOW_OVRD]. */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_17_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_17_bcfg bdk_gsernx_lanex_rx_17_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_17_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_17_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d70ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_17_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) bdk_gsernx_lanex_rx_17_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) "GSERNX_LANEX_RX_17_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_17_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_18_bcfg * * GSER Lane RX Base Configuration Register 18 * Override registers for LMS adaptation. Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_18_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_18_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_51_63 : 13; uint64_t blwc_subrate_now_ovrd_en : 1;/**< [ 50: 50](R/W) Enable use of [BLWC_SUBRATE_NOW_OVRD]. */ uint64_t afeos_subrate_now_ovrd_en : 1;/**< [ 49: 49](R/W) Enable use of [AFEOS_SUBRATE_NOW_OVRD]. */ uint64_t subrate_now_ovrd_en : 1; /**< [ 48: 48](R/W) Enable use of [SUBRATE_NOW_OVRD]. */ uint64_t blwc_subrate_now_ovrd : 16; /**< [ 47: 32](R/W) BLWC Subrate_Now counter override value. */ uint64_t afeos_subrate_now_ovrd : 16;/**< [ 31: 16](R/W) AFEOS Subrate_Now counter override value. */ uint64_t subrate_now_ovrd : 16; /**< [ 15: 0](R/W) Subrate_Now counter override value. */ #else /* Word 0 - Little Endian */ uint64_t subrate_now_ovrd : 16; /**< [ 15: 0](R/W) Subrate_Now counter override value. */ uint64_t afeos_subrate_now_ovrd : 16;/**< [ 31: 16](R/W) AFEOS Subrate_Now counter override value. */ uint64_t blwc_subrate_now_ovrd : 16; /**< [ 47: 32](R/W) BLWC Subrate_Now counter override value. */ uint64_t subrate_now_ovrd_en : 1; /**< [ 48: 48](R/W) Enable use of [SUBRATE_NOW_OVRD]. */ uint64_t afeos_subrate_now_ovrd_en : 1;/**< [ 49: 49](R/W) Enable use of [AFEOS_SUBRATE_NOW_OVRD]. */ uint64_t blwc_subrate_now_ovrd_en : 1;/**< [ 50: 50](R/W) Enable use of [BLWC_SUBRATE_NOW_OVRD]. */ uint64_t reserved_51_63 : 13; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_18_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_18_bcfg bdk_gsernx_lanex_rx_18_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_18_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_18_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d80ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_18_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) bdk_gsernx_lanex_rx_18_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) "GSERNX_LANEX_RX_18_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_18_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_19_bcfg * * GSER Lane RX Base Configuration Register 19 * Configuration registers for AFE Offset Adaptation. */ union bdk_gsernx_lanex_rx_19_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_19_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t blwc_leak_sgn : 1; /**< [ 56: 56](R/W) BLWC leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t blwc_updn_len : 5; /**< [ 55: 51](R/W) Accumulation length for BLWC drift up/down control. Range is 1 to 20. */ uint64_t blwc_deadband : 12; /**< [ 50: 39](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t blwc_deadband_inc : 12; /**< [ 38: 27](R/W) BLWC adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t blwc_leak : 3; /**< [ 26: 24](R/W) BLWC adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t reserved_19_23 : 5; uint64_t blwc_mu : 3; /**< [ 18: 16](R/W) BLWC adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_15 : 1; uint64_t blwc_timer_max : 15; /**< [ 14: 0](R/W) BLWC adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ #else /* Word 0 - Little Endian */ uint64_t blwc_timer_max : 15; /**< [ 14: 0](R/W) BLWC adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t reserved_15 : 1; uint64_t blwc_mu : 3; /**< [ 18: 16](R/W) BLWC adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_19_23 : 5; uint64_t blwc_leak : 3; /**< [ 26: 24](R/W) BLWC adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t blwc_deadband_inc : 12; /**< [ 38: 27](R/W) BLWC adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t blwc_deadband : 12; /**< [ 50: 39](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t blwc_updn_len : 5; /**< [ 55: 51](R/W) Accumulation length for BLWC drift up/down control. Range is 1 to 20. */ uint64_t blwc_leak_sgn : 1; /**< [ 56: 56](R/W) BLWC leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_19_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_19_bcfg bdk_gsernx_lanex_rx_19_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_19_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_19_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000d90ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_19_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) bdk_gsernx_lanex_rx_19_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) "GSERNX_LANEX_RX_19_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_19_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_1_bcfg * * GSER Lane RX Base Configuration Register 1 * Register controls for postcursor overrides from c10 through c15, and BLWC gain. * Each override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t prevga_gn_ovrd_en : 1; /**< [ 56: 56](R/W) Enable use of [PREVGA_GN_OVRD]. */ uint64_t prevga_gn_ovrd : 3; /**< [ 55: 53](R/W) PREVGA_GN gain value override. */ uint64_t blwc_ovrd_en : 1; /**< [ 52: 52](R/W) Enable use of [BLWC_OVRD]. */ uint64_t blwc_ovrd : 5; /**< [ 51: 47](R/W) BLWC gain value override. */ uint64_t c15_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C15_OVRD]. */ uint64_t c15_ovrd : 6; /**< [ 45: 40](R/W) 15th postcursor value override. */ uint64_t reserved_39 : 1; uint64_t c14_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C14_OVRD]. */ uint64_t c14_ovrd : 6; /**< [ 37: 32](R/W) 14th postcursor value override. */ uint64_t reserved_31 : 1; uint64_t c13_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C13_OVRD]. */ uint64_t c13_ovrd : 6; /**< [ 29: 24](R/W) 13th postcursor value override. */ uint64_t reserved_23 : 1; uint64_t c12_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C12_OVRD]. */ uint64_t c12_ovrd : 6; /**< [ 21: 16](R/W) 12th postcursor value override. */ uint64_t reserved_15 : 1; uint64_t c11_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C11_OVRD]. */ uint64_t c11_ovrd : 6; /**< [ 13: 8](R/W) 11th postcursor value override. */ uint64_t reserved_7 : 1; uint64_t c10_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C10_OVRD]. */ uint64_t c10_ovrd : 6; /**< [ 5: 0](R/W) 10th postcursor value override. */ #else /* Word 0 - Little Endian */ uint64_t c10_ovrd : 6; /**< [ 5: 0](R/W) 10th postcursor value override. */ uint64_t c10_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C10_OVRD]. */ uint64_t reserved_7 : 1; uint64_t c11_ovrd : 6; /**< [ 13: 8](R/W) 11th postcursor value override. */ uint64_t c11_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C11_OVRD]. */ uint64_t reserved_15 : 1; uint64_t c12_ovrd : 6; /**< [ 21: 16](R/W) 12th postcursor value override. */ uint64_t c12_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C12_OVRD]. */ uint64_t reserved_23 : 1; uint64_t c13_ovrd : 6; /**< [ 29: 24](R/W) 13th postcursor value override. */ uint64_t c13_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C13_OVRD]. */ uint64_t reserved_31 : 1; uint64_t c14_ovrd : 6; /**< [ 37: 32](R/W) 14th postcursor value override. */ uint64_t c14_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C14_OVRD]. */ uint64_t reserved_39 : 1; uint64_t c15_ovrd : 6; /**< [ 45: 40](R/W) 15th postcursor value override. */ uint64_t c15_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C15_OVRD]. */ uint64_t blwc_ovrd : 5; /**< [ 51: 47](R/W) BLWC gain value override. */ uint64_t blwc_ovrd_en : 1; /**< [ 52: 52](R/W) Enable use of [BLWC_OVRD]. */ uint64_t prevga_gn_ovrd : 3; /**< [ 55: 53](R/W) PREVGA_GN gain value override. */ uint64_t prevga_gn_ovrd_en : 1; /**< [ 56: 56](R/W) Enable use of [PREVGA_GN_OVRD]. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_1_bcfg bdk_gsernx_lanex_rx_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000c70ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) bdk_gsernx_lanex_rx_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) "GSERNX_LANEX_RX_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_1_bsts * * GSER Lane RX Base Status Register 1 * Status registers for postcursor values (either calibration results or * overrides) from c10 through c15. Values in this register are only valid * if GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted (indicating DFE adaptation * has completed), or if the corresponding CSR override enable is asserted. */ union bdk_gsernx_lanex_rx_1_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_1_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_46_63 : 18; uint64_t c15 : 6; /**< [ 45: 40](RO/H) 15th postcursor value. */ uint64_t reserved_38_39 : 2; uint64_t c14 : 6; /**< [ 37: 32](RO/H) 14th postcursor value. */ uint64_t reserved_30_31 : 2; uint64_t c13 : 6; /**< [ 29: 24](RO/H) 13th postcursor value. */ uint64_t reserved_22_23 : 2; uint64_t c12 : 6; /**< [ 21: 16](RO/H) 12th postcursor value. */ uint64_t reserved_14_15 : 2; uint64_t c11 : 6; /**< [ 13: 8](RO/H) 11th postcursor value. */ uint64_t reserved_6_7 : 2; uint64_t c10 : 6; /**< [ 5: 0](RO/H) 10th postcursor value. */ #else /* Word 0 - Little Endian */ uint64_t c10 : 6; /**< [ 5: 0](RO/H) 10th postcursor value. */ uint64_t reserved_6_7 : 2; uint64_t c11 : 6; /**< [ 13: 8](RO/H) 11th postcursor value. */ uint64_t reserved_14_15 : 2; uint64_t c12 : 6; /**< [ 21: 16](RO/H) 12th postcursor value. */ uint64_t reserved_22_23 : 2; uint64_t c13 : 6; /**< [ 29: 24](RO/H) 13th postcursor value. */ uint64_t reserved_30_31 : 2; uint64_t c14 : 6; /**< [ 37: 32](RO/H) 14th postcursor value. */ uint64_t reserved_38_39 : 2; uint64_t c15 : 6; /**< [ 45: 40](RO/H) 15th postcursor value. */ uint64_t reserved_46_63 : 18; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_1_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_1_bsts bdk_gsernx_lanex_rx_1_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_1_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_1_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001660ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_1_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) bdk_gsernx_lanex_rx_1_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) "GSERNX_LANEX_RX_1_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_1_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_20_bcfg * * GSER Lane RX Base Configuration Register 20 * Configuration registers for BLWC LMS adaptation * Adaptation controls for Subrate parameters. */ union bdk_gsernx_lanex_rx_20_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_20_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_35_63 : 29; uint64_t blwc_subrate_scale : 3; /**< [ 34: 32](R/W) BLWC subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t blwc_subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t blwc_subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ #else /* Word 0 - Little Endian */ uint64_t blwc_subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ uint64_t blwc_subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t blwc_subrate_scale : 3; /**< [ 34: 32](R/W) BLWC subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t reserved_35_63 : 29; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_20_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_20_bcfg bdk_gsernx_lanex_rx_20_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_20_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_20_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000da0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_20_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) bdk_gsernx_lanex_rx_20_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) "GSERNX_LANEX_RX_20_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_20_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_21_bcfg * * GSER Lane RX Base Configuration Register 20 * Configuration registers for PREVGA_GN LMS adaptation * Adaptation controls for Subrate parameters. */ union bdk_gsernx_lanex_rx_21_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_21_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t prevga_gn_subrate_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [PREVGA_GN_SUBRATE_NOW_OVRD]. */ uint64_t prevga_gn_subrate_now_ovrd : 16;/**< [ 50: 35](R/W) PREVGA_GN Subrate_Now counter override value. */ uint64_t prevga_gn_subrate_scale : 3;/**< [ 34: 32](R/W) PREVGA_GN subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t prevga_gn_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t prevga_gn_subrate_fin : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. Subrate counter final value. */ #else /* Word 0 - Little Endian */ uint64_t prevga_gn_subrate_fin : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. Subrate counter final value. */ uint64_t prevga_gn_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t prevga_gn_subrate_scale : 3;/**< [ 34: 32](R/W) PREVGA_GN subrate now counter scaling value for comparison against the up vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t prevga_gn_subrate_now_ovrd : 16;/**< [ 50: 35](R/W) PREVGA_GN Subrate_Now counter override value. */ uint64_t prevga_gn_subrate_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [PREVGA_GN_SUBRATE_NOW_OVRD]. */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_21_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_21_bcfg bdk_gsernx_lanex_rx_21_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_21_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_21_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000db0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_21_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) bdk_gsernx_lanex_rx_21_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) "GSERNX_LANEX_RX_21_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_21_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_22_bcfg * * GSER Lane RX Base Configuration Register 22 * Override registers for LMS adaptation. Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_22_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_22_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t prevga_gn_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [PREVGA_GN_DEADBAND_NOW_OVRD]. */ uint64_t prevga_gn_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) PREVGA_GN adaptation deadband now override. */ uint64_t reserved_0_38 : 39; #else /* Word 0 - Little Endian */ uint64_t reserved_0_38 : 39; uint64_t prevga_gn_deadband_now_ovrd : 12;/**< [ 50: 39](R/W) PREVGA_GN adaptation deadband now override. */ uint64_t prevga_gn_deadband_now_ovrd_en : 1;/**< [ 51: 51](R/W) Enable use of [PREVGA_GN_DEADBAND_NOW_OVRD]. */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_22_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_22_bcfg bdk_gsernx_lanex_rx_22_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_22_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_22_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000dc0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_22_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) bdk_gsernx_lanex_rx_22_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) "GSERNX_LANEX_RX_22_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_22_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_23_bcfg * * GSER Lane RX Base Configuration Register 23 * Configuration registers for PREVGA_GN gain adaptation. */ union bdk_gsernx_lanex_rx_23_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_23_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_52_63 : 12; uint64_t prevga_gn_leak_sgn : 1; /**< [ 51: 51](R/W) PREVGA_GN leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t prevga_gn_deadband : 12; /**< [ 50: 39](R/W) PREVGA_GN adaptation deadband settings. Typically a value less than 0x0FF is used. */ uint64_t prevga_gn_deadband_inc : 12;/**< [ 38: 27](R/W) PREVGA_GN adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t prevga_gn_leak : 3; /**< [ 26: 24](R/W) PREVGA_GN adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t reserved_19_23 : 5; uint64_t prevga_gn_mu : 3; /**< [ 18: 16](R/W) PREVGA_GN adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_15 : 1; uint64_t prevga_gn_timer_max : 15; /**< [ 14: 0](R/W) PREVGA_GN adaptation timer maximum count value. */ #else /* Word 0 - Little Endian */ uint64_t prevga_gn_timer_max : 15; /**< [ 14: 0](R/W) PREVGA_GN adaptation timer maximum count value. */ uint64_t reserved_15 : 1; uint64_t prevga_gn_mu : 3; /**< [ 18: 16](R/W) PREVGA_GN adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t reserved_19_23 : 5; uint64_t prevga_gn_leak : 3; /**< [ 26: 24](R/W) PREVGA_GN adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t prevga_gn_deadband_inc : 12;/**< [ 38: 27](R/W) PREVGA_GN adaptation deadband increment setting. 12-bit field with 4 integer bits and 8 fraction bits (unsigned). */ uint64_t prevga_gn_deadband : 12; /**< [ 50: 39](R/W) PREVGA_GN adaptation deadband settings. Typically a value less than 0x0FF is used. */ uint64_t prevga_gn_leak_sgn : 1; /**< [ 51: 51](R/W) PREVGA_GN leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t reserved_52_63 : 12; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_23_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_23_bcfg bdk_gsernx_lanex_rx_23_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_23_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_23_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000dd0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_23_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) bdk_gsernx_lanex_rx_23_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) "GSERNX_LANEX_RX_23_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_23_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_24_bcfg * * GSER Lane RX Base Configuration Register 24 * Configuration registers for DFE offset compensation timer. */ union bdk_gsernx_lanex_rx_24_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_24_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t dfe_oscomp_timer_en : 1; /**< [ 63: 63](R/W) Enable for DFE offset compensation timer. When set, allows DFE offset compensation timer to trigger DFE offset compensation upon timer expiration. */ uint64_t reserved_32_62 : 31; uint64_t dfe_oscomp_timer_max : 32; /**< [ 31: 0](R/W) Maximum value of the DFE offset compensation Timer. When the timer reaches the value set by this field, the DFE offset compensation process is triggered. Also, when the timer reaches this value, the timer is reset to zero and allowed to begin counting again. */ #else /* Word 0 - Little Endian */ uint64_t dfe_oscomp_timer_max : 32; /**< [ 31: 0](R/W) Maximum value of the DFE offset compensation Timer. When the timer reaches the value set by this field, the DFE offset compensation process is triggered. Also, when the timer reaches this value, the timer is reset to zero and allowed to begin counting again. */ uint64_t reserved_32_62 : 31; uint64_t dfe_oscomp_timer_en : 1; /**< [ 63: 63](R/W) Enable for DFE offset compensation timer. When set, allows DFE offset compensation timer to trigger DFE offset compensation upon timer expiration. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_24_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_24_bcfg bdk_gsernx_lanex_rx_24_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_24_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_24_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000de0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_24_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) bdk_gsernx_lanex_rx_24_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) "GSERNX_LANEX_RX_24_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_24_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_2_bcfg * * GSER Lane RX Base Configuration Register 2 * Register controls for first postcursor overrides of even/odd paths. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t c1_1e_ovrd_en : 1; /**< [ 62: 62](R/W) Enable use of [C1_1E_OVRD]. */ uint64_t c1_1e_ovrd : 6; /**< [ 61: 56](R/W) First postcursor value on odd E path override. */ uint64_t reserved_55 : 1; uint64_t c1_0e_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [C1_0E_OVRD]. */ uint64_t c1_0e_ovrd : 6; /**< [ 53: 48](R/W) First postcursor value on even E path override. */ uint64_t reserved_47 : 1; uint64_t c1_1x_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C1_1X_OVRD]. */ uint64_t c1_1x_ovrd : 6; /**< [ 45: 40](R/W) First postcursor value on odd X path override. */ uint64_t reserved_39 : 1; uint64_t c1_0x_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C1_0X_OVRD]. */ uint64_t c1_0x_ovrd : 6; /**< [ 37: 32](R/W) First postcursor value on even X path override. */ uint64_t reserved_31 : 1; uint64_t c1_1i_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C1_1I_OVRD]. */ uint64_t c1_1i_ovrd : 6; /**< [ 29: 24](R/W) First postcursor value on odd I path override. */ uint64_t reserved_23 : 1; uint64_t c1_0i_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C1_0I_OVRD]. */ uint64_t c1_0i_ovrd : 6; /**< [ 21: 16](R/W) First postcursor value on even I path override. */ uint64_t reserved_15 : 1; uint64_t c1_1q_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C1_1Q_OVRD]. */ uint64_t c1_1q_ovrd : 6; /**< [ 13: 8](R/W) First postcursor value on odd Q path override. */ uint64_t reserved_7 : 1; uint64_t c1_0q_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C1_0Q_OVRD]. */ uint64_t c1_0q_ovrd : 6; /**< [ 5: 0](R/W) First postcursor value on even Q path override. */ #else /* Word 0 - Little Endian */ uint64_t c1_0q_ovrd : 6; /**< [ 5: 0](R/W) First postcursor value on even Q path override. */ uint64_t c1_0q_ovrd_en : 1; /**< [ 6: 6](R/W) Enable use of [C1_0Q_OVRD]. */ uint64_t reserved_7 : 1; uint64_t c1_1q_ovrd : 6; /**< [ 13: 8](R/W) First postcursor value on odd Q path override. */ uint64_t c1_1q_ovrd_en : 1; /**< [ 14: 14](R/W) Enable use of [C1_1Q_OVRD]. */ uint64_t reserved_15 : 1; uint64_t c1_0i_ovrd : 6; /**< [ 21: 16](R/W) First postcursor value on even I path override. */ uint64_t c1_0i_ovrd_en : 1; /**< [ 22: 22](R/W) Enable use of [C1_0I_OVRD]. */ uint64_t reserved_23 : 1; uint64_t c1_1i_ovrd : 6; /**< [ 29: 24](R/W) First postcursor value on odd I path override. */ uint64_t c1_1i_ovrd_en : 1; /**< [ 30: 30](R/W) Enable use of [C1_1I_OVRD]. */ uint64_t reserved_31 : 1; uint64_t c1_0x_ovrd : 6; /**< [ 37: 32](R/W) First postcursor value on even X path override. */ uint64_t c1_0x_ovrd_en : 1; /**< [ 38: 38](R/W) Enable use of [C1_0X_OVRD]. */ uint64_t reserved_39 : 1; uint64_t c1_1x_ovrd : 6; /**< [ 45: 40](R/W) First postcursor value on odd X path override. */ uint64_t c1_1x_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [C1_1X_OVRD]. */ uint64_t reserved_47 : 1; uint64_t c1_0e_ovrd : 6; /**< [ 53: 48](R/W) First postcursor value on even E path override. */ uint64_t c1_0e_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [C1_0E_OVRD]. */ uint64_t reserved_55 : 1; uint64_t c1_1e_ovrd : 6; /**< [ 61: 56](R/W) First postcursor value on odd E path override. */ uint64_t c1_1e_ovrd_en : 1; /**< [ 62: 62](R/W) Enable use of [C1_1E_OVRD]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_2_bcfg bdk_gsernx_lanex_rx_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000c80ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) bdk_gsernx_lanex_rx_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) "GSERNX_LANEX_RX_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_2_bsts * * GSER Lane RX Base Status Register 2 * Status registers for first postcursor values (either calibration * results or overrides) of even/odd paths. Values in this register are * only valid if GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted (indicating DFE * adaptation has completed), or if the corresponding CSR override enable * is asserted. */ union bdk_gsernx_lanex_rx_2_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_2_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t c1_1e : 6; /**< [ 61: 56](RO/H) First postcursor value on odd E path. */ uint64_t reserved_54_55 : 2; uint64_t c1_0e : 6; /**< [ 53: 48](RO/H) First postcursor value on even E path. */ uint64_t reserved_46_47 : 2; uint64_t c1_1x : 6; /**< [ 45: 40](RO/H) First postcursor value on odd X path. */ uint64_t reserved_38_39 : 2; uint64_t c1_0x : 6; /**< [ 37: 32](RO/H) First postcursor value on even X path. */ uint64_t reserved_30_31 : 2; uint64_t c1_1i : 6; /**< [ 29: 24](RO/H) First postcursor value on odd I path. */ uint64_t reserved_22_23 : 2; uint64_t c1_0i : 6; /**< [ 21: 16](RO/H) First postcursor value on even I path. */ uint64_t reserved_14_15 : 2; uint64_t c1_1q : 6; /**< [ 13: 8](RO/H) First postcursor value on odd Q path. */ uint64_t reserved_6_7 : 2; uint64_t c1_0q : 6; /**< [ 5: 0](RO/H) First postcursor value on even Q path. */ #else /* Word 0 - Little Endian */ uint64_t c1_0q : 6; /**< [ 5: 0](RO/H) First postcursor value on even Q path. */ uint64_t reserved_6_7 : 2; uint64_t c1_1q : 6; /**< [ 13: 8](RO/H) First postcursor value on odd Q path. */ uint64_t reserved_14_15 : 2; uint64_t c1_0i : 6; /**< [ 21: 16](RO/H) First postcursor value on even I path. */ uint64_t reserved_22_23 : 2; uint64_t c1_1i : 6; /**< [ 29: 24](RO/H) First postcursor value on odd I path. */ uint64_t reserved_30_31 : 2; uint64_t c1_0x : 6; /**< [ 37: 32](RO/H) First postcursor value on even X path. */ uint64_t reserved_38_39 : 2; uint64_t c1_1x : 6; /**< [ 45: 40](RO/H) First postcursor value on odd X path. */ uint64_t reserved_46_47 : 2; uint64_t c1_0e : 6; /**< [ 53: 48](RO/H) First postcursor value on even E path. */ uint64_t reserved_54_55 : 2; uint64_t c1_1e : 6; /**< [ 61: 56](RO/H) First postcursor value on odd E path. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_2_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_2_bsts bdk_gsernx_lanex_rx_2_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_2_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_2_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001670ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_2_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) bdk_gsernx_lanex_rx_2_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) "GSERNX_LANEX_RX_2_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_2_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_3_bcfg * * GSER Lane RX Base Configuration Register 3 * Register controls for calibration muxes and switch enable overrides. * Some bit is this register are override controls (*_OVRD). Each * override setting has a corresponding enable which will cause the * calibration logic to use the override register setting instead of the * calibration result. */ union bdk_gsernx_lanex_rx_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t cali1_odd_ovrd_en : 1; /**< [ 59: 59](R/W) Enable use of [CALI1_ODD_OVRD]. */ uint64_t cali1_even_ovrd_en : 1; /**< [ 58: 58](R/W) Enable use of [CALI1_EVEN_OVRD]. */ uint64_t cali0_odd_ovrd_en : 1; /**< [ 57: 57](R/W) Enable use of [CALI0_ODD_OVRD]. */ uint64_t cali0_even_ovrd_en : 1; /**< [ 56: 56](R/W) Enable use of [CALI0_EVEN_OVRD]. */ uint64_t cali1_odd_ovrd : 8; /**< [ 55: 48](R/W) Input calibration switch enable for speculation path 1 in odd paths override. */ uint64_t cali1_even_ovrd : 8; /**< [ 47: 40](R/W) Input calibration switch enable for speculation path 1 in even paths override. */ uint64_t cali0_odd_ovrd : 8; /**< [ 39: 32](R/W) Input calibration switch enable for speculation path 0 in odd paths override. */ uint64_t cali0_even_ovrd : 8; /**< [ 31: 24](R/W) Input calibration switch enable for speculation path 0 in even paths override. */ uint64_t reserved_20_23 : 4; uint64_t calsel_odd_ovrd_en : 1; /**< [ 19: 19](R/W) Enable use of [CALSEL_ODD_OVRD]. */ uint64_t calsel_even_ovrd_en : 1; /**< [ 18: 18](R/W) Enable use of [CALSEL_EVEN_OVRD]. */ uint64_t calo_odd_ovrd_en : 1; /**< [ 17: 17](R/W) Enable use of [CALO_ODD_OVRD]. */ uint64_t calo_even_ovrd_en : 1; /**< [ 16: 16](R/W) Enable use of [CALO_EVEN_OVRD]. */ uint64_t calsel_odd_ovrd : 4; /**< [ 15: 12](R/W) Odd calibration speculation mux override value. */ uint64_t calsel_even_ovrd : 4; /**< [ 11: 8](R/W) Even calibration speculation mux override value. */ uint64_t calo_odd_ovrd : 4; /**< [ 7: 4](R/W) Odd Slicer output calibration mux control override value. */ uint64_t calo_even_ovrd : 4; /**< [ 3: 0](R/W) Even Slicer output calibration mux control override value. */ #else /* Word 0 - Little Endian */ uint64_t calo_even_ovrd : 4; /**< [ 3: 0](R/W) Even Slicer output calibration mux control override value. */ uint64_t calo_odd_ovrd : 4; /**< [ 7: 4](R/W) Odd Slicer output calibration mux control override value. */ uint64_t calsel_even_ovrd : 4; /**< [ 11: 8](R/W) Even calibration speculation mux override value. */ uint64_t calsel_odd_ovrd : 4; /**< [ 15: 12](R/W) Odd calibration speculation mux override value. */ uint64_t calo_even_ovrd_en : 1; /**< [ 16: 16](R/W) Enable use of [CALO_EVEN_OVRD]. */ uint64_t calo_odd_ovrd_en : 1; /**< [ 17: 17](R/W) Enable use of [CALO_ODD_OVRD]. */ uint64_t calsel_even_ovrd_en : 1; /**< [ 18: 18](R/W) Enable use of [CALSEL_EVEN_OVRD]. */ uint64_t calsel_odd_ovrd_en : 1; /**< [ 19: 19](R/W) Enable use of [CALSEL_ODD_OVRD]. */ uint64_t reserved_20_23 : 4; uint64_t cali0_even_ovrd : 8; /**< [ 31: 24](R/W) Input calibration switch enable for speculation path 0 in even paths override. */ uint64_t cali0_odd_ovrd : 8; /**< [ 39: 32](R/W) Input calibration switch enable for speculation path 0 in odd paths override. */ uint64_t cali1_even_ovrd : 8; /**< [ 47: 40](R/W) Input calibration switch enable for speculation path 1 in even paths override. */ uint64_t cali1_odd_ovrd : 8; /**< [ 55: 48](R/W) Input calibration switch enable for speculation path 1 in odd paths override. */ uint64_t cali0_even_ovrd_en : 1; /**< [ 56: 56](R/W) Enable use of [CALI0_EVEN_OVRD]. */ uint64_t cali0_odd_ovrd_en : 1; /**< [ 57: 57](R/W) Enable use of [CALI0_ODD_OVRD]. */ uint64_t cali1_even_ovrd_en : 1; /**< [ 58: 58](R/W) Enable use of [CALI1_EVEN_OVRD]. */ uint64_t cali1_odd_ovrd_en : 1; /**< [ 59: 59](R/W) Enable use of [CALI1_ODD_OVRD]. */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_3_bcfg bdk_gsernx_lanex_rx_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000c90ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) bdk_gsernx_lanex_rx_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) "GSERNX_LANEX_RX_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_3_bsts * * GSER Lane RX Base Status Register 3 * Status registers for calibration muxes and switch enables (either * calibration results ors). Values in this register are only valid if * GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted (indicating DFE adaptation has * completed), or if the corresponding CSR override enable is asserted. */ union bdk_gsernx_lanex_rx_3_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_3_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t cali1_odd : 8; /**< [ 55: 48](RO/H) Input calibration switch enable for speculation path 1 in odd paths. */ uint64_t cali1_even : 8; /**< [ 47: 40](RO/H) Input calibration switch enable for speculation path 1 in even paths. */ uint64_t cali0_odd : 8; /**< [ 39: 32](RO/H) Input calibration switch enable for speculation path 0 in odd paths. */ uint64_t cali0_even : 8; /**< [ 31: 24](RO/H) Input calibration switch enable for speculation path 0 in even paths. */ uint64_t reserved_16_23 : 8; uint64_t calsel_odd : 4; /**< [ 15: 12](RO/H) Odd calibration speculation mux. */ uint64_t calsel_even : 4; /**< [ 11: 8](RO/H) Even calibration speculation mux. */ uint64_t calo_odd : 4; /**< [ 7: 4](RO/H) Odd slicer output calibration mux control. */ uint64_t calo_even : 4; /**< [ 3: 0](RO/H) Even slicer output calibration mux control. */ #else /* Word 0 - Little Endian */ uint64_t calo_even : 4; /**< [ 3: 0](RO/H) Even slicer output calibration mux control. */ uint64_t calo_odd : 4; /**< [ 7: 4](RO/H) Odd slicer output calibration mux control. */ uint64_t calsel_even : 4; /**< [ 11: 8](RO/H) Even calibration speculation mux. */ uint64_t calsel_odd : 4; /**< [ 15: 12](RO/H) Odd calibration speculation mux. */ uint64_t reserved_16_23 : 8; uint64_t cali0_even : 8; /**< [ 31: 24](RO/H) Input calibration switch enable for speculation path 0 in even paths. */ uint64_t cali0_odd : 8; /**< [ 39: 32](RO/H) Input calibration switch enable for speculation path 0 in odd paths. */ uint64_t cali1_even : 8; /**< [ 47: 40](RO/H) Input calibration switch enable for speculation path 1 in even paths. */ uint64_t cali1_odd : 8; /**< [ 55: 48](RO/H) Input calibration switch enable for speculation path 1 in odd paths. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_3_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_3_bsts bdk_gsernx_lanex_rx_3_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_3_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_3_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001680ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_3_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) bdk_gsernx_lanex_rx_3_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) "GSERNX_LANEX_RX_3_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_3_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_4_bcfg * * GSER Lane RX Base Configuration Register 4 * Register controls for VGA, CTLE, and OS_AFE overrides. * Some bit is this register are override controls (*_OVRD). Each * override setting has a corresponding enable which will cause the * calibration logic to use the override register setting instead of the * calibration result. */ union bdk_gsernx_lanex_rx_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t edgesel_even_ovrd_en : 1; /**< [ 61: 61](R/W) Enable use of [EDGESEL_EVEN_OVRD]. */ uint64_t edgesel_even_ovrd : 1; /**< [ 60: 60](R/W) EDGESEL_EVEN override value. */ uint64_t edgesel_odd_ovrd_en : 1; /**< [ 59: 59](R/W) Enable use of [EDGESEL_ODD_OVRD]. */ uint64_t edgesel_odd_ovrd : 1; /**< [ 58: 58](R/W) EDGESEL_ODD override value. */ uint64_t en_os_afe_ovrd_en : 1; /**< [ 57: 57](R/W) Enable use of [EN_OS_AFE_OVRD]. */ uint64_t en_os_afe_ovrd : 1; /**< [ 56: 56](R/W) OS_AFE_EN override value. */ uint64_t reserved_55 : 1; uint64_t os_afe_odd_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [OS_AFE_ODD_OVRD]. */ uint64_t os_afe_odd_ovrd : 6; /**< [ 53: 48](R/W) OS_AFE_ODD offset override value. */ uint64_t reserved_47 : 1; uint64_t os_afe_even_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [OS_AFE_EVEN_OVRD]. */ uint64_t os_afe_even_ovrd : 6; /**< [ 45: 40](R/W) OS_AFE_EVEN offset override value. */ uint64_t reserved_37_39 : 3; uint64_t ctle_lte_zero_ovrd_en : 1; /**< [ 36: 36](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t ctle_lte_zero_ovrd : 4; /**< [ 35: 32](R/W) CTLE LTE zero frequency override value. */ uint64_t reserved_29_31 : 3; uint64_t ctle_lte_gain_ovrd_en : 1; /**< [ 28: 28](R/W) Enable use of [CTLE_LTE_GAIN_OVRD]. */ uint64_t ctle_lte_gain_ovrd : 4; /**< [ 27: 24](R/W) CTLE LTE DC gain override value. */ uint64_t reserved_21_23 : 3; uint64_t ctle_zero_ovrd_en : 1; /**< [ 20: 20](R/W) Enable use of [CTLE_ZERO_OVRD]. */ uint64_t ctle_zero_ovrd : 4; /**< [ 19: 16](R/W) CTLE zero frequency override value. */ uint64_t reserved_13_15 : 3; uint64_t ctle_gain_ovrd_en : 1; /**< [ 12: 12](R/W) Enable use of [CTLE_GAIN_OVRD]. */ uint64_t ctle_gain_ovrd : 4; /**< [ 11: 8](R/W) CTLE DC gain override value. */ uint64_t reserved_5_7 : 3; uint64_t vga_gain_ovrd_en : 1; /**< [ 4: 4](R/W) Enable use of [VGA_GAIN_OVRD]. */ uint64_t vga_gain_ovrd : 4; /**< [ 3: 0](R/W) VGA DC gain override value. */ #else /* Word 0 - Little Endian */ uint64_t vga_gain_ovrd : 4; /**< [ 3: 0](R/W) VGA DC gain override value. */ uint64_t vga_gain_ovrd_en : 1; /**< [ 4: 4](R/W) Enable use of [VGA_GAIN_OVRD]. */ uint64_t reserved_5_7 : 3; uint64_t ctle_gain_ovrd : 4; /**< [ 11: 8](R/W) CTLE DC gain override value. */ uint64_t ctle_gain_ovrd_en : 1; /**< [ 12: 12](R/W) Enable use of [CTLE_GAIN_OVRD]. */ uint64_t reserved_13_15 : 3; uint64_t ctle_zero_ovrd : 4; /**< [ 19: 16](R/W) CTLE zero frequency override value. */ uint64_t ctle_zero_ovrd_en : 1; /**< [ 20: 20](R/W) Enable use of [CTLE_ZERO_OVRD]. */ uint64_t reserved_21_23 : 3; uint64_t ctle_lte_gain_ovrd : 4; /**< [ 27: 24](R/W) CTLE LTE DC gain override value. */ uint64_t ctle_lte_gain_ovrd_en : 1; /**< [ 28: 28](R/W) Enable use of [CTLE_LTE_GAIN_OVRD]. */ uint64_t reserved_29_31 : 3; uint64_t ctle_lte_zero_ovrd : 4; /**< [ 35: 32](R/W) CTLE LTE zero frequency override value. */ uint64_t ctle_lte_zero_ovrd_en : 1; /**< [ 36: 36](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t reserved_37_39 : 3; uint64_t os_afe_even_ovrd : 6; /**< [ 45: 40](R/W) OS_AFE_EVEN offset override value. */ uint64_t os_afe_even_ovrd_en : 1; /**< [ 46: 46](R/W) Enable use of [OS_AFE_EVEN_OVRD]. */ uint64_t reserved_47 : 1; uint64_t os_afe_odd_ovrd : 6; /**< [ 53: 48](R/W) OS_AFE_ODD offset override value. */ uint64_t os_afe_odd_ovrd_en : 1; /**< [ 54: 54](R/W) Enable use of [OS_AFE_ODD_OVRD]. */ uint64_t reserved_55 : 1; uint64_t en_os_afe_ovrd : 1; /**< [ 56: 56](R/W) OS_AFE_EN override value. */ uint64_t en_os_afe_ovrd_en : 1; /**< [ 57: 57](R/W) Enable use of [EN_OS_AFE_OVRD]. */ uint64_t edgesel_odd_ovrd : 1; /**< [ 58: 58](R/W) EDGESEL_ODD override value. */ uint64_t edgesel_odd_ovrd_en : 1; /**< [ 59: 59](R/W) Enable use of [EDGESEL_ODD_OVRD]. */ uint64_t edgesel_even_ovrd : 1; /**< [ 60: 60](R/W) EDGESEL_EVEN override value. */ uint64_t edgesel_even_ovrd_en : 1; /**< [ 61: 61](R/W) Enable use of [EDGESEL_EVEN_OVRD]. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_4_bcfg bdk_gsernx_lanex_rx_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000ca0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) bdk_gsernx_lanex_rx_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) "GSERNX_LANEX_RX_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_4_bsts * * GSER Lane RX Base Status Register 4 * Status registers for VGA, CTLE, and OS_AFE values * (either calibration results ors). */ union bdk_gsernx_lanex_rx_4_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_4_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t blwc : 5; /**< [ 63: 59](RO/H) BLWC. This field is only valid if GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is deasserted (indicating BLWC adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_57_58 : 2; uint64_t en_os_afe : 1; /**< [ 56: 56](RO/H) AFE offset compensation enable value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_54_55 : 2; uint64_t os_afe_odd : 6; /**< [ 53: 48](RO/H) AFE odd offset compensation value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_46_47 : 2; uint64_t os_afe_even : 6; /**< [ 45: 40](RO/H) AFE even offset compensation value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_36_39 : 4; uint64_t ctle_lte_zero : 4; /**< [ 35: 32](RO/H) CTLE LTE zero frequency. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_28_31 : 4; uint64_t ctle_lte_gain : 4; /**< [ 27: 24](RO/H) CTLE LTE DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_20_23 : 4; uint64_t ctle_zero : 4; /**< [ 19: 16](RO/H) CTLE zero frequency. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_12_15 : 4; uint64_t ctle_gain : 4; /**< [ 11: 8](RO/H) CTLE DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_7 : 1; uint64_t prevga_gn : 3; /**< [ 6: 4](RO/H) Pre-VGA gain. This field is only valid if GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is deasserted (indicating Pre-VGA gain adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t vga_gain : 4; /**< [ 3: 0](RO/H) VGA DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ #else /* Word 0 - Little Endian */ uint64_t vga_gain : 4; /**< [ 3: 0](RO/H) VGA DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t prevga_gn : 3; /**< [ 6: 4](RO/H) Pre-VGA gain. This field is only valid if GSERN()_LANE()_RX_11_BSTS[PREVGA_GN_ADAPT_STATUS] is deasserted (indicating Pre-VGA gain adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_7 : 1; uint64_t ctle_gain : 4; /**< [ 11: 8](RO/H) CTLE DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_12_15 : 4; uint64_t ctle_zero : 4; /**< [ 19: 16](RO/H) CTLE zero frequency. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_20_23 : 4; uint64_t ctle_lte_gain : 4; /**< [ 27: 24](RO/H) CTLE LTE DC gain. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_28_31 : 4; uint64_t ctle_lte_zero : 4; /**< [ 35: 32](RO/H) CTLE LTE zero frequency. This field is only valid if GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted (indicating VGA adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_36_39 : 4; uint64_t os_afe_even : 6; /**< [ 45: 40](RO/H) AFE even offset compensation value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_46_47 : 2; uint64_t os_afe_odd : 6; /**< [ 53: 48](RO/H) AFE odd offset compensation value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_54_55 : 2; uint64_t en_os_afe : 1; /**< [ 56: 56](RO/H) AFE offset compensation enable value in-use. This field is only valid if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] is asserted (indicating AFE offset adaptation has completed), or if the corresponding CSR override enable is asserted. */ uint64_t reserved_57_58 : 2; uint64_t blwc : 5; /**< [ 63: 59](RO/H) BLWC. This field is only valid if GSERN()_LANE()_RX_10_BSTS[BLWC_ADAPT_STATUS] is deasserted (indicating BLWC adaptation has completed), or if the corresponding CSR override enable is asserted. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_4_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_4_bsts bdk_gsernx_lanex_rx_4_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_4_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_4_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001690ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_4_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) bdk_gsernx_lanex_rx_4_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) "GSERNX_LANEX_RX_4_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_4_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_5_bcfg * * GSER Lane RX Base Configuration Register 5 * Adaptation parameters for DFE coefficients. */ union bdk_gsernx_lanex_rx_5_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t ctle_leak_sgn : 1; /**< [ 62: 62](R/W) CTLE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t ctlez_leak_sgn : 1; /**< [ 61: 61](R/W) CTLE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t dfe_c1_leak_sgn : 1; /**< [ 60: 60](R/W) DFE C1 leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t vga_leak_sgn : 1; /**< [ 59: 59](R/W) VGA leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t dfe_c1_leak : 3; /**< [ 58: 56](R/W) DFE C1 Gain adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t dfe_c1_mu : 3; /**< [ 55: 53](R/W) DFE C1 adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t vga_leak : 3; /**< [ 52: 50](R/W) VGA gain adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t vga_mu : 3; /**< [ 49: 47](R/W) VGA adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t vga_timer_max : 15; /**< [ 46: 32](R/W) VGA adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t reserved_22_31 : 10; uint64_t dfe_leak_sgn : 1; /**< [ 21: 21](R/W) DFE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t dfe_leak : 3; /**< [ 20: 18](R/W) DFE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t dfe_mu : 3; /**< [ 17: 15](R/W) DFE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t dfe_timer_max : 15; /**< [ 14: 0](R/W) DFE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ #else /* Word 0 - Little Endian */ uint64_t dfe_timer_max : 15; /**< [ 14: 0](R/W) DFE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t dfe_mu : 3; /**< [ 17: 15](R/W) DFE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t dfe_leak : 3; /**< [ 20: 18](R/W) DFE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t dfe_leak_sgn : 1; /**< [ 21: 21](R/W) DFE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t reserved_22_31 : 10; uint64_t vga_timer_max : 15; /**< [ 46: 32](R/W) VGA adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t vga_mu : 3; /**< [ 49: 47](R/W) VGA adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t vga_leak : 3; /**< [ 52: 50](R/W) VGA gain adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t dfe_c1_mu : 3; /**< [ 55: 53](R/W) DFE C1 adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t dfe_c1_leak : 3; /**< [ 58: 56](R/W) DFE C1 Gain adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t vga_leak_sgn : 1; /**< [ 59: 59](R/W) VGA leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t dfe_c1_leak_sgn : 1; /**< [ 60: 60](R/W) DFE C1 leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t ctlez_leak_sgn : 1; /**< [ 61: 61](R/W) CTLE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t ctle_leak_sgn : 1; /**< [ 62: 62](R/W) CTLE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_5_bcfg bdk_gsernx_lanex_rx_5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000cb0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) bdk_gsernx_lanex_rx_5_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) "GSERNX_LANEX_RX_5_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_5_bsts * * GSER Lane RX Base Status Register 5 * Status registers for VGA, CTLE, and DFE adaptation. */ union bdk_gsernx_lanex_rx_5_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_5_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t ctlez_adapt_count : 15; /**< [ 63: 49](RO/H) CTLEZ adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted. */ uint64_t ctlez_adapt_status : 1; /**< [ 48: 48](RO/H) CTLEZ adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t ctle_adapt_count : 15; /**< [ 47: 33](RO/H) CTLE adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted. */ uint64_t ctle_adapt_status : 1; /**< [ 32: 32](RO/H) CTLE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t dfe_adapt_count : 15; /**< [ 31: 17](RO/H) DFE adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted. */ uint64_t dfe_adapt_status : 1; /**< [ 16: 16](RO/H) DFE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t vga_adapt_count : 15; /**< [ 15: 1](RO/H) VGA Gain adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted. */ uint64_t vga_adapt_status : 1; /**< [ 0: 0](RO/H) VGA Gain adaptation status. When 0, training is inactive. When 1, training is active. */ #else /* Word 0 - Little Endian */ uint64_t vga_adapt_status : 1; /**< [ 0: 0](RO/H) VGA Gain adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t vga_adapt_count : 15; /**< [ 15: 1](RO/H) VGA Gain adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted. */ uint64_t dfe_adapt_status : 1; /**< [ 16: 16](RO/H) DFE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t dfe_adapt_count : 15; /**< [ 31: 17](RO/H) DFE adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted. */ uint64_t ctle_adapt_status : 1; /**< [ 32: 32](RO/H) CTLE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t ctle_adapt_count : 15; /**< [ 47: 33](RO/H) CTLE adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted. */ uint64_t ctlez_adapt_status : 1; /**< [ 48: 48](RO/H) CTLEZ adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t ctlez_adapt_count : 15; /**< [ 63: 49](RO/H) CTLEZ adaptation timer count value. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_5_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_5_bsts bdk_gsernx_lanex_rx_5_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_5_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_5_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016a0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_5_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) bdk_gsernx_lanex_rx_5_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) "GSERNX_LANEX_RX_5_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_5_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_6_bcfg * * GSER Lane RX Base Configuration Register 6 * Adaptation controls for DFE CTLE and CTLEZ parameter. */ union bdk_gsernx_lanex_rx_6_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_6_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t ctlelte_leak_sgn : 1; /**< [ 63: 63](R/W) CTLELTE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ uint64_t ctlelte_leak : 3; /**< [ 62: 60](R/W) CTLELTE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctlelte_mu : 3; /**< [ 59: 57](R/W) CTLELTE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctlelte_timer_max : 15; /**< [ 56: 42](R/W) CTLELTE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t ctlez_leak : 3; /**< [ 41: 39](R/W) CTLEZ adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctlez_mu : 3; /**< [ 38: 36](R/W) CTLEZ adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctlez_timer_max : 15; /**< [ 35: 21](R/W) CTLEZ adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t ctle_leak : 3; /**< [ 20: 18](R/W) DFE CTLE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctle_mu : 3; /**< [ 17: 15](R/W) DFE CTLE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctle_timer_max : 15; /**< [ 14: 0](R/W) DFE CTLE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ #else /* Word 0 - Little Endian */ uint64_t ctle_timer_max : 15; /**< [ 14: 0](R/W) DFE CTLE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t ctle_mu : 3; /**< [ 17: 15](R/W) DFE CTLE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctle_leak : 3; /**< [ 20: 18](R/W) DFE CTLE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctlez_timer_max : 15; /**< [ 35: 21](R/W) CTLEZ adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t ctlez_mu : 3; /**< [ 38: 36](R/W) CTLEZ adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctlez_leak : 3; /**< [ 41: 39](R/W) CTLEZ adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctlelte_timer_max : 15; /**< [ 56: 42](R/W) CTLELTE adaptation timer maximum count value. 15-bit field, maximum value 0x7FFF. */ uint64_t ctlelte_mu : 3; /**< [ 59: 57](R/W) CTLELTE adaptation mu parameter setting. 0x0 = 1/16. 0x1 = 1/8. 0x2 = 1/4. 0x3 = 1/2. 0x4 = 1. 0x5 = 2. 0x6 = 4. 0x7 = 8. */ uint64_t ctlelte_leak : 3; /**< [ 62: 60](R/W) CTLELTE adaptation leak parameter setting. 0x0 = 1/128. 0x1 = 1/64. 0x2 = 1/32. 0x3 = 1/16. 0x4 = 1/8. 0x5 = 1/4. 0x6 = 1/2. 0x7 = Disabled. */ uint64_t ctlelte_leak_sgn : 1; /**< [ 63: 63](R/W) CTLELTE leak sign. 0 = Positive (add). 1 = Negative (subtract). */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_6_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_6_bcfg bdk_gsernx_lanex_rx_6_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_6_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_6_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000cc0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_6_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) bdk_gsernx_lanex_rx_6_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) "GSERNX_LANEX_RX_6_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_6_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_6_bsts * * GSER Lane RX Base Status Register 6 * Status registers for LMS adaptation. */ union bdk_gsernx_lanex_rx_6_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_6_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_48_63 : 16; uint64_t ctlelte_adapt_count : 15; /**< [ 47: 33](RO/H) CTLELTE adaptation timer count value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ uint64_t ctlelte_adapt_status : 1; /**< [ 32: 32](RO/H) CTLELTE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t subrate_now : 16; /**< [ 31: 16](RO/H) Subrate_Now counter value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ uint64_t upv_count : 16; /**< [ 15: 0](RO/H) UPV (Up-Vote) counter value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ #else /* Word 0 - Little Endian */ uint64_t upv_count : 16; /**< [ 15: 0](RO/H) UPV (Up-Vote) counter value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ uint64_t subrate_now : 16; /**< [ 31: 16](RO/H) Subrate_Now counter value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ uint64_t ctlelte_adapt_status : 1; /**< [ 32: 32](RO/H) CTLELTE adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t ctlelte_adapt_count : 15; /**< [ 47: 33](RO/H) CTLELTE adaptation timer count value. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is deasserted. */ uint64_t reserved_48_63 : 16; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_6_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_6_bsts bdk_gsernx_lanex_rx_6_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_6_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_6_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_6_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) bdk_gsernx_lanex_rx_6_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) "GSERNX_LANEX_RX_6_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_6_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_7_bcfg * * GSER Lane RX Base Configuration Register 7 * Adaptation reset/mode for the DFE. */ union bdk_gsernx_lanex_rx_7_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_7_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_28_63 : 36; uint64_t gain_diff_max : 4; /**< [ 27: 24](R/W) Gain Difference Maximum Value. This value is used in the correlation function for the Pre-VGA Gain and VGA Gain adaptation. The gain difference maximum value is used to manage the adapation rates of these two parameters (Pre-VGA Gain and VGA Gain). */ uint64_t prevga_gn_upv_rst : 1; /**< [ 23: 23](R/W) PREVGA_GN UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using PREVGA_GN adaptation subrate gear-shifting. When enabled, the gear-shifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t prevga_gn_subrate_rst : 1; /**< [ 22: 22](R/W) PREVGA_GN subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by GSERN()_LANE()_RX_21_BCFG[PREVGA_GN_SUBRATE_INIT] and GSERN()_LANE()_RX_21_BCFG[PREVGA_GN_SUBRATE_FIN]. */ uint64_t prevga_gn_rst : 2; /**< [ 21: 20](R/W) PREVGA_GN adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t blwc_upv_rst : 1; /**< [ 19: 19](R/W) BLWC UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using BLWC adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t blwc_subrate_rst : 1; /**< [ 18: 18](R/W) BLWC subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the BLWC_SUBRATE_INIT and BLWC_SUBRATE_FINAL registers. */ uint64_t blwc_rst : 2; /**< [ 17: 16](R/W) BLWC adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t afeos_upv_rst : 1; /**< [ 15: 15](R/W) AFEOS UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using AFEOS adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t afeos_subrate_rst : 1; /**< [ 14: 14](R/W) AFEOS subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the AFEOS_SUBRATE_INIT and AFEOS_SUBRATE_FINAL registers. */ uint64_t afeos_rst : 2; /**< [ 13: 12](R/W) AFE offset adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t upv_rst : 1; /**< [ 11: 11](R/W) UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t subrate_rst : 1; /**< [ 10: 10](R/W) Subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the SUBRATE INIT and SUBRATE_FINAL registers. */ uint64_t ctlelte_rst : 2; /**< [ 9: 8](R/W) CTLELTE adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t ctlez_rst : 2; /**< [ 7: 6](R/W) CTLEZ adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t vga_rst : 2; /**< [ 5: 4](R/W) VGA Gain adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t ctle_rst : 2; /**< [ 3: 2](R/W) CTLE/CTLEZ adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t dfe_rst : 2; /**< [ 1: 0](R/W) DFE adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ #else /* Word 0 - Little Endian */ uint64_t dfe_rst : 2; /**< [ 1: 0](R/W) DFE adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t ctle_rst : 2; /**< [ 3: 2](R/W) CTLE/CTLEZ adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t vga_rst : 2; /**< [ 5: 4](R/W) VGA Gain adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t ctlez_rst : 2; /**< [ 7: 6](R/W) CTLEZ adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t ctlelte_rst : 2; /**< [ 9: 8](R/W) CTLELTE adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t subrate_rst : 1; /**< [ 10: 10](R/W) Subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the SUBRATE INIT and SUBRATE_FINAL registers. */ uint64_t upv_rst : 1; /**< [ 11: 11](R/W) UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t afeos_rst : 2; /**< [ 13: 12](R/W) AFE offset adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t afeos_subrate_rst : 1; /**< [ 14: 14](R/W) AFEOS subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the AFEOS_SUBRATE_INIT and AFEOS_SUBRATE_FINAL registers. */ uint64_t afeos_upv_rst : 1; /**< [ 15: 15](R/W) AFEOS UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using AFEOS adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t blwc_rst : 2; /**< [ 17: 16](R/W) BLWC adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t blwc_subrate_rst : 1; /**< [ 18: 18](R/W) BLWC subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by the BLWC_SUBRATE_INIT and BLWC_SUBRATE_FINAL registers. */ uint64_t blwc_upv_rst : 1; /**< [ 19: 19](R/W) BLWC UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using BLWC adaptation subrate gearshifting. When enabled, the gearshifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t prevga_gn_rst : 2; /**< [ 21: 20](R/W) PREVGA_GN adaptation reset/mode setting. 0x0 = Reset. 0x1 = Run once adaptation. 0x2 = Pause adaptation. 0x3 = Run continuous adaptation. */ uint64_t prevga_gn_subrate_rst : 1; /**< [ 22: 22](R/W) PREVGA_GN subrate counter reset. The subrate counter controls the interval between LMS updates. When 1, the counter is reset. When 0, the counter increments to the value controlled by GSERN()_LANE()_RX_21_BCFG[PREVGA_GN_SUBRATE_INIT] and GSERN()_LANE()_RX_21_BCFG[PREVGA_GN_SUBRATE_FIN]. */ uint64_t prevga_gn_upv_rst : 1; /**< [ 23: 23](R/W) PREVGA_GN UPV count reset. Set to zero before running the receiver reset state machine to bring the receiver up using PREVGA_GN adaptation subrate gear-shifting. When enabled, the gear-shifting function can increment the current subrate when the UPV count equals the current subrate (scaled). May be set to 1 if gearshifting is not used. */ uint64_t gain_diff_max : 4; /**< [ 27: 24](R/W) Gain Difference Maximum Value. This value is used in the correlation function for the Pre-VGA Gain and VGA Gain adaptation. The gain difference maximum value is used to manage the adapation rates of these two parameters (Pre-VGA Gain and VGA Gain). */ uint64_t reserved_28_63 : 36; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_7_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_7_bcfg bdk_gsernx_lanex_rx_7_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_7_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_7_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000cd0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_7_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) bdk_gsernx_lanex_rx_7_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) "GSERNX_LANEX_RX_7_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_7_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_7_bsts * * GSER Lane RX Base Status Register 7 * Configuration registers for LMS adaptation. Current Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_7_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_7_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t ctlelte_deadband_now : 12; /**< [ 59: 48](RO/H) Current 12-bit integer value of CTLELTE adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is asserted. */ uint64_t ctlez_deadband_now : 12; /**< [ 47: 36](RO/H) Current 12-bit integer value of CTLEZ adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted. */ uint64_t ctle_deadband_now : 12; /**< [ 35: 24](RO/H) Current 12-bit integer value of CTLE adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted. */ uint64_t dfe_deadband_now : 12; /**< [ 23: 12](RO/H) Current 12-bit integer value of Coeff Adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted. */ uint64_t vga_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of VGA adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted. */ #else /* Word 0 - Little Endian */ uint64_t vga_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of VGA adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[VGA_ADAPT_STATUS] is deasserted. */ uint64_t dfe_deadband_now : 12; /**< [ 23: 12](RO/H) Current 12-bit integer value of Coeff Adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is deasserted. */ uint64_t ctle_deadband_now : 12; /**< [ 35: 24](RO/H) Current 12-bit integer value of CTLE adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLE_ADAPT_STATUS] is deasserted. */ uint64_t ctlez_deadband_now : 12; /**< [ 47: 36](RO/H) Current 12-bit integer value of CTLEZ adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[CTLEZ_ADAPT_STATUS] is deasserted. */ uint64_t ctlelte_deadband_now : 12; /**< [ 59: 48](RO/H) Current 12-bit integer value of CTLELTE adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_6_BSTS[CTLELTE_ADAPT_STATUS] is asserted. */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_7_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_7_bsts bdk_gsernx_lanex_rx_7_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_7_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_7_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_7_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) bdk_gsernx_lanex_rx_7_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) "GSERNX_LANEX_RX_7_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_7_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_8_bcfg * * GSER Lane RX Base Configuration Register 8 * Configuration registers for LMS adaptation * Adaptation controls for Subrate parameters. */ union bdk_gsernx_lanex_rx_8_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_8_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_50_63 : 14; uint64_t dfe_edgemode_ovrd : 1; /**< [ 49: 49](R/W) 0 = Selects non-transition bits for DFE adaptation. 1 = Selects transition bits for DFE adaptation. It applies the mode to the I, Q, and X paths. GSERN()_LANE()_EYE_CTL_2[CAPTURE_EDGEMODE] sets the E path. */ uint64_t dfe_edgemode_ovrd_en : 1; /**< [ 48: 48](R/W) 0 = DFE state machine controls DFE edge mode select. Currently, the DFE FSM will time interleave between both edge modes (i.e. 50% non-transition, 50% transition). 1 = [DFE_EDGEMODE_OVRD] controls DFE edge mode select. */ uint64_t reserved_35_47 : 13; uint64_t subrate_scale : 3; /**< [ 34: 32](R/W) Subrate now counter scaling value for compare against Up Vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set [SUBRATE_INIT] = [SUBRATE_FINAL] if subrate gearshifting is not enabled. */ uint64_t subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set [SUBRATE_INIT] = [SUBRATE_FINAL] if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t subrate_final : 16; /**< [ 15: 0](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set [SUBRATE_INIT] = [SUBRATE_FINAL] if subrate gearshifting is not enabled. */ uint64_t subrate_init : 16; /**< [ 31: 16](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set [SUBRATE_INIT] = [SUBRATE_FINAL] if subrate gearshifting is not enabled. */ uint64_t subrate_scale : 3; /**< [ 34: 32](R/W) Subrate now counter scaling value for compare against Up Vote counter. 0x0 = 1/32. 0x1 = 1/16. 0x2 = 3/32. 0x3 = 1/8. 0x4 = 3/16. 0x5 = 1/4. 0x6 = 3/8. 0x7 = 1/2. */ uint64_t reserved_35_47 : 13; uint64_t dfe_edgemode_ovrd_en : 1; /**< [ 48: 48](R/W) 0 = DFE state machine controls DFE edge mode select. Currently, the DFE FSM will time interleave between both edge modes (i.e. 50% non-transition, 50% transition). 1 = [DFE_EDGEMODE_OVRD] controls DFE edge mode select. */ uint64_t dfe_edgemode_ovrd : 1; /**< [ 49: 49](R/W) 0 = Selects non-transition bits for DFE adaptation. 1 = Selects transition bits for DFE adaptation. It applies the mode to the I, Q, and X paths. GSERN()_LANE()_EYE_CTL_2[CAPTURE_EDGEMODE] sets the E path. */ uint64_t reserved_50_63 : 14; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_8_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_8_bcfg bdk_gsernx_lanex_rx_8_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_8_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_8_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000ce0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_8_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) bdk_gsernx_lanex_rx_8_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) "GSERNX_LANEX_RX_8_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_8_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_8_bsts * * GSER Lane RX Base Status Register 8 * Status registers for AFEOS LMS adaptation. Current AFEOS Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_8_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_8_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t afeos_subrate_now : 16; /**< [ 63: 48](RO/H) AFEOS subrate_now counter value. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t afeos_upv_count : 16; /**< [ 43: 28](RO/H) AFE up-vote counter value. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t afeos_adapt_status : 1; /**< [ 27: 27](RO/H) AFEOS adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t afeos_adapt_count : 15; /**< [ 26: 12](RO/H) AFEOS adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t afeos_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of AFEOS adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ #else /* Word 0 - Little Endian */ uint64_t afeos_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of AFEOS adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t afeos_adapt_count : 15; /**< [ 26: 12](RO/H) AFEOS adaptation timer current count value. 15-bit field, maximum value 0x7FFF. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t afeos_adapt_status : 1; /**< [ 27: 27](RO/H) AFEOS adaptation status. When 0, training is inactive. When 1, training is active. */ uint64_t afeos_upv_count : 16; /**< [ 43: 28](RO/H) AFE up-vote counter value. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ uint64_t reserved_44_47 : 4; uint64_t afeos_subrate_now : 16; /**< [ 63: 48](RO/H) AFEOS subrate_now counter value. Only valid when GSERN()_LANE()_RX_8_BSTS[AFEOS_ADAPT_STATUS] is clear. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_8_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_8_bsts bdk_gsernx_lanex_rx_8_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_8_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_8_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_8_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) bdk_gsernx_lanex_rx_8_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) "GSERNX_LANEX_RX_8_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_8_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_9_bcfg * * GSER Lane RX Base Configuration Register 9 * Configuration registers for LMS adaptation. Deadband settings for adaptation. */ union bdk_gsernx_lanex_rx_9_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_9_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_60_63 : 4; uint64_t ctlelte_deadband : 12; /**< [ 59: 48](R/W) CTLELTE adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t ctlez_deadband : 12; /**< [ 47: 36](R/W) CTLEZ adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t ctle_deadband : 12; /**< [ 35: 24](R/W) CTLE adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t dfe_deadband : 12; /**< [ 23: 12](R/W) Coeff adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t vga_deadband : 12; /**< [ 11: 0](R/W) VGA adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ #else /* Word 0 - Little Endian */ uint64_t vga_deadband : 12; /**< [ 11: 0](R/W) VGA adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t dfe_deadband : 12; /**< [ 23: 12](R/W) Coeff adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t ctle_deadband : 12; /**< [ 35: 24](R/W) CTLE adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t ctlez_deadband : 12; /**< [ 47: 36](R/W) CTLEZ adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t ctlelte_deadband : 12; /**< [ 59: 48](R/W) CTLELTE adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_60_63 : 4; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_9_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_9_bcfg bdk_gsernx_lanex_rx_9_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_9_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_9_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000cf0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_9_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) bdk_gsernx_lanex_rx_9_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) "GSERNX_LANEX_RX_9_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_9_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_9_bsts * * GSER Lane RX Base Status Register 9 * Status registers for DFE LMS adaptation. */ union bdk_gsernx_lanex_rx_9_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_9_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_12_63 : 52; uint64_t dfe_c1_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of Coeff adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is clear. */ #else /* Word 0 - Little Endian */ uint64_t dfe_c1_deadband_now : 12; /**< [ 11: 0](RO/H) Current 12-bit integer value of Coeff adaptation deadband setting. Note that the 8 fraction bits of the accumulator are not reported. Only valid when GSERN()_LANE()_RX_5_BSTS[DFE_ADAPT_STATUS] is clear. */ uint64_t reserved_12_63 : 52; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_9_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_9_bsts bdk_gsernx_lanex_rx_9_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_9_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_9_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900016e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_9_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) bdk_gsernx_lanex_rx_9_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) "GSERNX_LANEX_RX_9_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_9_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_idle_cal_cfg * * GSER Lane RX Idle Offset Dynamic ReCalibration Control Register * Idle dynamic recalibration FSM control register. Used to configure the duration, * frequency, and modes for the dynamic recalibration of the idle offset. Also, * allows for enable/disable of this feature. */ union bdk_gsernx_lanex_rx_idle_cal_cfg { uint64_t u; struct bdk_gsernx_lanex_rx_idle_cal_cfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t idle_recal_disable : 1; /**< [ 63: 63](R/W) Single bit for enabling or disability the recalibration if idle offset. (This bit does not affect the initial calibration of the idle offset). 0 = Allow idle recalibration to run. 1 = Disable dynamic recalibration of the idle offset. */ uint64_t idle_recal_oob_mode_disable : 1;/**< [ 62: 62](R/W) Single bit for enabling or disability the dynamic recalibration OOB delay feature. This feature allows us to push out any idle offset recalibration when any OOB activity has been detected on the idle signal. 0 = Allow idle recalibration to detect OOB transactions and delay recalibration 1 = Disable OOB transaction detection and do NOT delay recalibration. */ uint64_t idle_oob_adder_counter_clear : 1;/**< [ 61: 61](R/W) This bit one set to high, forces the counter counting the number of OOB caused dealys to 8'h00. This is a static clear signal and has to be asserted to enable the counter to resume counting. The count is in terms of the number of RECALIBRATION_OOB_COUNT_ADDER increments. 0 = Allow [OOB_DELAY_ADDER_COUNT] to increment. 1 = Forces [OOB_DELAY_ADDER_COUNT] to 0x0. Internal: FIXME no such field RECALIBRATION_OOB_COUNT_ADDER then remove above exempt attribute. */ uint64_t reserved_40_60 : 21; uint64_t max_oob_adder_count : 8; /**< [ 39: 32](R/W) Maximum number of OOB forced pushouts of the idle recalibrations allowed. If the number of pushouts matches this number, the the idle offset is forced to recalibrate regardless of the state of the link. */ uint64_t oob_delay_adder_count : 32; /**< [ 31: 0](R/W) Number of svc_clk ticks allowed to delay the idle recalibration. Default is equal to 1 second based on a 10 ns service clock cycle time. */ #else /* Word 0 - Little Endian */ uint64_t oob_delay_adder_count : 32; /**< [ 31: 0](R/W) Number of svc_clk ticks allowed to delay the idle recalibration. Default is equal to 1 second based on a 10 ns service clock cycle time. */ uint64_t max_oob_adder_count : 8; /**< [ 39: 32](R/W) Maximum number of OOB forced pushouts of the idle recalibrations allowed. If the number of pushouts matches this number, the the idle offset is forced to recalibrate regardless of the state of the link. */ uint64_t reserved_40_60 : 21; uint64_t idle_oob_adder_counter_clear : 1;/**< [ 61: 61](R/W) This bit one set to high, forces the counter counting the number of OOB caused dealys to 8'h00. This is a static clear signal and has to be asserted to enable the counter to resume counting. The count is in terms of the number of RECALIBRATION_OOB_COUNT_ADDER increments. 0 = Allow [OOB_DELAY_ADDER_COUNT] to increment. 1 = Forces [OOB_DELAY_ADDER_COUNT] to 0x0. Internal: FIXME no such field RECALIBRATION_OOB_COUNT_ADDER then remove above exempt attribute. */ uint64_t idle_recal_oob_mode_disable : 1;/**< [ 62: 62](R/W) Single bit for enabling or disability the dynamic recalibration OOB delay feature. This feature allows us to push out any idle offset recalibration when any OOB activity has been detected on the idle signal. 0 = Allow idle recalibration to detect OOB transactions and delay recalibration 1 = Disable OOB transaction detection and do NOT delay recalibration. */ uint64_t idle_recal_disable : 1; /**< [ 63: 63](R/W) Single bit for enabling or disability the recalibration if idle offset. (This bit does not affect the initial calibration of the idle offset). 0 = Allow idle recalibration to run. 1 = Disable dynamic recalibration of the idle offset. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_idle_cal_cfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_idle_cal_cfg bdk_gsernx_lanex_rx_idle_cal_cfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001530ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_IDLE_CAL_CFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) bdk_gsernx_lanex_rx_idle_cal_cfg_t #define bustype_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) "GSERNX_LANEX_RX_IDLE_CAL_CFG" #define device_bar_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_IDLE_CAL_CFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_idle_recal_cnt * * GSER Lane RX Idle Duration Count Before ReCalibration Register * Count used to specify the duration of time between idle offset recalibrations. */ union bdk_gsernx_lanex_rx_idle_recal_cnt { uint64_t u; struct bdk_gsernx_lanex_rx_idle_recal_cnt_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_48_63 : 16; uint64_t idle_recal_duration_count : 48;/**< [ 47: 0](R/W) Number of svc_clk ticks to specify the delay between idle recalibration triggers. Default is equal to 1 min based on a 10ns svc_clk cycle time. */ #else /* Word 0 - Little Endian */ uint64_t idle_recal_duration_count : 48;/**< [ 47: 0](R/W) Number of svc_clk ticks to specify the delay between idle recalibration triggers. Default is equal to 1 min based on a 10ns svc_clk cycle time. */ uint64_t reserved_48_63 : 16; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_idle_recal_cnt_s cn; */ }; typedef union bdk_gsernx_lanex_rx_idle_recal_cnt bdk_gsernx_lanex_rx_idle_recal_cnt_t; static inline uint64_t BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001540ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_IDLE_RECAL_CNT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) bdk_gsernx_lanex_rx_idle_recal_cnt_t #define bustype_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) "GSERNX_LANEX_RX_IDLE_RECAL_CNT" #define device_bar_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_IDLE_RECAL_CNT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_idledet_1_bcfg * * GSER Lane RX Idle Detection Filter Control Register 1 * Parameters controlling the digital filter of the analog receiver's raw idle * signal. Setting all fields to 1, i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_rx_idledet_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_idledet_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reset_filter : 1; /**< [ 63: 63](R/W) Reset for the digital filter of the analog receiver's raw idle signal. Set the other fields in this register as desired before releasing [RESET_FILTER]. Note that while the filter is in reset, the filter output will be high, indicating idle. 0 = Allow filter to run. 1 = Hold filter in reset. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reset_filter : 1; /**< [ 63: 63](R/W) Reset for the digital filter of the analog receiver's raw idle signal. Set the other fields in this register as desired before releasing [RESET_FILTER]. Note that while the filter is in reset, the filter output will be high, indicating idle. 0 = Allow filter to run. 1 = Hold filter in reset. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_idledet_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_idledet_1_bcfg bdk_gsernx_lanex_rx_idledet_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001100ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_IDLEDET_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) bdk_gsernx_lanex_rx_idledet_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) "GSERNX_LANEX_RX_IDLEDET_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_IDLEDET_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_idledet_2_bcfg * * GSER Lane RX Idle Detection Filter Control Register 2 * Parameters controlling the digital filter of the analog receiver's raw idle * signal. Setting all fields to 1, i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_rx_idledet_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_idledet_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t frc_en : 1; /**< [ 55: 55](R/W) Force enable. 0 = Use the filter output based on the input from the analog idle detector. 1 = Force the output of the digital idle filter to the value specified by [FRC_VAL]. */ uint64_t frc_val : 1; /**< [ 54: 54](R/W) When [FRC_EN] is set to 1, this will be the value forced at the output of the digital idle filter. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 1. */ uint64_t frc_val : 1; /**< [ 54: 54](R/W) When [FRC_EN] is set to 1, this will be the value forced at the output of the digital idle filter. */ uint64_t frc_en : 1; /**< [ 55: 55](R/W) Force enable. 0 = Use the filter output based on the input from the analog idle detector. 1 = Force the output of the digital idle filter to the value specified by [FRC_VAL]. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_idledet_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_idledet_2_bcfg bdk_gsernx_lanex_rx_idledet_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001110ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_IDLEDET_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) bdk_gsernx_lanex_rx_idledet_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) "GSERNX_LANEX_RX_IDLEDET_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_IDLEDET_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_idledet_bsts * * GSER Lane RX Base Idle Status Register * Status register for receiver idle detection status. */ union bdk_gsernx_lanex_rx_idledet_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_idledet_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_1_63 : 63; uint64_t idle : 1; /**< [ 0: 0](RO/H) One indicates that the receiver idle detection circuit has detected no input data stream. Valid results can be expected anytime after the custom receiver power-up and reset-exit sequence is complete. This is the output of the digital idle detection filter. */ #else /* Word 0 - Little Endian */ uint64_t idle : 1; /**< [ 0: 0](RO/H) One indicates that the receiver idle detection circuit has detected no input data stream. Valid results can be expected anytime after the custom receiver power-up and reset-exit sequence is complete. This is the output of the digital idle detection filter. */ uint64_t reserved_1_63 : 63; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_idledet_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_idledet_bsts bdk_gsernx_lanex_rx_idledet_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001120ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_IDLEDET_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) bdk_gsernx_lanex_rx_idledet_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) "GSERNX_LANEX_RX_IDLEDET_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_IDLEDET_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_0_bcfg * * GSER Lane Receiver Ir25 Trim Override Value Settings Register 0 * ir25_trim override settings are in groups of 4 bits. These only take * effect when the corresponding enable bit(s) are set. */ union bdk_gsernx_lanex_rx_itrim_0_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t trim15_ovrd : 4; /**< [ 63: 60](R/W) Override setting for bits 87..84 of 180b ir25_trim. */ uint64_t trim14_ovrd : 4; /**< [ 59: 56](R/W) Override setting for bits 83..80 of 180b ir25_trim. */ uint64_t trim13_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 79..76 of 180b ir25_trim. */ uint64_t trim12_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 75..72 of 180b ir25_trim. */ uint64_t trim11_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 71..68 of 180b ir25_trim. */ uint64_t trim10_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 67..64 of 180b ir25_trim. */ uint64_t trim9_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 63..60 of 180b ir25_trim. */ uint64_t trim8_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 59..56 of 180b ir25_trim. */ uint64_t trim7_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 55..52 of 180b ir25_trim. */ uint64_t trim6_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 51..48 of 180b ir25_trim. */ uint64_t trim5_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 47..44 of 180b ir25_trim. */ uint64_t trim4_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 43..40 of 180b ir25_trim. */ uint64_t trim3_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 39..36 of 180b ir25_trim. */ uint64_t trim2_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 35..32 of 180b ir25_trim. */ uint64_t trim1_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 31..28 of 180b ir25_trim. */ uint64_t reserved_0_3 : 4; #else /* Word 0 - Little Endian */ uint64_t reserved_0_3 : 4; uint64_t trim1_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 31..28 of 180b ir25_trim. */ uint64_t trim2_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 35..32 of 180b ir25_trim. */ uint64_t trim3_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 39..36 of 180b ir25_trim. */ uint64_t trim4_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 43..40 of 180b ir25_trim. */ uint64_t trim5_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 47..44 of 180b ir25_trim. */ uint64_t trim6_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 51..48 of 180b ir25_trim. */ uint64_t trim7_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 55..52 of 180b ir25_trim. */ uint64_t trim8_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 59..56 of 180b ir25_trim. */ uint64_t trim9_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 63..60 of 180b ir25_trim. */ uint64_t trim10_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 67..64 of 180b ir25_trim. */ uint64_t trim11_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 71..68 of 180b ir25_trim. */ uint64_t trim12_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 75..72 of 180b ir25_trim. */ uint64_t trim13_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 79..76 of 180b ir25_trim. */ uint64_t trim14_ovrd : 4; /**< [ 59: 56](R/W) Override setting for bits 83..80 of 180b ir25_trim. */ uint64_t trim15_ovrd : 4; /**< [ 63: 60](R/W) Override setting for bits 87..84 of 180b ir25_trim. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_0_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_0_bcfg bdk_gsernx_lanex_rx_itrim_0_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001a80ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_0_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_0_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_0_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_0_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_0_bsts * * GSER Lane Receiver Ir25 Trim Settings Register 0 * These are the ir25_trim settings in use. ir25_trim settings are in groups of 4 bits. */ union bdk_gsernx_lanex_rx_itrim_0_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_0_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t trim15 : 4; /**< [ 63: 60](RO/H) Setting for bits 87..84 of 180b ir25_trim. */ uint64_t trim14 : 4; /**< [ 59: 56](RO/H) Setting for bits 83..80 of 180b ir25_trim. */ uint64_t trim13 : 4; /**< [ 55: 52](RO/H) Setting for bits 79..76 of 180b ir25_trim. */ uint64_t trim12 : 4; /**< [ 51: 48](RO/H) Setting for bits 75..72 of 180b ir25_trim. */ uint64_t trim11 : 4; /**< [ 47: 44](RO/H) Setting for bits 71..68 of 180b ir25_trim. */ uint64_t trim10 : 4; /**< [ 43: 40](RO/H) Setting for bits 67..64 of 180b ir25_trim. */ uint64_t trim9 : 4; /**< [ 39: 36](RO/H) Setting for bits 63..60 of 180b ir25_trim. */ uint64_t trim8 : 4; /**< [ 35: 32](RO/H) Setting for bits 59..56 of 180b ir25_trim. */ uint64_t trim7 : 4; /**< [ 31: 28](RO/H) Setting for bits 55..52 of 180b ir25_trim. */ uint64_t trim6 : 4; /**< [ 27: 24](RO/H) Setting for bits 51..48 of 180b ir25_trim. */ uint64_t trim5 : 4; /**< [ 23: 20](RO/H) Setting for bits 47..44 of 180b ir25_trim. */ uint64_t trim4 : 4; /**< [ 19: 16](RO/H) Setting for bits 43..40 of 180b ir25_trim. */ uint64_t trim3 : 4; /**< [ 15: 12](RO/H) Setting for bits 39..36 of 180b ir25_trim. */ uint64_t trim2 : 4; /**< [ 11: 8](RO/H) Setting for bits 35..32 of 180b ir25_trim. */ uint64_t trim1 : 4; /**< [ 7: 4](RO/H) Setting for bits 31..28 of 180b ir25_trim. */ uint64_t reserved_0_3 : 4; #else /* Word 0 - Little Endian */ uint64_t reserved_0_3 : 4; uint64_t trim1 : 4; /**< [ 7: 4](RO/H) Setting for bits 31..28 of 180b ir25_trim. */ uint64_t trim2 : 4; /**< [ 11: 8](RO/H) Setting for bits 35..32 of 180b ir25_trim. */ uint64_t trim3 : 4; /**< [ 15: 12](RO/H) Setting for bits 39..36 of 180b ir25_trim. */ uint64_t trim4 : 4; /**< [ 19: 16](RO/H) Setting for bits 43..40 of 180b ir25_trim. */ uint64_t trim5 : 4; /**< [ 23: 20](RO/H) Setting for bits 47..44 of 180b ir25_trim. */ uint64_t trim6 : 4; /**< [ 27: 24](RO/H) Setting for bits 51..48 of 180b ir25_trim. */ uint64_t trim7 : 4; /**< [ 31: 28](RO/H) Setting for bits 55..52 of 180b ir25_trim. */ uint64_t trim8 : 4; /**< [ 35: 32](RO/H) Setting for bits 59..56 of 180b ir25_trim. */ uint64_t trim9 : 4; /**< [ 39: 36](RO/H) Setting for bits 63..60 of 180b ir25_trim. */ uint64_t trim10 : 4; /**< [ 43: 40](RO/H) Setting for bits 67..64 of 180b ir25_trim. */ uint64_t trim11 : 4; /**< [ 47: 44](RO/H) Setting for bits 71..68 of 180b ir25_trim. */ uint64_t trim12 : 4; /**< [ 51: 48](RO/H) Setting for bits 75..72 of 180b ir25_trim. */ uint64_t trim13 : 4; /**< [ 55: 52](RO/H) Setting for bits 79..76 of 180b ir25_trim. */ uint64_t trim14 : 4; /**< [ 59: 56](RO/H) Setting for bits 83..80 of 180b ir25_trim. */ uint64_t trim15 : 4; /**< [ 63: 60](RO/H) Setting for bits 87..84 of 180b ir25_trim. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_0_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_0_bsts bdk_gsernx_lanex_rx_itrim_0_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001bd0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_0_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) bdk_gsernx_lanex_rx_itrim_0_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) "GSERNX_LANEX_RX_ITRIM_0_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_0_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_1_bcfg * * GSER Lane Receiver Ir25 Trim Override Value Settings Register 1 * ir25_trim override settings are in groups of 4 bits. These only take * effect when the corresponding enable bit(s) are set. */ union bdk_gsernx_lanex_rx_itrim_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t trim31_ovrd : 4; /**< [ 63: 60](R/W) Override setting for bits 179..176 of 180b ir25_trim. */ uint64_t trim30_ovrd : 4; /**< [ 59: 56](R/W) Override setting for bits 175..172 of 180b ir25_trim. */ uint64_t trim29_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 171..168 of 180b ir25_trim. */ uint64_t trim28_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 167..164 of 180b ir25_trim. */ uint64_t trim27_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 163..160 of 180b ir25_trim. */ uint64_t trim26_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 159..156 of 180b ir25_trim. */ uint64_t trim25_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 155..152 of 180b ir25_trim. */ uint64_t trim24_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 151..148 of 180b ir25_trim. */ uint64_t trim23_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 147..144 of 180b ir25_trim. */ uint64_t trim22_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 143..140 of 180b ir25_trim. */ uint64_t trim21_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 139..136 of 180b ir25_trim. */ uint64_t trim20_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 135..132 of 180b ir25_trim. */ uint64_t trim19_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 131..128 of 180b ir25_trim. */ uint64_t trim18_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 127..124 of 180b ir25_trim. */ uint64_t trim17_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 123..120 of 180b ir25_trim. */ uint64_t trim16_ovrd : 4; /**< [ 3: 0](R/W) Override setting for bits 119..116 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim16_ovrd : 4; /**< [ 3: 0](R/W) Override setting for bits 119..116 of 180b ir25_trim. */ uint64_t trim17_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 123..120 of 180b ir25_trim. */ uint64_t trim18_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 127..124 of 180b ir25_trim. */ uint64_t trim19_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 131..128 of 180b ir25_trim. */ uint64_t trim20_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 135..132 of 180b ir25_trim. */ uint64_t trim21_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 139..136 of 180b ir25_trim. */ uint64_t trim22_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 143..140 of 180b ir25_trim. */ uint64_t trim23_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 147..144 of 180b ir25_trim. */ uint64_t trim24_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 151..148 of 180b ir25_trim. */ uint64_t trim25_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 155..152 of 180b ir25_trim. */ uint64_t trim26_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 159..156 of 180b ir25_trim. */ uint64_t trim27_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 163..160 of 180b ir25_trim. */ uint64_t trim28_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 167..164 of 180b ir25_trim. */ uint64_t trim29_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 171..168 of 180b ir25_trim. */ uint64_t trim30_ovrd : 4; /**< [ 59: 56](R/W) Override setting for bits 175..172 of 180b ir25_trim. */ uint64_t trim31_ovrd : 4; /**< [ 63: 60](R/W) Override setting for bits 179..176 of 180b ir25_trim. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_1_bcfg bdk_gsernx_lanex_rx_itrim_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001a90ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_1_bsts * * GSER Lane Receiver Ir25 Trim Settings Register 1 * These are the ir25_trim settings in use. ir25_trim settings are in groups of 4 bits. */ union bdk_gsernx_lanex_rx_itrim_1_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_1_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t trim31 : 4; /**< [ 63: 60](RO/H) Setting for bits 179..176 of 180b ir25_trim. */ uint64_t trim30 : 4; /**< [ 59: 56](RO/H) Setting for bits 175..172 of 180b ir25_trim. */ uint64_t trim29 : 4; /**< [ 55: 52](RO/H) Setting for bits 171..168 of 180b ir25_trim. */ uint64_t trim28 : 4; /**< [ 51: 48](RO/H) Setting for bits 167..164 of 180b ir25_trim. */ uint64_t trim27 : 4; /**< [ 47: 44](RO/H) Setting for bits 163..160 of 180b ir25_trim. */ uint64_t trim26 : 4; /**< [ 43: 40](RO/H) Setting for bits 159..156 of 180b ir25_trim. */ uint64_t trim25 : 4; /**< [ 39: 36](RO/H) Setting for bits 155..152 of 180b ir25_trim. */ uint64_t trim24 : 4; /**< [ 35: 32](RO/H) Setting for bits 151..148 of 180b ir25_trim. */ uint64_t trim23 : 4; /**< [ 31: 28](RO/H) Setting for bits 147..144 of 180b ir25_trim. */ uint64_t trim22 : 4; /**< [ 27: 24](RO/H) Setting for bits 143..140 of 180b ir25_trim. */ uint64_t trim21 : 4; /**< [ 23: 20](RO/H) Setting for bits 139..136 of 180b ir25_trim. */ uint64_t trim20 : 4; /**< [ 19: 16](RO/H) Setting for bits 135..132 of 180b ir25_trim. */ uint64_t trim19 : 4; /**< [ 15: 12](RO/H) Setting for bits 131..128 of 180b ir25_trim. */ uint64_t trim18 : 4; /**< [ 11: 8](RO/H) Setting for bits 127..124 of 180b ir25_trim. */ uint64_t trim17 : 4; /**< [ 7: 4](RO/H) Setting for bits 123..120 of 180b ir25_trim. */ uint64_t trim16 : 4; /**< [ 3: 0](RO/H) Setting for bits 119..116 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim16 : 4; /**< [ 3: 0](RO/H) Setting for bits 119..116 of 180b ir25_trim. */ uint64_t trim17 : 4; /**< [ 7: 4](RO/H) Setting for bits 123..120 of 180b ir25_trim. */ uint64_t trim18 : 4; /**< [ 11: 8](RO/H) Setting for bits 127..124 of 180b ir25_trim. */ uint64_t trim19 : 4; /**< [ 15: 12](RO/H) Setting for bits 131..128 of 180b ir25_trim. */ uint64_t trim20 : 4; /**< [ 19: 16](RO/H) Setting for bits 135..132 of 180b ir25_trim. */ uint64_t trim21 : 4; /**< [ 23: 20](RO/H) Setting for bits 139..136 of 180b ir25_trim. */ uint64_t trim22 : 4; /**< [ 27: 24](RO/H) Setting for bits 143..140 of 180b ir25_trim. */ uint64_t trim23 : 4; /**< [ 31: 28](RO/H) Setting for bits 147..144 of 180b ir25_trim. */ uint64_t trim24 : 4; /**< [ 35: 32](RO/H) Setting for bits 151..148 of 180b ir25_trim. */ uint64_t trim25 : 4; /**< [ 39: 36](RO/H) Setting for bits 155..152 of 180b ir25_trim. */ uint64_t trim26 : 4; /**< [ 43: 40](RO/H) Setting for bits 159..156 of 180b ir25_trim. */ uint64_t trim27 : 4; /**< [ 47: 44](RO/H) Setting for bits 163..160 of 180b ir25_trim. */ uint64_t trim28 : 4; /**< [ 51: 48](RO/H) Setting for bits 167..164 of 180b ir25_trim. */ uint64_t trim29 : 4; /**< [ 55: 52](RO/H) Setting for bits 171..168 of 180b ir25_trim. */ uint64_t trim30 : 4; /**< [ 59: 56](RO/H) Setting for bits 175..172 of 180b ir25_trim. */ uint64_t trim31 : 4; /**< [ 63: 60](RO/H) Setting for bits 179..176 of 180b ir25_trim. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_1_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_1_bsts bdk_gsernx_lanex_rx_itrim_1_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001be0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_1_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) bdk_gsernx_lanex_rx_itrim_1_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) "GSERNX_LANEX_RX_ITRIM_1_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_1_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_2_bcfg * * GSER Lane Receiver Ir25 Trim Override Value Settings Register 2 * ir25_trim override settings are in groups of 4 bits. These only take * effect when the corresponding enable bit(s) are set. */ union bdk_gsernx_lanex_rx_itrim_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t trim45_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 27..24 of 180b ir25_trim. */ uint64_t trim44_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 115..112 of 180b ir25_trim. */ uint64_t trim43_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 23..20 of 180b ir25_trim. */ uint64_t trim42_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 111..108 of 180b ir25_trim. */ uint64_t trim41_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 19..16 of 180b ir25_trim. */ uint64_t trim40_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 107..104 of 180b ir25_trim. */ uint64_t trim39_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 15..12 of 180b ir25_trim. */ uint64_t trim38_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 103..100 of 180b ir25_trim. */ uint64_t trim37_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 11..8 of 180b ir25_trim. */ uint64_t trim36_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 99..96 of 180b ir25_trim. */ uint64_t trim35_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 7..4 of 180b ir25_trim. */ uint64_t trim34_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 95..92 of 180b ir25_trim. */ uint64_t trim33_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 3..0 of 180b ir25_trim. */ uint64_t trim32_ovrd : 4; /**< [ 3: 0](R/W) Override setting for bits 91..88 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim32_ovrd : 4; /**< [ 3: 0](R/W) Override setting for bits 91..88 of 180b ir25_trim. */ uint64_t trim33_ovrd : 4; /**< [ 7: 4](R/W) Override setting for bits 3..0 of 180b ir25_trim. */ uint64_t trim34_ovrd : 4; /**< [ 11: 8](R/W) Override setting for bits 95..92 of 180b ir25_trim. */ uint64_t trim35_ovrd : 4; /**< [ 15: 12](R/W) Override setting for bits 7..4 of 180b ir25_trim. */ uint64_t trim36_ovrd : 4; /**< [ 19: 16](R/W) Override setting for bits 99..96 of 180b ir25_trim. */ uint64_t trim37_ovrd : 4; /**< [ 23: 20](R/W) Override setting for bits 11..8 of 180b ir25_trim. */ uint64_t trim38_ovrd : 4; /**< [ 27: 24](R/W) Override setting for bits 103..100 of 180b ir25_trim. */ uint64_t trim39_ovrd : 4; /**< [ 31: 28](R/W) Override setting for bits 15..12 of 180b ir25_trim. */ uint64_t trim40_ovrd : 4; /**< [ 35: 32](R/W) Override setting for bits 107..104 of 180b ir25_trim. */ uint64_t trim41_ovrd : 4; /**< [ 39: 36](R/W) Override setting for bits 19..16 of 180b ir25_trim. */ uint64_t trim42_ovrd : 4; /**< [ 43: 40](R/W) Override setting for bits 111..108 of 180b ir25_trim. */ uint64_t trim43_ovrd : 4; /**< [ 47: 44](R/W) Override setting for bits 23..20 of 180b ir25_trim. */ uint64_t trim44_ovrd : 4; /**< [ 51: 48](R/W) Override setting for bits 115..112 of 180b ir25_trim. */ uint64_t trim45_ovrd : 4; /**< [ 55: 52](R/W) Override setting for bits 27..24 of 180b ir25_trim. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_2_bcfg bdk_gsernx_lanex_rx_itrim_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001aa0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_2_bsts * * GSER Lane Receiver Ir25 Trim Settings Register 2 * These are the ir25_trim settings in use. ir25_trim settings are in groups of 4 bits. */ union bdk_gsernx_lanex_rx_itrim_2_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_2_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_56_63 : 8; uint64_t trim45 : 4; /**< [ 55: 52](RO/H) Setting for bits 27..24 of 180b ir25_trim. */ uint64_t trim44 : 4; /**< [ 51: 48](RO/H) Setting for bits 115..112 of 180b ir25_trim. */ uint64_t trim43 : 4; /**< [ 47: 44](RO/H) Setting for bits 23..20 of 180b ir25_trim. */ uint64_t trim42 : 4; /**< [ 43: 40](RO/H) Setting for bits 111..108 of 180b ir25_trim. */ uint64_t trim41 : 4; /**< [ 39: 36](RO/H) Setting for bits 19..16 of 180b ir25_trim. */ uint64_t trim40 : 4; /**< [ 35: 32](RO/H) Setting for bits 107..104 of 180b ir25_trim. */ uint64_t trim39 : 4; /**< [ 31: 28](RO/H) Setting for bits 15..12 of 180b ir25_trim. */ uint64_t trim38 : 4; /**< [ 27: 24](RO/H) Setting for bits 103..100 of 180b ir25_trim. */ uint64_t trim37 : 4; /**< [ 23: 20](RO/H) Setting for bits 11..8 of 180b ir25_trim. */ uint64_t trim36 : 4; /**< [ 19: 16](RO/H) Setting for bits 99..96 of 180b ir25_trim. */ uint64_t trim35 : 4; /**< [ 15: 12](RO/H) Setting for bits 7..4 of 180b ir25_trim. */ uint64_t trim34 : 4; /**< [ 11: 8](RO/H) Setting for bits 95..92 of 180b ir25_trim. */ uint64_t trim33 : 4; /**< [ 7: 4](RO/H) Setting for bits 3..0 of 180b ir25_trim. */ uint64_t trim32 : 4; /**< [ 3: 0](RO/H) Setting for bits 91..88 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim32 : 4; /**< [ 3: 0](RO/H) Setting for bits 91..88 of 180b ir25_trim. */ uint64_t trim33 : 4; /**< [ 7: 4](RO/H) Setting for bits 3..0 of 180b ir25_trim. */ uint64_t trim34 : 4; /**< [ 11: 8](RO/H) Setting for bits 95..92 of 180b ir25_trim. */ uint64_t trim35 : 4; /**< [ 15: 12](RO/H) Setting for bits 7..4 of 180b ir25_trim. */ uint64_t trim36 : 4; /**< [ 19: 16](RO/H) Setting for bits 99..96 of 180b ir25_trim. */ uint64_t trim37 : 4; /**< [ 23: 20](RO/H) Setting for bits 11..8 of 180b ir25_trim. */ uint64_t trim38 : 4; /**< [ 27: 24](RO/H) Setting for bits 103..100 of 180b ir25_trim. */ uint64_t trim39 : 4; /**< [ 31: 28](RO/H) Setting for bits 15..12 of 180b ir25_trim. */ uint64_t trim40 : 4; /**< [ 35: 32](RO/H) Setting for bits 107..104 of 180b ir25_trim. */ uint64_t trim41 : 4; /**< [ 39: 36](RO/H) Setting for bits 19..16 of 180b ir25_trim. */ uint64_t trim42 : 4; /**< [ 43: 40](RO/H) Setting for bits 111..108 of 180b ir25_trim. */ uint64_t trim43 : 4; /**< [ 47: 44](RO/H) Setting for bits 23..20 of 180b ir25_trim. */ uint64_t trim44 : 4; /**< [ 51: 48](RO/H) Setting for bits 115..112 of 180b ir25_trim. */ uint64_t trim45 : 4; /**< [ 55: 52](RO/H) Setting for bits 27..24 of 180b ir25_trim. */ uint64_t reserved_56_63 : 8; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_2_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_2_bsts bdk_gsernx_lanex_rx_itrim_2_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001bf0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_2_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) bdk_gsernx_lanex_rx_itrim_2_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) "GSERNX_LANEX_RX_ITRIM_2_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_2_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_3_bcfg * * GSER Lane Receiver Ir25 Trim Override Enables Register 0 * Enables in this register allow the corresponding override value setting to take * effect. */ union bdk_gsernx_lanex_rx_itrim_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t trim15_ovrd_en : 1; /**< [ 60: 60](R/W) Override enable for bits 87..84 of 180b ir25_trim. */ uint64_t reserved_57_59 : 3; uint64_t trim14_ovrd_en : 1; /**< [ 56: 56](R/W) Override enable for bits 83..80 of 180b ir25_trim. */ uint64_t reserved_53_55 : 3; uint64_t trim13_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 79..76 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim12_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 75..72 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim11_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 71..68 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim10_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 67..64 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim9_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 63..60 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim8_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 59..56 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim7_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 55..52 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim6_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 51..48 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim5_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 47..44 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim4_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 43..40 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim3_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 39..36 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim2_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 35..32 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim1_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 31..28 of 180b ir25_trim. */ uint64_t reserved_0_3 : 4; #else /* Word 0 - Little Endian */ uint64_t reserved_0_3 : 4; uint64_t trim1_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 31..28 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim2_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 35..32 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim3_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 39..36 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim4_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 43..40 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim5_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 47..44 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim6_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 51..48 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim7_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 55..52 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim8_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 59..56 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim9_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 63..60 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim10_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 67..64 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim11_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 71..68 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim12_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 75..72 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim13_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 79..76 of 180b ir25_trim. */ uint64_t reserved_53_55 : 3; uint64_t trim14_ovrd_en : 1; /**< [ 56: 56](R/W) Override enable for bits 83..80 of 180b ir25_trim. */ uint64_t reserved_57_59 : 3; uint64_t trim15_ovrd_en : 1; /**< [ 60: 60](R/W) Override enable for bits 87..84 of 180b ir25_trim. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_3_bcfg bdk_gsernx_lanex_rx_itrim_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001ab0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_4_bcfg * * GSER Lane Receiver Ir25 Trim Override Enables Register 1 * ir25_trim override settings are in groups of 4 bits. These only take * effect when the corresponding enable bit(s) are set. */ union bdk_gsernx_lanex_rx_itrim_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t trim31_ovrd_en : 1; /**< [ 60: 60](R/W) Override enable for bits 179..176 of 180b ir25_trim. */ uint64_t reserved_57_59 : 3; uint64_t trim30_ovrd_en : 1; /**< [ 56: 56](R/W) Override enable for bits 175..172 of 180b ir25_trim. */ uint64_t reserved_53_55 : 3; uint64_t trim29_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 171..168 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim28_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 167..164 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim27_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 163..160 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim26_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 159..156 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim25_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 155..152 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim24_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 151..148 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim23_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 147..144 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim22_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 143..140 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim21_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 139..136 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim20_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 135..132 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim19_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 131..128 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim18_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 127..124 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim17_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 123..120 of 180b ir25_trim. */ uint64_t reserved_1_3 : 3; uint64_t trim16_ovrd_en : 1; /**< [ 0: 0](R/W) Override enable for bits 119..116 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim16_ovrd_en : 1; /**< [ 0: 0](R/W) Override enable for bits 119..116 of 180b ir25_trim. */ uint64_t reserved_1_3 : 3; uint64_t trim17_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 123..120 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim18_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 127..124 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim19_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 131..128 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim20_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 135..132 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim21_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 139..136 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim22_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 143..140 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim23_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 147..144 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim24_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 151..148 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim25_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 155..152 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim26_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 159..156 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim27_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 163..160 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim28_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 167..164 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim29_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 171..168 of 180b ir25_trim. */ uint64_t reserved_53_55 : 3; uint64_t trim30_ovrd_en : 1; /**< [ 56: 56](R/W) Override enable for bits 175..172 of 180b ir25_trim. */ uint64_t reserved_57_59 : 3; uint64_t trim31_ovrd_en : 1; /**< [ 60: 60](R/W) Override enable for bits 179..176 of 180b ir25_trim. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_4_bcfg bdk_gsernx_lanex_rx_itrim_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001ac0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_itrim_5_bcfg * * GSER Lane Receiver Ir25 Trim Override Enables Register 2 * ir25_trim override settings are in groups of 4 bits. These only take * effect when the corresponding enable bit(s) are set. */ union bdk_gsernx_lanex_rx_itrim_5_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_itrim_5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_53_63 : 11; uint64_t trim45_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 27..24 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim44_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 115..112 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim43_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 23..20 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim42_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 111..108 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim41_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 19..16 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim40_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 107..104 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim39_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 15..12 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim38_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 103..100 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim37_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 11..8 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim36_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 99..96 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim35_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 7..4 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim34_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 95..92 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim33_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 3..0 of 180b ir25_trim. */ uint64_t reserved_1_3 : 3; uint64_t trim32_ovrd_en : 1; /**< [ 0: 0](R/W) Override enable for bits 91..88 of 180b ir25_trim. */ #else /* Word 0 - Little Endian */ uint64_t trim32_ovrd_en : 1; /**< [ 0: 0](R/W) Override enable for bits 91..88 of 180b ir25_trim. */ uint64_t reserved_1_3 : 3; uint64_t trim33_ovrd_en : 1; /**< [ 4: 4](R/W) Override enable for bits 3..0 of 180b ir25_trim. */ uint64_t reserved_5_7 : 3; uint64_t trim34_ovrd_en : 1; /**< [ 8: 8](R/W) Override enable for bits 95..92 of 180b ir25_trim. */ uint64_t reserved_9_11 : 3; uint64_t trim35_ovrd_en : 1; /**< [ 12: 12](R/W) Override enable for bits 7..4 of 180b ir25_trim. */ uint64_t reserved_13_15 : 3; uint64_t trim36_ovrd_en : 1; /**< [ 16: 16](R/W) Override enable for bits 99..96 of 180b ir25_trim. */ uint64_t reserved_17_19 : 3; uint64_t trim37_ovrd_en : 1; /**< [ 20: 20](R/W) Override enable for bits 11..8 of 180b ir25_trim. */ uint64_t reserved_21_23 : 3; uint64_t trim38_ovrd_en : 1; /**< [ 24: 24](R/W) Override enable for bits 103..100 of 180b ir25_trim. */ uint64_t reserved_25_27 : 3; uint64_t trim39_ovrd_en : 1; /**< [ 28: 28](R/W) Override enable for bits 15..12 of 180b ir25_trim. */ uint64_t reserved_29_31 : 3; uint64_t trim40_ovrd_en : 1; /**< [ 32: 32](R/W) Override enable for bits 107..104 of 180b ir25_trim. */ uint64_t reserved_33_35 : 3; uint64_t trim41_ovrd_en : 1; /**< [ 36: 36](R/W) Override enable for bits 19..16 of 180b ir25_trim. */ uint64_t reserved_37_39 : 3; uint64_t trim42_ovrd_en : 1; /**< [ 40: 40](R/W) Override enable for bits 111..108 of 180b ir25_trim. */ uint64_t reserved_41_43 : 3; uint64_t trim43_ovrd_en : 1; /**< [ 44: 44](R/W) Override enable for bits 23..20 of 180b ir25_trim. */ uint64_t reserved_45_47 : 3; uint64_t trim44_ovrd_en : 1; /**< [ 48: 48](R/W) Override enable for bits 115..112 of 180b ir25_trim. */ uint64_t reserved_49_51 : 3; uint64_t trim45_ovrd_en : 1; /**< [ 52: 52](R/W) Override enable for bits 27..24 of 180b ir25_trim. */ uint64_t reserved_53_63 : 11; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_itrim_5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_itrim_5_bcfg bdk_gsernx_lanex_rx_itrim_5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001ad0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ITRIM_5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) bdk_gsernx_lanex_rx_itrim_5_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) "GSERNX_LANEX_RX_ITRIM_5_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ITRIM_5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_margin_dbg_cnt * * GSER Lane RX Margining Debug Control Register * CSR basec control of Phy initiated read/write operations to the PEM. This is a * debug field that can be used to check the results of an RX Margining sequence. * The expecation is that the PEM FSM will initiate the transactions and the results * will be placed in MAC/PEM CSRs using the p2m_mesage_bus. However, ability to * read/write these registers into the processor is not clear from Synopsys's MAC * spec. As such, this feature was added to allow an RSL read/write of these registers. * Protocal is Ready & Done based. A transaction is updated in the CSR registers and the * Ready bit is set high. Once it is set high, the mbus_fsm will execute the transaction * and assert the Done bit when done or when results are available in * GSERN()_LANE()_RX_MARGIN_DBG_OBS. */ union bdk_gsernx_lanex_rx_margin_dbg_cnt { uint64_t u; struct bdk_gsernx_lanex_rx_margin_dbg_cnt_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t ready : 1; /**< [ 63: 63](R/W) Handshake bit to indicate there is a valid request from the RSL bus to transact on the mesage bus. Setting this bit triggers the mbus_fsm to execute the transaction. Once a transaction is done, this bit has to be cleared before another transaction is issued. 0 = No mbus transactions are outstanding. 1 = An mbus transaction is outstanding. */ uint64_t write_commit : 1; /**< [ 62: 62](R/W) This bit will determin to the mbus transactor if the write operation is a commited write or an uncommited write. When doing a read, this bit is a don't care. 0 = If executing a write, this write operation is not-commited type. 1 = If executing a write, this write operation is a commited type. */ uint64_t read_writen : 1; /**< [ 61: 61](R/W) This bit indicates if we are doing a read or write operation. 0 = Performing a write operation. 1 = Performing a read operation. */ uint64_t reserved_20_60 : 41; uint64_t address : 12; /**< [ 19: 8](R/W) The 12-bit field of address to be send to the MAC/PEM if we are peforming either a read or write operation. */ uint64_t data : 8; /**< [ 7: 0](R/W) The 8-bit field of Data to be send to the MAC/PEM if we are peforming a write operation. */ #else /* Word 0 - Little Endian */ uint64_t data : 8; /**< [ 7: 0](R/W) The 8-bit field of Data to be send to the MAC/PEM if we are peforming a write operation. */ uint64_t address : 12; /**< [ 19: 8](R/W) The 12-bit field of address to be send to the MAC/PEM if we are peforming either a read or write operation. */ uint64_t reserved_20_60 : 41; uint64_t read_writen : 1; /**< [ 61: 61](R/W) This bit indicates if we are doing a read or write operation. 0 = Performing a write operation. 1 = Performing a read operation. */ uint64_t write_commit : 1; /**< [ 62: 62](R/W) This bit will determin to the mbus transactor if the write operation is a commited write or an uncommited write. When doing a read, this bit is a don't care. 0 = If executing a write, this write operation is not-commited type. 1 = If executing a write, this write operation is a commited type. */ uint64_t ready : 1; /**< [ 63: 63](R/W) Handshake bit to indicate there is a valid request from the RSL bus to transact on the mesage bus. Setting this bit triggers the mbus_fsm to execute the transaction. Once a transaction is done, this bit has to be cleared before another transaction is issued. 0 = No mbus transactions are outstanding. 1 = An mbus transaction is outstanding. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_margin_dbg_cnt_s cn; */ }; typedef union bdk_gsernx_lanex_rx_margin_dbg_cnt bdk_gsernx_lanex_rx_margin_dbg_cnt_t; static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001220ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_MARGIN_DBG_CNT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) bdk_gsernx_lanex_rx_margin_dbg_cnt_t #define bustype_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) "GSERNX_LANEX_RX_MARGIN_DBG_CNT" #define device_bar_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_MARGIN_DBG_CNT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_margin_dbg_obs * * GSER Lane RX Margining Debug Result Register * Observes the results of an mbus_messaging transaction. The results are expected to be * valid only when the Done bit is asserted. */ union bdk_gsernx_lanex_rx_margin_dbg_obs { uint64_t u; struct bdk_gsernx_lanex_rx_margin_dbg_obs_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t done : 1; /**< [ 63: 63](RO/H) Done bit indicating that the outstanding transaction on the mbus has finished and if there are results that are expected, they will be presented to this register. The results are not sticky, so a copy needs to be moved out of this register to another location before de-asserting the READY bit in GSERN()_LANE()_RX_MARGIN_DBG_CNT. De-assertign the READY bit will force this bit low again and remove the data being presented to this CSR inputs. */ uint64_t reserved_20_62 : 43; uint64_t address : 12; /**< [ 19: 8](RO/H) Observed Address a read was completed against or location of the write operation being executed. */ uint64_t data : 8; /**< [ 7: 0](RO/H) Observed Data read back from the MAC/PEM at the completion of the read operation */ #else /* Word 0 - Little Endian */ uint64_t data : 8; /**< [ 7: 0](RO/H) Observed Data read back from the MAC/PEM at the completion of the read operation */ uint64_t address : 12; /**< [ 19: 8](RO/H) Observed Address a read was completed against or location of the write operation being executed. */ uint64_t reserved_20_62 : 43; uint64_t done : 1; /**< [ 63: 63](RO/H) Done bit indicating that the outstanding transaction on the mbus has finished and if there are results that are expected, they will be presented to this register. The results are not sticky, so a copy needs to be moved out of this register to another location before de-asserting the READY bit in GSERN()_LANE()_RX_MARGIN_DBG_CNT. De-assertign the READY bit will force this bit low again and remove the data being presented to this CSR inputs. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_margin_dbg_obs_s cn; */ }; typedef union bdk_gsernx_lanex_rx_margin_dbg_obs bdk_gsernx_lanex_rx_margin_dbg_obs_t; static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001230ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_MARGIN_DBG_OBS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) bdk_gsernx_lanex_rx_margin_dbg_obs_t #define bustype_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) "GSERNX_LANEX_RX_MARGIN_DBG_OBS" #define device_bar_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_MARGIN_DBG_OBS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_margin_phy_cnt * * GSER Lane RX Margining Overrides of Phy MBUS margining bits Register * Can override existing values generated by the RX Margining FSM. This feature will * allow the RSL interface to provide its own values to the MAC/PEM Phy CSRs for the * mbus interface. This is strictly a debug method for sending the mbus CSRs in the * phy to the MAC/PEM in a predictable method. */ union bdk_gsernx_lanex_rx_margin_phy_cnt { uint64_t u; struct bdk_gsernx_lanex_rx_margin_phy_cnt_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t override_margining_fsm : 1; /**< [ 63: 63](R/W) The bit that when asserted to 1'b1, will enable the values of this register to replace the values generated by the RX Margining FSM. */ uint64_t sample_count_reset : 1; /**< [ 62: 62](R/W) Resets the sample count register for the RX Margining FSM. */ uint64_t error_count_reset : 1; /**< [ 61: 61](R/W) Resets the error count register for the RX Margining FSM. */ uint64_t margin_voltage_timing : 1; /**< [ 60: 60](R/W) Sets whitch type of margining to perfomr. 1'b0 for timing 1'b1 for voltage */ uint64_t start_margining : 1; /**< [ 59: 59](R/W) Enables margining FSM to operate. */ uint64_t margin_direction : 1; /**< [ 58: 58](R/W) Sets the direction of the margining. For timing, a 1'b0 steps to the left a 1'b1 steps to the right. For voltage, 1'b0 steps voltage up and 1'b1 steps voltage down. */ uint64_t margin_offset : 7; /**< [ 57: 51](R/W) Margining offset for the sample point. */ uint64_t reserved_48_50 : 3; uint64_t sample_count_ovr : 40; /**< [ 47: 8](R/W) Margining sample count size. Default is 1K samples, but can be updated to any value with in the 40-bit length. */ uint64_t elastic_buffer_depth : 8; /**< [ 7: 0](R/W) Sets the margining buffer depth. Feature is not used */ #else /* Word 0 - Little Endian */ uint64_t elastic_buffer_depth : 8; /**< [ 7: 0](R/W) Sets the margining buffer depth. Feature is not used */ uint64_t sample_count_ovr : 40; /**< [ 47: 8](R/W) Margining sample count size. Default is 1K samples, but can be updated to any value with in the 40-bit length. */ uint64_t reserved_48_50 : 3; uint64_t margin_offset : 7; /**< [ 57: 51](R/W) Margining offset for the sample point. */ uint64_t margin_direction : 1; /**< [ 58: 58](R/W) Sets the direction of the margining. For timing, a 1'b0 steps to the left a 1'b1 steps to the right. For voltage, 1'b0 steps voltage up and 1'b1 steps voltage down. */ uint64_t start_margining : 1; /**< [ 59: 59](R/W) Enables margining FSM to operate. */ uint64_t margin_voltage_timing : 1; /**< [ 60: 60](R/W) Sets whitch type of margining to perfomr. 1'b0 for timing 1'b1 for voltage */ uint64_t error_count_reset : 1; /**< [ 61: 61](R/W) Resets the error count register for the RX Margining FSM. */ uint64_t sample_count_reset : 1; /**< [ 62: 62](R/W) Resets the sample count register for the RX Margining FSM. */ uint64_t override_margining_fsm : 1; /**< [ 63: 63](R/W) The bit that when asserted to 1'b1, will enable the values of this register to replace the values generated by the RX Margining FSM. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_margin_phy_cnt_s cn; */ }; typedef union bdk_gsernx_lanex_rx_margin_phy_cnt bdk_gsernx_lanex_rx_margin_phy_cnt_t; static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001330ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_MARGIN_PHY_CNT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) bdk_gsernx_lanex_rx_margin_phy_cnt_t #define bustype_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) "GSERNX_LANEX_RX_MARGIN_PHY_CNT" #define device_bar_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_MARGIN_PHY_CNT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_margin_phy_obs * * GSER Lane RX Margining Observe of Phy MBUS margining bits Register * Observes the status of phy mbus CSRs. The results are expected to be changed by the * margining FSM. This is strictly an observe path to the mbus CSRs in the phy. */ union bdk_gsernx_lanex_rx_margin_phy_obs { uint64_t u; struct bdk_gsernx_lanex_rx_margin_phy_obs_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t margin_nak : 1; /**< [ 63: 63](RO/H) Asserted when the margining setup is out of range for the margining hardware to perform. */ uint64_t margin_status : 1; /**< [ 62: 62](RO/H) Indicates the status of the margining FSM. If asserted, then there is an open Reciever Margining transaction being executed. */ uint64_t elastic_buffer_status : 1; /**< [ 61: 61](RO/H) Indicates the status of the elastic buffer. This feature is not supported and will always return 0. */ uint64_t reserved_15_60 : 46; uint64_t sample_count : 7; /**< [ 14: 8](RO/H) Observed Address a read was completed against or location of the write operation being executed. */ uint64_t reserved_6_7 : 2; uint64_t error_count : 6; /**< [ 5: 0](RO/H) Observed Data read back from the MAC/PEM at the completion of the read operation */ #else /* Word 0 - Little Endian */ uint64_t error_count : 6; /**< [ 5: 0](RO/H) Observed Data read back from the MAC/PEM at the completion of the read operation */ uint64_t reserved_6_7 : 2; uint64_t sample_count : 7; /**< [ 14: 8](RO/H) Observed Address a read was completed against or location of the write operation being executed. */ uint64_t reserved_15_60 : 46; uint64_t elastic_buffer_status : 1; /**< [ 61: 61](RO/H) Indicates the status of the elastic buffer. This feature is not supported and will always return 0. */ uint64_t margin_status : 1; /**< [ 62: 62](RO/H) Indicates the status of the margining FSM. If asserted, then there is an open Reciever Margining transaction being executed. */ uint64_t margin_nak : 1; /**< [ 63: 63](RO/H) Asserted when the margining setup is out of range for the margining hardware to perform. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_margin_phy_obs_s cn; */ }; typedef union bdk_gsernx_lanex_rx_margin_phy_obs bdk_gsernx_lanex_rx_margin_phy_obs_t; static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001430ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_MARGIN_PHY_OBS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) bdk_gsernx_lanex_rx_margin_phy_obs_t #define bustype_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) "GSERNX_LANEX_RX_MARGIN_PHY_OBS" #define device_bar_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_MARGIN_PHY_OBS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_1_bcfg * * GSER Lane Receiver Offset Control Group 1 Register * Register controls for offset overrides from os0_0 through os3_1. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_os_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_os_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t os3_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS3_1_OVRD]. */ uint64_t reserved_62 : 1; uint64_t os3_1_ovrd : 6; /**< [ 61: 56](R/W) os3_1 offset compensation override bits. */ uint64_t os3_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS3_0_OVRD]. */ uint64_t reserved_54 : 1; uint64_t os3_0_ovrd : 6; /**< [ 53: 48](R/W) os3_0 offset compensation override bits. */ uint64_t os2_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS2_1_OVRD]. */ uint64_t reserved_46 : 1; uint64_t os2_1_ovrd : 6; /**< [ 45: 40](R/W) os2_1 offset compensation override bits. */ uint64_t os2_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS2_0_OVRD]. */ uint64_t reserved_38 : 1; uint64_t os2_0_ovrd : 6; /**< [ 37: 32](R/W) os2_0 offset compensation override bits. */ uint64_t os1_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS1_1_OVRD]. */ uint64_t reserved_30 : 1; uint64_t os1_1_ovrd : 6; /**< [ 29: 24](R/W) os1_1 offset compensation override bits. */ uint64_t os1_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS1_0_OVRD]. */ uint64_t reserved_22 : 1; uint64_t os1_0_ovrd : 6; /**< [ 21: 16](R/W) os1_0 offset compensation override bits. */ uint64_t os0_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS0_1_OVRD]. */ uint64_t reserved_14 : 1; uint64_t os0_1_ovrd : 6; /**< [ 13: 8](R/W) os0_1 offset compensation override bits. */ uint64_t os0_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS0_0_OVRD]. */ uint64_t reserved_6 : 1; uint64_t os0_0_ovrd : 6; /**< [ 5: 0](R/W) os0_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os0_0_ovrd : 6; /**< [ 5: 0](R/W) os0_0 offset compensation override bits. */ uint64_t reserved_6 : 1; uint64_t os0_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS0_0_OVRD]. */ uint64_t os0_1_ovrd : 6; /**< [ 13: 8](R/W) os0_1 offset compensation override bits. */ uint64_t reserved_14 : 1; uint64_t os0_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS0_1_OVRD]. */ uint64_t os1_0_ovrd : 6; /**< [ 21: 16](R/W) os1_0 offset compensation override bits. */ uint64_t reserved_22 : 1; uint64_t os1_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS1_0_OVRD]. */ uint64_t os1_1_ovrd : 6; /**< [ 29: 24](R/W) os1_1 offset compensation override bits. */ uint64_t reserved_30 : 1; uint64_t os1_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS1_1_OVRD]. */ uint64_t os2_0_ovrd : 6; /**< [ 37: 32](R/W) os2_0 offset compensation override bits. */ uint64_t reserved_38 : 1; uint64_t os2_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS2_0_OVRD]. */ uint64_t os2_1_ovrd : 6; /**< [ 45: 40](R/W) os2_1 offset compensation override bits. */ uint64_t reserved_46 : 1; uint64_t os2_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS2_1_OVRD]. */ uint64_t os3_0_ovrd : 6; /**< [ 53: 48](R/W) os3_0 offset compensation override bits. */ uint64_t reserved_54 : 1; uint64_t os3_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS3_0_OVRD]. */ uint64_t os3_1_ovrd : 6; /**< [ 61: 56](R/W) os3_1 offset compensation override bits. */ uint64_t reserved_62 : 1; uint64_t os3_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS3_1_OVRD]. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_1_bcfg bdk_gsernx_lanex_rx_os_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001800ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) bdk_gsernx_lanex_rx_os_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) "GSERNX_LANEX_RX_OS_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_1_bsts * * GSER Lane Receiver Offset Status Group 1 Register * Status for offset settings actually in use (either calibration results * or overrides) from os0_0 through os3_1. Results in all fields of this * register are valid only if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] and * GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] are asserted or if the corresponding * override enable bit is asserted. */ union bdk_gsernx_lanex_rx_os_1_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_os_1_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t os3_1 : 6; /**< [ 61: 56](RO/H) os3_1 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os3_0 : 6; /**< [ 53: 48](RO/H) os3_0 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os2_1 : 6; /**< [ 45: 40](RO/H) os2_1 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os2_0 : 6; /**< [ 37: 32](RO/H) os2_0 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os1_1 : 6; /**< [ 29: 24](RO/H) os1_1 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os1_0 : 6; /**< [ 21: 16](RO/H) os1_0 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os0_1 : 6; /**< [ 13: 8](RO/H) os0_1 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os0_0 : 6; /**< [ 5: 0](RO/H) os0_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os0_0 : 6; /**< [ 5: 0](RO/H) os0_0 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os0_1 : 6; /**< [ 13: 8](RO/H) os0_1 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os1_0 : 6; /**< [ 21: 16](RO/H) os1_0 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os1_1 : 6; /**< [ 29: 24](RO/H) os1_1 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os2_0 : 6; /**< [ 37: 32](RO/H) os2_0 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os2_1 : 6; /**< [ 45: 40](RO/H) os2_1 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os3_0 : 6; /**< [ 53: 48](RO/H) os3_0 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os3_1 : 6; /**< [ 61: 56](RO/H) os3_1 offset compensation override bits. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_1_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_1_bsts bdk_gsernx_lanex_rx_os_1_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_1_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_1_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001940ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_1_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) bdk_gsernx_lanex_rx_os_1_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) "GSERNX_LANEX_RX_OS_1_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_1_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_2_bcfg * * GSER Lane Receiver Offset Control Group 2 Register * Register controls for offset overrides from os4_0 through os7_1. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_os_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_os_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t os7_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS7_1_OVRD]. */ uint64_t reserved_62 : 1; uint64_t os7_1_ovrd : 6; /**< [ 61: 56](R/W) os7_1 offset compensation override bits. */ uint64_t os7_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS7_0_OVRD]. */ uint64_t reserved_54 : 1; uint64_t os7_0_ovrd : 6; /**< [ 53: 48](R/W) os7_0 offset compensation override bits. */ uint64_t os6_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS6_1_OVRD]. */ uint64_t reserved_46 : 1; uint64_t os6_1_ovrd : 6; /**< [ 45: 40](R/W) os6_1 offset compensation override bits. */ uint64_t os6_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS6_0_OVRD]. */ uint64_t reserved_38 : 1; uint64_t os6_0_ovrd : 6; /**< [ 37: 32](R/W) os6_0 offset compensation override bits. */ uint64_t os5_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS5_1_OVRD]. */ uint64_t reserved_30 : 1; uint64_t os5_1_ovrd : 6; /**< [ 29: 24](R/W) os5_1 offset compensation override bits. */ uint64_t os5_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS5_0_OVRD]. */ uint64_t reserved_22 : 1; uint64_t os5_0_ovrd : 6; /**< [ 21: 16](R/W) os5_0 offset compensation override bits. */ uint64_t os4_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS4_1_OVRD]. */ uint64_t reserved_14 : 1; uint64_t os4_1_ovrd : 6; /**< [ 13: 8](R/W) os4_1 offset compensation override bits. */ uint64_t os4_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS4_0_OVRD]. */ uint64_t reserved_6 : 1; uint64_t os4_0_ovrd : 6; /**< [ 5: 0](R/W) os4_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os4_0_ovrd : 6; /**< [ 5: 0](R/W) os4_0 offset compensation override bits. */ uint64_t reserved_6 : 1; uint64_t os4_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS4_0_OVRD]. */ uint64_t os4_1_ovrd : 6; /**< [ 13: 8](R/W) os4_1 offset compensation override bits. */ uint64_t reserved_14 : 1; uint64_t os4_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS4_1_OVRD]. */ uint64_t os5_0_ovrd : 6; /**< [ 21: 16](R/W) os5_0 offset compensation override bits. */ uint64_t reserved_22 : 1; uint64_t os5_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS5_0_OVRD]. */ uint64_t os5_1_ovrd : 6; /**< [ 29: 24](R/W) os5_1 offset compensation override bits. */ uint64_t reserved_30 : 1; uint64_t os5_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS5_1_OVRD]. */ uint64_t os6_0_ovrd : 6; /**< [ 37: 32](R/W) os6_0 offset compensation override bits. */ uint64_t reserved_38 : 1; uint64_t os6_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS6_0_OVRD]. */ uint64_t os6_1_ovrd : 6; /**< [ 45: 40](R/W) os6_1 offset compensation override bits. */ uint64_t reserved_46 : 1; uint64_t os6_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS6_1_OVRD]. */ uint64_t os7_0_ovrd : 6; /**< [ 53: 48](R/W) os7_0 offset compensation override bits. */ uint64_t reserved_54 : 1; uint64_t os7_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS7_0_OVRD]. */ uint64_t os7_1_ovrd : 6; /**< [ 61: 56](R/W) os7_1 offset compensation override bits. */ uint64_t reserved_62 : 1; uint64_t os7_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS7_1_OVRD]. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_2_bcfg bdk_gsernx_lanex_rx_os_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001810ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) bdk_gsernx_lanex_rx_os_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) "GSERNX_LANEX_RX_OS_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_2_bsts * * GSER Lane Receiver Offset Status Group 2 Register * Status for offset settings actually in use (either calibration results * or overrides) from os4_0 through os7_1. Results in all fields of this * register are valid only if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] and * GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] are asserted or if the corresponding * override enable bit is asserted. */ union bdk_gsernx_lanex_rx_os_2_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_os_2_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t os7_1 : 6; /**< [ 61: 56](RO/H) os7_1 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os7_0 : 6; /**< [ 53: 48](RO/H) os7_0 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os6_1 : 6; /**< [ 45: 40](RO/H) os6_1 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os6_0 : 6; /**< [ 37: 32](RO/H) os6_0 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os5_1 : 6; /**< [ 29: 24](RO/H) os5_1 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os5_0 : 6; /**< [ 21: 16](RO/H) os5_0 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os4_1 : 6; /**< [ 13: 8](RO/H) os4_1 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os4_0 : 6; /**< [ 5: 0](RO/H) os4_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os4_0 : 6; /**< [ 5: 0](RO/H) os4_0 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os4_1 : 6; /**< [ 13: 8](RO/H) os4_1 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os5_0 : 6; /**< [ 21: 16](RO/H) os5_0 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os5_1 : 6; /**< [ 29: 24](RO/H) os5_1 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os6_0 : 6; /**< [ 37: 32](RO/H) os6_0 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os6_1 : 6; /**< [ 45: 40](RO/H) os6_1 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os7_0 : 6; /**< [ 53: 48](RO/H) os7_0 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os7_1 : 6; /**< [ 61: 56](RO/H) os7_1 offset compensation override bits. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_2_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_2_bsts bdk_gsernx_lanex_rx_os_2_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_2_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_2_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001950ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_2_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) bdk_gsernx_lanex_rx_os_2_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) "GSERNX_LANEX_RX_OS_2_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_2_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_3_bcfg * * GSER Lane Receiver Offset Control Group 3 Register * Register controls for offset overrides from os8_0 through os11_1. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_os_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_os_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t os11_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS11_1_OVRD]. */ uint64_t reserved_62 : 1; uint64_t os11_1_ovrd : 6; /**< [ 61: 56](R/W) os11_1 offset compensation override bits. */ uint64_t os11_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS11_0_OVRD]. */ uint64_t reserved_54 : 1; uint64_t os11_0_ovrd : 6; /**< [ 53: 48](R/W) os11_0 offset compensation override bits. */ uint64_t os10_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS10_1_OVRD]. */ uint64_t reserved_46 : 1; uint64_t os10_1_ovrd : 6; /**< [ 45: 40](R/W) os10_1 offset compensation override bits. */ uint64_t os10_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS10_0_OVRD]. */ uint64_t reserved_38 : 1; uint64_t os10_0_ovrd : 6; /**< [ 37: 32](R/W) os10_0 offset compensation override bits. */ uint64_t os9_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS9_1_OVRD]. */ uint64_t reserved_30 : 1; uint64_t os9_1_ovrd : 6; /**< [ 29: 24](R/W) os9_1 offset compensation override bits. */ uint64_t os9_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS9_0_OVRD]. */ uint64_t reserved_22 : 1; uint64_t os9_0_ovrd : 6; /**< [ 21: 16](R/W) os9_0 offset compensation override bits. */ uint64_t os8_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS8_1_OVRD]. */ uint64_t reserved_14 : 1; uint64_t os8_1_ovrd : 6; /**< [ 13: 8](R/W) os8_1 offset compensation override bits. */ uint64_t os8_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS8_0_OVRD]. */ uint64_t reserved_6 : 1; uint64_t os8_0_ovrd : 6; /**< [ 5: 0](R/W) os8_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os8_0_ovrd : 6; /**< [ 5: 0](R/W) os8_0 offset compensation override bits. */ uint64_t reserved_6 : 1; uint64_t os8_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS8_0_OVRD]. */ uint64_t os8_1_ovrd : 6; /**< [ 13: 8](R/W) os8_1 offset compensation override bits. */ uint64_t reserved_14 : 1; uint64_t os8_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS8_1_OVRD]. */ uint64_t os9_0_ovrd : 6; /**< [ 21: 16](R/W) os9_0 offset compensation override bits. */ uint64_t reserved_22 : 1; uint64_t os9_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS9_0_OVRD]. */ uint64_t os9_1_ovrd : 6; /**< [ 29: 24](R/W) os9_1 offset compensation override bits. */ uint64_t reserved_30 : 1; uint64_t os9_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS9_1_OVRD]. */ uint64_t os10_0_ovrd : 6; /**< [ 37: 32](R/W) os10_0 offset compensation override bits. */ uint64_t reserved_38 : 1; uint64_t os10_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS10_0_OVRD]. */ uint64_t os10_1_ovrd : 6; /**< [ 45: 40](R/W) os10_1 offset compensation override bits. */ uint64_t reserved_46 : 1; uint64_t os10_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS10_1_OVRD]. */ uint64_t os11_0_ovrd : 6; /**< [ 53: 48](R/W) os11_0 offset compensation override bits. */ uint64_t reserved_54 : 1; uint64_t os11_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS11_0_OVRD]. */ uint64_t os11_1_ovrd : 6; /**< [ 61: 56](R/W) os11_1 offset compensation override bits. */ uint64_t reserved_62 : 1; uint64_t os11_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS11_1_OVRD]. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_3_bcfg bdk_gsernx_lanex_rx_os_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001820ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) bdk_gsernx_lanex_rx_os_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) "GSERNX_LANEX_RX_OS_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_3_bsts * * GSER Lane Receiver Offset Status Group 3 Register * Status for offset settings actually in use (either calibration results * or overrides) from os8_0 through os11_1. Results in all fields of this * register are valid only if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] and * GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] are asserted or if the corresponding * override enable bit is asserted. */ union bdk_gsernx_lanex_rx_os_3_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_os_3_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t os11_1 : 6; /**< [ 61: 56](RO/H) os11_1 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os11_0 : 6; /**< [ 53: 48](RO/H) os11_0 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os10_1 : 6; /**< [ 45: 40](RO/H) os10_1 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os10_0 : 6; /**< [ 37: 32](RO/H) os10_0 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os9_1 : 6; /**< [ 29: 24](RO/H) os9_1 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os9_0 : 6; /**< [ 21: 16](RO/H) os9_0 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os8_1 : 6; /**< [ 13: 8](RO/H) os8_1 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os8_0 : 6; /**< [ 5: 0](RO/H) os8_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os8_0 : 6; /**< [ 5: 0](RO/H) os8_0 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os8_1 : 6; /**< [ 13: 8](RO/H) os8_1 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os9_0 : 6; /**< [ 21: 16](RO/H) os9_0 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os9_1 : 6; /**< [ 29: 24](RO/H) os9_1 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os10_0 : 6; /**< [ 37: 32](RO/H) os10_0 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os10_1 : 6; /**< [ 45: 40](RO/H) os10_1 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os11_0 : 6; /**< [ 53: 48](RO/H) os11_0 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os11_1 : 6; /**< [ 61: 56](RO/H) os11_1 offset compensation override bits. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_3_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_3_bsts bdk_gsernx_lanex_rx_os_3_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_3_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_3_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001960ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_3_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) bdk_gsernx_lanex_rx_os_3_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) "GSERNX_LANEX_RX_OS_3_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_3_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_4_bcfg * * GSER Lane Receiver Offset Control Group 4 Register * Register controls for offset overrides from os12_0 through os15_1. Each * override setting has a corresponding enable bit which will cause the * calibration control logic to use the override register setting instead * of the calibration result. */ union bdk_gsernx_lanex_rx_os_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_os_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t os15_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS15_1_OVRD]. */ uint64_t reserved_62 : 1; uint64_t os15_1_ovrd : 6; /**< [ 61: 56](R/W) os15_1 offset compensation override bits. */ uint64_t os15_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS15_0_OVRD]. */ uint64_t reserved_54 : 1; uint64_t os15_0_ovrd : 6; /**< [ 53: 48](R/W) os15_0 offset compensation override bits. */ uint64_t os14_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS14_1_OVRD]. */ uint64_t reserved_46 : 1; uint64_t os14_1_ovrd : 6; /**< [ 45: 40](R/W) os10_1 offset compensation override bits. */ uint64_t os14_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS14_0_OVRD]. */ uint64_t reserved_38 : 1; uint64_t os14_0_ovrd : 6; /**< [ 37: 32](R/W) os14_0 offset compensation override bits. */ uint64_t os13_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS13_1_OVRD]. */ uint64_t reserved_30 : 1; uint64_t os13_1_ovrd : 6; /**< [ 29: 24](R/W) os13_1 offset compensation override bits. */ uint64_t os13_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS13_0_OVRD]. */ uint64_t reserved_22 : 1; uint64_t os13_0_ovrd : 6; /**< [ 21: 16](R/W) os13_0 offset compensation override bits. */ uint64_t os12_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS12_1_OVRD]. */ uint64_t reserved_14 : 1; uint64_t os12_1_ovrd : 6; /**< [ 13: 8](R/W) os12_1 offset compensation override bits. */ uint64_t os12_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS12_0_OVRD]. */ uint64_t reserved_6 : 1; uint64_t os12_0_ovrd : 6; /**< [ 5: 0](R/W) os12_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os12_0_ovrd : 6; /**< [ 5: 0](R/W) os12_0 offset compensation override bits. */ uint64_t reserved_6 : 1; uint64_t os12_0_ovrd_en : 1; /**< [ 7: 7](R/W) Enable use of [OS12_0_OVRD]. */ uint64_t os12_1_ovrd : 6; /**< [ 13: 8](R/W) os12_1 offset compensation override bits. */ uint64_t reserved_14 : 1; uint64_t os12_1_ovrd_en : 1; /**< [ 15: 15](R/W) Enable use of [OS12_1_OVRD]. */ uint64_t os13_0_ovrd : 6; /**< [ 21: 16](R/W) os13_0 offset compensation override bits. */ uint64_t reserved_22 : 1; uint64_t os13_0_ovrd_en : 1; /**< [ 23: 23](R/W) Enable use of [OS13_0_OVRD]. */ uint64_t os13_1_ovrd : 6; /**< [ 29: 24](R/W) os13_1 offset compensation override bits. */ uint64_t reserved_30 : 1; uint64_t os13_1_ovrd_en : 1; /**< [ 31: 31](R/W) Enable use of [OS13_1_OVRD]. */ uint64_t os14_0_ovrd : 6; /**< [ 37: 32](R/W) os14_0 offset compensation override bits. */ uint64_t reserved_38 : 1; uint64_t os14_0_ovrd_en : 1; /**< [ 39: 39](R/W) Enable use of [OS14_0_OVRD]. */ uint64_t os14_1_ovrd : 6; /**< [ 45: 40](R/W) os10_1 offset compensation override bits. */ uint64_t reserved_46 : 1; uint64_t os14_1_ovrd_en : 1; /**< [ 47: 47](R/W) Enable use of [OS14_1_OVRD]. */ uint64_t os15_0_ovrd : 6; /**< [ 53: 48](R/W) os15_0 offset compensation override bits. */ uint64_t reserved_54 : 1; uint64_t os15_0_ovrd_en : 1; /**< [ 55: 55](R/W) Enable use of [OS15_0_OVRD]. */ uint64_t os15_1_ovrd : 6; /**< [ 61: 56](R/W) os15_1 offset compensation override bits. */ uint64_t reserved_62 : 1; uint64_t os15_1_ovrd_en : 1; /**< [ 63: 63](R/W) Enable use of [OS15_1_OVRD]. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_4_bcfg bdk_gsernx_lanex_rx_os_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001830ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) bdk_gsernx_lanex_rx_os_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) "GSERNX_LANEX_RX_OS_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_4_bsts * * GSER Lane Receiver Offset Status Group 4 Register * Status for offset settings actually in use (either calibration results * or overrides) from os12_0 through os15_1. Results in all fields of this * register are valid only if GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS] and * GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] are asserted or if the corresponding * override enable bit is asserted. */ union bdk_gsernx_lanex_rx_os_4_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_os_4_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_62_63 : 2; uint64_t os15_1 : 6; /**< [ 61: 56](RO/H) os15_1 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os15_0 : 6; /**< [ 53: 48](RO/H) os15_0 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os14_1 : 6; /**< [ 45: 40](RO/H) os10_1 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os14_0 : 6; /**< [ 37: 32](RO/H) os14_0 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os13_1 : 6; /**< [ 29: 24](RO/H) os13_1 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os13_0 : 6; /**< [ 21: 16](RO/H) os13_0 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os12_1 : 6; /**< [ 13: 8](RO/H) os12_1 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os12_0 : 6; /**< [ 5: 0](RO/H) os12_0 offset compensation override bits. */ #else /* Word 0 - Little Endian */ uint64_t os12_0 : 6; /**< [ 5: 0](RO/H) os12_0 offset compensation override bits. */ uint64_t reserved_6_7 : 2; uint64_t os12_1 : 6; /**< [ 13: 8](RO/H) os12_1 offset compensation override bits. */ uint64_t reserved_14_15 : 2; uint64_t os13_0 : 6; /**< [ 21: 16](RO/H) os13_0 offset compensation override bits. */ uint64_t reserved_22_23 : 2; uint64_t os13_1 : 6; /**< [ 29: 24](RO/H) os13_1 offset compensation override bits. */ uint64_t reserved_30_31 : 2; uint64_t os14_0 : 6; /**< [ 37: 32](RO/H) os14_0 offset compensation override bits. */ uint64_t reserved_38_39 : 2; uint64_t os14_1 : 6; /**< [ 45: 40](RO/H) os10_1 offset compensation override bits. */ uint64_t reserved_46_47 : 2; uint64_t os15_0 : 6; /**< [ 53: 48](RO/H) os15_0 offset compensation override bits. */ uint64_t reserved_54_55 : 2; uint64_t os15_1 : 6; /**< [ 61: 56](RO/H) os15_1 offset compensation override bits. */ uint64_t reserved_62_63 : 2; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_4_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_4_bsts bdk_gsernx_lanex_rx_os_4_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_4_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_4_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001970ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_4_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) bdk_gsernx_lanex_rx_os_4_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) "GSERNX_LANEX_RX_OS_4_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_4_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_5_bcfg * * GSER Lane Receiver Offset Control Group 5 Register * This register controls for triggering RX offset compensation state machines. */ union bdk_gsernx_lanex_rx_os_5_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_os_5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_55_63 : 9; uint64_t run_eye_oscal : 1; /**< [ 54: 54](R/W) Enables eye (doute) DFE offset compensation to run at the correct point in the hardware-driven reset sequence if asserted when the eye data path bringup sequence begins. If deasserted when the eye data path bringup sequence is run, this bit may be asserted later under software control prior to performing eye measurements. */ uint64_t reserved_53 : 1; uint64_t c1_e_adjust : 5; /**< [ 52: 48](R/W) Adjust value magnitude for the error slice in the E path. */ uint64_t reserved_45_47 : 3; uint64_t c1_i_adjust : 5; /**< [ 44: 40](R/W) Adjust value magnitude for the error slice in the I path. */ uint64_t reserved_37_39 : 3; uint64_t c1_q_adjust : 5; /**< [ 36: 32](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t offset_comp_en : 1; /**< [ 31: 31](R/W) Enable AFE and DFE offset compensation to run at the correct point in the hardware-driven reset sequence if asserted when the reset sequence begins. If deasserted when the hardware-driven reset sequence is run, this bit should be asserted later, once, under software control to initiate AFE and DFE offset compensation in a pure software-driven bringup. This bit field affects both AFE and DFE offset compensation training. */ uint64_t binsrch_margin : 3; /**< [ 30: 28](R/W) Binary Search Noise Margin. This value is added to the binary search difference count value. This bit field affects the binary search engine for IR TRIM. 0x0 = 13'h000 0x1 = 13'h020 0x2 = 13'h040 0x3 = 13'h080 0x4 = 13'h100 0x5 = 13'h200 0x6 = 13'h400 0x7 = 13'h800 (use with caution, may cause difference count overflow) */ uint64_t binsrch_wait : 10; /**< [ 27: 18](R/W) Number of clock cycles to wait after changing the offset code. It is used to allow adjustments in wait time due to changes in the service clock frequency. This bit field affects the binary seach engines for DFE/AFE offset and IR TRIM. */ uint64_t binsrch_acclen : 2; /**< [ 17: 16](R/W) Number of words to include in the binary search accumulation. This bit field affects the binary seach engines for DFE/AFE offset and IR TRIM. 0x0 = 16 words. 0x1 = 32 words. 0x2 = 64 words. 0x3 = 128 words. */ uint64_t settle_wait : 4; /**< [ 15: 12](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t reserved_10_11 : 2; uint64_t ir_trim_early_iter_max : 5; /**< [ 9: 5](R/W) Early IR TRIM Iteration Count Max. Controls the number of iterations to perform during the Early IR trim. If set to 0, no iterations are done and Early IR TRIM is skipped. Valid range 0 to 31. Note that GSERN()_LANE()_RST_CNT4_BCFG[DFE_AFE_OSCAL_WAIT] must be increased to allow for iterations. */ uint64_t ir_trim_comp_en : 1; /**< [ 4: 4](R/W) Enable IR TRIM compensation to run at the correct point in the hardware-driven reset sequence if asserted when the reset sequence begins. This bit field affects only IR trim compensation. */ uint64_t ir_trim_trigger : 1; /**< [ 3: 3](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the IR trim compensation FSM to run. Note that this is a debug-only feature. */ uint64_t idle_offset_trigger : 1; /**< [ 2: 2](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the IDLE offset compensation training FSM to run. Note that this is a debug-only feature. */ uint64_t afe_offset_trigger : 1; /**< [ 1: 1](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the AFE offset compensation training FSM to run. Note that this is a debug-only feature and should not be performed while transferring data on the serial link. Note also that only one of the offset compensation training engines can be run at a time. To trigger both DFE offset compensation and AFE offset compensation, they must be run sequentially with the CSR write to trigger the second in the sequence waiting until the first has completed (indicated in GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] or GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS]). */ uint64_t dfe_offset_trigger : 1; /**< [ 0: 0](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the DFE offset compensation training FSM to run. Note that only one of the offset compensation training engines can be run at a time. To trigger both DFE offset compensation and AFE offset compensation, they must be run sequentially with the CSR write to the second in the sequence waiting until the first has completed (indicated in GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] or GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS]). */ #else /* Word 0 - Little Endian */ uint64_t dfe_offset_trigger : 1; /**< [ 0: 0](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the DFE offset compensation training FSM to run. Note that only one of the offset compensation training engines can be run at a time. To trigger both DFE offset compensation and AFE offset compensation, they must be run sequentially with the CSR write to the second in the sequence waiting until the first has completed (indicated in GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] or GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS]). */ uint64_t afe_offset_trigger : 1; /**< [ 1: 1](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the AFE offset compensation training FSM to run. Note that this is a debug-only feature and should not be performed while transferring data on the serial link. Note also that only one of the offset compensation training engines can be run at a time. To trigger both DFE offset compensation and AFE offset compensation, they must be run sequentially with the CSR write to trigger the second in the sequence waiting until the first has completed (indicated in GSERN()_LANE()_RX_OS_5_BSTS[DFE_OFFSET_STATUS] or GSERN()_LANE()_RX_OS_5_BSTS[AFE_OFFSET_STATUS]). */ uint64_t idle_offset_trigger : 1; /**< [ 2: 2](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the IDLE offset compensation training FSM to run. Note that this is a debug-only feature. */ uint64_t ir_trim_trigger : 1; /**< [ 3: 3](R/W) Writing this bit to a logic 1 when the previous value was logic 0 will cause the IR trim compensation FSM to run. Note that this is a debug-only feature. */ uint64_t ir_trim_comp_en : 1; /**< [ 4: 4](R/W) Enable IR TRIM compensation to run at the correct point in the hardware-driven reset sequence if asserted when the reset sequence begins. This bit field affects only IR trim compensation. */ uint64_t ir_trim_early_iter_max : 5; /**< [ 9: 5](R/W) Early IR TRIM Iteration Count Max. Controls the number of iterations to perform during the Early IR trim. If set to 0, no iterations are done and Early IR TRIM is skipped. Valid range 0 to 31. Note that GSERN()_LANE()_RST_CNT4_BCFG[DFE_AFE_OSCAL_WAIT] must be increased to allow for iterations. */ uint64_t reserved_10_11 : 2; uint64_t settle_wait : 4; /**< [ 15: 12](R/W) Number of clock cycles for the DFE adaptation to wait after changing the adjusted C1 values before resuming accumulation. */ uint64_t binsrch_acclen : 2; /**< [ 17: 16](R/W) Number of words to include in the binary search accumulation. This bit field affects the binary seach engines for DFE/AFE offset and IR TRIM. 0x0 = 16 words. 0x1 = 32 words. 0x2 = 64 words. 0x3 = 128 words. */ uint64_t binsrch_wait : 10; /**< [ 27: 18](R/W) Number of clock cycles to wait after changing the offset code. It is used to allow adjustments in wait time due to changes in the service clock frequency. This bit field affects the binary seach engines for DFE/AFE offset and IR TRIM. */ uint64_t binsrch_margin : 3; /**< [ 30: 28](R/W) Binary Search Noise Margin. This value is added to the binary search difference count value. This bit field affects the binary search engine for IR TRIM. 0x0 = 13'h000 0x1 = 13'h020 0x2 = 13'h040 0x3 = 13'h080 0x4 = 13'h100 0x5 = 13'h200 0x6 = 13'h400 0x7 = 13'h800 (use with caution, may cause difference count overflow) */ uint64_t offset_comp_en : 1; /**< [ 31: 31](R/W) Enable AFE and DFE offset compensation to run at the correct point in the hardware-driven reset sequence if asserted when the reset sequence begins. If deasserted when the hardware-driven reset sequence is run, this bit should be asserted later, once, under software control to initiate AFE and DFE offset compensation in a pure software-driven bringup. This bit field affects both AFE and DFE offset compensation training. */ uint64_t c1_q_adjust : 5; /**< [ 36: 32](R/W) Adjust value magnitude for the error slice in the Q path. */ uint64_t reserved_37_39 : 3; uint64_t c1_i_adjust : 5; /**< [ 44: 40](R/W) Adjust value magnitude for the error slice in the I path. */ uint64_t reserved_45_47 : 3; uint64_t c1_e_adjust : 5; /**< [ 52: 48](R/W) Adjust value magnitude for the error slice in the E path. */ uint64_t reserved_53 : 1; uint64_t run_eye_oscal : 1; /**< [ 54: 54](R/W) Enables eye (doute) DFE offset compensation to run at the correct point in the hardware-driven reset sequence if asserted when the eye data path bringup sequence begins. If deasserted when the eye data path bringup sequence is run, this bit may be asserted later under software control prior to performing eye measurements. */ uint64_t reserved_55_63 : 9; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_5_bcfg bdk_gsernx_lanex_rx_os_5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001840ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) bdk_gsernx_lanex_rx_os_5_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) "GSERNX_LANEX_RX_OS_5_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_os_5_bsts * * GSER Lane Receiver Offset Status Group 5 Register * This register controls for triggering RX offset compensation state machines. */ union bdk_gsernx_lanex_rx_os_5_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_os_5_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_25_63 : 39; uint64_t idle : 1; /**< [ 24: 24](RO/H) For diagnostic use only. Internal: A copy of GSERN()_LANE()_RX_IDLEDET_BSTS[IDLE] for verification convenience. */ uint64_t reserved_18_23 : 6; uint64_t idle_offset_valid : 1; /**< [ 17: 17](R/W1C/H) Valid indicator for the DFE Offset calibration values. This bit gets set when DFE offset calibration completes, and may be cleared by software write to 1. */ uint64_t dfe_offsets_valid : 1; /**< [ 16: 16](R/W1C/H) Valid indicator for the DFE Offset calibration values. This bit gets set when DFE offset calibration completes, and may be cleared by software write to 1. */ uint64_t idle_os : 6; /**< [ 15: 10](RO/H) Value for the IDLE detect offset currently in use. This field may differ from [IDLE_OS_CAL] if idle hysteresis is enabled. This field is only valid when the idle detect offset calibration is not running. */ uint64_t idle_os_cal : 6; /**< [ 9: 4](RO/H) Result of IDLE detect offset calibration. This field is only valid when the idle detect offset calibration is not running. */ uint64_t ir_trim_status : 1; /**< [ 3: 3](RO/H) When 1, indicates that the IR TRIM compensation FSM has completed operations. Cleared to 0 by hardware when the IR TRIM compensation training FSM is triggered by software or state machines. */ uint64_t idle_offset_status : 1; /**< [ 2: 2](RO/H) When 1, indicates that the IDLE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the IDLE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ uint64_t afe_offset_status : 1; /**< [ 1: 1](RO/H) When 1, indicates that the AFE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the AFE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ uint64_t dfe_offset_status : 1; /**< [ 0: 0](RO/H) When 1, indicates that the DFE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the DFE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ #else /* Word 0 - Little Endian */ uint64_t dfe_offset_status : 1; /**< [ 0: 0](RO/H) When 1, indicates that the DFE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the DFE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ uint64_t afe_offset_status : 1; /**< [ 1: 1](RO/H) When 1, indicates that the AFE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the AFE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ uint64_t idle_offset_status : 1; /**< [ 2: 2](RO/H) When 1, indicates that the IDLE offset compensation training FSM has completed operations. Cleared to 0 by hardware when the IDLE offset compensation training FSM is triggered by software, hardware timers, or state machines. */ uint64_t ir_trim_status : 1; /**< [ 3: 3](RO/H) When 1, indicates that the IR TRIM compensation FSM has completed operations. Cleared to 0 by hardware when the IR TRIM compensation training FSM is triggered by software or state machines. */ uint64_t idle_os_cal : 6; /**< [ 9: 4](RO/H) Result of IDLE detect offset calibration. This field is only valid when the idle detect offset calibration is not running. */ uint64_t idle_os : 6; /**< [ 15: 10](RO/H) Value for the IDLE detect offset currently in use. This field may differ from [IDLE_OS_CAL] if idle hysteresis is enabled. This field is only valid when the idle detect offset calibration is not running. */ uint64_t dfe_offsets_valid : 1; /**< [ 16: 16](R/W1C/H) Valid indicator for the DFE Offset calibration values. This bit gets set when DFE offset calibration completes, and may be cleared by software write to 1. */ uint64_t idle_offset_valid : 1; /**< [ 17: 17](R/W1C/H) Valid indicator for the DFE Offset calibration values. This bit gets set when DFE offset calibration completes, and may be cleared by software write to 1. */ uint64_t reserved_18_23 : 6; uint64_t idle : 1; /**< [ 24: 24](RO/H) For diagnostic use only. Internal: A copy of GSERN()_LANE()_RX_IDLEDET_BSTS[IDLE] for verification convenience. */ uint64_t reserved_25_63 : 39; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_os_5_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_os_5_bsts bdk_gsernx_lanex_rx_os_5_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_OS_5_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_OS_5_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090001980ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_OS_5_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) bdk_gsernx_lanex_rx_os_5_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) "GSERNX_LANEX_RX_OS_5_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_OS_5_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_qac_bcfg * * GSER Lane RX Quadrature Corrector Base Configuration Register * Static controls for the quadrature corrector in the receiver. All fields * must be set prior to exiting reset. */ union bdk_gsernx_lanex_rx_qac_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_qac_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_42_63 : 22; uint64_t cdr_qac_selq : 1; /**< [ 41: 41](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t cdr_qac_sele : 1; /**< [ 40: 40](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t reserved_35_39 : 5; uint64_t qac_cntset_q : 3; /**< [ 34: 32](R/W) Programmable counter depth for QAC corrector value for the doutq path. The 3-bit encoding represents a integration time with 12-7 bit counter. The counter stops counting until it saturates or reaches 0. If [EN_QAC_Q] is clear, this register is not used. If [EN_QAC_Q] is set, this correction value will be output to the CDR loop. Set this field prior to exiting reset. */ uint64_t reserved_27_31 : 5; uint64_t qac_cntset_e : 3; /**< [ 26: 24](R/W) Programmable counter depth for QAC corrector value for the doute path. The 3-bit encoding represents a integration time with 12-7 bit counter. The counter stops counting until it saturates or reaches 0. If [EN_QAC_E] is clear, this register is not used. If [EN_QAC_E] is set, this correction value will be output to the CDR loop. Set this field prior to exiting reset. */ uint64_t reserved_22_23 : 2; uint64_t qac_ref_qoffs : 6; /**< [ 21: 16](R/W) Target value for the phase relationship between the i-path (leading) and the q-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Used only when the QAC filter is enabled and selected. */ uint64_t reserved_14_15 : 2; uint64_t qac_ref_eoffs : 6; /**< [ 13: 8](R/W) Target value for the phase relationship between the i-path (leading) and the e-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Used only when the QAC filter is enabled and selected. */ uint64_t reserved_2_7 : 6; uint64_t en_qac_e : 1; /**< [ 1: 1](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t en_qac_q : 1; /**< [ 0: 0](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ #else /* Word 0 - Little Endian */ uint64_t en_qac_q : 1; /**< [ 0: 0](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t en_qac_e : 1; /**< [ 1: 1](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t reserved_2_7 : 6; uint64_t qac_ref_eoffs : 6; /**< [ 13: 8](R/W) Target value for the phase relationship between the i-path (leading) and the e-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Used only when the QAC filter is enabled and selected. */ uint64_t reserved_14_15 : 2; uint64_t qac_ref_qoffs : 6; /**< [ 21: 16](R/W) Target value for the phase relationship between the i-path (leading) and the q-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Used only when the QAC filter is enabled and selected. */ uint64_t reserved_22_23 : 2; uint64_t qac_cntset_e : 3; /**< [ 26: 24](R/W) Programmable counter depth for QAC corrector value for the doute path. The 3-bit encoding represents a integration time with 12-7 bit counter. The counter stops counting until it saturates or reaches 0. If [EN_QAC_E] is clear, this register is not used. If [EN_QAC_E] is set, this correction value will be output to the CDR loop. Set this field prior to exiting reset. */ uint64_t reserved_27_31 : 5; uint64_t qac_cntset_q : 3; /**< [ 34: 32](R/W) Programmable counter depth for QAC corrector value for the doutq path. The 3-bit encoding represents a integration time with 12-7 bit counter. The counter stops counting until it saturates or reaches 0. If [EN_QAC_Q] is clear, this register is not used. If [EN_QAC_Q] is set, this correction value will be output to the CDR loop. Set this field prior to exiting reset. */ uint64_t reserved_35_39 : 5; uint64_t cdr_qac_sele : 1; /**< [ 40: 40](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t cdr_qac_selq : 1; /**< [ 41: 41](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t reserved_42_63 : 22; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_qac_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_qac_bcfg bdk_gsernx_lanex_rx_qac_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_QAC_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_QAC_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000ee0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_QAC_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) bdk_gsernx_lanex_rx_qac_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) "GSERNX_LANEX_RX_QAC_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_QAC_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_qac_bsts * * GSER Lane RX Quadrature Corrector Base Status Register * Quadrature corrector outputs captured in a CSR register; results should be close to * GSERN()_LANE()_RX_QAC_BCFG[QAC_REF_EOFFS] and * GSERN()_LANE()_RX_QAC_BCFG[QAC_REF_QOFFS] when the QAC is in use and stable. */ union bdk_gsernx_lanex_rx_qac_bsts { uint64_t u; struct bdk_gsernx_lanex_rx_qac_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_22_63 : 42; uint64_t qac_qoffs : 6; /**< [ 21: 16](RO/H) Quadrature filter control output for the phase relationship between the i-path (leading) and the q-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Valid only when the QAC filter is enabled and selected. */ uint64_t reserved_14_15 : 2; uint64_t qac_eoffs : 6; /**< [ 13: 8](RO/H) Quadrature filter control output for the phase relationship between the i-path (leading) and the e-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Valid only when the QAC filter is enabled and selected. */ uint64_t reserved_0_7 : 8; #else /* Word 0 - Little Endian */ uint64_t reserved_0_7 : 8; uint64_t qac_eoffs : 6; /**< [ 13: 8](RO/H) Quadrature filter control output for the phase relationship between the i-path (leading) and the e-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Valid only when the QAC filter is enabled and selected. */ uint64_t reserved_14_15 : 2; uint64_t qac_qoffs : 6; /**< [ 21: 16](RO/H) Quadrature filter control output for the phase relationship between the i-path (leading) and the q-path (trailing). The range is zero to 180 degrees in 64 steps, i.e., 2.8571 degrees per step. Valid only when the QAC filter is enabled and selected. */ uint64_t reserved_22_63 : 42; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_qac_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_rx_qac_bsts bdk_gsernx_lanex_rx_qac_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_RX_QAC_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_QAC_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000ef0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_QAC_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) bdk_gsernx_lanex_rx_qac_bsts_t #define bustype_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) "GSERNX_LANEX_RX_QAC_BSTS" #define device_bar_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_QAC_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_rx_st_bcfg * * GSER Lane RX Static Base Configuration Register * This register controls for static RX settings that do not need FSM overrides. */ union bdk_gsernx_lanex_rx_st_bcfg { uint64_t u; struct bdk_gsernx_lanex_rx_st_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_49_63 : 15; uint64_t rxcdrfsmi : 1; /**< [ 48: 48](R/W) Set to provide the RX interpolator with the RX CDR load I clock (rxcdrldi). deassert (low) to provide the interpolator with the RX CDR load Q clock (rxcdrldq). This bit is ignored when txcdrdfsm is asserted (high), which set the RX interpolator and CDR FSM to use the TX clock (txcdrld). Internal: (For initial testing, assert rxcdrfsmi, but if we have trouble meeting timing, we can deassert this signal to provide some additional timing margin from the last flops in the RX CDR FSM to the flops interpolator.) */ uint64_t reserved_42_47 : 6; uint64_t rx_dcc_iboost : 1; /**< [ 41: 41](R/W) Set to assert the iboost control bit of the receiver duty cycle correcter. Should be programmed as desired before sequencing the receiver reset state machine. Differs from [RX_DCC_LOWF] in the data rate range that it is set at. */ uint64_t rx_dcc_lowf : 1; /**< [ 40: 40](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t reserved_35_39 : 5; uint64_t bstuff : 1; /**< [ 34: 34](R/W) Set to place custom receive pipe in bit-stuffing mode. Only the odd bits in the half-rate DFE outputs are passed to the cdrout* and dout* pipe outputs; the odd bits are duplicated to fill up the expected data path width. */ uint64_t rx_idle_lowf : 2; /**< [ 33: 32](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t idle_os_bitlen : 2; /**< [ 31: 30](R/W) Number of bits to accumulate for IDLE detect offset calibration, measured in cycles of the 100 MHz system service clock. 0x0 = 5 cycles. 0x1 = 30 cycles. 0x2 = 60 cycles. 0x3 = 250 cycles. */ uint64_t idle_os_ovrd_en : 1; /**< [ 29: 29](R/W) Enable use of [IDLE_OS_OVRD]. */ uint64_t refset : 5; /**< [ 28: 24](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. 0x0 = Threshold (refp-refn) is 23 mV. 0x1 = Threshold (refp-refn) is 27.4 mV. 0x2 = Threshold (refp-refn) is 31.8 mV. 0x3 = Threshold (refp-refn) is 36.2 mV. 0x4 = Threshold (refp-refn) is 40.6 mV. 0x5 = Threshold (refp-refn) is 45 mV. 0x6 = Threshold (refp-refn) is 49.4 mV. 0x7 = Threshold (refp-refn) is 53.8 mV. 0x8 = Threshold (refp-refn) is 58.2 mV. 0x9 = Threshold (refp-refn) is 62.6 mV. 0xA = Threshold (refp-refn) is 67 mV. 0xB = Threshold (refp-refn) is 71.4 mV. 0xC = Threshold (refp-refn) is 75.8 mV. 0xD = Threshold (refp-refn) is 80.2 mV. 0xE = Threshold (refp-refn) is 84.6 mV. 0xF = Threshold (refp-refn) is 89 mV. 0x10 = Threshold (refp-refn) is 55 mV. 0x11 = Threshold (refp-refn) is 62.9 mV. 0x12 = Threshold (refp-refn) is 70.8 mV. 0x13 = Threshold (refp-refn) is 78.7 mV. 0x14 = Threshold (refp-refn) is 86.6 mV. 0x15 = Threshold (refp-refn) is 94.5 mV. 0x16 = Threshold (refp-refn) is 102.4 mV. 0x17 = Threshold (refp-refn) is 110.3 mV. 0x18 = Threshold (refp-refn) is 118.2 mV. 0x19 = Threshold (refp-refn) is 126.1 mV. 0x1A = Threshold (refp-refn) is 134 mV. 0x1B = Threshold (refp-refn) is 141.9 mV. 0x1C = Threshold (refp-refn) is 149.8 mV. 0x1D = Threshold (refp-refn) is 157.7 mV. 0x1E = Threshold (refp-refn) is 165.6 mV. 0x1F = Threshold (refp-refn) is 173.5 mV. */ uint64_t idle_os_ovrd : 6; /**< [ 23: 18](R/W) Override value for the IDLE detect offset calibration. As with the other offset DACs in the RX, the MSB sets the sign, and the 5 LSBs are binary-encoded magnitudes. */ uint64_t en_idle_cal : 1; /**< [ 17: 17](R/W) Set to put the idle detector into calibration mode. */ uint64_t rxelecidle : 1; /**< [ 16: 16](R/W) Set to place the CDR finite state machine into a reset state so it does not try to track clock or data and starts from a reset state when the CDR finite state machine begins or resumes operation. deassert (low) to allow the CDR FSM to run. */ uint64_t rxcdrhold : 1; /**< [ 15: 15](R/W) Set to place the CDR finite state machine (FSM) into a hold state so it does not try to track clock or data, which would not normally be present during electrical idle. The CDR FSM state is preserved, provided [RXELECIDLE] is not asserted, so the CDR FSM resumes operation with the same settings in effect prior to entering the hold state. deassert (low) to allow the CDR FSM to run. */ uint64_t rxcdrramp : 1; /**< [ 14: 14](R/W) For diagnostic use only. Internal: For lab characterization use only. Set to 1 to cause the CDR FSM to ramp the 1st order state by [INC1], independent of voter, & hold the 2nd order state. */ uint64_t reserved_13 : 1; uint64_t en_sh_lb : 1; /**< [ 12: 12](R/W) Enable for shallow loopback mode within RX. Used when in shallow loopback mode to mux the CDR receive clock onto the transmit data path clock to ensure that the clock frequencies are matched (to prevent data overrun). This signal should be enabled along with GSERN()_LANE()_PLL_2_BCFG[SHLB_EN] for the PLL. */ uint64_t erc : 4; /**< [ 11: 8](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. Set as follows: \ if (data_period \>= 500ps) erc = 4'h1; else if (data_period \>= 407ps) erc = 4'h2; else if (data_period \>= 333ps) erc = 4'h3; else if (data_period \>= 167ps) erc = 4'h4; else if (data_period \>= 166ps) erc = 4'h5; else if (data_period \>= 100ps) erc = 4'h7; else if (data_period \>= 85ps) erc = 4'h8; else if (data_period \>= 80ps) erc = 4'h9; else if (data_period \>= 62ps) erc = 4'hA; else if (data_period \>= 55ps) erc = 4'hB; else if (data_period \>= 50ps) erc = 4'hC; else if (data_period \>= 45ps) erc = 4'hD; else if (data_period \>= 38ps) erc = 4'hE; else erc = 4'hF; \ */ uint64_t term : 2; /**< [ 7: 6](R/W) Termination voltage control. Setting to 0x1 (VDSSA) is typically appropriate for PCIe channels. For channels without a series board capacitor the typical setting would be 0x0 (floating). 0x0 = Floating. 0x1 = VSSA. 0x2 = VDDA. 0x3 = VSSA. */ uint64_t en_rt85 : 1; /**< [ 5: 5](R/W) Enable 85 Ohm termination in the receiver. */ uint64_t en_lb : 1; /**< [ 4: 4](R/W) Enable for near-end TX loopback path. */ uint64_t en_rterm : 1; /**< [ 3: 3](R/W) For debug use only. Set to one to enable the receiver's termination circuit during bringup. Setting to zero will turn off receiver termination. */ uint64_t reserved_0_2 : 3; #else /* Word 0 - Little Endian */ uint64_t reserved_0_2 : 3; uint64_t en_rterm : 1; /**< [ 3: 3](R/W) For debug use only. Set to one to enable the receiver's termination circuit during bringup. Setting to zero will turn off receiver termination. */ uint64_t en_lb : 1; /**< [ 4: 4](R/W) Enable for near-end TX loopback path. */ uint64_t en_rt85 : 1; /**< [ 5: 5](R/W) Enable 85 Ohm termination in the receiver. */ uint64_t term : 2; /**< [ 7: 6](R/W) Termination voltage control. Setting to 0x1 (VDSSA) is typically appropriate for PCIe channels. For channels without a series board capacitor the typical setting would be 0x0 (floating). 0x0 = Floating. 0x1 = VSSA. 0x2 = VDDA. 0x3 = VSSA. */ uint64_t erc : 4; /**< [ 11: 8](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. Set as follows: \ if (data_period \>= 500ps) erc = 4'h1; else if (data_period \>= 407ps) erc = 4'h2; else if (data_period \>= 333ps) erc = 4'h3; else if (data_period \>= 167ps) erc = 4'h4; else if (data_period \>= 166ps) erc = 4'h5; else if (data_period \>= 100ps) erc = 4'h7; else if (data_period \>= 85ps) erc = 4'h8; else if (data_period \>= 80ps) erc = 4'h9; else if (data_period \>= 62ps) erc = 4'hA; else if (data_period \>= 55ps) erc = 4'hB; else if (data_period \>= 50ps) erc = 4'hC; else if (data_period \>= 45ps) erc = 4'hD; else if (data_period \>= 38ps) erc = 4'hE; else erc = 4'hF; \ */ uint64_t en_sh_lb : 1; /**< [ 12: 12](R/W) Enable for shallow loopback mode within RX. Used when in shallow loopback mode to mux the CDR receive clock onto the transmit data path clock to ensure that the clock frequencies are matched (to prevent data overrun). This signal should be enabled along with GSERN()_LANE()_PLL_2_BCFG[SHLB_EN] for the PLL. */ uint64_t reserved_13 : 1; uint64_t rxcdrramp : 1; /**< [ 14: 14](R/W) For diagnostic use only. Internal: For lab characterization use only. Set to 1 to cause the CDR FSM to ramp the 1st order state by [INC1], independent of voter, & hold the 2nd order state. */ uint64_t rxcdrhold : 1; /**< [ 15: 15](R/W) Set to place the CDR finite state machine (FSM) into a hold state so it does not try to track clock or data, which would not normally be present during electrical idle. The CDR FSM state is preserved, provided [RXELECIDLE] is not asserted, so the CDR FSM resumes operation with the same settings in effect prior to entering the hold state. deassert (low) to allow the CDR FSM to run. */ uint64_t rxelecidle : 1; /**< [ 16: 16](R/W) Set to place the CDR finite state machine into a reset state so it does not try to track clock or data and starts from a reset state when the CDR finite state machine begins or resumes operation. deassert (low) to allow the CDR FSM to run. */ uint64_t en_idle_cal : 1; /**< [ 17: 17](R/W) Set to put the idle detector into calibration mode. */ uint64_t idle_os_ovrd : 6; /**< [ 23: 18](R/W) Override value for the IDLE detect offset calibration. As with the other offset DACs in the RX, the MSB sets the sign, and the 5 LSBs are binary-encoded magnitudes. */ uint64_t refset : 5; /**< [ 28: 24](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. 0x0 = Threshold (refp-refn) is 23 mV. 0x1 = Threshold (refp-refn) is 27.4 mV. 0x2 = Threshold (refp-refn) is 31.8 mV. 0x3 = Threshold (refp-refn) is 36.2 mV. 0x4 = Threshold (refp-refn) is 40.6 mV. 0x5 = Threshold (refp-refn) is 45 mV. 0x6 = Threshold (refp-refn) is 49.4 mV. 0x7 = Threshold (refp-refn) is 53.8 mV. 0x8 = Threshold (refp-refn) is 58.2 mV. 0x9 = Threshold (refp-refn) is 62.6 mV. 0xA = Threshold (refp-refn) is 67 mV. 0xB = Threshold (refp-refn) is 71.4 mV. 0xC = Threshold (refp-refn) is 75.8 mV. 0xD = Threshold (refp-refn) is 80.2 mV. 0xE = Threshold (refp-refn) is 84.6 mV. 0xF = Threshold (refp-refn) is 89 mV. 0x10 = Threshold (refp-refn) is 55 mV. 0x11 = Threshold (refp-refn) is 62.9 mV. 0x12 = Threshold (refp-refn) is 70.8 mV. 0x13 = Threshold (refp-refn) is 78.7 mV. 0x14 = Threshold (refp-refn) is 86.6 mV. 0x15 = Threshold (refp-refn) is 94.5 mV. 0x16 = Threshold (refp-refn) is 102.4 mV. 0x17 = Threshold (refp-refn) is 110.3 mV. 0x18 = Threshold (refp-refn) is 118.2 mV. 0x19 = Threshold (refp-refn) is 126.1 mV. 0x1A = Threshold (refp-refn) is 134 mV. 0x1B = Threshold (refp-refn) is 141.9 mV. 0x1C = Threshold (refp-refn) is 149.8 mV. 0x1D = Threshold (refp-refn) is 157.7 mV. 0x1E = Threshold (refp-refn) is 165.6 mV. 0x1F = Threshold (refp-refn) is 173.5 mV. */ uint64_t idle_os_ovrd_en : 1; /**< [ 29: 29](R/W) Enable use of [IDLE_OS_OVRD]. */ uint64_t idle_os_bitlen : 2; /**< [ 31: 30](R/W) Number of bits to accumulate for IDLE detect offset calibration, measured in cycles of the 100 MHz system service clock. 0x0 = 5 cycles. 0x1 = 30 cycles. 0x2 = 60 cycles. 0x3 = 250 cycles. */ uint64_t rx_idle_lowf : 2; /**< [ 33: 32](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t bstuff : 1; /**< [ 34: 34](R/W) Set to place custom receive pipe in bit-stuffing mode. Only the odd bits in the half-rate DFE outputs are passed to the cdrout* and dout* pipe outputs; the odd bits are duplicated to fill up the expected data path width. */ uint64_t reserved_35_39 : 5; uint64_t rx_dcc_lowf : 1; /**< [ 40: 40](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t rx_dcc_iboost : 1; /**< [ 41: 41](R/W) Set to assert the iboost control bit of the receiver duty cycle correcter. Should be programmed as desired before sequencing the receiver reset state machine. Differs from [RX_DCC_LOWF] in the data rate range that it is set at. */ uint64_t reserved_42_47 : 6; uint64_t rxcdrfsmi : 1; /**< [ 48: 48](R/W) Set to provide the RX interpolator with the RX CDR load I clock (rxcdrldi). deassert (low) to provide the interpolator with the RX CDR load Q clock (rxcdrldq). This bit is ignored when txcdrdfsm is asserted (high), which set the RX interpolator and CDR FSM to use the TX clock (txcdrld). Internal: (For initial testing, assert rxcdrfsmi, but if we have trouble meeting timing, we can deassert this signal to provide some additional timing margin from the last flops in the RX CDR FSM to the flops interpolator.) */ uint64_t reserved_49_63 : 15; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_rx_st_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_rx_st_bcfg bdk_gsernx_lanex_rx_st_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_RX_ST_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_RX_ST_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000ff0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_RX_ST_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) bdk_gsernx_lanex_rx_st_bcfg_t #define bustype_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) "GSERNX_LANEX_RX_ST_BCFG" #define device_bar_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_RX_ST_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_phy2_bcfg * * GSER Lane SATA Control 2 Register * Control settings for SATA PHY functionality. */ union bdk_gsernx_lanex_sata_phy2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_phy2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t dev_align_count : 16; /**< [ 63: 48](R/W) Count in service clock cycles representing the duration of ALIGNp primitives received at each speed from the far end Device during the rate negotiation process. Reset value is set to yield a 54.61ns duration. */ uint64_t reserved_43_47 : 5; uint64_t cdr_lock_wait : 11; /**< [ 42: 32](R/W) Maximum wait count in service clock cycles required after detecting a received signal or after completing a Receiver reset before the SATA aligner begins to scan for 8B10B symbol alignment. Reset value is set to 5us based on analysis of worst case SSC scenarios. */ uint64_t do_afeos_final : 4; /**< [ 31: 28](R/W) Set to one to allow AFEOS adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_AFEOS_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctlelte_final : 4; /**< [ 27: 24](R/W) Set to one to allow CTLELTE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLELTE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctlez_final : 4; /**< [ 23: 20](R/W) Set to one to allow CTLEZ adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLEZ_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctle_final : 4; /**< [ 19: 16](R/W) Set to one to allow CTLE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_dfe_final : 4; /**< [ 15: 12](R/W) Set to one to allow DFE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_DFE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_vga_final : 4; /**< [ 11: 8](R/W) Set to one to allow VGA adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_VGA_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_blwc_final : 4; /**< [ 7: 4](R/W) Set to one to allow BLWC adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_BLWC_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_prevga_gn_final : 4; /**< [ 3: 0](R/W) Set to one to allow PREVGA_GN adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_PREVGA_GN_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ #else /* Word 0 - Little Endian */ uint64_t do_prevga_gn_final : 4; /**< [ 3: 0](R/W) Set to one to allow PREVGA_GN adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_PREVGA_GN_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_blwc_final : 4; /**< [ 7: 4](R/W) Set to one to allow BLWC adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_BLWC_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_vga_final : 4; /**< [ 11: 8](R/W) Set to one to allow VGA adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_VGA_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_dfe_final : 4; /**< [ 15: 12](R/W) Set to one to allow DFE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_DFE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctle_final : 4; /**< [ 19: 16](R/W) Set to one to allow CTLE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctlez_final : 4; /**< [ 23: 20](R/W) Set to one to allow CTLEZ adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLEZ_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_ctlelte_final : 4; /**< [ 27: 24](R/W) Set to one to allow CTLELTE adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_CTLELTE_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t do_afeos_final : 4; /**< [ 31: 28](R/W) Set to one to allow AFEOS adaptation to keep running continuously during the final phase of adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted, GSERN()_LANE()_SATA_PHY_BCFG[DO_AFEOS_ADPT] is set and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA Gen1. \<1\> = SATA Gen2. \<2\> = SATA Gen3. \<3\> = Reserved. */ uint64_t cdr_lock_wait : 11; /**< [ 42: 32](R/W) Maximum wait count in service clock cycles required after detecting a received signal or after completing a Receiver reset before the SATA aligner begins to scan for 8B10B symbol alignment. Reset value is set to 5us based on analysis of worst case SSC scenarios. */ uint64_t reserved_43_47 : 5; uint64_t dev_align_count : 16; /**< [ 63: 48](R/W) Count in service clock cycles representing the duration of ALIGNp primitives received at each speed from the far end Device during the rate negotiation process. Reset value is set to yield a 54.61ns duration. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_phy2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_phy2_bcfg bdk_gsernx_lanex_sata_phy2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002bb0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_PHY2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) bdk_gsernx_lanex_sata_phy2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) "GSERNX_LANEX_SATA_PHY2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_PHY2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_phy_bcfg * * GSER Lane SATA Control Register * Control settings for SATA PHY functionality. */ union bdk_gsernx_lanex_sata_phy_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_phy_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t do_afeos_adpt : 4; /**< [ 63: 60](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctlelte_adpt : 4; /**< [ 59: 56](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctlez_adpt : 4; /**< [ 55: 52](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctle_adpt : 4; /**< [ 51: 48](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_dfe_adpt : 4; /**< [ 47: 44](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_vga_adpt : 4; /**< [ 43: 40](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_blwc_adpt : 4; /**< [ 39: 36](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_prevga_gn_adpt : 4; /**< [ 35: 32](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t sata_dp_width_sel : 4; /**< [ 31: 28](R/W) Cleared to select a 20 bit and set to select a 40 bit Rx and Tx Data Path Width in the PCS Lite Layer. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1 (default 40 bits). \<1\> = SATA gen2 (default 20 bits). \<2\> = SATA gen3 (default 20 bits). \<3\> = Reserved. */ uint64_t reserved_26_27 : 2; uint64_t inhibit_power_change : 1; /**< [ 25: 25](R/W) Inhibit SATA power state changes in response to pX_partial, pX_slumber and pX_phy_devslp inputs. */ uint64_t frc_unalgn_rxelecidle : 1; /**< [ 24: 24](R/W) Enables use of negated pX_sig_det to force the RX PHY into unalign state. */ uint64_t sata_bitstuff_tx_en : 4; /**< [ 23: 20](R/W) Set to duplicate the first 20 bits of TX data before alignment & ordering for lower data rates. This could be PCS TX data, PRBS data, or shallow-loopback RX data depending on mode. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t sata_bitstuff_rx_drop_even : 4;/**< [ 19: 16](R/W) Tells the PCS lite receive datapath to drop even bits in the vector of received data from the PMA when [SATA_BITSTUFF_RX_EN] is set: 0 = Drop bits 1, 3, 5, 7, ... 1 = Drop bits 0, 2, 4, 6, ... This bit is also used in the eye monitor to mask out the dropped bits when counting mismatches. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t sata_bitstuff_rx_en : 4; /**< [ 15: 12](R/W) Set to expect duplicates on the PMA RX data and drop bits after alignment & ordering for PCS layer to consume. The drop ordering is determined by [SATA_BITSTUFF_RX_DROP_EVEN]. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t rx_squelch_on_idle : 1; /**< [ 11: 11](R/W) Receive data squelch on idle. When idle detection is signaled to the SATA control with the negation of phy_sig_det, the parallel receive data will be set to all 0's regardless of the output of the CDR. */ uint64_t comma_thr : 7; /**< [ 10: 4](R/W) COMMA detection threshold. The receive aligner must see this many COMMA characters at the same rotation before declaring symbol alignment. */ uint64_t error_thr : 4; /**< [ 3: 0](R/W) Error threshold. The receive aligner must see this many COMMA characters at a different rotation than currently in use before declaring loss of symbol alignment. */ #else /* Word 0 - Little Endian */ uint64_t error_thr : 4; /**< [ 3: 0](R/W) Error threshold. The receive aligner must see this many COMMA characters at a different rotation than currently in use before declaring loss of symbol alignment. */ uint64_t comma_thr : 7; /**< [ 10: 4](R/W) COMMA detection threshold. The receive aligner must see this many COMMA characters at the same rotation before declaring symbol alignment. */ uint64_t rx_squelch_on_idle : 1; /**< [ 11: 11](R/W) Receive data squelch on idle. When idle detection is signaled to the SATA control with the negation of phy_sig_det, the parallel receive data will be set to all 0's regardless of the output of the CDR. */ uint64_t sata_bitstuff_rx_en : 4; /**< [ 15: 12](R/W) Set to expect duplicates on the PMA RX data and drop bits after alignment & ordering for PCS layer to consume. The drop ordering is determined by [SATA_BITSTUFF_RX_DROP_EVEN]. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t sata_bitstuff_rx_drop_even : 4;/**< [ 19: 16](R/W) Tells the PCS lite receive datapath to drop even bits in the vector of received data from the PMA when [SATA_BITSTUFF_RX_EN] is set: 0 = Drop bits 1, 3, 5, 7, ... 1 = Drop bits 0, 2, 4, 6, ... This bit is also used in the eye monitor to mask out the dropped bits when counting mismatches. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t sata_bitstuff_tx_en : 4; /**< [ 23: 20](R/W) Set to duplicate the first 20 bits of TX data before alignment & ordering for lower data rates. This could be PCS TX data, PRBS data, or shallow-loopback RX data depending on mode. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t frc_unalgn_rxelecidle : 1; /**< [ 24: 24](R/W) Enables use of negated pX_sig_det to force the RX PHY into unalign state. */ uint64_t inhibit_power_change : 1; /**< [ 25: 25](R/W) Inhibit SATA power state changes in response to pX_partial, pX_slumber and pX_phy_devslp inputs. */ uint64_t reserved_26_27 : 2; uint64_t sata_dp_width_sel : 4; /**< [ 31: 28](R/W) Cleared to select a 20 bit and set to select a 40 bit Rx and Tx Data Path Width in the PCS Lite Layer. This value must only be changed while lite layer is in reset. \<0\> = SATA gen1 (default 40 bits). \<1\> = SATA gen2 (default 20 bits). \<2\> = SATA gen3 (default 20 bits). \<3\> = Reserved. */ uint64_t do_prevga_gn_adpt : 4; /**< [ 35: 32](R/W) Set to one to allow the adaptation reset state machine to trigger PREVGA_GN adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_blwc_adpt : 4; /**< [ 39: 36](R/W) Set to one to allow the adaptation reset state machine to trigger BLWC adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_vga_adpt : 4; /**< [ 43: 40](R/W) Set to one to allow the adaptation reset state machine to trigger VGA adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_dfe_adpt : 4; /**< [ 47: 44](R/W) Set to one to allow the adaptation reset state machine to trigger DFE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctle_adpt : 4; /**< [ 51: 48](R/W) Set to one to allow the adaptation reset state machine to trigger CTLE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctlez_adpt : 4; /**< [ 55: 52](R/W) Set to one to allow the adaptation reset state machine to trigger CTLEZ adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_ctlelte_adpt : 4; /**< [ 59: 56](R/W) Set to one to allow the adaptation reset state machine to trigger CTLELTE adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ uint64_t do_afeos_adpt : 4; /**< [ 63: 60](R/W) Set to one to allow the adaptation reset state machine to trigger AFEOS adaptation when GSERN()_LANE()_RST2_BCFG[RST_ADPT_RST_SM] is deasserted and the SATA lane is operating at the corresponding rate. The individual bits are mapped as follows: \<0\> = SATA gen1. \<1\> = SATA gen2. \<2\> = SATA gen3. \<3\> = Reserved. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_phy_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_phy_bcfg bdk_gsernx_lanex_sata_phy_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002b30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_PHY_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) bdk_gsernx_lanex_sata_phy_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) "GSERNX_LANEX_SATA_PHY_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_PHY_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_phy_bsts * * GSER Lane SATA PCS Status Register * Error Status for SATA PHY functionality. */ union bdk_gsernx_lanex_sata_phy_bsts { uint64_t u; struct bdk_gsernx_lanex_sata_phy_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_1_63 : 63; uint64_t align_error : 1; /**< [ 0: 0](R/W1C/H) Alignment error. The receive 8B10B aligner has detected an error. An error is declared if GSERN()_LANE()_SATA_PHY_BCFG[ERROR_THR] COMMA characters are detected at a 10 bit rotation that does not match the active rotation. The COMMAs do not have to all be at the same rotation. */ #else /* Word 0 - Little Endian */ uint64_t align_error : 1; /**< [ 0: 0](R/W1C/H) Alignment error. The receive 8B10B aligner has detected an error. An error is declared if GSERN()_LANE()_SATA_PHY_BCFG[ERROR_THR] COMMA characters are detected at a 10 bit rotation that does not match the active rotation. The COMMAs do not have to all be at the same rotation. */ uint64_t reserved_1_63 : 63; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_phy_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_sata_phy_bsts bdk_gsernx_lanex_sata_phy_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_PHY_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002fb0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_PHY_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) bdk_gsernx_lanex_sata_phy_bsts_t #define bustype_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) "GSERNX_LANEX_SATA_PHY_BSTS" #define device_bar_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_PHY_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq1_1_bcfg * * GSER Lane SATA Gen1 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during SATA gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq1_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq1_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t sata_g1_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t sata_g1_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g1_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g1_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g1_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g1_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g1_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g1_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g1_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g1_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g1_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g1_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g1_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t reserved_0_8 : 9; #else /* Word 0 - Little Endian */ uint64_t reserved_0_8 : 9; uint64_t sata_g1_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t sata_g1_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g1_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g1_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g1_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g1_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g1_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g1_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g1_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g1_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g1_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g1_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g1_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq1_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq1_1_bcfg bdk_gsernx_lanex_sata_rxeq1_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e00ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ1_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq1_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ1_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ1_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq1_2_bcfg * * GSER Lane SATA Gen1 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during SATA gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq1_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq1_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g1_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t sata_g1_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ #else /* Word 0 - Little Endian */ uint64_t sata_g1_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ uint64_t sata_g1_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq1_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq1_2_bcfg bdk_gsernx_lanex_sata_rxeq1_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ1_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq1_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ1_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ1_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq1_3_bcfg * * GSER Lane SATA Gen1 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during SATA Gen1 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq1_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq1_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g1_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t sata_g1_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g1_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq1_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq1_3_bcfg bdk_gsernx_lanex_sata_rxeq1_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e20ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ1_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq1_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ1_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ1_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq2_1_bcfg * * GSER Lane SATA Gen2 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during SATA gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq2_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq2_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t sata_g2_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t sata_g2_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g2_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g2_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g2_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g2_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g2_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g2_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g2_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g2_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g2_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g2_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g2_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t reserved_0_8 : 9; #else /* Word 0 - Little Endian */ uint64_t reserved_0_8 : 9; uint64_t sata_g2_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t sata_g2_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g2_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g2_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g2_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g2_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g2_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g2_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g2_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g2_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g2_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g2_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g2_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq2_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq2_1_bcfg bdk_gsernx_lanex_sata_rxeq2_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ2_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq2_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ2_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ2_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq2_2_bcfg * * GSER Lane SATA Gen2 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during SATA gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq2_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq2_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g2_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t sata_g2_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ #else /* Word 0 - Little Endian */ uint64_t sata_g2_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ uint64_t sata_g2_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq2_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq2_2_bcfg bdk_gsernx_lanex_sata_rxeq2_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e40ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ2_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq2_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ2_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ2_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq2_3_bcfg * * GSER Lane SATA Gen2 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during SATA Gen2 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq2_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq2_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g2_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t sata_g2_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g2_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq2_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq2_3_bcfg bdk_gsernx_lanex_sata_rxeq2_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e50ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ2_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq2_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ2_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ2_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq3_1_bcfg * * GSER Lane SATA Gen3 RX Equalizer Control Register 1 * Parameters controlling the custom receiver equalization during SATA gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq3_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq3_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t sata_g3_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t sata_g3_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g3_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g3_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g3_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g3_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g3_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g3_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g3_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g3_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g3_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g3_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g3_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t reserved_0_8 : 9; #else /* Word 0 - Little Endian */ uint64_t reserved_0_8 : 9; uint64_t sata_g3_ctle_lte_zero_ovrd : 4;/**< [ 12: 9](R/W) CTLE LTE zero frequency override value. */ uint64_t sata_g3_ctle_lte_zero_ovrd_en : 1;/**< [ 13: 13](R/W) CTLE LTE zero frequency override enable. By default, the override should be enabled; otherwise, CTLE_LTE_ZERO will be set equal to CTLE_ZERO within the RX adaptation FSM. */ uint64_t sata_g3_rx_dcc_lowf : 1; /**< [ 14: 14](R/W) Set to put the RX duty-cycle corrector (DCC) into low frequency mode. Set to 1 when operating at data rates below 4 Gbaud. */ uint64_t sata_g3_erc : 4; /**< [ 18: 15](R/W) Interpolator edge-rate control. This control is shared between all interpolators in the lane. */ uint64_t sata_g3_inc1 : 6; /**< [ 24: 19](R/W) 1st order loop inc. */ uint64_t sata_g3_inc2 : 6; /**< [ 30: 25](R/W) 2nd order loop inc. */ uint64_t sata_g3_qoffs : 7; /**< [ 37: 31](R/W) Q interp state offset. */ uint64_t sata_g3_eoffs : 7; /**< [ 44: 38](R/W) E interp state offset. */ uint64_t sata_g3_cdr_qac_sele : 1; /**< [ 45: 45](R/W) Enable use of the QAC corrector for the e-path when the reset state machine timing allows it. */ uint64_t sata_g3_cdr_qac_selq : 1; /**< [ 46: 46](R/W) Enable use of the QAC corrector for the q-path when the reset state machine timing allows it. */ uint64_t sata_g3_en_qac_q : 1; /**< [ 47: 47](R/W) Enable use of QAC digital filter in the doutq datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g3_en_qac_e : 1; /**< [ 48: 48](R/W) Enable use of QAC digital filter in the doute datapath. If the enable is deasserted, the filter will output the [QAC_REFSET] value. If its asserted, it will determine the current phase and use [QAC_REFSET] & [QAC_CNTSET] to output a correction value. Set prior to exiting reset. */ uint64_t sata_g3_blwc_deadband : 12; /**< [ 60: 49](R/W) BLWC adaptation deadband settings. 12-bit field to match accumulator, but typically a value less than 0x0FF is used. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq3_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq3_1_bcfg bdk_gsernx_lanex_sata_rxeq3_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e60ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ3_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq3_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ3_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ3_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq3_2_bcfg * * GSER Lane SATA Gen3 RX Equalizer Control Register 2 * Parameters controlling the custom receiver equalization during SATA gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq3_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq3_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g3_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ uint64_t sata_g3_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ #else /* Word 0 - Little Endian */ uint64_t sata_g3_blwc_subrate_final : 16;/**< [ 15: 0](R/W) Subrate counter final value. Sets the ending value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. Subrate counter final value. */ uint64_t sata_g3_blwc_subrate_init : 16;/**< [ 31: 16](R/W) Subrate counter initial value. Sets the initial value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_prevga_gn_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_prevga_gn_subrate_fin : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FIN if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq3_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq3_2_bcfg bdk_gsernx_lanex_sata_rxeq3_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e70ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ3_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq3_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ3_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ3_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxeq3_3_bcfg * * GSER Lane SATA Gen3 RX Equalizer Control Register 3 * Parameters controlling the custom receiver equalization during SATA Gen3 operation. * These fields will drive the associated control signal when * GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] * is set to 'SATA'. */ union bdk_gsernx_lanex_sata_rxeq3_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxeq3_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t sata_g3_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #else /* Word 0 - Little Endian */ uint64_t sata_g3_subrate_init : 16; /**< [ 15: 0](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_subrate_final : 16; /**< [ 31: 16](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_afeos_subrate_init : 16;/**< [ 47: 32](R/W) Subrate counter initial value. Sets the starting value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ uint64_t sata_g3_afeos_subrate_final : 16;/**< [ 63: 48](R/W) Subrate counter final value. Sets the final value for the LMS update interval, if subrate gearshifting is enabled. Set SUBRATE_INIT = SUBRATE_FINAL if subrate gearshifting is not enabled. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxeq3_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxeq3_3_bcfg bdk_gsernx_lanex_sata_rxeq3_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002e80ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXEQ3_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) bdk_gsernx_lanex_sata_rxeq3_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) "GSERNX_LANEX_SATA_RXEQ3_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXEQ3_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidl1a_bcfg * * GSER Lane SATA Gen1 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN1. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidl1a_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidl1a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidl1a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidl1a_bcfg bdk_gsernx_lanex_sata_rxidl1a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002cc0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDL1A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) bdk_gsernx_lanex_sata_rxidl1a_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDL1A_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDL1A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidl2a_bcfg * * GSER Lane SATA Gen2 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN2. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidl2a_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidl2a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidl2a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidl2a_bcfg bdk_gsernx_lanex_sata_rxidl2a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002ce0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDL2A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) bdk_gsernx_lanex_sata_rxidl2a_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDL2A_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDL2A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidl3a_bcfg * * GSER Lane SATA Gen3 RX Idle Detection Filter Control Register 2 * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN3. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidl3a_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidl3a_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ uint64_t reserved_61 : 1; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_54_55 : 2; uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ #else /* Word 0 - Little Endian */ uint64_t l0 : 27; /**< [ 26: 0](R/W) Zeros count leak parameter. When a one in the raw idle signal from the custom macro is encountered, the zeros count is decremented by this amount, saturating to a minimum count of zero. (Set L0=N0 and I0=1 for a simple run-of-N0 zeros to deassert the filter output.) The minimum setting for this field is 0x1. */ uint64_t l1 : 27; /**< [ 53: 27](R/W) Ones count leak parameter. When a zero in the raw idle signal from the custom macro is encountered, the ones count is decremented by this amount, saturating to a minimum count of zero. (Set L1=N1 and I1=1 for a simple run-of-N1 ones to assert the filter output.) The minimum setting for this field is 0x1. */ uint64_t reserved_54_55 : 2; uint64_t refset : 5; /**< [ 60: 56](R/W) Sets the reference voltage swing for idle detection. A voltage swing at the input of the RX less than this amount is defined as idle. (See GSERN()_LANE()_RX_ST_BCFG[REFSET] for bit mapping.) */ uint64_t reserved_61 : 1; uint64_t rx_idle_lowf : 2; /**< [ 63: 62](R/W) Control for the receiver's idle detector analog filter bandwidth. The two bits apply at different times. \<0\> = Set to 1 for low bandwidth during normal operation. \<1\> = Set to 1 for low bandwidth during idle offset calibration. The default is 1 during normal operation for large filter capacitance and low bandwidth, and 0 during idle offset calibration to provide faster response. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidl3a_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidl3a_bcfg bdk_gsernx_lanex_sata_rxidl3a_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002d00ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDL3A_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) bdk_gsernx_lanex_sata_rxidl3a_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDL3A_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDL3A_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidle1_bcfg * * GSER Lane SATA Gen1 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN1. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidle1_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidle1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidle1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidle1_bcfg bdk_gsernx_lanex_sata_rxidle1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002cb0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDLE1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) bdk_gsernx_lanex_sata_rxidle1_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDLE1_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDLE1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidle2_bcfg * * GSER Lane SATA Gen1 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN2. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidle2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidle2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidle2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidle2_bcfg bdk_gsernx_lanex_sata_rxidle2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002cd0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDLE2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) bdk_gsernx_lanex_sata_rxidle2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDLE2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDLE2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_rxidle3_bcfg * * GSER Lane SATA Gen1 RX Idle Detection Filter Control Register * Parameters controlling the analog detection and digital filtering of the receiver's * idle detection logic for SATA GEN3. For the digital filtering, setting all fields to 1, * i.e., N0=N1=I0=I1=L0=L1=1, results in no filtering. */ union bdk_gsernx_lanex_sata_rxidle3_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_rxidle3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_63 : 1; uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t reserved_54 : 1; uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ #else /* Word 0 - Little Endian */ uint64_t n0 : 27; /**< [ 26: 0](R/W) Threshold for the count of zeros in the raw idle signal from the custom macro required to deassert the idle filter output. */ uint64_t n1 : 27; /**< [ 53: 27](R/W) Threshold for the count of ones in the raw idle signal from the custom macro required to assert the idle filter output. */ uint64_t reserved_54 : 1; uint64_t i0 : 4; /**< [ 58: 55](R/W) Zeros count increment parameter. When a zero in the raw idle signal from the custom macro is encountered, the zeros count is incremented by this amount, saturating to a maximum count of [N0]. */ uint64_t i1 : 4; /**< [ 62: 59](R/W) Ones count increment parameter. When a one in the raw idle signal from the custom macro is encountered, the ones count is incremented by this amount, saturating to a maximum of [N1]. */ uint64_t reserved_63 : 1; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_rxidle3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_rxidle3_bcfg bdk_gsernx_lanex_sata_rxidle3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002cf0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_RXIDLE3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) bdk_gsernx_lanex_sata_rxidle3_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) "GSERNX_LANEX_SATA_RXIDLE3_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_RXIDLE3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_txdrv1_bcfg * * GSER Lane SATA TX Drive Control Register * TX drive Cpre, Cpost and Cmain Coefficient values and TX bias/swing for SATA GEN1. */ union bdk_gsernx_lanex_sata_txdrv1_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_txdrv1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_30_63 : 34; uint64_t sata_g1_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN1. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_21_23 : 3; uint64_t sata_g1_cpost : 5; /**< [ 20: 16](R/W) SATA GEN1 Cpost value. Combined with the reset values of [SATA_G1_CMAIN] and [SATA_G1_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g1_cmain : 6; /**< [ 13: 8](R/W) SATA GEN1 Cmain value. Combined with the reset values of [SATA_G1_CPOST] and [SATA_G1_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g1_cpre : 5; /**< [ 4: 0](R/W) SATA GEN1 Cpre value. Combined with the reset values of [SATA_G1_CPOST] and [SATA_G1_CMAIN] this yields 3.5 dB TX deemphasis. */ #else /* Word 0 - Little Endian */ uint64_t sata_g1_cpre : 5; /**< [ 4: 0](R/W) SATA GEN1 Cpre value. Combined with the reset values of [SATA_G1_CPOST] and [SATA_G1_CMAIN] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g1_cmain : 6; /**< [ 13: 8](R/W) SATA GEN1 Cmain value. Combined with the reset values of [SATA_G1_CPOST] and [SATA_G1_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g1_cpost : 5; /**< [ 20: 16](R/W) SATA GEN1 Cpost value. Combined with the reset values of [SATA_G1_CMAIN] and [SATA_G1_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_21_23 : 3; uint64_t sata_g1_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN1. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_30_63 : 34; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_txdrv1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_txdrv1_bcfg bdk_gsernx_lanex_sata_txdrv1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002f80ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_TXDRV1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) bdk_gsernx_lanex_sata_txdrv1_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) "GSERNX_LANEX_SATA_TXDRV1_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_TXDRV1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_txdrv2_bcfg * * GSER Lane SATA TX Drive Control Register * TX drive Cpre, Cpost and Cmain Coefficient values and TX bias/swing for SATA GEN2. */ union bdk_gsernx_lanex_sata_txdrv2_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_txdrv2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_30_63 : 34; uint64_t sata_g2_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN2. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_21_23 : 3; uint64_t sata_g2_cpost : 5; /**< [ 20: 16](R/W) SATA GEN2 Cpost value. Combined with the reset values of [SATA_G2_CMAIN] and [SATA_G2_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g2_cmain : 6; /**< [ 13: 8](R/W) SATA GEN2 Cmain value. Combined with the reset values of [SATA_G2_CPOST] and [SATA_G2_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g2_cpre : 5; /**< [ 4: 0](R/W) SATA GEN2 Cpre value. Combined with the reset values of [SATA_G2_CPOST] and [SATA_G2_CMAIN] this yields 3.5 dB TX deemphasis. */ #else /* Word 0 - Little Endian */ uint64_t sata_g2_cpre : 5; /**< [ 4: 0](R/W) SATA GEN2 Cpre value. Combined with the reset values of [SATA_G2_CPOST] and [SATA_G2_CMAIN] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g2_cmain : 6; /**< [ 13: 8](R/W) SATA GEN2 Cmain value. Combined with the reset values of [SATA_G2_CPOST] and [SATA_G2_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g2_cpost : 5; /**< [ 20: 16](R/W) SATA GEN2 Cpost value. Combined with the reset values of [SATA_G2_CMAIN] and [SATA_G2_CPRE] this yields 3.5 dB TX deemphasis. */ uint64_t reserved_21_23 : 3; uint64_t sata_g2_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN2. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_30_63 : 34; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_txdrv2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_txdrv2_bcfg bdk_gsernx_lanex_sata_txdrv2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002f90ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_TXDRV2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) bdk_gsernx_lanex_sata_txdrv2_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) "GSERNX_LANEX_SATA_TXDRV2_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_TXDRV2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_sata_txdrv3_bcfg * * GSER Lane SATA TX Drive Control Register * TX drive Cpre, Cpost and Cmain Coefficient values and TX bias/swing for SATA GEN3. */ union bdk_gsernx_lanex_sata_txdrv3_bcfg { uint64_t u; struct bdk_gsernx_lanex_sata_txdrv3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_30_63 : 34; uint64_t sata_g3_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN3. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_21_23 : 3; uint64_t sata_g3_cpost : 5; /**< [ 20: 16](R/W) SATA GEN3 Cpost value. Combined with the reset values of [SATA_G3_CMAIN] and [SATA_G3_CPRE] this yields 6 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g3_cmain : 6; /**< [ 13: 8](R/W) SATA GEN3 Cmain value. Combined with the reset values of [SATA_G3_CPOST] and [SATA_G3_CPRE] this yields 6 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g3_cpre : 5; /**< [ 4: 0](R/W) SATA GEN3 Cpre value. Combined with the reset values of [SATA_G3_CPOST] and [SATA_G3_CMAIN] this yields 6 dB TX deemphasis. */ #else /* Word 0 - Little Endian */ uint64_t sata_g3_cpre : 5; /**< [ 4: 0](R/W) SATA GEN3 Cpre value. Combined with the reset values of [SATA_G3_CPOST] and [SATA_G3_CMAIN] this yields 6 dB TX deemphasis. */ uint64_t reserved_5_7 : 3; uint64_t sata_g3_cmain : 6; /**< [ 13: 8](R/W) SATA GEN3 Cmain value. Combined with the reset values of [SATA_G3_CPOST] and [SATA_G3_CPRE] this yields 6 dB TX deemphasis. */ uint64_t reserved_14_15 : 2; uint64_t sata_g3_cpost : 5; /**< [ 20: 16](R/W) SATA GEN3 Cpost value. Combined with the reset values of [SATA_G3_CMAIN] and [SATA_G3_CPRE] this yields 6 dB TX deemphasis. */ uint64_t reserved_21_23 : 3; uint64_t sata_g3_tx_bias : 6; /**< [ 29: 24](R/W) TX bias/swing selection for SATA GEN3. Typical values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. */ uint64_t reserved_30_63 : 34; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_sata_txdrv3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_sata_txdrv3_bcfg bdk_gsernx_lanex_sata_txdrv3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090002fa0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SATA_TXDRV3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) bdk_gsernx_lanex_sata_txdrv3_bcfg_t #define bustype_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) "GSERNX_LANEX_SATA_TXDRV3_BCFG" #define device_bar_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SATA_TXDRV3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_scope_0_dat * * GSER Lane PCS Lite Scope Data Gathering Result Register 0 */ union bdk_gsernx_lanex_scope_0_dat { uint64_t u; struct bdk_gsernx_lanex_scope_0_dat_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_41_63 : 23; uint64_t cnt_done : 1; /**< [ 40: 40](RO/H) Indicates when the match counter has counted down from GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT] to 0x0. The error vector will no longer be updated once the counter is done. To clear the flag a new GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] or GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] toggle needs to happen. */ uint64_t ref_vec : 40; /**< [ 39: 0](RO/H) Stored doutq that will be used to compare against incoming doutq. Its value is changed by toggling GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] low then high, which will save the next doutq received in the PCS layer as the new reference vector, or by setting GSERN()_LANE()_SCOPE_CTL_2[REF_VEC_OVRRIDE] and GSERN()_LANE()_SCOPE_CTL_2[REF_VEC_OVRRIDE_EN]. This field is only valid when GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] is asserted. */ #else /* Word 0 - Little Endian */ uint64_t ref_vec : 40; /**< [ 39: 0](RO/H) Stored doutq that will be used to compare against incoming doutq. Its value is changed by toggling GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] low then high, which will save the next doutq received in the PCS layer as the new reference vector, or by setting GSERN()_LANE()_SCOPE_CTL_2[REF_VEC_OVRRIDE] and GSERN()_LANE()_SCOPE_CTL_2[REF_VEC_OVRRIDE_EN]. This field is only valid when GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] is asserted. */ uint64_t cnt_done : 1; /**< [ 40: 40](RO/H) Indicates when the match counter has counted down from GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT] to 0x0. The error vector will no longer be updated once the counter is done. To clear the flag a new GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] or GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] toggle needs to happen. */ uint64_t reserved_41_63 : 23; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_scope_0_dat_s cn; */ }; typedef union bdk_gsernx_lanex_scope_0_dat bdk_gsernx_lanex_scope_0_dat_t; static inline uint64_t BDK_GSERNX_LANEX_SCOPE_0_DAT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SCOPE_0_DAT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000900ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SCOPE_0_DAT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) bdk_gsernx_lanex_scope_0_dat_t #define bustype_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) "GSERNX_LANEX_SCOPE_0_DAT" #define device_bar_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SCOPE_0_DAT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_scope_1_dat * * GSER Lane PCS Lite Scope Data Gathering Result Register 1 */ union bdk_gsernx_lanex_scope_1_dat { uint64_t u; struct bdk_gsernx_lanex_scope_1_dat_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_40_63 : 24; uint64_t err_vec : 40; /**< [ 39: 0](RO/H) Error vector that maintains status of mismatches between doutq & doute. It updates every time there is a match between doutq & the captured GSERN()_LANE()_SCOPE_0_DAT[REF_VEC]. To clear it a toggle to GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] or GSERN()_LANE()_SCOPE_CTL[CNT_EN] is needed. This field is only valid when GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] is set. */ #else /* Word 0 - Little Endian */ uint64_t err_vec : 40; /**< [ 39: 0](RO/H) Error vector that maintains status of mismatches between doutq & doute. It updates every time there is a match between doutq & the captured GSERN()_LANE()_SCOPE_0_DAT[REF_VEC]. To clear it a toggle to GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] or GSERN()_LANE()_SCOPE_CTL[CNT_EN] is needed. This field is only valid when GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] is set. */ uint64_t reserved_40_63 : 24; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_scope_1_dat_s cn; */ }; typedef union bdk_gsernx_lanex_scope_1_dat bdk_gsernx_lanex_scope_1_dat_t; static inline uint64_t BDK_GSERNX_LANEX_SCOPE_1_DAT(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SCOPE_1_DAT(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000910ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SCOPE_1_DAT", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) bdk_gsernx_lanex_scope_1_dat_t #define bustype_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) "GSERNX_LANEX_SCOPE_1_DAT" #define device_bar_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SCOPE_1_DAT(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_scope_ctl * * GSER Lane PCS Lite Scope Data Gathering Control Register * Register controls for the PCS layer scope function. Use of this function * requires enabling the doute eye data path in the analog macro, i.e., * GSERN()_LANE()_RST2_BCFG[LN_RESET_USE_EYE] should be asserted when the lane * reset state machines bring the lane out of reset. */ union bdk_gsernx_lanex_scope_ctl { uint64_t u; struct bdk_gsernx_lanex_scope_ctl_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t doutq_ld : 1; /**< [ 56: 56](R/W) Set to a doutq value for comparison against incoming doutq. The incoming stream should guarantee a recurring doutq pattern to capture valid error vector. This works only on a positive-edge trigger which means a new value won't be stored until a 0-\>1 transition happens. Assertion of GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] also resets the match counter, GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] and GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC]. Deassert [DOUTQ_LD] to enable the match counter to count down and to enable collection of new data in the error vector (also requires that GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] is clear). For diagnostic use only. */ uint64_t reserved_50_55 : 6; uint64_t scope_en : 1; /**< [ 49: 49](R/W) Set to enable collection of GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] data. Deassertion stops collection of new mismatch bits, but does not reset GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC]. If GSERN()_LANE()_SCOPE_CTL[CNT_EN] is also asserted, collection will stop when the GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT] is reached. If not using GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT], software can control duration of GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] data collection through [SCOPE_EN]. All scope logic is conditionally clocked with the condition being GSERN()_LANE()_SCOPE_CTL[SCOPE_EN], so deassert this bit when not used to save power. For diagnostic use only. */ uint64_t cnt_rst_n : 1; /**< [ 48: 48](R/W) Set low to reset the match counter, the done indicator, and the error vector. The reset value for the counter is set by GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT]. GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] and the error vector, GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC], reset to all zeros. Set this bit high to enable the match counter to count down and to enable collection of new data in the error vector (also requires that GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] is not set high). Cycle GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] (low then high) to clear the counter and the error vector, leaving GSERN()_LANE()_SCOPE_0_DAT[REF_VEC] unchanged, enabling collection of a new error vector under updated receiver settings using the same reference vector match pattern. For diagnostic use only. */ uint64_t reserved_41_47 : 7; uint64_t cnt_en : 1; /**< [ 40: 40](R/W) Enable use of the match counter to limit the number of doutq to ref_vec matches over which the doutq to doute mismatch vector is accumulated. If this bit is not asserted, GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] accumulation is limited by GSERN()_LANE()_SCOPE_CTL[SCOPE_EN] and/or GSERN()_LANE()_SCOPE_CTL[CNT_RST_N]. For diagnostic use only. */ uint64_t cnt_limit : 40; /**< [ 39: 0](R/W) Limit value the match counter starts decrementing from. It gets loaded every time a new doutq load happens or a counter reset happens. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t cnt_limit : 40; /**< [ 39: 0](R/W) Limit value the match counter starts decrementing from. It gets loaded every time a new doutq load happens or a counter reset happens. For diagnostic use only. */ uint64_t cnt_en : 1; /**< [ 40: 40](R/W) Enable use of the match counter to limit the number of doutq to ref_vec matches over which the doutq to doute mismatch vector is accumulated. If this bit is not asserted, GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] accumulation is limited by GSERN()_LANE()_SCOPE_CTL[SCOPE_EN] and/or GSERN()_LANE()_SCOPE_CTL[CNT_RST_N]. For diagnostic use only. */ uint64_t reserved_41_47 : 7; uint64_t cnt_rst_n : 1; /**< [ 48: 48](R/W) Set low to reset the match counter, the done indicator, and the error vector. The reset value for the counter is set by GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT]. GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] and the error vector, GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC], reset to all zeros. Set this bit high to enable the match counter to count down and to enable collection of new data in the error vector (also requires that GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] is not set high). Cycle GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] (low then high) to clear the counter and the error vector, leaving GSERN()_LANE()_SCOPE_0_DAT[REF_VEC] unchanged, enabling collection of a new error vector under updated receiver settings using the same reference vector match pattern. For diagnostic use only. */ uint64_t scope_en : 1; /**< [ 49: 49](R/W) Set to enable collection of GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] data. Deassertion stops collection of new mismatch bits, but does not reset GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC]. If GSERN()_LANE()_SCOPE_CTL[CNT_EN] is also asserted, collection will stop when the GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT] is reached. If not using GSERN()_LANE()_SCOPE_CTL[CNT_LIMIT], software can control duration of GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC] data collection through [SCOPE_EN]. All scope logic is conditionally clocked with the condition being GSERN()_LANE()_SCOPE_CTL[SCOPE_EN], so deassert this bit when not used to save power. For diagnostic use only. */ uint64_t reserved_50_55 : 6; uint64_t doutq_ld : 1; /**< [ 56: 56](R/W) Set to a doutq value for comparison against incoming doutq. The incoming stream should guarantee a recurring doutq pattern to capture valid error vector. This works only on a positive-edge trigger which means a new value won't be stored until a 0-\>1 transition happens. Assertion of GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD] also resets the match counter, GSERN()_LANE()_SCOPE_0_DAT[CNT_DONE] and GSERN()_LANE()_SCOPE_1_DAT[ERR_VEC]. Deassert [DOUTQ_LD] to enable the match counter to count down and to enable collection of new data in the error vector (also requires that GSERN()_LANE()_SCOPE_CTL[CNT_RST_N] is clear). For diagnostic use only. */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_scope_ctl_s cn; */ }; typedef union bdk_gsernx_lanex_scope_ctl bdk_gsernx_lanex_scope_ctl_t; static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900008d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SCOPE_CTL", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) bdk_gsernx_lanex_scope_ctl_t #define bustype_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) "GSERNX_LANEX_SCOPE_CTL" #define device_bar_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SCOPE_CTL(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_scope_ctl_2 * * GSER Lane PCS Lite Scope Data Gathering Control Register 2 * This register contains control signals to allow loading a specific reference vector * for use in the scope logic instead of capturing the reference vector from the input * data stream. For diagnostic use only. */ union bdk_gsernx_lanex_scope_ctl_2 { uint64_t u; struct bdk_gsernx_lanex_scope_ctl_2_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_42_63 : 22; uint64_t use_doute_cal : 1; /**< [ 41: 41](R/W) Set to select doute_cal data (receiver eye calibration path) for scope comparisons with doutq (receiver normal quadrature path). If clear, the default will be to use doute (receiver eye path) to compare with doutq. The bit should be programmed as desired before writing GSERN()_LANE()_SCOPE_CTL[SCOPE_EN] to one. For diagnostic use only. */ uint64_t ref_vec_ovrride_en : 1; /**< [ 40: 40](R/W) Enable use of [REF_VEC_OVRRIDE] for the scope logic instead of capturing the reference vector from the input data stream. This control has priority over GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD]. This field should be deasserted when the override value, [REF_VEC_OVRRIDE], is changed. [REF_VEC_OVRRIDE_EN] may be asserted in the same register write that changes [REF_VEC_OVRRIDE]. For diagnostic use only. */ uint64_t ref_vec_ovrride : 40; /**< [ 39: 0](R/W) Selectable reference vector to use for comparison with doutq and doute for the scope logic as an alternative to capturing the reference vector from the incoming data stream. When used, this pattern should be recurring in the incoming data stream to capture valid error vector data, since errors will only be accumulated in the error vector when doutq matches the reference vector. [REF_VEC_OVRRIDE_EN] should be deasserted when [REF_VEC_OVRRIDE] is changed. [REF_VEC_OVRRIDE_EN] may be written to a one in the same register write that changes [REF_VEC_OVRRIDE]. Note that the bit pattern in [REF_VEC_OVRRIDE] must match the format produced by the receiver's deserializer for the data path width in use. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t ref_vec_ovrride : 40; /**< [ 39: 0](R/W) Selectable reference vector to use for comparison with doutq and doute for the scope logic as an alternative to capturing the reference vector from the incoming data stream. When used, this pattern should be recurring in the incoming data stream to capture valid error vector data, since errors will only be accumulated in the error vector when doutq matches the reference vector. [REF_VEC_OVRRIDE_EN] should be deasserted when [REF_VEC_OVRRIDE] is changed. [REF_VEC_OVRRIDE_EN] may be written to a one in the same register write that changes [REF_VEC_OVRRIDE]. Note that the bit pattern in [REF_VEC_OVRRIDE] must match the format produced by the receiver's deserializer for the data path width in use. For diagnostic use only. */ uint64_t ref_vec_ovrride_en : 1; /**< [ 40: 40](R/W) Enable use of [REF_VEC_OVRRIDE] for the scope logic instead of capturing the reference vector from the input data stream. This control has priority over GSERN()_LANE()_SCOPE_CTL[DOUTQ_LD]. This field should be deasserted when the override value, [REF_VEC_OVRRIDE], is changed. [REF_VEC_OVRRIDE_EN] may be asserted in the same register write that changes [REF_VEC_OVRRIDE]. For diagnostic use only. */ uint64_t use_doute_cal : 1; /**< [ 41: 41](R/W) Set to select doute_cal data (receiver eye calibration path) for scope comparisons with doutq (receiver normal quadrature path). If clear, the default will be to use doute (receiver eye path) to compare with doutq. The bit should be programmed as desired before writing GSERN()_LANE()_SCOPE_CTL[SCOPE_EN] to one. For diagnostic use only. */ uint64_t reserved_42_63 : 22; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_scope_ctl_2_s cn; */ }; typedef union bdk_gsernx_lanex_scope_ctl_2 bdk_gsernx_lanex_scope_ctl_2_t; static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL_2(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL_2(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900008e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SCOPE_CTL_2", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) bdk_gsernx_lanex_scope_ctl_2_t #define bustype_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) "GSERNX_LANEX_SCOPE_CTL_2" #define device_bar_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SCOPE_CTL_2(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_scope_ctl_3 * * GSER Lane PCS Lite Scope Data Gathering Control Register 3 * The four bits in this register allow for shifting either the doutq or * doute_cal data by 1 or 2 UI to allow for an offset in the framing of the * deserialized data between these two data paths in the receiver. Software * will need to iterate eye or scope measurement with identical settings * for the quadurature and eye datapaths, adjusting the shift bits in this * register until no differences are accumulated. (Note that shifting both * doutq and doute_cal would typically not be useful, since the resulting * alignment would be the same as if neither were shifted.) */ union bdk_gsernx_lanex_scope_ctl_3 { uint64_t u; struct bdk_gsernx_lanex_scope_ctl_3_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_10_63 : 54; uint64_t dbl_shift_doute : 1; /**< [ 9: 9](R/W) Assert to shift the doute_cal (receiver eye calibration path) data by 2 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t shift_doute : 1; /**< [ 8: 8](R/W) Assert to shift the doute_cal (receiver eye path) data by 1 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t reserved_2_7 : 6; uint64_t dbl_shift_doutq : 1; /**< [ 1: 1](R/W) Assert to shift the doutq (receiver normal quadrature path) data by 2 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t shift_doutq : 1; /**< [ 0: 0](R/W) Assert to shift the doutq (receiver normal quadrature path) data by 1 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ #else /* Word 0 - Little Endian */ uint64_t shift_doutq : 1; /**< [ 0: 0](R/W) Assert to shift the doutq (receiver normal quadrature path) data by 1 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t dbl_shift_doutq : 1; /**< [ 1: 1](R/W) Assert to shift the doutq (receiver normal quadrature path) data by 2 UI earlier to align with doute_cal for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t reserved_2_7 : 6; uint64_t shift_doute : 1; /**< [ 8: 8](R/W) Assert to shift the doute_cal (receiver eye path) data by 1 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. Program as desired before enabling eye data capture. */ uint64_t dbl_shift_doute : 1; /**< [ 9: 9](R/W) Assert to shift the doute_cal (receiver eye calibration path) data by 2 UI earlier to align with doutq for eye and scope comparison logic. Only data captured in the eye or scope logic is impacted by this setting. When asserted, the double shift control has priority over the (single) shift control. Program as desired before enabling eye data capture. */ uint64_t reserved_10_63 : 54; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_scope_ctl_3_s cn; */ }; typedef union bdk_gsernx_lanex_scope_ctl_3 bdk_gsernx_lanex_scope_ctl_3_t; static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL_3(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SCOPE_CTL_3(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900008f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SCOPE_CTL_3", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) bdk_gsernx_lanex_scope_ctl_3_t #define bustype_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) "GSERNX_LANEX_SCOPE_CTL_3" #define device_bar_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SCOPE_CTL_3(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_srcmx_bcfg * * GSER Lane PCS Source Mux Control Register */ union bdk_gsernx_lanex_srcmx_bcfg { uint64_t u; struct bdk_gsernx_lanex_srcmx_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_50_63 : 14; uint64_t en_hldcdrfsm_on_idle : 1; /**< [ 49: 49](R/W) Enable holding the CSR finite state machine when the receiver idle filter detects idle. For diagnostic use only. */ uint64_t en_pauseadpt_on_idle : 1; /**< [ 48: 48](R/W) Enable pausing adaptation when the receiver idle filter detects idle. For diagnostic use only. */ uint64_t reserved_44_47 : 4; uint64_t trn_tx_cgt_on : 1; /**< [ 43: 43](R/W) Force the clock gate for the training transmit data path clock on. For diagnostic use only. */ uint64_t trn_rx_cgt_on : 1; /**< [ 42: 42](R/W) Force the clock gate for the training receive data path clock on. For diagnostic use only. */ uint64_t ocx_tx_cgt_on : 1; /**< [ 41: 41](R/W) Force on the clock gate for the OCX interface. For diagnostic use only. */ uint64_t ocx_rx_cgt_on : 1; /**< [ 40: 40](R/W) Force on the clock gate for the OCX interface. For diagnostic use only. */ uint64_t sata_tx_cgt_on : 1; /**< [ 39: 39](R/W) Force the clock gate for the SATA transmit data path clock on. For diagnostic use only. */ uint64_t sata_rx_cgt_on : 1; /**< [ 38: 38](R/W) Force the clock gate for the SATA receive data path clock on. For diagnostic use only. */ uint64_t pcie_tx_cgt_on : 1; /**< [ 37: 37](R/W) Force the clock gate for the PCIe transmit data path clock on. For diagnostic use only. */ uint64_t pcie_rx_cgt_on : 1; /**< [ 36: 36](R/W) Force the clock gate for the PCIe receive data path clock on. For diagnostic use only. */ uint64_t pat_tx_cgt_on : 1; /**< [ 35: 35](R/W) Force the clock gate for the pattern transmit data path clock on. For diagnostic use only. */ uint64_t pat_rx_cgt_on : 1; /**< [ 34: 34](R/W) Force the clock gate for the pattern receive data path clock on. For diagnostic use only. */ uint64_t cgx_tx_cgt_on : 1; /**< [ 33: 33](R/W) Force the clock gate for the CGX transmit data path clock on. For diagnostic use only. */ uint64_t cgx_rx_cgt_on : 1; /**< [ 32: 32](R/W) Force the clock gate for the CGX receive data path clock on. For diagnostic use only. */ uint64_t reserved_24_31 : 8; uint64_t txdivclk_mux_sel_ovrride_en : 1;/**< [ 23: 23](R/W) Mux selection override enable for lane txdivclk mux; enables use of [TXDIVCLK_MUX_SEL_OVRRIDE]. This must be set to 1 for all lanes in a multi-lane link. 0 = Use the lane's local txdivclk. 1 = Use [TXDIVCLK_MUX_SEL_OVRRIDE] instead of other sources for control of the lane txdivclk mux. */ uint64_t reserved_19_22 : 4; uint64_t txdivclk_mux_sel_ovrride : 3;/**< [ 18: 16](R/W) Mux selection override control for lane txdivclk mux, when enabled by [TXDIVCLK_MUX_SEL_OVRRIDE_EN], the following values apply: 0x0 = Use lane internal txdivclk (e.g. for single-lane links). 0x1 = Use txdivclkx2 (e.g. for 2-lane links). 0x2 = Use txdivclkx4 (e.g. for 4-lane links). 0x3 = Use txdivclkx8 (e.g. for 8-lane links). 0x4 = Use txdivclkx16 (e.g. for 16-lane links). _ else = Reserved. */ uint64_t reserved_13_15 : 3; uint64_t tx_ctrl_sel : 5; /**< [ 12: 8](R/W) Lite layer transmit control-settings mux control: 0x0 = no source selected; defaults to idle termination unless CSR overrides are enabled by setting GSERN()_LANE()_TX_DRV_BCFG[EN_TX_DRV]. 0x1 = PCIe. 0x2 = CGX. 0x4 = SATA. 0x8 = OCX. 0x10 = Pattern memory generator. _ else = reserved. */ uint64_t reserved_5_7 : 3; uint64_t tx_data_sel : 5; /**< [ 4: 0](R/W) Lite layer transmit data mux control: 0x0 = No source selected, e.g., for PRBS testing. 0x1 = PCIe. 0x2 = CGX. 0x4 = SATA. 0x8 = OCX. 0x10 = Pattern memory generator. _ else = reserved. (This is a 1-hot vector.) */ #else /* Word 0 - Little Endian */ uint64_t tx_data_sel : 5; /**< [ 4: 0](R/W) Lite layer transmit data mux control: 0x0 = No source selected, e.g., for PRBS testing. 0x1 = PCIe. 0x2 = CGX. 0x4 = SATA. 0x8 = OCX. 0x10 = Pattern memory generator. _ else = reserved. (This is a 1-hot vector.) */ uint64_t reserved_5_7 : 3; uint64_t tx_ctrl_sel : 5; /**< [ 12: 8](R/W) Lite layer transmit control-settings mux control: 0x0 = no source selected; defaults to idle termination unless CSR overrides are enabled by setting GSERN()_LANE()_TX_DRV_BCFG[EN_TX_DRV]. 0x1 = PCIe. 0x2 = CGX. 0x4 = SATA. 0x8 = OCX. 0x10 = Pattern memory generator. _ else = reserved. */ uint64_t reserved_13_15 : 3; uint64_t txdivclk_mux_sel_ovrride : 3;/**< [ 18: 16](R/W) Mux selection override control for lane txdivclk mux, when enabled by [TXDIVCLK_MUX_SEL_OVRRIDE_EN], the following values apply: 0x0 = Use lane internal txdivclk (e.g. for single-lane links). 0x1 = Use txdivclkx2 (e.g. for 2-lane links). 0x2 = Use txdivclkx4 (e.g. for 4-lane links). 0x3 = Use txdivclkx8 (e.g. for 8-lane links). 0x4 = Use txdivclkx16 (e.g. for 16-lane links). _ else = Reserved. */ uint64_t reserved_19_22 : 4; uint64_t txdivclk_mux_sel_ovrride_en : 1;/**< [ 23: 23](R/W) Mux selection override enable for lane txdivclk mux; enables use of [TXDIVCLK_MUX_SEL_OVRRIDE]. This must be set to 1 for all lanes in a multi-lane link. 0 = Use the lane's local txdivclk. 1 = Use [TXDIVCLK_MUX_SEL_OVRRIDE] instead of other sources for control of the lane txdivclk mux. */ uint64_t reserved_24_31 : 8; uint64_t cgx_rx_cgt_on : 1; /**< [ 32: 32](R/W) Force the clock gate for the CGX receive data path clock on. For diagnostic use only. */ uint64_t cgx_tx_cgt_on : 1; /**< [ 33: 33](R/W) Force the clock gate for the CGX transmit data path clock on. For diagnostic use only. */ uint64_t pat_rx_cgt_on : 1; /**< [ 34: 34](R/W) Force the clock gate for the pattern receive data path clock on. For diagnostic use only. */ uint64_t pat_tx_cgt_on : 1; /**< [ 35: 35](R/W) Force the clock gate for the pattern transmit data path clock on. For diagnostic use only. */ uint64_t pcie_rx_cgt_on : 1; /**< [ 36: 36](R/W) Force the clock gate for the PCIe receive data path clock on. For diagnostic use only. */ uint64_t pcie_tx_cgt_on : 1; /**< [ 37: 37](R/W) Force the clock gate for the PCIe transmit data path clock on. For diagnostic use only. */ uint64_t sata_rx_cgt_on : 1; /**< [ 38: 38](R/W) Force the clock gate for the SATA receive data path clock on. For diagnostic use only. */ uint64_t sata_tx_cgt_on : 1; /**< [ 39: 39](R/W) Force the clock gate for the SATA transmit data path clock on. For diagnostic use only. */ uint64_t ocx_rx_cgt_on : 1; /**< [ 40: 40](R/W) Force on the clock gate for the OCX interface. For diagnostic use only. */ uint64_t ocx_tx_cgt_on : 1; /**< [ 41: 41](R/W) Force on the clock gate for the OCX interface. For diagnostic use only. */ uint64_t trn_rx_cgt_on : 1; /**< [ 42: 42](R/W) Force the clock gate for the training receive data path clock on. For diagnostic use only. */ uint64_t trn_tx_cgt_on : 1; /**< [ 43: 43](R/W) Force the clock gate for the training transmit data path clock on. For diagnostic use only. */ uint64_t reserved_44_47 : 4; uint64_t en_pauseadpt_on_idle : 1; /**< [ 48: 48](R/W) Enable pausing adaptation when the receiver idle filter detects idle. For diagnostic use only. */ uint64_t en_hldcdrfsm_on_idle : 1; /**< [ 49: 49](R/W) Enable holding the CSR finite state machine when the receiver idle filter detects idle. For diagnostic use only. */ uint64_t reserved_50_63 : 14; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_srcmx_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_srcmx_bcfg bdk_gsernx_lanex_srcmx_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_SRCMX_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_SRCMX_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000a10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_SRCMX_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) bdk_gsernx_lanex_srcmx_bcfg_t #define bustype_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) "GSERNX_LANEX_SRCMX_BCFG" #define device_bar_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_SRCMX_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_0_bcfg * * GSER Lane Training Base Configuration Register 0 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_0_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_0_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t txt_post : 5; /**< [ 63: 59](RO/H) After TX BASE-R link training, this is the resultant POST Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ uint64_t txt_main : 6; /**< [ 58: 53](RO/H) After TX BASE-R link training, this is the resultant MAIN Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ uint64_t txt_pre : 5; /**< [ 52: 48](RO/H) After TX BASE-R link training, this is the resultant POST Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ uint64_t txt_swm : 1; /**< [ 47: 47](R/W) Set when TX BASE-R link training is to be performed under software control. For diagnostic use only. */ uint64_t txt_cur_post : 5; /**< [ 46: 42](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C+1) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_cur_main : 6; /**< [ 41: 36](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C0) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_cur_pre : 5; /**< [ 35: 31](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C-1) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_cur_prg : 1; /**< [ 30: 30](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, setting [TXT_CUR_PRG] writes the TX equalizer coefficients in GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRE], GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_MAIN], and GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_POST] registers into the GSER TX equalizer. For diagnostic use only. */ uint64_t rxt_adtmout_fast : 1; /**< [ 29: 29](R/W) Reserved. Internal: For simulation use only. When set accelerates the link training time-out timer during BASE-R link training. When set shortens the link training time-out timer to time-out after 164 microseconds to facilitate shorter BASE-R training simulations runs. For diagnostic use only. */ uint64_t rxt_adtmout_sel : 2; /**< [ 28: 27](R/W) Selects the timeout value for the BASE-R link training time-out timer. This time-out timer value is only valid if GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] is cleared to 0 and BASE-R hardware training is enabled. When GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] is cleared to 0 the link training time-out timer value is set by [RXT_ADTMOUT_SEL] to the values shown. 0x0 = 83.89 milliseconds. 0x1 = 167.77 milliseconds. 0x2 = 335.54 milliseconds. 0x3 = 419.43 milliseconds. When GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] is set to 1 the link training time-out timer value is set by [RXT_ADTMOUT_SEL] to the values shown. 0x0 = 81.92 microseconds. 0x1 = 163.84 microseconds. 0x2 = 327.68 microseconds. 0x3 = 655.36 microseconds. */ uint64_t rxt_adtmout_disable : 1; /**< [ 26: 26](R/W) For BASE-R links one of the terminating condition for link training receiver adaptation is a programmable time-out timer. When the receiver adaptation time-out timer expires the link training process is concluded and the link is considered good and the receiver ready status report bit is set in the local device. Note that when BASE-R link training is performed under software control, (GSERN()_LANE()_TRAIN_0_BCFG[RXT_SWM] is set), the receiver adaptation time-out timer is disabled and not used. Set this bit to a one to disable the link training receiver adaptation time-out timer during BASE-R link training under hardware control. For diagnostic use only. */ uint64_t rxt_eer : 1; /**< [ 25: 25](WO/H) When RX BASE-R link training is being performed under software control, (GSERN()_LANE()_TRAIN_0_BCFG[RXT_SWM] is set), writing this bit initiates an equalization request to the SerDes receiver equalizer. Reading this bit always returns a zero. */ uint64_t rxt_esv : 1; /**< [ 24: 24](RO/H) When performing an equalization request ([RXT_EER]), this bit, when set, indicates that the equalization status (RXT_ESM) is valid. When issuing a [RXT_EER] request, it is expected that [RXT_ESV] will get written to zero so that a valid RXT_ESM can be determined. */ uint64_t rxt_tx_post_dir : 2; /**< [ 23: 22](RO/H) RX recommended TXPOST direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t rxt_tx_main_dir : 2; /**< [ 21: 20](RO/H) RX recommended TXMAIN direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t rxt_tx_pre_dir : 2; /**< [ 19: 18](RO/H) RX recommended TXPRE direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t trn_short : 1; /**< [ 17: 17](R/W) Train short. Executes an abbreviated BASE-R training session. For diagnostic use only. */ uint64_t ld_receiver_rdy : 1; /**< [ 16: 16](RO/H) At the completion of BASE-R training the local device sets receiver ready. This bit reflects the state of the local device receiver ready status. For Debug use only. This bit is only valid during BASE-R link training and at the conclusion of link training. */ uint64_t frz_cdr_en : 1; /**< [ 15: 15](R/W) Freeze CDR enable. In CGX mode when set to a one enables the CGX MAC to Freeze the receiver CDR during BASE-R autonegotiation (AN) and KR training to prevent the RX CDR from locking onto the differential manchester encoded AN and KR training frames. CGX asserts the rx cdr coast signal to the GSER block to freeze the RX CDR. Clearing [FRZ_CDR_EN] prevents CGS from freezing the RX CDR. For diagnostic use only. */ uint64_t trn_ovrd_en : 1; /**< [ 14: 14](R/W) BASE-R Training Override Enable. Setting [TRN_OVRD_EN] will enable BASE-R training logic for both CGX and OCX. This is a CSR override for the BASE-R training enable signals from the CGX and OCX blocks. Either GSERN()_LANE()_TRAIN_0_BCFG[CFG_CGX] or GSERN()_LANE()_TRAIN_0_BCFG[CFG_OCX] must be set to 1 before [TRN_OVRD_EN] is set to 1. Also GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] must be programmed to select CGX or OCX mode before [TRN_OVRD_EN] is set to 1. For diagnostic use only. */ uint64_t reserved_8_13 : 6; uint64_t cfg_ocx : 1; /**< [ 7: 7](R/W) Configure BASE-R training logic for OCX mode. When [CFG_OCX] is set the Coefficient Update (CU) and Status Report (SR) messaging is reconfigured for the OCX controller. The CU and SR messages must be sent and received in the txdivclk and rxdivclk domains for the OCX controller. When [CFG_OCX] is set, the GSERN()_LANE()_TRAIN_0_BCFG[CFG_CGX] field must be cleared to zero. */ uint64_t rxt_adjmain : 1; /**< [ 6: 6](R/W) For all link training, this bit determines how the main tap is adjusted at the start of link training. When set the main tap of link partner transmitter peak-to-peak level is adjusted to optimize the AGC of the local device receiver. This is intended to prevent receiver saturation on short or low loss links. To perform main tap optimization of the link partner transmitter set this bit prior to enabling link training. */ uint64_t rxt_initialize : 1; /**< [ 5: 5](R/W) For all link training, this bit determines how to configure the initialize bit in the coefficient update message that is sent to the far end transmitter of RX training. When set, a request is made that the coefficients be set to its INITIALIZE state. To perform an initialize prior to link training, set this bit prior to performing link training. Note that it is illegal to set both the preset and initialize bits at the same time. */ uint64_t rxt_preset : 1; /**< [ 4: 4](R/W) For all link training, this bit determines how to configure the preset bit in the coefficient update message that is sent to the far end transmitter. When set, a one time request is made that the coefficients be set to a state where equalization is turned off. To perform a preset, set this bit prior to link training. Link training needs to be disabled to complete the request and get the rxtrain state machine back to idle. Note that it is illegal to set both the preset and initialize bits at the same time. For diagnostic use only. */ uint64_t rxt_swm : 1; /**< [ 3: 3](R/W) Set when RX BASE-R link training is to be performed under software control. See GSERN()_LANE()_TRAIN_0_BCFG[RXT_EER]. */ uint64_t cgx_quad : 1; /**< [ 2: 2](R/W) When set, indicates the QLM is in CGX quad aggregation mode. [CGX_QUAD] must only be set when GSERN()_LANE()_SRCMX_BCFG[TX_DATA_SEL]=CGX is set and GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL]=CGX is set and [CGX_DUAL] is clear. When [CGX_QUAD] is set, GSER bundles all four lanes for one BCX controller. [CGX_QUAD] must only be set for the XAUI/DXAUI, XLAUI, and CAUI protocols. */ uint64_t cgx_dual : 1; /**< [ 1: 1](R/W) When set, indicates the QLM is in CGX dual aggregation mode. [CGX_DUAL] must only be set when GSERN()_LANE()_SRCMX_BCFG[TX_DATA_SEL]=CGX is set and GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL]=CGX is set and [CGX_QUAD] is clear. When [CGX_DUAL] is set, GSER bundles lanes 0 and 1 for one CGX controller and bundles lanes 2 and 3 for another CGX controller. [CGX_DUAL] must only be set for the RXAUI protocol. */ uint64_t cfg_cgx : 1; /**< [ 0: 0](R/W) When set, indicates the BASE-R training logic is in CGX mode. Enables SCLK to the CGX TX and RX data path and the BASE-R TX/RX Training blocks. [CFG_CGX] must be set to one when either GSERN()_LANE()_TRAIN_0_BCFG[CGX_DUAL] or GSERN()_LANE()_TRAIN_0_BCFG[CGX_QUAD] is set. When [CFG_CGX] is set, the GSERN()_LANE()_TRAIN_0_BCFG[CFG_OCX] field must be cleared to zero. */ #else /* Word 0 - Little Endian */ uint64_t cfg_cgx : 1; /**< [ 0: 0](R/W) When set, indicates the BASE-R training logic is in CGX mode. Enables SCLK to the CGX TX and RX data path and the BASE-R TX/RX Training blocks. [CFG_CGX] must be set to one when either GSERN()_LANE()_TRAIN_0_BCFG[CGX_DUAL] or GSERN()_LANE()_TRAIN_0_BCFG[CGX_QUAD] is set. When [CFG_CGX] is set, the GSERN()_LANE()_TRAIN_0_BCFG[CFG_OCX] field must be cleared to zero. */ uint64_t cgx_dual : 1; /**< [ 1: 1](R/W) When set, indicates the QLM is in CGX dual aggregation mode. [CGX_DUAL] must only be set when GSERN()_LANE()_SRCMX_BCFG[TX_DATA_SEL]=CGX is set and GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL]=CGX is set and [CGX_QUAD] is clear. When [CGX_DUAL] is set, GSER bundles lanes 0 and 1 for one CGX controller and bundles lanes 2 and 3 for another CGX controller. [CGX_DUAL] must only be set for the RXAUI protocol. */ uint64_t cgx_quad : 1; /**< [ 2: 2](R/W) When set, indicates the QLM is in CGX quad aggregation mode. [CGX_QUAD] must only be set when GSERN()_LANE()_SRCMX_BCFG[TX_DATA_SEL]=CGX is set and GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL]=CGX is set and [CGX_DUAL] is clear. When [CGX_QUAD] is set, GSER bundles all four lanes for one BCX controller. [CGX_QUAD] must only be set for the XAUI/DXAUI, XLAUI, and CAUI protocols. */ uint64_t rxt_swm : 1; /**< [ 3: 3](R/W) Set when RX BASE-R link training is to be performed under software control. See GSERN()_LANE()_TRAIN_0_BCFG[RXT_EER]. */ uint64_t rxt_preset : 1; /**< [ 4: 4](R/W) For all link training, this bit determines how to configure the preset bit in the coefficient update message that is sent to the far end transmitter. When set, a one time request is made that the coefficients be set to a state where equalization is turned off. To perform a preset, set this bit prior to link training. Link training needs to be disabled to complete the request and get the rxtrain state machine back to idle. Note that it is illegal to set both the preset and initialize bits at the same time. For diagnostic use only. */ uint64_t rxt_initialize : 1; /**< [ 5: 5](R/W) For all link training, this bit determines how to configure the initialize bit in the coefficient update message that is sent to the far end transmitter of RX training. When set, a request is made that the coefficients be set to its INITIALIZE state. To perform an initialize prior to link training, set this bit prior to performing link training. Note that it is illegal to set both the preset and initialize bits at the same time. */ uint64_t rxt_adjmain : 1; /**< [ 6: 6](R/W) For all link training, this bit determines how the main tap is adjusted at the start of link training. When set the main tap of link partner transmitter peak-to-peak level is adjusted to optimize the AGC of the local device receiver. This is intended to prevent receiver saturation on short or low loss links. To perform main tap optimization of the link partner transmitter set this bit prior to enabling link training. */ uint64_t cfg_ocx : 1; /**< [ 7: 7](R/W) Configure BASE-R training logic for OCX mode. When [CFG_OCX] is set the Coefficient Update (CU) and Status Report (SR) messaging is reconfigured for the OCX controller. The CU and SR messages must be sent and received in the txdivclk and rxdivclk domains for the OCX controller. When [CFG_OCX] is set, the GSERN()_LANE()_TRAIN_0_BCFG[CFG_CGX] field must be cleared to zero. */ uint64_t reserved_8_13 : 6; uint64_t trn_ovrd_en : 1; /**< [ 14: 14](R/W) BASE-R Training Override Enable. Setting [TRN_OVRD_EN] will enable BASE-R training logic for both CGX and OCX. This is a CSR override for the BASE-R training enable signals from the CGX and OCX blocks. Either GSERN()_LANE()_TRAIN_0_BCFG[CFG_CGX] or GSERN()_LANE()_TRAIN_0_BCFG[CFG_OCX] must be set to 1 before [TRN_OVRD_EN] is set to 1. Also GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] must be programmed to select CGX or OCX mode before [TRN_OVRD_EN] is set to 1. For diagnostic use only. */ uint64_t frz_cdr_en : 1; /**< [ 15: 15](R/W) Freeze CDR enable. In CGX mode when set to a one enables the CGX MAC to Freeze the receiver CDR during BASE-R autonegotiation (AN) and KR training to prevent the RX CDR from locking onto the differential manchester encoded AN and KR training frames. CGX asserts the rx cdr coast signal to the GSER block to freeze the RX CDR. Clearing [FRZ_CDR_EN] prevents CGS from freezing the RX CDR. For diagnostic use only. */ uint64_t ld_receiver_rdy : 1; /**< [ 16: 16](RO/H) At the completion of BASE-R training the local device sets receiver ready. This bit reflects the state of the local device receiver ready status. For Debug use only. This bit is only valid during BASE-R link training and at the conclusion of link training. */ uint64_t trn_short : 1; /**< [ 17: 17](R/W) Train short. Executes an abbreviated BASE-R training session. For diagnostic use only. */ uint64_t rxt_tx_pre_dir : 2; /**< [ 19: 18](RO/H) RX recommended TXPRE direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t rxt_tx_main_dir : 2; /**< [ 21: 20](RO/H) RX recommended TXMAIN direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t rxt_tx_post_dir : 2; /**< [ 23: 22](RO/H) RX recommended TXPOST direction change. Recommended direction change outputs from the PHY for the link partner transmitter coefficients. 0x0 = Hold. 0x1 = Increment. 0x2 = Decrement. 0x3 = Hold. */ uint64_t rxt_esv : 1; /**< [ 24: 24](RO/H) When performing an equalization request ([RXT_EER]), this bit, when set, indicates that the equalization status (RXT_ESM) is valid. When issuing a [RXT_EER] request, it is expected that [RXT_ESV] will get written to zero so that a valid RXT_ESM can be determined. */ uint64_t rxt_eer : 1; /**< [ 25: 25](WO/H) When RX BASE-R link training is being performed under software control, (GSERN()_LANE()_TRAIN_0_BCFG[RXT_SWM] is set), writing this bit initiates an equalization request to the SerDes receiver equalizer. Reading this bit always returns a zero. */ uint64_t rxt_adtmout_disable : 1; /**< [ 26: 26](R/W) For BASE-R links one of the terminating condition for link training receiver adaptation is a programmable time-out timer. When the receiver adaptation time-out timer expires the link training process is concluded and the link is considered good and the receiver ready status report bit is set in the local device. Note that when BASE-R link training is performed under software control, (GSERN()_LANE()_TRAIN_0_BCFG[RXT_SWM] is set), the receiver adaptation time-out timer is disabled and not used. Set this bit to a one to disable the link training receiver adaptation time-out timer during BASE-R link training under hardware control. For diagnostic use only. */ uint64_t rxt_adtmout_sel : 2; /**< [ 28: 27](R/W) Selects the timeout value for the BASE-R link training time-out timer. This time-out timer value is only valid if GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] is cleared to 0 and BASE-R hardware training is enabled. When GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] is cleared to 0 the link training time-out timer value is set by [RXT_ADTMOUT_SEL] to the values shown. 0x0 = 83.89 milliseconds. 0x1 = 167.77 milliseconds. 0x2 = 335.54 milliseconds. 0x3 = 419.43 milliseconds. When GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] is set to 1 the link training time-out timer value is set by [RXT_ADTMOUT_SEL] to the values shown. 0x0 = 81.92 microseconds. 0x1 = 163.84 microseconds. 0x2 = 327.68 microseconds. 0x3 = 655.36 microseconds. */ uint64_t rxt_adtmout_fast : 1; /**< [ 29: 29](R/W) Reserved. Internal: For simulation use only. When set accelerates the link training time-out timer during BASE-R link training. When set shortens the link training time-out timer to time-out after 164 microseconds to facilitate shorter BASE-R training simulations runs. For diagnostic use only. */ uint64_t txt_cur_prg : 1; /**< [ 30: 30](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, setting [TXT_CUR_PRG] writes the TX equalizer coefficients in GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRE], GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_MAIN], and GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_POST] registers into the GSER TX equalizer. For diagnostic use only. */ uint64_t txt_cur_pre : 5; /**< [ 35: 31](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C-1) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_cur_main : 6; /**< [ 41: 36](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C0) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_cur_post : 5; /**< [ 46: 42](R/W) When TX BASE-R link training is being performed under software control, e.g. GSERN()_LANE()_TRAIN_0_BCFG[TXT_SWM] is set, this is the (C+1) coefficient update to be written to the SerDes TX Equalizer. The coefficients are written to the TX equalizer when GSERN()_LANE()_TRAIN_0_BCFG[TXT_CUR_PRG] is set to a one. For diagnostic use only. */ uint64_t txt_swm : 1; /**< [ 47: 47](R/W) Set when TX BASE-R link training is to be performed under software control. For diagnostic use only. */ uint64_t txt_pre : 5; /**< [ 52: 48](RO/H) After TX BASE-R link training, this is the resultant POST Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ uint64_t txt_main : 6; /**< [ 58: 53](RO/H) After TX BASE-R link training, this is the resultant MAIN Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ uint64_t txt_post : 5; /**< [ 63: 59](RO/H) After TX BASE-R link training, this is the resultant POST Tap value that was written to the PHY. This field has no meaning if TX BASE-R link training was not performed. For diagnostic use only. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_0_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_0_bcfg bdk_gsernx_lanex_train_0_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_0_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_0_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900031b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_0_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) bdk_gsernx_lanex_train_0_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) "GSERNX_LANEX_TRAIN_0_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_0_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_10_bcfg * * GSER Lane Training Base Configuration Register 10 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_10_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_10_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_59_63 : 5; uint64_t l_c1_e_adj_sgn : 1; /**< [ 58: 58](R/W) Sets the lower C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the lower C1_E sampler below the eye C1_Q sampler. 1 = The offset sign is negative positioning the lower C1_E sampler above the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_4_BCFG[C1_E_ADJ_STEP] during KR training. For diagnostic use only. */ uint64_t u_c1_e_adj_sgn : 1; /**< [ 57: 57](R/W) Sets the upper C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the upper C1_E sampler above the eye C1_Q sampler. 1 = The offset sign is negative positioning the upper C1_E sampler below the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_10_BCFG[U_C1_E_ADJ_STEP] for BASE-R training. For diagnostic use only. */ uint64_t u_c1_e_adj_step : 5; /**< [ 56: 52](R/W) Sets the C1 E sampler voltage level during eye monitor sampling when GSERN()_LANE()_TRAIN_10_BCFG[FOM_TYPE] is set to one for BASE-R training. Typically [U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15mv above the C1 Q sampler voltage level when computing the FOM using the two step process, e.g. [FOM_TYPE] set to one, with the error slicer level positioned above and below the data slicer level. The error slicer level and positon relative to the data slicer is controlled by [U_C1_E_ADJ_STEP] and GSERN()_LANE()_TRAIN_10_BCFG[U_C1_E_ADJ_SGN] for BASE-R training. Steps are in units of 5.08 mV per step. For diagnostic use only. */ uint64_t l_c1_e_adj_step : 5; /**< [ 51: 47](R/W) Sets the C1 E sampler voltage level during eye monitor sampling when GSERN()_LANE()_TRAIN_10_BCFG[FOM_TYPE] is set to one for BASE-R training. Typically [U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15mv below the C1 Q sampler voltage level when computing the FOM using the two step process, e.g. [FOM_TYPE] set to one, with the error slicer level positioned above and below the data slicer level. The error slicer level and positon relative to the data slicer is controlled by [U_C1_E_ADJ_STEP] and GSERN()_LANE()_TRAIN_10_BCFG[L_C1_E_ADJ_SGN] for BASE-R training. Steps are in units of 5.08 mV per step. For diagnostic use only. */ uint64_t fom_type : 1; /**< [ 46: 46](R/W) BASE-R and PCIE training selects the Figure of Merit (FOM) measurement type. For diagnostic use only. 0 = The raw FOM is measured by setting the eye monitor error slicer below the data slicer nominal level and counting the errors for each of the transition ones, non trasition ones, transition zeros, and non transition zeros then summing the four error counts, convert to ones complement, then normalize to a 12-bit unsigned integer. 1 = The raw FOM calculation follows the steps above however the eye monitor error measurements is a two step process with the error slicer first set both below the nominal data slicer level and then on the second measurement pass set above the data slicer nominal level. Internal: The first FOM method can detect a saturated receiver and stop training if the eye is sufficiently open. The second FOM method returns a lower value for overequalized eyes and is useful for driving the training to a more optimal equalization setting on longer links. */ uint64_t trn_fom_thrs_en : 1; /**< [ 45: 45](R/W) BASE-R training when set to 1 enables the FOM threshold value in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] for training convergence detection. When the measured FOM exceeds the value in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 0x1, training will terminate depending on the settings of the training termination condition values set in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. When BASE-R training converges due the FOM threshold being met or exceeded GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS] will be set to 1 if GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 1. For diagnostic use only. */ uint64_t exit_fom_thrs_val : 12; /**< [ 44: 33](R/W) BASE-R training sets the FOM threshold value used for training convergence detection. When the measured FOM exceeds the value in [EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 0x1, training will terminate depending on the settings of the training termination condition values set in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. For diagnostic use only. */ uint64_t ttrk_array_clr : 1; /**< [ 32: 32](R/W) KR training Local Device Tx Equalizer tracking array clear signal. Used to clear the tracking array after KR training has completed. For diagnostic use only. */ uint64_t ttrk_array_rd : 1; /**< [ 31: 31](R/W) KR training Local Device Tx Equalizer tracking array index Read signal. Used to readback tap values from the tracking array after KR training has completed. For diagnostic use only. */ uint64_t ttrk_array_addr : 7; /**< [ 30: 24](R/W) KR training Local Device Tx Equalizer tracking array index. Used to readback tap values from the tracking array after KR training has completed. For diagnostic use only. Internal: During KR training the local device transmitter tap values (C0,C+1,C-1) are stored in the tap tracking array. The array holds up to 128 locations. After KR training completes the array can be read back to determine the training progression of the transmitter taps. This is helpful in debugging KR training convergence problems of the local device transmitter. */ uint64_t ttrk_moves : 8; /**< [ 23: 16](RO/H) KR training Local Device Tx Equalizer number of tap adjustments during KR training. For diagnostic use only. */ uint64_t ttrk_pre : 5; /**< [ 15: 11](RO/H) KR training Local Device Tx Equalizer Pre (C-1) value from the tap tracking array. For diagnostic use only. */ uint64_t ttrk_main : 6; /**< [ 10: 5](RO/H) KR training Local Device Tx Equalizer Main (C0) value from the tap tracking array. For diagnostic use only. */ uint64_t ttrk_post : 5; /**< [ 4: 0](RO/H) KR training Local Device Tx Equalizer Post (C+1) value from the tap tracking array. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t ttrk_post : 5; /**< [ 4: 0](RO/H) KR training Local Device Tx Equalizer Post (C+1) value from the tap tracking array. For diagnostic use only. */ uint64_t ttrk_main : 6; /**< [ 10: 5](RO/H) KR training Local Device Tx Equalizer Main (C0) value from the tap tracking array. For diagnostic use only. */ uint64_t ttrk_pre : 5; /**< [ 15: 11](RO/H) KR training Local Device Tx Equalizer Pre (C-1) value from the tap tracking array. For diagnostic use only. */ uint64_t ttrk_moves : 8; /**< [ 23: 16](RO/H) KR training Local Device Tx Equalizer number of tap adjustments during KR training. For diagnostic use only. */ uint64_t ttrk_array_addr : 7; /**< [ 30: 24](R/W) KR training Local Device Tx Equalizer tracking array index. Used to readback tap values from the tracking array after KR training has completed. For diagnostic use only. Internal: During KR training the local device transmitter tap values (C0,C+1,C-1) are stored in the tap tracking array. The array holds up to 128 locations. After KR training completes the array can be read back to determine the training progression of the transmitter taps. This is helpful in debugging KR training convergence problems of the local device transmitter. */ uint64_t ttrk_array_rd : 1; /**< [ 31: 31](R/W) KR training Local Device Tx Equalizer tracking array index Read signal. Used to readback tap values from the tracking array after KR training has completed. For diagnostic use only. */ uint64_t ttrk_array_clr : 1; /**< [ 32: 32](R/W) KR training Local Device Tx Equalizer tracking array clear signal. Used to clear the tracking array after KR training has completed. For diagnostic use only. */ uint64_t exit_fom_thrs_val : 12; /**< [ 44: 33](R/W) BASE-R training sets the FOM threshold value used for training convergence detection. When the measured FOM exceeds the value in [EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 0x1, training will terminate depending on the settings of the training termination condition values set in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. For diagnostic use only. */ uint64_t trn_fom_thrs_en : 1; /**< [ 45: 45](R/W) BASE-R training when set to 1 enables the FOM threshold value in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] for training convergence detection. When the measured FOM exceeds the value in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 0x1, training will terminate depending on the settings of the training termination condition values set in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. When BASE-R training converges due the FOM threshold being met or exceeded GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS] will be set to 1 if GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 1. For diagnostic use only. */ uint64_t fom_type : 1; /**< [ 46: 46](R/W) BASE-R and PCIE training selects the Figure of Merit (FOM) measurement type. For diagnostic use only. 0 = The raw FOM is measured by setting the eye monitor error slicer below the data slicer nominal level and counting the errors for each of the transition ones, non trasition ones, transition zeros, and non transition zeros then summing the four error counts, convert to ones complement, then normalize to a 12-bit unsigned integer. 1 = The raw FOM calculation follows the steps above however the eye monitor error measurements is a two step process with the error slicer first set both below the nominal data slicer level and then on the second measurement pass set above the data slicer nominal level. Internal: The first FOM method can detect a saturated receiver and stop training if the eye is sufficiently open. The second FOM method returns a lower value for overequalized eyes and is useful for driving the training to a more optimal equalization setting on longer links. */ uint64_t l_c1_e_adj_step : 5; /**< [ 51: 47](R/W) Sets the C1 E sampler voltage level during eye monitor sampling when GSERN()_LANE()_TRAIN_10_BCFG[FOM_TYPE] is set to one for BASE-R training. Typically [U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15mv below the C1 Q sampler voltage level when computing the FOM using the two step process, e.g. [FOM_TYPE] set to one, with the error slicer level positioned above and below the data slicer level. The error slicer level and positon relative to the data slicer is controlled by [U_C1_E_ADJ_STEP] and GSERN()_LANE()_TRAIN_10_BCFG[L_C1_E_ADJ_SGN] for BASE-R training. Steps are in units of 5.08 mV per step. For diagnostic use only. */ uint64_t u_c1_e_adj_step : 5; /**< [ 56: 52](R/W) Sets the C1 E sampler voltage level during eye monitor sampling when GSERN()_LANE()_TRAIN_10_BCFG[FOM_TYPE] is set to one for BASE-R training. Typically [U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15mv above the C1 Q sampler voltage level when computing the FOM using the two step process, e.g. [FOM_TYPE] set to one, with the error slicer level positioned above and below the data slicer level. The error slicer level and positon relative to the data slicer is controlled by [U_C1_E_ADJ_STEP] and GSERN()_LANE()_TRAIN_10_BCFG[U_C1_E_ADJ_SGN] for BASE-R training. Steps are in units of 5.08 mV per step. For diagnostic use only. */ uint64_t u_c1_e_adj_sgn : 1; /**< [ 57: 57](R/W) Sets the upper C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the upper C1_E sampler above the eye C1_Q sampler. 1 = The offset sign is negative positioning the upper C1_E sampler below the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_10_BCFG[U_C1_E_ADJ_STEP] for BASE-R training. For diagnostic use only. */ uint64_t l_c1_e_adj_sgn : 1; /**< [ 58: 58](R/W) Sets the lower C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the lower C1_E sampler below the eye C1_Q sampler. 1 = The offset sign is negative positioning the lower C1_E sampler above the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_4_BCFG[C1_E_ADJ_STEP] during KR training. For diagnostic use only. */ uint64_t reserved_59_63 : 5; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_10_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_10_bcfg bdk_gsernx_lanex_train_10_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_10_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_10_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003250ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_10_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) bdk_gsernx_lanex_train_10_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) "GSERNX_LANEX_TRAIN_10_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_10_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_1_bcfg * * GSER Lane Training Base Configuration Register 1 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t rxt_fom : 12; /**< [ 63: 52](RO/H) Figure of merit. An 11-bit output from the PHY indicating the quality of the received data eye. A higher value indicates better link equalization, with 0x0 indicating worst equalization setting and 4095 indicating the best equalization setting. */ uint64_t train_tx_rule : 8; /**< [ 51: 44](R/W) BASE-R training TX taps coefficient rule. Sets the upper limit of the permissible range of the combined TX equalizer c(0), c(+1), and c(-1) taps so that the TX equalizer operates within range specified in the 10GBASE-KR standard. The TX coefficient rule requires (pre + post + main) \<= [TRAIN_TX_RULE]. The allowable range for [TRAIN_TX_RULE] is (24 decimal \<= [TRAIN_TX_RULE] \<= 48 decimal). For 10GBASE-KR it is recommended to program [TRAIN_TX_RULE] to 0x30 (48 decimal). c(-1) pre TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[PRE_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[PRE_MIN_LIMIT]. c(0) main TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MIN_LIMIT]. c(+1) post TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[POST_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[POST_MIN_LIMIT]. */ uint64_t trn_rx_nxt_st : 6; /**< [ 43: 38](RO/H) BASE-R training single step next state for the receive training state machine. In single step mode this field holds the value of the next state of the receive training state machine when the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] bit is set to a one. GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] must be set to a one to enable single step mode and the GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] must be set to a one to force the receive training state machine to the STOP state. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST]. For diagnostic use only. */ uint64_t trn_ovrd_st : 6; /**< [ 37: 32](R/W) BASE-R training single step override state for the receive training state machine. In single step mode allows for forcing the receive training state machine to a specific state when exiting the STOP state. Refer to the description for GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD]. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t trn_ss_ovrd : 1; /**< [ 31: 31](R/W) BASE-R training single step state override control for the receive training state machine. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 and the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, indicated by the stop flag GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] set to one, the next state of the receive state machine, prior to entering the STOP state is indicated by the value in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. The next state of the receive state machine can be overridden, that is forced to another state other than the next state by setting the desired next state in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field and then clearing the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] to zero. The receive state machine will exit the STOP state and proceed to state indicated in [TRN_OVRD_ST] GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t reserved_30 : 1; uint64_t trn_rx_ss_sp : 1; /**< [ 29: 29](RO/H) BASE-R training single step stop flag for the receiver training state machine. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, the [TRN_RX_SS_SP] flag will be set. Subsequently, writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to zero will cause the receive state machine to exit the STOP state and jump to the state indicated in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t trn_ss_st : 1; /**< [ 28: 28](WO/H) BASE-R training single-step start single-step stop. Refer to the description for GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN]. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], For diagnostic use only. */ uint64_t trn_ss_en : 1; /**< [ 27: 27](R/W) BASE-R training single step mode enable. When set to a 1 enables single stepping the BASE-R link training receive state machines. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, the [TRN_RX_SS_SP] flag will be set. Subsequently, writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 0 then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 1 will cause the receive state machine to exit the STOP state and jump to the state indicated in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. Alternatively, the receive state machine can be forced to a different state by writing the state value to the GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field then set the GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD] to 1 and then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 0 then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 1 to force the receive state machine to the override state and then return to the STOP state. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t rx_train_fsm : 6; /**< [ 26: 21](RO/H) Value of the BASE-R hardware receiver link training state machine state during link training single step mode. The values in this field are only valid when GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] is set. For diagnostic use only. */ uint64_t tx_train_fsm : 5; /**< [ 20: 16](RO/H) Value of the BASE-R hardware transmitter link training state machine state. For diagnostic use only. */ uint64_t txt_post_init : 5; /**< [ 15: 11](R/W) During TX BASE-R link training, the TX posttap value that is used when the initialize coefficients update is received. It is also the TX posttap value used when the BASE-R link training begins. For diagnostic use only. */ uint64_t txt_main_init : 6; /**< [ 10: 5](R/W) During TX BASE-R link training, the TX swing-tap value that is used when the initialize coefficients update is received. It is also the TX swing-tap value used when the BASE-R link training begins. For diagnostic use only. */ uint64_t txt_pre_init : 5; /**< [ 4: 0](R/W) During TX BASE-R link training, the TX pretap value that is used when the initialize coefficients update is received. It is also the TX pretap value used when the BASE-R link training begins. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t txt_pre_init : 5; /**< [ 4: 0](R/W) During TX BASE-R link training, the TX pretap value that is used when the initialize coefficients update is received. It is also the TX pretap value used when the BASE-R link training begins. For diagnostic use only. */ uint64_t txt_main_init : 6; /**< [ 10: 5](R/W) During TX BASE-R link training, the TX swing-tap value that is used when the initialize coefficients update is received. It is also the TX swing-tap value used when the BASE-R link training begins. For diagnostic use only. */ uint64_t txt_post_init : 5; /**< [ 15: 11](R/W) During TX BASE-R link training, the TX posttap value that is used when the initialize coefficients update is received. It is also the TX posttap value used when the BASE-R link training begins. For diagnostic use only. */ uint64_t tx_train_fsm : 5; /**< [ 20: 16](RO/H) Value of the BASE-R hardware transmitter link training state machine state. For diagnostic use only. */ uint64_t rx_train_fsm : 6; /**< [ 26: 21](RO/H) Value of the BASE-R hardware receiver link training state machine state during link training single step mode. The values in this field are only valid when GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] is set. For diagnostic use only. */ uint64_t trn_ss_en : 1; /**< [ 27: 27](R/W) BASE-R training single step mode enable. When set to a 1 enables single stepping the BASE-R link training receive state machines. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, the [TRN_RX_SS_SP] flag will be set. Subsequently, writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 0 then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 1 will cause the receive state machine to exit the STOP state and jump to the state indicated in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. Alternatively, the receive state machine can be forced to a different state by writing the state value to the GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field then set the GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD] to 1 and then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 0 then writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to 1 to force the receive state machine to the override state and then return to the STOP state. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t trn_ss_st : 1; /**< [ 28: 28](WO/H) BASE-R training single-step start single-step stop. Refer to the description for GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN]. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], For diagnostic use only. */ uint64_t trn_rx_ss_sp : 1; /**< [ 29: 29](RO/H) BASE-R training single step stop flag for the receiver training state machine. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, the [TRN_RX_SS_SP] flag will be set. Subsequently, writing GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to zero will cause the receive state machine to exit the STOP state and jump to the state indicated in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t reserved_30 : 1; uint64_t trn_ss_ovrd : 1; /**< [ 31: 31](R/W) BASE-R training single step state override control for the receive training state machine. When single step mode is enabled by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] to 1 and the receive state machine is forced to the STOP state by setting GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] to a 1. When the receive state machine enters the STOP state, indicated by the stop flag GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] set to one, the next state of the receive state machine, prior to entering the STOP state is indicated by the value in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_NXT_ST] field. The next state of the receive state machine can be overridden, that is forced to another state other than the next state by setting the desired next state in the GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field and then clearing the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] to zero. The receive state machine will exit the STOP state and proceed to state indicated in [TRN_OVRD_ST] GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST] field. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_OVRD_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t trn_ovrd_st : 6; /**< [ 37: 32](R/W) BASE-R training single step override state for the receive training state machine. In single step mode allows for forcing the receive training state machine to a specific state when exiting the STOP state. Refer to the description for GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD]. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_OVRD], GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP]. For diagnostic use only. */ uint64_t trn_rx_nxt_st : 6; /**< [ 43: 38](RO/H) BASE-R training single step next state for the receive training state machine. In single step mode this field holds the value of the next state of the receive training state machine when the GSERN()_LANE()_TRAIN_1_BCFG[TRN_RX_SS_SP] bit is set to a one. GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN] must be set to a one to enable single step mode and the GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST] must be set to a one to force the receive training state machine to the STOP state. Used in conjunction with GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_EN], GSERN()_LANE()_TRAIN_1_BCFG[TRN_SS_ST]. For diagnostic use only. */ uint64_t train_tx_rule : 8; /**< [ 51: 44](R/W) BASE-R training TX taps coefficient rule. Sets the upper limit of the permissible range of the combined TX equalizer c(0), c(+1), and c(-1) taps so that the TX equalizer operates within range specified in the 10GBASE-KR standard. The TX coefficient rule requires (pre + post + main) \<= [TRAIN_TX_RULE]. The allowable range for [TRAIN_TX_RULE] is (24 decimal \<= [TRAIN_TX_RULE] \<= 48 decimal). For 10GBASE-KR it is recommended to program [TRAIN_TX_RULE] to 0x30 (48 decimal). c(-1) pre TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[PRE_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[PRE_MIN_LIMIT]. c(0) main TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MIN_LIMIT]. c(+1) post TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[POST_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[POST_MIN_LIMIT]. */ uint64_t rxt_fom : 12; /**< [ 63: 52](RO/H) Figure of merit. An 11-bit output from the PHY indicating the quality of the received data eye. A higher value indicates better link equalization, with 0x0 indicating worst equalization setting and 4095 indicating the best equalization setting. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_1_bcfg bdk_gsernx_lanex_train_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900031c0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) bdk_gsernx_lanex_train_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) "GSERNX_LANEX_TRAIN_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_2_bcfg * * GSER Lane Training Base Configuration Register 2 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_2_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t trn_sat_mv_lmt : 4; /**< [ 63: 60](R/W) BASE-R training saturated move limit threshold. See GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT_EN]. For diagnostic use only. */ uint64_t trn_sat_mv_lmt_en : 1; /**< [ 59: 59](R/W) BASE-R training saturated move limit threshold enable. During BASE-R training if a consecutive number of saturated tap moves specified by GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT] is met or exceeded training will conclude. This is to prevent cases where the FOM can no longer be improved and the link partner TX taps are at their minimum or maximum limits and the algorithm is attempting to repeatedly move the Tx taps beyond their min/max limits. If the threshold limit is met or exceeded and [TRN_SAT_MV_LMT_EN] is set to 1 training will terminate and the GSERN()_LANE()_TRAIN_3_BCFG[EXIT_SAT_MV_LMT] flag will set. For diagnostic use only. */ uint64_t trn_cfg_use_eye_en : 1; /**< [ 58: 58](R/W) BASE-R and PCIe training when [TRN_CFG_USE_EYE_EN] is set the training state machine will control the eye monitor block while training is active the power down the eye monitor at the conclusion of link training. For diagnostic use only. */ uint64_t trn_rrrpt_en : 1; /**< [ 57: 57](R/W) BASE-R training when [TRN_RRRPT_EN] is set the training state machine will repeatedly send Receiver Ready messages to the CGX/OCX MAC every 128 services clocks when training completes. For diagnostic use only. */ uint64_t trn_preset_en : 1; /**< [ 56: 56](R/W) BASE-R training when [TRN_PRESET_EN] is set to one preset the link partner TX equalizer when training starts. When [TRN_PRESET_EN] is cleared to zero the link partner TX equalizer will start in the INITIALIZE state. For BASE-R training it is recommended to start link training with [TRN_PRESET_EN] set to one. */ uint64_t trn_main_en : 2; /**< [ 55: 54](R/W) BASE-R training decrements the link partner (LP) TX equalizer main (C0) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_MAIN_VAL]. 0x0 = Disabled, do not decrement LP main C0 tap following PRESET. 0x1 = Decrement LP main C0 tap following PRESET until vga_gain\<3:0\> is less than or equal to the value in [TRN_MAIN_VAL]. 0x2 = Decrement LP main C0 tap following PRESET by the number of steps in the [TRN_MAIN_VAL]. 0x3 = Increment LP main C0 tap at the start of training (PRESET disabled) by the number of steps in [TRN_MAIN_VAL]. */ uint64_t trn_main_val : 6; /**< [ 53: 48](R/W) BASE-R training decrements the link partner (LP) TX equalizer main (C0) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_MAIN_EN]. See [TRN_MAIN_EN]. */ uint64_t max_tap_moves : 8; /**< [ 47: 40](R/W) BASE-R training sets the maximum number of link partner TX Equalizer Tap moves allowed. Exceeding the [MAX_TAP_MOVES] forces training to terminate and local device ready signaled if TRAIN_DONE_MASK[MAX_MOVES] is set. Internal: FIXME no such register TRAIN_DONE_MASK[MAX_MOVES], then remove above exempt attribute. */ uint64_t min_tap_moves : 8; /**< [ 39: 32](R/W) BASE-R training sets the minimum number of link partner TX Equalizer Tap moves before training completion (local device ready) is permitted. */ uint64_t main_max_limit : 6; /**< [ 31: 26](R/W) BASE-R training sets the maximum limit of the local device transmitter main (C0) tap value during KR training. Successive coefficient update message tap increments will increase the main tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the main (C0) tap value. The allowable range for the main (C0) tap is 0x18 to 0x30. */ uint64_t post_max_limit : 5; /**< [ 25: 21](R/W) BASE-R training sets the maximum limit of the local device transmitter post (C+1) tap value during KR training. Successive coefficient update message tap increments will increase the post tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the post (C+1) tap value. The allowable range for the post (C+1) tap is 0 to 0xC. */ uint64_t pre_max_limit : 5; /**< [ 20: 16](R/W) BASE-R training sets the maximum limit of the local device transmitter pre (C-1) tap value during KR training. Successive coefficient update message tap increments will increase the pre tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the pre (C-1) tap value. The allowable range for the pre (C-1) tap is 0 to 0x10. */ uint64_t main_min_limit : 6; /**< [ 15: 10](R/W) BASE-R training sets the minimum limit of the local device transmitter main (C0) tap value during KR training. Successive coefficient update message tap decrements will decrease the main tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the main (C0) tap value. The allowable range for the main (C0) tap is 0x18 to 0x30. */ uint64_t post_min_limit : 5; /**< [ 9: 5](R/W) BASE-R training sets the minimum limit of the local device transmitter post (C+1) tap value during KR training. Successive coefficient update message tap decrements will decrease the post tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the post (C+1) tap value. The allowable range for the post (C+1) tap is 0 to 0x10. */ uint64_t pre_min_limit : 5; /**< [ 4: 0](R/W) BASE-R training sets the minimum limit of the local device transmitter pre (C-1) tap value during KR training. Successive coefficient update message tap decrements will decrease the pre tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the pre (C-1) tap value. The allowable range for the min (C-1) tap is 0 to 0x10. */ #else /* Word 0 - Little Endian */ uint64_t pre_min_limit : 5; /**< [ 4: 0](R/W) BASE-R training sets the minimum limit of the local device transmitter pre (C-1) tap value during KR training. Successive coefficient update message tap decrements will decrease the pre tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the pre (C-1) tap value. The allowable range for the min (C-1) tap is 0 to 0x10. */ uint64_t post_min_limit : 5; /**< [ 9: 5](R/W) BASE-R training sets the minimum limit of the local device transmitter post (C+1) tap value during KR training. Successive coefficient update message tap decrements will decrease the post tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the post (C+1) tap value. The allowable range for the post (C+1) tap is 0 to 0x10. */ uint64_t main_min_limit : 6; /**< [ 15: 10](R/W) BASE-R training sets the minimum limit of the local device transmitter main (C0) tap value during KR training. Successive coefficient update message tap decrements will decrease the main tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of minimum for the main (C0) tap value. The allowable range for the main (C0) tap is 0x18 to 0x30. */ uint64_t pre_max_limit : 5; /**< [ 20: 16](R/W) BASE-R training sets the maximum limit of the local device transmitter pre (C-1) tap value during KR training. Successive coefficient update message tap increments will increase the pre tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the pre (C-1) tap value. The allowable range for the pre (C-1) tap is 0 to 0x10. */ uint64_t post_max_limit : 5; /**< [ 25: 21](R/W) BASE-R training sets the maximum limit of the local device transmitter post (C+1) tap value during KR training. Successive coefficient update message tap increments will increase the post tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the post (C+1) tap value. The allowable range for the post (C+1) tap is 0 to 0xC. */ uint64_t main_max_limit : 6; /**< [ 31: 26](R/W) BASE-R training sets the maximum limit of the local device transmitter main (C0) tap value during KR training. Successive coefficient update message tap increments will increase the main tap value until it reaches the value in this field. At that point the local device TX training state machine will return a status report of maximum for the main (C0) tap value. The allowable range for the main (C0) tap is 0x18 to 0x30. */ uint64_t min_tap_moves : 8; /**< [ 39: 32](R/W) BASE-R training sets the minimum number of link partner TX Equalizer Tap moves before training completion (local device ready) is permitted. */ uint64_t max_tap_moves : 8; /**< [ 47: 40](R/W) BASE-R training sets the maximum number of link partner TX Equalizer Tap moves allowed. Exceeding the [MAX_TAP_MOVES] forces training to terminate and local device ready signaled if TRAIN_DONE_MASK[MAX_MOVES] is set. Internal: FIXME no such register TRAIN_DONE_MASK[MAX_MOVES], then remove above exempt attribute. */ uint64_t trn_main_val : 6; /**< [ 53: 48](R/W) BASE-R training decrements the link partner (LP) TX equalizer main (C0) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_MAIN_EN]. See [TRN_MAIN_EN]. */ uint64_t trn_main_en : 2; /**< [ 55: 54](R/W) BASE-R training decrements the link partner (LP) TX equalizer main (C0) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_MAIN_VAL]. 0x0 = Disabled, do not decrement LP main C0 tap following PRESET. 0x1 = Decrement LP main C0 tap following PRESET until vga_gain\<3:0\> is less than or equal to the value in [TRN_MAIN_VAL]. 0x2 = Decrement LP main C0 tap following PRESET by the number of steps in the [TRN_MAIN_VAL]. 0x3 = Increment LP main C0 tap at the start of training (PRESET disabled) by the number of steps in [TRN_MAIN_VAL]. */ uint64_t trn_preset_en : 1; /**< [ 56: 56](R/W) BASE-R training when [TRN_PRESET_EN] is set to one preset the link partner TX equalizer when training starts. When [TRN_PRESET_EN] is cleared to zero the link partner TX equalizer will start in the INITIALIZE state. For BASE-R training it is recommended to start link training with [TRN_PRESET_EN] set to one. */ uint64_t trn_rrrpt_en : 1; /**< [ 57: 57](R/W) BASE-R training when [TRN_RRRPT_EN] is set the training state machine will repeatedly send Receiver Ready messages to the CGX/OCX MAC every 128 services clocks when training completes. For diagnostic use only. */ uint64_t trn_cfg_use_eye_en : 1; /**< [ 58: 58](R/W) BASE-R and PCIe training when [TRN_CFG_USE_EYE_EN] is set the training state machine will control the eye monitor block while training is active the power down the eye monitor at the conclusion of link training. For diagnostic use only. */ uint64_t trn_sat_mv_lmt_en : 1; /**< [ 59: 59](R/W) BASE-R training saturated move limit threshold enable. During BASE-R training if a consecutive number of saturated tap moves specified by GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT] is met or exceeded training will conclude. This is to prevent cases where the FOM can no longer be improved and the link partner TX taps are at their minimum or maximum limits and the algorithm is attempting to repeatedly move the Tx taps beyond their min/max limits. If the threshold limit is met or exceeded and [TRN_SAT_MV_LMT_EN] is set to 1 training will terminate and the GSERN()_LANE()_TRAIN_3_BCFG[EXIT_SAT_MV_LMT] flag will set. For diagnostic use only. */ uint64_t trn_sat_mv_lmt : 4; /**< [ 63: 60](R/W) BASE-R training saturated move limit threshold. See GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT_EN]. For diagnostic use only. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_2_bcfg bdk_gsernx_lanex_train_2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900031d0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) bdk_gsernx_lanex_train_2_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) "GSERNX_LANEX_TRAIN_2_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_3_bcfg * * GSER Lane Training Base Configuration Register 3 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_3_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_3_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t exit_fom_thrs : 1; /**< [ 63: 63](RO/H) BASE-R training exit condition flag indicates the measured FOM was equal to or exceeded the FOM threshold value specified in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] when GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 1. Used in conjustion with GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR] to specify the BASE-R training convergence exit criteria. */ uint64_t train_tx_min_rule : 8; /**< [ 62: 55](R/W) BASE-R training TX taps minimum coefficient rule. Sets the lower limit of the permissible range of the TX equalizer c(0), c(+1), and c(-1) taps so that the TX equalizer operates within range specified in the IEEE 802.3-2012 Clause 72 10GBASE-KR and IEEE 802.3bj-2014 Clause 93 100GBASE-KR4. The TX coefficient minimum rule requires (main - pre - post) \>= [TRAIN_TX_MIN_RULE]. The allowable range for [TRAIN_TX_MIN_RULE] is (6 decimal \<= [TRAIN_TX_MIN_RULE] \<= 16 decimal). For 10GBASE-KR, 40GBASE-KR4 and 100GBASE-KR4 it is recommended to program [TRAIN_TX_MIN_RULE] to 0x6. c(-1) pre TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[PRE_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[PRE_MIN_LIMIT]. c(0) main TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MIN_LIMIT]. c(+1) post TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[POST_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[POST_MIN_LIMIT]. */ uint64_t exit_sat_mv_lmt : 1; /**< [ 54: 54](RO/H) BASE-R training saturated move limit threshold exit flag. See GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT_EN]. For diagnostic use only. */ uint64_t exit_prbs11_ok : 1; /**< [ 53: 53](RO/H) Training exit condition PRBS11 in the BASE-R KR training frame is error free. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_PRBS11_OK] will be set if the training was terminated because the PRBS11 pattern extracted by the CGX or OCX MAC indicates that the PRBS11 pattern is error free. This bit will report the PRBS11 status when BASE-R training completes even if GSERN()_LANE()_TRAIN_3_BCFG[LD_TRAIN_DONE\<21\> or LD_TRAIN_DONE\<26\>] are not set. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled for the [EXIT_PRBS11_OK] status to be reported. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. Internal: FIXME what does LD_TRAIN_DONE refer to, then remove above exempt attribute. */ uint64_t exit_delta_ffom : 1; /**< [ 52: 52](RO/H) Training exit condition due to delta filtered FOM. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one the [EXIT_DELTA_FFOM] bit will be set if the training was terminated because the Delta Filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeded the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_rep_pattern : 1; /**< [ 51: 51](RO/H) Training exit condition repeating TAP moves pattern detected. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_REP_PATTERN] will be set if the training was terminated because the training state machine discovered a repeating tap move pattern. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_tmt_timer : 1; /**< [ 50: 50](RO/H) Training timeout timer expired. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MAX_TAP_MOVES] will be set if the training was terminated because the training state machine KR training time-out timer expired. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_min_tap_moves : 1; /**< [ 49: 49](RO/H) Training exit condition exceeded minimum number of tap moves. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MIN_TAP_MOVES] will be set if the training was terminated because the training state machine exceeded the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES]. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_max_tap_moves : 1; /**< [ 48: 48](RO/H) Training exit condition exceeded maximum number of tap moves. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MAX_TAP_MOVES] will be set if the training was terminated because the training state machine exceeded the maximum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MAX_TAP_MOVES]. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_dffom : 13; /**< [ 47: 35](RO/H) Training exit location delta filtered FOM value. Holds the delta filtered FOM value at the completion of BASE-R training. Number represented in offset binary notation. For diagnostic use only. */ uint64_t trn_ntap_mvs : 8; /**< [ 34: 27](RO/H) BASE-R training holds the number of link partner tap moves made during link training. */ uint64_t term_prbs11_and : 1; /**< [ 26: 26](R/W) BASE-R training KR training PRBS11 pattern check extracted from the KR training frame is error free. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. PRBS11 pattern check extracted from the KR training frame is error free. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled to enable PRBS11 pattern error checking. */ uint64_t term_dffom_and : 1; /**< [ 25: 25](R/W) BASE-R training KR training Delta Filtered FOM is within the high and low limits. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Delta filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeds the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] */ uint64_t term_rep_pat_and : 1; /**< [ 24: 24](R/W) BASE-R training KR training taps move repeating pattern detected. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. */ uint64_t term_tmt_tmr_and : 1; /**< [ 23: 23](R/W) BASE-R training KR training time-out timer expired. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. */ uint64_t term_min_mvs_and : 1; /**< [ 22: 22](R/W) BASE-R training termination exceeded minimum number of tap moves. Termination AND condition. See description below. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded minimum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES] sets the minimum number of tap moves. */ uint64_t term_prbs11_or : 1; /**< [ 21: 21](R/W) BASE-R training KR training PRBS11 pattern check extracted from the KR training frame is error free. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. PRBS11 pattern check extracted from the KR training frame is error free. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled to enable PRBS11 pattern error checking. */ uint64_t term_dffom_or : 1; /**< [ 20: 20](R/W) BASE-R training KR training Delta Filtered FOM is within the high and low limits. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Delta filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeds the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] */ uint64_t term_rep_pat_or : 1; /**< [ 19: 19](R/W) BASE-R training KR training taps move repeating pattern detected. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. */ uint64_t term_tmt_tmr_or : 1; /**< [ 18: 18](R/W) BASE-R training KR training time-out timer expired. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. */ uint64_t term_max_mvs_or : 1; /**< [ 17: 17](R/W) BASE-R training termination exceeded maximum number of tap moves. Termination OR condition. See description below. BASE-R training termination condition register fields. Selects the conditions used to terminate local device KR link training. Setting the associated bit will enable the training termination condition. An AND-OR tree is used to allow setting conditions that must occur together (AND function) or any single condition (OR function) will trigger the BASE-R training termination. AND and OR conditions can be combined. \ OR CONDITIONS. Any condition that is true and has a set condition bit will trigger training termination. Conditions with bits that are not set (cleared to zero) are not used to trigger training termination. [TERM_MAX_MVS_OR] = Exceeded maximum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MAX_TAP_MOVES] sets the maximum number of tap moves. [TERM_TMT_TMR_OR] = KR training time-out timer expired. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_TMT_TMR_OR]. [TERM_REP_PAT_OR] =Taps move repeating pattern detected. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_REP_PAT_OR]. [TERM_DFFOM_OR] = Delta Filtered FOM is within the high and low limits. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_DFFOM_OR]. [TERM_PRBS11_OR] = PRBS11 pattern check extracted from the KR training frame is error free. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_PRBS11_OR]. GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR] = Measured FOM equal or exceeds the FOM threshold in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] during KR training. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] must also be set to 1. See description in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. \ AND CONDITIONS. The conditions associated with bits that are set must all be true to trigger training termination. Conditions with bits that are not set (cleared to zero) are not used to trigger training termination. [TERM_MIN_MVS_AND] = Exceeded minimum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES] sets the minimum number of tap moves. [TERM_TMT_TMR_AND] = KR training time-out timer expired. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_TMT_TMR_AND]. [TERM_REP_PAT_AND] = Taps move repeating pattern detected. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_REP_PAT_AND]. [TERM_DFFOM_AND] = Delta Filtered FOM is within the high and low limits. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_DFFOM_AND]. [TERM_PRBS11_AND] = PRBS11 pattern check extracted from the KR training frame is error free. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_PRBS11_AND]. GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] = Measured FOM equal or exceeds the FOM threshold in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] during KR training. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] must also be set to 1. See description in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND]. */ uint64_t inv_tx_post_dir : 1; /**< [ 16: 16](R/W) BASE-R training when set reverses the direction of the post tap (C+1) direction hint in the local transmitter received from the link partner. */ uint64_t inv_tx_main_dir : 1; /**< [ 15: 15](R/W) BASE-R training when set reverses the direction of the main tap (C0) direction hint in the local transmitter received from the link partner. */ uint64_t inv_tx_pre_dir : 1; /**< [ 14: 14](R/W) BASE-R training when set reverses the direction of the pre tap (C-1) direction hint in the local transmitter received from the link partner. */ uint64_t trn_post_en : 2; /**< [ 13: 12](R/W) BASE-R training decrements the link partner (LP) TX equalizer post (C+1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_POST_VAL]. 0x0 = Disabled, do not decrement LP post C+1 tap following PRESET. 0x1 = Reserved, do not use. 0x2 = Decrement LP post C+1 tap following PRESET by the number of steps in the [TRN_POST_VAL]. 0x3 = Increment LP post C+1 tap at the start of training (PRESET disabled) by the number of steps in [TRN_POST_VAL]. */ uint64_t trn_post_val : 5; /**< [ 11: 7](R/W) BASE-R training decrements the link partner (LP) TX equalizer post (C+1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. See [TRN_POST_EN]. */ uint64_t trn_pre_en : 2; /**< [ 6: 5](R/W) BASE-R training decrements the link partner (LP) TX equalizer pre (C-1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_PRE_VAL]. 0x0 = Disabled, do not decrement LP pre C-1 tap following PRESET. 0x1 = Reserved, do not use. 0x2 = Decrement LP pre C-1 tap following PRESET by the number of steps in the [TRN_PRE_VAL]. 0x3 = Increment LP pre C-1 tap at the start of training (PRESET disabled) by the number of steps in [TRN_PRE_VAL]. */ uint64_t trn_pre_val : 5; /**< [ 4: 0](R/W) BASE-R training decrements the link partner (LP) TX equalizer pre (C-1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_PRE_EN]. See [TRN_PRE_EN]. */ #else /* Word 0 - Little Endian */ uint64_t trn_pre_val : 5; /**< [ 4: 0](R/W) BASE-R training decrements the link partner (LP) TX equalizer pre (C-1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_PRE_EN]. See [TRN_PRE_EN]. */ uint64_t trn_pre_en : 2; /**< [ 6: 5](R/W) BASE-R training decrements the link partner (LP) TX equalizer pre (C-1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_PRE_VAL]. 0x0 = Disabled, do not decrement LP pre C-1 tap following PRESET. 0x1 = Reserved, do not use. 0x2 = Decrement LP pre C-1 tap following PRESET by the number of steps in the [TRN_PRE_VAL]. 0x3 = Increment LP pre C-1 tap at the start of training (PRESET disabled) by the number of steps in [TRN_PRE_VAL]. */ uint64_t trn_post_val : 5; /**< [ 11: 7](R/W) BASE-R training decrements the link partner (LP) TX equalizer post (C+1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. See [TRN_POST_EN]. */ uint64_t trn_post_en : 2; /**< [ 13: 12](R/W) BASE-R training decrements the link partner (LP) TX equalizer post (C+1) tap at the start of link training after the PRESET coefficient update has been issued to the link partner. Used in conjunction with [TRN_POST_VAL]. 0x0 = Disabled, do not decrement LP post C+1 tap following PRESET. 0x1 = Reserved, do not use. 0x2 = Decrement LP post C+1 tap following PRESET by the number of steps in the [TRN_POST_VAL]. 0x3 = Increment LP post C+1 tap at the start of training (PRESET disabled) by the number of steps in [TRN_POST_VAL]. */ uint64_t inv_tx_pre_dir : 1; /**< [ 14: 14](R/W) BASE-R training when set reverses the direction of the pre tap (C-1) direction hint in the local transmitter received from the link partner. */ uint64_t inv_tx_main_dir : 1; /**< [ 15: 15](R/W) BASE-R training when set reverses the direction of the main tap (C0) direction hint in the local transmitter received from the link partner. */ uint64_t inv_tx_post_dir : 1; /**< [ 16: 16](R/W) BASE-R training when set reverses the direction of the post tap (C+1) direction hint in the local transmitter received from the link partner. */ uint64_t term_max_mvs_or : 1; /**< [ 17: 17](R/W) BASE-R training termination exceeded maximum number of tap moves. Termination OR condition. See description below. BASE-R training termination condition register fields. Selects the conditions used to terminate local device KR link training. Setting the associated bit will enable the training termination condition. An AND-OR tree is used to allow setting conditions that must occur together (AND function) or any single condition (OR function) will trigger the BASE-R training termination. AND and OR conditions can be combined. \ OR CONDITIONS. Any condition that is true and has a set condition bit will trigger training termination. Conditions with bits that are not set (cleared to zero) are not used to trigger training termination. [TERM_MAX_MVS_OR] = Exceeded maximum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MAX_TAP_MOVES] sets the maximum number of tap moves. [TERM_TMT_TMR_OR] = KR training time-out timer expired. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_TMT_TMR_OR]. [TERM_REP_PAT_OR] =Taps move repeating pattern detected. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_REP_PAT_OR]. [TERM_DFFOM_OR] = Delta Filtered FOM is within the high and low limits. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_DFFOM_OR]. [TERM_PRBS11_OR] = PRBS11 pattern check extracted from the KR training frame is error free. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_PRBS11_OR]. GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR] = Measured FOM equal or exceeds the FOM threshold in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] during KR training. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] must also be set to 1. See description in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR]. \ AND CONDITIONS. The conditions associated with bits that are set must all be true to trigger training termination. Conditions with bits that are not set (cleared to zero) are not used to trigger training termination. [TERM_MIN_MVS_AND] = Exceeded minimum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES] sets the minimum number of tap moves. [TERM_TMT_TMR_AND] = KR training time-out timer expired. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_TMT_TMR_AND]. [TERM_REP_PAT_AND] = Taps move repeating pattern detected. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_REP_PAT_AND]. [TERM_DFFOM_AND] = Delta Filtered FOM is within the high and low limits. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_DFFOM_AND]. [TERM_PRBS11_AND] = PRBS11 pattern check extracted from the KR training frame is error free. See description in GSERN()_LANE()_TRAIN_3_BCFG[TERM_PRBS11_AND]. GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] = Measured FOM equal or exceeds the FOM threshold in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] during KR training. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] must also be set to 1. See description in GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND]. */ uint64_t term_tmt_tmr_or : 1; /**< [ 18: 18](R/W) BASE-R training KR training time-out timer expired. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. */ uint64_t term_rep_pat_or : 1; /**< [ 19: 19](R/W) BASE-R training KR training taps move repeating pattern detected. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. */ uint64_t term_dffom_or : 1; /**< [ 20: 20](R/W) BASE-R training KR training Delta Filtered FOM is within the high and low limits. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Delta filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeds the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] */ uint64_t term_prbs11_or : 1; /**< [ 21: 21](R/W) BASE-R training KR training PRBS11 pattern check extracted from the KR training frame is error free. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. PRBS11 pattern check extracted from the KR training frame is error free. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled to enable PRBS11 pattern error checking. */ uint64_t term_min_mvs_and : 1; /**< [ 22: 22](R/W) BASE-R training termination exceeded minimum number of tap moves. Termination AND condition. See description below. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded minimum tap moves iterations. GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES] sets the minimum number of tap moves. */ uint64_t term_tmt_tmr_and : 1; /**< [ 23: 23](R/W) BASE-R training KR training time-out timer expired. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. */ uint64_t term_rep_pat_and : 1; /**< [ 24: 24](R/W) BASE-R training KR training taps move repeating pattern detected. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. */ uint64_t term_dffom_and : 1; /**< [ 25: 25](R/W) BASE-R training KR training Delta Filtered FOM is within the high and low limits. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Delta filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeds the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] */ uint64_t term_prbs11_and : 1; /**< [ 26: 26](R/W) BASE-R training KR training PRBS11 pattern check extracted from the KR training frame is error free. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. PRBS11 pattern check extracted from the KR training frame is error free. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled to enable PRBS11 pattern error checking. */ uint64_t trn_ntap_mvs : 8; /**< [ 34: 27](RO/H) BASE-R training holds the number of link partner tap moves made during link training. */ uint64_t exit_dffom : 13; /**< [ 47: 35](RO/H) Training exit location delta filtered FOM value. Holds the delta filtered FOM value at the completion of BASE-R training. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_max_tap_moves : 1; /**< [ 48: 48](RO/H) Training exit condition exceeded maximum number of tap moves. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MAX_TAP_MOVES] will be set if the training was terminated because the training state machine exceeded the maximum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MAX_TAP_MOVES]. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_min_tap_moves : 1; /**< [ 49: 49](RO/H) Training exit condition exceeded minimum number of tap moves. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MIN_TAP_MOVES] will be set if the training was terminated because the training state machine exceeded the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES]. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_tmt_timer : 1; /**< [ 50: 50](RO/H) Training timeout timer expired. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_MAX_TAP_MOVES] will be set if the training was terminated because the training state machine KR training time-out timer expired. GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_FAST] select the timeout time in milliseconds/microseconds and GSERN()_LANE()_TRAIN_0_BCFG[RXT_ADTMOUT_DISABLE] enables the timeout timer when cleared to zero. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_rep_pattern : 1; /**< [ 51: 51](RO/H) Training exit condition repeating TAP moves pattern detected. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_REP_PATTERN] will be set if the training was terminated because the training state machine discovered a repeating tap move pattern. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] must be set to a non-zero value and GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] must be set to a one to enable the repeating tap move pattern matching logic which looks for repeating tap moves to signal training convergence. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_delta_ffom : 1; /**< [ 52: 52](RO/H) Training exit condition due to delta filtered FOM. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one the [EXIT_DELTA_FFOM] bit will be set if the training was terminated because the Delta Filtered FOM is within the high and low limits set by GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT], and GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN]=1, and the number of consecutive tap move iterations in which the Delta Filtered FOM is within the high/low limits exceeded the count in GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. */ uint64_t exit_prbs11_ok : 1; /**< [ 53: 53](RO/H) Training exit condition PRBS11 in the BASE-R KR training frame is error free. When BASE-R training is concluded, indicated by GSERN()_LANE()_TRAIN_0_BCFG[LD_RECEIVER_RDY] set to one [EXIT_PRBS11_OK] will be set if the training was terminated because the PRBS11 pattern extracted by the CGX or OCX MAC indicates that the PRBS11 pattern is error free. This bit will report the PRBS11 status when BASE-R training completes even if GSERN()_LANE()_TRAIN_3_BCFG[LD_TRAIN_DONE\<21\> or LD_TRAIN_DONE\<26\>] are not set. GSERN()_LANE()_TRAIN_4_BCFG[EN_PRBS11_CHK] must be enabled for the [EXIT_PRBS11_OK] status to be reported. This bit will be cleared if BASE-R training is re-enabled. For diagnostic use only. Internal: FIXME what does LD_TRAIN_DONE refer to, then remove above exempt attribute. */ uint64_t exit_sat_mv_lmt : 1; /**< [ 54: 54](RO/H) BASE-R training saturated move limit threshold exit flag. See GSERN()_LANE()_TRAIN_2_BCFG[TRN_SAT_MV_LMT_EN]. For diagnostic use only. */ uint64_t train_tx_min_rule : 8; /**< [ 62: 55](R/W) BASE-R training TX taps minimum coefficient rule. Sets the lower limit of the permissible range of the TX equalizer c(0), c(+1), and c(-1) taps so that the TX equalizer operates within range specified in the IEEE 802.3-2012 Clause 72 10GBASE-KR and IEEE 802.3bj-2014 Clause 93 100GBASE-KR4. The TX coefficient minimum rule requires (main - pre - post) \>= [TRAIN_TX_MIN_RULE]. The allowable range for [TRAIN_TX_MIN_RULE] is (6 decimal \<= [TRAIN_TX_MIN_RULE] \<= 16 decimal). For 10GBASE-KR, 40GBASE-KR4 and 100GBASE-KR4 it is recommended to program [TRAIN_TX_MIN_RULE] to 0x6. c(-1) pre TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[PRE_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[PRE_MIN_LIMIT]. c(0) main TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[MAIN_MIN_LIMIT]. c(+1) post TX tap range is programmed by GSERN()_LANE()_TRAIN_2_BCFG[POST_MAX_LIMIT] and GSERN()_LANE()_TRAIN_2_BCFG[POST_MIN_LIMIT]. */ uint64_t exit_fom_thrs : 1; /**< [ 63: 63](RO/H) BASE-R training exit condition flag indicates the measured FOM was equal to or exceeded the FOM threshold value specified in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] when GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] is set to 1. Used in conjustion with GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_AND] and GSERN()_LANE()_TRAIN_4_BCFG[TERM_FOM_THRS_OR] to specify the BASE-R training convergence exit criteria. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_3_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_3_bcfg bdk_gsernx_lanex_train_3_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_3_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_3_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900031e0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_3_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) bdk_gsernx_lanex_train_3_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) "GSERNX_LANEX_TRAIN_3_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_3_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_4_bcfg * * GSER Lane Training Base Configuration Register 4 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_4_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_4_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t term_fom_thrs_and : 1; /**< [ 63: 63](R/W) BASE-R training termination condition measured FOM equal or exceeds the FOM threshold set in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL]. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded FOM threshold. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL] sets the FOM threshold. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. Internal: FIXME no such field GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL], then remove above exempt attribute. */ uint64_t term_fom_thrs_or : 1; /**< [ 62: 62](R/W) BASE-R training termination condition measured FOM equal or exceeds the FOM threshold set in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL]. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded FOM threshold. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL] sets the FOM threshold. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. Internal: FIXME no such field GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL]. */ uint64_t en_prbs11_chk : 1; /**< [ 61: 61](R/W) BASE-R training enables the check for PRBS11 checking for training convergence. 0 = Disables PRBS11 checking. 1 = Enables PRBS11 checking. The CGX/OCX MAC extracts the PRBS11 pattern from the KR training frame and checks the PRBS11 pattern for errors. The CGX/MAC signals to the KR training frame if the PRBS11 pattern sampled from the KR training frame is error free or contains errors. When [EN_PRBS11_CHK] is set the KR training state machine will sample the PRBS11 status signal from the MAC and if the PRBS11 is error free will use this to signal training convergence and signal receiver ready if this condition is enabled in the GSERN()_LANE()_TRAIN_3_BCFG[LD_TRAIN_DONE\<21\> or LD_TRAIN_DONE\<26\>] training termination condition fields. Internal: FIXME what does LD_TRAIN_DONE refer to? */ uint64_t en_rev_moves : 1; /**< [ 60: 60](R/W) BASE-R training controls the receiver adaptation algorithm to reverse previous tap moves that resulted in a decrease in the receiver figure of merit (FOM). 0 = Prevents the adaptation algorithm state machine from reversing previous tap moves that resulted in a lower FOM. 1 = Enables the adaptation algorithm state machine to reverse a previous tap move that resulted in a lower FOM value. The receiver adaptation algorithm will not reverse previous tap moves until the number of tap moves exceeds the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES]. [EN_REV_MOVES] is normally enabled to improve the adaptation convergence time. */ uint64_t tx_tap_stepsize : 1; /**< [ 59: 59](R/W) BASE-R training controls the transmitter Pre/Main/Post step size when a Coefficient Update increment or decrement request is received. When [TX_TAP_STEPSIZE] is zero the transmitter Pre/Main/Post step size is set to +/- 1. When [TX_TAP_STEPSIZE] is set to one the transmitter Pre/Main/Post step size is set to +/- 2. */ uint64_t train_rst : 1; /**< [ 58: 58](R/W) Set to force the training engine into reset. Set low to enable link training. */ uint64_t train_ovrrd_en : 1; /**< [ 57: 57](R/W) Training engine eye monitor FOM request override enable. If not programmed to PCIe, CGX, or OCX mode via GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] then program [TRAIN_OVRRD_EN] to 1 before using GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] and GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] to request an RX equalizer evaluation to measure the RX equalizer Figure of Merit (FOM). The 8-bit FOM is returned in GSERN()_LANE()_TRAIN_5_BCFG[FOM] and the raw 12-bit FOM is returned in GSERN()_LANE()_TRAIN_5_BCFG[RAW_FOM]. For diagnostic use only. */ uint64_t rxt_rev_dir : 1; /**< [ 56: 56](R/W) When set, reverses the direction of the GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_POST_DIR], GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_MAIN_DIR], and GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_PRE_DIR] link partner TX tap direction hints. For diagnostic use only. */ uint64_t adapt_axis : 3; /**< [ 55: 53](R/W) Sets the number or adaptation axes to use during receiver adaptation. Typically set to 0x7 to enable all three adaptation axes. One-hot encoded. Set to 0x1 to only enable axis 1 and disable axis 2 and axis 3. Set to 0x3 to enable axis 1 and axis 2 but disable axis 3. Set to 0x7 to enable axis 1, 2 and 3. (default.) For diagnostic use only. */ uint64_t c1_e_adj_step : 5; /**< [ 52: 48](R/W) Reserved. Internal: Functionality moved to GSERN()_LANE()_TRAIN_10_BCFG.L_C1_E_ADJ_STEP */ uint64_t eq_eval_ovrrd_req : 1; /**< [ 47: 47](R/W) When set issues a receiver equalization evaluation request when GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] is set. For diagnostic use only. */ uint64_t eq_eval_ovrrd_en : 1; /**< [ 46: 46](R/W) When set the RX equalization evaluation request is controlled by GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ]. For diagnostic use only. */ uint64_t err_cnt_div_ovrrd_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [ERR_CNT_DIV_OVRRD_EN] is set. For diagnostic use only. 0x0 = No divider. 0x1 = DIV 2. 0x2 = DIV 4. 0x3 = DIV 8. 0x4 = DIV 16. 0x5 = DIV 32. 0x6 = DIV 64. 0x7 = DIV 128. 0x8 = DIV 256. 0x9 = DIV 512. 0xA = DIV 1024. 0xB = DIV 2048. 0xC = DIV 4096. 0xD = DIV 8192. 0xE = DIV 16384. 0xF = DIV 32768. */ uint64_t err_cnt_div_ovrrd_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. For diagnostic use only. */ uint64_t eye_cnt_ovrrd_en : 1; /**< [ 40: 40](R/W) Eye Cycle Count Override Enable. When set the number of eye monitor cycles to sample and count during the BASE-R training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_4_BCFG[EYE_CNT_OVRRD_VAL]. For diagnostic use only. */ uint64_t eye_cnt_ovrrd_val : 40; /**< [ 39: 0](R/W) Sets the number of eye monitor cycles to sample/count during the BASE-R training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_4_BCFG[EYE_CNT_OVRRD_EN]=1. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t eye_cnt_ovrrd_val : 40; /**< [ 39: 0](R/W) Sets the number of eye monitor cycles to sample/count during the BASE-R training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_4_BCFG[EYE_CNT_OVRRD_EN]=1. For diagnostic use only. */ uint64_t eye_cnt_ovrrd_en : 1; /**< [ 40: 40](R/W) Eye Cycle Count Override Enable. When set the number of eye monitor cycles to sample and count during the BASE-R training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_4_BCFG[EYE_CNT_OVRRD_VAL]. For diagnostic use only. */ uint64_t err_cnt_div_ovrrd_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. For diagnostic use only. */ uint64_t err_cnt_div_ovrrd_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [ERR_CNT_DIV_OVRRD_EN] is set. For diagnostic use only. 0x0 = No divider. 0x1 = DIV 2. 0x2 = DIV 4. 0x3 = DIV 8. 0x4 = DIV 16. 0x5 = DIV 32. 0x6 = DIV 64. 0x7 = DIV 128. 0x8 = DIV 256. 0x9 = DIV 512. 0xA = DIV 1024. 0xB = DIV 2048. 0xC = DIV 4096. 0xD = DIV 8192. 0xE = DIV 16384. 0xF = DIV 32768. */ uint64_t eq_eval_ovrrd_en : 1; /**< [ 46: 46](R/W) When set the RX equalization evaluation request is controlled by GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ]. For diagnostic use only. */ uint64_t eq_eval_ovrrd_req : 1; /**< [ 47: 47](R/W) When set issues a receiver equalization evaluation request when GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] is set. For diagnostic use only. */ uint64_t c1_e_adj_step : 5; /**< [ 52: 48](R/W) Reserved. Internal: Functionality moved to GSERN()_LANE()_TRAIN_10_BCFG.L_C1_E_ADJ_STEP */ uint64_t adapt_axis : 3; /**< [ 55: 53](R/W) Sets the number or adaptation axes to use during receiver adaptation. Typically set to 0x7 to enable all three adaptation axes. One-hot encoded. Set to 0x1 to only enable axis 1 and disable axis 2 and axis 3. Set to 0x3 to enable axis 1 and axis 2 but disable axis 3. Set to 0x7 to enable axis 1, 2 and 3. (default.) For diagnostic use only. */ uint64_t rxt_rev_dir : 1; /**< [ 56: 56](R/W) When set, reverses the direction of the GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_POST_DIR], GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_MAIN_DIR], and GSERN()_LANE()_TRAIN_0_BCFG[RXT_TX_PRE_DIR] link partner TX tap direction hints. For diagnostic use only. */ uint64_t train_ovrrd_en : 1; /**< [ 57: 57](R/W) Training engine eye monitor FOM request override enable. If not programmed to PCIe, CGX, or OCX mode via GSERN()_LANE()_SRCMX_BCFG[TX_CTRL_SEL] then program [TRAIN_OVRRD_EN] to 1 before using GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] and GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] to request an RX equalizer evaluation to measure the RX equalizer Figure of Merit (FOM). The 8-bit FOM is returned in GSERN()_LANE()_TRAIN_5_BCFG[FOM] and the raw 12-bit FOM is returned in GSERN()_LANE()_TRAIN_5_BCFG[RAW_FOM]. For diagnostic use only. */ uint64_t train_rst : 1; /**< [ 58: 58](R/W) Set to force the training engine into reset. Set low to enable link training. */ uint64_t tx_tap_stepsize : 1; /**< [ 59: 59](R/W) BASE-R training controls the transmitter Pre/Main/Post step size when a Coefficient Update increment or decrement request is received. When [TX_TAP_STEPSIZE] is zero the transmitter Pre/Main/Post step size is set to +/- 1. When [TX_TAP_STEPSIZE] is set to one the transmitter Pre/Main/Post step size is set to +/- 2. */ uint64_t en_rev_moves : 1; /**< [ 60: 60](R/W) BASE-R training controls the receiver adaptation algorithm to reverse previous tap moves that resulted in a decrease in the receiver figure of merit (FOM). 0 = Prevents the adaptation algorithm state machine from reversing previous tap moves that resulted in a lower FOM. 1 = Enables the adaptation algorithm state machine to reverse a previous tap move that resulted in a lower FOM value. The receiver adaptation algorithm will not reverse previous tap moves until the number of tap moves exceeds the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_2_BCFG[MIN_TAP_MOVES]. [EN_REV_MOVES] is normally enabled to improve the adaptation convergence time. */ uint64_t en_prbs11_chk : 1; /**< [ 61: 61](R/W) BASE-R training enables the check for PRBS11 checking for training convergence. 0 = Disables PRBS11 checking. 1 = Enables PRBS11 checking. The CGX/OCX MAC extracts the PRBS11 pattern from the KR training frame and checks the PRBS11 pattern for errors. The CGX/MAC signals to the KR training frame if the PRBS11 pattern sampled from the KR training frame is error free or contains errors. When [EN_PRBS11_CHK] is set the KR training state machine will sample the PRBS11 status signal from the MAC and if the PRBS11 is error free will use this to signal training convergence and signal receiver ready if this condition is enabled in the GSERN()_LANE()_TRAIN_3_BCFG[LD_TRAIN_DONE\<21\> or LD_TRAIN_DONE\<26\>] training termination condition fields. Internal: FIXME what does LD_TRAIN_DONE refer to? */ uint64_t term_fom_thrs_or : 1; /**< [ 62: 62](R/W) BASE-R training termination condition measured FOM equal or exceeds the FOM threshold set in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL]. Termination OR condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded FOM threshold. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL] sets the FOM threshold. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. Internal: FIXME no such field GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL]. */ uint64_t term_fom_thrs_and : 1; /**< [ 63: 63](R/W) BASE-R training termination condition measured FOM equal or exceeds the FOM threshold set in GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL]. Termination AND condition. Part of the BASE-R training termination condition register. See the full description of the training termination conditions register in GSERN()_LANE()_TRAIN_3_BCFG[TERM_MAX_MVS_OR]. Exceeded FOM threshold. GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL] sets the FOM threshold. Refer to the description for GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_EN] and GSERN()_LANE()_TRAIN_10_BCFG[EXIT_FOM_THRS_VAL] and GSERN()_LANE()_TRAIN_3_BCFG[EXIT_FOM_THRS]. Internal: FIXME no such field GSERN()_LANE()_TRAIN_10_BCFG[TRN_FOM_THRS_VAL], then remove above exempt attribute. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_4_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_4_bcfg bdk_gsernx_lanex_train_4_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_4_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_4_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900031f0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_4_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) bdk_gsernx_lanex_train_4_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) "GSERNX_LANEX_TRAIN_4_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_4_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_5_bcfg * * GSER Lane Training Base Configuration Register 5 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_5_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_5_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pat_exit_cnt : 4; /**< [ 63: 60](R/W) BASE-R training controls the receiver adaptation algorithm training convergence pattern matching logic. As BASE-R training progresses the Pre/Main/Post tap direction change coefficient updates to the link partner start to dither around the optimal tap values. The pattern matching logic looks for repeating patterns of the tap dithering around the optimal value and is used as one metric to determine that BASE-R training has converged and local device can signal receiver ready. The [PAT_EXIT_CNT] variable sets the maximum length of the repeating pattern to search for in the pattern matching array. The pattern matching array has twelve elements therefore the maximum value of [PAT_EXIT_CNT] is 0xC. A value of 0x6 has been found to be optimal for recognizing training tap convergence. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] field is used in conjunction with the GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] field to control the training convergence pattern matching logic during BASE-R training. */ uint64_t pat_match_en : 1; /**< [ 59: 59](R/W) BASE-R training controls the receiver adaptation algorithm when [PAT_MATCH_EN] is set to one the training convergence pattern matching logic is enabled. The training pattern matching logic tracks the link partner transmitter tap moves and sets a flag when the pattern is found to be repeating in the taps moves tracking array. This is used to help converge training adaptation. When [PAT_MATCH_EN] is cleared to zero the pattern matching logic is disabled and not used to detect training convergence. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] field is used in conjunction with the GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] field to control the training convergence pattern matching logic during BASE-R training. */ uint64_t fdltfom_hi_lmt : 8; /**< [ 58: 51](R/W) BASE-R training sets the Delta Filtered FOM upper limit for training convergence. Value is a signed twos complement value. */ uint64_t fdltfom_lo_lmt : 8; /**< [ 50: 43](R/W) BASE-R training sets the Delta Filtered FOM lower limit for training convergence. Value is a signed twos complement value. */ uint64_t inv_post_dir : 1; /**< [ 42: 42](R/W) BASE-R training when set reverses the direction of the post tap (C+1) direction hint from the local device. */ uint64_t inv_main_dir : 1; /**< [ 41: 41](R/W) BASE-R training when set reverses the direction of the main tap (C0) direction hint from the local device. */ uint64_t inv_pre_dir : 1; /**< [ 40: 40](R/W) BASE-R training when set reverses the direction of the pre tap (C-1) direction hint from the local device. */ uint64_t use_ffom : 1; /**< [ 39: 39](R/W) Use filtered figure of merit for BASE-R transmitter adaptation logic. For diagnostic use only. 0 = The BASE-R transmitter adaptation logic use the unfiltered raw figure of merit FOM for BASE-R Inc/Dec direction hint computation. 1 = The BASE-R transmitter adaptation logic use the filtered FOM for Inc/Dec direction hint computation. */ uint64_t dfom_tc : 3; /**< [ 38: 36](R/W) Delta filtered figure of merit (DFOM) filter time constant. The DFOM is filtered by a cumulative moving average (CMA) filter. [DFOM_TC] sets the time constant of the CMA filter. Selectable time constant options are in the range 0 to 7 which sets the divider value used to scale the summed DFOM input term and the filtered DFOM feedback term. This provides a smoothed delta filtered figure of merit for use by the BASE-R transmitter adaptation logic. For diagnostic use only. 0x0 = No scaling. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. */ uint64_t ffom_tc : 3; /**< [ 35: 33](R/W) Filtered figure of merit (FFOM) filter time constant. The raw figure of merit (raw FOM) is filtered by a cumulative moving average (CMA) filter. [FFOM_TC] sets the time constant of the CMA filter. Selectable time constant options are in the range 0 to 7 which sets the divider value used to scale the raw FOM input term and the filtered FOM feedback term. This provides a smoothed filtered figure of merit for use by the BASE-R transmitter adaptation logic. 0x0 = No scaling. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. For diagnostic use only. */ uint64_t eq_eval_ack : 1; /**< [ 32: 32](RO/H) When set indicates a receiver equalization evaluation acknowledgment. Set in response to request when GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] is set and GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] is set. When [EQ_EVAL_ACK] is set, clear GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] which will in turn clear [EQ_EVAL_ACK] before issue another RX equalization evaluation request via GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ]. For diagnostic use only. */ uint64_t filtered_fom : 12; /**< [ 31: 20](RO/H) Filtered figure of merit (FOM) from the receiver adaptation logic. For diagnostic use only. */ uint64_t raw_fom : 12; /**< [ 19: 8](RO/H) Raw figure of merit (FOM) from the receiver adaptation logic. For diagnostic use only. */ uint64_t fom : 8; /**< [ 7: 0](RO/H) Figure of merit (FOM) for PCIe and CGX logic used for link partner TX equalizer adaptation. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t fom : 8; /**< [ 7: 0](RO/H) Figure of merit (FOM) for PCIe and CGX logic used for link partner TX equalizer adaptation. For diagnostic use only. */ uint64_t raw_fom : 12; /**< [ 19: 8](RO/H) Raw figure of merit (FOM) from the receiver adaptation logic. For diagnostic use only. */ uint64_t filtered_fom : 12; /**< [ 31: 20](RO/H) Filtered figure of merit (FOM) from the receiver adaptation logic. For diagnostic use only. */ uint64_t eq_eval_ack : 1; /**< [ 32: 32](RO/H) When set indicates a receiver equalization evaluation acknowledgment. Set in response to request when GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_EN] is set and GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] is set. When [EQ_EVAL_ACK] is set, clear GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ] which will in turn clear [EQ_EVAL_ACK] before issue another RX equalization evaluation request via GSERN()_LANE()_TRAIN_4_BCFG[EQ_EVAL_OVRRD_REQ]. For diagnostic use only. */ uint64_t ffom_tc : 3; /**< [ 35: 33](R/W) Filtered figure of merit (FFOM) filter time constant. The raw figure of merit (raw FOM) is filtered by a cumulative moving average (CMA) filter. [FFOM_TC] sets the time constant of the CMA filter. Selectable time constant options are in the range 0 to 7 which sets the divider value used to scale the raw FOM input term and the filtered FOM feedback term. This provides a smoothed filtered figure of merit for use by the BASE-R transmitter adaptation logic. 0x0 = No scaling. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. For diagnostic use only. */ uint64_t dfom_tc : 3; /**< [ 38: 36](R/W) Delta filtered figure of merit (DFOM) filter time constant. The DFOM is filtered by a cumulative moving average (CMA) filter. [DFOM_TC] sets the time constant of the CMA filter. Selectable time constant options are in the range 0 to 7 which sets the divider value used to scale the summed DFOM input term and the filtered DFOM feedback term. This provides a smoothed delta filtered figure of merit for use by the BASE-R transmitter adaptation logic. For diagnostic use only. 0x0 = No scaling. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. */ uint64_t use_ffom : 1; /**< [ 39: 39](R/W) Use filtered figure of merit for BASE-R transmitter adaptation logic. For diagnostic use only. 0 = The BASE-R transmitter adaptation logic use the unfiltered raw figure of merit FOM for BASE-R Inc/Dec direction hint computation. 1 = The BASE-R transmitter adaptation logic use the filtered FOM for Inc/Dec direction hint computation. */ uint64_t inv_pre_dir : 1; /**< [ 40: 40](R/W) BASE-R training when set reverses the direction of the pre tap (C-1) direction hint from the local device. */ uint64_t inv_main_dir : 1; /**< [ 41: 41](R/W) BASE-R training when set reverses the direction of the main tap (C0) direction hint from the local device. */ uint64_t inv_post_dir : 1; /**< [ 42: 42](R/W) BASE-R training when set reverses the direction of the post tap (C+1) direction hint from the local device. */ uint64_t fdltfom_lo_lmt : 8; /**< [ 50: 43](R/W) BASE-R training sets the Delta Filtered FOM lower limit for training convergence. Value is a signed twos complement value. */ uint64_t fdltfom_hi_lmt : 8; /**< [ 58: 51](R/W) BASE-R training sets the Delta Filtered FOM upper limit for training convergence. Value is a signed twos complement value. */ uint64_t pat_match_en : 1; /**< [ 59: 59](R/W) BASE-R training controls the receiver adaptation algorithm when [PAT_MATCH_EN] is set to one the training convergence pattern matching logic is enabled. The training pattern matching logic tracks the link partner transmitter tap moves and sets a flag when the pattern is found to be repeating in the taps moves tracking array. This is used to help converge training adaptation. When [PAT_MATCH_EN] is cleared to zero the pattern matching logic is disabled and not used to detect training convergence. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] field is used in conjunction with the GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] field to control the training convergence pattern matching logic during BASE-R training. */ uint64_t pat_exit_cnt : 4; /**< [ 63: 60](R/W) BASE-R training controls the receiver adaptation algorithm training convergence pattern matching logic. As BASE-R training progresses the Pre/Main/Post tap direction change coefficient updates to the link partner start to dither around the optimal tap values. The pattern matching logic looks for repeating patterns of the tap dithering around the optimal value and is used as one metric to determine that BASE-R training has converged and local device can signal receiver ready. The [PAT_EXIT_CNT] variable sets the maximum length of the repeating pattern to search for in the pattern matching array. The pattern matching array has twelve elements therefore the maximum value of [PAT_EXIT_CNT] is 0xC. A value of 0x6 has been found to be optimal for recognizing training tap convergence. The GSERN()_LANE()_TRAIN_5_BCFG[PAT_EXIT_CNT] field is used in conjunction with the GSERN()_LANE()_TRAIN_5_BCFG[PAT_MATCH_EN] field to control the training convergence pattern matching logic during BASE-R training. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_5_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_5_bcfg bdk_gsernx_lanex_train_5_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_5_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_5_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003200ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_5_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) bdk_gsernx_lanex_train_5_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) "GSERNX_LANEX_TRAIN_5_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_5_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_6_bcfg * * GSER Lane Training Base Configuration Register 6 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_6_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_6_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t frame_err : 1; /**< [ 63: 63](RO/H) Framing error. When set to a one and the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check indicates that the DOUTE and DOUTQ pipes could not be aligned to produce error free eye monitor data. For diagnostic use only. */ uint64_t no_shft_path_gd : 1; /**< [ 62: 62](RO/H) The non-shifted error path completed the framing test without errors. Valid when the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check. For diagnostic use only. */ uint64_t shft_path_gd : 1; /**< [ 61: 61](RO/H) The shifted error path completed the framing test without errors. Valid when the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check. For diagnostic use only. */ uint64_t en_frmoffs_chk : 1; /**< [ 60: 60](R/W) Enable framing offset check. When [EN_FRMOFFS_CHK] is set to a one the training eye monitor state machine checks if framing offset is needed between the receiver DOUTQ and DOUTE pipes. The framing offset check is performed when BASE-R or PCIe Gen3 training is first enabled. The GSERN()_LANE()_TRAIN_6_BCFG[SHFT_PATH_GD] or GSERN()_LANE()_TRAIN_6_BCFG[NO_SHFT_PATH_GD] flag will be set to indicate which framing offset was required. If no framing offset can be found to that produces an error free eye measurement then the GSERN()_LANE()_TRAIN_6_BCFG[FRAME_ERR] flag will be set. For diagnostic use only. */ uint64_t en_rxwt_ctr : 1; /**< [ 59: 59](R/W) Enable receiver adaptation wait timer. When [EN_RXWT_CTR] is set to a one the training state machine eye monitor measurement to measure the figure of merit (FOM) is delayed by 10 microseconds to allow the receiver equalizer to adjust to the link partner TX equalizer tap adjustments (BASE-R training and PCIe training) during link training. For diagnostic use only. */ uint64_t en_teoffs : 1; /**< [ 58: 58](R/W) Enable E-path QAC time offset adjustment. This is a diagnostic control used to adjust the QAC E-path time offset. Typically the E-path QAC time offset is set to 0.5UI. Setting [EN_TEOFFS] to a one enables the training state machine to adjust the E-path QAC time offset by the value specified in GSERN()_LANE()_TRAIN_6_BCFG[PRG_TEOFFS]. For diagnostic use only. */ uint64_t prg_teoffs : 6; /**< [ 57: 52](R/W) Programmable E-path QAC time offset. This is a diagnostic control used to set the eye monitor Epath QAC offset. Use to trim the qac_eoffs offset during eye monitor usage when used in BASE-R and PCIE training to measure the RX eye figure of merit (FOM). Typically set to the middle of the eye, e.g. 0.5UI. _ Target_eoffs = [PRG_TEOFFS] + (GSERN()_LANE()_RX_QAC_BSTS[QAC_EOFFS] - GSERN()_LANE()_TRAIN_6_BCFG[PRG_TDELTA]). _ [PRG_TEOFFS] = round(0.5UI/(1/63UI) = 6'h20. typically but other values can be set for testing purposes. For diagnostic use only. Internal: FIXME no such field GSERN()_LANE()_TRAIN_6_BCFG[PRG_TDELTA], then remove above exempt attribute. */ uint64_t trn_tst_pat : 2; /**< [ 51: 50](R/W) Training test pattern. This is a diagnostic control used to send a sequence of predetermined cost values to the BASE-R training logic to mimic training of a predetermined channel between the local device and link partner. This is to facilitate BASE-R testing between channels in a manufacturing test environment. When training starts the predetermined set of cost values (raw figure of merit) values will be provided to the BASE-R receiver and used to steer the training logic and tap convergence logic. Used only when GSERN()_LANE()_TRAIN_6_BCFG[TRN_TST_PATEN] is set to one. For diagnostic use only. 0x0 = Test training pattern with cost cache disabled 32 dB channel. 0x1 = Test training pattern with cost cache enabled 32 dB channel. 0x2 = Test training pattern with cost cache disabled 32 dB channel. 0x3 = Test training pattern with cost cache enabled 8 dB channel. */ uint64_t trn_tst_paten : 1; /**< [ 49: 49](R/W) Training test pattern enable. This is a diagnostic control used to send a sequence of predetermined cost values to the BASE-R training logic to mimic training of a predetermined channel between the local device and link partner. This is to facilitate BASE-R testing between channels in a manufacturing test environment. Used in conjunction with GSERN()_LANE()_TRAIN_6_BCFG[TRN_TST_PAT]. For diagnostic use only. */ uint64_t sav_cost_cache : 1; /**< [ 48: 48](R/W) Save cost cache contents when BASE-R training is completed. This is a diagnostic control used to preserve the cost cache contents after training is complete. When [SAV_COST_CACHE] is set to one the cost cache is not automatically clear at the completion of BASE-R training. When [SAV_COST_CACHE] is cleared to zero the cost cached is cleared when training is complete so that the BASE-R training logic can process a new request for BASE-R training in cases where training is restarted. Used when GSERN()_LANE()_TRAIN_6_BCFG[COST_CACHE_EN] is set to one. For diagnostic use only. */ uint64_t ccache_hits_min : 5; /**< [ 47: 43](R/W) Cost cache hits minimum. When BASE-R training is using the cost average cache to improve the gradient estimation process to get more accurate tap moves during the final stages of training convergence [CCACHE_HITS_MIN] sets the minimum number of cache hits that must be accumulate before the cost cache will be used. Used when GSERN()_LANE()_TRAIN_6_BCFG[COST_CACHE_EN] is set to one. For diagnostic use only. */ uint64_t cost_cache_en : 1; /**< [ 42: 42](R/W) Cost cache enable. When set BASE-R training will use the cost average cache to improve the gradient estimation process to get more accurate tap moves during the final stages of training convergence. For diagnostic use only. */ uint64_t dffom_exit_en : 1; /**< [ 41: 41](R/W) Delta Filtered FOM Exit Enable. When set to one BASE-R training will conclude and local device will signal ready if the Delta Filtered FOM is within the high and low limits specified in the GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT] for the number of tap move iterations specified in the GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] field. For diagnostic use only. */ uint64_t delta_ffom_ccnt : 5; /**< [ 40: 36](R/W) Delta Filtered FOM Convergence Count. Used during BASE-R training to specify the number of successive iterations required for the Delta Filtered FOM to be within the high and low limits specified in the GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT] to signal that BASE-R training is converged on the Local Device receiver. Used when GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN] is set to a one. For diagnostic use only. */ uint64_t exit_loc_main : 8; /**< [ 35: 28](RO/H) Training Exit Location Main tap value. Holds the exit location of the LP Main tap at the completion of BASE-R training when training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_loc_post : 8; /**< [ 27: 20](RO/H) Training Exit Location Post tap value. Holds the exit location of the LP Post tap at the completion of BASE-R training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_loc_pre : 8; /**< [ 19: 12](RO/H) Training Exit Location Pre tap value. Holds the exit location of the LP Pre tap at the completion of BASE-R training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_fom_val : 12; /**< [ 11: 0](RO/H) Pattern match logic exit value. Holds the Figure of merit (FOM) at the completion of BASE-R training when training is converged using the pattern matching logic. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t exit_fom_val : 12; /**< [ 11: 0](RO/H) Pattern match logic exit value. Holds the Figure of merit (FOM) at the completion of BASE-R training when training is converged using the pattern matching logic. For diagnostic use only. */ uint64_t exit_loc_pre : 8; /**< [ 19: 12](RO/H) Training Exit Location Pre tap value. Holds the exit location of the LP Pre tap at the completion of BASE-R training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_loc_post : 8; /**< [ 27: 20](RO/H) Training Exit Location Post tap value. Holds the exit location of the LP Post tap at the completion of BASE-R training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t exit_loc_main : 8; /**< [ 35: 28](RO/H) Training Exit Location Main tap value. Holds the exit location of the LP Main tap at the completion of BASE-R training when training completes. Number represented in offset binary notation. For diagnostic use only. */ uint64_t delta_ffom_ccnt : 5; /**< [ 40: 36](R/W) Delta Filtered FOM Convergence Count. Used during BASE-R training to specify the number of successive iterations required for the Delta Filtered FOM to be within the high and low limits specified in the GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT] to signal that BASE-R training is converged on the Local Device receiver. Used when GSERN()_LANE()_TRAIN_6_BCFG[DFFOM_EXIT_EN] is set to a one. For diagnostic use only. */ uint64_t dffom_exit_en : 1; /**< [ 41: 41](R/W) Delta Filtered FOM Exit Enable. When set to one BASE-R training will conclude and local device will signal ready if the Delta Filtered FOM is within the high and low limits specified in the GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_HI_LMT] and GSERN()_LANE()_TRAIN_5_BCFG[FDLTFOM_LO_LMT] for the number of tap move iterations specified in the GSERN()_LANE()_TRAIN_6_BCFG[DELTA_FFOM_CCNT] field. For diagnostic use only. */ uint64_t cost_cache_en : 1; /**< [ 42: 42](R/W) Cost cache enable. When set BASE-R training will use the cost average cache to improve the gradient estimation process to get more accurate tap moves during the final stages of training convergence. For diagnostic use only. */ uint64_t ccache_hits_min : 5; /**< [ 47: 43](R/W) Cost cache hits minimum. When BASE-R training is using the cost average cache to improve the gradient estimation process to get more accurate tap moves during the final stages of training convergence [CCACHE_HITS_MIN] sets the minimum number of cache hits that must be accumulate before the cost cache will be used. Used when GSERN()_LANE()_TRAIN_6_BCFG[COST_CACHE_EN] is set to one. For diagnostic use only. */ uint64_t sav_cost_cache : 1; /**< [ 48: 48](R/W) Save cost cache contents when BASE-R training is completed. This is a diagnostic control used to preserve the cost cache contents after training is complete. When [SAV_COST_CACHE] is set to one the cost cache is not automatically clear at the completion of BASE-R training. When [SAV_COST_CACHE] is cleared to zero the cost cached is cleared when training is complete so that the BASE-R training logic can process a new request for BASE-R training in cases where training is restarted. Used when GSERN()_LANE()_TRAIN_6_BCFG[COST_CACHE_EN] is set to one. For diagnostic use only. */ uint64_t trn_tst_paten : 1; /**< [ 49: 49](R/W) Training test pattern enable. This is a diagnostic control used to send a sequence of predetermined cost values to the BASE-R training logic to mimic training of a predetermined channel between the local device and link partner. This is to facilitate BASE-R testing between channels in a manufacturing test environment. Used in conjunction with GSERN()_LANE()_TRAIN_6_BCFG[TRN_TST_PAT]. For diagnostic use only. */ uint64_t trn_tst_pat : 2; /**< [ 51: 50](R/W) Training test pattern. This is a diagnostic control used to send a sequence of predetermined cost values to the BASE-R training logic to mimic training of a predetermined channel between the local device and link partner. This is to facilitate BASE-R testing between channels in a manufacturing test environment. When training starts the predetermined set of cost values (raw figure of merit) values will be provided to the BASE-R receiver and used to steer the training logic and tap convergence logic. Used only when GSERN()_LANE()_TRAIN_6_BCFG[TRN_TST_PATEN] is set to one. For diagnostic use only. 0x0 = Test training pattern with cost cache disabled 32 dB channel. 0x1 = Test training pattern with cost cache enabled 32 dB channel. 0x2 = Test training pattern with cost cache disabled 32 dB channel. 0x3 = Test training pattern with cost cache enabled 8 dB channel. */ uint64_t prg_teoffs : 6; /**< [ 57: 52](R/W) Programmable E-path QAC time offset. This is a diagnostic control used to set the eye monitor Epath QAC offset. Use to trim the qac_eoffs offset during eye monitor usage when used in BASE-R and PCIE training to measure the RX eye figure of merit (FOM). Typically set to the middle of the eye, e.g. 0.5UI. _ Target_eoffs = [PRG_TEOFFS] + (GSERN()_LANE()_RX_QAC_BSTS[QAC_EOFFS] - GSERN()_LANE()_TRAIN_6_BCFG[PRG_TDELTA]). _ [PRG_TEOFFS] = round(0.5UI/(1/63UI) = 6'h20. typically but other values can be set for testing purposes. For diagnostic use only. Internal: FIXME no such field GSERN()_LANE()_TRAIN_6_BCFG[PRG_TDELTA], then remove above exempt attribute. */ uint64_t en_teoffs : 1; /**< [ 58: 58](R/W) Enable E-path QAC time offset adjustment. This is a diagnostic control used to adjust the QAC E-path time offset. Typically the E-path QAC time offset is set to 0.5UI. Setting [EN_TEOFFS] to a one enables the training state machine to adjust the E-path QAC time offset by the value specified in GSERN()_LANE()_TRAIN_6_BCFG[PRG_TEOFFS]. For diagnostic use only. */ uint64_t en_rxwt_ctr : 1; /**< [ 59: 59](R/W) Enable receiver adaptation wait timer. When [EN_RXWT_CTR] is set to a one the training state machine eye monitor measurement to measure the figure of merit (FOM) is delayed by 10 microseconds to allow the receiver equalizer to adjust to the link partner TX equalizer tap adjustments (BASE-R training and PCIe training) during link training. For diagnostic use only. */ uint64_t en_frmoffs_chk : 1; /**< [ 60: 60](R/W) Enable framing offset check. When [EN_FRMOFFS_CHK] is set to a one the training eye monitor state machine checks if framing offset is needed between the receiver DOUTQ and DOUTE pipes. The framing offset check is performed when BASE-R or PCIe Gen3 training is first enabled. The GSERN()_LANE()_TRAIN_6_BCFG[SHFT_PATH_GD] or GSERN()_LANE()_TRAIN_6_BCFG[NO_SHFT_PATH_GD] flag will be set to indicate which framing offset was required. If no framing offset can be found to that produces an error free eye measurement then the GSERN()_LANE()_TRAIN_6_BCFG[FRAME_ERR] flag will be set. For diagnostic use only. */ uint64_t shft_path_gd : 1; /**< [ 61: 61](RO/H) The shifted error path completed the framing test without errors. Valid when the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check. For diagnostic use only. */ uint64_t no_shft_path_gd : 1; /**< [ 62: 62](RO/H) The non-shifted error path completed the framing test without errors. Valid when the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check. For diagnostic use only. */ uint64_t frame_err : 1; /**< [ 63: 63](RO/H) Framing error. When set to a one and the GSERN()_LANE()_TRAIN_6_BCFG[EN_FRMOFFS_CHK] bit is set to a one and the training state machine has completed the framing alignment check indicates that the DOUTE and DOUTQ pipes could not be aligned to produce error free eye monitor data. For diagnostic use only. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_6_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_6_bcfg bdk_gsernx_lanex_train_6_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_6_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_6_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003210ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_6_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) bdk_gsernx_lanex_train_6_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) "GSERNX_LANEX_TRAIN_6_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_6_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_7_bcfg * * GSER Lane Training Base Configuration Register 7 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_7_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_7_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t pcie_fasteq_val : 5; /**< [ 63: 59](R/W) Reserved. Internal: PCIe fast equalization delay value for simulation. Used in conjunction with GSERN()_LANE()_TRAIN_7_BCFG[PCIE_FASTEQ] When testing PCIe Gen3/Gen4 equalization in simulation. The default value of 0x6 programs the PCIe equalization FOM and link evaluation direction change request acknowledgement handshake to 1.6 microseconds to accelerate simulation modeling of the PCIe Gen3/Gen4 equalization phases 2 and 3. . For simulation use only. */ uint64_t pcie_fasteq : 1; /**< [ 58: 58](R/W) Reserved. Internal: PCIe fast equalization mode for simulation. When testing PCIe Gen3/Gen4 equalization in simulation setting [PCIE_FASTEQ] to 1 will reduce the PCIe equalization response to 1.6 microseconds. Can be used in conjunction with GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN]. If the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN] is not used the raw FOM value returned will be zero. Further the [PCIE_FASTEQ] is set the link evaluation feedback direction change for C(-1), C(0), and C(+1) will indicate no change. For simulation use only. */ uint64_t pcie_dir_eq_done : 1; /**< [ 57: 57](RO/H) PCIe direction change equalization done flag. During PCIe Gen3/Gen4 direction change equalization reflects the state of the direction equalization done flag. When set to 1 indicates that the current direction change equalization tap adjustment sequence is complete. Reset automatically by hardware when PCIe Gen3/Gen4 equalization is completed. */ uint64_t pcie_term_adtmout : 1; /**< [ 56: 56](R/W) PCIe terminate direction change feedback equalization when reached the the equalization timeout specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL]. During PCIe Gen3/Gen4 equalization direction change feedback mode the equalization timeout period is controlled by GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST]. When [PCIE_TERM_ADTMOUT] sets when the equalization timeout timer expires the equalization logic will signal equalization complete on the next equalization request from the PCIe controller. The training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_adtmout_fast : 1; /**< [ 55: 55](R/W) Reserved. Internal: For simulation use only. When set accelerates the PCIe Gen3/Gen4 direction change feedback equalization timeout timer period. When set shortens the direction change equalization time-out timer. See the description for GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL]. For diagnostic use only. */ uint64_t pcie_adtmout_disable : 1; /**< [ 54: 54](R/W) PCIe Gen3/Gen4 direction change feedback equalization timeout timer disable. When [PCIE_ADTMOUT_DISABLE] is set to 1 the timeout timer that runs during PCIe Gen3/Gen4 direction change feecback equalization is disabled. When [PCIE_ADTMOUT_DISABLE] is cleared to 0 the equalization timeout timer is enabled. The equalization timeout period is controlled by GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST]. For diagnostic use only. */ uint64_t pcie_adtmout_sel : 2; /**< [ 53: 52](R/W) Selects the timeout value for the PCIe Gen3/Gen4 direction change feedback equalization. This time-out timer value is only valid if GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_DISABLE] is cleared to 0. When GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST] is cleared to 0 the link training time-out timer value is set by [PCIE_ADTMOUT_SEL] to the values shown. 0x0 = 5.24 milliseconds. 0x1 = 10.49 milliseconds. 0x2 = 13.1 milliseconds. 0x3 = 15.73 milliseconds. When GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST] is set to 1 the link training time-out timer value is set by [PCIE_ADTMOUT_SEL] to the values shown. 0x0 = 81.92 microseconds. 0x1 = 163.84 microseconds. 0x2 = 327.68 microseconds. 0x3 = 655.36 microseconds. */ uint64_t pcie_term_max_mvs : 1; /**< [ 51: 51](R/W) PCIe terminate direction change feedback equalization when reached the the maximum number of tap moves specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAX_MOVES]. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MAX_MOVES] sets the maximum number of tap moves to make before signaling equalization complete. When [PCIE_TERM_MAX_MVS] is set to 1 the training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_term_min_mvs : 1; /**< [ 50: 50](R/W) PCIe terminate direction change feedback equalization when exceeded the the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MIN_MOVES]. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the minimum number of tap moves to make before signaling equalization complete. When [PCIE_TERM_MIN_MVS] is set to 1 the training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_max_moves : 8; /**< [ 49: 42](R/W) PCIe maximum tap moves. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the maximum number of tap moves to make before signaling equalization complete. */ uint64_t pcie_min_moves : 8; /**< [ 41: 34](R/W) PCIe minimum tap moves. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the minimum number of tap moves to make before signaling equalization complete. */ uint64_t pcie_rev_dir_hints : 1; /**< [ 33: 33](R/W) When set, reverses the direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_POST_DIR], GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAIN_DIR], and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_PRE_DIR] Tx tap direction feedback hints. For diagnostic use only. */ uint64_t pcie_inv_post_dir : 1; /**< [ 32: 32](R/W) PCIe direction change equalization invert post tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_POST_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_inv_main_dir : 1; /**< [ 31: 31](R/W) PCIe direction change equalization invert main tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAIN_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_inv_pre_dir : 1; /**< [ 30: 30](R/W) PCIe direction change equalization invert pre tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_PRE_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_post_dir : 2; /**< [ 29: 28](RO/H) PCIe direction change equalization post (C+1) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_POST_DIR] field reflects the value of the post (C+1) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. */ uint64_t pcie_main_dir : 2; /**< [ 27: 26](RO/H) PCIe direction change equalization main (C0) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_MAIN_DIR] field reflects the value of the main (C0) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. The main direction will always be 0x0 no change. The PCIe MAC computes the Main (C0) tap direction change. */ uint64_t pcie_pre_dir : 2; /**< [ 25: 24](RO/H) PCIe direction change equalization pre (C-1) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_PRE_DIR] field reflects the value of the pre (C-1) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. */ uint64_t pcie_tst_array_rdy : 1; /**< [ 23: 23](RO/H) PCIe test FOM array ready. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. Internal: PCIe test FOM array ready. For verification diagnostic use only. All entries of the PCIe test FOM array are cleared following release of reset. When [PCIE_TST_ARRAY_RDY] is set to 1 the PCIe test FOM array is ready and can be used for PCIe training testing. Do not read or write the PCIe test FOM array while [PCIE_TST_ARRAY_RDY] is cleared to 0. When the GSER QLM is released from reset the [PCIE_TST_ARRAY_RDY] will transition from 0 to 1 after 128 service clock cycles. */ uint64_t pcie_tst_fom_mode : 1; /**< [ 22: 22](R/W) PCIe test FOM array mode. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. Internal: PCIe test FOM array mode. For verification diagnostic use only. 0x0 = Test FOM array is used to load and play back test FOMs for PCIe link training. 0x1 = Test FOM array is used to capture raw FOMs during link training for diagnostic verification. */ uint64_t pcie_tst_fom_en : 1; /**< [ 21: 21](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_rd : 1; /**< [ 20: 20](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_ld : 1; /**< [ 19: 19](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_addr : 7; /**< [ 18: 12](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_val : 12; /**< [ 11: 0](R/W/H) PCIe test figure of merit array enable. For verification diagnostic use only. Internal: Used to load the test raw figure of merit (raw FOM) array with test FOM values to play back during PCIe Gen3/Gen4 training to check the training preset selection logic and PCIE training logic. An 11-bit by 32 word array is used to hold the test raw FOM values. The array FOM values are initialized by writing the [PCIE_TST_FOM_ADDR] field with a value from 0x0 to 0x7F to index a location in the array, then writing the [PCIE_TST_FOM_VAL] with a 12-bit quantity representing the raw FOM value to be written to the array location, then writing the [PCIE_TST_FOM_LD] bit to 1 to write the raw FOM 12-bit value to the array, and the writing the [PCIE_TST_FOM_LD] bit to 0 to complete array write operation. Before writing the array software should poll the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_ARRAY_RDY] and wait for [PCIE_TST_ARRAY_RDY] field to be set to 1 before reading or writing the test fom array. Also write GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_MODE] to 0. Each array location is written with the desired raw FOM value following the thse steps. After all array locations are written, the array locations can be read back. Write the [PCIE_TST_FOM_ADDR] to point to the desired array location, next write [PCIE_TST_FOM_RD] to 1 to enable read back mode. Read the [PCIE_TST_FOM_VAL] field to readback the 12-bit test raw FOM value from the array. Finally write [PCIE_TST_FOM_RD] to 0 to disable read back mode. To enable the PCI Express Test FOM array during PCIe Gen3/Gen4 link training write [PCIE_TST_FOM_EN] to 1. Note prior to writing [PCIE_TST_FOM_EN] to 1, ensure that [PCIE_TST_FOM_RD] is cleared to 0 and [PCIE_TST_FOM_LD] is cleared to 0. During PCIe Gen3/Gen4 link training each time a Preset receiver evaluation request is received the training logic will return the 12-bit raw FOM from the current test FOM array location to the PIPE PCS logic and then move to the next test FOM array location. The test FOM array always starts at location 0x0 and increments to the next location in the FOM array after each preset evaluation. Related Registers GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_ADDR] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_LD] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_RD] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_MODE] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_ARRAY_RDY] */ #else /* Word 0 - Little Endian */ uint64_t pcie_tst_fom_val : 12; /**< [ 11: 0](R/W/H) PCIe test figure of merit array enable. For verification diagnostic use only. Internal: Used to load the test raw figure of merit (raw FOM) array with test FOM values to play back during PCIe Gen3/Gen4 training to check the training preset selection logic and PCIE training logic. An 11-bit by 32 word array is used to hold the test raw FOM values. The array FOM values are initialized by writing the [PCIE_TST_FOM_ADDR] field with a value from 0x0 to 0x7F to index a location in the array, then writing the [PCIE_TST_FOM_VAL] with a 12-bit quantity representing the raw FOM value to be written to the array location, then writing the [PCIE_TST_FOM_LD] bit to 1 to write the raw FOM 12-bit value to the array, and the writing the [PCIE_TST_FOM_LD] bit to 0 to complete array write operation. Before writing the array software should poll the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_ARRAY_RDY] and wait for [PCIE_TST_ARRAY_RDY] field to be set to 1 before reading or writing the test fom array. Also write GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_MODE] to 0. Each array location is written with the desired raw FOM value following the thse steps. After all array locations are written, the array locations can be read back. Write the [PCIE_TST_FOM_ADDR] to point to the desired array location, next write [PCIE_TST_FOM_RD] to 1 to enable read back mode. Read the [PCIE_TST_FOM_VAL] field to readback the 12-bit test raw FOM value from the array. Finally write [PCIE_TST_FOM_RD] to 0 to disable read back mode. To enable the PCI Express Test FOM array during PCIe Gen3/Gen4 link training write [PCIE_TST_FOM_EN] to 1. Note prior to writing [PCIE_TST_FOM_EN] to 1, ensure that [PCIE_TST_FOM_RD] is cleared to 0 and [PCIE_TST_FOM_LD] is cleared to 0. During PCIe Gen3/Gen4 link training each time a Preset receiver evaluation request is received the training logic will return the 12-bit raw FOM from the current test FOM array location to the PIPE PCS logic and then move to the next test FOM array location. The test FOM array always starts at location 0x0 and increments to the next location in the FOM array after each preset evaluation. Related Registers GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_ADDR] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_LD] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_RD] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_MODE] GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_ARRAY_RDY] */ uint64_t pcie_tst_fom_addr : 7; /**< [ 18: 12](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_ld : 1; /**< [ 19: 19](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_rd : 1; /**< [ 20: 20](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_en : 1; /**< [ 21: 21](R/W) PCIe test figure of merit array enable. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. */ uint64_t pcie_tst_fom_mode : 1; /**< [ 22: 22](R/W) PCIe test FOM array mode. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. Internal: PCIe test FOM array mode. For verification diagnostic use only. 0x0 = Test FOM array is used to load and play back test FOMs for PCIe link training. 0x1 = Test FOM array is used to capture raw FOMs during link training for diagnostic verification. */ uint64_t pcie_tst_array_rdy : 1; /**< [ 23: 23](RO/H) PCIe test FOM array ready. For verification diagnostic use only. See [PCIE_TST_FOM_VAL]. Internal: PCIe test FOM array ready. For verification diagnostic use only. All entries of the PCIe test FOM array are cleared following release of reset. When [PCIE_TST_ARRAY_RDY] is set to 1 the PCIe test FOM array is ready and can be used for PCIe training testing. Do not read or write the PCIe test FOM array while [PCIE_TST_ARRAY_RDY] is cleared to 0. When the GSER QLM is released from reset the [PCIE_TST_ARRAY_RDY] will transition from 0 to 1 after 128 service clock cycles. */ uint64_t pcie_pre_dir : 2; /**< [ 25: 24](RO/H) PCIe direction change equalization pre (C-1) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_PRE_DIR] field reflects the value of the pre (C-1) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. */ uint64_t pcie_main_dir : 2; /**< [ 27: 26](RO/H) PCIe direction change equalization main (C0) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_MAIN_DIR] field reflects the value of the main (C0) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. The main direction will always be 0x0 no change. The PCIe MAC computes the Main (C0) tap direction change. */ uint64_t pcie_post_dir : 2; /**< [ 29: 28](RO/H) PCIe direction change equalization post (C+1) tap direction. During PCIe Gen3/Gen4 link training using direction change equalization the [PCIE_POST_DIR] field reflects the value of the post (C+1) tap direction for the link evaluation direction feedback. 0x0 = No change. 0x1 = Increment feedback for each coefficient. 0x2 = Decrement feedback for each coefficient. 0x3 = Reserved. */ uint64_t pcie_inv_pre_dir : 1; /**< [ 30: 30](R/W) PCIe direction change equalization invert pre tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_PRE_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_inv_main_dir : 1; /**< [ 31: 31](R/W) PCIe direction change equalization invert main tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAIN_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_inv_post_dir : 1; /**< [ 32: 32](R/W) PCIe direction change equalization invert post tap direction. When set reverses the Increment/Decrement direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_POST_DIR] Tx tap direction feedback. For diagnostic use only. */ uint64_t pcie_rev_dir_hints : 1; /**< [ 33: 33](R/W) When set, reverses the direction of the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_POST_DIR], GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAIN_DIR], and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_PRE_DIR] Tx tap direction feedback hints. For diagnostic use only. */ uint64_t pcie_min_moves : 8; /**< [ 41: 34](R/W) PCIe minimum tap moves. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the minimum number of tap moves to make before signaling equalization complete. */ uint64_t pcie_max_moves : 8; /**< [ 49: 42](R/W) PCIe maximum tap moves. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the maximum number of tap moves to make before signaling equalization complete. */ uint64_t pcie_term_min_mvs : 1; /**< [ 50: 50](R/W) PCIe terminate direction change feedback equalization when exceeded the the minimum number of tap moves specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MIN_MOVES]. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MIN_MOVES] sets the minimum number of tap moves to make before signaling equalization complete. When [PCIE_TERM_MIN_MVS] is set to 1 the training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_term_max_mvs : 1; /**< [ 51: 51](R/W) PCIe terminate direction change feedback equalization when reached the the maximum number of tap moves specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_MAX_MOVES]. During PCIe Gen3/Gen4 equalization direction change feedback mode [PCIE_MAX_MOVES] sets the maximum number of tap moves to make before signaling equalization complete. When [PCIE_TERM_MAX_MVS] is set to 1 the training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_adtmout_sel : 2; /**< [ 53: 52](R/W) Selects the timeout value for the PCIe Gen3/Gen4 direction change feedback equalization. This time-out timer value is only valid if GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_DISABLE] is cleared to 0. When GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST] is cleared to 0 the link training time-out timer value is set by [PCIE_ADTMOUT_SEL] to the values shown. 0x0 = 5.24 milliseconds. 0x1 = 10.49 milliseconds. 0x2 = 13.1 milliseconds. 0x3 = 15.73 milliseconds. When GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST] is set to 1 the link training time-out timer value is set by [PCIE_ADTMOUT_SEL] to the values shown. 0x0 = 81.92 microseconds. 0x1 = 163.84 microseconds. 0x2 = 327.68 microseconds. 0x3 = 655.36 microseconds. */ uint64_t pcie_adtmout_disable : 1; /**< [ 54: 54](R/W) PCIe Gen3/Gen4 direction change feedback equalization timeout timer disable. When [PCIE_ADTMOUT_DISABLE] is set to 1 the timeout timer that runs during PCIe Gen3/Gen4 direction change feecback equalization is disabled. When [PCIE_ADTMOUT_DISABLE] is cleared to 0 the equalization timeout timer is enabled. The equalization timeout period is controlled by GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST]. For diagnostic use only. */ uint64_t pcie_adtmout_fast : 1; /**< [ 55: 55](R/W) Reserved. Internal: For simulation use only. When set accelerates the PCIe Gen3/Gen4 direction change feedback equalization timeout timer period. When set shortens the direction change equalization time-out timer. See the description for GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL]. For diagnostic use only. */ uint64_t pcie_term_adtmout : 1; /**< [ 56: 56](R/W) PCIe terminate direction change feedback equalization when reached the the equalization timeout specified in GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL]. During PCIe Gen3/Gen4 equalization direction change feedback mode the equalization timeout period is controlled by GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_SEL] and GSERN()_LANE()_TRAIN_7_BCFG[PCIE_ADTMOUT_FAST]. When [PCIE_TERM_ADTMOUT] sets when the equalization timeout timer expires the equalization logic will signal equalization complete on the next equalization request from the PCIe controller. The training logic will signal equalization complete by returning C(-1) TAP direction change set to No Change and C(+1) TAP direction change also set to No Change. This will signal the termination of PCIe Gen3/Gen4 equalization direction change feedback mode. */ uint64_t pcie_dir_eq_done : 1; /**< [ 57: 57](RO/H) PCIe direction change equalization done flag. During PCIe Gen3/Gen4 direction change equalization reflects the state of the direction equalization done flag. When set to 1 indicates that the current direction change equalization tap adjustment sequence is complete. Reset automatically by hardware when PCIe Gen3/Gen4 equalization is completed. */ uint64_t pcie_fasteq : 1; /**< [ 58: 58](R/W) Reserved. Internal: PCIe fast equalization mode for simulation. When testing PCIe Gen3/Gen4 equalization in simulation setting [PCIE_FASTEQ] to 1 will reduce the PCIe equalization response to 1.6 microseconds. Can be used in conjunction with GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN]. If the GSERN()_LANE()_TRAIN_7_BCFG[PCIE_TST_FOM_EN] is not used the raw FOM value returned will be zero. Further the [PCIE_FASTEQ] is set the link evaluation feedback direction change for C(-1), C(0), and C(+1) will indicate no change. For simulation use only. */ uint64_t pcie_fasteq_val : 5; /**< [ 63: 59](R/W) Reserved. Internal: PCIe fast equalization delay value for simulation. Used in conjunction with GSERN()_LANE()_TRAIN_7_BCFG[PCIE_FASTEQ] When testing PCIe Gen3/Gen4 equalization in simulation. The default value of 0x6 programs the PCIe equalization FOM and link evaluation direction change request acknowledgement handshake to 1.6 microseconds to accelerate simulation modeling of the PCIe Gen3/Gen4 equalization phases 2 and 3. . For simulation use only. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_7_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_7_bcfg bdk_gsernx_lanex_train_7_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_7_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_7_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003220ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_7_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) bdk_gsernx_lanex_train_7_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) "GSERNX_LANEX_TRAIN_7_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_7_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_8_bcfg * * GSER Lane Training Base Configuration Register 8 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_8_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_8_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_61_63 : 3; uint64_t pcie_l_c1_e_adj_sgn : 1; /**< [ 60: 60](R/W) Sets the lower C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the lower C1_E sampler below the eye C1_Q sampler. 1 = The offset sign is negative positioning the lower C1_E sampler above the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_L_C1_E_ADJ_STEP] during PCIE training. For diagnostic use only. */ uint64_t pcie_u_c1_e_adj_sgn : 1; /**< [ 59: 59](R/W) Sets the upper C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the upper C1_E sampler above the eye C1_Q sampler. 1 = The offset sign is negative positioning the upper C1_E sampler below the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_U_C1_E_ADJ_STEP] for PCIE training. For diagnostic use only. */ uint64_t pcie_u_c1_e_adj_step : 5; /**< [ 58: 54](R/W) Sets the C1 E sampler voltage level during eye monitor sampling. Typically [PCIE_U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15 mV above the C1 Q sampler voltage level. Steps are in units of 5.08 mV per step. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_U_C1_E_ADJ_SGN] for PCIE training. For diagnostic use only. */ uint64_t pcie_adapt_axis : 3; /**< [ 53: 51](R/W) Sets the number or adaptation axes to use during receiver adaptation. Typically set to 0x7 to enable all three adaptation axes. One-hot encoded. Set to 0x1 to only enable axis 1 and disable axis 2 and axis 3. Set to 0x3 to enable axis 1 and axis 2 but disable axis 3. Set to 0x7 to enable axis 1, 2 and 3. (default.) For diagnostic use only. */ uint64_t pcie_l_c1_e_adj_step : 5; /**< [ 50: 46](R/W) Sets the lower C1 E sampler voltage level during eye monitor sampling. Typically set to 0x2 to position the eye monitor error sampler at ~15mV below the C1 Q sampler voltage level. Steps are in units of 5.08 mV per step. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_L_C1_E_ADJ_SGN] during PCIE training. For diagnostic use only. */ uint64_t pcie_ecnt_div_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [PCIE_ECNT_DIV_EN] is set. For diagnostic use only. 0x0 = No divider. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. 0x8 = Divide by 256. 0x9 = Divide by 512. 0xA = Divide by 1024. 0xB = Divide by 2048. 0xC = Divide by 4096. 0xD = Divide by 8192. 0xE = Divide by 16384. 0xF = Divide by 32768. */ uint64_t pcie_ecnt_div_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. For diagnostic use only. */ uint64_t pcie_eye_cnt_en : 1; /**< [ 40: 40](R/W) Eye cycle count enable. When set the number of eye monitor cycles to sample and count during the PCIe Gen3/Gen4 training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_VAL]. For diagnostic use only. */ uint64_t pcie_eye_cnt_val : 40; /**< [ 39: 0](R/W) PCIe eye count value Preset FOM. Sets the number of eye monitor cycles to sample/count during the PCIe training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_EN]=1. For diagnostic use only. */ #else /* Word 0 - Little Endian */ uint64_t pcie_eye_cnt_val : 40; /**< [ 39: 0](R/W) PCIe eye count value Preset FOM. Sets the number of eye monitor cycles to sample/count during the PCIe training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_EN]=1. For diagnostic use only. */ uint64_t pcie_eye_cnt_en : 1; /**< [ 40: 40](R/W) Eye cycle count enable. When set the number of eye monitor cycles to sample and count during the PCIe Gen3/Gen4 training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_VAL]. For diagnostic use only. */ uint64_t pcie_ecnt_div_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. For diagnostic use only. */ uint64_t pcie_ecnt_div_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [PCIE_ECNT_DIV_EN] is set. For diagnostic use only. 0x0 = No divider. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. 0x8 = Divide by 256. 0x9 = Divide by 512. 0xA = Divide by 1024. 0xB = Divide by 2048. 0xC = Divide by 4096. 0xD = Divide by 8192. 0xE = Divide by 16384. 0xF = Divide by 32768. */ uint64_t pcie_l_c1_e_adj_step : 5; /**< [ 50: 46](R/W) Sets the lower C1 E sampler voltage level during eye monitor sampling. Typically set to 0x2 to position the eye monitor error sampler at ~15mV below the C1 Q sampler voltage level. Steps are in units of 5.08 mV per step. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_L_C1_E_ADJ_SGN] during PCIE training. For diagnostic use only. */ uint64_t pcie_adapt_axis : 3; /**< [ 53: 51](R/W) Sets the number or adaptation axes to use during receiver adaptation. Typically set to 0x7 to enable all three adaptation axes. One-hot encoded. Set to 0x1 to only enable axis 1 and disable axis 2 and axis 3. Set to 0x3 to enable axis 1 and axis 2 but disable axis 3. Set to 0x7 to enable axis 1, 2 and 3. (default.) For diagnostic use only. */ uint64_t pcie_u_c1_e_adj_step : 5; /**< [ 58: 54](R/W) Sets the C1 E sampler voltage level during eye monitor sampling. Typically [PCIE_U_C1_E_ADJ_STEP] is set to 0x3 to position the eye monitor error sampler at ~15 mV above the C1 Q sampler voltage level. Steps are in units of 5.08 mV per step. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_U_C1_E_ADJ_SGN] for PCIE training. For diagnostic use only. */ uint64_t pcie_u_c1_e_adj_sgn : 1; /**< [ 59: 59](R/W) Sets the upper C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the upper C1_E sampler above the eye C1_Q sampler. 1 = The offset sign is negative positioning the upper C1_E sampler below the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_U_C1_E_ADJ_STEP] for PCIE training. For diagnostic use only. */ uint64_t pcie_l_c1_e_adj_sgn : 1; /**< [ 60: 60](R/W) Sets the lower C1 E sampler adjustment voltage offset sign. 0 = The offset sign is positive positioning the lower C1_E sampler below the eye C1_Q sampler. 1 = The offset sign is negative positioning the lower C1_E sampler above the eye C1_Q sampler. Used in conjunction with GSERN()_LANE()_TRAIN_8_BCFG[PCIE_L_C1_E_ADJ_STEP] during PCIE training. For diagnostic use only. */ uint64_t reserved_61_63 : 3; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_8_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_8_bcfg bdk_gsernx_lanex_train_8_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_8_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_8_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003230ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_8_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) bdk_gsernx_lanex_train_8_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) "GSERNX_LANEX_TRAIN_8_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_8_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_train_9_bcfg * * GSER Lane Training Base Configuration Register 9 * This register controls settings for lane training. */ union bdk_gsernx_lanex_train_9_bcfg { uint64_t u; struct bdk_gsernx_lanex_train_9_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_59_63 : 5; uint64_t pcie_dir_fom_en : 1; /**< [ 58: 58](R/W) Enable PCIe Gen3 and Gen4 equalization direction change minimum FOM for termination. During PCIe Gen3 and Gen4 equalization using the direction change method the GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_THRS] field sets the minimum threshold for the raw 12-bit FOM value that when exceeded will terminate direction change equalization. [PCIE_DIR_FOM_EN] must be set to 1 to allow the direction change state machine to terminate equalization when the measured raw FOM has exceeded the value in the GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_THRS] field. For diagnostic use only. */ uint64_t pcie_dir_fom_thrs : 12; /**< [ 57: 46](R/W) PCIe Gen3 and Gen4 equalization direction change FOM threshold for termination. During PCIe Gen3 and Gen4 equalization using the direction change method [PCIE_DIR_FOM_THRS] sets the minimum threshold for the raw 12-bit FOM value that when exceeded will terminate direction change equalization. The GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_EN] field must be set to 1 to allow the direction change state machine to terminate equalization when the raw FOM has exceeded the value in [PCIE_DIR_FOM_THRS]. For diagnostic use only. */ uint64_t pcie_dir_ecnt_div_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [PCIE_DIR_ECNT_DIV_EN] is set. Used when direction change equalization is enabled. For diagnostic use only. 0x0 = No divider. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. 0x8 = Divide by 256. 0x9 = Divide by 512. 0xA = Divide by 1024. 0xB = Divide by 2048. 0xC = Divide by 4096. 0xD = Divide by 8192. 0xE = Divide by 16384. 0xF = Divide by 32768. */ uint64_t pcie_dir_ecnt_div_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. Used when direction change equalization is enabled. For diagnostic use only. */ uint64_t pcie_dir_eye_cnt_en : 1; /**< [ 40: 40](R/W) Eye cycle count enable. When set the number of eye monitor cycles to sample and count during the PCIe Gen3/Gen4 training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_EYE_CNT_VAL]. Used when direction change equalization is enabled. For diagnostic use only. */ uint64_t pcie_dir_eye_cnt_val : 40; /**< [ 39: 0](R/W) PCIe eye count value in direction change mode. Sets the number of eye monitor cycles to sample/count during the PCIe training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_EYE_CNT_EN]=1. See GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_VAL]. */ #else /* Word 0 - Little Endian */ uint64_t pcie_dir_eye_cnt_val : 40; /**< [ 39: 0](R/W) PCIe eye count value in direction change mode. Sets the number of eye monitor cycles to sample/count during the PCIe training figure of merit (FOM) calculation when GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_EYE_CNT_EN]=1. See GSERN()_LANE()_TRAIN_8_BCFG[PCIE_EYE_CNT_VAL]. */ uint64_t pcie_dir_eye_cnt_en : 1; /**< [ 40: 40](R/W) Eye cycle count enable. When set the number of eye monitor cycles to sample and count during the PCIe Gen3/Gen4 training figure of merit (FOM) calculation is controlled by GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_EYE_CNT_VAL]. Used when direction change equalization is enabled. For diagnostic use only. */ uint64_t pcie_dir_ecnt_div_en : 1; /**< [ 41: 41](R/W) Error counter divider override enable. Used when direction change equalization is enabled. For diagnostic use only. */ uint64_t pcie_dir_ecnt_div_val : 4; /**< [ 45: 42](R/W) Error counter divider override value. See table below. Divider is active when the [PCIE_DIR_ECNT_DIV_EN] is set. Used when direction change equalization is enabled. For diagnostic use only. 0x0 = No divider. 0x1 = Divide by 2. 0x2 = Divide by 4. 0x3 = Divide by 8. 0x4 = Divide by 16. 0x5 = Divide by 32. 0x6 = Divide by 64. 0x7 = Divide by 128. 0x8 = Divide by 256. 0x9 = Divide by 512. 0xA = Divide by 1024. 0xB = Divide by 2048. 0xC = Divide by 4096. 0xD = Divide by 8192. 0xE = Divide by 16384. 0xF = Divide by 32768. */ uint64_t pcie_dir_fom_thrs : 12; /**< [ 57: 46](R/W) PCIe Gen3 and Gen4 equalization direction change FOM threshold for termination. During PCIe Gen3 and Gen4 equalization using the direction change method [PCIE_DIR_FOM_THRS] sets the minimum threshold for the raw 12-bit FOM value that when exceeded will terminate direction change equalization. The GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_EN] field must be set to 1 to allow the direction change state machine to terminate equalization when the raw FOM has exceeded the value in [PCIE_DIR_FOM_THRS]. For diagnostic use only. */ uint64_t pcie_dir_fom_en : 1; /**< [ 58: 58](R/W) Enable PCIe Gen3 and Gen4 equalization direction change minimum FOM for termination. During PCIe Gen3 and Gen4 equalization using the direction change method the GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_THRS] field sets the minimum threshold for the raw 12-bit FOM value that when exceeded will terminate direction change equalization. [PCIE_DIR_FOM_EN] must be set to 1 to allow the direction change state machine to terminate equalization when the measured raw FOM has exceeded the value in the GSERN()_LANE()_TRAIN_9_BCFG[PCIE_DIR_FOM_THRS] field. For diagnostic use only. */ uint64_t reserved_59_63 : 5; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_train_9_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_train_9_bcfg bdk_gsernx_lanex_train_9_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TRAIN_9_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TRAIN_9_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090003240ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TRAIN_9_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) bdk_gsernx_lanex_train_9_bcfg_t #define bustype_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) "GSERNX_LANEX_TRAIN_9_BCFG" #define device_bar_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TRAIN_9_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_1_bcfg * * GSER Lane TX Base Configuration Register 1 * lane transmitter configuration Register 1 */ union bdk_gsernx_lanex_tx_1_bcfg { uint64_t u; struct bdk_gsernx_lanex_tx_1_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_57_63 : 7; uint64_t tx_acjtag : 1; /**< [ 56: 56](R/W) TBD */ uint64_t tx_dacj : 8; /**< [ 55: 48](R/W) ACJTAG block data bits (some redundant). */ uint64_t reserved_41_47 : 7; uint64_t tx_enloop : 1; /**< [ 40: 40](R/W) Set to enable the DDR loopback mux in the custom transmitter to send a copy of transmit data back into the receive path. */ uint64_t reserved_33_39 : 7; uint64_t nvlink : 1; /**< [ 32: 32](R/W) Transmitter lower impedance termination control (43 ohm instead of 50 ohm). */ uint64_t reserved_26_31 : 6; uint64_t rx_mod4 : 1; /**< [ 25: 25](R/W) Use PCS layer receive data path clock ratio of 16:1 or 32:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer receive clock ratio of 20:1 or 40:1. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together set the width of the parallel receive data path (pipe) in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together control the clock ratio of the serializer in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_MOD4] and GSERN()_LANE()_TX_1_BCFG[MOD4] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t rx_post4 : 1; /**< [ 24: 24](R/W) Use PCS layer receive data path clock ratio of 32:1 or 40:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer receive clock ratio of 16:1 or 20:1. (The function is similar to [DIV20] but for the receiver instead of the transmitter.) GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together set the width of the parallel receive data path (pipe) in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together control the clock ratio of the serializer in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[DIV20] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t reserved_18_23 : 6; uint64_t mod4 : 1; /**< [ 17: 17](R/W) Use PCS layer transmit data path clock ratio of 16:1 or 32:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer transmit clock ratio of 20:1 or 40:1. Should be programed as desired before sequencing the transmitter reset state machine. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together set the width of the parallel transmit data path (pipe) in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together control the clock ratio of the serializer in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[RX_MOD4] and GSERN()_LANE()_TX_1_BCFG[MOD4] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t div20 : 1; /**< [ 16: 16](R/W) Use PCS layer transmit data path clock ratio of 32:1 or 40:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer transmit clock ratio of 16:1 or 20:1. Should be programed as desired before sequencing the transmitter reset state machine. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together set the width of the parallel transmit data path (pipe) in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together control the clock ratio of the serializer in the custom transnmitter. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[DIV20] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t reserved_9_15 : 7; uint64_t tx_enfast : 1; /**< [ 8: 8](R/W) Enable fast slew on the TX preamp output. */ uint64_t reserved_1_7 : 7; uint64_t tx_encm : 1; /**< [ 0: 0](R/W) Enable common mode correction in the transmitter. */ #else /* Word 0 - Little Endian */ uint64_t tx_encm : 1; /**< [ 0: 0](R/W) Enable common mode correction in the transmitter. */ uint64_t reserved_1_7 : 7; uint64_t tx_enfast : 1; /**< [ 8: 8](R/W) Enable fast slew on the TX preamp output. */ uint64_t reserved_9_15 : 7; uint64_t div20 : 1; /**< [ 16: 16](R/W) Use PCS layer transmit data path clock ratio of 32:1 or 40:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer transmit clock ratio of 16:1 or 20:1. Should be programed as desired before sequencing the transmitter reset state machine. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together set the width of the parallel transmit data path (pipe) in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together control the clock ratio of the serializer in the custom transnmitter. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[DIV20] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t mod4 : 1; /**< [ 17: 17](R/W) Use PCS layer transmit data path clock ratio of 16:1 or 32:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer transmit clock ratio of 20:1 or 40:1. Should be programed as desired before sequencing the transmitter reset state machine. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together set the width of the parallel transmit data path (pipe) in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[DIV20] and GSERN()_LANE()_TX_1_BCFG[MOD4] together control the clock ratio of the serializer in the custom transmitter. GSERN()_LANE()_TX_1_BCFG[RX_MOD4] and GSERN()_LANE()_TX_1_BCFG[MOD4] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t reserved_18_23 : 6; uint64_t rx_post4 : 1; /**< [ 24: 24](R/W) Use PCS layer receive data path clock ratio of 32:1 or 40:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer receive clock ratio of 16:1 or 20:1. (The function is similar to [DIV20] but for the receiver instead of the transmitter.) GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together set the width of the parallel receive data path (pipe) in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together control the clock ratio of the serializer in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[DIV20] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t rx_mod4 : 1; /**< [ 25: 25](R/W) Use PCS layer receive data path clock ratio of 16:1 or 32:1 (serdes-data-rate:PCS-layer-clock-frequency) when set to 1. When set to 0, use PCS layer receive clock ratio of 20:1 or 40:1. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together set the width of the parallel receive data path (pipe) in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_POST4] and GSERN()_LANE()_TX_1_BCFG[RX_MOD4] together control the clock ratio of the serializer in the custom receiver. GSERN()_LANE()_TX_1_BCFG[RX_MOD4] and GSERN()_LANE()_TX_1_BCFG[MOD4] and would normally be set to the same value to use the transmitter and receiver at the same PCS clock ratio. */ uint64_t reserved_26_31 : 6; uint64_t nvlink : 1; /**< [ 32: 32](R/W) Transmitter lower impedance termination control (43 ohm instead of 50 ohm). */ uint64_t reserved_33_39 : 7; uint64_t tx_enloop : 1; /**< [ 40: 40](R/W) Set to enable the DDR loopback mux in the custom transmitter to send a copy of transmit data back into the receive path. */ uint64_t reserved_41_47 : 7; uint64_t tx_dacj : 8; /**< [ 55: 48](R/W) ACJTAG block data bits (some redundant). */ uint64_t tx_acjtag : 1; /**< [ 56: 56](R/W) TBD */ uint64_t reserved_57_63 : 7; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_1_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_tx_1_bcfg bdk_gsernx_lanex_tx_1_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TX_1_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_1_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b40ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_1_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) bdk_gsernx_lanex_tx_1_bcfg_t #define bustype_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) "GSERNX_LANEX_TX_1_BCFG" #define device_bar_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_1_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_bsts * * GSER Lane TX Base Status Register * lane transmitter status */ union bdk_gsernx_lanex_tx_bsts { uint64_t u; struct bdk_gsernx_lanex_tx_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_3_63 : 61; uint64_t rxdetn : 1; /**< [ 2: 2](RO/H) Transmitter block detection of receiver termination presence, low-side. Asserted indicates termination presence was detected. Valid only if [RXDETCOMPLETE] is set. */ uint64_t rxdetp : 1; /**< [ 1: 1](RO/H) Transmitter block detection of receiver termination presence, high-side. Asserted indicates termination presence was detected. Valid only if [RXDETCOMPLETE] is set. */ uint64_t rxdetcomplete : 1; /**< [ 0: 0](RO/H) Receiver presence detection engine has completed. */ #else /* Word 0 - Little Endian */ uint64_t rxdetcomplete : 1; /**< [ 0: 0](RO/H) Receiver presence detection engine has completed. */ uint64_t rxdetp : 1; /**< [ 1: 1](RO/H) Transmitter block detection of receiver termination presence, high-side. Asserted indicates termination presence was detected. Valid only if [RXDETCOMPLETE] is set. */ uint64_t rxdetn : 1; /**< [ 2: 2](RO/H) Transmitter block detection of receiver termination presence, low-side. Asserted indicates termination presence was detected. Valid only if [RXDETCOMPLETE] is set. */ uint64_t reserved_3_63 : 61; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_tx_bsts bdk_gsernx_lanex_tx_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_TX_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b60ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_BSTS(a,b) bdk_gsernx_lanex_tx_bsts_t #define bustype_BDK_GSERNX_LANEX_TX_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_BSTS(a,b) "GSERNX_LANEX_TX_BSTS" #define device_bar_BDK_GSERNX_LANEX_TX_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_drv2_bcfg * * GSER Lane TX Drive Override Base Configuration Register 2 * Upper limits on the allowed preemphasis and postemphasis values before translating to the * raw transmitter control settings. */ union bdk_gsernx_lanex_tx_drv2_bcfg { uint64_t u; struct bdk_gsernx_lanex_tx_drv2_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_13_63 : 51; uint64_t cpost_limit : 5; /**< [ 12: 8](R/W) Upper limit for the postemphasis value. The valid range is 0x0 to 0x10. */ uint64_t reserved_5_7 : 3; uint64_t cpre_limit : 5; /**< [ 4: 0](R/W) Upper limit for the preemphasis value. The valid range is 0x0 to 0x10. */ #else /* Word 0 - Little Endian */ uint64_t cpre_limit : 5; /**< [ 4: 0](R/W) Upper limit for the preemphasis value. The valid range is 0x0 to 0x10. */ uint64_t reserved_5_7 : 3; uint64_t cpost_limit : 5; /**< [ 12: 8](R/W) Upper limit for the postemphasis value. The valid range is 0x0 to 0x10. */ uint64_t reserved_13_63 : 51; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_drv2_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_tx_drv2_bcfg bdk_gsernx_lanex_tx_drv2_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TX_DRV2_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_DRV2_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b20ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_DRV2_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) bdk_gsernx_lanex_tx_drv2_bcfg_t #define bustype_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) "GSERNX_LANEX_TX_DRV2_BCFG" #define device_bar_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_DRV2_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_drv_bcfg * * GSER Lane TX Drive Override Base Configuration Register * Lane transmitter drive override values and enables configuration * Register. Default values are chosen to provide the "idle" configuration * when the lane reset state machine completes. The transmitter "idle" * configuration drives the output to mid-rail with 2 pull-up and 2 * pull-down legs active. * * These value fields in this register are in effect when the * corresponding enable fields ([EN_TX_DRV], [EN_TX_CSPD], and * GSERN()_LANE()_TX_DRV_BCFG[EN_TX_BS]) are set. */ union bdk_gsernx_lanex_tx_drv_bcfg { uint64_t u; struct bdk_gsernx_lanex_tx_drv_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t tx_cspd : 1; /**< [ 63: 63](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ uint64_t reserved_62 : 1; uint64_t tx_bs : 6; /**< [ 61: 56](R/W) TX bias/swing selection. This setting only takes effect if [EN_TX_BS] is asserted and [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t reserved_51_55 : 5; uint64_t en_tx_cspd : 1; /**< [ 50: 50](R/W) Enables use of [TX_CSPD] an overrides to set the current source power down control of the transmitter. */ uint64_t en_tx_bs : 1; /**< [ 49: 49](R/W) Enables use of [TX_BS] as an override to set the bias/swing control of the transmitter. */ uint64_t en_tx_drv : 1; /**< [ 48: 48](R/W) Enables use of the transmit drive strength fields in this register as overrides to explicitly set the base transmitter controls. (All fields except [TX_BS] and [TX_CSPD], which have separate override enables.) For diagnostic use only. */ uint64_t reserved_42_47 : 6; uint64_t muxpost : 2; /**< [ 41: 40](R/W) Postcursor mux controls. */ uint64_t cpostb : 3; /**< [ 39: 37](R/W) Post cursor block 1 coefficient. */ uint64_t cposta : 3; /**< [ 36: 34](R/W) Post cursor block 0 coefficient. */ uint64_t enpost : 2; /**< [ 33: 32](R/W) Postcursor block enables. */ uint64_t reserved_27_31 : 5; uint64_t muxmain : 4; /**< [ 26: 23](R/W) Main mux controls (some redundant). */ uint64_t cmaind : 3; /**< [ 22: 20](R/W) Main block 3 coefficient. */ uint64_t enmain : 4; /**< [ 19: 16](R/W) Main block enables. */ uint64_t reserved_10_15 : 6; uint64_t muxpre : 2; /**< [ 9: 8](R/W) Precursor mux controls. */ uint64_t cpreb : 3; /**< [ 7: 5](R/W) Precursor Block 1 coefficient. */ uint64_t cprea : 3; /**< [ 4: 2](R/W) Precursor Block 0 coefficient. */ uint64_t enpre : 2; /**< [ 1: 0](R/W) Precursor block enables. */ #else /* Word 0 - Little Endian */ uint64_t enpre : 2; /**< [ 1: 0](R/W) Precursor block enables. */ uint64_t cprea : 3; /**< [ 4: 2](R/W) Precursor Block 0 coefficient. */ uint64_t cpreb : 3; /**< [ 7: 5](R/W) Precursor Block 1 coefficient. */ uint64_t muxpre : 2; /**< [ 9: 8](R/W) Precursor mux controls. */ uint64_t reserved_10_15 : 6; uint64_t enmain : 4; /**< [ 19: 16](R/W) Main block enables. */ uint64_t cmaind : 3; /**< [ 22: 20](R/W) Main block 3 coefficient. */ uint64_t muxmain : 4; /**< [ 26: 23](R/W) Main mux controls (some redundant). */ uint64_t reserved_27_31 : 5; uint64_t enpost : 2; /**< [ 33: 32](R/W) Postcursor block enables. */ uint64_t cposta : 3; /**< [ 36: 34](R/W) Post cursor block 0 coefficient. */ uint64_t cpostb : 3; /**< [ 39: 37](R/W) Post cursor block 1 coefficient. */ uint64_t muxpost : 2; /**< [ 41: 40](R/W) Postcursor mux controls. */ uint64_t reserved_42_47 : 6; uint64_t en_tx_drv : 1; /**< [ 48: 48](R/W) Enables use of the transmit drive strength fields in this register as overrides to explicitly set the base transmitter controls. (All fields except [TX_BS] and [TX_CSPD], which have separate override enables.) For diagnostic use only. */ uint64_t en_tx_bs : 1; /**< [ 49: 49](R/W) Enables use of [TX_BS] as an override to set the bias/swing control of the transmitter. */ uint64_t en_tx_cspd : 1; /**< [ 50: 50](R/W) Enables use of [TX_CSPD] an overrides to set the current source power down control of the transmitter. */ uint64_t reserved_51_55 : 5; uint64_t tx_bs : 6; /**< [ 61: 56](R/W) TX bias/swing selection. This setting only takes effect if [EN_TX_BS] is asserted and [TX_CSPD] is deasserted; with [TX_CSPD] asserted the bias/swing control setting seen in the analog bias generator is zero. Typical override values would be: 42 = Nominal 1.0V p-p transmit amplitude. 52 = Nominal 1.2V p-p transmit amplitude. The maximum usable value without transmitted waveform distortion depends primarily on voltage, secondarily on process corner and temperature, but is at least 52. There is no minimum setting based on transmitter distortion, only that set by the receiver. */ uint64_t reserved_62 : 1; uint64_t tx_cspd : 1; /**< [ 63: 63](R/W) Power-down control for a second TX bias/swing leg with the same weight as TX_BS[3]. Normally this field is left deasserted to provide a minimum transmit amplitude. Asserting [TX_CSPD] will turn off all legs of the bias/swing generator for lower standby power. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_drv_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_tx_drv_bcfg bdk_gsernx_lanex_tx_drv_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TX_DRV_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_DRV_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b10ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_DRV_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) bdk_gsernx_lanex_tx_drv_bcfg_t #define bustype_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) "GSERNX_LANEX_TX_DRV_BCFG" #define device_bar_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_DRV_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_drv_bsts * * GSER Lane TX Drive Base Status Register * Lane transmitter drive setup status, i.e., settings which the * transmitter is actually using. During a transmitter receiver presence * detection sequence the fields of this register not reliable, i.e., * following a write of GSERN()_LANE()_TX_RXD_BCFG[TRIGGER] to one this register is not * reliable until after GSERN()_LANE()_TX_BSTS[RXDETCOMPLETE] reads as one. */ union bdk_gsernx_lanex_tx_drv_bsts { uint64_t u; struct bdk_gsernx_lanex_tx_drv_bsts_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t tx_cspd : 1; /**< [ 63: 63](RO/H) TX current source power down (cspd) setting in use, a second bias/swing leg with the same weight as TX_BS[3], but with opposite polarity for the control signal. */ uint64_t reserved_62 : 1; uint64_t tx_bs : 6; /**< [ 61: 56](RO/H) TX bias/swing selection in use. */ uint64_t reserved_52_55 : 4; uint64_t tx_invalid : 1; /**< [ 51: 51](RO/H) Invalid status generated by the gser_lane_pnr_txdrv_remap module indicating an invalid combination of (cpre, cpost, cmain, bit-stuff) was requested. */ uint64_t reserved_42_50 : 9; uint64_t muxpost : 2; /**< [ 41: 40](RO/H) Postcursor mux controls in use. */ uint64_t cpostb : 3; /**< [ 39: 37](RO/H) Post cursor block 1 coefficient in use. */ uint64_t cposta : 3; /**< [ 36: 34](RO/H) Post cursor block 0 coefficient in use. */ uint64_t enpost : 2; /**< [ 33: 32](RO/H) Postcursor block enables in use. */ uint64_t reserved_27_31 : 5; uint64_t muxmain : 4; /**< [ 26: 23](RO/H) Main mux controls (some redundant) in use. */ uint64_t cmaind : 3; /**< [ 22: 20](RO/H) Main block 3 coefficient in use. */ uint64_t enmain : 4; /**< [ 19: 16](RO/H) Main block enables in use. */ uint64_t reserved_10_15 : 6; uint64_t muxpre : 2; /**< [ 9: 8](RO/H) Precursor mux controls in use. */ uint64_t cpreb : 3; /**< [ 7: 5](RO/H) Precursor Block 1 coefficient in use. */ uint64_t cprea : 3; /**< [ 4: 2](RO/H) Precursor Block 0 coefficient in use. */ uint64_t enpre : 2; /**< [ 1: 0](RO/H) Precursor block enables in use. */ #else /* Word 0 - Little Endian */ uint64_t enpre : 2; /**< [ 1: 0](RO/H) Precursor block enables in use. */ uint64_t cprea : 3; /**< [ 4: 2](RO/H) Precursor Block 0 coefficient in use. */ uint64_t cpreb : 3; /**< [ 7: 5](RO/H) Precursor Block 1 coefficient in use. */ uint64_t muxpre : 2; /**< [ 9: 8](RO/H) Precursor mux controls in use. */ uint64_t reserved_10_15 : 6; uint64_t enmain : 4; /**< [ 19: 16](RO/H) Main block enables in use. */ uint64_t cmaind : 3; /**< [ 22: 20](RO/H) Main block 3 coefficient in use. */ uint64_t muxmain : 4; /**< [ 26: 23](RO/H) Main mux controls (some redundant) in use. */ uint64_t reserved_27_31 : 5; uint64_t enpost : 2; /**< [ 33: 32](RO/H) Postcursor block enables in use. */ uint64_t cposta : 3; /**< [ 36: 34](RO/H) Post cursor block 0 coefficient in use. */ uint64_t cpostb : 3; /**< [ 39: 37](RO/H) Post cursor block 1 coefficient in use. */ uint64_t muxpost : 2; /**< [ 41: 40](RO/H) Postcursor mux controls in use. */ uint64_t reserved_42_50 : 9; uint64_t tx_invalid : 1; /**< [ 51: 51](RO/H) Invalid status generated by the gser_lane_pnr_txdrv_remap module indicating an invalid combination of (cpre, cpost, cmain, bit-stuff) was requested. */ uint64_t reserved_52_55 : 4; uint64_t tx_bs : 6; /**< [ 61: 56](RO/H) TX bias/swing selection in use. */ uint64_t reserved_62 : 1; uint64_t tx_cspd : 1; /**< [ 63: 63](RO/H) TX current source power down (cspd) setting in use, a second bias/swing leg with the same weight as TX_BS[3], but with opposite polarity for the control signal. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_drv_bsts_s cn; */ }; typedef union bdk_gsernx_lanex_tx_drv_bsts bdk_gsernx_lanex_tx_drv_bsts_t; static inline uint64_t BDK_GSERNX_LANEX_TX_DRV_BSTS(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_DRV_BSTS(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b30ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_DRV_BSTS", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) bdk_gsernx_lanex_tx_drv_bsts_t #define bustype_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) "GSERNX_LANEX_TX_DRV_BSTS" #define device_bar_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_DRV_BSTS(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_tx_rxd_bcfg * * GSER Lane TX Receive Presence Detector Base Configuration Register * The lane transmitter receiver presence detector controls are in this * register. When the transmitter's receiver presence detection sequencer * is triggered (by asserting [TRIGGER]), the transmitter needs to * be in a weak idle state, i.e., all fields of GSERN()_LANE()_TX_DRV_BSTS * should reflect the reset default values of the same fields in * GSERN()_LANE()_TX_DRV_BCFG. */ union bdk_gsernx_lanex_tx_rxd_bcfg { uint64_t u; struct bdk_gsernx_lanex_tx_rxd_bcfg_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t reserved_34_63 : 30; uint64_t ovrride_det_en : 1; /**< [ 33: 33](R/W) Enable use of the [OVRRIDE_DET] value for the result of PCIe transmitter receiver presense detection instead of the normal measured result. Internal: When asserted, this control will also suppress the normal pull-down and release of the transmit signals that takes place during receiver presence detaction. */ uint64_t ovrride_det : 1; /**< [ 32: 32](R/W) When enabled by [OVRRIDE_DET_EN], the PCIe transmitter receiver presence detector will use this value instead of that measured by the functional circuit. This provides a mechanism to force recognition of a known number of lanes in the link independent of the normal receiver presence detection procedure. */ uint64_t reserved_30_31 : 2; uint64_t release_wait : 6; /**< [ 29: 24](R/W) Wait time after asserting rxd_samp and rxd_samn to capture the result before releasing tx_rxd, rxd_samp, and rxd_samn, expressed as a count of txdivclk cycles minus one, e.g., set to 0 to get 1 cycles. Typically set for 8 ns, or a count of 1 cycle when using for PCIe gen1 (125 MHz txdivclk). */ uint64_t reserved_22_23 : 2; uint64_t sample_wait : 6; /**< [ 21: 16](R/W) Wait time after asserting tx_rxd before asserting rxd_samp and rxd_samn to sample the result, expressed as a count of lane PLL reference clock cycles minus 1, e.g., set to 1 to get 2 cycles. Typically set for 16 ns, or a count of 2 cycles for PCIe gen1 (125 MHz txdivclk). */ uint64_t reserved_12_15 : 4; uint64_t tx_disable : 1; /**< [ 11: 11](R/W) Disable all transmitter eqdrv blocks during the receiver-present detection sequence. When asserted, this temporarily overrides the enmain, empre, and enpost settings in GSERN()_LANE()_TX_DRV_BCFG, tri-stating the transmitter during the sequence instead of leaving it in weak idle. */ uint64_t samn_en : 1; /**< [ 10: 10](R/W) Enable sampling of the transmitter's receiver termination presence detector on the padn output. */ uint64_t samp_en : 1; /**< [ 9: 9](R/W) Enable sampling of the transmitter's receiver termination presence detector on the padp output. */ uint64_t rxd_en : 1; /**< [ 8: 8](R/W) Enable assertion of the RXD pulldown on the (common) termination point for differential pair prior to sampling the pad voltages. Set to one for the normal detection sequence to work correctly. Setting to zero is a verification hook to allow sampling the pad values without first pulling the pads low. */ uint64_t reserved_1_7 : 7; uint64_t trigger : 1; /**< [ 0: 0](R/W/H) Enable the sequencer which exercises the transmitter's receiver termination presence detection. An asserting edge will start the sequencer. This field self-clears when the sequence has completed. */ #else /* Word 0 - Little Endian */ uint64_t trigger : 1; /**< [ 0: 0](R/W/H) Enable the sequencer which exercises the transmitter's receiver termination presence detection. An asserting edge will start the sequencer. This field self-clears when the sequence has completed. */ uint64_t reserved_1_7 : 7; uint64_t rxd_en : 1; /**< [ 8: 8](R/W) Enable assertion of the RXD pulldown on the (common) termination point for differential pair prior to sampling the pad voltages. Set to one for the normal detection sequence to work correctly. Setting to zero is a verification hook to allow sampling the pad values without first pulling the pads low. */ uint64_t samp_en : 1; /**< [ 9: 9](R/W) Enable sampling of the transmitter's receiver termination presence detector on the padp output. */ uint64_t samn_en : 1; /**< [ 10: 10](R/W) Enable sampling of the transmitter's receiver termination presence detector on the padn output. */ uint64_t tx_disable : 1; /**< [ 11: 11](R/W) Disable all transmitter eqdrv blocks during the receiver-present detection sequence. When asserted, this temporarily overrides the enmain, empre, and enpost settings in GSERN()_LANE()_TX_DRV_BCFG, tri-stating the transmitter during the sequence instead of leaving it in weak idle. */ uint64_t reserved_12_15 : 4; uint64_t sample_wait : 6; /**< [ 21: 16](R/W) Wait time after asserting tx_rxd before asserting rxd_samp and rxd_samn to sample the result, expressed as a count of lane PLL reference clock cycles minus 1, e.g., set to 1 to get 2 cycles. Typically set for 16 ns, or a count of 2 cycles for PCIe gen1 (125 MHz txdivclk). */ uint64_t reserved_22_23 : 2; uint64_t release_wait : 6; /**< [ 29: 24](R/W) Wait time after asserting rxd_samp and rxd_samn to capture the result before releasing tx_rxd, rxd_samp, and rxd_samn, expressed as a count of txdivclk cycles minus one, e.g., set to 0 to get 1 cycles. Typically set for 8 ns, or a count of 1 cycle when using for PCIe gen1 (125 MHz txdivclk). */ uint64_t reserved_30_31 : 2; uint64_t ovrride_det : 1; /**< [ 32: 32](R/W) When enabled by [OVRRIDE_DET_EN], the PCIe transmitter receiver presence detector will use this value instead of that measured by the functional circuit. This provides a mechanism to force recognition of a known number of lanes in the link independent of the normal receiver presence detection procedure. */ uint64_t ovrride_det_en : 1; /**< [ 33: 33](R/W) Enable use of the [OVRRIDE_DET] value for the result of PCIe transmitter receiver presense detection instead of the normal measured result. Internal: When asserted, this control will also suppress the normal pull-down and release of the transmit signals that takes place during receiver presence detaction. */ uint64_t reserved_34_63 : 30; #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_tx_rxd_bcfg_s cn; */ }; typedef union bdk_gsernx_lanex_tx_rxd_bcfg bdk_gsernx_lanex_tx_rxd_bcfg_t; static inline uint64_t BDK_GSERNX_LANEX_TX_RXD_BCFG(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TX_RXD_BCFG(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e090000b50ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TX_RXD_BCFG", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) bdk_gsernx_lanex_tx_rxd_bcfg_t #define bustype_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) "GSERNX_LANEX_TX_RXD_BCFG" #define device_bar_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TX_RXD_BCFG(a,b) (a),(b),-1,-1 /** * Register (RSL) gsern#_lane#_txdivclk_ctr * * GSER Lane TX Div Clock Cycle Counter Register * A free-running counter of lane txdivclk cycles to enable rough confirmation of * SerDes transmit data rate. Read the counter; wait some time, e.g., 100ms; read the * counter; calculate frequency based on the difference in values during the known wait * time and the programmed data path width. */ union bdk_gsernx_lanex_txdivclk_ctr { uint64_t u; struct bdk_gsernx_lanex_txdivclk_ctr_s { #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */ uint64_t count : 64; /**< [ 63: 0](R/W/H) Running count of txdivclk cycles. */ #else /* Word 0 - Little Endian */ uint64_t count : 64; /**< [ 63: 0](R/W/H) Running count of txdivclk cycles. */ #endif /* Word 0 - End */ } s; /* struct bdk_gsernx_lanex_txdivclk_ctr_s cn; */ }; typedef union bdk_gsernx_lanex_txdivclk_ctr bdk_gsernx_lanex_txdivclk_ctr_t; static inline uint64_t BDK_GSERNX_LANEX_TXDIVCLK_CTR(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline)); static inline uint64_t BDK_GSERNX_LANEX_TXDIVCLK_CTR(unsigned long a, unsigned long b) { if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=7) && (b<=4))) return 0x87e0900030b0ll + 0x1000000ll * ((a) & 0x7) + 0x10000ll * ((b) & 0x7); __bdk_csr_fatal("GSERNX_LANEX_TXDIVCLK_CTR", 2, a, b, 0, 0); } #define typedef_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) bdk_gsernx_lanex_txdivclk_ctr_t #define bustype_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) BDK_CSR_TYPE_RSL #define basename_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) "GSERNX_LANEX_TXDIVCLK_CTR" #define device_bar_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) 0x0 /* PF_BAR0 */ #define busnum_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) (a) #define arguments_BDK_GSERNX_LANEX_TXDIVCLK_CTR(a,b) (a),(b),-1,-1 #endif /* __BDK_CSRS_GSERN_H__ */