aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h')
-rw-r--r--src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h29162
1 files changed, 29162 insertions, 0 deletions
diff --git a/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h b/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h
new file mode 100644
index 0000000000..07ef88b4fe
--- /dev/null
+++ b/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-pcierc.h
@@ -0,0 +1,29162 @@
+#ifndef __BDK_CSRS_PCIERC_H__
+#define __BDK_CSRS_PCIERC_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 PCIERC.
+ *
+ * This file is auto generated. Do not edit.
+ *
+ */
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ack_freq
+ *
+ * PCIe RC Ack Frequency Register
+ */
+union bdk_pciercx_ack_freq
+{
+ uint32_t u;
+ struct bdk_pciercx_ack_freq_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t easpml1 : 1; /**< [ 30: 30](R/W/H) Enter ASPM L1 without receive in L0s. Allow core to enter ASPM L1 even when link partner
+ did not go to L0s (receive is not in L0s). When not set, core goes to ASPM L1 only after
+ idle period, during which both receive and transmit are in L0s. */
+ uint32_t l1el : 3; /**< [ 29: 27](R/W) L1 entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 4 ms.
+ 0x3 = 8 ms.
+ 0x4 = 16 ms.
+ 0x5 = 32 ms.
+ 0x6 or 0x7 = 64 ms. */
+ uint32_t l0el : 3; /**< [ 26: 24](R/W) L0s entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 3 ms.
+ 0x3 = 4 ms.
+ 0x4 = 5 ms.
+ 0x5 = 6 ms.
+ 0x6 or 0x7 = 7 ms. */
+ uint32_t n_fts_cc : 8; /**< [ 23: 16](RO) The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t n_fts : 8; /**< [ 15: 8](R/W) The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t ack_freq : 8; /**< [ 7: 0](R/W) ACK frequency. The number of pending ACKs specified here (up to 255) before sending an ACK. */
+#else /* Word 0 - Little Endian */
+ uint32_t ack_freq : 8; /**< [ 7: 0](R/W) ACK frequency. The number of pending ACKs specified here (up to 255) before sending an ACK. */
+ uint32_t n_fts : 8; /**< [ 15: 8](R/W) The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t n_fts_cc : 8; /**< [ 23: 16](RO) The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t l0el : 3; /**< [ 26: 24](R/W) L0s entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 3 ms.
+ 0x3 = 4 ms.
+ 0x4 = 5 ms.
+ 0x5 = 6 ms.
+ 0x6 or 0x7 = 7 ms. */
+ uint32_t l1el : 3; /**< [ 29: 27](R/W) L1 entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 4 ms.
+ 0x3 = 8 ms.
+ 0x4 = 16 ms.
+ 0x5 = 32 ms.
+ 0x6 or 0x7 = 64 ms. */
+ uint32_t easpml1 : 1; /**< [ 30: 30](R/W/H) Enter ASPM L1 without receive in L0s. Allow core to enter ASPM L1 even when link partner
+ did not go to L0s (receive is not in L0s). When not set, core goes to ASPM L1 only after
+ idle period, during which both receive and transmit are in L0s. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ack_freq_s cn; */
+};
+typedef union bdk_pciercx_ack_freq bdk_pciercx_ack_freq_t;
+
+static inline uint64_t BDK_PCIERCX_ACK_FREQ(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ACK_FREQ(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x70cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ACK_FREQ", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ACK_FREQ(a) bdk_pciercx_ack_freq_t
+#define bustype_BDK_PCIERCX_ACK_FREQ(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ACK_FREQ(a) "PCIERCX_ACK_FREQ"
+#define busnum_BDK_PCIERCX_ACK_FREQ(a) (a)
+#define arguments_BDK_PCIERCX_ACK_FREQ(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ack_timer
+ *
+ * PCIe RC Ack Latency Timer/Replay Timer Register
+ */
+union bdk_pciercx_ack_timer
+{
+ uint32_t u;
+ struct bdk_pciercx_ack_timer_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t rtl : 16; /**< [ 31: 16](R/W/H) Replay time limit. The replay timer expires when it reaches this limit. The PCI Express
+ bus initiates a replay upon reception of a NAK or when the replay timer expires. This
+ value is set correctly by the hardware out of reset or when the negotiated link width or
+ payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+ uint32_t rtltl : 16; /**< [ 15: 0](R/W/H) Round trip latency time limit. The ACK/NAK latency timer expires when it reaches this
+ limit. This value is set correctly by the hardware out of reset or when the negotiated
+ link width or payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+#else /* Word 0 - Little Endian */
+ uint32_t rtltl : 16; /**< [ 15: 0](R/W/H) Round trip latency time limit. The ACK/NAK latency timer expires when it reaches this
+ limit. This value is set correctly by the hardware out of reset or when the negotiated
+ link width or payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+ uint32_t rtl : 16; /**< [ 31: 16](R/W/H) Replay time limit. The replay timer expires when it reaches this limit. The PCI Express
+ bus initiates a replay upon reception of a NAK or when the replay timer expires. This
+ value is set correctly by the hardware out of reset or when the negotiated link width or
+ payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ack_timer_s cn; */
+};
+typedef union bdk_pciercx_ack_timer bdk_pciercx_ack_timer_t;
+
+static inline uint64_t BDK_PCIERCX_ACK_TIMER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ACK_TIMER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x700ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ACK_TIMER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ACK_TIMER(a) bdk_pciercx_ack_timer_t
+#define bustype_BDK_PCIERCX_ACK_TIMER(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ACK_TIMER(a) "PCIERCX_ACK_TIMER"
+#define busnum_BDK_PCIERCX_ACK_TIMER(a) (a)
+#define arguments_BDK_PCIERCX_ACK_TIMER(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_acs_cap_ctl
+ *
+ * PCIe RC ACS Capability and Control Register
+ */
+union bdk_pciercx_acs_cap_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_acs_cap_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_acs_cap_ctl_s cn; */
+};
+typedef union bdk_pciercx_acs_cap_ctl bdk_pciercx_acs_cap_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_ACS_CAP_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ACS_CAP_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x2f0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ACS_CAP_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ACS_CAP_CTL(a) bdk_pciercx_acs_cap_ctl_t
+#define bustype_BDK_PCIERCX_ACS_CAP_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ACS_CAP_CTL(a) "PCIERCX_ACS_CAP_CTL"
+#define busnum_BDK_PCIERCX_ACS_CAP_CTL(a) (a)
+#define arguments_BDK_PCIERCX_ACS_CAP_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_acs_cap_hdr
+ *
+ * PCIe RC PCI Express ACS Extended Capability Header Register
+ */
+union bdk_pciercx_acs_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_acs_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_acs_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_acs_cap_hdr bdk_pciercx_acs_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_ACS_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ACS_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x2ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ACS_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ACS_CAP_HDR(a) bdk_pciercx_acs_cap_hdr_t
+#define bustype_BDK_PCIERCX_ACS_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ACS_CAP_HDR(a) "PCIERCX_ACS_CAP_HDR"
+#define busnum_BDK_PCIERCX_ACS_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_ACS_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_acs_egr_ctl_vec
+ *
+ * PCIe RC Egress Control Vector Register
+ */
+union bdk_pciercx_acs_egr_ctl_vec
+{
+ uint32_t u;
+ struct bdk_pciercx_acs_egr_ctl_vec_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 29; /**< [ 31: 3](R/W/H) Reserved. */
+ uint32_t ecv : 3; /**< [ 2: 0](R/W/H) Egress control vector. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecv : 3; /**< [ 2: 0](R/W/H) Egress control vector. */
+ uint32_t unused : 29; /**< [ 31: 3](R/W/H) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_acs_egr_ctl_vec_s cn; */
+};
+typedef union bdk_pciercx_acs_egr_ctl_vec bdk_pciercx_acs_egr_ctl_vec_t;
+
+static inline uint64_t BDK_PCIERCX_ACS_EGR_CTL_VEC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ACS_EGR_CTL_VEC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x2f4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ACS_EGR_CTL_VEC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ACS_EGR_CTL_VEC(a) bdk_pciercx_acs_egr_ctl_vec_t
+#define bustype_BDK_PCIERCX_ACS_EGR_CTL_VEC(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ACS_EGR_CTL_VEC(a) "PCIERCX_ACS_EGR_CTL_VEC"
+#define busnum_BDK_PCIERCX_ACS_EGR_CTL_VEC(a) (a)
+#define arguments_BDK_PCIERCX_ACS_EGR_CTL_VEC(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_adv_err_cap_cntrl
+ *
+ * PCIe RC Advanced Capabilities and Control Register
+ */
+union bdk_pciercx_adv_err_cap_cntrl
+{
+ uint32_t u;
+ struct bdk_pciercx_adv_err_cap_cntrl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t tlp_plp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+#else /* Word 0 - Little Endian */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t tlp_plp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_adv_err_cap_cntrl_s cn; */
+};
+typedef union bdk_pciercx_adv_err_cap_cntrl bdk_pciercx_adv_err_cap_cntrl_t;
+
+static inline uint64_t BDK_PCIERCX_ADV_ERR_CAP_CNTRL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ADV_ERR_CAP_CNTRL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x118ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ADV_ERR_CAP_CNTRL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ADV_ERR_CAP_CNTRL(a) bdk_pciercx_adv_err_cap_cntrl_t
+#define bustype_BDK_PCIERCX_ADV_ERR_CAP_CNTRL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ADV_ERR_CAP_CNTRL(a) "PCIERCX_ADV_ERR_CAP_CNTRL"
+#define busnum_BDK_PCIERCX_ADV_ERR_CAP_CNTRL(a) (a)
+#define arguments_BDK_PCIERCX_ADV_ERR_CAP_CNTRL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_aux_clk_freq
+ *
+ * PCIe RC Auxillary Clock Frequency Control Register
+ */
+union bdk_pciercx_aux_clk_freq
+{
+ uint32_t u;
+ struct bdk_pciercx_aux_clk_freq_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t upc_supp : 10; /**< [ 9: 0](R/W) The aux_clk frequency in MHz. This value is used to provide a 1 us reference for
+ counting time during low-power states with aux_clk when the PHY has removed the
+ pipe_clk. */
+#else /* Word 0 - Little Endian */
+ uint32_t upc_supp : 10; /**< [ 9: 0](R/W) The aux_clk frequency in MHz. This value is used to provide a 1 us reference for
+ counting time during low-power states with aux_clk when the PHY has removed the
+ pipe_clk. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_aux_clk_freq_s cn; */
+};
+typedef union bdk_pciercx_aux_clk_freq bdk_pciercx_aux_clk_freq_t;
+
+static inline uint64_t BDK_PCIERCX_AUX_CLK_FREQ(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_AUX_CLK_FREQ(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb40ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_AUX_CLK_FREQ", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_AUX_CLK_FREQ(a) bdk_pciercx_aux_clk_freq_t
+#define bustype_BDK_PCIERCX_AUX_CLK_FREQ(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_AUX_CLK_FREQ(a) "PCIERCX_AUX_CLK_FREQ"
+#define busnum_BDK_PCIERCX_AUX_CLK_FREQ(a) (a)
+#define arguments_BDK_PCIERCX_AUX_CLK_FREQ(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_bar0l
+ *
+ * PCIe RC Base Address 0 Low Register
+ */
+union bdk_pciercx_bar0l
+{
+ uint32_t u;
+ struct bdk_pciercx_bar0l_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_bar0l_s cn; */
+};
+typedef union bdk_pciercx_bar0l bdk_pciercx_bar0l_t;
+
+static inline uint64_t BDK_PCIERCX_BAR0L(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_BAR0L(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x10ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_BAR0L", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_BAR0L(a) bdk_pciercx_bar0l_t
+#define bustype_BDK_PCIERCX_BAR0L(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_BAR0L(a) "PCIERCX_BAR0L"
+#define busnum_BDK_PCIERCX_BAR0L(a) (a)
+#define arguments_BDK_PCIERCX_BAR0L(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_bar0u
+ *
+ * PCIe RC Base Address 0 High Register
+ */
+union bdk_pciercx_bar0u
+{
+ uint32_t u;
+ struct bdk_pciercx_bar0u_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_bar0u_s cn; */
+};
+typedef union bdk_pciercx_bar0u bdk_pciercx_bar0u_t;
+
+static inline uint64_t BDK_PCIERCX_BAR0U(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_BAR0U(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x14ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_BAR0U", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_BAR0U(a) bdk_pciercx_bar0u_t
+#define bustype_BDK_PCIERCX_BAR0U(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_BAR0U(a) "PCIERCX_BAR0U"
+#define busnum_BDK_PCIERCX_BAR0U(a) (a)
+#define arguments_BDK_PCIERCX_BAR0U(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_bnum
+ *
+ * PCIe RC Bus Number Register
+ */
+union bdk_pciercx_bnum
+{
+ uint32_t u;
+ struct bdk_pciercx_bnum_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t slt : 8; /**< [ 31: 24](RO) Secondary latency timer. Not applicable to PCI Express, hardwired to 0x0. */
+ uint32_t subbnum : 8; /**< [ 23: 16](R/W) Subordinate bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t sbnum : 8; /**< [ 15: 8](R/W) Secondary bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t pbnum : 8; /**< [ 7: 0](R/W) Primary bus number. */
+#else /* Word 0 - Little Endian */
+ uint32_t pbnum : 8; /**< [ 7: 0](R/W) Primary bus number. */
+ uint32_t sbnum : 8; /**< [ 15: 8](R/W) Secondary bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t subbnum : 8; /**< [ 23: 16](R/W) Subordinate bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t slt : 8; /**< [ 31: 24](RO) Secondary latency timer. Not applicable to PCI Express, hardwired to 0x0. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_bnum_s cn; */
+};
+typedef union bdk_pciercx_bnum bdk_pciercx_bnum_t;
+
+static inline uint64_t BDK_PCIERCX_BNUM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_BNUM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x18ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_BNUM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_BNUM(a) bdk_pciercx_bnum_t
+#define bustype_BDK_PCIERCX_BNUM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_BNUM(a) "PCIERCX_BNUM"
+#define busnum_BDK_PCIERCX_BNUM(a) (a)
+#define arguments_BDK_PCIERCX_BNUM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_c_rcv_credit
+ *
+ * PCIe RC VC0 Completion Receive Queue Control Register
+ */
+union bdk_pciercx_c_rcv_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_c_rcv_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t data_sc : 2; /**< [ 27: 26](RO/WRSL) VC0 scale completion data credits.
+
+ Reset values:
+ _ UPEM: 0x2.
+ _ BPEM: 0x1. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](RO/WRSL) VC0 scale completion header credits.
+
+ Reset values:
+ _ UPEM: 0x3.
+ _ BPEM: 0x2. */
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 completion TLP queue mode. The operating mode of the completion receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL/H) VC0 completion header credits. The number of initial completion header credits for VC0,
+ used for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x28.
+ _ BPEM: 0x50. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL/H) VC0 completion data credits. The number of initial completion data credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x300.
+ _ BPEM: 0x600. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL/H) VC0 completion data credits. The number of initial completion data credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x300.
+ _ BPEM: 0x600. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL/H) VC0 completion header credits. The number of initial completion header credits for VC0,
+ used for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x28.
+ _ BPEM: 0x50. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 completion TLP queue mode. The operating mode of the completion receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](RO/WRSL) VC0 scale completion header credits.
+
+ Reset values:
+ _ UPEM: 0x3.
+ _ BPEM: 0x2. */
+ uint32_t data_sc : 2; /**< [ 27: 26](RO/WRSL) VC0 scale completion data credits.
+
+ Reset values:
+ _ UPEM: 0x2.
+ _ BPEM: 0x1. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_c_rcv_credit_s cn; */
+};
+typedef union bdk_pciercx_c_rcv_credit bdk_pciercx_c_rcv_credit_t;
+
+static inline uint64_t BDK_PCIERCX_C_RCV_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_C_RCV_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x750ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_C_RCV_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_C_RCV_CREDIT(a) bdk_pciercx_c_rcv_credit_t
+#define bustype_BDK_PCIERCX_C_RCV_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_C_RCV_CREDIT(a) "PCIERCX_C_RCV_CREDIT"
+#define busnum_BDK_PCIERCX_C_RCV_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_C_RCV_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_c_xmit_credit
+ *
+ * PCIe RC Transmit Completion FC Credit Status Register
+ */
+union bdk_pciercx_c_xmit_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_c_xmit_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit completion header FC credits. The completion header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit completion data FC credits. The completion data credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit completion data FC credits. The completion data credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit completion header FC credits. The completion header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_c_xmit_credit_s cn; */
+};
+typedef union bdk_pciercx_c_xmit_credit bdk_pciercx_c_xmit_credit_t;
+
+static inline uint64_t BDK_PCIERCX_C_XMIT_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_C_XMIT_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x738ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_C_XMIT_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_C_XMIT_CREDIT(a) bdk_pciercx_c_xmit_credit_t
+#define bustype_BDK_PCIERCX_C_XMIT_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_C_XMIT_CREDIT(a) "PCIERCX_C_XMIT_CREDIT"
+#define busnum_BDK_PCIERCX_C_XMIT_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_C_XMIT_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cap_ptr
+ *
+ * PCIe RC Capability Pointer Register
+ */
+union bdk_pciercx_cap_ptr
+{
+ uint32_t u;
+ struct bdk_pciercx_cap_ptr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t cp : 8; /**< [ 7: 0](RO/WRSL) First capability pointer. Points to power management capability structure by default,
+ writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t cp : 8; /**< [ 7: 0](RO/WRSL) First capability pointer. Points to power management capability structure by default,
+ writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cap_ptr_s cn; */
+};
+typedef union bdk_pciercx_cap_ptr bdk_pciercx_cap_ptr_t;
+
+static inline uint64_t BDK_PCIERCX_CAP_PTR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CAP_PTR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x34ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CAP_PTR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CAP_PTR(a) bdk_pciercx_cap_ptr_t
+#define bustype_BDK_PCIERCX_CAP_PTR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CAP_PTR(a) "PCIERCX_CAP_PTR"
+#define busnum_BDK_PCIERCX_CAP_PTR(a) (a)
+#define arguments_BDK_PCIERCX_CAP_PTR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg000
+ *
+ * PCIe RC Device ID and Vendor ID Register
+ * This register contains the first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg000
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg000_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID for PCIERC, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ _ \<15:8\> resets to PCC_PROD_E::CNXXXX.
+ _ \<7:0\> resets to PCC_DEV_IDL_E::PCIERC. */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID for PCIERC, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ _ \<15:8\> resets to PCC_PROD_E::CNXXXX.
+ _ \<7:0\> resets to PCC_DEV_IDL_E::PCIERC. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg000_s cn81xx; */
+ struct bdk_pciercx_cfg000_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID, writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg000_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg000 bdk_pciercx_cfg000_t;
+
+static inline uint64_t BDK_PCIERCX_CFG000(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG000(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000000ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000000ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000000ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG000", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG000(a) bdk_pciercx_cfg000_t
+#define bustype_BDK_PCIERCX_CFG000(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG000(a) "PCIERCX_CFG000"
+#define busnum_BDK_PCIERCX_CFG000(a) (a)
+#define arguments_BDK_PCIERCX_CFG000(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg001
+ *
+ * PCIe RC Command/Status Register
+ * This register contains the second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg001
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg001_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to 1. */
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to 1. */
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg001_s cn81xx; */
+ /* struct bdk_pciercx_cfg001_s cn88xx; */
+ struct bdk_pciercx_cfg001_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to 1. */
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable.
+ There are no I/O BARs supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable.
+ There are no I/O BARs supported. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to 0. */
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to 1. */
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg001 bdk_pciercx_cfg001_t;
+
+static inline uint64_t BDK_PCIERCX_CFG001(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG001(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000004ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000004ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000004ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG001", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG001(a) bdk_pciercx_cfg001_t
+#define bustype_BDK_PCIERCX_CFG001(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG001(a) "PCIERCX_CFG001"
+#define busnum_BDK_PCIERCX_CFG001(a) (a)
+#define arguments_BDK_PCIERCX_CFG001(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg002
+ *
+ * PCIe RC Class Code/Revision ID Register
+ * This register contains the third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg002
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg002_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ 0x6 = Bridge. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ 0x4 = PCI-to-PCI */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+ 0x0 = No standard interface. */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information. */
+#else /* Word 0 - Little Endian */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+ 0x0 = No standard interface. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ 0x4 = PCI-to-PCI */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ 0x6 = Bridge. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg002_s cn81xx; */
+ struct bdk_pciercx_cfg002_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information. */
+#else /* Word 0 - Little Endian */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg002_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ 0x6 = Bridge. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ 0x4 = PCI-to-PCI */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+ 0x0 = No standard interface. */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information.
+ 0x0 = Pass 1.0. */
+#else /* Word 0 - Little Endian */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ See MIO_FUS_DAT2[CHIP_ID] for more information.
+ 0x0 = Pass 1.0. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+ 0x0 = No standard interface. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR. However, the application must not change
+ this field.
+ 0x4 = PCI-to-PCI */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR. However, the application must not
+ change this field.
+ 0x6 = Bridge. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg002 bdk_pciercx_cfg002_t;
+
+static inline uint64_t BDK_PCIERCX_CFG002(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG002(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000008ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000008ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000008ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG002", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG002(a) bdk_pciercx_cfg002_t
+#define bustype_BDK_PCIERCX_CFG002(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG002(a) "PCIERCX_CFG002"
+#define busnum_BDK_PCIERCX_CFG002(a) (a)
+#define arguments_BDK_PCIERCX_CFG002(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg003
+ *
+ * PCIe RC BIST, Header Type, Master Latency Timer, Cache Line Size Register
+ * This register contains the fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg003
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg003_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. However, this is a single function device. Therefore,
+ the application must not write a 1 to this bit. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+#else /* Word 0 - Little Endian */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. However, this is a single function device. Therefore,
+ the application must not write a 1 to this bit. */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg003_s cn81xx; */
+ struct bdk_pciercx_cfg003_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO/WRSL) Multi function device. The multi function device bit is writable through PEM()_CFG_WR.
+ However, this is a single function device. Therefore, the application must not write a 1
+ to this bit. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+#else /* Word 0 - Little Endian */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO/WRSL) Multi function device. The multi function device bit is writable through PEM()_CFG_WR.
+ However, this is a single function device. Therefore, the application must not write a 1
+ to this bit. */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg003_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+#else /* Word 0 - Little Endian */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register are hardwired to 0. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg003 bdk_pciercx_cfg003_t;
+
+static inline uint64_t BDK_PCIERCX_CFG003(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG003(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000000cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000000cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000000cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG003", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG003(a) bdk_pciercx_cfg003_t
+#define bustype_BDK_PCIERCX_CFG003(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG003(a) "PCIERCX_CFG003"
+#define busnum_BDK_PCIERCX_CFG003(a) (a)
+#define arguments_BDK_PCIERCX_CFG003(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg004
+ *
+ * PCIe RC Base Address 0 Low Register
+ * This register contains the fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg004
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg004_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/H) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/H) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg004_s cn81xx; */
+ /* struct bdk_pciercx_cfg004_s cn88xx; */
+ struct bdk_pciercx_cfg004_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg004 bdk_pciercx_cfg004_t;
+
+static inline uint64_t BDK_PCIERCX_CFG004(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG004(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000010ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000010ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000010ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG004", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG004(a) bdk_pciercx_cfg004_t
+#define bustype_BDK_PCIERCX_CFG004(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG004(a) "PCIERCX_CFG004"
+#define busnum_BDK_PCIERCX_CFG004(a) (a)
+#define arguments_BDK_PCIERCX_CFG004(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg005
+ *
+ * PCIe RC Base Address 0 High Register
+ * This register contains the sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg005
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg005_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/H) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/H) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg005_s cn81xx; */
+ /* struct bdk_pciercx_cfg005_s cn88xx; */
+ struct bdk_pciercx_cfg005_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg005 bdk_pciercx_cfg005_t;
+
+static inline uint64_t BDK_PCIERCX_CFG005(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG005(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000014ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000014ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000014ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG005", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG005(a) bdk_pciercx_cfg005_t
+#define bustype_BDK_PCIERCX_CFG005(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG005(a) "PCIERCX_CFG005"
+#define busnum_BDK_PCIERCX_CFG005(a) (a)
+#define arguments_BDK_PCIERCX_CFG005(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg006
+ *
+ * PCIe RC Bus Number Register
+ * This register contains the seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg006
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg006_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t slt : 8; /**< [ 31: 24](RO) Secondary latency timer. Not applicable to PCI Express, hardwired to 0x0. */
+ uint32_t subbnum : 8; /**< [ 23: 16](R/W) Subordinate bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t sbnum : 8; /**< [ 15: 8](R/W) Secondary bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t pbnum : 8; /**< [ 7: 0](R/W) Primary bus number. */
+#else /* Word 0 - Little Endian */
+ uint32_t pbnum : 8; /**< [ 7: 0](R/W) Primary bus number. */
+ uint32_t sbnum : 8; /**< [ 15: 8](R/W) Secondary bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t subbnum : 8; /**< [ 23: 16](R/W) Subordinate bus number.
+ If 0x0 no configuration accesses are forwarded to the secondary bus.
+
+ Internal:
+ Note IOB/ECAM snoops on writes to this register. */
+ uint32_t slt : 8; /**< [ 31: 24](RO) Secondary latency timer. Not applicable to PCI Express, hardwired to 0x0. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg006_s cn; */
+};
+typedef union bdk_pciercx_cfg006 bdk_pciercx_cfg006_t;
+
+static inline uint64_t BDK_PCIERCX_CFG006(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG006(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000018ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000018ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000018ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG006", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG006(a) bdk_pciercx_cfg006_t
+#define bustype_BDK_PCIERCX_CFG006(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG006(a) "PCIERCX_CFG006"
+#define busnum_BDK_PCIERCX_CFG006(a) (a)
+#define arguments_BDK_PCIERCX_CFG006(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg007
+ *
+ * PCIe RC I/O Base and I/O Limit/Secondary Status Register
+ * This register contains the eighth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg007
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg007_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error */
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_16_20 : 5;
+ uint32_t lio_limi : 4; /**< [ 15: 12](R/W) I/O space limit. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t io32b : 1; /**< [ 8: 8](RO/H) 32-bit I/O space. */
+ uint32_t lio_base : 4; /**< [ 7: 4](R/W) I/O space base. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t io32a : 1; /**< [ 0: 0](RO/WRSL) 32-bit I/O space.
+ 0 = 16-bit I/O addressing.
+ 1 = 32-bit I/O addressing.
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 8 of this register. */
+#else /* Word 0 - Little Endian */
+ uint32_t io32a : 1; /**< [ 0: 0](RO/WRSL) 32-bit I/O space.
+ 0 = 16-bit I/O addressing.
+ 1 = 32-bit I/O addressing.
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 8 of this register. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t lio_base : 4; /**< [ 7: 4](R/W) I/O space base. */
+ uint32_t io32b : 1; /**< [ 8: 8](RO/H) 32-bit I/O space. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t lio_limi : 4; /**< [ 15: 12](R/W) I/O space limit. */
+ uint32_t reserved_16_20 : 5;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t reserved_22 : 1;
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg007_s cn; */
+};
+typedef union bdk_pciercx_cfg007 bdk_pciercx_cfg007_t;
+
+static inline uint64_t BDK_PCIERCX_CFG007(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG007(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000001cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000001cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000001cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG007", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG007(a) bdk_pciercx_cfg007_t
+#define bustype_BDK_PCIERCX_CFG007(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG007(a) "PCIERCX_CFG007"
+#define busnum_BDK_PCIERCX_CFG007(a) (a)
+#define arguments_BDK_PCIERCX_CFG007(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg008
+ *
+ * PCIe RC Memory Base and Memory Limit Register
+ * This register contains the ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg008
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg008_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ml_addr : 12; /**< [ 31: 20](R/W) Memory limit address. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t mb_addr : 12; /**< [ 15: 4](R/W) Memory base address. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t mb_addr : 12; /**< [ 15: 4](R/W) Memory base address. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t ml_addr : 12; /**< [ 31: 20](R/W) Memory limit address. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg008_s cn; */
+};
+typedef union bdk_pciercx_cfg008 bdk_pciercx_cfg008_t;
+
+static inline uint64_t BDK_PCIERCX_CFG008(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG008(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000020ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000020ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000020ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG008", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG008(a) bdk_pciercx_cfg008_t
+#define bustype_BDK_PCIERCX_CFG008(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG008(a) "PCIERCX_CFG008"
+#define busnum_BDK_PCIERCX_CFG008(a) (a)
+#define arguments_BDK_PCIERCX_CFG008(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg009
+ *
+ * PCIe RC Prefetchable Memory and Limit Register
+ * This register contains the tenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg009
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg009_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t mem64b : 1; /**< [ 16: 16](RO/H) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+#else /* Word 0 - Little Endian */
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t mem64b : 1; /**< [ 16: 16](RO/H) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg009_s cn81xx; */
+ /* struct bdk_pciercx_cfg009_s cn88xx; */
+ struct bdk_pciercx_cfg009_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t mem64b : 1; /**< [ 16: 16](RO) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+#else /* Word 0 - Little Endian */
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t mem64b : 1; /**< [ 16: 16](RO) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg009 bdk_pciercx_cfg009_t;
+
+static inline uint64_t BDK_PCIERCX_CFG009(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG009(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000024ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000024ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000024ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG009", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG009(a) bdk_pciercx_cfg009_t
+#define bustype_BDK_PCIERCX_CFG009(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG009(a) "PCIERCX_CFG009"
+#define busnum_BDK_PCIERCX_CFG009(a) (a)
+#define arguments_BDK_PCIERCX_CFG009(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg010
+ *
+ * PCIe RC Prefetchable Base Upper 32 Bits Register
+ * This register contains the eleventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg010
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg010_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t umem_base : 32; /**< [ 31: 0](R/W) Upper 32 bits of base address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#else /* Word 0 - Little Endian */
+ uint32_t umem_base : 32; /**< [ 31: 0](R/W) Upper 32 bits of base address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg010_s cn; */
+};
+typedef union bdk_pciercx_cfg010 bdk_pciercx_cfg010_t;
+
+static inline uint64_t BDK_PCIERCX_CFG010(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG010(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000028ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000028ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000028ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG010", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG010(a) bdk_pciercx_cfg010_t
+#define bustype_BDK_PCIERCX_CFG010(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG010(a) "PCIERCX_CFG010"
+#define busnum_BDK_PCIERCX_CFG010(a) (a)
+#define arguments_BDK_PCIERCX_CFG010(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg011
+ *
+ * PCIe RC Prefetchable Limit Upper 32 Bits Register
+ * This register contains the twelfth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg011
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg011_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t umem_limit : 32; /**< [ 31: 0](R/W) Upper 32 bits of limit address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#else /* Word 0 - Little Endian */
+ uint32_t umem_limit : 32; /**< [ 31: 0](R/W) Upper 32 bits of limit address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg011_s cn; */
+};
+typedef union bdk_pciercx_cfg011 bdk_pciercx_cfg011_t;
+
+static inline uint64_t BDK_PCIERCX_CFG011(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG011(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000002cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000002cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000002cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG011", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG011(a) bdk_pciercx_cfg011_t
+#define bustype_BDK_PCIERCX_CFG011(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG011(a) "PCIERCX_CFG011"
+#define busnum_BDK_PCIERCX_CFG011(a) (a)
+#define arguments_BDK_PCIERCX_CFG011(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg012
+ *
+ * PCIe RC I/O Base and Limit Upper 16 Bits Register
+ * This register contains the thirteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg012
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg012_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t uio_limit : 16; /**< [ 31: 16](R/W) Upper 16 bits of I/O limit (if 32-bit I/O decoding is supported for devices on the secondary side). */
+ uint32_t uio_base : 16; /**< [ 15: 0](R/W) Upper 16 bits of I/O base (if 32-bit I/O decoding is supported for devices on the secondary side). */
+#else /* Word 0 - Little Endian */
+ uint32_t uio_base : 16; /**< [ 15: 0](R/W) Upper 16 bits of I/O base (if 32-bit I/O decoding is supported for devices on the secondary side). */
+ uint32_t uio_limit : 16; /**< [ 31: 16](R/W) Upper 16 bits of I/O limit (if 32-bit I/O decoding is supported for devices on the secondary side). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg012_s cn; */
+};
+typedef union bdk_pciercx_cfg012 bdk_pciercx_cfg012_t;
+
+static inline uint64_t BDK_PCIERCX_CFG012(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG012(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000030ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000030ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000030ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG012", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG012(a) bdk_pciercx_cfg012_t
+#define bustype_BDK_PCIERCX_CFG012(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG012(a) "PCIERCX_CFG012"
+#define busnum_BDK_PCIERCX_CFG012(a) (a)
+#define arguments_BDK_PCIERCX_CFG012(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg013
+ *
+ * PCIe RC Capability Pointer Register
+ * This register contains the fourteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg013
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg013_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t cp : 8; /**< [ 7: 0](RO/WRSL) First capability pointer. Points to power management capability structure by default,
+ writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t cp : 8; /**< [ 7: 0](RO/WRSL) First capability pointer. Points to power management capability structure by default,
+ writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg013_s cn; */
+};
+typedef union bdk_pciercx_cfg013 bdk_pciercx_cfg013_t;
+
+static inline uint64_t BDK_PCIERCX_CFG013(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG013(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000034ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000034ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000034ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG013", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG013(a) bdk_pciercx_cfg013_t
+#define bustype_BDK_PCIERCX_CFG013(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG013(a) "PCIERCX_CFG013"
+#define busnum_BDK_PCIERCX_CFG013(a) (a)
+#define arguments_BDK_PCIERCX_CFG013(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg014
+ *
+ * PCIe RC Expansion ROM Base Address Register
+ * This register contains the fifteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg014
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg014_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL/H) Writable, but unused. */
+#else /* Word 0 - Little Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL/H) Writable, but unused. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg014_s cn81xx; */
+ /* struct bdk_pciercx_cfg014_s cn88xx; */
+ struct bdk_pciercx_cfg014_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL) Reserved. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg014 bdk_pciercx_cfg014_t;
+
+static inline uint64_t BDK_PCIERCX_CFG014(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG014(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000038ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000038ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000038ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG014", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG014(a) bdk_pciercx_cfg014_t
+#define bustype_BDK_PCIERCX_CFG014(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG014(a) "PCIERCX_CFG014"
+#define busnum_BDK_PCIERCX_CFG014(a) (a)
+#define arguments_BDK_PCIERCX_CFG014(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg015
+ *
+ * PCIe RC Interrupt Line Register/Interrupt Pin/Bridge Control Register
+ * This register contains the sixteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg015
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg015_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t inta : 8; /**< [ 15: 8](RO/WRSL) Interrupt pin. Identifies the legacy interrupt message that the device (or device
+ function) uses. The interrupt pin register is writable through
+ PEM()_CFG_WR. In a single-function configuration, only INTA is used. Therefore, the
+ application must not change this field. */
+ uint32_t il : 8; /**< [ 7: 0](R/W) Interrupt line. */
+#else /* Word 0 - Little Endian */
+ uint32_t il : 8; /**< [ 7: 0](R/W) Interrupt line. */
+ uint32_t inta : 8; /**< [ 15: 8](RO/WRSL) Interrupt pin. Identifies the legacy interrupt message that the device (or device
+ function) uses. The interrupt pin register is writable through
+ PEM()_CFG_WR. In a single-function configuration, only INTA is used. Therefore, the
+ application must not change this field. */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg015_s cn81xx; */
+ /* struct bdk_pciercx_cfg015_s cn88xx; */
+ struct bdk_pciercx_cfg015_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t inta : 8; /**< [ 15: 8](RO) Interrupt pin (not supported). */
+ uint32_t il : 8; /**< [ 7: 0](RO) Interrupt line. */
+#else /* Word 0 - Little Endian */
+ uint32_t il : 8; /**< [ 7: 0](RO) Interrupt line. */
+ uint32_t inta : 8; /**< [ 15: 8](RO) Interrupt pin (not supported). */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to 0. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg015 bdk_pciercx_cfg015_t;
+
+static inline uint64_t BDK_PCIERCX_CFG015(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG015(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000003cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000003cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000003cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG015", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG015(a) bdk_pciercx_cfg015_t
+#define bustype_BDK_PCIERCX_CFG015(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG015(a) "PCIERCX_CFG015"
+#define busnum_BDK_PCIERCX_CFG015(a) (a)
+#define arguments_BDK_PCIERCX_CFG015(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg016
+ *
+ * PCIe RC Power Management Capability ID Register
+ * This register contains the seventeenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg016
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg016_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the EA capabilities by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the EA capabilities by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t reserved_20 : 1;
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg016_s cn81xx; */
+ struct bdk_pciercx_cfg016_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the MSI capabilities by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the MSI capabilities by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t reserved_20 : 1;
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg016_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the EA capabilities by default, writable
+ through PEM()_CFG_WR. */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the EA capabilities by default, writable
+ through PEM()_CFG_WR. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to 0. */
+ uint32_t reserved_20 : 1;
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ The PME_Support field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg016 bdk_pciercx_cfg016_t;
+
+static inline uint64_t BDK_PCIERCX_CFG016(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG016(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000040ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000040ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000040ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG016", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG016(a) bdk_pciercx_cfg016_t
+#define bustype_BDK_PCIERCX_CFG016(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG016(a) "PCIERCX_CFG016"
+#define busnum_BDK_PCIERCX_CFG016(a) (a)
+#define arguments_BDK_PCIERCX_CFG016(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg017
+ *
+ * PCIe RC Power Management Control and Status Register
+ * This register contains the eighteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg017
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg017_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmdia : 8; /**< [ 31: 24](RO) Data register for additional information (not supported). */
+ uint32_t bpccee : 1; /**< [ 23: 23](RO) Bus power/clock control enable, hardwired to 0. */
+ uint32_t bd3h : 1; /**< [ 22: 22](RO) B2/B3 support, hardwired to 0. */
+ uint32_t reserved_16_21 : 6;
+ uint32_t pmess : 1; /**< [ 15: 15](R/W1C/H) PME status. Indicates whether or not a previously enabled PME event occurred. */
+ uint32_t pmedsia : 2; /**< [ 14: 13](RO) Data scale (not supported). */
+ uint32_t pmds : 4; /**< [ 12: 9](RO) Data select (not supported). */
+ uint32_t pmeens : 1; /**< [ 8: 8](R/W) PME enable. A value of 1 indicates that the device is enabled to generate PME. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t nsr : 1; /**< [ 3: 3](RO/WRSL) No soft reset, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_2 : 1;
+ uint32_t ps : 2; /**< [ 1: 0](R/W/H) Power state. Controls the device power state:
+ 0x0 = D0.
+ 0x1 = D1.
+ 0x2 = D2.
+ 0x3 = D3.
+
+ The written value is ignored if the specific state is not supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ps : 2; /**< [ 1: 0](R/W/H) Power state. Controls the device power state:
+ 0x0 = D0.
+ 0x1 = D1.
+ 0x2 = D2.
+ 0x3 = D3.
+
+ The written value is ignored if the specific state is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t nsr : 1; /**< [ 3: 3](RO/WRSL) No soft reset, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t pmeens : 1; /**< [ 8: 8](R/W) PME enable. A value of 1 indicates that the device is enabled to generate PME. */
+ uint32_t pmds : 4; /**< [ 12: 9](RO) Data select (not supported). */
+ uint32_t pmedsia : 2; /**< [ 14: 13](RO) Data scale (not supported). */
+ uint32_t pmess : 1; /**< [ 15: 15](R/W1C/H) PME status. Indicates whether or not a previously enabled PME event occurred. */
+ uint32_t reserved_16_21 : 6;
+ uint32_t bd3h : 1; /**< [ 22: 22](RO) B2/B3 support, hardwired to 0. */
+ uint32_t bpccee : 1; /**< [ 23: 23](RO) Bus power/clock control enable, hardwired to 0. */
+ uint32_t pmdia : 8; /**< [ 31: 24](RO) Data register for additional information (not supported). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg017_s cn; */
+};
+typedef union bdk_pciercx_cfg017 bdk_pciercx_cfg017_t;
+
+static inline uint64_t BDK_PCIERCX_CFG017(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG017(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000044ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000044ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000044ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG017", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG017(a) bdk_pciercx_cfg017_t
+#define bustype_BDK_PCIERCX_CFG017(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG017(a) "PCIERCX_CFG017"
+#define busnum_BDK_PCIERCX_CFG017(a) (a)
+#define arguments_BDK_PCIERCX_CFG017(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg020
+ *
+ * PCIe RC MSI Capability ID/MSI Next Item Pointer/MSI Control Register
+ * This register contains the twenty-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg020
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg020_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t reserved_0_7 : 8;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_7 : 8;
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg020_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ea_rsvd : 10; /**< [ 31: 22](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t num_entries : 6; /**< [ 21: 16](RO/WRSL) Number of entries following the first DW of the capability.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t eacid : 8; /**< [ 7: 0](RO/WRSL) Enhanced allocation capability ID.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t eacid : 8; /**< [ 7: 0](RO/WRSL) Enhanced allocation capability ID.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable through
+ PEM()_CFG_WR. */
+ uint32_t num_entries : 6; /**< [ 21: 16](RO/WRSL) Number of entries following the first DW of the capability.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd : 10; /**< [ 31: 22](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg020_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t pvms : 1; /**< [ 24: 24](RO) Per-vector masking capable. */
+ uint32_t m64 : 1; /**< [ 23: 23](RO/WRSL) 64-bit address capable, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t mme : 3; /**< [ 22: 20](R/W) Multiple message enabled. Indicates that multiple message mode is enabled by system
+ software. The number of messages enabled must be less than or equal to the multiple
+ message capable (MMC) value. */
+ uint32_t mmc : 3; /**< [ 19: 17](RO/WRSL) Multiple message capable, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t msien : 1; /**< [ 16: 16](R/W) MSI enabled. When set, INTx must be disabled. This bit must never be set, as internal-MSI
+ is not supported in RC mode. (Note that this has no effect on external MSI, which is
+ commonly used in RC mode.) */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to PCI Express capabilities by default, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t msicid : 8; /**< [ 7: 0](RO) MSI capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t msicid : 8; /**< [ 7: 0](RO) MSI capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to PCI Express capabilities by default, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t msien : 1; /**< [ 16: 16](R/W) MSI enabled. When set, INTx must be disabled. This bit must never be set, as internal-MSI
+ is not supported in RC mode. (Note that this has no effect on external MSI, which is
+ commonly used in RC mode.) */
+ uint32_t mmc : 3; /**< [ 19: 17](RO/WRSL) Multiple message capable, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t mme : 3; /**< [ 22: 20](R/W) Multiple message enabled. Indicates that multiple message mode is enabled by system
+ software. The number of messages enabled must be less than or equal to the multiple
+ message capable (MMC) value. */
+ uint32_t m64 : 1; /**< [ 23: 23](RO/WRSL) 64-bit address capable, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t pvms : 1; /**< [ 24: 24](RO) Per-vector masking capable. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg020_cn81xx cn83xx; */
+};
+typedef union bdk_pciercx_cfg020 bdk_pciercx_cfg020_t;
+
+static inline uint64_t BDK_PCIERCX_CFG020(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG020(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000050ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000050ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000050ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG020", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG020(a) bdk_pciercx_cfg020_t
+#define bustype_BDK_PCIERCX_CFG020(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG020(a) "PCIERCX_CFG020"
+#define busnum_BDK_PCIERCX_CFG020(a) (a)
+#define arguments_BDK_PCIERCX_CFG020(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg021
+ *
+ * PCIe RC MSI Lower 32 Bits Address Register
+ * This register contains the twenty-second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg021
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg021_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg021_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ea_rsvd : 16; /**< [ 31: 16](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t fixed_subnum : 8; /**< [ 15: 8](RO/WRSL) Fixed subordinate bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t fixed_secnum : 8; /**< [ 7: 0](RO/WRSL) Fixed secondary bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t fixed_secnum : 8; /**< [ 7: 0](RO/WRSL) Fixed secondary bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t fixed_subnum : 8; /**< [ 15: 8](RO/WRSL) Fixed subordinate bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd : 16; /**< [ 31: 16](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg021_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lmsi : 30; /**< [ 31: 2](R/W) Lower 32-bit address. */
+ uint32_t reserved_0_1 : 2;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_1 : 2;
+ uint32_t lmsi : 30; /**< [ 31: 2](R/W) Lower 32-bit address. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg021_cn81xx cn83xx; */
+};
+typedef union bdk_pciercx_cfg021 bdk_pciercx_cfg021_t;
+
+static inline uint64_t BDK_PCIERCX_CFG021(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG021(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000054ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000054ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000054ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG021", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG021(a) bdk_pciercx_cfg021_t
+#define bustype_BDK_PCIERCX_CFG021(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG021(a) "PCIERCX_CFG021"
+#define busnum_BDK_PCIERCX_CFG021(a) (a)
+#define arguments_BDK_PCIERCX_CFG021(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg022
+ *
+ * PCIe RC MSI Upper 32 Bits Address Register
+ * This register contains the twenty-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg022
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg022_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg022_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ena : 1; /**< [ 31: 31](RO/WRSL) Enable for this entry. This field is writable through PEM()_CFG_WR. However, the
+ application must
+ not change this field. */
+ uint32_t wr : 1; /**< [ 30: 30](RO/WRSL) Writable. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t ea_rsvd_1 : 6; /**< [ 29: 24](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t sprop : 8; /**< [ 23: 16](RO/WRSL) Secondary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t pprop : 8; /**< [ 15: 8](RO/WRSL) Primary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t bei : 4; /**< [ 7: 4](RO/WRSL) Bar equivalent indicator.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_0 : 1; /**< [ 3: 3](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t esize : 3; /**< [ 2: 0](RO/WRSL) Entry size - the number of DW following the initial DW in this entry.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t esize : 3; /**< [ 2: 0](RO/WRSL) Entry size - the number of DW following the initial DW in this entry.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_0 : 1; /**< [ 3: 3](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t bei : 4; /**< [ 7: 4](RO/WRSL) Bar equivalent indicator.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t pprop : 8; /**< [ 15: 8](RO/WRSL) Primary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t sprop : 8; /**< [ 23: 16](RO/WRSL) Secondary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_1 : 6; /**< [ 29: 24](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t wr : 1; /**< [ 30: 30](RO/WRSL) Writable. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t ena : 1; /**< [ 31: 31](RO/WRSL) Enable for this entry. This field is writable through PEM()_CFG_WR. However, the
+ application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg022_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t umsi : 32; /**< [ 31: 0](R/W) Upper 32-bit address. */
+#else /* Word 0 - Little Endian */
+ uint32_t umsi : 32; /**< [ 31: 0](R/W) Upper 32-bit address. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg022_cn81xx cn83xx; */
+};
+typedef union bdk_pciercx_cfg022 bdk_pciercx_cfg022_t;
+
+static inline uint64_t BDK_PCIERCX_CFG022(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG022(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000058ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000058ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000058ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG022", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG022(a) bdk_pciercx_cfg022_t
+#define bustype_BDK_PCIERCX_CFG022(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG022(a) "PCIERCX_CFG022"
+#define busnum_BDK_PCIERCX_CFG022(a) (a)
+#define arguments_BDK_PCIERCX_CFG022(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg023
+ *
+ * PCIe RC MSI Data Register
+ * This register contains the twenty-fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg023
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg023_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg023_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lbase : 30; /**< [ 31: 2](RO/WRSL) Lower base. The value is determined by taking the lower 32-bits of PEMRC's BAR4 address
+ (PEMRC()_BAR_E::PEMRC()_PF_BAR4) and right-shifting by two bits. This field is writable
+ through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lbase : 30; /**< [ 31: 2](RO/WRSL) Lower base. The value is determined by taking the lower 32-bits of PEMRC's BAR4 address
+ (PEMRC()_BAR_E::PEMRC()_PF_BAR4) and right-shifting by two bits. This field is writable
+ through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg023_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t msimd : 16; /**< [ 15: 0](R/W) MSI data. Pattern assigned by system software. Bits [4:0] are ORed with MSI_VECTOR to
+ generate 32 MSI messages per function. */
+#else /* Word 0 - Little Endian */
+ uint32_t msimd : 16; /**< [ 15: 0](R/W) MSI data. Pattern assigned by system software. Bits [4:0] are ORed with MSI_VECTOR to
+ generate 32 MSI messages per function. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg023_cn81xx cn83xx; */
+};
+typedef union bdk_pciercx_cfg023 bdk_pciercx_cfg023_t;
+
+static inline uint64_t BDK_PCIERCX_CFG023(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG023(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000005cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000005cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000005cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG023", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG023(a) bdk_pciercx_cfg023_t
+#define bustype_BDK_PCIERCX_CFG023(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG023(a) "PCIERCX_CFG023"
+#define busnum_BDK_PCIERCX_CFG023(a) (a)
+#define arguments_BDK_PCIERCX_CFG023(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg024
+ *
+ * PCIe RC Enhanced Allocation Entry 0 Max Offset Register
+ * This register contains the twenty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg024
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg024_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t moffs : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the offset to cover PEMRC BAR4 0xfffff & 0xffffc \>\>2 */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t moffs : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the offset to cover PEMRC BAR4 0xfffff & 0xffffc \>\>2 */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg024_s cn; */
+};
+typedef union bdk_pciercx_cfg024 bdk_pciercx_cfg024_t;
+
+static inline uint64_t BDK_PCIERCX_CFG024(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG024(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000060ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000060ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG024", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG024(a) bdk_pciercx_cfg024_t
+#define bustype_BDK_PCIERCX_CFG024(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG024(a) "PCIERCX_CFG024"
+#define busnum_BDK_PCIERCX_CFG024(a) (a)
+#define arguments_BDK_PCIERCX_CFG024(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg025
+ *
+ * PCIe RC Enhanced Allocation Entry 0 Upper Base Register
+ * This register contains the twenty-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg025
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg025_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ubase : 32; /**< [ 31: 0](RO/WRSL) Upper base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the upper 32 bits of PEM_BAR_E::PEM()_PF_BAR0 */
+#else /* Word 0 - Little Endian */
+ uint32_t ubase : 32; /**< [ 31: 0](RO/WRSL) Upper base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the upper 32 bits of PEM_BAR_E::PEM()_PF_BAR0 */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg025_s cn; */
+};
+typedef union bdk_pciercx_cfg025 bdk_pciercx_cfg025_t;
+
+static inline uint64_t BDK_PCIERCX_CFG025(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG025(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000064ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000064ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG025", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG025(a) bdk_pciercx_cfg025_t
+#define bustype_BDK_PCIERCX_CFG025(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG025(a) "PCIERCX_CFG025"
+#define busnum_BDK_PCIERCX_CFG025(a) (a)
+#define arguments_BDK_PCIERCX_CFG025(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg028
+ *
+ * PCIe RC PCIe Capabilities/PCIe Capabilities List Register
+ * This register contains the twenty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg028
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg028_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_30_31 : 2;
+ uint32_t imn : 5; /**< [ 29: 25](RO/WRSL) Interrupt message number. Updated by hardware, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t si : 1; /**< [ 24: 24](RO/WRSL) Slot implemented. This bit is writable through PEM()_CFG_WR. */
+ uint32_t dpt : 4; /**< [ 23: 20](RO) Device port type. */
+ uint32_t pciecv : 4; /**< [ 19: 16](RO) PCI Express capability version. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the MSI-X capability by default, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieid : 8; /**< [ 7: 0](RO) PCI Express capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieid : 8; /**< [ 7: 0](RO) PCI Express capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the MSI-X capability by default, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pciecv : 4; /**< [ 19: 16](RO) PCI Express capability version. */
+ uint32_t dpt : 4; /**< [ 23: 20](RO) Device port type. */
+ uint32_t si : 1; /**< [ 24: 24](RO/WRSL) Slot implemented. This bit is writable through PEM()_CFG_WR. */
+ uint32_t imn : 5; /**< [ 29: 25](RO/WRSL) Interrupt message number. Updated by hardware, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_30_31 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg028_s cn; */
+};
+typedef union bdk_pciercx_cfg028 bdk_pciercx_cfg028_t;
+
+static inline uint64_t BDK_PCIERCX_CFG028(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG028(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000070ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000070ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000070ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG028", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG028(a) bdk_pciercx_cfg028_t
+#define bustype_BDK_PCIERCX_CFG028(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG028(a) "PCIERCX_CFG028"
+#define busnum_BDK_PCIERCX_CFG028(a) (a)
+#define arguments_BDK_PCIERCX_CFG028(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg029
+ *
+ * PCIe RC Device Capabilities Register
+ * This register contains the thirtieth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg029
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg029_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg029_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_14 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_12 : 1;
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t reserved_12 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_14 : 1;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg029_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg029_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_14 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_12 : 1;
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t reserved_12 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_14 : 1;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg029 bdk_pciercx_cfg029_t;
+
+static inline uint64_t BDK_PCIERCX_CFG029(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG029(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000074ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000074ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000074ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG029", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG029(a) bdk_pciercx_cfg029_t
+#define bustype_BDK_PCIERCX_CFG029(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG029(a) "PCIERCX_CFG029"
+#define busnum_BDK_PCIERCX_CFG029(a) (a)
+#define arguments_BDK_PCIERCX_CFG029(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg030
+ *
+ * PCIe RC Device Control/Device Status Register
+ * This register contains the thirty-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg030
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg030_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hard-wired to 0. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to 1 if AUX power detected. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. UR_D occurs when we receive
+ something unsupported. Unsupported requests are nonfatal errors, so UR_D should cause
+ NFE_D. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to fatal. Malformed TLPs
+ generally fit into this category. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to Nonfatal and does NOT
+ meet Advisory Nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC()_CFG068, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC()_CFG066 that has a severity
+ set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t reserved_15 : 1;
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes. */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t ap_en : 1; /**< [ 10: 10](R/W/H) AUX power PM enable. */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values: 0x0 = 128 B, 0x1 = 256 B.
+ Larger sizes are not supported.
+ The payload size is the actual number of double-words transferred as indicated
+ in the TLP length field and does not take byte enables into account. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values: 0x0 = 128 B, 0x1 = 256 B.
+ Larger sizes are not supported.
+ The payload size is the actual number of double-words transferred as indicated
+ in the TLP length field and does not take byte enables into account. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t ap_en : 1; /**< [ 10: 10](R/W/H) AUX power PM enable. */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes. */
+ uint32_t reserved_15 : 1;
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC()_CFG068, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC()_CFG066 that has a severity
+ set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to Nonfatal and does NOT
+ meet Advisory Nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to fatal. Malformed TLPs
+ generally fit into this category. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. UR_D occurs when we receive
+ something unsupported. Unsupported requests are nonfatal errors, so UR_D should cause
+ NFE_D. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to 1 if AUX power detected. */
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hard-wired to 0. */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg030_s cn81xx; */
+ /* struct bdk_pciercx_cfg030_s cn88xx; */
+ struct bdk_pciercx_cfg030_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hard-wired to 0. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to 1 if AUX power detected. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. UR_D occurs when we receive
+ something unsupported. Unsupported requests are nonfatal errors, so UR_D should cause
+ NFE_D. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to fatal. Malformed TLPs
+ generally fit into this category. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to Nonfatal and does NOT
+ meet Advisory Nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC()_CFG068, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC()_CFG066 that has a severity
+ set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t reserved_15 : 1;
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes.
+
+ DPI_SLI_PRT()_CFG[MRRS] must be set and properly must not exceed the desired
+ max read request size. */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t ap_en : 1; /**< [ 10: 10](RO) AUX power PM enable (Not supported). */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values:
+ 0x0 = 128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ Larger sizes are not supported by CNXXXX.
+
+ DPI_SLI_PRT()_CFG[MPS] must be set to the same value as this field for proper
+ functionality. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values:
+ 0x0 = 128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ Larger sizes are not supported by CNXXXX.
+
+ DPI_SLI_PRT()_CFG[MPS] must be set to the same value as this field for proper
+ functionality. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t ap_en : 1; /**< [ 10: 10](RO) AUX power PM enable (Not supported). */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes.
+
+ DPI_SLI_PRT()_CFG[MRRS] must be set and properly must not exceed the desired
+ max read request size. */
+ uint32_t reserved_15 : 1;
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC()_CFG068, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC()_CFG066 that has a severity
+ set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to Nonfatal and does NOT
+ meet Advisory Nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC()_CFG066 that has a severity set to fatal. Malformed TLPs
+ generally fit into this category. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. UR_D occurs when we receive
+ something unsupported. Unsupported requests are nonfatal errors, so UR_D should cause
+ NFE_D. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to 1 if AUX power detected. */
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hard-wired to 0. */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg030 bdk_pciercx_cfg030_t;
+
+static inline uint64_t BDK_PCIERCX_CFG030(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG030(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000078ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000078ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000078ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG030", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG030(a) bdk_pciercx_cfg030_t
+#define bustype_BDK_PCIERCX_CFG030(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG030(a) "PCIERCX_CFG030"
+#define busnum_BDK_PCIERCX_CFG030(a) (a)
+#define arguments_BDK_PCIERCX_CFG030(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg031
+ *
+ * PCIe RC Link Capabilities Register
+ * This register contains the thirty-second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg031
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg031_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO) Surprise down error reporting capable. Not supported; hardwired to 0. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. The default value is the value that software specifies during
+ hardware configuration, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. The default value is the value that software specifies
+ during hardware configuration, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width.
+ The reset value of this field is determined by the value read from
+ PEM()_CFG[LANES8]. If LANES8 is set the reset value is 0x4, otherwise 0x8.
+
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed. The reset value of this field is controlled by the value read from
+ PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode).
+
+ This field is writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed. The reset value of this field is controlled by the value read from
+ PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode).
+
+ This field is writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width.
+ The reset value of this field is determined by the value read from
+ PEM()_CFG[LANES8]. If LANES8 is set the reset value is 0x4, otherwise 0x8.
+
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. The default value is the value that software specifies
+ during hardware configuration, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. The default value is the value that software specifies during
+ hardware configuration, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO) Surprise down error reporting capable. Not supported; hardwired to 0. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t reserved_23 : 1;
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg031_s cn81xx; */
+ /* struct bdk_pciercx_cfg031_s cn88xx; */
+ struct bdk_pciercx_cfg031_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO/WRSL) Surprise down error reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. The default value is the value that software specifies during
+ hardware configuration, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. The default value is the value that software specifies
+ during hardware configuration, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width.
+ The reset value of this field is determined by the value read from
+ PEM()_CFG[LANES8]. If LANES8 is set the reset value is 0x8, otherwise 0x4.
+
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed. The reset value of this field is controlled by the value read from
+ PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode).
+
+ This field is writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed. The reset value of this field is controlled by the value read from
+ PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode).
+
+ This field is writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width.
+ The reset value of this field is determined by the value read from
+ PEM()_CFG[LANES8]. If LANES8 is set the reset value is 0x8, otherwise 0x4.
+
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. The default value is the value that software specifies
+ during hardware configuration, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. The default value is the value that software specifies during
+ hardware configuration, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO/WRSL) Surprise down error reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to 1 for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t reserved_23 : 1;
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg031 bdk_pciercx_cfg031_t;
+
+static inline uint64_t BDK_PCIERCX_CFG031(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG031(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000007cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000007cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000007cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG031", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG031(a) bdk_pciercx_cfg031_t
+#define bustype_BDK_PCIERCX_CFG031(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG031(a) "PCIERCX_CFG031"
+#define busnum_BDK_PCIERCX_CFG031(a) (a)
+#define arguments_BDK_PCIERCX_CFG031(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg032
+ *
+ * PCIe RC Link Control/Link Status Register
+ * This register contains the thirty-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg032
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg032_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t reserved_26 : 1;
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t hawd : 1; /**< [ 9: 9](RO) Hardware autonomous width disable (not supported). */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+#else /* Word 0 - Little Endian */
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+ uint32_t reserved_2 : 1;
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t hawd : 1; /**< [ 9: 9](RO) Hardware autonomous width disable (not supported). */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t reserved_26 : 1;
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg032_s cn81xx; */
+ struct bdk_pciercx_cfg032_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t reserved_26 : 1;
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t hawd : 1; /**< [ 9: 9](RO) Hardware autonomous width disable (not supported). */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t rl : 1; /**< [ 5: 5](WO) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+#else /* Word 0 - Little Endian */
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+ uint32_t reserved_2 : 1;
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rl : 1; /**< [ 5: 5](WO) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t hawd : 1; /**< [ 9: 9](RO) Hardware autonomous width disable (not supported). */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t reserved_26 : 1;
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg032_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t reserved_26 : 1;
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t hawd : 1; /**< [ 9: 9](R/W) Hardware autonomous width disable (not supported). */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+#else /* Word 0 - Little Endian */
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+ uint32_t reserved_2 : 1;
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through
+ PEM()_CFG_WR. However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t hawd : 1; /**< [ 9: 9](R/W) Hardware autonomous width disable (not supported). */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2. */
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t reserved_26 : 1;
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value you
+ select during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_DOWN status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg032 bdk_pciercx_cfg032_t;
+
+static inline uint64_t BDK_PCIERCX_CFG032(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG032(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000080ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000080ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000080ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG032", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG032(a) bdk_pciercx_cfg032_t
+#define bustype_BDK_PCIERCX_CFG032(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG032(a) "PCIERCX_CFG032"
+#define busnum_BDK_PCIERCX_CFG032(a) (a)
+#define arguments_BDK_PCIERCX_CFG032(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg033
+ *
+ * PCIe RC Slot Capabilities Register
+ * This register contains the thirty-fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg033
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg033_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ps_num : 13; /**< [ 31: 19](RO/WRSL) Physical slot number, writable through PEM()_CFG_WR. */
+ uint32_t nccs : 1; /**< [ 18: 18](RO/WRSL) No command complete support, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t emip : 1; /**< [ 17: 17](RO/WRSL) Electromechanical interlock present, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t sp_ls : 2; /**< [ 16: 15](RO/WRSL) Slot power limit scale, writable through PEM()_CFG_WR. */
+ uint32_t sp_lv : 8; /**< [ 14: 7](RO/WRSL) Slot power limit value, writable through PEM()_CFG_WR. */
+ uint32_t hp_c : 1; /**< [ 6: 6](RO/WRSL) Hot plug capable, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t hp_s : 1; /**< [ 5: 5](RO/WRSL) Hot plug surprise, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t pip : 1; /**< [ 4: 4](RO/WRSL) Power indicator present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t aip : 1; /**< [ 3: 3](RO/WRSL) Attention indicator present, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t mrlsp : 1; /**< [ 2: 2](RO/WRSL) MRL sensor present, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t pcp : 1; /**< [ 1: 1](RO/WRSL) Power controller present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t abp : 1; /**< [ 0: 0](RO/WRSL) Attention button present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t abp : 1; /**< [ 0: 0](RO/WRSL) Attention button present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t pcp : 1; /**< [ 1: 1](RO/WRSL) Power controller present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t mrlsp : 1; /**< [ 2: 2](RO/WRSL) MRL sensor present, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t aip : 1; /**< [ 3: 3](RO/WRSL) Attention indicator present, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pip : 1; /**< [ 4: 4](RO/WRSL) Power indicator present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t hp_s : 1; /**< [ 5: 5](RO/WRSL) Hot plug surprise, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t hp_c : 1; /**< [ 6: 6](RO/WRSL) Hot plug capable, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t sp_lv : 8; /**< [ 14: 7](RO/WRSL) Slot power limit value, writable through PEM()_CFG_WR. */
+ uint32_t sp_ls : 2; /**< [ 16: 15](RO/WRSL) Slot power limit scale, writable through PEM()_CFG_WR. */
+ uint32_t emip : 1; /**< [ 17: 17](RO/WRSL) Electromechanical interlock present, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t nccs : 1; /**< [ 18: 18](RO/WRSL) No command complete support, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t ps_num : 13; /**< [ 31: 19](RO/WRSL) Physical slot number, writable through PEM()_CFG_WR. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg033_s cn; */
+};
+typedef union bdk_pciercx_cfg033 bdk_pciercx_cfg033_t;
+
+static inline uint64_t BDK_PCIERCX_CFG033(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG033(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000084ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000084ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000084ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG033", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG033(a) bdk_pciercx_cfg033_t
+#define bustype_BDK_PCIERCX_CFG033(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG033(a) "PCIERCX_CFG033"
+#define busnum_BDK_PCIERCX_CFG033(a) (a)
+#define arguments_BDK_PCIERCX_CFG033(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg034
+ *
+ * PCIe RC Slot Control/Slot Status Register
+ * This register contains the thirty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg034
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg034_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t pds : 1; /**< [ 22: 22](RO/H) Presence detect state. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t pds : 1; /**< [ 22: 22](RO/H) Presence detect state. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg034_s cn81xx; */
+ struct bdk_pciercx_cfg034_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t pds : 1; /**< [ 22: 22](RO) Presence detect state. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t pds : 1; /**< [ 22: 22](RO) Presence detect state. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg034_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg034 bdk_pciercx_cfg034_t;
+
+static inline uint64_t BDK_PCIERCX_CFG034(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG034(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000088ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000088ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000088ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG034", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG034(a) bdk_pciercx_cfg034_t
+#define bustype_BDK_PCIERCX_CFG034(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG034(a) "PCIERCX_CFG034"
+#define busnum_BDK_PCIERCX_CFG034(a) (a)
+#define arguments_BDK_PCIERCX_CFG034(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg035
+ *
+ * PCIe RC Root Control/Root Capabilities Register
+ * This register contains the thirty-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg035
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg035_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_17_31 : 15;
+ uint32_t crssv : 1; /**< [ 16: 16](RO) CRS software visibility. Not supported, hardwired to 0. */
+ uint32_t reserved_5_15 : 11;
+ uint32_t crssve : 1; /**< [ 4: 4](RO) CRS software visibility enable. Not supported, hardwired to 0. */
+ uint32_t pmeie : 1; /**< [ 3: 3](R/W) PME interrupt enable. */
+ uint32_t sefee : 1; /**< [ 2: 2](R/W) System error on fatal error enable. */
+ uint32_t senfee : 1; /**< [ 1: 1](R/W) System error on nonfatal error enable. */
+ uint32_t secee : 1; /**< [ 0: 0](R/W) System error on correctable error enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t secee : 1; /**< [ 0: 0](R/W) System error on correctable error enable. */
+ uint32_t senfee : 1; /**< [ 1: 1](R/W) System error on nonfatal error enable. */
+ uint32_t sefee : 1; /**< [ 2: 2](R/W) System error on fatal error enable. */
+ uint32_t pmeie : 1; /**< [ 3: 3](R/W) PME interrupt enable. */
+ uint32_t crssve : 1; /**< [ 4: 4](RO) CRS software visibility enable. Not supported, hardwired to 0. */
+ uint32_t reserved_5_15 : 11;
+ uint32_t crssv : 1; /**< [ 16: 16](RO) CRS software visibility. Not supported, hardwired to 0. */
+ uint32_t reserved_17_31 : 15;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg035_s cn; */
+};
+typedef union bdk_pciercx_cfg035 bdk_pciercx_cfg035_t;
+
+static inline uint64_t BDK_PCIERCX_CFG035(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG035(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000008cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000008cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000008cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG035", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG035(a) bdk_pciercx_cfg035_t
+#define bustype_BDK_PCIERCX_CFG035(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG035(a) "PCIERCX_CFG035"
+#define busnum_BDK_PCIERCX_CFG035(a) (a)
+#define arguments_BDK_PCIERCX_CFG035(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg036
+ *
+ * PCIe RC Root Status Register
+ * This register contains the thirty-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg036
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg036_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_18_31 : 14;
+ uint32_t pme_pend : 1; /**< [ 17: 17](RO) PME pending. */
+ uint32_t pme_stat : 1; /**< [ 16: 16](R/W1C/H) PME status. */
+ uint32_t pme_rid : 16; /**< [ 15: 0](RO) PME requester ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pme_rid : 16; /**< [ 15: 0](RO) PME requester ID. */
+ uint32_t pme_stat : 1; /**< [ 16: 16](R/W1C/H) PME status. */
+ uint32_t pme_pend : 1; /**< [ 17: 17](RO) PME pending. */
+ uint32_t reserved_18_31 : 14;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg036_s cn; */
+};
+typedef union bdk_pciercx_cfg036 bdk_pciercx_cfg036_t;
+
+static inline uint64_t BDK_PCIERCX_CFG036(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG036(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000090ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000090ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000090ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG036", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG036(a) bdk_pciercx_cfg036_t
+#define bustype_BDK_PCIERCX_CFG036(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG036(a) "PCIERCX_CFG036"
+#define busnum_BDK_PCIERCX_CFG036(a) (a)
+#define arguments_BDK_PCIERCX_CFG036(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg037
+ *
+ * PCIe RC Device Capabilities 2 Register
+ * This register contains the thirty-eighth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg037
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg037_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO) 10-bit tag requestor supported (not supported). */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported (not supported). */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported (not supported). */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO) 10-bit tag requestor supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg037_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported (not supported). */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_pciercx_cfg037_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO) Extended fmt field supported (not supported). */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg037_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO) 10-bit tag requestor supported (not supported). */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported (not supported). */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported (not supported). */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO) 10-bit tag requestor supported (not supported). */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported (not supported). */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } cn83xx;
+ struct bdk_pciercx_cfg037_cn88xxp2
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported (not supported). */
+ uint32_t reserved_14_17 : 4;
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported (not supported). */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO) End-end TLP prefix supported (not supported). */
+ uint32_t meetp : 2; /**< [ 23: 22](RO) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } cn88xxp2;
+};
+typedef union bdk_pciercx_cfg037 bdk_pciercx_cfg037_t;
+
+static inline uint64_t BDK_PCIERCX_CFG037(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG037(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000094ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000094ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000094ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG037", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG037(a) bdk_pciercx_cfg037_t
+#define bustype_BDK_PCIERCX_CFG037(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG037(a) "PCIERCX_CFG037"
+#define busnum_BDK_PCIERCX_CFG037(a) (a)
+#define arguments_BDK_PCIERCX_CFG037(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg038
+ *
+ * PCIe RC Device Control 2 Register/Device Status 2 Register
+ * This register contains the thirty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg038
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg038_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t reserved_12 : 1;
+ uint32_t tag10b_req_en : 1; /**< [ 11: 11](RO) 10-bit tag requestoer enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W) Completion timeout value.
+ 0x0 = Default range: 50 us to 50 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x5 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W) Completion timeout value.
+ 0x0 = Default range: 50 us to 50 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x5 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t tag10b_req_en : 1; /**< [ 11: 11](RO) 10-bit tag requestoer enable (not supported). */
+ uint32_t reserved_12 : 1;
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg038_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t reserved_11_12 : 2;
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W) Completion timeout value.
+ 0x0 = Default range: 50 us to 50 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x5 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W) Completion timeout value.
+ 0x0 = Default range: 50 us to 50 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x5 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t reserved_11_12 : 2;
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg038_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t reserved_11_12 : 2;
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ctv : 4; /**< [ 3: 0](RO/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctv : 4; /**< [ 3: 0](RO/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](RO) AtomicOp egress blocking (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t reserved_11_12 : 2;
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg038_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t reserved_12 : 1;
+ uint32_t tag10b_req_en : 1; /**< [ 11: 11](RO) 10-bit tag requestoer enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](R/W) AtomicOp egress blocking. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](R/W) AtomicOp egress blocking. */
+ uint32_t id0_rq : 1; /**< [ 8: 8](RO) ID based ordering request enable (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](RO) ID based ordering completion enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t tag10b_req_en : 1; /**< [ 11: 11](RO) 10-bit tag requestoer enable (not supported). */
+ uint32_t reserved_12 : 1;
+ uint32_t obffe : 2; /**< [ 14: 13](RO) Optimized buffer flush fill (OBFF) enable (not supported). */
+ uint32_t eetpb : 1; /**< [ 15: 15](RO) Unsupported end-end TLP prefix blocking. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg038 bdk_pciercx_cfg038_t;
+
+static inline uint64_t BDK_PCIERCX_CFG038(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG038(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000098ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000098ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000098ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG038", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG038(a) bdk_pciercx_cfg038_t
+#define bustype_BDK_PCIERCX_CFG038(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG038(a) "PCIERCX_CFG038"
+#define busnum_BDK_PCIERCX_CFG038(a) (a)
+#define arguments_BDK_PCIERCX_CFG038(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg039
+ *
+ * PCIe RC Link Capabilities 2 Register
+ * This register contains the fortieth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg039
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg039_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_9_31 : 23;
+ uint32_t cls : 1; /**< [ 8: 8](RO) Crosslink supported. */
+ uint32_t slsv : 7; /**< [ 7: 1](RO/WRSL) Supported link speeds vector. Indicates the supported link speeds of the associated port.
+ For each bit, a value of 1 b indicates that the corresponding link speed is supported;
+ otherwise, the link speed is not supported. Bit definitions are:
+
+ _ Bit \<1\> = 2.5 GT/s.
+
+ _ Bit \<2\> = 5.0 GT/s.
+
+ _ Bit \<3\> = 8.0 GT/s.
+
+ _ Bits \<7:4\> are reserved.
+
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x3: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x7: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x7: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t slsv : 7; /**< [ 7: 1](RO/WRSL) Supported link speeds vector. Indicates the supported link speeds of the associated port.
+ For each bit, a value of 1 b indicates that the corresponding link speed is supported;
+ otherwise, the link speed is not supported. Bit definitions are:
+
+ _ Bit \<1\> = 2.5 GT/s.
+
+ _ Bit \<2\> = 5.0 GT/s.
+
+ _ Bit \<3\> = 8.0 GT/s.
+
+ _ Bits \<7:4\> are reserved.
+
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x3: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x7: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x7: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t cls : 1; /**< [ 8: 8](RO) Crosslink supported. */
+ uint32_t reserved_9_31 : 23;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg039_s cn; */
+};
+typedef union bdk_pciercx_cfg039 bdk_pciercx_cfg039_t;
+
+static inline uint64_t BDK_PCIERCX_CFG039(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG039(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000009cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000009cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000009cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG039", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG039(a) bdk_pciercx_cfg039_t
+#define bustype_BDK_PCIERCX_CFG039(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG039(a) "PCIERCX_CFG039"
+#define busnum_BDK_PCIERCX_CFG039(a) (a)
+#define arguments_BDK_PCIERCX_CFG039(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg040
+ *
+ * PCIe RC Link Control 2 Register/Link Status 2 Register
+ * This register contains the forty-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg040
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg040_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+#else /* Word 0 - Little Endian */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg040_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+#else /* Word 0 - Little Endian */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg040_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg040_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis on the downstream device. Must be set prior to link training.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect.
+
+ PCIERC()_CFG515[S_D_E] can be used to change the deemphasis on the upstream ports. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+#else /* Word 0 - Little Endian */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+ The reset value of this field is controlled by the value read from PEM()_CFG[MD].
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to 1 in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis on the downstream device. Must be set prior to link training.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect.
+
+ PCIERC()_CFG515[S_D_E] can be used to change the deemphasis on the upstream ports. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter signals:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to 1, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to 1, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being 1. Encodings:
+ 0x1 = -3.5 dB.
+ 0x0 = -6 dB.
+
+ When the Link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis. Encodings:
+ 1 = -3.5 dB.
+ 0 = -6 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization complete */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization phase 1 successful */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization phase 2 successful */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization phase 3 successful */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request */
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg040 bdk_pciercx_cfg040_t;
+
+static inline uint64_t BDK_PCIERCX_CFG040(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG040(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000a0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000a0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000a0ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG040", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG040(a) bdk_pciercx_cfg040_t
+#define bustype_BDK_PCIERCX_CFG040(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG040(a) "PCIERCX_CFG040"
+#define busnum_BDK_PCIERCX_CFG040(a) (a)
+#define arguments_BDK_PCIERCX_CFG040(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg041
+ *
+ * PCIe RC Slot Capabilities 2 Register
+ * This register contains the forty-second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg041
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg041_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg041_s cn; */
+};
+typedef union bdk_pciercx_cfg041 bdk_pciercx_cfg041_t;
+
+static inline uint64_t BDK_PCIERCX_CFG041(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG041(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000a4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000a4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000a4ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG041", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG041(a) bdk_pciercx_cfg041_t
+#define bustype_BDK_PCIERCX_CFG041(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG041(a) "PCIERCX_CFG041"
+#define busnum_BDK_PCIERCX_CFG041(a) (a)
+#define arguments_BDK_PCIERCX_CFG041(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg042
+ *
+ * PCIe RC Slot Control 2 Register/Slot Status 2 Register
+ * This register contains the forty-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg042
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg042_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg042_s cn; */
+};
+typedef union bdk_pciercx_cfg042 bdk_pciercx_cfg042_t;
+
+static inline uint64_t BDK_PCIERCX_CFG042(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG042(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000a8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000a8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000a8ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG042", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG042(a) bdk_pciercx_cfg042_t
+#define bustype_BDK_PCIERCX_CFG042(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG042(a) "PCIERCX_CFG042"
+#define busnum_BDK_PCIERCX_CFG042(a) (a)
+#define arguments_BDK_PCIERCX_CFG042(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg044
+ *
+ * PCIe RC PCI Express MSI-X Capability ID/MSI-X Next Item Pointer/MSI-X Control Register
+ * This register contains the forty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg044
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg044_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. */
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t reserved_27_29 : 3;
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO) MSI-X capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO) MSI-X capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t reserved_27_29 : 3;
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg044_s cn81xx; */
+ struct bdk_pciercx_cfg044_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t reserved_27_29 : 3;
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL/H) MSI-X table size encoded as (table size - 1). */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL/H) MSI-X table size encoded as (table size - 1). */
+ uint32_t reserved_27_29 : 3;
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg044_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t reserved_27_29 : 3;
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) "Next capability pointer. Writable through PEM#_CFG_WR. However, the application must not
+ change this field." */
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t reserved_27_29 : 3;
+ uint32_t funm : 1; /**< [ 30: 30](RO/WRSL) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t msixen : 1; /**< [ 31: 31](RO/WRSL) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg044 bdk_pciercx_cfg044_t;
+
+static inline uint64_t BDK_PCIERCX_CFG044(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG044(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000b0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000b0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000b0ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG044", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG044(a) bdk_pciercx_cfg044_t
+#define bustype_BDK_PCIERCX_CFG044(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG044(a) "PCIERCX_CFG044"
+#define busnum_BDK_PCIERCX_CFG044(a) (a)
+#define arguments_BDK_PCIERCX_CFG044(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg045
+ *
+ * PCIe RC PCI Express MSI-X Table Offset and BIR Register
+ * This register contains the forty-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg045
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg045_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ table into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+#else /* Word 0 - Little Endian */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ table into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg045_s cn81xx; */
+ struct bdk_pciercx_cfg045_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ table into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+#else /* Word 0 - Little Endian */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ table into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg045_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg045 bdk_pciercx_cfg045_t;
+
+static inline uint64_t BDK_PCIERCX_CFG045(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG045(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000b4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000b4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000b4ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG045", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG045(a) bdk_pciercx_cfg045_t
+#define bustype_BDK_PCIERCX_CFG045(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG045(a) "PCIERCX_CFG045"
+#define busnum_BDK_PCIERCX_CFG045(a) (a)
+#define arguments_BDK_PCIERCX_CFG045(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg046
+ *
+ * PCIe RC PCI Express MSI-X PBA Offset and BIR Register
+ * This register contains the forty-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg046
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg046_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+#else /* Word 0 - Little Endian */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg046_s cn81xx; */
+ struct bdk_pciercx_cfg046_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+#else /* Word 0 - Little Endian */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) "MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field." */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg046_cn88xx cn83xx; */
+};
+typedef union bdk_pciercx_cfg046 bdk_pciercx_cfg046_t;
+
+static inline uint64_t BDK_PCIERCX_CFG046(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG046(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000b8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000b8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000000b8ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG046", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG046(a) bdk_pciercx_cfg046_t
+#define bustype_BDK_PCIERCX_CFG046(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG046(a) "PCIERCX_CFG046"
+#define busnum_BDK_PCIERCX_CFG046(a) (a)
+#define arguments_BDK_PCIERCX_CFG046(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg047
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg047
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg047_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg047_s cn; */
+};
+typedef union bdk_pciercx_cfg047 bdk_pciercx_cfg047_t;
+
+static inline uint64_t BDK_PCIERCX_CFG047(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG047(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000bcll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG047", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG047(a) bdk_pciercx_cfg047_t
+#define bustype_BDK_PCIERCX_CFG047(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG047(a) "PCIERCX_CFG047"
+#define busnum_BDK_PCIERCX_CFG047(a) (a)
+#define arguments_BDK_PCIERCX_CFG047(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg048
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg048
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg048_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg048_s cn; */
+};
+typedef union bdk_pciercx_cfg048 bdk_pciercx_cfg048_t;
+
+static inline uint64_t BDK_PCIERCX_CFG048(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG048(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000c0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG048", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG048(a) bdk_pciercx_cfg048_t
+#define bustype_BDK_PCIERCX_CFG048(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG048(a) "PCIERCX_CFG048"
+#define busnum_BDK_PCIERCX_CFG048(a) (a)
+#define arguments_BDK_PCIERCX_CFG048(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg049
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg049
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg049_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg049_s cn; */
+};
+typedef union bdk_pciercx_cfg049 bdk_pciercx_cfg049_t;
+
+static inline uint64_t BDK_PCIERCX_CFG049(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG049(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000c4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000c4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG049", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG049(a) bdk_pciercx_cfg049_t
+#define bustype_BDK_PCIERCX_CFG049(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG049(a) "PCIERCX_CFG049"
+#define busnum_BDK_PCIERCX_CFG049(a) (a)
+#define arguments_BDK_PCIERCX_CFG049(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg050
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg050
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg050_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg050_s cn; */
+};
+typedef union bdk_pciercx_cfg050 bdk_pciercx_cfg050_t;
+
+static inline uint64_t BDK_PCIERCX_CFG050(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG050(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000c8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG050", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG050(a) bdk_pciercx_cfg050_t
+#define bustype_BDK_PCIERCX_CFG050(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG050(a) "PCIERCX_CFG050"
+#define busnum_BDK_PCIERCX_CFG050(a) (a)
+#define arguments_BDK_PCIERCX_CFG050(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg051
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg051
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg051_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg051_s cn; */
+};
+typedef union bdk_pciercx_cfg051 bdk_pciercx_cfg051_t;
+
+static inline uint64_t BDK_PCIERCX_CFG051(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG051(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000ccll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000ccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG051", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG051(a) bdk_pciercx_cfg051_t
+#define bustype_BDK_PCIERCX_CFG051(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG051(a) "PCIERCX_CFG051"
+#define busnum_BDK_PCIERCX_CFG051(a) (a)
+#define arguments_BDK_PCIERCX_CFG051(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg052
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg052
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg052_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg052_s cn; */
+};
+typedef union bdk_pciercx_cfg052 bdk_pciercx_cfg052_t;
+
+static inline uint64_t BDK_PCIERCX_CFG052(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG052(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000d0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000d0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG052", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG052(a) bdk_pciercx_cfg052_t
+#define bustype_BDK_PCIERCX_CFG052(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG052(a) "PCIERCX_CFG052"
+#define busnum_BDK_PCIERCX_CFG052(a) (a)
+#define arguments_BDK_PCIERCX_CFG052(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg053
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg053
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg053_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg053_s cn; */
+};
+typedef union bdk_pciercx_cfg053 bdk_pciercx_cfg053_t;
+
+static inline uint64_t BDK_PCIERCX_CFG053(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG053(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000d4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000d4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG053", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG053(a) bdk_pciercx_cfg053_t
+#define bustype_BDK_PCIERCX_CFG053(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG053(a) "PCIERCX_CFG053"
+#define busnum_BDK_PCIERCX_CFG053(a) (a)
+#define arguments_BDK_PCIERCX_CFG053(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg054
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg054
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg054_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg054_s cn; */
+};
+typedef union bdk_pciercx_cfg054 bdk_pciercx_cfg054_t;
+
+static inline uint64_t BDK_PCIERCX_CFG054(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG054(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000d8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000d8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG054", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG054(a) bdk_pciercx_cfg054_t
+#define bustype_BDK_PCIERCX_CFG054(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG054(a) "PCIERCX_CFG054"
+#define busnum_BDK_PCIERCX_CFG054(a) (a)
+#define arguments_BDK_PCIERCX_CFG054(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg055
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg055
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg055_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg055_s cn; */
+};
+typedef union bdk_pciercx_cfg055 bdk_pciercx_cfg055_t;
+
+static inline uint64_t BDK_PCIERCX_CFG055(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG055(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000dcll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000dcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG055", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG055(a) bdk_pciercx_cfg055_t
+#define bustype_BDK_PCIERCX_CFG055(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG055(a) "PCIERCX_CFG055"
+#define busnum_BDK_PCIERCX_CFG055(a) (a)
+#define arguments_BDK_PCIERCX_CFG055(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg056
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg056
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg056_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg056_s cn; */
+};
+typedef union bdk_pciercx_cfg056 bdk_pciercx_cfg056_t;
+
+static inline uint64_t BDK_PCIERCX_CFG056(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG056(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000e0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000e0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG056", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG056(a) bdk_pciercx_cfg056_t
+#define bustype_BDK_PCIERCX_CFG056(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG056(a) "PCIERCX_CFG056"
+#define busnum_BDK_PCIERCX_CFG056(a) (a)
+#define arguments_BDK_PCIERCX_CFG056(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg057
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg057
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg057_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg057_s cn; */
+};
+typedef union bdk_pciercx_cfg057 bdk_pciercx_cfg057_t;
+
+static inline uint64_t BDK_PCIERCX_CFG057(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG057(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000e4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000e4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG057", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG057(a) bdk_pciercx_cfg057_t
+#define bustype_BDK_PCIERCX_CFG057(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG057(a) "PCIERCX_CFG057"
+#define busnum_BDK_PCIERCX_CFG057(a) (a)
+#define arguments_BDK_PCIERCX_CFG057(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg058
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg058
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg058_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg058_s cn; */
+};
+typedef union bdk_pciercx_cfg058 bdk_pciercx_cfg058_t;
+
+static inline uint64_t BDK_PCIERCX_CFG058(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG058(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000e8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000e8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG058", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG058(a) bdk_pciercx_cfg058_t
+#define bustype_BDK_PCIERCX_CFG058(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG058(a) "PCIERCX_CFG058"
+#define busnum_BDK_PCIERCX_CFG058(a) (a)
+#define arguments_BDK_PCIERCX_CFG058(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg059
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg059
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg059_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg059_s cn; */
+};
+typedef union bdk_pciercx_cfg059 bdk_pciercx_cfg059_t;
+
+static inline uint64_t BDK_PCIERCX_CFG059(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG059(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000ecll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG059", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG059(a) bdk_pciercx_cfg059_t
+#define bustype_BDK_PCIERCX_CFG059(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG059(a) "PCIERCX_CFG059"
+#define busnum_BDK_PCIERCX_CFG059(a) (a)
+#define arguments_BDK_PCIERCX_CFG059(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg060
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg060
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg060_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg060_s cn; */
+};
+typedef union bdk_pciercx_cfg060 bdk_pciercx_cfg060_t;
+
+static inline uint64_t BDK_PCIERCX_CFG060(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG060(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000f0ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000f0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG060", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG060(a) bdk_pciercx_cfg060_t
+#define bustype_BDK_PCIERCX_CFG060(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG060(a) "PCIERCX_CFG060"
+#define busnum_BDK_PCIERCX_CFG060(a) (a)
+#define arguments_BDK_PCIERCX_CFG060(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg061
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg061
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg061_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg061_s cn; */
+};
+typedef union bdk_pciercx_cfg061 bdk_pciercx_cfg061_t;
+
+static inline uint64_t BDK_PCIERCX_CFG061(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG061(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000f4ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000f4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG061", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG061(a) bdk_pciercx_cfg061_t
+#define bustype_BDK_PCIERCX_CFG061(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG061(a) "PCIERCX_CFG061"
+#define busnum_BDK_PCIERCX_CFG061(a) (a)
+#define arguments_BDK_PCIERCX_CFG061(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg062
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg062
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg062_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg062_s cn; */
+};
+typedef union bdk_pciercx_cfg062 bdk_pciercx_cfg062_t;
+
+static inline uint64_t BDK_PCIERCX_CFG062(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG062(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000f8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000f8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG062", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG062(a) bdk_pciercx_cfg062_t
+#define bustype_BDK_PCIERCX_CFG062(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG062(a) "PCIERCX_CFG062"
+#define busnum_BDK_PCIERCX_CFG062(a) (a)
+#define arguments_BDK_PCIERCX_CFG062(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg063
+ *
+ * PCIe RC Unused Capability Registers
+ * This register contains 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg063
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg063_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC() hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg063_s cn; */
+};
+typedef union bdk_pciercx_cfg063 bdk_pciercx_cfg063_t;
+
+static inline uint64_t BDK_PCIERCX_CFG063(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG063(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000000fcll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000000fcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG063", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG063(a) bdk_pciercx_cfg063_t
+#define bustype_BDK_PCIERCX_CFG063(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG063(a) "PCIERCX_CFG063"
+#define busnum_BDK_PCIERCX_CFG063(a) (a)
+#define arguments_BDK_PCIERCX_CFG063(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg064
+ *
+ * PCIe RC PCI Express Extended Capability Header Register
+ * This register contains the sixty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg064
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg064_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the secondary PCI Express capabilities by default.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the secondary PCI Express capabilities by default.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg064_s cn; */
+};
+typedef union bdk_pciercx_cfg064 bdk_pciercx_cfg064_t;
+
+static inline uint64_t BDK_PCIERCX_CFG064(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG064(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000100ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000100ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000100ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG064", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG064(a) bdk_pciercx_cfg064_t
+#define bustype_BDK_PCIERCX_CFG064(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG064(a) "PCIERCX_CFG064"
+#define busnum_BDK_PCIERCX_CFG064(a) (a)
+#define arguments_BDK_PCIERCX_CFG064(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg065
+ *
+ * PCIe RC Uncorrectable Error Status Register
+ * This register contains the sixty-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg065
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg065_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error status (not supported). */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error status (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg065_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error status (not supported). */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error status (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg065_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg065_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise down error status. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise down error status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t reserved_21 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg065 bdk_pciercx_cfg065_t;
+
+static inline uint64_t BDK_PCIERCX_CFG065(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG065(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000104ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000104ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000104ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG065", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG065(a) bdk_pciercx_cfg065_t
+#define bustype_BDK_PCIERCX_CFG065(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG065(a) "PCIERCX_CFG065"
+#define busnum_BDK_PCIERCX_CFG065(a) (a)
+#define arguments_BDK_PCIERCX_CFG065(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg066
+ *
+ * PCIe RC Uncorrectable Error Mask Register
+ * This register contains the sixty-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg066
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg066_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg066_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](RO/H) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](RO/H) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_pciercx_cfg066_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](RO) Surprise down error mask (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg066_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC()_CFG031[SDERC] is set.
+ When PCIERC()_CFG031[SDERC] is clear, will always read as clear. */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC()_CFG031[SDERC] is set.
+ When PCIERC()_CFG031[SDERC] is clear, will always read as clear. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t reserved_21 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbem : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn83xx;
+ /* struct bdk_pciercx_cfg066_cn81xx cn88xxp2; */
+};
+typedef union bdk_pciercx_cfg066 bdk_pciercx_cfg066_t;
+
+static inline uint64_t BDK_PCIERCX_CFG066(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG066(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000108ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000108ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000108ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG066", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG066(a) bdk_pciercx_cfg066_t
+#define bustype_BDK_PCIERCX_CFG066(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG066(a) "PCIERCX_CFG066"
+#define busnum_BDK_PCIERCX_CFG066(a) (a)
+#define arguments_BDK_PCIERCX_CFG066(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg067
+ *
+ * PCIe RC Uncorrectable Error Severity Register
+ * This register contains the sixty-eighth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg067
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg067_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg067_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO/H) Unsupported AtomicOp egress blocked severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO/H) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_pciercx_cfg067_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](RO) Surprise down error severity (not supported). */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg067_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writeable when PCIERC()_CFG031[SDERC] is set.
+ When PCIERC()_CFG031[SDERC] is clear, will always read as set. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writeable when PCIERC()_CFG031[SDERC] is set.
+ When PCIERC()_CFG031[SDERC] is clear, will always read as set. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t unsuperr : 3; /**< [ 23: 21](RO/H) Reserved. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn83xx;
+ /* struct bdk_pciercx_cfg067_cn81xx cn88xxp2; */
+};
+typedef union bdk_pciercx_cfg067 bdk_pciercx_cfg067_t;
+
+static inline uint64_t BDK_PCIERCX_CFG067(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG067(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000010cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000010cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000010cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG067", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG067(a) bdk_pciercx_cfg067_t
+#define bustype_BDK_PCIERCX_CFG067(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG067(a) "PCIERCX_CFG067"
+#define busnum_BDK_PCIERCX_CFG067(a) (a)
+#define arguments_BDK_PCIERCX_CFG067(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg068
+ *
+ * PCIe RC Correctable Error Status Register
+ * This register contains the sixty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg068
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg068_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C) Corrected internal error status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+#else /* Word 0 - Little Endian */
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C) Corrected internal error status. */
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg068_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_15_31 : 17;
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C) Corrected internal error status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+#else /* Word 0 - Little Endian */
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C) Corrected internal error status. */
+ uint32_t reserved_15_31 : 17;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg068_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg068_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C/H) Corrected internal error status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+#else /* Word 0 - Little Endian */
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C/H) Corrected internal error status. */
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg068 bdk_pciercx_cfg068_t;
+
+static inline uint64_t BDK_PCIERCX_CFG068(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG068(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000110ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000110ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000110ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG068", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG068(a) bdk_pciercx_cfg068_t
+#define bustype_BDK_PCIERCX_CFG068(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG068(a) "PCIERCX_CFG068"
+#define busnum_BDK_PCIERCX_CFG068(a) (a)
+#define arguments_BDK_PCIERCX_CFG068(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg069
+ *
+ * PCIe RC Correctable Error Mask Register
+ * This register contains the seventieth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg069
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg069_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t chlom : 1; /**< [ 15: 15](R/W) Corrected header log overflow error mask. */
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+#else /* Word 0 - Little Endian */
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t chlom : 1; /**< [ 15: 15](R/W) Corrected header log overflow error mask. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg069_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_15_31 : 17;
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+#else /* Word 0 - Little Endian */
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t reserved_15_31 : 17;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg069_cn81xx cn88xx; */
+ /* struct bdk_pciercx_cfg069_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg069 bdk_pciercx_cfg069_t;
+
+static inline uint64_t BDK_PCIERCX_CFG069(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG069(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000114ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000114ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000114ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG069", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG069(a) bdk_pciercx_cfg069_t
+#define bustype_BDK_PCIERCX_CFG069(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG069(a) "PCIERCX_CFG069"
+#define busnum_BDK_PCIERCX_CFG069(a) (a)
+#define arguments_BDK_PCIERCX_CFG069(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg070
+ *
+ * PCIe RC Advanced Capabilities and Control Register
+ * This register contains the seventy-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg070
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg070_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_11_31 : 21;
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+#else /* Word 0 - Little Endian */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t reserved_11_31 : 21;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg070_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t tplp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t reserved_9_10 : 2;
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+#else /* Word 0 - Little Endian */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t reserved_9_10 : 2;
+ uint32_t tplp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg070_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg070_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t tlp_plp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+#else /* Word 0 - Little Endian */
+ uint32_t fep : 5; /**< [ 4: 0](RO) First error pointer. */
+ uint32_t gc : 1; /**< [ 5: 5](RO) ECRC generation capability. */
+ uint32_t ge : 1; /**< [ 6: 6](R/W) ECRC generation enable. */
+ uint32_t cc : 1; /**< [ 7: 7](RO) ECRC check capable. */
+ uint32_t ce : 1; /**< [ 8: 8](R/W) ECRC check enable. */
+ uint32_t mult_hdr_cap : 1; /**< [ 9: 9](RO) Multiple header recording capability (not supported). */
+ uint32_t mult_hdr_en : 1; /**< [ 10: 10](RO) Multiple header recording enable (not supported). */
+ uint32_t tlp_plp : 1; /**< [ 11: 11](RO) TLP prefix log present. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg070 bdk_pciercx_cfg070_t;
+
+static inline uint64_t BDK_PCIERCX_CFG070(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG070(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000118ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000118ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000118ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG070", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG070(a) bdk_pciercx_cfg070_t
+#define bustype_BDK_PCIERCX_CFG070(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG070(a) "PCIERCX_CFG070"
+#define busnum_BDK_PCIERCX_CFG070(a) (a)
+#define arguments_BDK_PCIERCX_CFG070(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg071
+ *
+ * PCIe RC Header Log Register 1
+ * This register contains the seventy-second 32-bits of PCIe type 1 configuration space. The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_cfg071
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg071_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO) Header log register (first DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO) Header log register (first DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg071_s cn; */
+};
+typedef union bdk_pciercx_cfg071 bdk_pciercx_cfg071_t;
+
+static inline uint64_t BDK_PCIERCX_CFG071(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG071(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000011cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000011cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000011cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG071", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG071(a) bdk_pciercx_cfg071_t
+#define bustype_BDK_PCIERCX_CFG071(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG071(a) "PCIERCX_CFG071"
+#define busnum_BDK_PCIERCX_CFG071(a) (a)
+#define arguments_BDK_PCIERCX_CFG071(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg072
+ *
+ * PCIe RC Header Log Register 2
+ * This register contains the seventy-third 32-bits of PCIe type 1 configuration space. The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_cfg072
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg072_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO) Header log register (second DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO) Header log register (second DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg072_s cn; */
+};
+typedef union bdk_pciercx_cfg072 bdk_pciercx_cfg072_t;
+
+static inline uint64_t BDK_PCIERCX_CFG072(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG072(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000120ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000120ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000120ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG072", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG072(a) bdk_pciercx_cfg072_t
+#define bustype_BDK_PCIERCX_CFG072(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG072(a) "PCIERCX_CFG072"
+#define busnum_BDK_PCIERCX_CFG072(a) (a)
+#define arguments_BDK_PCIERCX_CFG072(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg073
+ *
+ * PCIe RC Header Log Register 3
+ * This register contains the seventy-fourth 32-bits of PCIe type 1 configuration space. The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_cfg073
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg073_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO) Header log register (third DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO) Header log register (third DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg073_s cn; */
+};
+typedef union bdk_pciercx_cfg073 bdk_pciercx_cfg073_t;
+
+static inline uint64_t BDK_PCIERCX_CFG073(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG073(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000124ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000124ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000124ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG073", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG073(a) bdk_pciercx_cfg073_t
+#define bustype_BDK_PCIERCX_CFG073(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG073(a) "PCIERCX_CFG073"
+#define busnum_BDK_PCIERCX_CFG073(a) (a)
+#define arguments_BDK_PCIERCX_CFG073(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg074
+ *
+ * PCIe RC Header Log Register 4
+ * This register contains the seventy-fifth 32-bits of PCIe type 1 configuration space. The
+ * header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_cfg074
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg074_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO) Header log register (fourth DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO) Header log register (fourth DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg074_s cn; */
+};
+typedef union bdk_pciercx_cfg074 bdk_pciercx_cfg074_t;
+
+static inline uint64_t BDK_PCIERCX_CFG074(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG074(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000128ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000128ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000128ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG074", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG074(a) bdk_pciercx_cfg074_t
+#define bustype_BDK_PCIERCX_CFG074(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG074(a) "PCIERCX_CFG074"
+#define busnum_BDK_PCIERCX_CFG074(a) (a)
+#define arguments_BDK_PCIERCX_CFG074(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg075
+ *
+ * PCIe RC Root Error Command Register
+ * This register contains the seventy-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg075
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg075_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_3_31 : 29;
+ uint32_t fere : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t nfere : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t cere : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t cere : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+ uint32_t nfere : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t fere : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t reserved_3_31 : 29;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg075_s cn; */
+};
+typedef union bdk_pciercx_cfg075 bdk_pciercx_cfg075_t;
+
+static inline uint64_t BDK_PCIERCX_CFG075(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG075(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000012cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000012cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000012cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG075", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG075(a) bdk_pciercx_cfg075_t
+#define bustype_BDK_PCIERCX_CFG075(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG075(a) "PCIERCX_CFG075"
+#define busnum_BDK_PCIERCX_CFG075(a) (a)
+#define arguments_BDK_PCIERCX_CFG075(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg076
+ *
+ * PCIe RC Root Error Status Register
+ * This register contains the seventy-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg076
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg076_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t aeimn : 5; /**< [ 31: 27](RO/WRSL) Advanced error interrupt message number, writable through
+ PEM()_CFG_WR. */
+ uint32_t reserved_7_26 : 20;
+ uint32_t femr : 1; /**< [ 6: 6](R/W1C/H) Fatal error messages received. */
+ uint32_t nfemr : 1; /**< [ 5: 5](R/W1C/H) Nonfatal error messages received. */
+ uint32_t fuf : 1; /**< [ 4: 4](R/W1C/H) First uncorrectable fatal. */
+ uint32_t multi_efnfr : 1; /**< [ 3: 3](R/W1C/H) Multiple ERR_FATAL/NONFATAL received. */
+ uint32_t efnfr : 1; /**< [ 2: 2](R/W1C/H) ERR_FATAL/NONFATAL received. */
+ uint32_t multi_ecr : 1; /**< [ 1: 1](R/W1C/H) Multiple ERR_COR received. */
+ uint32_t ecr : 1; /**< [ 0: 0](R/W1C/H) ERR_COR received. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecr : 1; /**< [ 0: 0](R/W1C/H) ERR_COR received. */
+ uint32_t multi_ecr : 1; /**< [ 1: 1](R/W1C/H) Multiple ERR_COR received. */
+ uint32_t efnfr : 1; /**< [ 2: 2](R/W1C/H) ERR_FATAL/NONFATAL received. */
+ uint32_t multi_efnfr : 1; /**< [ 3: 3](R/W1C/H) Multiple ERR_FATAL/NONFATAL received. */
+ uint32_t fuf : 1; /**< [ 4: 4](R/W1C/H) First uncorrectable fatal. */
+ uint32_t nfemr : 1; /**< [ 5: 5](R/W1C/H) Nonfatal error messages received. */
+ uint32_t femr : 1; /**< [ 6: 6](R/W1C/H) Fatal error messages received. */
+ uint32_t reserved_7_26 : 20;
+ uint32_t aeimn : 5; /**< [ 31: 27](RO/WRSL) Advanced error interrupt message number, writable through
+ PEM()_CFG_WR. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg076_s cn; */
+};
+typedef union bdk_pciercx_cfg076 bdk_pciercx_cfg076_t;
+
+static inline uint64_t BDK_PCIERCX_CFG076(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG076(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000130ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000130ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000130ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG076", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG076(a) bdk_pciercx_cfg076_t
+#define bustype_BDK_PCIERCX_CFG076(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG076(a) "PCIERCX_CFG076"
+#define busnum_BDK_PCIERCX_CFG076(a) (a)
+#define arguments_BDK_PCIERCX_CFG076(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg077
+ *
+ * PCIe RC Error Source Identification Register
+ * This register contains the seventy-eighth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg077
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg077_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO/H) ERR_FATAL/NONFATAL source identification. */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO/H) ERR_COR source identification. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO/H) ERR_COR source identification. */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO/H) ERR_FATAL/NONFATAL source identification. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg077_s cn81xx; */
+ struct bdk_pciercx_cfg077_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO) ERR_FATAL/NONFATAL source identification. */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO) ERR_COR source identification. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO) ERR_COR source identification. */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO) ERR_FATAL/NONFATAL source identification. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg077_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg077 bdk_pciercx_cfg077_t;
+
+static inline uint64_t BDK_PCIERCX_CFG077(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG077(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000134ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000134ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000134ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG077", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG077(a) bdk_pciercx_cfg077_t
+#define bustype_BDK_PCIERCX_CFG077(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG077(a) "PCIERCX_CFG077"
+#define busnum_BDK_PCIERCX_CFG077(a) (a)
+#define arguments_BDK_PCIERCX_CFG077(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg086
+ *
+ * PCIe RC PCI Express Secondary Capability (Gen3) Header Register
+ * This register contains the eighty-ninth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg086
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg086_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg086_s cn81xx; */
+ struct bdk_pciercx_cfg086_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL/H) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL/H) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg086_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the Vendor Specific capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the Vendor Specific capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg086 bdk_pciercx_cfg086_t;
+
+static inline uint64_t BDK_PCIERCX_CFG086(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG086(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000158ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000158ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000158ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG086", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG086(a) bdk_pciercx_cfg086_t
+#define bustype_BDK_PCIERCX_CFG086(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG086(a) "PCIERCX_CFG086"
+#define busnum_BDK_PCIERCX_CFG086(a) (a)
+#define arguments_BDK_PCIERCX_CFG086(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg087
+ *
+ * PCIe RC Link Control 3 Register
+ * This register contains the eighty-eighth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg087
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg087_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_2_31 : 30;
+ uint32_t ler : 1; /**< [ 1: 1](RO/WRSL) Link equalization request interrupt enable. */
+ uint32_t pe : 1; /**< [ 0: 0](RO/WRSL) Perform equalization. */
+#else /* Word 0 - Little Endian */
+ uint32_t pe : 1; /**< [ 0: 0](RO/WRSL) Perform equalization. */
+ uint32_t ler : 1; /**< [ 1: 1](RO/WRSL) Link equalization request interrupt enable. */
+ uint32_t reserved_2_31 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg087_s cn; */
+};
+typedef union bdk_pciercx_cfg087 bdk_pciercx_cfg087_t;
+
+static inline uint64_t BDK_PCIERCX_CFG087(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG087(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000015cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000015cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000015cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG087", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG087(a) bdk_pciercx_cfg087_t
+#define bustype_BDK_PCIERCX_CFG087(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG087(a) "PCIERCX_CFG087"
+#define busnum_BDK_PCIERCX_CFG087(a) (a)
+#define arguments_BDK_PCIERCX_CFG087(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg088
+ *
+ * PCIe RC Link Control 4 Register
+ * This register contains the eighty-ninth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg088
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg088_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t les : 8; /**< [ 7: 0](R/W1C) Lane error status bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t les : 8; /**< [ 7: 0](R/W1C) Lane error status bits. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg088_s cn; */
+};
+typedef union bdk_pciercx_cfg088 bdk_pciercx_cfg088_t;
+
+static inline uint64_t BDK_PCIERCX_CFG088(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG088(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000160ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000160ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000160ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG088", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG088(a) bdk_pciercx_cfg088_t
+#define bustype_BDK_PCIERCX_CFG088(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG088(a) "PCIERCX_CFG088"
+#define busnum_BDK_PCIERCX_CFG088(a) (a)
+#define arguments_BDK_PCIERCX_CFG088(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg089
+ *
+ * PCIe RC Equalization Control Lane 0/1 Register
+ * This register contains the ninetieth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg089
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg089_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15_19 : 5;
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15_19 : 5;
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg089_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l1ddtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l1ddtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg089_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg089_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l1dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l1dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg089 bdk_pciercx_cfg089_t;
+
+static inline uint64_t BDK_PCIERCX_CFG089(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG089(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000164ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000164ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000164ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG089", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG089(a) bdk_pciercx_cfg089_t
+#define bustype_BDK_PCIERCX_CFG089(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG089(a) "PCIERCX_CFG089"
+#define busnum_BDK_PCIERCX_CFG089(a) (a)
+#define arguments_BDK_PCIERCX_CFG089(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg090
+ *
+ * PCIe RC Equalization Control Lane 2/3 Register
+ * This register contains the ninety-first 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg090
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg090_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg090_s cn81xx; */
+ /* struct bdk_pciercx_cfg090_s cn88xx; */
+ struct bdk_pciercx_cfg090_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. How */
+ uint32_t reserved_7 : 1;
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. How */
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg090 bdk_pciercx_cfg090_t;
+
+static inline uint64_t BDK_PCIERCX_CFG090(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG090(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000168ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000168ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000168ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG090", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG090(a) bdk_pciercx_cfg090_t
+#define bustype_BDK_PCIERCX_CFG090(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG090(a) "PCIERCX_CFG090"
+#define busnum_BDK_PCIERCX_CFG090(a) (a)
+#define arguments_BDK_PCIERCX_CFG090(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg091
+ *
+ * PCIe RC Equalization Control Lane 4/5 Register
+ * This register contains the ninety-second 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg091
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg091_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg091_s cn81xx; */
+ /* struct bdk_pciercx_cfg091_s cn88xx; */
+ struct bdk_pciercx_cfg091_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg091 bdk_pciercx_cfg091_t;
+
+static inline uint64_t BDK_PCIERCX_CFG091(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG091(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000016cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000016cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000016cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG091", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG091(a) bdk_pciercx_cfg091_t
+#define bustype_BDK_PCIERCX_CFG091(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG091(a) "PCIERCX_CFG091"
+#define busnum_BDK_PCIERCX_CFG091(a) (a)
+#define arguments_BDK_PCIERCX_CFG091(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg092
+ *
+ * PCIe RC Equalization Control Lane 6/7 Register
+ * This register contains the ninety-third 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg092
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg092_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL/H) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL/H) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_15 : 1;
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL/H) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. However,
+ the application must not change this field. */
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL/H) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg092_s cn81xx; */
+ /* struct bdk_pciercx_cfg092_s cn88xx; */
+ struct bdk_pciercx_cfg092_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg092 bdk_pciercx_cfg092_t;
+
+static inline uint64_t BDK_PCIERCX_CFG092(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG092(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000170ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000170ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000170ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG092", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG092(a) bdk_pciercx_cfg092_t
+#define bustype_BDK_PCIERCX_CFG092(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG092(a) "PCIERCX_CFG092"
+#define busnum_BDK_PCIERCX_CFG092(a) (a)
+#define arguments_BDK_PCIERCX_CFG092(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg110
+ *
+ * PCIe RC Vendor Specific RAS DES Capability Header Register
+ * This register contains the one hundred eleventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg110
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg110_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the Vendor Specific RAS Data Path Protection
+ capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the Vendor Specific RAS Data Path Protection
+ capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg110_s cn; */
+};
+typedef union bdk_pciercx_cfg110 bdk_pciercx_cfg110_t;
+
+static inline uint64_t BDK_PCIERCX_CFG110(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG110(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001b8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG110", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG110(a) bdk_pciercx_cfg110_t
+#define bustype_BDK_PCIERCX_CFG110(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG110(a) "PCIERCX_CFG110"
+#define busnum_BDK_PCIERCX_CFG110(a) (a)
+#define arguments_BDK_PCIERCX_CFG110(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg111
+ *
+ * PCIe RC Vendor RAS DES Header Register
+ * This register contains the one hundred twelfth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg111
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg111_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) PCI Express extended capability. */
+#else /* Word 0 - Little Endian */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) PCI Express extended capability. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg111_s cn; */
+};
+typedef union bdk_pciercx_cfg111 bdk_pciercx_cfg111_t;
+
+static inline uint64_t BDK_PCIERCX_CFG111(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG111(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG111", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG111(a) bdk_pciercx_cfg111_t
+#define bustype_BDK_PCIERCX_CFG111(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG111(a) "PCIERCX_CFG111"
+#define busnum_BDK_PCIERCX_CFG111(a) (a)
+#define arguments_BDK_PCIERCX_CFG111(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg112
+ *
+ * PCIe RC Vendor RAS DES Event Counter Control Register
+ * This register contains the one hundred thirteenth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg112
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg112_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t ev_cntr_data_sel : 12; /**< [ 27: 16](R/W) Event counter data select. This field in conjunction with [EV_CNTR_LANE_SEL]
+ selects PCIERC()_CFG113[EV_CNTR_DATA].
+ _ \<27:24\> = Group number (0..0x7).
+ _ \<23:16\> = Event number (0..0x13). */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ev_cntr_lane_sel : 4; /**< [ 11: 8](R/W) Event counter lane select. This field in conjunction with [EV_CNTR_DATA_SEL]
+ indexes the event counter data returned in the PCIERC()_CFG113[EV_CNTR_DATA].
+
+ 0x0-0x7 = Lane number.
+ 0x8-0xF = Reserved. */
+ uint32_t ev_cntr_stat : 1; /**< [ 7: 7](RO/H) Event counter status. Returns the Enable status of the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL]. */
+ uint32_t reserved_5_6 : 2;
+ uint32_t ev_cntr_en : 3; /**< [ 4: 2](WO) Event counter enable. Enables/disables the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per event off.
+ 0x2 = No change.
+ 0x3 = Per event on.
+ 0x4 = No change.
+ 0x5 = All off.
+ 0x6 = No change.
+ 0x7 = All on. */
+ uint32_t ev_cntr_clr : 2; /**< [ 1: 0](WO) Event counter clear. Clears the event counters
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per clear.
+ 0x2 = No change.
+ 0x3 = All clear. */
+#else /* Word 0 - Little Endian */
+ uint32_t ev_cntr_clr : 2; /**< [ 1: 0](WO) Event counter clear. Clears the event counters
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per clear.
+ 0x2 = No change.
+ 0x3 = All clear. */
+ uint32_t ev_cntr_en : 3; /**< [ 4: 2](WO) Event counter enable. Enables/disables the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per event off.
+ 0x2 = No change.
+ 0x3 = Per event on.
+ 0x4 = No change.
+ 0x5 = All off.
+ 0x6 = No change.
+ 0x7 = All on. */
+ uint32_t reserved_5_6 : 2;
+ uint32_t ev_cntr_stat : 1; /**< [ 7: 7](RO/H) Event counter status. Returns the Enable status of the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL]. */
+ uint32_t ev_cntr_lane_sel : 4; /**< [ 11: 8](R/W) Event counter lane select. This field in conjunction with [EV_CNTR_DATA_SEL]
+ indexes the event counter data returned in the PCIERC()_CFG113[EV_CNTR_DATA].
+
+ 0x0-0x7 = Lane number.
+ 0x8-0xF = Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ev_cntr_data_sel : 12; /**< [ 27: 16](R/W) Event counter data select. This field in conjunction with [EV_CNTR_LANE_SEL]
+ selects PCIERC()_CFG113[EV_CNTR_DATA].
+ _ \<27:24\> = Group number (0..0x7).
+ _ \<23:16\> = Event number (0..0x13). */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg112_s cn; */
+};
+typedef union bdk_pciercx_cfg112 bdk_pciercx_cfg112_t;
+
+static inline uint64_t BDK_PCIERCX_CFG112(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG112(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG112", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG112(a) bdk_pciercx_cfg112_t
+#define bustype_BDK_PCIERCX_CFG112(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG112(a) "PCIERCX_CFG112"
+#define busnum_BDK_PCIERCX_CFG112(a) (a)
+#define arguments_BDK_PCIERCX_CFG112(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg113
+ *
+ * PCIe RC Vendor RAS DES Data Register
+ * This register contains the one hundred fourteenth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg113
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg113_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ev_cntr_data : 32; /**< [ 31: 0](RO) Event counter data. This field returns data selected by PCIERC()_CFG113[EV_CNTR_DATA_SEL]
+ and PCIERC()_CFG113[EV_CNTR_LANE_SEL]. */
+#else /* Word 0 - Little Endian */
+ uint32_t ev_cntr_data : 32; /**< [ 31: 0](RO) Event counter data. This field returns data selected by PCIERC()_CFG113[EV_CNTR_DATA_SEL]
+ and PCIERC()_CFG113[EV_CNTR_LANE_SEL]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg113_s cn; */
+};
+typedef union bdk_pciercx_cfg113 bdk_pciercx_cfg113_t;
+
+static inline uint64_t BDK_PCIERCX_CFG113(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG113(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001c4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG113", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG113(a) bdk_pciercx_cfg113_t
+#define bustype_BDK_PCIERCX_CFG113(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG113(a) "PCIERCX_CFG113"
+#define busnum_BDK_PCIERCX_CFG113(a) (a)
+#define arguments_BDK_PCIERCX_CFG113(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg114
+ *
+ * PCIe RC Vendor RAS DES Time Based Analysis Control Register
+ * This register contains the one hundred fifteenth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg114
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg114_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t tbase_rpt_sel : 8; /**< [ 31: 24](R/W) Time-based report select. Selects what type of data is measured for the selected
+ duration.
+ TBASE_DUR_SEL. Data is returned in PCIERC()_CFG115[TBASE_DATA].
+
+ Each type of data is measured using one of three types of units.
+
+ Core clock cycles.
+ 0x0 = Duration of 1 cycle.
+ 0x1 = TxL0s.
+ 0x2 = RxL0s.
+ 0x3 = L0.
+ 0x4 = L1.
+ 0x7 = Configuration/recovery.
+
+ Aux_clk cycles.
+ 0x5 = L1.1.
+ 0x6 = L1.2.
+
+ Data bytes. Actual amount is 16x value.
+ 0x20 = TX TLP Bytes.
+ 0x21 = RX TLP Bytes. */
+ uint32_t reserved_16_23 : 8;
+ uint32_t tbase_dur_sel : 8; /**< [ 15: 8](R/W) Time-based duration select. Selects the duration of time-based
+ analysis.
+
+ 0x0 = Manual control. Analysis controlled by [TIMER_START].
+ 0x1 = 1ms.
+ 0x2 = 10ms.
+ 0x3 = 100ms.
+ 0x4 = 1s.
+ 0x5 = 2s.
+ 0x6 = 4s.
+ 0x7 - 0xF = Reserved. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t timer_start : 1; /**< [ 0: 0](R/W) Timer start.
+
+ 0x0 = Start/Restart
+ 0x1 = Stop.
+
+ This bit will be cleared automatically when the measurement is finished. */
+#else /* Word 0 - Little Endian */
+ uint32_t timer_start : 1; /**< [ 0: 0](R/W) Timer start.
+
+ 0x0 = Start/Restart
+ 0x1 = Stop.
+
+ This bit will be cleared automatically when the measurement is finished. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t tbase_dur_sel : 8; /**< [ 15: 8](R/W) Time-based duration select. Selects the duration of time-based
+ analysis.
+
+ 0x0 = Manual control. Analysis controlled by [TIMER_START].
+ 0x1 = 1ms.
+ 0x2 = 10ms.
+ 0x3 = 100ms.
+ 0x4 = 1s.
+ 0x5 = 2s.
+ 0x6 = 4s.
+ 0x7 - 0xF = Reserved. */
+ uint32_t reserved_16_23 : 8;
+ uint32_t tbase_rpt_sel : 8; /**< [ 31: 24](R/W) Time-based report select. Selects what type of data is measured for the selected
+ duration.
+ TBASE_DUR_SEL. Data is returned in PCIERC()_CFG115[TBASE_DATA].
+
+ Each type of data is measured using one of three types of units.
+
+ Core clock cycles.
+ 0x0 = Duration of 1 cycle.
+ 0x1 = TxL0s.
+ 0x2 = RxL0s.
+ 0x3 = L0.
+ 0x4 = L1.
+ 0x7 = Configuration/recovery.
+
+ Aux_clk cycles.
+ 0x5 = L1.1.
+ 0x6 = L1.2.
+
+ Data bytes. Actual amount is 16x value.
+ 0x20 = TX TLP Bytes.
+ 0x21 = RX TLP Bytes. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg114_s cn; */
+};
+typedef union bdk_pciercx_cfg114 bdk_pciercx_cfg114_t;
+
+static inline uint64_t BDK_PCIERCX_CFG114(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG114(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG114", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG114(a) bdk_pciercx_cfg114_t
+#define bustype_BDK_PCIERCX_CFG114(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG114(a) "PCIERCX_CFG114"
+#define busnum_BDK_PCIERCX_CFG114(a) (a)
+#define arguments_BDK_PCIERCX_CFG114(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg115
+ *
+ * PCIe RC Vendor RAS DES Time Based Analysis Data Register
+ * This register contains the one hundred sixteenth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg115
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg115_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t tbase_data : 32; /**< [ 31: 0](RO/H) Time-based analysis data. This register returns data selected in the
+ PCIERC()_CFG114[TBASE_RPT_SEL] field. The results are cleared when
+ the next measurement starts. */
+#else /* Word 0 - Little Endian */
+ uint32_t tbase_data : 32; /**< [ 31: 0](RO/H) Time-based analysis data. This register returns data selected in the
+ PCIERC()_CFG114[TBASE_RPT_SEL] field. The results are cleared when
+ the next measurement starts. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg115_s cn; */
+};
+typedef union bdk_pciercx_cfg115 bdk_pciercx_cfg115_t;
+
+static inline uint64_t BDK_PCIERCX_CFG115(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG115(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001ccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG115", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG115(a) bdk_pciercx_cfg115_t
+#define bustype_BDK_PCIERCX_CFG115(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG115(a) "PCIERCX_CFG115"
+#define busnum_BDK_PCIERCX_CFG115(a) (a)
+#define arguments_BDK_PCIERCX_CFG115(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg121
+ *
+ * PCIe RC Vendor RAS DES Error Injection Enable Register
+ * This register contains the one hundred twenty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg121
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg121_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_7_31 : 25;
+ uint32_t einj6_en : 1; /**< [ 6: 6](R/W) Specific TLP error injection enable. Enables insertion of errors into the
+ packet selected. For more details, refer to PCIERC()_CFG128. */
+ uint32_t einj5_en : 1; /**< [ 5: 5](R/W) TLP duplicate/nullify error injection enable. Enables insertion of duplicate/nullified
+ TLPs. For more details, refer to PCIERC()_CFG127. */
+ uint32_t einj4_en : 1; /**< [ 4: 4](R/W) FC credit update error injection enable. Enables insertion of errors into
+ Updated FCs. See PCIERC()_CFG126. */
+ uint32_t einj3_en : 1; /**< [ 3: 3](R/W) Symbol datak mask or sync header error enable. Enables data masking of special
+ symbols or the breaking of the sync header. See PCIERC()_CFG125. */
+ uint32_t einj2_en : 1; /**< [ 2: 2](R/W) DLLP error injection enable. enables insertion of DLLP errors.
+ See PCIERC()_CFG124. */
+ uint32_t einj1_en : 1; /**< [ 1: 1](R/W) Sequence number error injection enable. Enables insertion of errors into
+ sequence numbers.
+ See PCIERC()_CFG123. */
+ uint32_t einj0_en : 1; /**< [ 0: 0](R/W) CRC error injection enable. Enables insertion of errors into various CRC.
+ See PCIERC()_CFG122. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj0_en : 1; /**< [ 0: 0](R/W) CRC error injection enable. Enables insertion of errors into various CRC.
+ See PCIERC()_CFG122. */
+ uint32_t einj1_en : 1; /**< [ 1: 1](R/W) Sequence number error injection enable. Enables insertion of errors into
+ sequence numbers.
+ See PCIERC()_CFG123. */
+ uint32_t einj2_en : 1; /**< [ 2: 2](R/W) DLLP error injection enable. enables insertion of DLLP errors.
+ See PCIERC()_CFG124. */
+ uint32_t einj3_en : 1; /**< [ 3: 3](R/W) Symbol datak mask or sync header error enable. Enables data masking of special
+ symbols or the breaking of the sync header. See PCIERC()_CFG125. */
+ uint32_t einj4_en : 1; /**< [ 4: 4](R/W) FC credit update error injection enable. Enables insertion of errors into
+ Updated FCs. See PCIERC()_CFG126. */
+ uint32_t einj5_en : 1; /**< [ 5: 5](R/W) TLP duplicate/nullify error injection enable. Enables insertion of duplicate/nullified
+ TLPs. For more details, refer to PCIERC()_CFG127. */
+ uint32_t einj6_en : 1; /**< [ 6: 6](R/W) Specific TLP error injection enable. Enables insertion of errors into the
+ packet selected. For more details, refer to PCIERC()_CFG128. */
+ uint32_t reserved_7_31 : 25;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg121_s cn; */
+};
+typedef union bdk_pciercx_cfg121 bdk_pciercx_cfg121_t;
+
+static inline uint64_t BDK_PCIERCX_CFG121(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG121(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001e8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG121", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG121(a) bdk_pciercx_cfg121_t
+#define bustype_BDK_PCIERCX_CFG121(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG121(a) "PCIERCX_CFG121"
+#define busnum_BDK_PCIERCX_CFG121(a) (a)
+#define arguments_BDK_PCIERCX_CFG121(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg122
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 0 (CRC) Register
+ * This register contains the one hundred twenty-third 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg122
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg122_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t einj0_crc_type : 4; /**< [ 11: 8](R/W) Error injection type. Selects the type of CRC error tp in inserted.
+
+ TX path:
+ 0x0 = New TLP's LCRC error injection.
+ 0x1 = 16bCRC error injection of ACK/NAK DLLP.
+ 0x2 = 16bCRC error injection of Update-FC DLLP.
+ 0x3 = New TLP's ECRC error injection.
+ 0x4 = TLP's FCRC error injection (128b/130b).
+ 0x5 = Parity error of TSOS (128b/130b).
+ 0x6 = Parity error of SKPOS (128b/130b).
+ 0x7 = Reserved.
+
+ RX Path:
+ 0x8 = LCRC error injection.
+ 0x9 = ECRC error injection.
+ 0xA - 0xF = Reserved. */
+ uint32_t einj0_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG116[EINJ0_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ0_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ0_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj0_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG116[EINJ0_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ0_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ0_EN] is cleared. */
+ uint32_t einj0_crc_type : 4; /**< [ 11: 8](R/W) Error injection type. Selects the type of CRC error tp in inserted.
+
+ TX path:
+ 0x0 = New TLP's LCRC error injection.
+ 0x1 = 16bCRC error injection of ACK/NAK DLLP.
+ 0x2 = 16bCRC error injection of Update-FC DLLP.
+ 0x3 = New TLP's ECRC error injection.
+ 0x4 = TLP's FCRC error injection (128b/130b).
+ 0x5 = Parity error of TSOS (128b/130b).
+ 0x6 = Parity error of SKPOS (128b/130b).
+ 0x7 = Reserved.
+
+ RX Path:
+ 0x8 = LCRC error injection.
+ 0x9 = ECRC error injection.
+ 0xA - 0xF = Reserved. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg122_s cn; */
+};
+typedef union bdk_pciercx_cfg122 bdk_pciercx_cfg122_t;
+
+static inline uint64_t BDK_PCIERCX_CFG122(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG122(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG122", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG122(a) bdk_pciercx_cfg122_t
+#define bustype_BDK_PCIERCX_CFG122(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG122(a) "PCIERCX_CFG122"
+#define busnum_BDK_PCIERCX_CFG122(a) (a)
+#define arguments_BDK_PCIERCX_CFG122(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg123
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 1 (SEQNUM) Register
+ * This register contains the one hundred twenty-fourth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg123
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg123_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t einj1_bad_seqnum : 13; /**< [ 28: 16](R/W) Bad sequence number. Indicates the value to add/subtract
+ from the naturally-assigned sequence numbers. This value is
+ represented by two's complement.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_9_15 : 7;
+ uint32_t einj1_seqnum_type : 1; /**< [ 8: 8](R/W) Sequence number type. Selects the type of sequence number.
+
+ 0x0 = Insertion of New TLP's SEQ error.
+ 0x1 = Insertion of ACK/NAK DLLP's SEQ error. */
+ uint32_t einj1_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ1_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ1_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ1_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj1_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ1_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ1_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ1_EN] is cleared. */
+ uint32_t einj1_seqnum_type : 1; /**< [ 8: 8](R/W) Sequence number type. Selects the type of sequence number.
+
+ 0x0 = Insertion of New TLP's SEQ error.
+ 0x1 = Insertion of ACK/NAK DLLP's SEQ error. */
+ uint32_t reserved_9_15 : 7;
+ uint32_t einj1_bad_seqnum : 13; /**< [ 28: 16](R/W) Bad sequence number. Indicates the value to add/subtract
+ from the naturally-assigned sequence numbers. This value is
+ represented by two's complement.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg123_s cn; */
+};
+typedef union bdk_pciercx_cfg123 bdk_pciercx_cfg123_t;
+
+static inline uint64_t BDK_PCIERCX_CFG123(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG123(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001f0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG123", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG123(a) bdk_pciercx_cfg123_t
+#define bustype_BDK_PCIERCX_CFG123(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG123(a) "PCIERCX_CFG123"
+#define busnum_BDK_PCIERCX_CFG123(a) (a)
+#define arguments_BDK_PCIERCX_CFG123(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg124
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 2 (DLLP) Register
+ * This register contains the one hundred twenty-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg124
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg124_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t einj2_dllp_type : 2; /**< [ 9: 8](R/W) DLLP type. Selects the type of DLLP errors to be inserted.
+
+ 0x0 = ACK/NAK DLLP transmission block.
+ 0x1 = Update FC DLLP's transmission block.
+ 0x2 = Always transmission for NAK DLLP.
+ 0x3 = Reserved. */
+ uint32_t einj2_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ2_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ2_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ2_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj2_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ2_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ2_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ2_EN] is cleared. */
+ uint32_t einj2_dllp_type : 2; /**< [ 9: 8](R/W) DLLP type. Selects the type of DLLP errors to be inserted.
+
+ 0x0 = ACK/NAK DLLP transmission block.
+ 0x1 = Update FC DLLP's transmission block.
+ 0x2 = Always transmission for NAK DLLP.
+ 0x3 = Reserved. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg124_s cn; */
+};
+typedef union bdk_pciercx_cfg124 bdk_pciercx_cfg124_t;
+
+static inline uint64_t BDK_PCIERCX_CFG124(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG124(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001f4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG124", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG124(a) bdk_pciercx_cfg124_t
+#define bustype_BDK_PCIERCX_CFG124(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG124(a) "PCIERCX_CFG124"
+#define busnum_BDK_PCIERCX_CFG124(a) (a)
+#define arguments_BDK_PCIERCX_CFG124(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg125
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 3 (Symbol) Register
+ * This register contains the one hundred twenty-sixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg125
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg125_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_11_31 : 21;
+ uint32_t einj3_symbol_type : 3; /**< [ 10: 8](R/W) Error type, 8 b/10 b encoding - Mask K symbol.
+
+ 0x0 = Reserved.
+ 0x1 = COM/PAD(TS1 Order Set).
+ 0x2 = COM/PAD(TS2 Order Set).
+ 0x3 = COM/FTS(FTS Order Set).
+ 0x4 = COM/IDLE(E-Idle Order Set).
+ 0x5 = END/EDB Symbol.
+ 0x6 = STP/SDP Symbol.
+ 0x7 = COM/SKP(SKP Order set). */
+ uint32_t einj3_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ3_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ3_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ3_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj3_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ3_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ3_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ3_EN] is cleared. */
+ uint32_t einj3_symbol_type : 3; /**< [ 10: 8](R/W) Error type, 8 b/10 b encoding - Mask K symbol.
+
+ 0x0 = Reserved.
+ 0x1 = COM/PAD(TS1 Order Set).
+ 0x2 = COM/PAD(TS2 Order Set).
+ 0x3 = COM/FTS(FTS Order Set).
+ 0x4 = COM/IDLE(E-Idle Order Set).
+ 0x5 = END/EDB Symbol.
+ 0x6 = STP/SDP Symbol.
+ 0x7 = COM/SKP(SKP Order set). */
+ uint32_t reserved_11_31 : 21;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg125_s cn; */
+};
+typedef union bdk_pciercx_cfg125 bdk_pciercx_cfg125_t;
+
+static inline uint64_t BDK_PCIERCX_CFG125(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG125(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001f8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG125", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG125(a) bdk_pciercx_cfg125_t
+#define bustype_BDK_PCIERCX_CFG125(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG125(a) "PCIERCX_CFG125"
+#define busnum_BDK_PCIERCX_CFG125(a) (a)
+#define arguments_BDK_PCIERCX_CFG125(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg126
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 4 (FC Credit) Register
+ * This register contains the one hundred twenty-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg126
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg126_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t einj4_bad_updfc_val : 13; /**< [ 28: 16](R/W) Bad update-FC credit value. Indicates the value to add/subtract
+ from the UpdateFC credit. The value is represented by two's
+ compliment.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_15 : 1;
+ uint32_t einj4_vc_num : 3; /**< [ 14: 12](R/W) VC number. Indicates the target VC Number. */
+ uint32_t reserved_11 : 1;
+ uint32_t einj4_vc_type : 3; /**< [ 10: 8](R/W) Update-FC type. Selects the credit type.
+
+ 0x0 = Posted TLP header credit value control.
+ 0x1 = Non-Posted TLP header credit value control.
+ 0x2 = Completion TLP header credit value control.
+ 0x3 = Reserved.
+ 0x4 = Posted TLP data credit value control.
+ 0x5 = Non-Posted TLP data credit value control.
+ 0x6 = Completion TLP data credit value control.
+ 0x7 = Reserved. */
+ uint32_t einj4_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ4_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG116[EINJ4_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ4_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj4_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ4_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG116[EINJ4_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ4_EN] is cleared. */
+ uint32_t einj4_vc_type : 3; /**< [ 10: 8](R/W) Update-FC type. Selects the credit type.
+
+ 0x0 = Posted TLP header credit value control.
+ 0x1 = Non-Posted TLP header credit value control.
+ 0x2 = Completion TLP header credit value control.
+ 0x3 = Reserved.
+ 0x4 = Posted TLP data credit value control.
+ 0x5 = Non-Posted TLP data credit value control.
+ 0x6 = Completion TLP data credit value control.
+ 0x7 = Reserved. */
+ uint32_t reserved_11 : 1;
+ uint32_t einj4_vc_num : 3; /**< [ 14: 12](R/W) VC number. Indicates the target VC Number. */
+ uint32_t reserved_15 : 1;
+ uint32_t einj4_bad_updfc_val : 13; /**< [ 28: 16](R/W) Bad update-FC credit value. Indicates the value to add/subtract
+ from the UpdateFC credit. The value is represented by two's
+ compliment.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg126_s cn; */
+};
+typedef union bdk_pciercx_cfg126 bdk_pciercx_cfg126_t;
+
+static inline uint64_t BDK_PCIERCX_CFG126(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG126(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000001fcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG126", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG126(a) bdk_pciercx_cfg126_t
+#define bustype_BDK_PCIERCX_CFG126(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG126(a) "PCIERCX_CFG126"
+#define busnum_BDK_PCIERCX_CFG126(a) (a)
+#define arguments_BDK_PCIERCX_CFG126(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg127
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 5 (Specific TLP) Register
+ * This register contains the one hundred twenty-eighth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg127
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg127_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_9_31 : 23;
+ uint32_t einj5_sp_tlp : 1; /**< [ 8: 8](R/W) Specified TLP. Selects the specified TLP to be inserted.
+
+ 0x0 = Generates duplicate TLPs by handling ACK DLLP as NAK DLLP.
+ 0x1 = Generates nullified TLP (Original TLP will be stored in retry buffer). */
+ uint32_t einj5_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ5_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ5_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ5_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj5_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG121[EINJ5_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG121[EINJ5_EN] is set,
+ errors are inserted until PCIERC()_CFG121[EINJ5_EN] is cleared. */
+ uint32_t einj5_sp_tlp : 1; /**< [ 8: 8](R/W) Specified TLP. Selects the specified TLP to be inserted.
+
+ 0x0 = Generates duplicate TLPs by handling ACK DLLP as NAK DLLP.
+ 0x1 = Generates nullified TLP (Original TLP will be stored in retry buffer). */
+ uint32_t reserved_9_31 : 23;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg127_s cn; */
+};
+typedef union bdk_pciercx_cfg127 bdk_pciercx_cfg127_t;
+
+static inline uint64_t BDK_PCIERCX_CFG127(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG127(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000200ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG127", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG127(a) bdk_pciercx_cfg127_t
+#define bustype_BDK_PCIERCX_CFG127(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG127(a) "PCIERCX_CFG127"
+#define busnum_BDK_PCIERCX_CFG127(a) (a)
+#define arguments_BDK_PCIERCX_CFG127(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg128
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H0) Register
+ * This register contains the one hundred twenty-ninth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg128
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg128_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg128_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the secondary PCI Express capabilities by default.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the secondary PCI Express capabilities by default.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg128_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h0 : 32; /**< [ 31: 0](R/W) Packet compare point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to compare
+ with the corresponding bits in PCIERC()_CFG127[EIN6_COM_VAL_H0].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG127[EIN6_COM_VAL_H0] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h0 : 32; /**< [ 31: 0](R/W) Packet compare point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to compare
+ with the corresponding bits in PCIERC()_CFG127[EIN6_COM_VAL_H0].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG127[EIN6_COM_VAL_H0] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg128 bdk_pciercx_cfg128_t;
+
+static inline uint64_t BDK_PCIERCX_CFG128(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG128(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000200ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000204ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG128", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG128(a) bdk_pciercx_cfg128_t
+#define bustype_BDK_PCIERCX_CFG128(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG128(a) "PCIERCX_CFG128"
+#define busnum_BDK_PCIERCX_CFG128(a) (a)
+#define arguments_BDK_PCIERCX_CFG128(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg129
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H1) Register
+ * This register contains the one hundred thirtyith 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg129
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg129_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg129_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg129_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h1 : 32; /**< [ 31: 0](R/W) Packet compare point second DWORD.
+ Specifies which TX TLP header DWORD1 bits to compare
+ with the corresponding bits in PCIERC()_CFG134[EIN6_COM_VAL_H1].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG134[EIN6_COM_VAL_H1] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h1 : 32; /**< [ 31: 0](R/W) Packet compare point second DWORD.
+ Specifies which TX TLP header DWORD1 bits to compare
+ with the corresponding bits in PCIERC()_CFG134[EIN6_COM_VAL_H1].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG134[EIN6_COM_VAL_H1] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg129 bdk_pciercx_cfg129_t;
+
+static inline uint64_t BDK_PCIERCX_CFG129(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG129(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000204ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000208ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG129", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG129(a) bdk_pciercx_cfg129_t
+#define bustype_BDK_PCIERCX_CFG129(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG129(a) "PCIERCX_CFG129"
+#define busnum_BDK_PCIERCX_CFG129(a) (a)
+#define arguments_BDK_PCIERCX_CFG129(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg130
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H2) Register
+ * This register contains the one hundred thirty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg130
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg130_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg130_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ecv : 32; /**< [ 31: 0](R/W) Egress control vector. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecv : 32; /**< [ 31: 0](R/W) Egress control vector. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg130_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h2 : 32; /**< [ 31: 0](R/W) Packet compare point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to compare
+ with the corresponding bits in PCIERC()_CFG134[EIN6_COM_VAL_H2].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG134[EIN6_COM_VAL_H2] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h2 : 32; /**< [ 31: 0](R/W) Packet compare point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to compare
+ with the corresponding bits in PCIERC()_CFG134[EIN6_COM_VAL_H2].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG134[EIN6_COM_VAL_H2] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg130 bdk_pciercx_cfg130_t;
+
+static inline uint64_t BDK_PCIERCX_CFG130(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG130(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000208ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000020cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG130", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG130(a) bdk_pciercx_cfg130_t
+#define bustype_BDK_PCIERCX_CFG130(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG130(a) "PCIERCX_CFG130"
+#define busnum_BDK_PCIERCX_CFG130(a) (a)
+#define arguments_BDK_PCIERCX_CFG130(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg131
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H3) Register
+ * This register contains the one hundred thirty-second 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg131
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg131_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h3 : 32; /**< [ 31: 0](R/W) Packet compare point fourth DWORD.
+ Specifies which TX TLP header DWORD3 bits to compare
+ with the corresponding bits in PCIERC()_CFG135[EIN6_COM_VAL_H3].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG135[EIN6_COM_VAL_H3] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h3 : 32; /**< [ 31: 0](R/W) Packet compare point fourth DWORD.
+ Specifies which TX TLP header DWORD3 bits to compare
+ with the corresponding bits in PCIERC()_CFG135[EIN6_COM_VAL_H3].
+ When all specified bits (in the TX TLP header and
+ PCIERC()_CFG135[EIN6_COM_VAL_H3] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg131_s cn; */
+};
+typedef union bdk_pciercx_cfg131 bdk_pciercx_cfg131_t;
+
+static inline uint64_t BDK_PCIERCX_CFG131(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG131(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000210ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG131", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG131(a) bdk_pciercx_cfg131_t
+#define bustype_BDK_PCIERCX_CFG131(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG131(a) "PCIERCX_CFG131"
+#define busnum_BDK_PCIERCX_CFG131(a) (a)
+#define arguments_BDK_PCIERCX_CFG131(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg132
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H0) Register
+ * This register contains the one hundred thirty-third 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg132
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg132_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h0 : 32; /**< [ 31: 0](R/W) Packet compare value first DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD0 bits specified in PCIERC()_CFG128[EINJ_COM_PT_H0]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h0 : 32; /**< [ 31: 0](R/W) Packet compare value first DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD0 bits specified in PCIERC()_CFG128[EINJ_COM_PT_H0]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg132_s cn; */
+};
+typedef union bdk_pciercx_cfg132 bdk_pciercx_cfg132_t;
+
+static inline uint64_t BDK_PCIERCX_CFG132(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG132(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000214ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG132", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG132(a) bdk_pciercx_cfg132_t
+#define bustype_BDK_PCIERCX_CFG132(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG132(a) "PCIERCX_CFG132"
+#define busnum_BDK_PCIERCX_CFG132(a) (a)
+#define arguments_BDK_PCIERCX_CFG132(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg133
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H1) Register
+ * This register contains the one hundred thirty-forth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg133
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg133_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h1 : 32; /**< [ 31: 0](R/W) Packet compare value second DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD1 bits specified in PCIERC()_CFG129[EINJ_COM_PT_H1]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h1 : 32; /**< [ 31: 0](R/W) Packet compare value second DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD1 bits specified in PCIERC()_CFG129[EINJ_COM_PT_H1]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg133_s cn; */
+};
+typedef union bdk_pciercx_cfg133 bdk_pciercx_cfg133_t;
+
+static inline uint64_t BDK_PCIERCX_CFG133(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG133(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000218ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG133", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG133(a) bdk_pciercx_cfg133_t
+#define bustype_BDK_PCIERCX_CFG133(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG133(a) "PCIERCX_CFG133"
+#define busnum_BDK_PCIERCX_CFG133(a) (a)
+#define arguments_BDK_PCIERCX_CFG133(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg134
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H2) Register
+ * This register contains the one hundred thirty-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg134
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg134_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h2 : 32; /**< [ 31: 0](R/W) Packet compare value third DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD2 bits specified in the PCIERC()_CFG130[EINJ_COM_PT_H3]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h2 : 32; /**< [ 31: 0](R/W) Packet compare value third DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD2 bits specified in the PCIERC()_CFG130[EINJ_COM_PT_H3]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg134_s cn; */
+};
+typedef union bdk_pciercx_cfg134 bdk_pciercx_cfg134_t;
+
+static inline uint64_t BDK_PCIERCX_CFG134(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG134(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000021cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG134", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG134(a) bdk_pciercx_cfg134_t
+#define bustype_BDK_PCIERCX_CFG134(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG134(a) "PCIERCX_CFG134"
+#define busnum_BDK_PCIERCX_CFG134(a) (a)
+#define arguments_BDK_PCIERCX_CFG134(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg135
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H3) Register
+ * This register contains the one hundred thirty-ssixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg135
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg135_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h3 : 32; /**< [ 31: 0](R/W) Packet compare value fourth DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD3 bits specified in the PCIERC()_CFG131[EINJ_COM_PT_H4]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h3 : 32; /**< [ 31: 0](R/W) Packet compare value fourth DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD3 bits specified in the PCIERC()_CFG131[EINJ_COM_PT_H4]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg135_s cn; */
+};
+typedef union bdk_pciercx_cfg135 bdk_pciercx_cfg135_t;
+
+static inline uint64_t BDK_PCIERCX_CFG135(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG135(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000220ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG135", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG135(a) bdk_pciercx_cfg135_t
+#define bustype_BDK_PCIERCX_CFG135(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG135(a) "PCIERCX_CFG135"
+#define busnum_BDK_PCIERCX_CFG135(a) (a)
+#define arguments_BDK_PCIERCX_CFG135(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg136
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H0) Register
+ * This register contains the one hundred thirty-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg136
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg136_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h0 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC()_CFG140[EINJ6_CHG_VAL_H0]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h0 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC()_CFG140[EINJ6_CHG_VAL_H0]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg136_s cn; */
+};
+typedef union bdk_pciercx_cfg136 bdk_pciercx_cfg136_t;
+
+static inline uint64_t BDK_PCIERCX_CFG136(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG136(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000224ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG136", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG136(a) bdk_pciercx_cfg136_t
+#define bustype_BDK_PCIERCX_CFG136(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG136(a) "PCIERCX_CFG136"
+#define busnum_BDK_PCIERCX_CFG136(a) (a)
+#define arguments_BDK_PCIERCX_CFG136(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg137
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H1) Register
+ * This register contains the one hundred thirty-eighth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg137
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg137_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h1 : 32; /**< [ 31: 0](R/W) Packet change point second DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC()_CFG141[EINJ6_CHG_VAL_H1]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h1 : 32; /**< [ 31: 0](R/W) Packet change point second DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC()_CFG141[EINJ6_CHG_VAL_H1]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg137_s cn; */
+};
+typedef union bdk_pciercx_cfg137 bdk_pciercx_cfg137_t;
+
+static inline uint64_t BDK_PCIERCX_CFG137(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG137(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000228ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG137", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG137(a) bdk_pciercx_cfg137_t
+#define bustype_BDK_PCIERCX_CFG137(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG137(a) "PCIERCX_CFG137"
+#define busnum_BDK_PCIERCX_CFG137(a) (a)
+#define arguments_BDK_PCIERCX_CFG137(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg138
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H2) Register
+ * This register contains the one hundred thirty-ninth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg138
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg138_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h2 : 32; /**< [ 31: 0](R/W) Packet change point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to replace
+ with the corresponding bits in PCIERC()_CFG142[EINJ6_CHG_VAL_H2]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h2 : 32; /**< [ 31: 0](R/W) Packet change point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to replace
+ with the corresponding bits in PCIERC()_CFG142[EINJ6_CHG_VAL_H2]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg138_s cn; */
+};
+typedef union bdk_pciercx_cfg138 bdk_pciercx_cfg138_t;
+
+static inline uint64_t BDK_PCIERCX_CFG138(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG138(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000022cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG138", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG138(a) bdk_pciercx_cfg138_t
+#define bustype_BDK_PCIERCX_CFG138(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG138(a) "PCIERCX_CFG138"
+#define busnum_BDK_PCIERCX_CFG138(a) (a)
+#define arguments_BDK_PCIERCX_CFG138(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg139
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H3) Register
+ * This register contains the one hundred fortieth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg139
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg139_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h3 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD3 bits to replace
+ with the corresponding bits in PCIERC()_CFG143[EINJ6_CHG_VAL_H3]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h3 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD3 bits to replace
+ with the corresponding bits in PCIERC()_CFG143[EINJ6_CHG_VAL_H3]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg139_s cn; */
+};
+typedef union bdk_pciercx_cfg139 bdk_pciercx_cfg139_t;
+
+static inline uint64_t BDK_PCIERCX_CFG139(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG139(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000230ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG139", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG139(a) bdk_pciercx_cfg139_t
+#define bustype_BDK_PCIERCX_CFG139(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG139(a) "PCIERCX_CFG139"
+#define busnum_BDK_PCIERCX_CFG139(a) (a)
+#define arguments_BDK_PCIERCX_CFG139(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg140
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H0) Register
+ * This register contains the one hundred forty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg140
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg140_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h0 : 32; /**< [ 31: 0](R/W) Packet change value first DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD0 bits defined in the PCIERC()_CFG136[EINJ6_CHG_PT_H0].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h0 : 32; /**< [ 31: 0](R/W) Packet change value first DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD0 bits defined in the PCIERC()_CFG136[EINJ6_CHG_PT_H0].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg140_s cn; */
+};
+typedef union bdk_pciercx_cfg140 bdk_pciercx_cfg140_t;
+
+static inline uint64_t BDK_PCIERCX_CFG140(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG140(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000234ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG140", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG140(a) bdk_pciercx_cfg140_t
+#define bustype_BDK_PCIERCX_CFG140(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG140(a) "PCIERCX_CFG140"
+#define busnum_BDK_PCIERCX_CFG140(a) (a)
+#define arguments_BDK_PCIERCX_CFG140(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg141
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H1) Register
+ * This register contains the one hundred forty-second 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg141
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg141_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h1 : 32; /**< [ 31: 0](R/W) Packet change value second DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD1 bits defined in the PCIERC()_CFG137[EINJ6_CHG_PT_H1].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h1 : 32; /**< [ 31: 0](R/W) Packet change value second DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD1 bits defined in the PCIERC()_CFG137[EINJ6_CHG_PT_H1].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg141_s cn; */
+};
+typedef union bdk_pciercx_cfg141 bdk_pciercx_cfg141_t;
+
+static inline uint64_t BDK_PCIERCX_CFG141(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG141(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000238ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG141", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG141(a) bdk_pciercx_cfg141_t
+#define bustype_BDK_PCIERCX_CFG141(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG141(a) "PCIERCX_CFG141"
+#define busnum_BDK_PCIERCX_CFG141(a) (a)
+#define arguments_BDK_PCIERCX_CFG141(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg142
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H2) Register
+ * This register contains the one hundred forty-third 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg142
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg142_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h2 : 32; /**< [ 31: 0](R/W) Packet change value third DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD2 bits defined in the PCIERC()_CFG138[EINJ6_CHG_PT_H2].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set." */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h2 : 32; /**< [ 31: 0](R/W) Packet change value third DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD2 bits defined in the PCIERC()_CFG138[EINJ6_CHG_PT_H2].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set." */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg142_s cn; */
+};
+typedef union bdk_pciercx_cfg142 bdk_pciercx_cfg142_t;
+
+static inline uint64_t BDK_PCIERCX_CFG142(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG142(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000023cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG142", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG142(a) bdk_pciercx_cfg142_t
+#define bustype_BDK_PCIERCX_CFG142(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG142(a) "PCIERCX_CFG142"
+#define busnum_BDK_PCIERCX_CFG142(a) (a)
+#define arguments_BDK_PCIERCX_CFG142(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg143
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H3) Register
+ * This register contains the one hundred forty-forth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg143
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg143_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h3 : 32; /**< [ 31: 0](R/W) Packet change value fourth DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD3 bits defined in the PCIERC()_CFG139[EINJ6_CHG_PT_H3].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h3 : 32; /**< [ 31: 0](R/W) Packet change value fourth DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD3 bits defined in the PCIERC()_CFG139[EINJ6_CHG_PT_H3].
+ Only applies when PCIERC()_CFG144[EINJ6_INV_CNTL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg143_s cn; */
+};
+typedef union bdk_pciercx_cfg143 bdk_pciercx_cfg143_t;
+
+static inline uint64_t BDK_PCIERCX_CFG143(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG143(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000240ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG143", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG143(a) bdk_pciercx_cfg143_t
+#define bustype_BDK_PCIERCX_CFG143(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG143(a) "PCIERCX_CFG143"
+#define busnum_BDK_PCIERCX_CFG143(a) (a)
+#define arguments_BDK_PCIERCX_CFG143(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg144
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Packet Error) Register
+ * This register contains the one hundred forty-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg144
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg144_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t einj6_pkt_typ : 3; /**< [ 11: 9](R/W) Packet type. Selects the TLP packets to inject errors into.
+
+ 0x0 = TLP Header.
+ 0x1 = TLP Prefix 1st 4-DWORDs.
+ 0x2 = TLP Prefix 2nd 4-DWORDs.
+ 0x3 - 0x7 = Reserved. */
+ uint32_t einj6_inv_cntrl : 1; /**< [ 8: 8](R/W) Inverted error injection control.
+
+ 0x0 = EINJ6_CHG_VAL_H[0/1/2/3] is used to replace bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3].
+ 0x1 = EINJ6_CHG_VAL_H[0/1/2/3] is ignored and inverts bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3]. */
+ uint32_t einj6_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG122[EINJ6_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG122[EINJ6_EN] is set,
+ errors are inserted until PCIERC()_CFG122[EINJ6_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC()_CFG122[EINJ6_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC()_CFG122[EINJ6_EN] is set,
+ errors are inserted until PCIERC()_CFG122[EINJ6_EN] is cleared. */
+ uint32_t einj6_inv_cntrl : 1; /**< [ 8: 8](R/W) Inverted error injection control.
+
+ 0x0 = EINJ6_CHG_VAL_H[0/1/2/3] is used to replace bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3].
+ 0x1 = EINJ6_CHG_VAL_H[0/1/2/3] is ignored and inverts bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3]. */
+ uint32_t einj6_pkt_typ : 3; /**< [ 11: 9](R/W) Packet type. Selects the TLP packets to inject errors into.
+
+ 0x0 = TLP Header.
+ 0x1 = TLP Prefix 1st 4-DWORDs.
+ 0x2 = TLP Prefix 2nd 4-DWORDs.
+ 0x3 - 0x7 = Reserved. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg144_s cn; */
+};
+typedef union bdk_pciercx_cfg144 bdk_pciercx_cfg144_t;
+
+static inline uint64_t BDK_PCIERCX_CFG144(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG144(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000244ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG144", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG144(a) bdk_pciercx_cfg144_t
+#define bustype_BDK_PCIERCX_CFG144(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG144(a) "PCIERCX_CFG144"
+#define busnum_BDK_PCIERCX_CFG144(a) (a)
+#define arguments_BDK_PCIERCX_CFG144(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg149
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Control 1 Register
+ * This register contains the one hundred fiftyith 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg149
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg149_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t lp_intv : 2; /**< [ 23: 22](R/W) Low power entry interval time.
+ Interval time that the core starts monitoring RXELECIDLE
+ signal after L0s/L1/L2 entry. You should set the value
+ according to the latency from receiving EIOS to,
+ RXELECIDLE assertion at the PHY
+
+ 0x0 = 40ns.
+ 0x1 = 160ns.
+ 0x2 = 320ns.
+ 0x3 - 640ns. */
+ uint32_t tx_eios_num : 2; /**< [ 21: 20](R/W) Number of TX EIOS.
+ This register sets the number of transmit EIOS for L0s/L1
+ entry and disable/loopback/hot-reset exit. The core selects
+ the greater value between this register and the value defined
+ by the PCI-SIG specification.
+
+ Gen1 or Gen3
+ 0x0 = 1.
+ 0x1 = 4.
+ 0x2 = 8.
+ 0x3 - 16.
+
+ Gen2
+ 0x0 = 2.
+ 0x1 = 8.
+ 0x2 = 16.
+ 0x3 - 32. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t force_detect_lane_en : 1; /**< [ 16: 16](R/W) Force detect lane enable.
+ When this bit is set, the core ignores receiver detection from
+ PHY during LTSSM detect state and uses
+ [FORCE_DETECT_LANE]. */
+ uint32_t force_detect_lane : 16; /**< [ 15: 0](R/W) Force detect lane.
+ When set, the core
+ ignores receiver detection from PHY during LTSSM detect
+ state and uses this value instead.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_detect_lane : 16; /**< [ 15: 0](R/W) Force detect lane.
+ When set, the core
+ ignores receiver detection from PHY during LTSSM detect
+ state and uses this value instead.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7. */
+ uint32_t force_detect_lane_en : 1; /**< [ 16: 16](R/W) Force detect lane enable.
+ When this bit is set, the core ignores receiver detection from
+ PHY during LTSSM detect state and uses
+ [FORCE_DETECT_LANE]. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t tx_eios_num : 2; /**< [ 21: 20](R/W) Number of TX EIOS.
+ This register sets the number of transmit EIOS for L0s/L1
+ entry and disable/loopback/hot-reset exit. The core selects
+ the greater value between this register and the value defined
+ by the PCI-SIG specification.
+
+ Gen1 or Gen3
+ 0x0 = 1.
+ 0x1 = 4.
+ 0x2 = 8.
+ 0x3 - 16.
+
+ Gen2
+ 0x0 = 2.
+ 0x1 = 8.
+ 0x2 = 16.
+ 0x3 - 32. */
+ uint32_t lp_intv : 2; /**< [ 23: 22](R/W) Low power entry interval time.
+ Interval time that the core starts monitoring RXELECIDLE
+ signal after L0s/L1/L2 entry. You should set the value
+ according to the latency from receiving EIOS to,
+ RXELECIDLE assertion at the PHY
+
+ 0x0 = 40ns.
+ 0x1 = 160ns.
+ 0x2 = 320ns.
+ 0x3 - 640ns. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg149_s cn; */
+};
+typedef union bdk_pciercx_cfg149 bdk_pciercx_cfg149_t;
+
+static inline uint64_t BDK_PCIERCX_CFG149(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG149(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000258ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG149", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG149(a) bdk_pciercx_cfg149_t
+#define bustype_BDK_PCIERCX_CFG149(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG149(a) "PCIERCX_CFG149"
+#define busnum_BDK_PCIERCX_CFG149(a) (a)
+#define arguments_BDK_PCIERCX_CFG149(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg150
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Control 2 Register
+ * This register contains the one hundred fifty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg150
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg150_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_17_31 : 15;
+ uint32_t fr_err_rcvy_dis : 1; /**< [ 16: 16](R/W) Framing error recovery disable.
+ This bit disables a transition to recovery state when a framing
+ error has occurred. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t dir_lpbslv_to_exit : 1; /**< [ 10: 10](R/W) Direct loopback slave to exit.
+ When set and the LTSSM is in loopback slave active state,
+ the LTSSM transitions to the loopback slave exit state. */
+ uint32_t dir_polcmp_to_det : 1; /**< [ 9: 9](R/W) Direct Polling.Compliance to detect.
+ When this bit is set and the LTSSM is in polling compliance
+ state, the LTSSM transitions to detect state. */
+ uint32_t dir_recidle_config : 1; /**< [ 8: 8](R/W) Direct Recovery.Idle to configuration.
+ When this bit is set and the LTSSM is in recovery idle state,
+ the LTSSM transitions to configuration state. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t noack_force_lnkdn : 1; /**< [ 2: 2](R/W) Force link down.
+ When this bit is set and the core detects REPLY_NUM rolling
+ over 4 times, the LTSSM transitions to detect state. */
+ uint32_t rcry_req : 1; /**< [ 1: 1](WO) Recovery request.
+ When this bit is set in L0 or L0s, the LTSSM starts
+ transitioning to recovery state. This request does not cause
+ a speed change or re-equalization. This bit always reads
+ a zero. */
+ uint32_t hold_ltssm : 1; /**< [ 0: 0](R/W) Hold and release LTSSM.
+ For as long as this is set, the core stays in the current
+ LTSSM. */
+#else /* Word 0 - Little Endian */
+ uint32_t hold_ltssm : 1; /**< [ 0: 0](R/W) Hold and release LTSSM.
+ For as long as this is set, the core stays in the current
+ LTSSM. */
+ uint32_t rcry_req : 1; /**< [ 1: 1](WO) Recovery request.
+ When this bit is set in L0 or L0s, the LTSSM starts
+ transitioning to recovery state. This request does not cause
+ a speed change or re-equalization. This bit always reads
+ a zero. */
+ uint32_t noack_force_lnkdn : 1; /**< [ 2: 2](R/W) Force link down.
+ When this bit is set and the core detects REPLY_NUM rolling
+ over 4 times, the LTSSM transitions to detect state. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t dir_recidle_config : 1; /**< [ 8: 8](R/W) Direct Recovery.Idle to configuration.
+ When this bit is set and the LTSSM is in recovery idle state,
+ the LTSSM transitions to configuration state. */
+ uint32_t dir_polcmp_to_det : 1; /**< [ 9: 9](R/W) Direct Polling.Compliance to detect.
+ When this bit is set and the LTSSM is in polling compliance
+ state, the LTSSM transitions to detect state. */
+ uint32_t dir_lpbslv_to_exit : 1; /**< [ 10: 10](R/W) Direct loopback slave to exit.
+ When set and the LTSSM is in loopback slave active state,
+ the LTSSM transitions to the loopback slave exit state. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t fr_err_rcvy_dis : 1; /**< [ 16: 16](R/W) Framing error recovery disable.
+ This bit disables a transition to recovery state when a framing
+ error has occurred. */
+ uint32_t reserved_17_31 : 15;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg150_s cn; */
+};
+typedef union bdk_pciercx_cfg150 bdk_pciercx_cfg150_t;
+
+static inline uint64_t BDK_PCIERCX_CFG150(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG150(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000025cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG150", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG150(a) bdk_pciercx_cfg150_t
+#define bustype_BDK_PCIERCX_CFG150(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG150(a) "PCIERCX_CFG150"
+#define busnum_BDK_PCIERCX_CFG150(a) (a)
+#define arguments_BDK_PCIERCX_CFG150(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg153
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L1Lane Register
+ * This register contains the one hundred fifty-forth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg153
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg153_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t deskew_ptr : 8; /**< [ 31: 24](RO/H) Deskew pointer.
+ Indicates deskew pointer of internal deskew buffer of
+ selected lane number (LANE_SELECT). */
+ uint32_t reserved_21_23 : 3;
+ uint32_t pipe_txelecidle : 1; /**< [ 20: 20](RO/H) PIPE:TxElecIdle.
+ Indicates PIPE TXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxelecidle : 1; /**< [ 19: 19](RO/H) PIPE:RxElecIdle.
+ Indicates PIPE RXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxvalid : 1; /**< [ 18: 18](RO/H) PIPE:RxValid.
+ Indicates PIPE RXVALID signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_det_lane : 1; /**< [ 17: 17](RO/H) PIPE:Detect Lane.
+ Indicates whether PHY indicates receiver detection or not on
+ selected lane number ([LANE_SELECT]). */
+ uint32_t pipe_rxpol : 1; /**< [ 16: 16](RO/H) PIPE:RxPolarity.
+ Indicates PIPE RXPOLARITY signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t reserved_4_15 : 12;
+ uint32_t lane_select : 4; /**< [ 3: 0](R/W) Lane select.
+ Lane select register for silicon debug status register of
+ Layer1-PerLane.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t lane_select : 4; /**< [ 3: 0](R/W) Lane select.
+ Lane select register for silicon debug status register of
+ Layer1-PerLane.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+ uint32_t reserved_4_15 : 12;
+ uint32_t pipe_rxpol : 1; /**< [ 16: 16](RO/H) PIPE:RxPolarity.
+ Indicates PIPE RXPOLARITY signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_det_lane : 1; /**< [ 17: 17](RO/H) PIPE:Detect Lane.
+ Indicates whether PHY indicates receiver detection or not on
+ selected lane number ([LANE_SELECT]). */
+ uint32_t pipe_rxvalid : 1; /**< [ 18: 18](RO/H) PIPE:RxValid.
+ Indicates PIPE RXVALID signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxelecidle : 1; /**< [ 19: 19](RO/H) PIPE:RxElecIdle.
+ Indicates PIPE RXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_txelecidle : 1; /**< [ 20: 20](RO/H) PIPE:TxElecIdle.
+ Indicates PIPE TXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t reserved_21_23 : 3;
+ uint32_t deskew_ptr : 8; /**< [ 31: 24](RO/H) Deskew pointer.
+ Indicates deskew pointer of internal deskew buffer of
+ selected lane number (LANE_SELECT). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg153_s cn; */
+};
+typedef union bdk_pciercx_cfg153 bdk_pciercx_cfg153_t;
+
+static inline uint64_t BDK_PCIERCX_CFG153(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG153(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000268ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG153", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG153(a) bdk_pciercx_cfg153_t
+#define bustype_BDK_PCIERCX_CFG153(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG153(a) "PCIERCX_CFG153"
+#define busnum_BDK_PCIERCX_CFG153(a) (a)
+#define arguments_BDK_PCIERCX_CFG153(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg154
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L1LTSSM Register
+ * This register contains the one hundred fifty-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg154
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg154_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ltssm_var : 16; /**< [ 31: 16](RO/H) LTSSM variable.
+ Indicates internal LTSSM variables defined in the PCI
+ Express base specification.
+ 0x0 = directed_speed change.
+ 0x1 = changed_speed_recovery.
+ 0x2 = successful_speed_negotiation.
+ 0x3 = upconfigure_capable; Set to 1 if both ports advertised
+ the UpConfigure capability in the last Config.Complete.
+ 0x4 = select_deemphasis.
+ 0x5 = start_equalization_w_preset.
+ 0x6 = equalization_done_8GT_data_rate.
+ 0x7 = equalization_done_16GT_data_rate.
+ 0x8-0xF = idle_to_rlock_transitioned. */
+ uint32_t lane_rev : 1; /**< [ 15: 15](RO/H) Lane reversal operation.
+ Receiver detected lane reversal. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t pipe_pwr_dwn : 3; /**< [ 10: 8](RO/H) PIPE:PowerDown.
+ Indicates PIPE PowerDown signal. */
+ uint32_t framing_err : 1; /**< [ 7: 7](R/W1C) Framing error.
+ Indicates framing error detection status. */
+ uint32_t framing_err_ptr : 7; /**< [ 6: 0](RO) First framing error pointer.
+ Identifies the first framing error using the following
+ encoding. The field contents are only valid value when
+ FRAMING_ERR =1.
+
+ Received unexpected framing token
+ 0x1 = When non-STP/SDP/IDL token was received and it
+ was not in TLP/DLLP reception.
+ 0x02 = When current token was not a valid EDB token and
+ previous token was an EDB. (128/256 bit core only).
+ 0x03 = When SDP token was received but not expected.
+ 0x04 = When STP token was received but not expected.
+ 0x05 = When EDS token was expected but not received or
+ whenever an EDS token was received but not expected.
+ 0x06 = When a framing error was detected in the deskew
+ block while a packet has been in progress in token_finder.
+ Received Unexpected STP Token
+ 0x11 = When framing CRC in STP token did not match.
+ 0x12 = When framing parity in STP token did not match.
+ 0x13 = When framing TLP length in STP token was
+ smaller than 5 DWORDs.
+
+ Received unexpected block
+ 0x21 = When receiving an OS block following SDS in datastream state.n.
+ 0x22 = When data block followed by OS block different
+ from SKP, EI, EIE in Datastream state.
+ 0x23 = When block with an undefined block type in datastream state.
+ 0x24 = When data stream without data over three cycles in datastream state.
+ 0x25 = When OS block during data stream in datastream state.
+ 0x26 = When RxStatus error was detected in datastream state.
+ 0x27 = When not all active lanes receiving SKP OS starting
+ at same cycle time in SKPOS state.
+ 0x28 = When a 2-block timeout occurs for SKP OS in SKPOS state.
+ 0x29 = When receiving consecutive OS blocks within a data stream in SKPOS state.n.
+ 0x2A = When Phy status error was detected in SKPOS state.
+ 0x2B = When not all active lanes receiving EIOS starting at
+ same cycle time in EIOS state.
+ 0x2C = When at least one symbol from the first 4 symbols
+ is not EIOS Symbol in EIOS state (CX_NB=2 only).
+ 0x2D = When not all active lanes receiving EIEOS starting
+ at same cycle time in EIEOS state.
+ 0x2E = When not full 16 eieos symbols are received in EIEOS state.
+
+ All other values not listed above are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t framing_err_ptr : 7; /**< [ 6: 0](RO) First framing error pointer.
+ Identifies the first framing error using the following
+ encoding. The field contents are only valid value when
+ FRAMING_ERR =1.
+
+ Received unexpected framing token
+ 0x1 = When non-STP/SDP/IDL token was received and it
+ was not in TLP/DLLP reception.
+ 0x02 = When current token was not a valid EDB token and
+ previous token was an EDB. (128/256 bit core only).
+ 0x03 = When SDP token was received but not expected.
+ 0x04 = When STP token was received but not expected.
+ 0x05 = When EDS token was expected but not received or
+ whenever an EDS token was received but not expected.
+ 0x06 = When a framing error was detected in the deskew
+ block while a packet has been in progress in token_finder.
+ Received Unexpected STP Token
+ 0x11 = When framing CRC in STP token did not match.
+ 0x12 = When framing parity in STP token did not match.
+ 0x13 = When framing TLP length in STP token was
+ smaller than 5 DWORDs.
+
+ Received unexpected block
+ 0x21 = When receiving an OS block following SDS in datastream state.n.
+ 0x22 = When data block followed by OS block different
+ from SKP, EI, EIE in Datastream state.
+ 0x23 = When block with an undefined block type in datastream state.
+ 0x24 = When data stream without data over three cycles in datastream state.
+ 0x25 = When OS block during data stream in datastream state.
+ 0x26 = When RxStatus error was detected in datastream state.
+ 0x27 = When not all active lanes receiving SKP OS starting
+ at same cycle time in SKPOS state.
+ 0x28 = When a 2-block timeout occurs for SKP OS in SKPOS state.
+ 0x29 = When receiving consecutive OS blocks within a data stream in SKPOS state.n.
+ 0x2A = When Phy status error was detected in SKPOS state.
+ 0x2B = When not all active lanes receiving EIOS starting at
+ same cycle time in EIOS state.
+ 0x2C = When at least one symbol from the first 4 symbols
+ is not EIOS Symbol in EIOS state (CX_NB=2 only).
+ 0x2D = When not all active lanes receiving EIEOS starting
+ at same cycle time in EIEOS state.
+ 0x2E = When not full 16 eieos symbols are received in EIEOS state.
+
+ All other values not listed above are reserved. */
+ uint32_t framing_err : 1; /**< [ 7: 7](R/W1C) Framing error.
+ Indicates framing error detection status. */
+ uint32_t pipe_pwr_dwn : 3; /**< [ 10: 8](RO/H) PIPE:PowerDown.
+ Indicates PIPE PowerDown signal. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t lane_rev : 1; /**< [ 15: 15](RO/H) Lane reversal operation.
+ Receiver detected lane reversal. */
+ uint32_t ltssm_var : 16; /**< [ 31: 16](RO/H) LTSSM variable.
+ Indicates internal LTSSM variables defined in the PCI
+ Express base specification.
+ 0x0 = directed_speed change.
+ 0x1 = changed_speed_recovery.
+ 0x2 = successful_speed_negotiation.
+ 0x3 = upconfigure_capable; Set to 1 if both ports advertised
+ the UpConfigure capability in the last Config.Complete.
+ 0x4 = select_deemphasis.
+ 0x5 = start_equalization_w_preset.
+ 0x6 = equalization_done_8GT_data_rate.
+ 0x7 = equalization_done_16GT_data_rate.
+ 0x8-0xF = idle_to_rlock_transitioned. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg154_s cn; */
+};
+typedef union bdk_pciercx_cfg154 bdk_pciercx_cfg154_t;
+
+static inline uint64_t BDK_PCIERCX_CFG154(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG154(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000026cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG154", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG154(a) bdk_pciercx_cfg154_t
+#define bustype_BDK_PCIERCX_CFG154(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG154(a) "PCIERCX_CFG154"
+#define busnum_BDK_PCIERCX_CFG154(a) (a)
+#define arguments_BDK_PCIERCX_CFG154(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg155
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status PM Register
+ * This register contains the one hundred fifty-sixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg155
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg155_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t latched_nfts : 8; /**< [ 23: 16](RO/H) Latched N_FTS.
+ Indicates the value of N_FTS in the received TS ordered
+ sets from the link partner. */
+ uint32_t l1sub_state : 3; /**< [ 15: 13](RO/H) Indicates the internal L1Sub state machine state.
+ Internal:
+ 0x0 = Idle state.
+ 0x1 = Wait for aux_clk_active.
+ 0x2 = Wait for pclkack.
+ 0x3 = Wait for clkreq.
+ 0x4 = Check clkreq_in_n is de-asserted for t_power_off time.
+ 0x5 = L1 substate, turn off txcommonmode circuits (L1.2 only)
+ and rx electrical idle detection circuits.
+ 0x6 = Locally/remotely initiated exit, assert pclkreq, wait for pclkack.
+ 0x7 = Wait for pclkack when aborting an attempt to enter L1_N. */
+ uint32_t pme_rsnd_flag : 1; /**< [ 12: 12](RO) PME re-send flag.
+ When the DUT sends a PM_PME message TLP, the DUT
+ sets PME_Status bit. If host software does not clear
+ PME_Status bit for 100ms (+50%/-5%), the DUT resends the
+ PM_PME message. This bit indicates that a PM_PME was
+ resent. */
+ uint32_t int_pm_sstate : 4; /**< [ 11: 8](RO/H) Internal PM state (slave).
+ Indicates internal state machine of power management
+ slave controller.
+ 0x00 = S_IDLE.
+ 0x01 = S_RESPOND_NAK.
+ 0x02 = S_BLOCK_TLP.
+ 0x03 = S_WAIT_LAST_TLP_ACK.
+ 0x04 = S_WAIT_EIDLE.
+ 0x08 = S_LINK_ENTR_L1.
+ 0x09 = S_L1.
+ 0x0A = S_L1_EXIT.
+ 0x0B = S_L23RDY.
+ 0x0C = S_LINK_ENTR_L23.
+ 0x0D = S_L23RDY_WAIT4ALIVE.
+ 0x0F = S_L23RDY_WAIT4IDLE.
+ 0x10 = S_WAIT_LAST_PMDLLP.
+ 0x10-0x1F = Reserved. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t int_pm_mstate : 5; /**< [ 4: 0](RO/H) Internal PM state (master).
+ Indicates internal state machine of power management
+ master controller.
+ 0x00 = IDLE.
+ 0x01 = L0.
+ 0x02 = L0S.
+ 0x03 = ENTER_L0S.
+ 0x04 = L0S_EXIT.
+ 0x08 = L1.
+ 0x09 = L1_BLOCK_TLP.
+ 0x0A = L1_WAIT_LAST_TLP_ACK.
+ 0x0B = L1_WAIT_PMDLLP_ACK.
+ 0x0C = L1_LINK_ENTR_L1.
+ 0x0D = L1_EXIT.
+ 0x0F = PREP_4L1.
+ 0x10 = L23_BLOCK_TLP.
+ 0x11 = L23_WAIT_LAST_TLP_ACK.
+ 0x12 = L23_WAIT_PMDLLP_ACK.
+ 0x13 = L23_ENTR_L23.
+ 0x14 = L23RDY.
+ 0x15 = PREP_4L23.
+ 0x16 = L23RDY_WAIT4ALIVE.
+ 0x17 = L0S_BLOCK_TLP.
+ 0x18 = WAIT_LAST_PMDLLP.
+ 0x19 = WAIT_DSTATE_UPDATE.
+ 0x20-0x1F = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t int_pm_mstate : 5; /**< [ 4: 0](RO/H) Internal PM state (master).
+ Indicates internal state machine of power management
+ master controller.
+ 0x00 = IDLE.
+ 0x01 = L0.
+ 0x02 = L0S.
+ 0x03 = ENTER_L0S.
+ 0x04 = L0S_EXIT.
+ 0x08 = L1.
+ 0x09 = L1_BLOCK_TLP.
+ 0x0A = L1_WAIT_LAST_TLP_ACK.
+ 0x0B = L1_WAIT_PMDLLP_ACK.
+ 0x0C = L1_LINK_ENTR_L1.
+ 0x0D = L1_EXIT.
+ 0x0F = PREP_4L1.
+ 0x10 = L23_BLOCK_TLP.
+ 0x11 = L23_WAIT_LAST_TLP_ACK.
+ 0x12 = L23_WAIT_PMDLLP_ACK.
+ 0x13 = L23_ENTR_L23.
+ 0x14 = L23RDY.
+ 0x15 = PREP_4L23.
+ 0x16 = L23RDY_WAIT4ALIVE.
+ 0x17 = L0S_BLOCK_TLP.
+ 0x18 = WAIT_LAST_PMDLLP.
+ 0x19 = WAIT_DSTATE_UPDATE.
+ 0x20-0x1F = Reserved. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t int_pm_sstate : 4; /**< [ 11: 8](RO/H) Internal PM state (slave).
+ Indicates internal state machine of power management
+ slave controller.
+ 0x00 = S_IDLE.
+ 0x01 = S_RESPOND_NAK.
+ 0x02 = S_BLOCK_TLP.
+ 0x03 = S_WAIT_LAST_TLP_ACK.
+ 0x04 = S_WAIT_EIDLE.
+ 0x08 = S_LINK_ENTR_L1.
+ 0x09 = S_L1.
+ 0x0A = S_L1_EXIT.
+ 0x0B = S_L23RDY.
+ 0x0C = S_LINK_ENTR_L23.
+ 0x0D = S_L23RDY_WAIT4ALIVE.
+ 0x0F = S_L23RDY_WAIT4IDLE.
+ 0x10 = S_WAIT_LAST_PMDLLP.
+ 0x10-0x1F = Reserved. */
+ uint32_t pme_rsnd_flag : 1; /**< [ 12: 12](RO) PME re-send flag.
+ When the DUT sends a PM_PME message TLP, the DUT
+ sets PME_Status bit. If host software does not clear
+ PME_Status bit for 100ms (+50%/-5%), the DUT resends the
+ PM_PME message. This bit indicates that a PM_PME was
+ resent. */
+ uint32_t l1sub_state : 3; /**< [ 15: 13](RO/H) Indicates the internal L1Sub state machine state.
+ Internal:
+ 0x0 = Idle state.
+ 0x1 = Wait for aux_clk_active.
+ 0x2 = Wait for pclkack.
+ 0x3 = Wait for clkreq.
+ 0x4 = Check clkreq_in_n is de-asserted for t_power_off time.
+ 0x5 = L1 substate, turn off txcommonmode circuits (L1.2 only)
+ and rx electrical idle detection circuits.
+ 0x6 = Locally/remotely initiated exit, assert pclkreq, wait for pclkack.
+ 0x7 = Wait for pclkack when aborting an attempt to enter L1_N. */
+ uint32_t latched_nfts : 8; /**< [ 23: 16](RO/H) Latched N_FTS.
+ Indicates the value of N_FTS in the received TS ordered
+ sets from the link partner. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg155_s cn; */
+};
+typedef union bdk_pciercx_cfg155 bdk_pciercx_cfg155_t;
+
+static inline uint64_t BDK_PCIERCX_CFG155(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG155(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000270ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG155", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG155(a) bdk_pciercx_cfg155_t
+#define bustype_BDK_PCIERCX_CFG155(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG155(a) "PCIERCX_CFG155"
+#define busnum_BDK_PCIERCX_CFG155(a) (a)
+#define arguments_BDK_PCIERCX_CFG155(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg156
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L2 Register
+ * This register contains the one hundred fifty-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg156
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg156_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t fc_init2 : 1; /**< [ 27: 27](RO) FC_INIT2. Indicates the core is in FC_INIT2(VC0) state. */
+ uint32_t fc_init1 : 1; /**< [ 26: 26](RO) FC_INIT1. Indicates the core is in FC_INIT1(VC0) state. */
+ uint32_t dlcmsm : 2; /**< [ 25: 24](RO/H) DLCMSM.
+ Indicates the current DLCMSM.
+ 0x0 = DL_INACTIVE.
+ 0x1 = DL_FC_INIT.
+ 0x2 = Reserved.
+ 0x3 = DL_ACTIVE. */
+ uint32_t rx_ack_seq_no : 12; /**< [ 23: 12](RO/H) RX ACK sequence number.
+ Indicates ACKD_SEQ which is updated by receiving
+ ACK/NAK DLLP. */
+ uint32_t tx_ack_seq_no : 12; /**< [ 11: 0](RO/H) TX ACK sequence number.
+ Indicates next transmit sequence number for transmit TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tx_ack_seq_no : 12; /**< [ 11: 0](RO/H) TX ACK sequence number.
+ Indicates next transmit sequence number for transmit TLP. */
+ uint32_t rx_ack_seq_no : 12; /**< [ 23: 12](RO/H) RX ACK sequence number.
+ Indicates ACKD_SEQ which is updated by receiving
+ ACK/NAK DLLP. */
+ uint32_t dlcmsm : 2; /**< [ 25: 24](RO/H) DLCMSM.
+ Indicates the current DLCMSM.
+ 0x0 = DL_INACTIVE.
+ 0x1 = DL_FC_INIT.
+ 0x2 = Reserved.
+ 0x3 = DL_ACTIVE. */
+ uint32_t fc_init1 : 1; /**< [ 26: 26](RO) FC_INIT1. Indicates the core is in FC_INIT1(VC0) state. */
+ uint32_t fc_init2 : 1; /**< [ 27: 27](RO) FC_INIT2. Indicates the core is in FC_INIT2(VC0) state. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg156_s cn; */
+};
+typedef union bdk_pciercx_cfg156 bdk_pciercx_cfg156_t;
+
+static inline uint64_t BDK_PCIERCX_CFG156(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG156(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000274ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG156", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG156(a) bdk_pciercx_cfg156_t
+#define bustype_BDK_PCIERCX_CFG156(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG156(a) "PCIERCX_CFG156"
+#define busnum_BDK_PCIERCX_CFG156(a) (a)
+#define arguments_BDK_PCIERCX_CFG156(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg157
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L2 Register
+ * This register contains the one hundred fifty-ninth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg157
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg157_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t credit_data1 : 12; /**< [ 31: 20](RO/H) Credit data 1.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit allocated value.
+ TX = Credit limit value. This value is valid when DLCMSM=0x3(DL_ACTIVE). */
+ uint32_t credit_data0 : 12; /**< [ 19: 8](RO/H) Credit data 0.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit received value.
+ TX = Credit consumed value. */
+ uint32_t reserved_7 : 1;
+ uint32_t credit_sel_hd : 1; /**< [ 6: 6](R/W) Credit select (HeaderData).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and
+ [CREDIT_SEL_TLP_TYPE] viewport-select fields determines
+ that data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = Header credit.
+ 0x1 = Data credit. */
+ uint32_t credit_sel_tlp_type : 2; /**< [ 5: 4](R/W) Credit select (TLP Type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and [CREDIT_SEL_HD]
+ viewport-select fields determines that data that is returned
+ by the [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = Posted.
+ 0x1 = Non-posted.
+ 0x2 = Completion.
+ 0x3 = Reserved. */
+ uint32_t credit_sel_credit_type : 1; /**< [ 3: 3](R/W) Credit select (credit type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_TLP_TYPE], and [CREDIT_SEL_HD] viewport-select
+ fields determines that data that is returned by the
+ [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = RX.
+ 0x1 = TX. */
+ uint32_t credit_sel_vc : 3; /**< [ 2: 0](R/W) Credit select (VC).
+ This field in conjunction with the
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields determines that
+ data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = VC0.
+ 0x1 = VC1.
+ 0x2 = VC2.
+ _ ...
+ 0x7 = VC7. */
+#else /* Word 0 - Little Endian */
+ uint32_t credit_sel_vc : 3; /**< [ 2: 0](R/W) Credit select (VC).
+ This field in conjunction with the
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields determines that
+ data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = VC0.
+ 0x1 = VC1.
+ 0x2 = VC2.
+ _ ...
+ 0x7 = VC7. */
+ uint32_t credit_sel_credit_type : 1; /**< [ 3: 3](R/W) Credit select (credit type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_TLP_TYPE], and [CREDIT_SEL_HD] viewport-select
+ fields determines that data that is returned by the
+ [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = RX.
+ 0x1 = TX. */
+ uint32_t credit_sel_tlp_type : 2; /**< [ 5: 4](R/W) Credit select (TLP Type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and [CREDIT_SEL_HD]
+ viewport-select fields determines that data that is returned
+ by the [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = Posted.
+ 0x1 = Non-posted.
+ 0x2 = Completion.
+ 0x3 = Reserved. */
+ uint32_t credit_sel_hd : 1; /**< [ 6: 6](R/W) Credit select (HeaderData).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and
+ [CREDIT_SEL_TLP_TYPE] viewport-select fields determines
+ that data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = Header credit.
+ 0x1 = Data credit. */
+ uint32_t reserved_7 : 1;
+ uint32_t credit_data0 : 12; /**< [ 19: 8](RO/H) Credit data 0.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit received value.
+ TX = Credit consumed value. */
+ uint32_t credit_data1 : 12; /**< [ 31: 20](RO/H) Credit data 1.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit allocated value.
+ TX = Credit limit value. This value is valid when DLCMSM=0x3(DL_ACTIVE). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg157_s cn; */
+};
+typedef union bdk_pciercx_cfg157 bdk_pciercx_cfg157_t;
+
+static inline uint64_t BDK_PCIERCX_CFG157(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG157(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000278ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG157", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG157(a) bdk_pciercx_cfg157_t
+#define bustype_BDK_PCIERCX_CFG157(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG157(a) "PCIERCX_CFG157"
+#define busnum_BDK_PCIERCX_CFG157(a) (a)
+#define arguments_BDK_PCIERCX_CFG157(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg158
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L3 Register
+ * This register contains the one hundred fifty-ninth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg158
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg158_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t mftlp_status : 1; /**< [ 7: 7](R/W1C) Malformed TLP status.
+ Indicates malformed TLP has occurred. */
+ uint32_t mftlp_ptr : 7; /**< [ 6: 0](RO) First malformed TLP error pointer.
+ Indicates the element of the received first malformed TLP.
+ This pointer is validated by [MFTLP_STATUS].
+ 0x01 = AtomicOp address alignment.
+ 0x02 = AtomicOp operand.
+ 0x03 = AtomicOp byte enable.
+ 0x04 = TLP length miss match.
+ 0x05 = Max payload size.
+ 0x06 = Message TLP without TC0.
+ 0x07 = Invalid TC.
+ 0x08 = Unexpected route bit in message TLP.
+ 0x09 = Unexpected CRS status in completion TLP.
+ 0x0A = Byte enable.
+ 0x0B = Memory address 4KB boundary.
+ 0x0C = TLP prefix rules.
+ 0x0D = Translation request rules.
+ 0x0E = Invalid TLP type.
+ 0x0F = Completion rules.
+ 0x10-0x7E = Reserved.
+ 0x7F = Application. */
+#else /* Word 0 - Little Endian */
+ uint32_t mftlp_ptr : 7; /**< [ 6: 0](RO) First malformed TLP error pointer.
+ Indicates the element of the received first malformed TLP.
+ This pointer is validated by [MFTLP_STATUS].
+ 0x01 = AtomicOp address alignment.
+ 0x02 = AtomicOp operand.
+ 0x03 = AtomicOp byte enable.
+ 0x04 = TLP length miss match.
+ 0x05 = Max payload size.
+ 0x06 = Message TLP without TC0.
+ 0x07 = Invalid TC.
+ 0x08 = Unexpected route bit in message TLP.
+ 0x09 = Unexpected CRS status in completion TLP.
+ 0x0A = Byte enable.
+ 0x0B = Memory address 4KB boundary.
+ 0x0C = TLP prefix rules.
+ 0x0D = Translation request rules.
+ 0x0E = Invalid TLP type.
+ 0x0F = Completion rules.
+ 0x10-0x7E = Reserved.
+ 0x7F = Application. */
+ uint32_t mftlp_status : 1; /**< [ 7: 7](R/W1C) Malformed TLP status.
+ Indicates malformed TLP has occurred. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg158_s cn; */
+};
+typedef union bdk_pciercx_cfg158 bdk_pciercx_cfg158_t;
+
+static inline uint64_t BDK_PCIERCX_CFG158(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG158(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000027cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG158", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG158(a) bdk_pciercx_cfg158_t
+#define bustype_BDK_PCIERCX_CFG158(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG158(a) "PCIERCX_CFG158"
+#define busnum_BDK_PCIERCX_CFG158(a) (a)
+#define arguments_BDK_PCIERCX_CFG158(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg161
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 1 Register
+ * This register contains the one hundred sixty-second 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg161
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg161_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t fom_target : 8; /**< [ 31: 24](R/W) FOM target.
+ Indicates figure of merit target criteria value of EQ
+ master (DSP in EQ Phase3/USP in EQ Phase2).
+ This field is only valid when [GEN3_EQ_FB_MODE] is
+ 0x1 (Figure Of Merit). */
+ uint32_t fom_target_en : 1; /**< [ 23: 23](R/W) FOM target enable.
+ Enables the FOM_TARGET fields. */
+ uint32_t reserved_18_22 : 5;
+ uint32_t eval_interval_time : 2; /**< [ 17: 16](R/W) Eval interval time.
+ Indicates interval time of RxEqEval assertion.
+ 0x0 = 500ns.
+ 0x1 = 1us.
+ 0x2 = 2us.
+ 0x3 = 4us.
+
+ This field is used for EQ master (DSP in EQ Phase3/USP in
+ EQ Phase2). */
+ uint32_t reserved_10_15 : 6;
+ uint32_t ext_eq_timeout : 2; /**< [ 9: 8](R/W) Extends EQ Phase2/3 Timeout.
+ This field is used when the ltssm is in Recovery.EQ2/3.
+ When this field is set, the value of the EQ2/3 timeout is
+ extended.
+
+ EQ Master (DSP in EQ Phase 3/USP in EQ Phaase2)
+ 0x0 = 24ms (default).
+ 0x1 = 48ms
+ 0x2 = 240ms.
+ 0x3 = No timeout.
+
+ EQ Slave (DSP in EQ Phase 2/USP in EQ Phaase3)
+ 0x0 = 32ms (default).
+ 0x1 = 56ms
+ 0x2 = 248ms.
+ 0x3 = No timeout. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t eq_rate_sel : 1; /**< [ 4: 4](R/W) EQ status rate select.
+ Setting this field in conjunction with [EQ_LANE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = 8.0GT/s Speed
+ 0x1 = 16.0GT/s Speed (Not supported). */
+ uint32_t eq_lane_sel : 4; /**< [ 3: 0](R/W) EQ status lane select.
+ Setting this field in conjunction with [EQ_RATE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+ _ ...
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_lane_sel : 4; /**< [ 3: 0](R/W) EQ status lane select.
+ Setting this field in conjunction with [EQ_RATE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+ _ ...
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+ uint32_t eq_rate_sel : 1; /**< [ 4: 4](R/W) EQ status rate select.
+ Setting this field in conjunction with [EQ_LANE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = 8.0GT/s Speed
+ 0x1 = 16.0GT/s Speed (Not supported). */
+ uint32_t reserved_5_7 : 3;
+ uint32_t ext_eq_timeout : 2; /**< [ 9: 8](R/W) Extends EQ Phase2/3 Timeout.
+ This field is used when the ltssm is in Recovery.EQ2/3.
+ When this field is set, the value of the EQ2/3 timeout is
+ extended.
+
+ EQ Master (DSP in EQ Phase 3/USP in EQ Phaase2)
+ 0x0 = 24ms (default).
+ 0x1 = 48ms
+ 0x2 = 240ms.
+ 0x3 = No timeout.
+
+ EQ Slave (DSP in EQ Phase 2/USP in EQ Phaase3)
+ 0x0 = 32ms (default).
+ 0x1 = 56ms
+ 0x2 = 248ms.
+ 0x3 = No timeout. */
+ uint32_t reserved_10_15 : 6;
+ uint32_t eval_interval_time : 2; /**< [ 17: 16](R/W) Eval interval time.
+ Indicates interval time of RxEqEval assertion.
+ 0x0 = 500ns.
+ 0x1 = 1us.
+ 0x2 = 2us.
+ 0x3 = 4us.
+
+ This field is used for EQ master (DSP in EQ Phase3/USP in
+ EQ Phase2). */
+ uint32_t reserved_18_22 : 5;
+ uint32_t fom_target_en : 1; /**< [ 23: 23](R/W) FOM target enable.
+ Enables the FOM_TARGET fields. */
+ uint32_t fom_target : 8; /**< [ 31: 24](R/W) FOM target.
+ Indicates figure of merit target criteria value of EQ
+ master (DSP in EQ Phase3/USP in EQ Phase2).
+ This field is only valid when [GEN3_EQ_FB_MODE] is
+ 0x1 (Figure Of Merit). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg161_s cn; */
+};
+typedef union bdk_pciercx_cfg161 bdk_pciercx_cfg161_t;
+
+static inline uint64_t BDK_PCIERCX_CFG161(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG161(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000288ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG161", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG161(a) bdk_pciercx_cfg161_t
+#define bustype_BDK_PCIERCX_CFG161(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG161(a) "PCIERCX_CFG161"
+#define busnum_BDK_PCIERCX_CFG161(a) (a)
+#define arguments_BDK_PCIERCX_CFG161(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg162
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 2 Register
+ * This register contains the one hundred sixty-third 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg162
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg162_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t force_loc_txpre_en : 1; /**< [ 30: 30](R/W) Force local transmitter preset enable.
+ Enables the FORCE_LOCAL_TX_PRESET field. */
+ uint32_t force_loc_rxhint_en : 1; /**< [ 29: 29](R/W) Force local receiver preset hint enable.
+ Enables the FORCE_LOCAL_RX_HINT field. */
+ uint32_t force_loc_txcoef_en : 1; /**< [ 28: 28](R/W) Force local transmitter coefficient enable.
+ Enables the following fields:
+ FORCE_LOCAL_TX_PRE_CURSOR.
+ FORCE_LOCAL_TX_CURSOR.
+ FORCE_LOCAL_TX_POST_CURSOR. */
+ uint32_t force_loc_txpre : 4; /**< [ 27: 24](R/W) Force local transmitter preset.
+ Indicates initial preset value of USP in EQ slave (EQ Phase2)
+ instead of receiving EQ TS2. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t force_loc_rxhint : 3; /**< [ 20: 18](R/W) Force local receiver preset hint.
+ Indicates the RxPresetHint value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of received or set value. */
+ uint32_t force_loc_txpost_cur : 6; /**< [ 17: 12](R/W) Force local transmitter postcursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_tx_cur : 6; /**< [ 11: 6](R/W) Force local transmitter cursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_txpre_cur : 6; /**< [ 5: 0](R/W) Force local transmitter precursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_loc_txpre_cur : 6; /**< [ 5: 0](R/W) Force local transmitter precursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_tx_cur : 6; /**< [ 11: 6](R/W) Force local transmitter cursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_txpost_cur : 6; /**< [ 17: 12](R/W) Force local transmitter postcursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_rxhint : 3; /**< [ 20: 18](R/W) Force local receiver preset hint.
+ Indicates the RxPresetHint value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of received or set value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t force_loc_txpre : 4; /**< [ 27: 24](R/W) Force local transmitter preset.
+ Indicates initial preset value of USP in EQ slave (EQ Phase2)
+ instead of receiving EQ TS2. */
+ uint32_t force_loc_txcoef_en : 1; /**< [ 28: 28](R/W) Force local transmitter coefficient enable.
+ Enables the following fields:
+ FORCE_LOCAL_TX_PRE_CURSOR.
+ FORCE_LOCAL_TX_CURSOR.
+ FORCE_LOCAL_TX_POST_CURSOR. */
+ uint32_t force_loc_rxhint_en : 1; /**< [ 29: 29](R/W) Force local receiver preset hint enable.
+ Enables the FORCE_LOCAL_RX_HINT field. */
+ uint32_t force_loc_txpre_en : 1; /**< [ 30: 30](R/W) Force local transmitter preset enable.
+ Enables the FORCE_LOCAL_TX_PRESET field. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg162_s cn; */
+};
+typedef union bdk_pciercx_cfg162 bdk_pciercx_cfg162_t;
+
+static inline uint64_t BDK_PCIERCX_CFG162(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG162(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000028cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG162", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG162(a) bdk_pciercx_cfg162_t
+#define bustype_BDK_PCIERCX_CFG162(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG162(a) "PCIERCX_CFG162"
+#define busnum_BDK_PCIERCX_CFG162(a) (a)
+#define arguments_BDK_PCIERCX_CFG162(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg163
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 3 Register
+ * This register contains the one hundred sixty-forth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg163
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg163_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t force_rem_txcoef_en : 1; /**< [ 28: 28](R/W) Force remote transmitter coefficient enable as selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Enables the following fields:
+ FORCE_REMOTE_TX_PRE_CURSOR
+ FORCE_REMOTE_TX_CURSOR
+ FORCE_REMOTE_TX_POST_CURSOR */
+ uint32_t reserved_18_27 : 10;
+ uint32_t force_rem_txpost_cur : 6; /**< [ 17: 12](R/W) Force remote transmitter postcursor as selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_tx_cur : 6; /**< [ 11: 6](R/W) Force remote transmitter cursors selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_txpre_cur : 6; /**< [ 5: 0](RAZ) Force remote transmitter precursors selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_rem_txpre_cur : 6; /**< [ 5: 0](RAZ) Force remote transmitter precursors selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_tx_cur : 6; /**< [ 11: 6](R/W) Force remote transmitter cursors selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_txpost_cur : 6; /**< [ 17: 12](R/W) Force remote transmitter postcursor as selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t reserved_18_27 : 10;
+ uint32_t force_rem_txcoef_en : 1; /**< [ 28: 28](R/W) Force remote transmitter coefficient enable as selected by
+ PCIERC()_CFG161[EQ_LANE_SEL][RATE_SEL].
+ Enables the following fields:
+ FORCE_REMOTE_TX_PRE_CURSOR
+ FORCE_REMOTE_TX_CURSOR
+ FORCE_REMOTE_TX_POST_CURSOR */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg163_s cn; */
+};
+typedef union bdk_pciercx_cfg163 bdk_pciercx_cfg163_t;
+
+static inline uint64_t BDK_PCIERCX_CFG163(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG163(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000290ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG163", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG163(a) bdk_pciercx_cfg163_t
+#define bustype_BDK_PCIERCX_CFG163(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG163(a) "PCIERCX_CFG163"
+#define busnum_BDK_PCIERCX_CFG163(a) (a)
+#define arguments_BDK_PCIERCX_CFG163(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg165
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 1 Register
+ * This register contains the one hundred sixty-sixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg165
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg165_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t eq_reject_event : 1; /**< [ 7: 7](RO/H) EQ reject event.
+ Indicates that the core receives two consecutive TS1 OS
+ w/Reject=1b during EQ master phase (DSP in EQ
+ Phase3/USP in EQ Phase2). This bit is automatically cleared
+ when the core starts EQ master phase again. */
+ uint32_t eq_rulec_viol : 1; /**< [ 6: 6](RO/H) EQ rule C violation.
+ Indicates that coefficient rule C violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rule C
+ correspond to the rules c) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t eq_ruleb_viol : 1; /**< [ 5: 5](RO/H) EQ rule B violation.
+ Indicates that coefficients rule B violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules B
+ correspond to the rules b) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t eq_rulea_viol : 1; /**< [ 4: 4](RO/H) EQ rule A violation.
+ Indicates that coefficients rule A violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules A
+ correspond to the rules a) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t reserved_3 : 1;
+ uint32_t eq_conv_info : 2; /**< [ 2: 1](RO/H) EQ convergence info.
+ Indicates equalization convergence information.
+ 0x0 = Equalization is not attempted.
+ 0x1 = Equalization finished successfully.
+ 0x2 = Equalization finished unsuccessfully.
+ 0x3 = Reserved.
+ This bit is automatically cleared when the core starts EQ
+ master phase again. */
+ uint32_t eq_sequence : 1; /**< [ 0: 0](RO) EQ sequence.
+ Indicates that the core is starting the equalization sequence. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_sequence : 1; /**< [ 0: 0](RO) EQ sequence.
+ Indicates that the core is starting the equalization sequence. */
+ uint32_t eq_conv_info : 2; /**< [ 2: 1](RO/H) EQ convergence info.
+ Indicates equalization convergence information.
+ 0x0 = Equalization is not attempted.
+ 0x1 = Equalization finished successfully.
+ 0x2 = Equalization finished unsuccessfully.
+ 0x3 = Reserved.
+ This bit is automatically cleared when the core starts EQ
+ master phase again. */
+ uint32_t reserved_3 : 1;
+ uint32_t eq_rulea_viol : 1; /**< [ 4: 4](RO/H) EQ rule A violation.
+ Indicates that coefficients rule A violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules A
+ correspond to the rules a) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t eq_ruleb_viol : 1; /**< [ 5: 5](RO/H) EQ rule B violation.
+ Indicates that coefficients rule B violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules B
+ correspond to the rules b) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t eq_rulec_viol : 1; /**< [ 6: 6](RO/H) EQ rule C violation.
+ Indicates that coefficient rule C violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rule C
+ correspond to the rules c) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ Master phase again. */
+ uint32_t eq_reject_event : 1; /**< [ 7: 7](RO/H) EQ reject event.
+ Indicates that the core receives two consecutive TS1 OS
+ w/Reject=1b during EQ master phase (DSP in EQ
+ Phase3/USP in EQ Phase2). This bit is automatically cleared
+ when the core starts EQ master phase again. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg165_s cn; */
+};
+typedef union bdk_pciercx_cfg165 bdk_pciercx_cfg165_t;
+
+static inline uint64_t BDK_PCIERCX_CFG165(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG165(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000298ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG165", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG165(a) bdk_pciercx_cfg165_t
+#define bustype_BDK_PCIERCX_CFG165(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG165(a) "PCIERCX_CFG165"
+#define busnum_BDK_PCIERCX_CFG165(a) (a)
+#define arguments_BDK_PCIERCX_CFG165(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg166
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 2 Register
+ * This register contains the one hundred sixty-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg166
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg166_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t eq_loc_fom_val : 8; /**< [ 31: 24](RO/H) EQ local figure of merit.
+ Indicates local maximum figure of merit value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t eq_loc_rxhint : 3; /**< [ 20: 18](RO/H) EQ local receiver preset hint.
+ Indicates local receiver preset hint value. */
+ uint32_t eq_loc_post_cur : 6; /**< [ 17: 12](RO/H) EQ local postcursor.
+ Indicates local post cursor coefficient value. */
+ uint32_t eq_loc_cur : 6; /**< [ 11: 6](RO/H) EQ local cursor.
+ Indicates local cursor coefficient value. */
+ uint32_t eq_loc_pre_cur : 6; /**< [ 5: 0](RO/H) EQ local precursor.
+ Indicates local precursor coefficient value. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_loc_pre_cur : 6; /**< [ 5: 0](RO/H) EQ local precursor.
+ Indicates local precursor coefficient value. */
+ uint32_t eq_loc_cur : 6; /**< [ 11: 6](RO/H) EQ local cursor.
+ Indicates local cursor coefficient value. */
+ uint32_t eq_loc_post_cur : 6; /**< [ 17: 12](RO/H) EQ local postcursor.
+ Indicates local post cursor coefficient value. */
+ uint32_t eq_loc_rxhint : 3; /**< [ 20: 18](RO/H) EQ local receiver preset hint.
+ Indicates local receiver preset hint value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t eq_loc_fom_val : 8; /**< [ 31: 24](RO/H) EQ local figure of merit.
+ Indicates local maximum figure of merit value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg166_s cn; */
+};
+typedef union bdk_pciercx_cfg166 bdk_pciercx_cfg166_t;
+
+static inline uint64_t BDK_PCIERCX_CFG166(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG166(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000029cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG166", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG166(a) bdk_pciercx_cfg166_t
+#define bustype_BDK_PCIERCX_CFG166(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG166(a) "PCIERCX_CFG166"
+#define busnum_BDK_PCIERCX_CFG166(a) (a)
+#define arguments_BDK_PCIERCX_CFG166(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg167
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 3 Register
+ * This register contains the one hundred sixty-eighth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg167
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg167_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_30_31 : 2;
+ uint32_t eq_rem_fs : 6; /**< [ 29: 24](RO/H) EQ remote FS.
+ Indicates remote FS value. */
+ uint32_t eq_rem_lf : 6; /**< [ 23: 18](RO/H) EQ remote LF.
+ Indicates remote LF value. */
+ uint32_t eq_rem_post_cur : 6; /**< [ 17: 12](RO/H) EQ remote postcursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_cur : 6; /**< [ 11: 6](RO/H) EQ remote cursor.
+ Indicates remote cursor coefficient value. */
+ uint32_t eq_rem_pre_cur : 6; /**< [ 5: 0](RO/H) EQ remote precursor.
+ Indicates remote postcursor coefficient value. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_rem_pre_cur : 6; /**< [ 5: 0](RO/H) EQ remote precursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_cur : 6; /**< [ 11: 6](RO/H) EQ remote cursor.
+ Indicates remote cursor coefficient value. */
+ uint32_t eq_rem_post_cur : 6; /**< [ 17: 12](RO/H) EQ remote postcursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_lf : 6; /**< [ 23: 18](RO/H) EQ remote LF.
+ Indicates remote LF value. */
+ uint32_t eq_rem_fs : 6; /**< [ 29: 24](RO/H) EQ remote FS.
+ Indicates remote FS value. */
+ uint32_t reserved_30_31 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg167_s cn; */
+};
+typedef union bdk_pciercx_cfg167 bdk_pciercx_cfg167_t;
+
+static inline uint64_t BDK_PCIERCX_CFG167(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG167(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002a0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG167", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG167(a) bdk_pciercx_cfg167_t
+#define bustype_BDK_PCIERCX_CFG167(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG167(a) "PCIERCX_CFG167"
+#define busnum_BDK_PCIERCX_CFG167(a) (a)
+#define arguments_BDK_PCIERCX_CFG167(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg174
+ *
+ * PCIe RC Vendor RAS Data Path Protection Header Register
+ * This register contains the one hundred seventy-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg174
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg174_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the ACS extended capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset. Points to the ACS extended capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg174_s cn; */
+};
+typedef union bdk_pciercx_cfg174 bdk_pciercx_cfg174_t;
+
+static inline uint64_t BDK_PCIERCX_CFG174(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG174(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002b8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG174", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG174(a) bdk_pciercx_cfg174_t
+#define bustype_BDK_PCIERCX_CFG174(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG174(a) "PCIERCX_CFG174"
+#define busnum_BDK_PCIERCX_CFG174(a) (a)
+#define arguments_BDK_PCIERCX_CFG174(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg175
+ *
+ * PCIe RC RAS Data Path Extended Capability Register
+ * This register contains the one hundred seventy-sixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg175
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg175_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg175_s cn; */
+};
+typedef union bdk_pciercx_cfg175 bdk_pciercx_cfg175_t;
+
+static inline uint64_t BDK_PCIERCX_CFG175(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG175(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG175", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG175(a) bdk_pciercx_cfg175_t
+#define bustype_BDK_PCIERCX_CFG175(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG175(a) "PCIERCX_CFG175"
+#define busnum_BDK_PCIERCX_CFG175(a) (a)
+#define arguments_BDK_PCIERCX_CFG175(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg176
+ *
+ * PCIe RC RAS Data Path Error Protection Control Register
+ * This register contains the one hundred seventy-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg176
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg176_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t ep_dis_adm_rx : 1; /**< [ 22: 22](R/W) Error correction disable for ADM RX path. */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 21: 21](R/W) Error correction disable for layer 3 RX path. */
+ uint32_t ep_dis_l2_rx : 1; /**< [ 20: 20](R/W) Error correction disable for layer 2 RX path. */
+ uint32_t ep_dis_dma_rd : 1; /**< [ 19: 19](R/W) Error correction disable for DMA read (not supported). */
+ uint32_t ep_dis_axib_inbr : 1; /**< [ 18: 18](R/W) Error correction disable for AXI bridge inbound request path (not supported). */
+ uint32_t ep_dis_axib_inbc : 1; /**< [ 17: 17](R/W) Error correction disable for AXI bridge inbound completion composer (not supported). */
+ uint32_t ep_dis_rx : 1; /**< [ 16: 16](R/W) Global error correction disable for all RX layers. */
+ uint32_t reserved_7_15 : 9;
+ uint32_t ep_dis_adm_tx : 1; /**< [ 6: 6](R/W) Error correction disable for ADM TX path. */
+ uint32_t ep_dis_l3_tx : 1; /**< [ 5: 5](R/W) Error correction disable for layer 3 TX path. */
+ uint32_t ep_dis_l2_tx : 1; /**< [ 4: 4](R/W) Error correction disable for layer 2 TX path. */
+ uint32_t ep_dis_dma_wr : 1; /**< [ 3: 3](R/W) Error correction disable for DMA write (not supported). */
+ uint32_t ep_dis_axib_outb : 1; /**< [ 2: 2](R/W) Error correction disable for AXI bridge outbound request path (not supported). */
+ uint32_t ep_dis_axib_masc : 1; /**< [ 1: 1](R/W) Error correction disable for AXI bridge master completion buffer (not supported). */
+ uint32_t ep_dis_tx : 1; /**< [ 0: 0](R/W) Global error correction disable for all TX layers. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_tx : 1; /**< [ 0: 0](R/W) Global error correction disable for all TX layers. */
+ uint32_t ep_dis_axib_masc : 1; /**< [ 1: 1](R/W) Error correction disable for AXI bridge master completion buffer (not supported). */
+ uint32_t ep_dis_axib_outb : 1; /**< [ 2: 2](R/W) Error correction disable for AXI bridge outbound request path (not supported). */
+ uint32_t ep_dis_dma_wr : 1; /**< [ 3: 3](R/W) Error correction disable for DMA write (not supported). */
+ uint32_t ep_dis_l2_tx : 1; /**< [ 4: 4](R/W) Error correction disable for layer 2 TX path. */
+ uint32_t ep_dis_l3_tx : 1; /**< [ 5: 5](R/W) Error correction disable for layer 3 TX path. */
+ uint32_t ep_dis_adm_tx : 1; /**< [ 6: 6](R/W) Error correction disable for ADM TX path. */
+ uint32_t reserved_7_15 : 9;
+ uint32_t ep_dis_rx : 1; /**< [ 16: 16](R/W) Global error correction disable for all RX layers. */
+ uint32_t ep_dis_axib_inbc : 1; /**< [ 17: 17](R/W) Error correction disable for AXI bridge inbound completion composer (not supported). */
+ uint32_t ep_dis_axib_inbr : 1; /**< [ 18: 18](R/W) Error correction disable for AXI bridge inbound request path (not supported). */
+ uint32_t ep_dis_dma_rd : 1; /**< [ 19: 19](R/W) Error correction disable for DMA read (not supported). */
+ uint32_t ep_dis_l2_rx : 1; /**< [ 20: 20](R/W) Error correction disable for layer 2 RX path. */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 21: 21](R/W) Error correction disable for layer 3 RX path. */
+ uint32_t ep_dis_adm_rx : 1; /**< [ 22: 22](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg176_s cn; */
+};
+typedef union bdk_pciercx_cfg176 bdk_pciercx_cfg176_t;
+
+static inline uint64_t BDK_PCIERCX_CFG176(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG176(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG176", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG176(a) bdk_pciercx_cfg176_t
+#define bustype_BDK_PCIERCX_CFG176(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG176(a) "PCIERCX_CFG176"
+#define busnum_BDK_PCIERCX_CFG176(a) (a)
+#define arguments_BDK_PCIERCX_CFG176(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg177
+ *
+ * PCIe RC RAS Data Path Correctable Error Control Register
+ * This register contains the one hundred seventy-eighth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg177
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg177_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by CORR_CNT_SEL_REG) whose contents
+ can be read from the CFG114 register. You can
+ cycle this field value from 0 to 255 to access all counters. */
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine inbound (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t corr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all correctable error counters. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all correctable error counters. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t corr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine inbound (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by CORR_CNT_SEL_REG) whose contents
+ can be read from the CFG114 register. You can
+ cycle this field value from 0 to 255 to access all counters. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg177_s cn; */
+};
+typedef union bdk_pciercx_cfg177 bdk_pciercx_cfg177_t;
+
+static inline uint64_t BDK_PCIERCX_CFG177(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG177(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002c4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG177", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG177(a) bdk_pciercx_cfg177_t
+#define bustype_BDK_PCIERCX_CFG177(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG177(a) "PCIERCX_CFG177"
+#define busnum_BDK_PCIERCX_CFG177(a) (a)
+#define arguments_BDK_PCIERCX_CFG177(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg178
+ *
+ * PCIe RC RAS Data Path Correctable Error Report Register
+ * This register contains the one hundred seventy-ninth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg178
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg178_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in the CFG113CORR_CNT_SEL] register. */
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t corr_count : 8; /**< [ 7: 0](RO) Current corrected count for the selected counter. */
+#else /* Word 0 - Little Endian */
+ uint32_t corr_count : 8; /**< [ 7: 0](RO) Current corrected count for the selected counter. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in the CFG113CORR_CNT_SEL] register. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg178_s cn; */
+};
+typedef union bdk_pciercx_cfg178 bdk_pciercx_cfg178_t;
+
+static inline uint64_t BDK_PCIERCX_CFG178(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG178(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG178", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG178(a) bdk_pciercx_cfg178_t
+#define bustype_BDK_PCIERCX_CFG178(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG178(a) "PCIERCX_CFG178"
+#define busnum_BDK_PCIERCX_CFG178(a) (a)
+#define arguments_BDK_PCIERCX_CFG178(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg179
+ *
+ * PCIe RC RAS Data Path Uncorrectable Error Control Register
+ * This register contains the one hundred eighty 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg179
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg179_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [UCORR_CNT_SEL_REG]) whose contents
+ can be read from the CFG114 register. You can
+ cycle this field value from 0 to 255 to access all counters. */
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t ucorr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all uncorrectable error counters. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all uncorrectable error counters. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ucorr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [UCORR_CNT_SEL_REG]) whose contents
+ can be read from the CFG114 register. You can
+ cycle this field value from 0 to 255 to access all counters. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg179_s cn; */
+};
+typedef union bdk_pciercx_cfg179 bdk_pciercx_cfg179_t;
+
+static inline uint64_t BDK_PCIERCX_CFG179(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG179(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002ccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG179", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG179(a) bdk_pciercx_cfg179_t
+#define bustype_BDK_PCIERCX_CFG179(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG179(a) "PCIERCX_CFG179"
+#define busnum_BDK_PCIERCX_CFG179(a) (a)
+#define arguments_BDK_PCIERCX_CFG179(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg180
+ *
+ * PCIe RC RAS Data Path Uncorrectable Error Report Register
+ * This register contains the one hundred eighty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg180
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg180_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in the CFG113[ORR_CNT_SEL] register. */
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t ucorr_count : 8; /**< [ 7: 0](RO) Current uncorrected count for the selected counter. */
+#else /* Word 0 - Little Endian */
+ uint32_t ucorr_count : 8; /**< [ 7: 0](RO) Current uncorrected count for the selected counter. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in the CFG113[ORR_CNT_SEL] register. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg180_s cn; */
+};
+typedef union bdk_pciercx_cfg180 bdk_pciercx_cfg180_t;
+
+static inline uint64_t BDK_PCIERCX_CFG180(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG180(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002d0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG180", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG180(a) bdk_pciercx_cfg180_t
+#define bustype_BDK_PCIERCX_CFG180(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG180(a) "PCIERCX_CFG180"
+#define busnum_BDK_PCIERCX_CFG180(a) (a)
+#define arguments_BDK_PCIERCX_CFG180(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg181
+ *
+ * PCIe RC RAS Data Correctable Error Injection Control Register
+ * This register contains the one hundred eighty-second 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg181
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg181_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t err_inj_loc : 8; /**< [ 23: 16](R/W) Error injection location. Selects where error injection takes place. You
+ can cycle this field value from 0 to 255 to access all locations. */
+ uint32_t err_inj_cnt : 8; /**< [ 15: 8](R/W) Error injection count.
+ 0x0 = errors are injected in every TLP until [ERR_INJ_EN] is cleared.
+ 0x1 - 0xFF = number of errors injected. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t err_inj_type : 2; /**< [ 5: 4](R/W) Error injection type.
+ 0x0 = None.
+ 0x1 = 1-bit.
+ 0x2 = 2-bit.
+ 0x3 = Reserved. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t err_inj_en : 1; /**< [ 0: 0](R/W) Error injection global enable. When set, enables the error
+ insertion logic. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_inj_en : 1; /**< [ 0: 0](R/W) Error injection global enable. When set, enables the error
+ insertion logic. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t err_inj_type : 2; /**< [ 5: 4](R/W) Error injection type.
+ 0x0 = None.
+ 0x1 = 1-bit.
+ 0x2 = 2-bit.
+ 0x3 = Reserved. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t err_inj_cnt : 8; /**< [ 15: 8](R/W) Error injection count.
+ 0x0 = errors are injected in every TLP until [ERR_INJ_EN] is cleared.
+ 0x1 - 0xFF = number of errors injected. */
+ uint32_t err_inj_loc : 8; /**< [ 23: 16](R/W) Error injection location. Selects where error injection takes place. You
+ can cycle this field value from 0 to 255 to access all locations. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg181_s cn; */
+};
+typedef union bdk_pciercx_cfg181 bdk_pciercx_cfg181_t;
+
+static inline uint64_t BDK_PCIERCX_CFG181(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG181(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002d4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG181", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG181(a) bdk_pciercx_cfg181_t
+#define bustype_BDK_PCIERCX_CFG181(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG181(a) "PCIERCX_CFG181"
+#define busnum_BDK_PCIERCX_CFG181(a) (a)
+#define arguments_BDK_PCIERCX_CFG181(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg182
+ *
+ * PCIe RC RAS Data Correctable Error Location Register
+ * This register contains the one hundred eighty-third 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg182
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg182_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t loc_last_corr_err : 8; /**< [ 31: 24](RO) Location/ID of the last corrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+ uint32_t reg_last_corr_err : 4; /**< [ 23: 20](RO) Region of last corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t loc_first_corr_err : 8; /**< [ 15: 8](RO) Location/ID of the first corrected error within the region defined by
+ [REG_FIRST_CORR_ERR]. */
+ uint32_t reg_first_corr_err : 4; /**< [ 7: 4](RO) Region of first corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA write engine (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t reg_first_corr_err : 4; /**< [ 7: 4](RO) Region of first corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA write engine (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_first_corr_err : 8; /**< [ 15: 8](RO) Location/ID of the first corrected error within the region defined by
+ [REG_FIRST_CORR_ERR]. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t reg_last_corr_err : 4; /**< [ 23: 20](RO) Region of last corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_last_corr_err : 8; /**< [ 31: 24](RO) Location/ID of the last corrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg182_s cn; */
+};
+typedef union bdk_pciercx_cfg182 bdk_pciercx_cfg182_t;
+
+static inline uint64_t BDK_PCIERCX_CFG182(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG182(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002d8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG182", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG182(a) bdk_pciercx_cfg182_t
+#define bustype_BDK_PCIERCX_CFG182(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG182(a) "PCIERCX_CFG182"
+#define busnum_BDK_PCIERCX_CFG182(a) (a)
+#define arguments_BDK_PCIERCX_CFG182(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg183
+ *
+ * PCIe RC RAS Data Uncorrectable Error Location Register
+ * This register contains the one hundred eighty-fourth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg183
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg183_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t loc_last_ucorr_err : 8; /**< [ 31: 24](RO) Location/ID of the last uncorrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+ uint32_t reg_last_ucorr_err : 4; /**< [ 23: 20](RO) Region of last uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t loc_first_ucorr_err : 8; /**< [ 15: 8](RO) Location/ID of the first uncorrected error within the region defined by
+ REG_FIRST_CORR_ERR. */
+ uint32_t reg_first_ucorr_err : 4; /**< [ 7: 4](RO) Region of first uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t reg_first_ucorr_err : 4; /**< [ 7: 4](RO) Region of first uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_first_ucorr_err : 8; /**< [ 15: 8](RO) Location/ID of the first uncorrected error within the region defined by
+ REG_FIRST_CORR_ERR. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t reg_last_ucorr_err : 4; /**< [ 23: 20](RO) Region of last uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_last_ucorr_err : 8; /**< [ 31: 24](RO) Location/ID of the last uncorrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg183_s cn; */
+};
+typedef union bdk_pciercx_cfg183 bdk_pciercx_cfg183_t;
+
+static inline uint64_t BDK_PCIERCX_CFG183(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG183(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002dcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG183", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG183(a) bdk_pciercx_cfg183_t
+#define bustype_BDK_PCIERCX_CFG183(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG183(a) "PCIERCX_CFG183"
+#define busnum_BDK_PCIERCX_CFG183(a) (a)
+#define arguments_BDK_PCIERCX_CFG183(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg184
+ *
+ * PCIe RC RAS Data Error Mode Enable Register
+ * This register contains the one hundred eighty-fifth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg184
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg184_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_2_31 : 30;
+ uint32_t auto_lnk_dn_en : 1; /**< [ 1: 1](R/W) Set this bit to enable the core to bring the link down when RASDP error mode is entered.
+ [REG_LAST_CORR_ERR]. */
+ uint32_t err_mode_en : 1; /**< [ 0: 0](R/W) Set this bit to enable the core to enter RASDP error mode when it detects an uncorrectable error. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_mode_en : 1; /**< [ 0: 0](R/W) Set this bit to enable the core to enter RASDP error mode when it detects an uncorrectable error. */
+ uint32_t auto_lnk_dn_en : 1; /**< [ 1: 1](R/W) Set this bit to enable the core to bring the link down when RASDP error mode is entered.
+ [REG_LAST_CORR_ERR]. */
+ uint32_t reserved_2_31 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg184_s cn; */
+};
+typedef union bdk_pciercx_cfg184 bdk_pciercx_cfg184_t;
+
+static inline uint64_t BDK_PCIERCX_CFG184(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG184(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002e0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG184", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG184(a) bdk_pciercx_cfg184_t
+#define bustype_BDK_PCIERCX_CFG184(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG184(a) "PCIERCX_CFG184"
+#define busnum_BDK_PCIERCX_CFG184(a) (a)
+#define arguments_BDK_PCIERCX_CFG184(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg185
+ *
+ * PCIe RC RAS Data Error Mode Clear Register
+ * This register contains the one hundred eighty-sixth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg185
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg185_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t err_mode_clr : 1; /**< [ 0: 0](R/W1C) Set this bit to take the core out of RASDP error mode. The core will then report
+ uncorrectable
+ errors (through AER internal error reporting) and also stop nullifying/discarding TLPs. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_mode_clr : 1; /**< [ 0: 0](R/W1C) Set this bit to take the core out of RASDP error mode. The core will then report
+ uncorrectable
+ errors (through AER internal error reporting) and also stop nullifying/discarding TLPs. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg185_s cn; */
+};
+typedef union bdk_pciercx_cfg185 bdk_pciercx_cfg185_t;
+
+static inline uint64_t BDK_PCIERCX_CFG185(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG185(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002e4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG185", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG185(a) bdk_pciercx_cfg185_t
+#define bustype_BDK_PCIERCX_CFG185(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG185(a) "PCIERCX_CFG185"
+#define busnum_BDK_PCIERCX_CFG185(a) (a)
+#define arguments_BDK_PCIERCX_CFG185(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg186
+ *
+ * PCIe RC RAS RAM Address Corrected Error Register
+ * This register contains the one hundred eigth-seventh 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg186
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg186_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ram_idx_corr_err : 4; /**< [ 31: 28](RO) RAM index where a corrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_addr_corr_err : 27; /**< [ 26: 0](RO) RAM address where a corrected error has been detected. */
+#else /* Word 0 - Little Endian */
+ uint32_t ram_addr_corr_err : 27; /**< [ 26: 0](RO) RAM address where a corrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_idx_corr_err : 4; /**< [ 31: 28](RO) RAM index where a corrected error has been detected. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg186_s cn; */
+};
+typedef union bdk_pciercx_cfg186 bdk_pciercx_cfg186_t;
+
+static inline uint64_t BDK_PCIERCX_CFG186(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG186(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002e8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG186", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG186(a) bdk_pciercx_cfg186_t
+#define bustype_BDK_PCIERCX_CFG186(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG186(a) "PCIERCX_CFG186"
+#define busnum_BDK_PCIERCX_CFG186(a) (a)
+#define arguments_BDK_PCIERCX_CFG186(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg187
+ *
+ * PCIe RC RAS RAM Address Uncorrected Error Register
+ * This register contains the one hundred eighty-eighth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg187
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg187_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ram_idx_ucorr_err : 4; /**< [ 31: 28](RO) RAM index where a uncorrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_addr_ucorr_err : 27; /**< [ 26: 0](RO) RAM address where a uncorrected error has been detected. */
+#else /* Word 0 - Little Endian */
+ uint32_t ram_addr_ucorr_err : 27; /**< [ 26: 0](RO) RAM address where a uncorrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_idx_ucorr_err : 4; /**< [ 31: 28](RO) RAM index where a uncorrected error has been detected. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg187_s cn; */
+};
+typedef union bdk_pciercx_cfg187 bdk_pciercx_cfg187_t;
+
+static inline uint64_t BDK_PCIERCX_CFG187(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG187(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000002ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG187", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG187(a) bdk_pciercx_cfg187_t
+#define bustype_BDK_PCIERCX_CFG187(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG187(a) "PCIERCX_CFG187"
+#define busnum_BDK_PCIERCX_CFG187(a) (a)
+#define arguments_BDK_PCIERCX_CFG187(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg192
+ *
+ * PCIe RC PCI Express ACS Extended Capability Header Register
+ * This register contains the one hundred ninety-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg192
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg192_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg192_s cn; */
+};
+typedef union bdk_pciercx_cfg192 bdk_pciercx_cfg192_t;
+
+static inline uint64_t BDK_PCIERCX_CFG192(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG192(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000300ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG192", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG192(a) bdk_pciercx_cfg192_t
+#define bustype_BDK_PCIERCX_CFG192(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG192(a) "PCIERCX_CFG192"
+#define busnum_BDK_PCIERCX_CFG192(a) (a)
+#define arguments_BDK_PCIERCX_CFG192(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg193
+ *
+ * PCIe RC ACS Capability and Control Register
+ * This register contains the one hundred ninety-fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg193
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg193_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sv : 1; /**< [ 0: 0](RO/WRSL) ACS source validation.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t tb : 1; /**< [ 1: 1](RO/WRSL) ACS translation blocking.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t rr : 1; /**< [ 2: 2](RO/WRSL) ACS P2P request redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cr : 1; /**< [ 3: 3](RO/WRSL) ACS P2P completion redirect.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t uf : 1; /**< [ 4: 4](RO/WRSL) ACS upstream forwarding.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ec : 1; /**< [ 5: 5](RO/WRSL) ACS P2P egress control.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t dt : 1; /**< [ 6: 6](RO/WRSL) ACS direct translated P2P.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_7 : 1;
+ uint32_t ecvs : 8; /**< [ 15: 8](RO/WRSL) Egress control vector size.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t sve : 1; /**< [ 16: 16](R/W) ACS source validation enable. */
+ uint32_t tbe : 1; /**< [ 17: 17](R/W) ACS translation blocking enable. */
+ uint32_t rre : 1; /**< [ 18: 18](R/W) ACS P2P request redirect enable. */
+ uint32_t cre : 1; /**< [ 19: 19](R/W) ACS P2P completion redirect enable. */
+ uint32_t ufe : 1; /**< [ 20: 20](R/W) ACS upstream forwarding enable. */
+ uint32_t ece : 1; /**< [ 21: 21](R/W) ACS P2P egress control enable. */
+ uint32_t dte : 1; /**< [ 22: 22](R/W) ACS direct translated P2P enable. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg193_s cn; */
+};
+typedef union bdk_pciercx_cfg193 bdk_pciercx_cfg193_t;
+
+static inline uint64_t BDK_PCIERCX_CFG193(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG193(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000304ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG193", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG193(a) bdk_pciercx_cfg193_t
+#define bustype_BDK_PCIERCX_CFG193(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG193(a) "PCIERCX_CFG193"
+#define busnum_BDK_PCIERCX_CFG193(a) (a)
+#define arguments_BDK_PCIERCX_CFG193(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg194
+ *
+ * PCIe RC Egress Control Vector Register
+ * This register contains the one hundred ninety-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg194
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg194_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ecv : 32; /**< [ 31: 0](R/W) Egress control vector. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecv : 32; /**< [ 31: 0](R/W) Egress control vector. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg194_s cn; */
+};
+typedef union bdk_pciercx_cfg194 bdk_pciercx_cfg194_t;
+
+static inline uint64_t BDK_PCIERCX_CFG194(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG194(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000308ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG194", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG194(a) bdk_pciercx_cfg194_t
+#define bustype_BDK_PCIERCX_CFG194(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG194(a) "PCIERCX_CFG194"
+#define busnum_BDK_PCIERCX_CFG194(a) (a)
+#define arguments_BDK_PCIERCX_CFG194(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg448
+ *
+ * PCIe RC Ack Latency Timer/Replay Timer Register
+ * This register contains the four hundred forty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg448
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg448_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t rtl : 16; /**< [ 31: 16](R/W/H) Replay time limit. The replay timer expires when it reaches this limit. The PCI Express
+ bus initiates a replay upon reception of a NAK or when the replay timer expires. This
+ value is set correctly by the hardware out of reset or when the negotiated link width or
+ payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+ uint32_t rtltl : 16; /**< [ 15: 0](R/W/H) Round trip latency time limit. The ACK/NAK latency timer expires when it reaches this
+ limit. This value is set correctly by the hardware out of reset or when the negotiated
+ link width or payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+#else /* Word 0 - Little Endian */
+ uint32_t rtltl : 16; /**< [ 15: 0](R/W/H) Round trip latency time limit. The ACK/NAK latency timer expires when it reaches this
+ limit. This value is set correctly by the hardware out of reset or when the negotiated
+ link width or payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+ uint32_t rtl : 16; /**< [ 31: 16](R/W/H) Replay time limit. The replay timer expires when it reaches this limit. The PCI Express
+ bus initiates a replay upon reception of a NAK or when the replay timer expires. This
+ value is set correctly by the hardware out of reset or when the negotiated link width or
+ payload size changes. If the user changes this value
+ they should refer to the PCIe specification for the correct value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg448_s cn; */
+};
+typedef union bdk_pciercx_cfg448 bdk_pciercx_cfg448_t;
+
+static inline uint64_t BDK_PCIERCX_CFG448(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG448(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000700ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000700ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000700ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG448", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG448(a) bdk_pciercx_cfg448_t
+#define bustype_BDK_PCIERCX_CFG448(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG448(a) "PCIERCX_CFG448"
+#define busnum_BDK_PCIERCX_CFG448(a) (a)
+#define arguments_BDK_PCIERCX_CFG448(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg449
+ *
+ * PCIe RC Other Message Register
+ * This register contains the four hundred fiftieth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg449
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg449_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t omr : 32; /**< [ 31: 0](R/W) Other message register. This register can be used for either of the following purposes:
+ * To send a specific PCI Express message, the application writes the payload of the
+ message into this register, then sets bit 0 of the port link control register to send the
+ message.
+ * To store a corruption pattern for corrupting the LCRC on all TLPs, the application
+ places a 32-bit corruption pattern into this register and enables this function by setting
+ bit 25 of the port link control register. When enabled, the transmit LCRC result is XORed
+ with this pattern before inserting it into the packet. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 32; /**< [ 31: 0](R/W) Other message register. This register can be used for either of the following purposes:
+ * To send a specific PCI Express message, the application writes the payload of the
+ message into this register, then sets bit 0 of the port link control register to send the
+ message.
+ * To store a corruption pattern for corrupting the LCRC on all TLPs, the application
+ places a 32-bit corruption pattern into this register and enables this function by setting
+ bit 25 of the port link control register. When enabled, the transmit LCRC result is XORed
+ with this pattern before inserting it into the packet. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg449_s cn; */
+};
+typedef union bdk_pciercx_cfg449 bdk_pciercx_cfg449_t;
+
+static inline uint64_t BDK_PCIERCX_CFG449(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG449(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000704ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000704ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000704ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG449", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG449(a) bdk_pciercx_cfg449_t
+#define bustype_BDK_PCIERCX_CFG449(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG449(a) "PCIERCX_CFG449"
+#define busnum_BDK_PCIERCX_CFG449(a) (a)
+#define arguments_BDK_PCIERCX_CFG449(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg450
+ *
+ * PCIe RC Port Force Link Register
+ * This register contains the four hundred fifty-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg450
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg450_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lpec : 8; /**< [ 31: 24](R/W) Low power entrance count. The power management state waits this many clock cycles for the
+ associated completion of a CfgWr to PCIERC()_CFG017 register, power state (PS) field
+ register
+ to go low-power. This register is intended for applications that do not let the PCI
+ Express bus handle a completion for configuration request to the power management control
+ and status (PCIRC()_CFG017) register. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+#else /* Word 0 - Little Endian */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t lpec : 8; /**< [ 31: 24](R/W) Low power entrance count. The power management state waits this many clock cycles for the
+ associated completion of a CfgWr to PCIERC()_CFG017 register, power state (PS) field
+ register
+ to go low-power. This register is intended for applications that do not let the PCI
+ Express bus handle a completion for configuration request to the power management control
+ and status (PCIRC()_CFG017) register. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg450_s cn81xx; */
+ struct bdk_pciercx_cfg450_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lpec : 8; /**< [ 31: 24](R/W) Low power entrance count. The power management state waits this many clock cycles for the
+ associated completion of a CfgWr to PCIEEP()_CFG017 register, power state (PS) field
+ register
+ to go low-power. This register is intended for applications that do not let the PCI
+ Express bus handle a completion for configuration request to the power management control
+ and status (PCIEP()_CFG017) register. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+#else /* Word 0 - Little Endian */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t lpec : 8; /**< [ 31: 24](R/W) Low power entrance count. The power management state waits this many clock cycles for the
+ associated completion of a CfgWr to PCIEEP()_CFG017 register, power state (PS) field
+ register
+ to go low-power. This register is intended for applications that do not let the PCI
+ Express bus handle a completion for configuration request to the power management control
+ and status (PCIEP()_CFG017) register. */
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg450_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+#else /* Word 0 - Little Endian */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg450 bdk_pciercx_cfg450_t;
+
+static inline uint64_t BDK_PCIERCX_CFG450(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG450(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000708ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000708ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000708ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG450", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG450(a) bdk_pciercx_cfg450_t
+#define bustype_BDK_PCIERCX_CFG450(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG450(a) "PCIERCX_CFG450"
+#define busnum_BDK_PCIERCX_CFG450(a) (a)
+#define arguments_BDK_PCIERCX_CFG450(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg451
+ *
+ * PCIe RC Ack Frequency Register
+ * This register contains the four hundred fifty-second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg451
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg451_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t easpml1 : 1; /**< [ 30: 30](R/W/H) Enter ASPM L1 without receive in L0s. Allow core to enter ASPM L1 even when link partner
+ did not go to L0s (receive is not in L0s). When not set, core goes to ASPM L1 only after
+ idle period, during which both receive and transmit are in L0s. */
+ uint32_t l1el : 3; /**< [ 29: 27](R/W) L1 entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 4 ms.
+ 0x3 = 8 ms.
+ 0x4 = 16 ms.
+ 0x5 = 32 ms.
+ 0x6 or 0x7 = 64 ms. */
+ uint32_t l0el : 3; /**< [ 26: 24](R/W) L0s entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 3 ms.
+ 0x3 = 4 ms.
+ 0x4 = 5 ms.
+ 0x5 = 6 ms.
+ 0x6 or 0x7 = 7 ms. */
+ uint32_t n_fts_cc : 8; /**< [ 23: 16](RO) N_FTS when common clock is used.
+ The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t n_fts : 8; /**< [ 15: 8](R/W) N_FTS. The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t ack_freq : 8; /**< [ 7: 0](R/W) ACK frequency. The number of pending ACKs specified here (up to 255) before sending an ACK. */
+#else /* Word 0 - Little Endian */
+ uint32_t ack_freq : 8; /**< [ 7: 0](R/W) ACK frequency. The number of pending ACKs specified here (up to 255) before sending an ACK. */
+ uint32_t n_fts : 8; /**< [ 15: 8](R/W) N_FTS. The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t n_fts_cc : 8; /**< [ 23: 16](RO) N_FTS when common clock is used.
+ The number of fast training sequence (FTS) ordered sets to be transmitted when
+ transitioning from L0s to L0. The maximum number of FTS ordered sets that a component can
+ request is 255.
+ A value of zero is not supported; a value of zero can cause the LTSSM to go into the
+ recovery state when exiting from L0s. */
+ uint32_t l0el : 3; /**< [ 26: 24](R/W) L0s entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 3 ms.
+ 0x3 = 4 ms.
+ 0x4 = 5 ms.
+ 0x5 = 6 ms.
+ 0x6 or 0x7 = 7 ms. */
+ uint32_t l1el : 3; /**< [ 29: 27](R/W) L1 entrance latency. Values correspond to:
+ 0x0 = 1 ms.
+ 0x1 = 2 ms.
+ 0x2 = 4 ms.
+ 0x3 = 8 ms.
+ 0x4 = 16 ms.
+ 0x5 = 32 ms.
+ 0x6 or 0x7 = 64 ms. */
+ uint32_t easpml1 : 1; /**< [ 30: 30](R/W/H) Enter ASPM L1 without receive in L0s. Allow core to enter ASPM L1 even when link partner
+ did not go to L0s (receive is not in L0s). When not set, core goes to ASPM L1 only after
+ idle period, during which both receive and transmit are in L0s. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg451_s cn; */
+};
+typedef union bdk_pciercx_cfg451 bdk_pciercx_cfg451_t;
+
+static inline uint64_t BDK_PCIERCX_CFG451(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG451(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000070cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000070cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000070cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG451", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG451(a) bdk_pciercx_cfg451_t
+#define bustype_BDK_PCIERCX_CFG451(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG451(a) "PCIERCX_CFG451"
+#define busnum_BDK_PCIERCX_CFG451(a) (a)
+#define arguments_BDK_PCIERCX_CFG451(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg452
+ *
+ * PCIe RC Port Link Control Register
+ * This register contains the four hundred fifty-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg452
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg452_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8 (not supported).
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x4,
+ x2, and x1 are supported when
+ LME = 0x7, for example. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_4 : 1;
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t reserved_4 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8 (not supported).
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x4,
+ x2, and x1 are supported when
+ LME = 0x7, for example. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg452_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t reserved_24_27 : 4;
+ uint32_t reserved_22_23 : 2;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8 (not supported).
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x4,
+ x2, and x1 are supported when
+ LME = 0x7, for example. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t reserved_6 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_4 : 1;
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t reserved_4 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_6 : 1;
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8 (not supported).
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x4,
+ x2, and x1 are supported when
+ LME = 0x7, for example. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t reserved_24_27 : 4;
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg452_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t reserved_24_27 : 4;
+ uint32_t reserved_22_23 : 2;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x8, x4,
+ x2, and x1 are supported when
+ LME = 0xF, for example. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t reserved_6 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_4 : 1;
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t reserved_4 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_6 : 1;
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes. */
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x8, x4,
+ x2, and x1 are supported when
+ LME = 0xF, for example. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t reserved_24_27 : 4;
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg452_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x8, x4,
+ x2, and x1 are supported when
+ LME = 0xF, for example. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes.
+ The scaling factor is configured by PCIEEP()_CFG454[FLMSF]. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_4 : 1;
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a 1 to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t reserved_4 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes.
+ The scaling factor is configured by PCIEEP()_CFG454[FLMSF]. */
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16 (not supported).
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0xF to limit the number of lanes the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC()_CFG031[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x8, x4,
+ x2, and x1 are supported when
+ LME = 0xF, for example. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg452 bdk_pciercx_cfg452_t;
+
+static inline uint64_t BDK_PCIERCX_CFG452(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG452(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000710ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000710ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000710ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG452", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG452(a) bdk_pciercx_cfg452_t
+#define bustype_BDK_PCIERCX_CFG452(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG452(a) "PCIERCX_CFG452"
+#define busnum_BDK_PCIERCX_CFG452(a) (a)
+#define arguments_BDK_PCIERCX_CFG452(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg453
+ *
+ * PCIe RC Lane Skew Register
+ * This register contains the four hundred fifty-fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg453
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg453_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dlld : 1; /**< [ 31: 31](R/W) Disable lane-to-lane deskew. Disables the internal lane-to-lane deskew logic. */
+ uint32_t reserved_26_30 : 5;
+ uint32_t ack_nak : 1; /**< [ 25: 25](R/W) ACK/NAK disable. Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
+ uint32_t fcd : 1; /**< [ 24: 24](R/W) Flow control disable. Prevents the PCI Express bus from sending FC DLLPs. */
+ uint32_t ilst : 24; /**< [ 23: 0](R/W) Insert lane skew for transmit (not supported for *16). Causes skew between lanes for test
+ purposes. There are three bits per lane. The value is in units of one symbol time. For
+ example, the value 0x2 for a lane forces a skew of two symbol times for that lane. The
+ maximum skew value for any lane is 5 symbol times. */
+#else /* Word 0 - Little Endian */
+ uint32_t ilst : 24; /**< [ 23: 0](R/W) Insert lane skew for transmit (not supported for *16). Causes skew between lanes for test
+ purposes. There are three bits per lane. The value is in units of one symbol time. For
+ example, the value 0x2 for a lane forces a skew of two symbol times for that lane. The
+ maximum skew value for any lane is 5 symbol times. */
+ uint32_t fcd : 1; /**< [ 24: 24](R/W) Flow control disable. Prevents the PCI Express bus from sending FC DLLPs. */
+ uint32_t ack_nak : 1; /**< [ 25: 25](R/W) ACK/NAK disable. Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
+ uint32_t reserved_26_30 : 5;
+ uint32_t dlld : 1; /**< [ 31: 31](R/W) Disable lane-to-lane deskew. Disables the internal lane-to-lane deskew logic. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg453_s cn; */
+};
+typedef union bdk_pciercx_cfg453 bdk_pciercx_cfg453_t;
+
+static inline uint64_t BDK_PCIERCX_CFG453(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG453(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000714ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000714ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000714ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG453", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG453(a) bdk_pciercx_cfg453_t
+#define bustype_BDK_PCIERCX_CFG453(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG453(a) "PCIERCX_CFG453"
+#define busnum_BDK_PCIERCX_CFG453(a) (a)
+#define arguments_BDK_PCIERCX_CFG453(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg454
+ *
+ * PCIe RC Symbol Number Register
+ * This register contains the four hundred fifty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg454
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg454_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast Link Timer Scaling Factor. Sets the scaling factor of
+ LTSSM timer when PCIERC()_CFG452[FLM] is set.
+ 0x0: Scaling Factor is 1024 (1ms is 1us)
+ 0x1: Scaling Factor is 256 (1ms is 4us)
+ 0x2: Scaling Factor is 64 (1ms is 16us)
+ 0x3: Scaling Factor is 16 (1ms is 64us) */
+ uint32_t reserved_24_28 : 5;
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t reserved_24_28 : 5;
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast Link Timer Scaling Factor. Sets the scaling factor of
+ LTSSM timer when PCIERC()_CFG452[FLM] is set.
+ 0x0: Scaling Factor is 1024 (1ms is 1us)
+ 0x1: Scaling Factor is 256 (1ms is 4us)
+ 0x2: Scaling Factor is 64 (1ms is 16us)
+ 0x3: Scaling Factor is 16 (1ms is 64us) */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg454_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t tmfcwt : 5; /**< [ 28: 24](R/W) Used to be 'timer modifier for flow control watchdog timer.' This field is no longer used.
+ and has moved to the queue status register -- PCIERC()_CFG463. This field remains to
+ prevent software from breaking. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t tmfcwt : 5; /**< [ 28: 24](R/W) Used to be 'timer modifier for flow control watchdog timer.' This field is no longer used.
+ and has moved to the queue status register -- PCIERC()_CFG463. This field remains to
+ prevent software from breaking. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg454_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg454_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast Link Timer Scaling Factor. Sets the scaling factor of
+ LTSSM timer when PCIERC()_CFG452[FLM] is set.
+ 0x0: Scaling Factor is 1024 (1ms is 1us)
+ 0x1: Scaling Factor is 256 (1ms is 4us)
+ 0x2: Scaling Factor is 64 (1ms is 16us)
+ 0x3: Scaling Factor is 16 (1ms is 64us) */
+ uint32_t updft : 5; /**< [ 28: 24](R/W) Update Frequency Timer. This is an internally reserved field, do not use. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W) Max number of functions supported. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t updft : 5; /**< [ 28: 24](R/W) Update Frequency Timer. This is an internally reserved field, do not use. */
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast Link Timer Scaling Factor. Sets the scaling factor of
+ LTSSM timer when PCIERC()_CFG452[FLM] is set.
+ 0x0: Scaling Factor is 1024 (1ms is 1us)
+ 0x1: Scaling Factor is 256 (1ms is 4us)
+ 0x2: Scaling Factor is 64 (1ms is 16us)
+ 0x3: Scaling Factor is 16 (1ms is 64us) */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg454 bdk_pciercx_cfg454_t;
+
+static inline uint64_t BDK_PCIERCX_CFG454(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG454(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000718ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000718ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000718ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG454", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG454(a) bdk_pciercx_cfg454_t
+#define bustype_BDK_PCIERCX_CFG454(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG454(a) "PCIERCX_CFG454"
+#define busnum_BDK_PCIERCX_CFG454(a) (a)
+#define arguments_BDK_PCIERCX_CFG454(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg455
+ *
+ * PCIe RC Symbol Timer/Filter Mask Register 1
+ * This register contains the four hundred fifty-sixth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg455
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg455_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. */
+#else /* Word 0 - Little Endian */
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg455_s cn81xx; */
+ /* struct bdk_pciercx_cfg455_s cn88xx; */
+ struct bdk_pciercx_cfg455_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. The number of symbol times to wait
+ between transmitting SKP ordered sets. Note that the
+ controller actually waits the number of symbol times in this
+ register plus 1 between transmitting SKP ordered sets.
+
+ This value is not used at Gen3 speed; the skip interval
+ is hardcoded to 370 blocks. */
+#else /* Word 0 - Little Endian */
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. The number of symbol times to wait
+ between transmitting SKP ordered sets. Note that the
+ controller actually waits the number of symbol times in this
+ register plus 1 between transmitting SKP ordered sets.
+
+ This value is not used at Gen3 speed; the skip interval
+ is hardcoded to 370 blocks. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg455 bdk_pciercx_cfg455_t;
+
+static inline uint64_t BDK_PCIERCX_CFG455(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG455(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000071cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000071cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000071cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG455", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG455(a) bdk_pciercx_cfg455_t
+#define bustype_BDK_PCIERCX_CFG455(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG455(a) "PCIERCX_CFG455"
+#define busnum_BDK_PCIERCX_CFG455(a) (a)
+#define arguments_BDK_PCIERCX_CFG455(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg456
+ *
+ * PCIe RC Filter Mask Register 2
+ * This register contains the four hundred fifty-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg456
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg456_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t m_prs : 1; /**< [ 7: 7](R/W) Mask PRS messages dropped silently. */
+ uint32_t m_unmask_td : 1; /**< [ 6: 6](R/W) Not Supported. */
+ uint32_t m_unmask_ur_pois : 1; /**< [ 5: 5](R/W) Not Supported. */
+ uint32_t m_ln_vend1_drop : 1; /**< [ 4: 4](R/W) Mask LN messages dropped silently. */
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+#else /* Word 0 - Little Endian */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t m_ln_vend1_drop : 1; /**< [ 4: 4](R/W) Mask LN messages dropped silently. */
+ uint32_t m_unmask_ur_pois : 1; /**< [ 5: 5](R/W) Not Supported. */
+ uint32_t m_unmask_td : 1; /**< [ 6: 6](R/W) Not Supported. */
+ uint32_t m_prs : 1; /**< [ 7: 7](R/W) Mask PRS messages dropped silently. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg456_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+#else /* Word 0 - Little Endian */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg456_cn81xx cn88xx; */
+ /* struct bdk_pciercx_cfg456_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg456 bdk_pciercx_cfg456_t;
+
+static inline uint64_t BDK_PCIERCX_CFG456(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG456(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000720ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000720ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000720ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG456", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG456(a) bdk_pciercx_cfg456_t
+#define bustype_BDK_PCIERCX_CFG456(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG456(a) "PCIERCX_CFG456"
+#define busnum_BDK_PCIERCX_CFG456(a) (a)
+#define arguments_BDK_PCIERCX_CFG456(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg458
+ *
+ * PCIe RC Debug Register 0
+ * This register contains the four hundred fifty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg458
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg458_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dbg_info_l32 : 32; /**< [ 31: 0](RO/H) Debug info lower 32 bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbg_info_l32 : 32; /**< [ 31: 0](RO/H) Debug info lower 32 bits. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg458_s cn; */
+};
+typedef union bdk_pciercx_cfg458 bdk_pciercx_cfg458_t;
+
+static inline uint64_t BDK_PCIERCX_CFG458(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG458(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000728ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000728ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000728ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG458", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG458(a) bdk_pciercx_cfg458_t
+#define bustype_BDK_PCIERCX_CFG458(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG458(a) "PCIERCX_CFG458"
+#define busnum_BDK_PCIERCX_CFG458(a) (a)
+#define arguments_BDK_PCIERCX_CFG458(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg459
+ *
+ * PCIe RC Debug Register 1
+ * This register contains the four hundred sixtieth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg459
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg459_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dbg_info_u32 : 32; /**< [ 31: 0](RO/H) Debug info upper 32 bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbg_info_u32 : 32; /**< [ 31: 0](RO/H) Debug info upper 32 bits. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg459_s cn; */
+};
+typedef union bdk_pciercx_cfg459 bdk_pciercx_cfg459_t;
+
+static inline uint64_t BDK_PCIERCX_CFG459(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG459(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000072cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000072cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000072cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG459", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG459(a) bdk_pciercx_cfg459_t
+#define bustype_BDK_PCIERCX_CFG459(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG459(a) "PCIERCX_CFG459"
+#define busnum_BDK_PCIERCX_CFG459(a) (a)
+#define arguments_BDK_PCIERCX_CFG459(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg460
+ *
+ * PCIe RC Transmit Posted FC Credit Status Register
+ * This register contains the four hundred sixty-first 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg460
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg460_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tphfcc : 8; /**< [ 19: 12](RO/H) Transmit posted header FC credits. The posted header credits advertised by the receiver at
+ the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tpdfcc : 12; /**< [ 11: 0](RO/H) Transmit posted data FC credits. The posted data credits advertised by the receiver at the
+ other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tpdfcc : 12; /**< [ 11: 0](RO/H) Transmit posted data FC credits. The posted data credits advertised by the receiver at the
+ other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tphfcc : 8; /**< [ 19: 12](RO/H) Transmit posted header FC credits. The posted header credits advertised by the receiver at
+ the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg460_s cn; */
+};
+typedef union bdk_pciercx_cfg460 bdk_pciercx_cfg460_t;
+
+static inline uint64_t BDK_PCIERCX_CFG460(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG460(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000730ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000730ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000730ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG460", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG460(a) bdk_pciercx_cfg460_t
+#define bustype_BDK_PCIERCX_CFG460(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG460(a) "PCIERCX_CFG460"
+#define busnum_BDK_PCIERCX_CFG460(a) (a)
+#define arguments_BDK_PCIERCX_CFG460(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg461
+ *
+ * PCIe RC Transmit Nonposted FC Credit Status Register
+ * This register contains the four hundred sixty-second 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg461
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg461_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit nonposted header FC credits. The nonposted header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit nonposted data FC credits. The nonposted data credits advertised by the receiver
+ at the other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit nonposted data FC credits. The nonposted data credits advertised by the receiver
+ at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit nonposted header FC credits. The nonposted header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg461_s cn; */
+};
+typedef union bdk_pciercx_cfg461 bdk_pciercx_cfg461_t;
+
+static inline uint64_t BDK_PCIERCX_CFG461(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG461(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000734ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000734ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000734ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG461", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG461(a) bdk_pciercx_cfg461_t
+#define bustype_BDK_PCIERCX_CFG461(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG461(a) "PCIERCX_CFG461"
+#define busnum_BDK_PCIERCX_CFG461(a) (a)
+#define arguments_BDK_PCIERCX_CFG461(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg462
+ *
+ * PCIe RC Transmit Completion FC Credit Status Register
+ * This register contains the four hundred sixty-third 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg462
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg462_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit completion header FC credits. The completion header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit completion data FC credits. The completion data credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit completion data FC credits. The completion data credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit completion header FC credits. The completion header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg462_s cn; */
+};
+typedef union bdk_pciercx_cfg462 bdk_pciercx_cfg462_t;
+
+static inline uint64_t BDK_PCIERCX_CFG462(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG462(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000738ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000738ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000738ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG462", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG462(a) bdk_pciercx_cfg462_t
+#define bustype_BDK_PCIERCX_CFG462(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG462(a) "PCIERCX_CFG462"
+#define busnum_BDK_PCIERCX_CFG462(a) (a)
+#define arguments_BDK_PCIERCX_CFG462(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg463
+ *
+ * PCIe RC Queue Status Register
+ * This register contains the four hundred sixty-fourth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg463
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg463_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t fcltoe : 1; /**< [ 31: 31](R/W) FC latency timer override enable. When this bit is set, the value in
+ PCIERC()_CFG453[FCLTOV] will override the FC latency timer value that the core
+ calculates according to the PCIe specification. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t fcltov : 13; /**< [ 28: 16](R/W) FC latency timer override value. When you set PCIERC()_CFG453[FCLTOE], the value in
+ this field will override the FC latency timer value that the core calculates according to
+ the PCIe specification. */
+ uint32_t reserved_3_15 : 13;
+ uint32_t rqne : 1; /**< [ 2: 2](RO/H) Received queue not empty. Indicates there is data in one or more of the receive buffers. */
+ uint32_t trbne : 1; /**< [ 1: 1](RO/H) Transmit retry buffer not empty. Indicates that there is data in the transmit retry buffer. */
+ uint32_t rtlpfccnr : 1; /**< [ 0: 0](RO/H) Received TLP FC credits not returned. Indicates that the PCI Express bus has sent a TLP
+ but has not yet received an UpdateFC DLLP indicating that the credits for that TLP have
+ been restored by the receiver at the other end of the link. */
+#else /* Word 0 - Little Endian */
+ uint32_t rtlpfccnr : 1; /**< [ 0: 0](RO/H) Received TLP FC credits not returned. Indicates that the PCI Express bus has sent a TLP
+ but has not yet received an UpdateFC DLLP indicating that the credits for that TLP have
+ been restored by the receiver at the other end of the link. */
+ uint32_t trbne : 1; /**< [ 1: 1](RO/H) Transmit retry buffer not empty. Indicates that there is data in the transmit retry buffer. */
+ uint32_t rqne : 1; /**< [ 2: 2](RO/H) Received queue not empty. Indicates there is data in one or more of the receive buffers. */
+ uint32_t reserved_3_15 : 13;
+ uint32_t fcltov : 13; /**< [ 28: 16](R/W) FC latency timer override value. When you set PCIERC()_CFG453[FCLTOE], the value in
+ this field will override the FC latency timer value that the core calculates according to
+ the PCIe specification. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t fcltoe : 1; /**< [ 31: 31](R/W) FC latency timer override enable. When this bit is set, the value in
+ PCIERC()_CFG453[FCLTOV] will override the FC latency timer value that the core
+ calculates according to the PCIe specification. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg463_s cn; */
+};
+typedef union bdk_pciercx_cfg463 bdk_pciercx_cfg463_t;
+
+static inline uint64_t BDK_PCIERCX_CFG463(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG463(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000073cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000073cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000073cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG463", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG463(a) bdk_pciercx_cfg463_t
+#define bustype_BDK_PCIERCX_CFG463(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG463(a) "PCIERCX_CFG463"
+#define busnum_BDK_PCIERCX_CFG463(a) (a)
+#define arguments_BDK_PCIERCX_CFG463(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg464
+ *
+ * PCIe RC VC Transmit Arbitration Register 1
+ * This register contains the four hundred sixty-fifth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg464
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg464_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO/H) WRR weight for VC3. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO/H) WRR weight for VC2. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO/H) WRR weight for VC1. */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO/H) WRR weight for VC0. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO/H) WRR weight for VC0. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO/H) WRR weight for VC1. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO/H) WRR weight for VC2. */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO/H) WRR weight for VC3. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg464_s cn81xx; */
+ /* struct bdk_pciercx_cfg464_s cn88xx; */
+ struct bdk_pciercx_cfg464_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO) WRR weight for VC3. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO) WRR weight for VC2. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO) WRR weight for VC1. */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO) WRR weight for VC0. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO) WRR weight for VC0. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO) WRR weight for VC1. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO) WRR weight for VC2. */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO) WRR weight for VC3. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg464 bdk_pciercx_cfg464_t;
+
+static inline uint64_t BDK_PCIERCX_CFG464(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG464(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000740ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000740ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000740ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG464", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG464(a) bdk_pciercx_cfg464_t
+#define bustype_BDK_PCIERCX_CFG464(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG464(a) "PCIERCX_CFG464"
+#define busnum_BDK_PCIERCX_CFG464(a) (a)
+#define arguments_BDK_PCIERCX_CFG464(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg465
+ *
+ * PCIe RC VC Transmit Arbitration Register 2
+ * This register contains the four hundred sixty-sixth 32-bits of configuration space.
+ */
+union bdk_pciercx_cfg465
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg465_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO/H) WRR weight for VC7. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO/H) WRR weight for VC6. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO/H) WRR weight for VC5. */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO/H) WRR weight for VC4. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO/H) WRR weight for VC4. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO/H) WRR weight for VC5. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO/H) WRR weight for VC6. */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO/H) WRR weight for VC7. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg465_s cn81xx; */
+ /* struct bdk_pciercx_cfg465_s cn88xx; */
+ struct bdk_pciercx_cfg465_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO) WRR weight for VC7. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO) WRR weight for VC6. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO) WRR weight for VC5. */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO) WRR weight for VC4. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO) WRR weight for VC4. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO) WRR weight for VC5. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO) WRR weight for VC6. */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO) WRR weight for VC7. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg465 bdk_pciercx_cfg465_t;
+
+static inline uint64_t BDK_PCIERCX_CFG465(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG465(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000744ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000744ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000744ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG465", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG465(a) bdk_pciercx_cfg465_t
+#define bustype_BDK_PCIERCX_CFG465(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG465(a) "PCIERCX_CFG465"
+#define busnum_BDK_PCIERCX_CFG465(a) (a)
+#define arguments_BDK_PCIERCX_CFG465(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg466
+ *
+ * PCIe RC VC0 Posted Receive Queue Control Register
+ * This register contains the four hundred sixty-seventh 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg466
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg466_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t rx_queue_order : 1; /**< [ 31: 31](R/W) VC ordering for receive queues. Determines the VC ordering rule for the receive queues,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR:
+ 0 = Round robin.
+ 1 = Strict ordering, higher numbered VCs have higher priority.
+
+ However, the application must not change this field. */
+ uint32_t type_ordering : 1; /**< [ 30: 30](RO/WRSL) TLP type ordering for VC0. Determines the TLP type ordering rule for VC0 receive queues,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR:
+ 0 = Strict ordering for received TLPs: Posted, then completion, then NonPosted.
+ 1 = Ordering of received TLPs follows the rules in PCI Express Base Specification.
+
+ The application must not change this field. */
+ uint32_t reserved_24_29 : 6;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 posted TLP queue mode. The operating mode of the posted receive queue for VC0, used
+ only in the segmented-buffer configuration, writable through PEM()_CFG_WR. However,
+ the application must not change this field.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 posted header credits. The number of initial posted header credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 posted data credits. The number of initial posted data credits for VC0, used for all
+ receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 posted data credits. The number of initial posted data credits for VC0, used for all
+ receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 posted header credits. The number of initial posted header credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 posted TLP queue mode. The operating mode of the posted receive queue for VC0, used
+ only in the segmented-buffer configuration, writable through PEM()_CFG_WR. However,
+ the application must not change this field.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward. */
+ uint32_t reserved_24_29 : 6;
+ uint32_t type_ordering : 1; /**< [ 30: 30](RO/WRSL) TLP type ordering for VC0. Determines the TLP type ordering rule for VC0 receive queues,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR:
+ 0 = Strict ordering for received TLPs: Posted, then completion, then NonPosted.
+ 1 = Ordering of received TLPs follows the rules in PCI Express Base Specification.
+
+ The application must not change this field. */
+ uint32_t rx_queue_order : 1; /**< [ 31: 31](R/W) VC ordering for receive queues. Determines the VC ordering rule for the receive queues,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR:
+ 0 = Round robin.
+ 1 = Strict ordering, higher numbered VCs have higher priority.
+
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg466_s cn; */
+};
+typedef union bdk_pciercx_cfg466 bdk_pciercx_cfg466_t;
+
+static inline uint64_t BDK_PCIERCX_CFG466(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG466(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000748ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000748ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000748ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG466", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG466(a) bdk_pciercx_cfg466_t
+#define bustype_BDK_PCIERCX_CFG466(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG466(a) "PCIERCX_CFG466"
+#define busnum_BDK_PCIERCX_CFG466(a) (a)
+#define arguments_BDK_PCIERCX_CFG466(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg467
+ *
+ * PCIe RC VC0 Nonposted Receive Queue Control Register
+ * This register contains the four hundred sixty-eighth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg467
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg467_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 nonposted TLP queue mode. The operating mode of the nonposted receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 nonposted header credits. The number of initial nonposted header credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 nonposted data credits. The number of initial nonposted data credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 nonposted data credits. The number of initial nonposted data credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 nonposted header credits. The number of initial nonposted header credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 nonposted TLP queue mode. The operating mode of the nonposted receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg467_s cn; */
+};
+typedef union bdk_pciercx_cfg467 bdk_pciercx_cfg467_t;
+
+static inline uint64_t BDK_PCIERCX_CFG467(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG467(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000074cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000074cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000074cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG467", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG467(a) bdk_pciercx_cfg467_t
+#define bustype_BDK_PCIERCX_CFG467(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG467(a) "PCIERCX_CFG467"
+#define busnum_BDK_PCIERCX_CFG467(a) (a)
+#define arguments_BDK_PCIERCX_CFG467(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg468
+ *
+ * PCIe RC VC0 Completion Receive Queue Control Register
+ * This register contains the four hundred sixty-ninth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg468
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg468_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 completion TLP queue mode. The operating mode of the completion receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 completion header credits. The number of initial completion header credits for VC0,
+ used for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 completion data credits. The number of initial completion data credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 completion data credits. The number of initial completion data credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 completion header credits. The number of initial completion header credits for VC0,
+ used for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 completion TLP queue mode. The operating mode of the completion receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg468_s cn; */
+};
+typedef union bdk_pciercx_cfg468 bdk_pciercx_cfg468_t;
+
+static inline uint64_t BDK_PCIERCX_CFG468(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG468(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000750ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000750ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000750ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG468", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG468(a) bdk_pciercx_cfg468_t
+#define bustype_BDK_PCIERCX_CFG468(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG468(a) "PCIERCX_CFG468"
+#define busnum_BDK_PCIERCX_CFG468(a) (a)
+#define arguments_BDK_PCIERCX_CFG468(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg515
+ *
+ * PCIe RC Gen2 Port Logic Register
+ * This register contains the five hundred sixteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg515
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg515_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_21_31 : 11;
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t reserved_8_16 : 9;
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+#else /* Word 0 - Little Endian */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+ uint32_t reserved_8_16 : 9;
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t reserved_21_31 : 11;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg515_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t reserved_21 : 1;
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t alfpce : 1; /**< [ 16: 16](R/W) Auto lane flip control enable. When set to 1, the core will try to flip the lanes
+ autonomously in Detect LTSSM state when lane0 is not detected. */
+ uint32_t pdl : 3; /**< [ 15: 13](R/W) Predetermined lane for Auto Flip. This field defines which physical lane is connected
+ to logical Lane0 by the flip operation performed in Detect. 0x0 = connect logical Lane0
+ to physical lane0 or CX_NL or CX_NL/2-1 or CX_NL/4-1 or CX_NL/8-1, depending on which lane
+ is detected, 0x1 = logical Lane0 to physical lane 1, 0x2 = logical Lane0 to physical lane
+ 3,
+ 0x3 = logical Lane0 to physical Lane 7, 0x4 = logical Lane0 to physical lane 15. */
+ uint32_t le : 5; /**< [ 12: 8](R/W) Lane enable. Indicates the number of lanes to check for exit from electrical idle in
+ Polling.Active and Polling.Compliance. 0x1 = x1, 0x2 = x2, etc. Used to limit the maximum
+ link width to ignore broken lanes that detect a receiver, but will not exit electrical
+ idle and would otherwise prevent a valid link from being configured. */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+#else /* Word 0 - Little Endian */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+ uint32_t le : 5; /**< [ 12: 8](R/W) Lane enable. Indicates the number of lanes to check for exit from electrical idle in
+ Polling.Active and Polling.Compliance. 0x1 = x1, 0x2 = x2, etc. Used to limit the maximum
+ link width to ignore broken lanes that detect a receiver, but will not exit electrical
+ idle and would otherwise prevent a valid link from being configured. */
+ uint32_t pdl : 3; /**< [ 15: 13](R/W) Predetermined lane for Auto Flip. This field defines which physical lane is connected
+ to logical Lane0 by the flip operation performed in Detect. 0x0 = connect logical Lane0
+ to physical lane0 or CX_NL or CX_NL/2-1 or CX_NL/4-1 or CX_NL/8-1, depending on which lane
+ is detected, 0x1 = logical Lane0 to physical lane 1, 0x2 = logical Lane0 to physical lane
+ 3,
+ 0x3 = logical Lane0 to physical Lane 7, 0x4 = logical Lane0 to physical lane 15. */
+ uint32_t alfpce : 1; /**< [ 16: 16](R/W) Auto lane flip control enable. When set to 1, the core will try to flip the lanes
+ autonomously in Detect LTSSM state when lane0 is not detected. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t reserved_21 : 1;
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg515_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t reserved_21 : 1;
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t le : 9; /**< [ 16: 8](R/W) Lane enable. Indicates the number of lanes to check for exit from electrical idle in
+ Polling.Active and Polling.Compliance. 0x1 = x1, 0x2 = x2, etc. Used to limit the maximum
+ link width to ignore broken lanes that detect a receiver, but will not exit electrical
+ idle and would otherwise prevent a valid link from being configured. */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+#else /* Word 0 - Little Endian */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+ uint32_t le : 9; /**< [ 16: 8](R/W) Lane enable. Indicates the number of lanes to check for exit from electrical idle in
+ Polling.Active and Polling.Compliance. 0x1 = x1, 0x2 = x2, etc. Used to limit the maximum
+ link width to ignore broken lanes that detect a receiver, but will not exit electrical
+ idle and would otherwise prevent a valid link from being configured. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates full swing. When set to 0, indicates low swing. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports. */
+ uint32_t reserved_21 : 1;
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn88xx;
+ struct bdk_pciercx_cfg515_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t reserved_21 : 1;
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports.
+ 1 = -3.5 dB.
+ 0 = -6 dB. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates low swing. When set to 0, indicates full swing. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t alaneflip : 1; /**< [ 16: 16](R/W) Enable auto flipping of the lanes. */
+ uint32_t pdetlane : 3; /**< [ 15: 13](R/W) Predetermined lane for auto flip. This field defines which
+ physical lane is connected to logical Lane0 by the flip
+ operation performed in detect.
+ 0x0 = Reserved.
+ 0x1 = Connect logical Lane0 to physical lane 1.
+ 0x2 = Connect logical Lane0 to physical lane 3.
+ 0x3 = Connect logical Lane0 to physical lane 7.
+ 0x4 = Connect logical Lane0 to physical lane 15.
+ 0x5 - 0x7 = Reserved. */
+ uint32_t nlanes : 5; /**< [ 12: 8](R/W) Predetermined number of lanes. Defines the number of
+ lanes which are connected and not bad. Used to limit the
+ effective link width to ignore "broken" or "unused" lanes that
+ detect a receiver. Indicates the number of lanes to check for
+ exit from electrical idle in Polling.Active and L2.Idle.
+ 0x1 = 1 lane.
+ 0x2 = 2 lanes.
+ 0x3 = 3 lanes.
+ ...
+ 0x8 = 8 lanes.
+ 0x9-0x1F = Reserved.
+
+ When there are unused lanes in the system, then this value must reflect the
+ number of lanes. PCIEEP()_CFG452[LME] must also be changed likewise. */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+#else /* Word 0 - Little Endian */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) N_FTS. Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+ uint32_t nlanes : 5; /**< [ 12: 8](R/W) Predetermined number of lanes. Defines the number of
+ lanes which are connected and not bad. Used to limit the
+ effective link width to ignore "broken" or "unused" lanes that
+ detect a receiver. Indicates the number of lanes to check for
+ exit from electrical idle in Polling.Active and L2.Idle.
+ 0x1 = 1 lane.
+ 0x2 = 2 lanes.
+ 0x3 = 3 lanes.
+ ...
+ 0x8 = 8 lanes.
+ 0x9-0x1F = Reserved.
+
+ When there are unused lanes in the system, then this value must reflect the
+ number of lanes. PCIEEP()_CFG452[LME] must also be changed likewise. */
+ uint32_t pdetlane : 3; /**< [ 15: 13](R/W) Predetermined lane for auto flip. This field defines which
+ physical lane is connected to logical Lane0 by the flip
+ operation performed in detect.
+ 0x0 = Reserved.
+ 0x1 = Connect logical Lane0 to physical lane 1.
+ 0x2 = Connect logical Lane0 to physical lane 3.
+ 0x3 = Connect logical Lane0 to physical lane 7.
+ 0x4 = Connect logical Lane0 to physical lane 15.
+ 0x5 - 0x7 = Reserved. */
+ uint32_t alaneflip : 1; /**< [ 16: 16](R/W) Enable auto flipping of the lanes. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of 1 initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to 1,
+ indicates low swing. When set to 0, indicates full swing. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to 1, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to 1). */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) SEL_DE_EMPHASIS. Used to set the deemphasis level for upstream ports.
+ 1 = -3.5 dB.
+ 0 = -6 dB. */
+ uint32_t reserved_21 : 1;
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg515 bdk_pciercx_cfg515_t;
+
+static inline uint64_t BDK_PCIERCX_CFG515(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG515(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x2000000080cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x2000000080cll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x2000000080cll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG515", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG515(a) bdk_pciercx_cfg515_t
+#define bustype_BDK_PCIERCX_CFG515(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG515(a) "PCIERCX_CFG515"
+#define busnum_BDK_PCIERCX_CFG515(a) (a)
+#define arguments_BDK_PCIERCX_CFG515(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg516
+ *
+ * PCIe RC PHY Status Register
+ * This register contains the five hundred seventeenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg516
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg516_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t phy_stat : 32; /**< [ 31: 0](RO/H) PHY status. */
+#else /* Word 0 - Little Endian */
+ uint32_t phy_stat : 32; /**< [ 31: 0](RO/H) PHY status. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg516_s cn; */
+};
+typedef union bdk_pciercx_cfg516 bdk_pciercx_cfg516_t;
+
+static inline uint64_t BDK_PCIERCX_CFG516(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG516(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000810ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000810ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000810ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG516", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG516(a) bdk_pciercx_cfg516_t
+#define bustype_BDK_PCIERCX_CFG516(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG516(a) "PCIERCX_CFG516"
+#define busnum_BDK_PCIERCX_CFG516(a) (a)
+#define arguments_BDK_PCIERCX_CFG516(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg517
+ *
+ * PCIe RC PHY Control Register
+ * This register contains the five hundred eighteenth 32-bits of PCIe type 1 configuration space.
+ */
+union bdk_pciercx_cfg517
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg517_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t phy_ctrl : 32; /**< [ 31: 0](R/W) PHY control. */
+#else /* Word 0 - Little Endian */
+ uint32_t phy_ctrl : 32; /**< [ 31: 0](R/W) PHY control. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg517_s cn; */
+};
+typedef union bdk_pciercx_cfg517 bdk_pciercx_cfg517_t;
+
+static inline uint64_t BDK_PCIERCX_CFG517(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG517(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000814ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000814ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000814ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG517", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG517(a) bdk_pciercx_cfg517_t
+#define bustype_BDK_PCIERCX_CFG517(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG517(a) "PCIERCX_CFG517"
+#define busnum_BDK_PCIERCX_CFG517(a) (a)
+#define arguments_BDK_PCIERCX_CFG517(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg548
+ *
+ * PCIe RC Gen3 Control Register
+ * This register contains the five hundred forty-ninth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg548
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg548_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t rss : 2; /**< [ 25: 24](RO) Data rate for shadow register. Hard-wired for Gen3. */
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval Different Time Assertion Disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t reserved_19_22 : 4;
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t rxeq_rgrdless_rsts : 1; /**< [ 13: 13](R/W) The controller as Gen3 EQ master asserts RxEqEval to instruct the
+ PHY to do Rx adaptation and evaluation.
+ 0x0 = Asserts after 1 us and 2 TS1 received from remote partner.
+ 0x1 = Asserts after 500 ns regardless of TS's received or not. */
+ uint32_t rxeq_ph01_en : 1; /**< [ 12: 12](R/W) Rx Equalization Phase 0/Phase 1 Hold Enable. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t reserved_1_7 : 7;
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+#else /* Word 0 - Little Endian */
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t rxeq_ph01_en : 1; /**< [ 12: 12](R/W) Rx Equalization Phase 0/Phase 1 Hold Enable. */
+ uint32_t rxeq_rgrdless_rsts : 1; /**< [ 13: 13](R/W) The controller as Gen3 EQ master asserts RxEqEval to instruct the
+ PHY to do Rx adaptation and evaluation.
+ 0x0 = Asserts after 1 us and 2 TS1 received from remote partner.
+ 0x1 = Asserts after 500 ns regardless of TS's received or not. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t reserved_19_22 : 4;
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval Different Time Assertion Disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t rss : 2; /**< [ 25: 24](RO) Data rate for shadow register. Hard-wired for Gen3. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg548_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t rss : 2; /**< [ 25: 24](RO) Data rate for shadow register. Hard-wired for Gen3. */
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval Different Time Assertion Disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t reserved_19_22 : 4;
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t reserved_12 : 1;
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t reserved_1_7 : 7;
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+#else /* Word 0 - Little Endian */
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t reserved_12 : 1;
+ uint32_t reserved_13_15 : 3;
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t reserved_19_22 : 4;
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval Different Time Assertion Disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t rss : 2; /**< [ 25: 24](RO) Data rate for shadow register. Hard-wired for Gen3. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg548_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_19_31 : 13;
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t reserved_12 : 1;
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t reserved_1_7 : 7;
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+#else /* Word 0 - Little Endian */
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t reserved_12 : 1;
+ uint32_t reserved_13_15 : 3;
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t reserved_19_31 : 13;
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_pciercx_cfg548_s cn83xx; */
+};
+typedef union bdk_pciercx_cfg548 bdk_pciercx_cfg548_t;
+
+static inline uint64_t BDK_PCIERCX_CFG548(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG548(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x20000000890ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x20000000890ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x20000000890ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG548", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG548(a) bdk_pciercx_cfg548_t
+#define bustype_BDK_PCIERCX_CFG548(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG548(a) "PCIERCX_CFG548"
+#define busnum_BDK_PCIERCX_CFG548(a) (a)
+#define arguments_BDK_PCIERCX_CFG548(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg554
+ *
+ * PCIe RC Gen3 EQ Control Register
+ * This register contains the five hundred fifty-fifth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg554
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg554_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_27_31 : 5;
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t reserved_25 : 1;
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part
+ of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part
+ of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t reserved_25 : 1;
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t reserved_27_31 : 5;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg554_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t reserved_25 : 1;
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0000000000000000: No preset req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxxx1: Preset 0 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxx1x: Preset 1 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxx1xx: Preset 2 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxx1xxx: Preset 3 req/evaluated in EQ master phase
+
+ _ 00000xxxxxx1xxxx: Preset 4 req/evaluated in EQ master phase
+
+ _ 00000xxxxx1xxxxx: Preset 5 req/evaluated in EQ master phase
+
+ _ 00000xxxx1xxxxxx: Preset 6 req/evaluated in EQ master phase
+
+ _ 00000xxx1xxxxxxx: Preset 7 req/evaluated in EQ master phase
+
+ _ 00000xx1xxxxxxxx: Preset 8 req/evaluated in EQ master phase
+
+ _ 00000x1xxxxxxxxx: Preset 9 req/evaluated in EQ master phase
+
+ _ 000001xxxxxxxxxx: Preset 10 req/evaluated in EQ master phase
+
+ _ All other encodings: Reserved */
+ uint32_t reserved_6_7 : 2;
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0000000000000000: No preset req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxxx1: Preset 0 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxx1x: Preset 1 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxx1xx: Preset 2 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxx1xxx: Preset 3 req/evaluated in EQ master phase
+
+ _ 00000xxxxxx1xxxx: Preset 4 req/evaluated in EQ master phase
+
+ _ 00000xxxxx1xxxxx: Preset 5 req/evaluated in EQ master phase
+
+ _ 00000xxxx1xxxxxx: Preset 6 req/evaluated in EQ master phase
+
+ _ 00000xxx1xxxxxxx: Preset 7 req/evaluated in EQ master phase
+
+ _ 00000xx1xxxxxxxx: Preset 8 req/evaluated in EQ master phase
+
+ _ 00000x1xxxxxxxxx: Preset 9 req/evaluated in EQ master phase
+
+ _ 000001xxxxxxxxxx: Preset 10 req/evaluated in EQ master phase
+
+ _ All other encodings: Reserved */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t reserved_25 : 1;
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ /* struct bdk_pciercx_cfg554_s cn81xx; */
+ struct bdk_pciercx_cfg554_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_27_31 : 5;
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t reserved_25 : 1;
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t reserved_25 : 1;
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t reserved_27_31 : 5;
+#endif /* Word 0 - End */
+ } cn83xx;
+ struct bdk_pciercx_cfg554_cn88xxp2
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t reserved_25 : 1;
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part
+ of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0000000000000000: No preset req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxxx1: Preset 0 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxx1x: Preset 1 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxx1xx: Preset 2 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxx1xxx: Preset 3 req/evaluated in EQ master phase
+
+ _ 00000xxxxxx1xxxx: Preset 4 req/evaluated in EQ master phase
+
+ _ 00000xxxxx1xxxxx: Preset 5 req/evaluated in EQ master phase
+
+ _ 00000xxxx1xxxxxx: Preset 6 req/evaluated in EQ master phase
+
+ _ 00000xxx1xxxxxxx: Preset 7 req/evaluated in EQ master phase
+
+ _ 00000xx1xxxxxxxx: Preset 8 req/evaluated in EQ master phase
+
+ _ 00000x1xxxxxxxxx: Preset 9 req/evaluated in EQ master phase
+
+ _ 000001xxxxxxxxxx: Preset 10 req/evaluated in EQ master phase
+
+ _ All other encodings: Reserved */
+ uint32_t reserved_6_7 : 2;
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change (not supported).
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part
+ of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0000000000000000: No preset req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxxx1: Preset 0 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxxx1x: Preset 1 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxxx1xx: Preset 2 req/evaluated in EQ master phase
+
+ _ 00000xxxxxxx1xxx: Preset 3 req/evaluated in EQ master phase
+
+ _ 00000xxxxxx1xxxx: Preset 4 req/evaluated in EQ master phase
+
+ _ 00000xxxxx1xxxxx: Preset 5 req/evaluated in EQ master phase
+
+ _ 00000xxxx1xxxxxx: Preset 6 req/evaluated in EQ master phase
+
+ _ 00000xxx1xxxxxxx: Preset 7 req/evaluated in EQ master phase
+
+ _ 00000xx1xxxxxxxx: Preset 8 req/evaluated in EQ master phase
+
+ _ 00000x1xxxxxxxxx: Preset 9 req/evaluated in EQ master phase
+
+ _ 000001xxxxxxxxxx: Preset 10 req/evaluated in EQ master phase
+
+ _ All other encodings: Reserved */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t reserved_25 : 1;
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn88xxp2;
+};
+typedef union bdk_pciercx_cfg554 bdk_pciercx_cfg554_t;
+
+static inline uint64_t BDK_PCIERCX_CFG554(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG554(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000008a8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000008a8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000008a8ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG554", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG554(a) bdk_pciercx_cfg554_t
+#define bustype_BDK_PCIERCX_CFG554(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG554(a) "PCIERCX_CFG554"
+#define busnum_BDK_PCIERCX_CFG554(a) (a)
+#define arguments_BDK_PCIERCX_CFG554(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg558
+ *
+ * PCIe RC Gen3 PIPE Loopback Register
+ * This register contains the five hundred fifty-ninth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg558
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg558_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+ uint32_t reserved_0_30 : 31;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_30 : 31;
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg558_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+ uint32_t rxstatus : 31; /**< [ 30: 0](RO/H) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t rxstatus : 31; /**< [ 30: 0](RO/H) Reserved. */
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_pciercx_cfg558_cn81xx cn88xx; */
+ struct bdk_pciercx_cfg558_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+ uint32_t reserved_16_30 : 15;
+ uint32_t lpbk_rxvalid : 16; /**< [ 15: 0](R/W) Loopback rxvalid (lane enable - 1 bit per lane) */
+#else /* Word 0 - Little Endian */
+ uint32_t lpbk_rxvalid : 16; /**< [ 15: 0](R/W) Loopback rxvalid (lane enable - 1 bit per lane) */
+ uint32_t reserved_16_30 : 15;
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg558 bdk_pciercx_cfg558_t;
+
+static inline uint64_t BDK_PCIERCX_CFG558(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG558(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000008b8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000008b8ll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=5))
+ return 0x200000008b8ll + 0x100000000ll * ((a) & 0x7);
+ __bdk_csr_fatal("PCIERCX_CFG558", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG558(a) bdk_pciercx_cfg558_t
+#define bustype_BDK_PCIERCX_CFG558(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG558(a) "PCIERCX_CFG558"
+#define busnum_BDK_PCIERCX_CFG558(a) (a)
+#define arguments_BDK_PCIERCX_CFG558(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg559
+ *
+ * PCIe RC Miscellaneous Control 1 Register
+ * This register contains the five hundred sixtieth 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg559
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg559_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Not Supported. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEFAULT_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. This bit should not be cleared in normal operation. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. This bit should not be cleared in normal operation. */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEFAULT_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Not Supported. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_cfg559_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. This bit should not be cleared in normal operation. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. This bit should not be cleared in normal operation. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } cn81xx;
+ struct bdk_pciercx_cfg559_cn83xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Not Supported. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEFAULT_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. When you set this bit, then some
+ RO bits are writable from the DBI. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. When you set this bit, then some
+ RO bits are writable from the DBI. */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEFAULT_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Not Supported. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } cn83xx;
+};
+typedef union bdk_pciercx_cfg559 bdk_pciercx_cfg559_t;
+
+static inline uint64_t BDK_PCIERCX_CFG559(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG559(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000008bcll + 0x100000000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000008bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG559", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG559(a) bdk_pciercx_cfg559_t
+#define bustype_BDK_PCIERCX_CFG559(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG559(a) "PCIERCX_CFG559"
+#define busnum_BDK_PCIERCX_CFG559(a) (a)
+#define arguments_BDK_PCIERCX_CFG559(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg560
+ *
+ * PCIe RC UpConfigure Multi-lane Control Register
+ * This register contains the five hundred sixty-first 32-bits of PCIe type 0 configuration space.
+ */
+union bdk_pciercx_cfg560
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg560_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t upc_supp : 1; /**< [ 7: 7](R/W) Upconfigure support.
+ The core sends this value to the link upconfigure capability in TS2 ordered
+ sets in Configuration.Complete state. */
+ uint32_t dir_lnk_wdth_chg : 1; /**< [ 6: 6](R/W/H) Directed link width change.
+ The core always moves to configuration state through recovery state
+ when this bit is set.
+
+ If PCIERC()_CFG144[LTSSM_VAR] is set and PCIERC()_CFG040[HASD]
+ is 0, the core starts upconfigure or autonomous width
+ downsizing (to the TRGT_LNK_WDTH value) in the configuration
+ state.
+
+ If TRGT_LNK_WDTH value is 0x0, the core does not
+ start upconfigure or autonomous width downsizing in the
+ configuration state.
+
+ The core self-clears this field when the core accepts this
+ request. */
+ uint32_t trgt_lnk_wdth : 6; /**< [ 5: 0](R/W/H) Target link width.
+ 0x0 = Core does not start upconfigure or autonomous width downsizing in configuration
+ state.
+ 0x1 = x1.
+ 0x2 = x2.
+ 0x4 = x4.
+ 0x8 = x8.
+ 0x10 = x16 (Not Supported).
+ 0x20 = x32 (Not Supported). */
+#else /* Word 0 - Little Endian */
+ uint32_t trgt_lnk_wdth : 6; /**< [ 5: 0](R/W/H) Target link width.
+ 0x0 = Core does not start upconfigure or autonomous width downsizing in configuration
+ state.
+ 0x1 = x1.
+ 0x2 = x2.
+ 0x4 = x4.
+ 0x8 = x8.
+ 0x10 = x16 (Not Supported).
+ 0x20 = x32 (Not Supported). */
+ uint32_t dir_lnk_wdth_chg : 1; /**< [ 6: 6](R/W/H) Directed link width change.
+ The core always moves to configuration state through recovery state
+ when this bit is set.
+
+ If PCIERC()_CFG144[LTSSM_VAR] is set and PCIERC()_CFG040[HASD]
+ is 0, the core starts upconfigure or autonomous width
+ downsizing (to the TRGT_LNK_WDTH value) in the configuration
+ state.
+
+ If TRGT_LNK_WDTH value is 0x0, the core does not
+ start upconfigure or autonomous width downsizing in the
+ configuration state.
+
+ The core self-clears this field when the core accepts this
+ request. */
+ uint32_t upc_supp : 1; /**< [ 7: 7](R/W) Upconfigure support.
+ The core sends this value to the link upconfigure capability in TS2 ordered
+ sets in Configuration.Complete state. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg560_s cn; */
+};
+typedef union bdk_pciercx_cfg560 bdk_pciercx_cfg560_t;
+
+static inline uint64_t BDK_PCIERCX_CFG560(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG560(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
+ return 0x200000008c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG560", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG560(a) bdk_pciercx_cfg560_t
+#define bustype_BDK_PCIERCX_CFG560(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG560(a) "PCIERCX_CFG560"
+#define busnum_BDK_PCIERCX_CFG560(a) (a)
+#define arguments_BDK_PCIERCX_CFG560(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg568
+ *
+ * PCIe RC ACE Cache Coherency Control 1 Register
+ * This register contains the five hundred sixty-eigth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg568
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg568_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t cfg_memtype_boundary_l_addr : 30;/**< [ 31: 2](R/W) Reserved. */
+ uint32_t reserved_1 : 1;
+ uint32_t cfg_memtype_value : 1; /**< [ 0: 0](R/W) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t cfg_memtype_value : 1; /**< [ 0: 0](R/W) Reserved. */
+ uint32_t reserved_1 : 1;
+ uint32_t cfg_memtype_boundary_l_addr : 30;/**< [ 31: 2](R/W) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg568_s cn; */
+};
+typedef union bdk_pciercx_cfg568 bdk_pciercx_cfg568_t;
+
+static inline uint64_t BDK_PCIERCX_CFG568(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG568(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000008e0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG568", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG568(a) bdk_pciercx_cfg568_t
+#define bustype_BDK_PCIERCX_CFG568(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG568(a) "PCIERCX_CFG568"
+#define busnum_BDK_PCIERCX_CFG568(a) (a)
+#define arguments_BDK_PCIERCX_CFG568(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cfg569
+ *
+ * PCIe RC ACE Cache Coherency Control 2 Register
+ * This register contains the five hundred sixty-eigth 32-bits of type 0 PCIe configuration space.
+ */
+union bdk_pciercx_cfg569
+{
+ uint32_t u;
+ struct bdk_pciercx_cfg569_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t cfg_memtype_boundary_h_addr : 32;/**< [ 31: 0](R/W) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t cfg_memtype_boundary_h_addr : 32;/**< [ 31: 0](R/W) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cfg569_s cn; */
+};
+typedef union bdk_pciercx_cfg569 bdk_pciercx_cfg569_t;
+
+static inline uint64_t BDK_PCIERCX_CFG569(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CFG569(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=2))
+ return 0x200000008e4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CFG569", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CFG569(a) bdk_pciercx_cfg569_t
+#define bustype_BDK_PCIERCX_CFG569(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CFG569(a) "PCIERCX_CFG569"
+#define busnum_BDK_PCIERCX_CFG569(a) (a)
+#define arguments_BDK_PCIERCX_CFG569(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_clk_gating_ctl
+ *
+ * PCIe RC RADM Clock Gating Enable Control Register
+ */
+union bdk_pciercx_clk_gating_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_clk_gating_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t radm_clk_gating_en : 1; /**< [ 0: 0](R/W) Enable RADM clock gating feature when there is no
+ receive traffic, receive queues and pre/post-queue pipelines
+ are empty, RADM completion LUT is empty, and there
+ are no FLR actions pending.
+ 0x0 = Disable.
+ 0x1 = Enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t radm_clk_gating_en : 1; /**< [ 0: 0](R/W) Enable RADM clock gating feature when there is no
+ receive traffic, receive queues and pre/post-queue pipelines
+ are empty, RADM completion LUT is empty, and there
+ are no FLR actions pending.
+ 0x0 = Disable.
+ 0x1 = Enable. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_clk_gating_ctl_s cn; */
+};
+typedef union bdk_pciercx_clk_gating_ctl bdk_pciercx_clk_gating_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_CLK_GATING_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CLK_GATING_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x88cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CLK_GATING_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CLK_GATING_CTL(a) bdk_pciercx_clk_gating_ctl_t
+#define bustype_BDK_PCIERCX_CLK_GATING_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CLK_GATING_CTL(a) "PCIERCX_CLK_GATING_CTL"
+#define busnum_BDK_PCIERCX_CLK_GATING_CTL(a) (a)
+#define arguments_BDK_PCIERCX_CLK_GATING_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_clsize
+ *
+ * PCIe RC BIST, Header Type, Master Latency Timer, Cache Line Size Register
+ */
+union bdk_pciercx_clsize
+{
+ uint32_t u;
+ struct bdk_pciercx_clsize_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register
+ are hardwired to zero. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. Writing to the cache line size
+ register does not impact functionality of the PCI Express bus. */
+#else /* Word 0 - Little Endian */
+ uint32_t cls : 8; /**< [ 7: 0](R/W) Cache line size. The cache line size register is R/W for legacy compatibility purposes and
+ is not applicable to PCI Express device functionality. Writing to the cache line size
+ register does not impact functionality of the PCI Express bus. */
+ uint32_t lt : 8; /**< [ 15: 8](RO) Master latency timer. Not applicable for PCI Express, hardwired to 0x0. */
+ uint32_t chf : 7; /**< [ 22: 16](RO) Configuration header format. Hardwired to 0x1. */
+ uint32_t mfd : 1; /**< [ 23: 23](RO) Multi function device. */
+ uint32_t bist : 8; /**< [ 31: 24](RO) The BIST register functions are not supported. All 8 bits of the BIST register
+ are hardwired to zero. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_clsize_s cn; */
+};
+typedef union bdk_pciercx_clsize bdk_pciercx_clsize_t;
+
+static inline uint64_t BDK_PCIERCX_CLSIZE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CLSIZE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CLSIZE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CLSIZE(a) bdk_pciercx_clsize_t
+#define bustype_BDK_PCIERCX_CLSIZE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CLSIZE(a) "PCIERCX_CLSIZE"
+#define busnum_BDK_PCIERCX_CLSIZE(a) (a)
+#define arguments_BDK_PCIERCX_CLSIZE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cmd
+ *
+ * PCIe RC Command/Status Register
+ */
+union bdk_pciercx_cmd
+{
+ uint32_t u;
+ struct bdk_pciercx_cmd_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t reserved_22 : 1;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to one. */
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable.
+ There are no I/O BARs supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t isae : 1; /**< [ 0: 0](R/W) I/O space access enable.
+ There are no I/O BARs supported. */
+ uint32_t msae : 1; /**< [ 1: 1](R/W) Memory space access enable. */
+ uint32_t me : 1; /**< [ 2: 2](R/W) Bus master enable. */
+ uint32_t scse : 1; /**< [ 3: 3](RO) Special cycle enable. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t mwice : 1; /**< [ 4: 4](RO) Memory write and invalidate. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t vps : 1; /**< [ 5: 5](RO) VGA palette snoop. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t per : 1; /**< [ 6: 6](R/W) Parity error response. */
+ uint32_t ids_wcc : 1; /**< [ 7: 7](RO) IDSEL stepping/wait cycle control. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t see : 1; /**< [ 8: 8](R/W) SERR# enable. */
+ uint32_t fbbe : 1; /**< [ 9: 9](RO) Fast back-to-back transaction enable. Not applicable for PCI Express. Must be hardwired to zero. */
+ uint32_t i_dis : 1; /**< [ 10: 10](R/W) INTx assertion disable. */
+ uint32_t reserved_11_18 : 8;
+ uint32_t i_stat : 1; /**< [ 19: 19](RO) INTx status. */
+ uint32_t cl : 1; /**< [ 20: 20](RO) Capabilities list. Indicates presence of an extended capability item. Hardwired to one. */
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t reserved_22 : 1;
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to 0x0. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cmd_s cn; */
+};
+typedef union bdk_pciercx_cmd bdk_pciercx_cmd_t;
+
+static inline uint64_t BDK_PCIERCX_CMD(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_CMD(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_CMD", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_CMD(a) bdk_pciercx_cmd_t
+#define bustype_BDK_PCIERCX_CMD(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_CMD(a) "PCIERCX_CMD"
+#define busnum_BDK_PCIERCX_CMD(a) (a)
+#define arguments_BDK_PCIERCX_CMD(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cor_err_msk
+ *
+ * PCIe RC Correctable Error Mask Register
+ */
+union bdk_pciercx_cor_err_msk
+{
+ uint32_t u;
+ struct bdk_pciercx_cor_err_msk_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t chlom : 1; /**< [ 15: 15](R/W) Corrected header log overflow error mask. */
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+#else /* Word 0 - Little Endian */
+ uint32_t rem : 1; /**< [ 0: 0](R/W) Receiver error mask. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlpm : 1; /**< [ 6: 6](R/W) Bad TLP mask. */
+ uint32_t bdllpm : 1; /**< [ 7: 7](R/W) Bad DLLP mask. */
+ uint32_t rnrm : 1; /**< [ 8: 8](R/W) REPLAY_NUM rollover mask. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rttm : 1; /**< [ 12: 12](R/W) Replay timer timeout mask. */
+ uint32_t anfem : 1; /**< [ 13: 13](R/W) Advisory nonfatal error mask. */
+ uint32_t ciem : 1; /**< [ 14: 14](R/W) Corrected internal error mask. */
+ uint32_t chlom : 1; /**< [ 15: 15](R/W) Corrected header log overflow error mask. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cor_err_msk_s cn; */
+};
+typedef union bdk_pciercx_cor_err_msk bdk_pciercx_cor_err_msk_t;
+
+static inline uint64_t BDK_PCIERCX_COR_ERR_MSK(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_COR_ERR_MSK(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x114ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_COR_ERR_MSK", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_COR_ERR_MSK(a) bdk_pciercx_cor_err_msk_t
+#define bustype_BDK_PCIERCX_COR_ERR_MSK(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_COR_ERR_MSK(a) "PCIERCX_COR_ERR_MSK"
+#define busnum_BDK_PCIERCX_COR_ERR_MSK(a) (a)
+#define arguments_BDK_PCIERCX_COR_ERR_MSK(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_cor_err_stat
+ *
+ * PCIe RC Correctable Error Status Register
+ */
+union bdk_pciercx_cor_err_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_cor_err_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C/H) Corrected internal error status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+#else /* Word 0 - Little Endian */
+ uint32_t res : 1; /**< [ 0: 0](R/W1C/H) Receiver error status. */
+ uint32_t reserved_1_5 : 5;
+ uint32_t btlps : 1; /**< [ 6: 6](R/W1C/H) Bad TLP status. */
+ uint32_t bdllps : 1; /**< [ 7: 7](R/W1C/H) Bad DLLP status. */
+ uint32_t rnrs : 1; /**< [ 8: 8](R/W1C/H) REPLAY_NUM rollover status. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t rtts : 1; /**< [ 12: 12](R/W1C/H) Replay timer timeout status. */
+ uint32_t anfes : 1; /**< [ 13: 13](R/W1C/H) Advisory nonfatal error status. */
+ uint32_t cies : 1; /**< [ 14: 14](R/W1C/H) Corrected internal error status. */
+ uint32_t chlo : 1; /**< [ 15: 15](R/W1C/H) Corrected header log overflow status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_cor_err_stat_s cn; */
+};
+typedef union bdk_pciercx_cor_err_stat bdk_pciercx_cor_err_stat_t;
+
+static inline uint64_t BDK_PCIERCX_COR_ERR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_COR_ERR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x110ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_COR_ERR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_COR_ERR_STAT(a) bdk_pciercx_cor_err_stat_t
+#define bustype_BDK_PCIERCX_COR_ERR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_COR_ERR_STAT(a) "PCIERCX_COR_ERR_STAT"
+#define busnum_BDK_PCIERCX_COR_ERR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_COR_ERR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dbg0
+ *
+ * PCIe RC Debug Register 0
+ */
+union bdk_pciercx_dbg0
+{
+ uint32_t u;
+ struct bdk_pciercx_dbg0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dbg_info_l32 : 32; /**< [ 31: 0](RO/H) Debug info lower 32 bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbg_info_l32 : 32; /**< [ 31: 0](RO/H) Debug info lower 32 bits. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dbg0_s cn; */
+};
+typedef union bdk_pciercx_dbg0 bdk_pciercx_dbg0_t;
+
+static inline uint64_t BDK_PCIERCX_DBG0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DBG0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x728ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DBG0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DBG0(a) bdk_pciercx_dbg0_t
+#define bustype_BDK_PCIERCX_DBG0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DBG0(a) "PCIERCX_DBG0"
+#define busnum_BDK_PCIERCX_DBG0(a) (a)
+#define arguments_BDK_PCIERCX_DBG0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dbg1
+ *
+ * PCIe RC Debug Register 1
+ */
+union bdk_pciercx_dbg1
+{
+ uint32_t u;
+ struct bdk_pciercx_dbg1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dbg_info_u32 : 32; /**< [ 31: 0](RO/H) Debug info upper 32 bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbg_info_u32 : 32; /**< [ 31: 0](RO/H) Debug info upper 32 bits. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dbg1_s cn; */
+};
+typedef union bdk_pciercx_dbg1 bdk_pciercx_dbg1_t;
+
+static inline uint64_t BDK_PCIERCX_DBG1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DBG1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x72cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DBG1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DBG1(a) bdk_pciercx_dbg1_t
+#define bustype_BDK_PCIERCX_DBG1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DBG1(a) "PCIERCX_DBG1"
+#define busnum_BDK_PCIERCX_DBG1(a) (a)
+#define arguments_BDK_PCIERCX_DBG1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dev_cap
+ *
+ * PCIe RC Device Capabilities Register
+ */
+union bdk_pciercx_dev_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_dev_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_dev_cap_cn
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_14 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_12 : 1;
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t mpss : 3; /**< [ 2: 0](RO/WRSL) Max_Payload_Size supported, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pfs : 2; /**< [ 4: 3](RO/WRSL) Phantom function supported. This field is writable through
+ PEM()_CFG_WR. However, phantom function is not supported. Therefore, the application
+ must not write any value other than 0x0 to this field. */
+ uint32_t etfs : 1; /**< [ 5: 5](RO/WRSL) Extended tag field supported. This bit is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t el0al : 3; /**< [ 8: 6](RO) Endpoint L0s acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t el1al : 3; /**< [ 11: 9](RO) Endpoint L1 acceptable latency, writable through PEM()_CFG_WR. Must be 0x0 for non-
+ endpoint devices. */
+ uint32_t reserved_12 : 1;
+ uint32_t reserved_13 : 1;
+ uint32_t reserved_14 : 1;
+ uint32_t rber : 1; /**< [ 15: 15](RO/WRSL) Role-based error reporting, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t reserved_16_17 : 2;
+ uint32_t csplv : 8; /**< [ 25: 18](RO) Captured slot power limit value. Not applicable for RC port, upstream port only. */
+ uint32_t cspls : 2; /**< [ 27: 26](RO) Captured slot power limit scale. Not applicable for RC port, upstream port only */
+ uint32_t flr_cap : 1; /**< [ 28: 28](RO) Function level reset capability. This bit applies to endpoints only. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } cn;
+};
+typedef union bdk_pciercx_dev_cap bdk_pciercx_dev_cap_t;
+
+static inline uint64_t BDK_PCIERCX_DEV_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DEV_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x74ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DEV_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DEV_CAP(a) bdk_pciercx_dev_cap_t
+#define bustype_BDK_PCIERCX_DEV_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DEV_CAP(a) "PCIERCX_DEV_CAP"
+#define busnum_BDK_PCIERCX_DEV_CAP(a) (a)
+#define arguments_BDK_PCIERCX_DEV_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dev_cap2
+ *
+ * PCIe RC Device Capabilities 2 Register
+ */
+union bdk_pciercx_dev_cap2
+{
+ uint32_t u;
+ struct bdk_pciercx_dev_cap2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t meetp : 2; /**< [ 23: 22](RO/WRSL) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO/WRSL) End-end TLP prefix supported. */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported. */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported. */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO/H) 10-bit tag requestor supported.
+
+ Reset values:
+ _ UPEM: 0x1.
+ _ BPEM: 0x0. */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported. */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctrs : 4; /**< [ 3: 0](RO/H) Completion timeout ranges supported. */
+ uint32_t ctds : 1; /**< [ 4: 4](RO) Completion timeout disable supported. */
+ uint32_t ari_fw : 1; /**< [ 5: 5](RO) Alternate routing ID forwarding supported. */
+ uint32_t atom_ops : 1; /**< [ 6: 6](RO) AtomicOp routing supported. */
+ uint32_t atom32s : 1; /**< [ 7: 7](RO) 32-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom64s : 1; /**< [ 8: 8](RO) 64-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t atom128s : 1; /**< [ 9: 9](RO) 128-bit AtomicOp supported.
+ Note that inbound AtomicOps targeting BAR0 are not supported and are dropped as an
+ unsupported request. */
+ uint32_t noroprpr : 1; /**< [ 10: 10](RO/H) No RO-enabled PR-PR passing. When set, the routing element never carries out the passing
+ permitted in the relaxed ordering model. */
+ uint32_t ltrs : 1; /**< [ 11: 11](RO) Latency tolerance reporting (LTR) mechanism supported. */
+ uint32_t tph : 2; /**< [ 13: 12](RO) TPH completer supported. */
+ uint32_t ln_sys_cls : 2; /**< [ 15: 14](RO) LN System CLS (not supported). */
+ uint32_t tag10b_cpl_supp : 1; /**< [ 16: 16](RO) 10-bit tag completer supported. */
+ uint32_t tag10b_req_supp : 1; /**< [ 17: 17](RO/H) 10-bit tag requestor supported.
+
+ Reset values:
+ _ UPEM: 0x1.
+ _ BPEM: 0x0. */
+ uint32_t obffs : 2; /**< [ 19: 18](RO) Optimized buffer flush fill (OBFF) supported. */
+ uint32_t effs : 1; /**< [ 20: 20](RO/WRSL) Extended fmt field supported. */
+ uint32_t eetps : 1; /**< [ 21: 21](RO/WRSL) End-end TLP prefix supported. */
+ uint32_t meetp : 2; /**< [ 23: 22](RO/WRSL) Max end-end TLP prefixes.
+ 0x1 = 1.
+ 0x2 = 2.
+ 0x3 = 3.
+ 0x0 = 4. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dev_cap2_s cn; */
+};
+typedef union bdk_pciercx_dev_cap2 bdk_pciercx_dev_cap2_t;
+
+static inline uint64_t BDK_PCIERCX_DEV_CAP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DEV_CAP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x94ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DEV_CAP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DEV_CAP2(a) bdk_pciercx_dev_cap2_t
+#define bustype_BDK_PCIERCX_DEV_CAP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DEV_CAP2(a) "PCIERCX_DEV_CAP2"
+#define busnum_BDK_PCIERCX_DEV_CAP2(a) (a)
+#define arguments_BDK_PCIERCX_DEV_CAP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dev_ctl
+ *
+ * PCIe RC Device Control/Device Status Register
+ */
+union bdk_pciercx_dev_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_dev_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hardwired to zero. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to one if AUX power detected. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. [UR_D] occurs when PEM receives
+ something unsupported. Unsupported requests are nonfatal errors, so [UR_D] should cause
+ [NFE_D]. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC_UCOR_ERR_MSK that has a severity set to fatal. Malformed
+ TLPs generally fit into this category. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC_UCOR_ERR_MSK that has a severity set to Nonfatal and does
+ not meet advisory nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC_COR_ERR_STAT, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC_UCOR_ERR_MSK that has a
+ severity set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t reserved_15 : 1;
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes. */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t ap_en : 1; /**< [ 10: 10](RO) AUX power PM enable (not supported). */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values:
+ 0x0 = 128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ Larger sizes are not supported by CNXXXX.
+
+ DPI_SLI_PRT()_CFG[MPS] must be set to the same value as this field for proper
+ functionality. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t ce_en : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+ uint32_t nfe_en : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t fe_en : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t ur_en : 1; /**< [ 3: 3](R/W) Unsupported request reporting enable. */
+ uint32_t ro_en : 1; /**< [ 4: 4](R/W) Enable relaxed ordering. */
+ uint32_t mps : 3; /**< [ 7: 5](R/W) Max payload size. Legal values:
+ 0x0 = 128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ Larger sizes are not supported by CNXXXX.
+
+ DPI_SLI_PRT()_CFG[MPS] must be set to the same value as this field for proper
+ functionality. */
+ uint32_t etf_en : 1; /**< [ 8: 8](R/W) Extended tag field enable. Set this bit to enable extended tags. */
+ uint32_t pf_en : 1; /**< [ 9: 9](R/W/H) Phantom function enable. This bit should never be set; CNXXXX requests never uses phantom
+ functions. */
+ uint32_t ap_en : 1; /**< [ 10: 10](RO) AUX power PM enable (not supported). */
+ uint32_t ns_en : 1; /**< [ 11: 11](R/W) Enable no snoop. */
+ uint32_t mrrs : 3; /**< [ 14: 12](R/W) Max read request size.
+ 0x0 =128 bytes.
+ 0x1 = 256 bytes.
+ 0x2 = 512 bytes.
+ 0x3 = 1024 bytes.
+ 0x4 = 2048 bytes.
+ 0x5 = 4096 bytes. */
+ uint32_t reserved_15 : 1;
+ uint32_t ce_d : 1; /**< [ 16: 16](R/W1C/H) Correctable error detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. This field is set if we
+ receive any of the errors in PCIERC_COR_ERR_STAT, for example, a replay timer timeout.
+ Also, it can be set if we get any of the errors in PCIERC_UCOR_ERR_MSK that has a
+ severity set to nonfatal and meets the advisory nonfatal criteria, which most ECRC errors should. */
+ uint32_t nfe_d : 1; /**< [ 17: 17](R/W1C/H) Nonfatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC_UCOR_ERR_MSK that has a severity set to Nonfatal and does
+ not meet advisory nonfatal criteria, which most poisoned TLPs should. */
+ uint32_t fe_d : 1; /**< [ 18: 18](R/W1C/H) Fatal error detected. Errors are logged in this register regardless of whether or not
+ error reporting is enabled in the device control register. This field is set if we receive
+ any of the errors in PCIERC_UCOR_ERR_MSK that has a severity set to fatal. Malformed
+ TLPs generally fit into this category. */
+ uint32_t ur_d : 1; /**< [ 19: 19](R/W1C/H) Unsupported request detected. Errors are logged in this register regardless of whether or
+ not error reporting is enabled in the device control register. [UR_D] occurs when PEM receives
+ something unsupported. Unsupported requests are nonfatal errors, so [UR_D] should cause
+ [NFE_D]. Receiving a vendor-defined message should cause an unsupported request. */
+ uint32_t ap_d : 1; /**< [ 20: 20](RO) AUX power detected. Set to one if AUX power detected. */
+ uint32_t tp : 1; /**< [ 21: 21](RO) Transaction pending. Hardwired to zero. */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dev_ctl_s cn; */
+};
+typedef union bdk_pciercx_dev_ctl bdk_pciercx_dev_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_DEV_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DEV_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x78ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DEV_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DEV_CTL(a) bdk_pciercx_dev_ctl_t
+#define bustype_BDK_PCIERCX_DEV_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DEV_CTL(a) "PCIERCX_DEV_CTL"
+#define busnum_BDK_PCIERCX_DEV_CTL(a) (a)
+#define arguments_BDK_PCIERCX_DEV_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dev_ctl2
+ *
+ * PCIe RC Device Control 2 Register/Device Status 2 Register
+ */
+union bdk_pciercx_dev_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_dev_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eetpb : 1; /**< [ 15: 15](R/W) End-end TLP prefix blocking.
+ Writeable when PCIERC_DEV_CAP2[EETPS] is set. */
+ uint32_t obffe : 2; /**< [ 14: 13](R/W) Optimized buffer flush fill (OBFF) enabled. */
+ uint32_t tag10b_req_en : 1; /**< [ 12: 12](R/W/H) 10-bit tag requester enabled.
+
+ For UPEM, this bit is R/W and can be set to enable 10-bit
+ tag requester enable.
+
+ For BPEM, this bit is RO and cannot be written. */
+ uint32_t reserved_11 : 1;
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t id0_cp : 1; /**< [ 9: 9](R/W) ID based ordering completion enable (not supported). */
+ uint32_t id0_rq : 1; /**< [ 8: 8](R/W) ID based ordering request enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](R/W) AtomicOp egress blocking. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctv : 4; /**< [ 3: 0](R/W/H) Completion timeout value.
+ 0x0 = Default range: 16 ms to 55 ms.
+ 0x1 = 50 us to 100 us.
+ 0x2 = 1 ms to 10 ms.
+ 0x3 = 16 ms to 55 ms.
+ 0x6 = 65 ms to 210 ms.
+ 0x9 = 260 ms to 900 ms.
+ 0xA = 1 s to 3.5 s.
+ 0xD = 4 s to 13 s.
+ 0xE = 17 s to 64 s.
+
+ Values not defined are reserved. */
+ uint32_t ctd : 1; /**< [ 4: 4](R/W) Completion timeout disable. */
+ uint32_t ari : 1; /**< [ 5: 5](R/W) Alternate routing ID forwarding supported. */
+ uint32_t atom_op : 1; /**< [ 6: 6](R/W) AtomicOp requester enable. */
+ uint32_t atom_op_eb : 1; /**< [ 7: 7](R/W) AtomicOp egress blocking. */
+ uint32_t id0_rq : 1; /**< [ 8: 8](R/W) ID based ordering request enable. */
+ uint32_t id0_cp : 1; /**< [ 9: 9](R/W) ID based ordering completion enable (not supported). */
+ uint32_t ltre : 1; /**< [ 10: 10](RO) Latency tolerance reporting (LTR) mechanism enable. (not supported). */
+ uint32_t reserved_11 : 1;
+ uint32_t tag10b_req_en : 1; /**< [ 12: 12](R/W/H) 10-bit tag requester enabled.
+
+ For UPEM, this bit is R/W and can be set to enable 10-bit
+ tag requester enable.
+
+ For BPEM, this bit is RO and cannot be written. */
+ uint32_t obffe : 2; /**< [ 14: 13](R/W) Optimized buffer flush fill (OBFF) enabled. */
+ uint32_t eetpb : 1; /**< [ 15: 15](R/W) End-end TLP prefix blocking.
+ Writeable when PCIERC_DEV_CAP2[EETPS] is set. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dev_ctl2_s cn; */
+};
+typedef union bdk_pciercx_dev_ctl2 bdk_pciercx_dev_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_DEV_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DEV_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x98ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DEV_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DEV_CTL2(a) bdk_pciercx_dev_ctl2_t
+#define bustype_BDK_PCIERCX_DEV_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DEV_CTL2(a) "PCIERCX_DEV_CTL2"
+#define busnum_BDK_PCIERCX_DEV_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_DEV_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dl_feature_cap
+ *
+ * PCIe RC Data Link Feature Capabilities Register
+ */
+union bdk_pciercx_dl_feature_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_dl_feature_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dl_fex_en : 1; /**< [ 31: 31](RO/WRSL) Data link feature exchange enable. */
+ uint32_t reserved_23_30 : 8;
+ uint32_t lfdlfs : 22; /**< [ 22: 1](RO/WRSL) Local future data link feature supported. */
+ uint32_t lsfcs : 1; /**< [ 0: 0](RO/WRSL) Local scaled flow control supported, */
+#else /* Word 0 - Little Endian */
+ uint32_t lsfcs : 1; /**< [ 0: 0](RO/WRSL) Local scaled flow control supported, */
+ uint32_t lfdlfs : 22; /**< [ 22: 1](RO/WRSL) Local future data link feature supported. */
+ uint32_t reserved_23_30 : 8;
+ uint32_t dl_fex_en : 1; /**< [ 31: 31](RO/WRSL) Data link feature exchange enable. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dl_feature_cap_s cn; */
+};
+typedef union bdk_pciercx_dl_feature_cap bdk_pciercx_dl_feature_cap_t;
+
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x454ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DL_FEATURE_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DL_FEATURE_CAP(a) bdk_pciercx_dl_feature_cap_t
+#define bustype_BDK_PCIERCX_DL_FEATURE_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DL_FEATURE_CAP(a) "PCIERCX_DL_FEATURE_CAP"
+#define busnum_BDK_PCIERCX_DL_FEATURE_CAP(a) (a)
+#define arguments_BDK_PCIERCX_DL_FEATURE_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dl_feature_ext_hdr
+ *
+ * PCIe RC Data Link Feature Extended Capability Header Register
+ */
+union bdk_pciercx_dl_feature_ext_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_dl_feature_ext_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dl_feature_ext_hdr_s cn; */
+};
+typedef union bdk_pciercx_dl_feature_ext_hdr bdk_pciercx_dl_feature_ext_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_EXT_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_EXT_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x450ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DL_FEATURE_EXT_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DL_FEATURE_EXT_HDR(a) bdk_pciercx_dl_feature_ext_hdr_t
+#define bustype_BDK_PCIERCX_DL_FEATURE_EXT_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DL_FEATURE_EXT_HDR(a) "PCIERCX_DL_FEATURE_EXT_HDR"
+#define busnum_BDK_PCIERCX_DL_FEATURE_EXT_HDR(a) (a)
+#define arguments_BDK_PCIERCX_DL_FEATURE_EXT_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_dl_feature_status
+ *
+ * PCIe RC Data Link Feature Status Register
+ */
+union bdk_pciercx_dl_feature_status
+{
+ uint32_t u;
+ struct bdk_pciercx_dl_feature_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dlfsv : 1; /**< [ 31: 31](RO) Remote data link feature supported valid. */
+ uint32_t reserved_23_30 : 8;
+ uint32_t rdlfs : 23; /**< [ 22: 0](RO/H) Features Currently defined are: Bit 0 - Remote Scaled Flow Control Supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t rdlfs : 23; /**< [ 22: 0](RO/H) Features Currently defined are: Bit 0 - Remote Scaled Flow Control Supported. */
+ uint32_t reserved_23_30 : 8;
+ uint32_t dlfsv : 1; /**< [ 31: 31](RO) Remote data link feature supported valid. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_dl_feature_status_s cn; */
+};
+typedef union bdk_pciercx_dl_feature_status bdk_pciercx_dl_feature_status_t;
+
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_DL_FEATURE_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x458ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_DL_FEATURE_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_DL_FEATURE_STATUS(a) bdk_pciercx_dl_feature_status_t
+#define bustype_BDK_PCIERCX_DL_FEATURE_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_DL_FEATURE_STATUS(a) "PCIERCX_DL_FEATURE_STATUS"
+#define busnum_BDK_PCIERCX_DL_FEATURE_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_DL_FEATURE_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_e_cap_list
+ *
+ * PCIe RC PCIe Capabilities/PCIe Capabilities List Register
+ */
+union bdk_pciercx_e_cap_list
+{
+ uint32_t u;
+ struct bdk_pciercx_e_cap_list_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_30_31 : 2;
+ uint32_t imn : 5; /**< [ 29: 25](RO/WRSL) Interrupt message number. Updated by hardware, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t si : 1; /**< [ 24: 24](RO/WRSL) Slot implemented. This bit is writable through PEM()_CFG_WR. */
+ uint32_t dpt : 4; /**< [ 23: 20](RO) Device port type. */
+ uint32_t pciecv : 4; /**< [ 19: 16](RO) PCI Express capability version. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t pcieid : 8; /**< [ 7: 0](RO) PCI Express capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieid : 8; /**< [ 7: 0](RO) PCI Express capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t pciecv : 4; /**< [ 19: 16](RO) PCI Express capability version. */
+ uint32_t dpt : 4; /**< [ 23: 20](RO) Device port type. */
+ uint32_t si : 1; /**< [ 24: 24](RO/WRSL) Slot implemented. This bit is writable through PEM()_CFG_WR. */
+ uint32_t imn : 5; /**< [ 29: 25](RO/WRSL) Interrupt message number. Updated by hardware, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_30_31 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_e_cap_list_s cn; */
+};
+typedef union bdk_pciercx_e_cap_list bdk_pciercx_e_cap_list_t;
+
+static inline uint64_t BDK_PCIERCX_E_CAP_LIST(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_E_CAP_LIST(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x70ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_E_CAP_LIST", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_E_CAP_LIST(a) bdk_pciercx_e_cap_list_t
+#define bustype_BDK_PCIERCX_E_CAP_LIST(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_E_CAP_LIST(a) "PCIERCX_E_CAP_LIST"
+#define busnum_BDK_PCIERCX_E_CAP_LIST(a) (a)
+#define arguments_BDK_PCIERCX_E_CAP_LIST(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_cap_hdr
+ *
+ * PCIe RC Enhanced Allocation Capability ID Register
+ */
+union bdk_pciercx_ea_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ea_rsvd : 10; /**< [ 31: 22](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t num_entries : 6; /**< [ 21: 16](RO/WRSL) Number of entries following the first DW of the capability.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer.
+ Writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t eacid : 8; /**< [ 7: 0](RO/WRSL) Enhanced allocation capability ID.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t eacid : 8; /**< [ 7: 0](RO/WRSL) Enhanced allocation capability ID.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer.
+ Writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t num_entries : 6; /**< [ 21: 16](RO/WRSL) Number of entries following the first DW of the capability.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd : 10; /**< [ 31: 22](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_ea_cap_hdr bdk_pciercx_ea_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_EA_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x50ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_CAP_HDR(a) bdk_pciercx_ea_cap_hdr_t
+#define bustype_BDK_PCIERCX_EA_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_CAP_HDR(a) "PCIERCX_EA_CAP_HDR"
+#define busnum_BDK_PCIERCX_EA_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_EA_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_entry0
+ *
+ * PCIe RC Enhanced Allocation Capability Second DW Register
+ */
+union bdk_pciercx_ea_entry0
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_entry0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ea_rsvd : 16; /**< [ 31: 16](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t fixed_subnum : 8; /**< [ 15: 8](RO/WRSL) Fixed subordinate bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t fixed_secnum : 8; /**< [ 7: 0](RO/WRSL) Fixed secondary bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t fixed_secnum : 8; /**< [ 7: 0](RO/WRSL) Fixed secondary bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t fixed_subnum : 8; /**< [ 15: 8](RO/WRSL) Fixed subordinate bus number.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd : 16; /**< [ 31: 16](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_entry0_s cn; */
+};
+typedef union bdk_pciercx_ea_entry0 bdk_pciercx_ea_entry0_t;
+
+static inline uint64_t BDK_PCIERCX_EA_ENTRY0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_ENTRY0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x54ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_ENTRY0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_ENTRY0(a) bdk_pciercx_ea_entry0_t
+#define bustype_BDK_PCIERCX_EA_ENTRY0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_ENTRY0(a) "PCIERCX_EA_ENTRY0"
+#define busnum_BDK_PCIERCX_EA_ENTRY0(a) (a)
+#define arguments_BDK_PCIERCX_EA_ENTRY0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_entry1
+ *
+ * PCIe RC Enhanced Allocation Entry 0 First DW Register
+ */
+union bdk_pciercx_ea_entry1
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_entry1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ena : 1; /**< [ 31: 31](RO/WRSL) Enable for this entry. This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t wr : 1; /**< [ 30: 30](RO/WRSL) Writable. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t ea_rsvd_1 : 6; /**< [ 29: 24](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t sprop : 8; /**< [ 23: 16](RO/WRSL) Secondary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t pprop : 8; /**< [ 15: 8](RO/WRSL) Primary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t bei : 4; /**< [ 7: 4](RO/WRSL) Bar equivalent indicator.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_0 : 1; /**< [ 3: 3](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t esize : 3; /**< [ 2: 0](RO/WRSL) Entry size - the number of DW following the initial DW in this entry.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+#else /* Word 0 - Little Endian */
+ uint32_t esize : 3; /**< [ 2: 0](RO/WRSL) Entry size - the number of DW following the initial DW in this entry.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_0 : 1; /**< [ 3: 3](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t bei : 4; /**< [ 7: 4](RO/WRSL) Bar equivalent indicator.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t pprop : 8; /**< [ 15: 8](RO/WRSL) Primary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t sprop : 8; /**< [ 23: 16](RO/WRSL) Secondary properties.
+ This field is writable through PEM()_CFG_WR. However, the application must not change this
+ field. */
+ uint32_t ea_rsvd_1 : 6; /**< [ 29: 24](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t wr : 1; /**< [ 30: 30](RO/WRSL) Writable. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t ena : 1; /**< [ 31: 31](RO/WRSL) Enable for this entry. This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_entry1_s cn; */
+};
+typedef union bdk_pciercx_ea_entry1 bdk_pciercx_ea_entry1_t;
+
+static inline uint64_t BDK_PCIERCX_EA_ENTRY1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_ENTRY1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x58ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_ENTRY1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_ENTRY1(a) bdk_pciercx_ea_entry1_t
+#define bustype_BDK_PCIERCX_EA_ENTRY1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_ENTRY1(a) "PCIERCX_EA_ENTRY1"
+#define busnum_BDK_PCIERCX_EA_ENTRY1(a) (a)
+#define arguments_BDK_PCIERCX_EA_ENTRY1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_entry2
+ *
+ * PCIe RC Enhanced Allocation Entry 0 Lower Base Register
+ */
+union bdk_pciercx_ea_entry2
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_entry2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lbase : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lbase : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_entry2_s cn; */
+};
+typedef union bdk_pciercx_ea_entry2 bdk_pciercx_ea_entry2_t;
+
+static inline uint64_t BDK_PCIERCX_EA_ENTRY2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_ENTRY2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x5cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_ENTRY2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_ENTRY2(a) bdk_pciercx_ea_entry2_t
+#define bustype_BDK_PCIERCX_EA_ENTRY2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_ENTRY2(a) "PCIERCX_EA_ENTRY2"
+#define busnum_BDK_PCIERCX_EA_ENTRY2(a) (a)
+#define arguments_BDK_PCIERCX_EA_ENTRY2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_entry3
+ *
+ * PCIe RC Enhanced Allocation Entry 0 Max Offset Register
+ */
+union bdk_pciercx_ea_entry3
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_entry3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t moffs : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the offset to cover PEMRC BAR4 0xfffff & 0xffffc \>\>2 */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t ea_rsvd : 1; /**< [ 0: 0](RO/WRSL) Reserved. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t size : 1; /**< [ 1: 1](RO/WRSL) Size - 64-bit (1), 32-bit (0). This field is writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t moffs : 30; /**< [ 31: 2](RO/WRSL) Lower base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the offset to cover PEMRC BAR4 0xfffff & 0xffffc \>\>2 */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_entry3_s cn; */
+};
+typedef union bdk_pciercx_ea_entry3 bdk_pciercx_ea_entry3_t;
+
+static inline uint64_t BDK_PCIERCX_EA_ENTRY3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_ENTRY3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x60ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_ENTRY3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_ENTRY3(a) bdk_pciercx_ea_entry3_t
+#define bustype_BDK_PCIERCX_EA_ENTRY3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_ENTRY3(a) "PCIERCX_EA_ENTRY3"
+#define busnum_BDK_PCIERCX_EA_ENTRY3(a) (a)
+#define arguments_BDK_PCIERCX_EA_ENTRY3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ea_entry4
+ *
+ * PCIe RC Enhanced Allocation Entry 0 Upper Base Register
+ */
+union bdk_pciercx_ea_entry4
+{
+ uint32_t u;
+ struct bdk_pciercx_ea_entry4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ubase : 32; /**< [ 31: 0](RO/WRSL) Upper base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the upper 32 bits of PEM_BAR_E::PEM()_PF_BAR0 */
+#else /* Word 0 - Little Endian */
+ uint32_t ubase : 32; /**< [ 31: 0](RO/WRSL) Upper base. This field is writable through PEM()_CFG_WR. However, the application must
+ not change this field.
+
+ Internal:
+ This is the upper 32 bits of PEM_BAR_E::PEM()_PF_BAR0 */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ea_entry4_s cn; */
+};
+typedef union bdk_pciercx_ea_entry4 bdk_pciercx_ea_entry4_t;
+
+static inline uint64_t BDK_PCIERCX_EA_ENTRY4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EA_ENTRY4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x64ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EA_ENTRY4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EA_ENTRY4(a) bdk_pciercx_ea_entry4_t
+#define bustype_BDK_PCIERCX_EA_ENTRY4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EA_ENTRY4(a) "PCIERCX_EA_ENTRY4"
+#define busnum_BDK_PCIERCX_EA_ENTRY4(a) (a)
+#define arguments_BDK_PCIERCX_EA_ENTRY4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ebar
+ *
+ * PCIe RC Expansion ROM Base Address Register
+ */
+union bdk_pciercx_ebar
+{
+ uint32_t u;
+ struct bdk_pciercx_ebar_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL) Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t unused : 32; /**< [ 31: 0](RO/WRSL) Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ebar_s cn; */
+};
+typedef union bdk_pciercx_ebar bdk_pciercx_ebar_t;
+
+static inline uint64_t BDK_PCIERCX_EBAR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EBAR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x38ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EBAR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EBAR(a) bdk_pciercx_ebar_t
+#define bustype_BDK_PCIERCX_EBAR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EBAR(a) "PCIERCX_EBAR"
+#define busnum_BDK_PCIERCX_EBAR(a) (a)
+#define arguments_BDK_PCIERCX_EBAR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl01
+ *
+ * PCIe RC Equalization Control Lane 0/1 Register
+ */
+union bdk_pciercx_eq_ctl01
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl01_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l1dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 0 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l0drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 0 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l0utp : 4; /**< [ 11: 8](RO/WRSL) Lane 0 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l0urph : 3; /**< [ 14: 12](RO/WRSL) Lane 0 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l1dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 1 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l1drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 1 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l1utp : 4; /**< [ 27: 24](RO/WRSL) Lane 1 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l1urph : 3; /**< [ 30: 28](RO/WRSL) Lane 1 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl01_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl01 bdk_pciercx_eq_ctl01_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL01(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL01(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x184ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL01", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL01(a) bdk_pciercx_eq_ctl01_t
+#define bustype_BDK_PCIERCX_EQ_CTL01(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL01(a) "PCIERCX_EQ_CTL01"
+#define busnum_BDK_PCIERCX_EQ_CTL01(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL01(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl1011
+ *
+ * PCIe RC Equalization Control Lane 10/11 Register
+ */
+union bdk_pciercx_eq_ctl1011
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl1011_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l11urph : 3; /**< [ 30: 28](RO/WRSL) Lane 11 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l11utp : 4; /**< [ 27: 24](RO/WRSL) Lane 11 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l11drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 11 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l11dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 11 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l10urph : 3; /**< [ 14: 12](RO/WRSL) Lane 10 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l10utp : 4; /**< [ 11: 8](RO/WRSL) Lane 10 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l10drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 10 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l10dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 10 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l10dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 10 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l10drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 10 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l10utp : 4; /**< [ 11: 8](RO/WRSL) Lane 10 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l10urph : 3; /**< [ 14: 12](RO/WRSL) Lane 10 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l11dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 11 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l11drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 11 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l11utp : 4; /**< [ 27: 24](RO/WRSL) Lane 11 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l11urph : 3; /**< [ 30: 28](RO/WRSL) Lane 11 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl1011_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl1011 bdk_pciercx_eq_ctl1011_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL1011(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL1011(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x198ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL1011", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL1011(a) bdk_pciercx_eq_ctl1011_t
+#define bustype_BDK_PCIERCX_EQ_CTL1011(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL1011(a) "PCIERCX_EQ_CTL1011"
+#define busnum_BDK_PCIERCX_EQ_CTL1011(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL1011(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl1213
+ *
+ * PCIe RC Equalization Control Lane 12/13 Register
+ */
+union bdk_pciercx_eq_ctl1213
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl1213_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l13urph : 3; /**< [ 30: 28](RO/WRSL) Lane 13 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l13utp : 4; /**< [ 27: 24](RO/WRSL) Lane 13 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l13drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 13 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l13dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 13 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l12urph : 3; /**< [ 14: 12](RO/WRSL) Lane 12 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l12utp : 4; /**< [ 11: 8](RO/WRSL) Lane 12 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l12drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 12 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l12dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 12 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l12dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 12 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l12drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 12 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l12utp : 4; /**< [ 11: 8](RO/WRSL) Lane 12 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l12urph : 3; /**< [ 14: 12](RO/WRSL) Lane 12 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l13dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 13 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l13drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 13 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l13utp : 4; /**< [ 27: 24](RO/WRSL) Lane 13 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l13urph : 3; /**< [ 30: 28](RO/WRSL) Lane 13 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl1213_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl1213 bdk_pciercx_eq_ctl1213_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL1213(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL1213(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x19cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL1213", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL1213(a) bdk_pciercx_eq_ctl1213_t
+#define bustype_BDK_PCIERCX_EQ_CTL1213(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL1213(a) "PCIERCX_EQ_CTL1213"
+#define busnum_BDK_PCIERCX_EQ_CTL1213(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL1213(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl1415
+ *
+ * PCIe RC Equalization Control Lane 14/15 Register
+ */
+union bdk_pciercx_eq_ctl1415
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl1415_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l15urph : 3; /**< [ 30: 28](RO/WRSL) Lane 15 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l15utp : 4; /**< [ 27: 24](RO/WRSL) Lane 15 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l15drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 15 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l15dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 15 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l14urph : 3; /**< [ 14: 12](RO/WRSL) Lane 14 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l14utp : 4; /**< [ 11: 8](RO/WRSL) Lane 14 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l14drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 14 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l14dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 14 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l14dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 14 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l14drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 14 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l14utp : 4; /**< [ 11: 8](RO/WRSL) Lane 14 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l14urph : 3; /**< [ 14: 12](RO/WRSL) Lane 14 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l15dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 15 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l15drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 15 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l15utp : 4; /**< [ 27: 24](RO/WRSL) Lane 15 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l15urph : 3; /**< [ 30: 28](RO/WRSL) Lane 15 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl1415_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl1415 bdk_pciercx_eq_ctl1415_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL1415(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL1415(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1a0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL1415", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL1415(a) bdk_pciercx_eq_ctl1415_t
+#define bustype_BDK_PCIERCX_EQ_CTL1415(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL1415(a) "PCIERCX_EQ_CTL1415"
+#define busnum_BDK_PCIERCX_EQ_CTL1415(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL1415(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl23
+ *
+ * PCIe RC Equalization Control Lane 2/3 Register
+ */
+union bdk_pciercx_eq_ctl23
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl23_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. How */
+ uint32_t reserved_7 : 1;
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l2dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 2 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l2drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 2 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l2utp : 4; /**< [ 11: 8](RO/WRSL) Lane 2 upstream component transmitter preset. Writable through PEM()_CFG_WR. How */
+ uint32_t l2urph : 3; /**< [ 14: 12](RO/WRSL) Lane 2 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l3dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 3 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l3drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 3 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l3utp : 4; /**< [ 27: 24](RO/WRSL) Lane 3 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l3urph : 3; /**< [ 30: 28](RO/WRSL) Lane 3 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl23_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl23 bdk_pciercx_eq_ctl23_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL23(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL23(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x188ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL23", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL23(a) bdk_pciercx_eq_ctl23_t
+#define bustype_BDK_PCIERCX_EQ_CTL23(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL23(a) "PCIERCX_EQ_CTL23"
+#define busnum_BDK_PCIERCX_EQ_CTL23(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL23(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl45
+ *
+ * PCIe RC Equalization Control Lane 4/5 Register
+ */
+union bdk_pciercx_eq_ctl45
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl45_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 4 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l4drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 4 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l4utp : 4; /**< [ 11: 8](RO/WRSL) Lane 4 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l4urph : 3; /**< [ 14: 12](RO/WRSL) Lane 4 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l5dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 5 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l5drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 5 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l5utp : 4; /**< [ 27: 24](RO/WRSL) Lane 5 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l5urph : 3; /**< [ 30: 28](RO/WRSL) Lane 5 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl45_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl45 bdk_pciercx_eq_ctl45_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL45(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL45(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x18cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL45", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL45(a) bdk_pciercx_eq_ctl45_t
+#define bustype_BDK_PCIERCX_EQ_CTL45(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL45(a) "PCIERCX_EQ_CTL45"
+#define busnum_BDK_PCIERCX_EQ_CTL45(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL45(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl67
+ *
+ * PCIe RC Equalization Control Lane 6/7 Register
+ */
+union bdk_pciercx_eq_ctl67
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl67_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l6dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 6 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l6drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 6 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l6utp : 4; /**< [ 11: 8](RO/WRSL) Lane 6 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l6urph : 3; /**< [ 14: 12](RO/WRSL) Lane 6 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l7dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 7 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l7drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 7 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l7utp : 4; /**< [ 27: 24](RO/WRSL) Lane 7 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l7urph : 3; /**< [ 30: 28](RO/WRSL) Lane 7 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl67_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl67 bdk_pciercx_eq_ctl67_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL67(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL67(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x190ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL67", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL67(a) bdk_pciercx_eq_ctl67_t
+#define bustype_BDK_PCIERCX_EQ_CTL67(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL67(a) "PCIERCX_EQ_CTL67"
+#define busnum_BDK_PCIERCX_EQ_CTL67(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL67(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_eq_ctl89
+ *
+ * PCIe RC Equalization Control Lane 8/9 Register
+ */
+union bdk_pciercx_eq_ctl89
+{
+ uint32_t u;
+ struct bdk_pciercx_eq_ctl89_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t l9urph : 3; /**< [ 30: 28](RO/WRSL) Lane 9 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l9utp : 4; /**< [ 27: 24](RO/WRSL) Lane 9 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l9drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 9 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l9dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 9 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l8urph : 3; /**< [ 14: 12](RO/WRSL) Lane 8 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l8utp : 4; /**< [ 11: 8](RO/WRSL) Lane 8 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l8drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 8 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t l8dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 8 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t l8dtp : 4; /**< [ 3: 0](RO/WRSL/H) Lane 8 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l8drph : 3; /**< [ 6: 4](RO/WRSL/H) Lane 8 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_7 : 1;
+ uint32_t l8utp : 4; /**< [ 11: 8](RO/WRSL) Lane 8 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l8urph : 3; /**< [ 14: 12](RO/WRSL) Lane 8 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_15 : 1;
+ uint32_t l9dtp : 4; /**< [ 19: 16](RO/WRSL/H) Lane 9 downstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l9drph : 3; /**< [ 22: 20](RO/WRSL/H) Lane 9 downstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_23 : 1;
+ uint32_t l9utp : 4; /**< [ 27: 24](RO/WRSL) Lane 9 upstream component transmitter preset. Writable through PEM()_CFG_WR. */
+ uint32_t l9urph : 3; /**< [ 30: 28](RO/WRSL) Lane 9 upstream component receiver preset hint. Writable through PEM()_CFG_WR. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_eq_ctl89_s cn; */
+};
+typedef union bdk_pciercx_eq_ctl89 bdk_pciercx_eq_ctl89_t;
+
+static inline uint64_t BDK_PCIERCX_EQ_CTL89(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EQ_CTL89(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x194ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EQ_CTL89", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EQ_CTL89(a) bdk_pciercx_eq_ctl89_t
+#define bustype_BDK_PCIERCX_EQ_CTL89(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EQ_CTL89(a) "PCIERCX_EQ_CTL89"
+#define busnum_BDK_PCIERCX_EQ_CTL89(a) (a)
+#define arguments_BDK_PCIERCX_EQ_CTL89(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_err_source
+ *
+ * PCIe RC Error Source Identification Register
+ */
+union bdk_pciercx_err_source
+{
+ uint32_t u;
+ struct bdk_pciercx_err_source_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO/H) ERR_FATAL/NONFATAL source identification. */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO/H) ERR_COR source identification. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecsi : 16; /**< [ 15: 0](RO/H) ERR_COR source identification. */
+ uint32_t efnfsi : 16; /**< [ 31: 16](RO/H) ERR_FATAL/NONFATAL source identification. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_err_source_s cn; */
+};
+typedef union bdk_pciercx_err_source bdk_pciercx_err_source_t;
+
+static inline uint64_t BDK_PCIERCX_ERR_SOURCE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ERR_SOURCE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x134ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ERR_SOURCE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ERR_SOURCE(a) bdk_pciercx_err_source_t
+#define bustype_BDK_PCIERCX_ERR_SOURCE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ERR_SOURCE(a) "PCIERCX_ERR_SOURCE"
+#define busnum_BDK_PCIERCX_ERR_SOURCE(a) (a)
+#define arguments_BDK_PCIERCX_ERR_SOURCE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ext_cap
+ *
+ * PCIe RC PCI Express Extended Capability Header Register
+ */
+union bdk_pciercx_ext_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_ext_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ext_cap_s cn; */
+};
+typedef union bdk_pciercx_ext_cap bdk_pciercx_ext_cap_t;
+
+static inline uint64_t BDK_PCIERCX_EXT_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_EXT_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x100ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_EXT_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_EXT_CAP(a) bdk_pciercx_ext_cap_t
+#define bustype_BDK_PCIERCX_EXT_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_EXT_CAP(a) "PCIERCX_EXT_CAP"
+#define busnum_BDK_PCIERCX_EXT_CAP(a) (a)
+#define arguments_BDK_PCIERCX_EXT_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_filt_msk2
+ *
+ * PCIe RC Filter Mask Register 2
+ */
+union bdk_pciercx_filt_msk2
+{
+ uint32_t u;
+ struct bdk_pciercx_filt_msk2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t m_prs : 1; /**< [ 7: 7](R/W) Mask PRS messages dropped silently. */
+ uint32_t m_unmask_td : 1; /**< [ 6: 6](R/W) Disable unmask TD bit. */
+ uint32_t m_unmask_ur_pois : 1; /**< [ 5: 5](R/W) Disable unmask UR Poison with TRGT0 destination. */
+ uint32_t m_ln_vend1_drop : 1; /**< [ 4: 4](R/W) Mask LN messages dropped silently. */
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+#else /* Word 0 - Little Endian */
+ uint32_t m_vend0_drp : 1; /**< [ 0: 0](R/W) Mask vendor MSG type 0 dropped with UR error reporting. */
+ uint32_t m_vend1_drp : 1; /**< [ 1: 1](R/W) Mask vendor MSG type 1 dropped silently. */
+ uint32_t m_dabort_4ucpl : 1; /**< [ 2: 2](R/W) Mask DLLP abort for unexpected CPL. */
+ uint32_t m_handle_flush : 1; /**< [ 3: 3](R/W) Mask core filter to handle flush request. */
+ uint32_t m_ln_vend1_drop : 1; /**< [ 4: 4](R/W) Mask LN messages dropped silently. */
+ uint32_t m_unmask_ur_pois : 1; /**< [ 5: 5](R/W) Disable unmask UR Poison with TRGT0 destination. */
+ uint32_t m_unmask_td : 1; /**< [ 6: 6](R/W) Disable unmask TD bit. */
+ uint32_t m_prs : 1; /**< [ 7: 7](R/W) Mask PRS messages dropped silently. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_filt_msk2_s cn; */
+};
+typedef union bdk_pciercx_filt_msk2 bdk_pciercx_filt_msk2_t;
+
+static inline uint64_t BDK_PCIERCX_FILT_MSK2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_FILT_MSK2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x720ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_FILT_MSK2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_FILT_MSK2(a) bdk_pciercx_filt_msk2_t
+#define bustype_BDK_PCIERCX_FILT_MSK2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_FILT_MSK2(a) "PCIERCX_FILT_MSK2"
+#define busnum_BDK_PCIERCX_FILT_MSK2(a) (a)
+#define arguments_BDK_PCIERCX_FILT_MSK2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen2_port
+ *
+ * PCIe RC Gen2 Port Logic Register
+ */
+union bdk_pciercx_gen2_port
+{
+ uint32_t u;
+ struct bdk_pciercx_gen2_port_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_22_31 : 10;
+ uint32_t gen1_ei_inf : 1; /**< [ 21: 21](R/W) Electrical idle inference mode at Gen1 Rate. Programmable mode to determine
+ inferred electrical idle (EI) in Recovery.Speed or Loopback.Active (as slave)
+ state at Gen1 speed by looking for a one value on RxElecIdle instead of looking
+ for a zero on RxValid. If the PHY fails to deassert the RxValid signal in
+ Recovery.Speed or Loopback.Active (because of corrupted EIOS for example),
+ then EI cannot be inferred successfully in the controller by just detecting the
+ condition RxValid=0.
+ 0 = Use RxElecIdle signal to infer electrical idle.
+ 1 = Use RxValid signal to infer electrical idle. */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) Set the deemphasis level for upstream ports.
+ 0 = -6 dB.
+ 1 = -3.5 dB. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to one, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to one). */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to one,
+ indicates low swing. When set to 0, indicates full swing. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of one initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t alaneflip : 1; /**< [ 16: 16](R/W) Enable auto flipping of the lanes. */
+ uint32_t pdetlane : 3; /**< [ 15: 13](R/W) Predetermined lane for auto flip. This field defines which
+ physical lane is connected to logical Lane0 by the flip
+ operation performed in detect.
+ 0x0 = Reserved.
+ 0x1 = Connect logical Lane0 to physical lane 1.
+ 0x2 = Connect logical Lane0 to physical lane 3.
+ 0x3 = Connect logical Lane0 to physical lane 7.
+ 0x4 = Connect logical Lane0 to physical lane 15.
+ 0x5 - 0x7 = Reserved. */
+ uint32_t nlanes : 5; /**< [ 12: 8](R/W) Predetermined number of lanes. Defines the number of
+ lanes which are connected and not bad. Used to limit the
+ effective link width to ignore 'broken" or "unused" lanes that
+ detect a receiver. Indicates the number of lanes to check for
+ exit from electrical idle in Polling.Active and L2.Idle.
+
+ 0x1 = 1 lane.
+ 0x2 = 2 lanes.
+ 0x3 = 3 lanes.
+ _ ...
+ 0x10 = 16 lanes.
+ 0x11-0x1F = Reserved.
+
+ When you have unused lanes in your system, then you must
+ change the value in this register to reflect the number of
+ lanes. You must also change PCIERC_PORT_CTL[LME]. */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+#else /* Word 0 - Little Endian */
+ uint32_t n_fts : 8; /**< [ 7: 0](R/W) Sets the number of fast training sequences (N_FTS) that the core advertises as its
+ N_FTS during GEN2 Link training. This value is used to inform the link partner about the
+ PHY's ability to recover synchronization after a low power state.
+
+ Do not set [N_FTS] to zero; doing so can cause the LTSSM to go into the recovery
+ state when exiting from L0s. */
+ uint32_t nlanes : 5; /**< [ 12: 8](R/W) Predetermined number of lanes. Defines the number of
+ lanes which are connected and not bad. Used to limit the
+ effective link width to ignore 'broken" or "unused" lanes that
+ detect a receiver. Indicates the number of lanes to check for
+ exit from electrical idle in Polling.Active and L2.Idle.
+
+ 0x1 = 1 lane.
+ 0x2 = 2 lanes.
+ 0x3 = 3 lanes.
+ _ ...
+ 0x10 = 16 lanes.
+ 0x11-0x1F = Reserved.
+
+ When you have unused lanes in your system, then you must
+ change the value in this register to reflect the number of
+ lanes. You must also change PCIERC_PORT_CTL[LME]. */
+ uint32_t pdetlane : 3; /**< [ 15: 13](R/W) Predetermined lane for auto flip. This field defines which
+ physical lane is connected to logical Lane0 by the flip
+ operation performed in detect.
+ 0x0 = Reserved.
+ 0x1 = Connect logical Lane0 to physical lane 1.
+ 0x2 = Connect logical Lane0 to physical lane 3.
+ 0x3 = Connect logical Lane0 to physical lane 7.
+ 0x4 = Connect logical Lane0 to physical lane 15.
+ 0x5 - 0x7 = Reserved. */
+ uint32_t alaneflip : 1; /**< [ 16: 16](R/W) Enable auto flipping of the lanes. */
+ uint32_t dsc : 1; /**< [ 17: 17](R/W/H) Directed speed change. A write of one initiates a speed change.
+ When the speed change occurs, the controller will clear the contents of this field. */
+ uint32_t cpyts : 1; /**< [ 18: 18](R/W) Config PHY TX swing. Indicates the voltage level that the PHY should drive. When set to one,
+ indicates low swing. When set to 0, indicates full swing. */
+ uint32_t ctcrb : 1; /**< [ 19: 19](R/W) Config TX compliance receive bit. When set to one, signals LTSSM to transmit TS ordered sets
+ with the compliance receive bit assert (equal to one). */
+ uint32_t s_d_e : 1; /**< [ 20: 20](R/W) Set the deemphasis level for upstream ports.
+ 0 = -6 dB.
+ 1 = -3.5 dB. */
+ uint32_t gen1_ei_inf : 1; /**< [ 21: 21](R/W) Electrical idle inference mode at Gen1 Rate. Programmable mode to determine
+ inferred electrical idle (EI) in Recovery.Speed or Loopback.Active (as slave)
+ state at Gen1 speed by looking for a one value on RxElecIdle instead of looking
+ for a zero on RxValid. If the PHY fails to deassert the RxValid signal in
+ Recovery.Speed or Loopback.Active (because of corrupted EIOS for example),
+ then EI cannot be inferred successfully in the controller by just detecting the
+ condition RxValid=0.
+ 0 = Use RxElecIdle signal to infer electrical idle.
+ 1 = Use RxValid signal to infer electrical idle. */
+ uint32_t reserved_22_31 : 10;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen2_port_s cn; */
+};
+typedef union bdk_pciercx_gen2_port bdk_pciercx_gen2_port_t;
+
+static inline uint64_t BDK_PCIERCX_GEN2_PORT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN2_PORT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x80cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN2_PORT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN2_PORT(a) bdk_pciercx_gen2_port_t
+#define bustype_BDK_PCIERCX_GEN2_PORT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN2_PORT(a) "PCIERCX_GEN2_PORT"
+#define busnum_BDK_PCIERCX_GEN2_PORT(a) (a)
+#define arguments_BDK_PCIERCX_GEN2_PORT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen3_eq_ctl
+ *
+ * PCIe RC Gen3 EQ Control Register
+ */
+union bdk_pciercx_gen3_eq_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_gen3_eq_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_27_31 : 5;
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t eq_pset_req : 1; /**< [ 25: 25](R/W/H) Reserved. */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t reserved_7 : 1;
+ uint32_t eq_redo_en : 1; /**< [ 6: 6](R/W) Support EQ redo and lower rate change. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change.
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t fm : 4; /**< [ 3: 0](R/W) Feedback mode.
+ 0 = Direction of change.
+ 1 = Figure of merit.
+ 2-15 = Reserved. */
+ uint32_t bt : 1; /**< [ 4: 4](R/W) Behavior after 24 ms timeout (when optimal settings are not found).
+
+ For a USP: determine the next LTSSM state from Phase2:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.Phase3.
+
+ For a DSP: determine the next LTSSM state from Phase3:
+ 0 = Recovery.Speed.
+ 1 = Recovry.Equalization.RcrLock.
+
+ When optimal settings are not found:
+ * Equalization phase 3 successful status bit is not set in the link status register.
+ * Equalization phase 3 complete status bit is set in the link status register. */
+ uint32_t p23td : 1; /**< [ 5: 5](R/W) Phase2_3 2 ms timeout disable. Determine behavior in Phase2 for USP (Phase3 if DSP) when
+ the PHY does not respond within 2 ms to the assertion of RxEqEval:
+ 0 = Abort the current evaluation; stop any attempt to modify the remote transmitter
+ settings. Phase2 will be terminated by the 24 ms timeout.
+ 1 = Ignore the 2 ms timeout and continue as normal. This is used to support PHYs that
+ require more than 2 ms to respond to the assertion of RxEqEval. */
+ uint32_t eq_redo_en : 1; /**< [ 6: 6](R/W) Support EQ redo and lower rate change. */
+ uint32_t reserved_7 : 1;
+ uint32_t prv : 16; /**< [ 23: 8](R/W) Preset request vector. Requesting of presets during the initial part of the EQ master
+ phase. Encoding scheme as follows:
+
+ Bit [15:0] = 0x0: No preset is requested and evaluated in the EQ master phase.
+
+ Bit [i] = 1: Preset=i is requested and evaluated in the EQ master phase.
+
+ _ 0b0000000000000000 = No preset req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxxx1 = Preset 0 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxxx1x = Preset 1 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxxx1xx = Preset 2 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxxx1xxx = Preset 3 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxxx1xxxx = Preset 4 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxxx1xxxxx = Preset 5 req/evaluated in EQ master phase.
+
+ _ 0b00000xxxx1xxxxxx = Preset 6 req/evaluated in EQ master phase.
+
+ _ 0b00000xxx1xxxxxxx = Preset 7 req/evaluated in EQ master phase.
+
+ _ 0b00000xx1xxxxxxxx = Preset 8 req/evaluated in EQ master phase.
+
+ _ 0b00000x1xxxxxxxxx = Preset 9 req/evaluated in EQ master phase.
+
+ _ 0b000001xxxxxxxxxx = Preset 10 req/evaluated in EQ master phase.
+
+ _ All other encodings = Reserved. */
+ uint32_t iif : 1; /**< [ 24: 24](R/W) Include initial FOM. Include, or not, the FOM feedback from the initial preset evaluation
+ performed in the EQ master, when finding the highest FOM among all preset evaluations. */
+ uint32_t eq_pset_req : 1; /**< [ 25: 25](R/W/H) Reserved. */
+ uint32_t scefpm : 1; /**< [ 26: 26](R/W) Request core to send back-to-back EIEOS in Recovery.RcvrLock state until
+ presets to coefficient mapping is complete. */
+ uint32_t reserved_27_31 : 5;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen3_eq_ctl_s cn; */
+};
+typedef union bdk_pciercx_gen3_eq_ctl bdk_pciercx_gen3_eq_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_GEN3_EQ_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN3_EQ_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8a8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN3_EQ_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN3_EQ_CTL(a) bdk_pciercx_gen3_eq_ctl_t
+#define bustype_BDK_PCIERCX_GEN3_EQ_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN3_EQ_CTL(a) "PCIERCX_GEN3_EQ_CTL"
+#define busnum_BDK_PCIERCX_GEN3_EQ_CTL(a) (a)
+#define arguments_BDK_PCIERCX_GEN3_EQ_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen3_fb_mode_dir_chg
+ *
+ * PCIe RC Gen3 EQ Direction Change Feedback Mode Control Register
+ */
+union bdk_pciercx_gen3_fb_mode_dir_chg
+{
+ uint32_t u;
+ struct bdk_pciercx_gen3_fb_mode_dir_chg_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_18_31 : 14;
+ uint32_t max_post_cur_delta : 4; /**< [ 17: 14](R/W) Convergence window aperture for C+1. Postcursor coefficients maximum delta
+ within the convergence window depth. */
+ uint32_t max_pre_cur_delta : 4; /**< [ 13: 10](R/W) Convergence window aperture for C-1. Precursor coefficients maximum delta
+ within the convergence window depth. */
+ uint32_t n_evals : 5; /**< [ 9: 5](R/W) Convergence window depth. Number of consecutive evaluations
+ considered in phase 2/3 when determining if optimal coefficients
+ have been found.
+
+ When 0x0, EQ master is performed without sending any
+ requests to the remote partner in phase 2 for USP and
+ phase 3 for DSP. Therefore, the remote partner will not
+ change its transmitter coefficients and will move to the next
+ state.
+
+ Legal values: 0x0, 0x1, and 0x2. */
+ uint32_t min_phase23 : 5; /**< [ 4: 0](R/W) Minimum time (in ms) to remain in EQ master phase. The
+ LTSSM stays in EQ master phase for at least this amount of
+ time, before starting to check for convergence of the
+ coefficients.
+
+ Legal values: 0..24. */
+#else /* Word 0 - Little Endian */
+ uint32_t min_phase23 : 5; /**< [ 4: 0](R/W) Minimum time (in ms) to remain in EQ master phase. The
+ LTSSM stays in EQ master phase for at least this amount of
+ time, before starting to check for convergence of the
+ coefficients.
+
+ Legal values: 0..24. */
+ uint32_t n_evals : 5; /**< [ 9: 5](R/W) Convergence window depth. Number of consecutive evaluations
+ considered in phase 2/3 when determining if optimal coefficients
+ have been found.
+
+ When 0x0, EQ master is performed without sending any
+ requests to the remote partner in phase 2 for USP and
+ phase 3 for DSP. Therefore, the remote partner will not
+ change its transmitter coefficients and will move to the next
+ state.
+
+ Legal values: 0x0, 0x1, and 0x2. */
+ uint32_t max_pre_cur_delta : 4; /**< [ 13: 10](R/W) Convergence window aperture for C-1. Precursor coefficients maximum delta
+ within the convergence window depth. */
+ uint32_t max_post_cur_delta : 4; /**< [ 17: 14](R/W) Convergence window aperture for C+1. Postcursor coefficients maximum delta
+ within the convergence window depth. */
+ uint32_t reserved_18_31 : 14;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen3_fb_mode_dir_chg_s cn; */
+};
+typedef union bdk_pciercx_gen3_fb_mode_dir_chg bdk_pciercx_gen3_fb_mode_dir_chg_t;
+
+static inline uint64_t BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8acll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN3_FB_MODE_DIR_CHG", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(a) bdk_pciercx_gen3_fb_mode_dir_chg_t
+#define bustype_BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(a) "PCIERCX_GEN3_FB_MODE_DIR_CHG"
+#define busnum_BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(a) (a)
+#define arguments_BDK_PCIERCX_GEN3_FB_MODE_DIR_CHG(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen3_pipe_lb
+ *
+ * PCIe RC Gen3 PIPE Loopback Register
+ */
+union bdk_pciercx_gen3_pipe_lb
+{
+ uint32_t u;
+ struct bdk_pciercx_gen3_pipe_lb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+ uint32_t reserved_27_30 : 4;
+ uint32_t rx_stat : 3; /**< [ 26: 24](RO) Reserved. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t rxstat_ln : 6; /**< [ 21: 16](R/W) Reserved. */
+ uint32_t lpbk_rxvalid : 16; /**< [ 15: 0](R/W) Loopback rxvalid (lane enable - 1 bit per lane). */
+#else /* Word 0 - Little Endian */
+ uint32_t lpbk_rxvalid : 16; /**< [ 15: 0](R/W) Loopback rxvalid (lane enable - 1 bit per lane). */
+ uint32_t rxstat_ln : 6; /**< [ 21: 16](R/W) Reserved. */
+ uint32_t reserved_22_23 : 2;
+ uint32_t rx_stat : 3; /**< [ 26: 24](RO) Reserved. */
+ uint32_t reserved_27_30 : 4;
+ uint32_t ple : 1; /**< [ 31: 31](R/W) Pipe loopback enable. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen3_pipe_lb_s cn; */
+};
+typedef union bdk_pciercx_gen3_pipe_lb bdk_pciercx_gen3_pipe_lb_t;
+
+static inline uint64_t BDK_PCIERCX_GEN3_PIPE_LB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN3_PIPE_LB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8b8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN3_PIPE_LB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN3_PIPE_LB(a) bdk_pciercx_gen3_pipe_lb_t
+#define bustype_BDK_PCIERCX_GEN3_PIPE_LB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN3_PIPE_LB(a) "PCIERCX_GEN3_PIPE_LB"
+#define busnum_BDK_PCIERCX_GEN3_PIPE_LB(a) (a)
+#define arguments_BDK_PCIERCX_GEN3_PIPE_LB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen4_lane_margining_1
+ *
+ * PCIe RC Gen4 Lane Marginging Register 1
+ */
+union bdk_pciercx_gen4_lane_margining_1
+{
+ uint32_t u;
+ struct bdk_pciercx_gen4_lane_margining_1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_30_31 : 2;
+ uint32_t mvo : 6; /**< [ 29: 24](R/W) Max voltage offset for lane margining at the receiver. */
+ uint32_t reserved_23 : 1;
+ uint32_t nvs : 7; /**< [ 22: 16](R/W) Num voltage steps for lane margining at the receiver. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t mto : 6; /**< [ 13: 8](R/W) Max timing offset for lane margining at the receiver. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t nts : 6; /**< [ 5: 0](R/W) Num timing steps for lane margining at the receiver. */
+#else /* Word 0 - Little Endian */
+ uint32_t nts : 6; /**< [ 5: 0](R/W) Num timing steps for lane margining at the receiver. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t mto : 6; /**< [ 13: 8](R/W) Max timing offset for lane margining at the receiver. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t nvs : 7; /**< [ 22: 16](R/W) Num voltage steps for lane margining at the receiver. */
+ uint32_t reserved_23 : 1;
+ uint32_t mvo : 6; /**< [ 29: 24](R/W) Max voltage offset for lane margining at the receiver. */
+ uint32_t reserved_30_31 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen4_lane_margining_1_s cn; */
+};
+typedef union bdk_pciercx_gen4_lane_margining_1 bdk_pciercx_gen4_lane_margining_1_t;
+
+static inline uint64_t BDK_PCIERCX_GEN4_LANE_MARGINING_1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN4_LANE_MARGINING_1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb80ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN4_LANE_MARGINING_1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN4_LANE_MARGINING_1(a) bdk_pciercx_gen4_lane_margining_1_t
+#define bustype_BDK_PCIERCX_GEN4_LANE_MARGINING_1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN4_LANE_MARGINING_1(a) "PCIERCX_GEN4_LANE_MARGINING_1"
+#define busnum_BDK_PCIERCX_GEN4_LANE_MARGINING_1(a) (a)
+#define arguments_BDK_PCIERCX_GEN4_LANE_MARGINING_1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_gen4_lane_margining_2
+ *
+ * PCIe RC Gen4 Lane Margining Register 2
+ */
+union bdk_pciercx_gen4_lane_margining_2
+{
+ uint32_t u;
+ struct bdk_pciercx_gen4_lane_margining_2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t ies : 1; /**< [ 28: 28](R/W) Ind error sampler for lane margining at the receiver. */
+ uint32_t srm : 1; /**< [ 27: 27](R/W) Sample reporting method for lane margining at the receiver. */
+ uint32_t ilrt : 1; /**< [ 26: 26](R/W) Ind left right timing for lane margining at the receiver. */
+ uint32_t iudv : 1; /**< [ 25: 25](R/W) Ind up down voltage for lane margining at the receiver. */
+ uint32_t volt_sup : 1; /**< [ 24: 24](R/W) Voltage supported for lane margining at the receiver. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t max_lanes : 5; /**< [ 20: 16](R/W) Max lanes for lane margining at the receiver. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t srt : 6; /**< [ 13: 8](R/W) Sample rate timing for lane margining at the receiver. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t srv : 6; /**< [ 5: 0](R/W) Sample rate voltage for lane margining at the receiver. */
+#else /* Word 0 - Little Endian */
+ uint32_t srv : 6; /**< [ 5: 0](R/W) Sample rate voltage for lane margining at the receiver. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t srt : 6; /**< [ 13: 8](R/W) Sample rate timing for lane margining at the receiver. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t max_lanes : 5; /**< [ 20: 16](R/W) Max lanes for lane margining at the receiver. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t volt_sup : 1; /**< [ 24: 24](R/W) Voltage supported for lane margining at the receiver. */
+ uint32_t iudv : 1; /**< [ 25: 25](R/W) Ind up down voltage for lane margining at the receiver. */
+ uint32_t ilrt : 1; /**< [ 26: 26](R/W) Ind left right timing for lane margining at the receiver. */
+ uint32_t srm : 1; /**< [ 27: 27](R/W) Sample reporting method for lane margining at the receiver. */
+ uint32_t ies : 1; /**< [ 28: 28](R/W) Ind error sampler for lane margining at the receiver. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_gen4_lane_margining_2_s cn; */
+};
+typedef union bdk_pciercx_gen4_lane_margining_2 bdk_pciercx_gen4_lane_margining_2_t;
+
+static inline uint64_t BDK_PCIERCX_GEN4_LANE_MARGINING_2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_GEN4_LANE_MARGINING_2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb84ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_GEN4_LANE_MARGINING_2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_GEN4_LANE_MARGINING_2(a) bdk_pciercx_gen4_lane_margining_2_t
+#define bustype_BDK_PCIERCX_GEN4_LANE_MARGINING_2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_GEN4_LANE_MARGINING_2(a) "PCIERCX_GEN4_LANE_MARGINING_2"
+#define busnum_BDK_PCIERCX_GEN4_LANE_MARGINING_2(a) (a)
+#define arguments_BDK_PCIERCX_GEN4_LANE_MARGINING_2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_hdr_log1
+ *
+ * PCIe RC Header Log Register 1
+ * The header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_hdr_log1
+{
+ uint32_t u;
+ struct bdk_pciercx_hdr_log1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO/H) Header log register (first DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO/H) Header log register (first DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_hdr_log1_s cn; */
+};
+typedef union bdk_pciercx_hdr_log1 bdk_pciercx_hdr_log1_t;
+
+static inline uint64_t BDK_PCIERCX_HDR_LOG1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_HDR_LOG1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x11cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_HDR_LOG1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_HDR_LOG1(a) bdk_pciercx_hdr_log1_t
+#define bustype_BDK_PCIERCX_HDR_LOG1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_HDR_LOG1(a) "PCIERCX_HDR_LOG1"
+#define busnum_BDK_PCIERCX_HDR_LOG1(a) (a)
+#define arguments_BDK_PCIERCX_HDR_LOG1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_hdr_log2
+ *
+ * PCIe RC Header Log Register 2
+ * The header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_hdr_log2
+{
+ uint32_t u;
+ struct bdk_pciercx_hdr_log2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO/H) Header log register (second DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO/H) Header log register (second DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_hdr_log2_s cn; */
+};
+typedef union bdk_pciercx_hdr_log2 bdk_pciercx_hdr_log2_t;
+
+static inline uint64_t BDK_PCIERCX_HDR_LOG2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_HDR_LOG2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x120ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_HDR_LOG2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_HDR_LOG2(a) bdk_pciercx_hdr_log2_t
+#define bustype_BDK_PCIERCX_HDR_LOG2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_HDR_LOG2(a) "PCIERCX_HDR_LOG2"
+#define busnum_BDK_PCIERCX_HDR_LOG2(a) (a)
+#define arguments_BDK_PCIERCX_HDR_LOG2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_hdr_log3
+ *
+ * PCIe RC Header Log Register 3
+ * The header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_hdr_log3
+{
+ uint32_t u;
+ struct bdk_pciercx_hdr_log3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO/H) Header log register (third DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO/H) Header log register (third DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_hdr_log3_s cn; */
+};
+typedef union bdk_pciercx_hdr_log3 bdk_pciercx_hdr_log3_t;
+
+static inline uint64_t BDK_PCIERCX_HDR_LOG3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_HDR_LOG3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x124ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_HDR_LOG3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_HDR_LOG3(a) bdk_pciercx_hdr_log3_t
+#define bustype_BDK_PCIERCX_HDR_LOG3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_HDR_LOG3(a) "PCIERCX_HDR_LOG3"
+#define busnum_BDK_PCIERCX_HDR_LOG3(a) (a)
+#define arguments_BDK_PCIERCX_HDR_LOG3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_hdr_log4
+ *
+ * PCIe RC Header Log Register 4
+ * The header log registers collect the header for the TLP corresponding to a detected error.
+ */
+union bdk_pciercx_hdr_log4
+{
+ uint32_t u;
+ struct bdk_pciercx_hdr_log4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO/H) Header log register (fourth DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO/H) Header log register (fourth DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_hdr_log4_s cn; */
+};
+typedef union bdk_pciercx_hdr_log4 bdk_pciercx_hdr_log4_t;
+
+static inline uint64_t BDK_PCIERCX_HDR_LOG4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_HDR_LOG4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x128ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_HDR_LOG4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_HDR_LOG4(a) bdk_pciercx_hdr_log4_t
+#define bustype_BDK_PCIERCX_HDR_LOG4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_HDR_LOG4(a) "PCIERCX_HDR_LOG4"
+#define busnum_BDK_PCIERCX_HDR_LOG4(a) (a)
+#define arguments_BDK_PCIERCX_HDR_LOG4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_id
+ *
+ * PCIe RC Device ID and Vendor ID Register
+ */
+union bdk_pciercx_id
+{
+ uint32_t u;
+ struct bdk_pciercx_id_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID for PCIERC, writable through PEM()_CFG_WR.
+ Firmware must configure this field prior to starting the link.
+ _ \<15:8\> is typically set to the appropriate chip number, from the
+ FUS_FUSE_NUM_E::CHIP_TYPE() fuses, and as enumerated by PCC_PROD_E::CNXXXX.
+ _ \<7:0\> is typically set to PCC_DEV_IDL_E::PCIERC. */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t vendid : 16; /**< [ 15: 0](RO/WRSL) Vendor ID, writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t devid : 16; /**< [ 31: 16](RO/WRSL) Device ID for PCIERC, writable through PEM()_CFG_WR.
+ Firmware must configure this field prior to starting the link.
+ _ \<15:8\> is typically set to the appropriate chip number, from the
+ FUS_FUSE_NUM_E::CHIP_TYPE() fuses, and as enumerated by PCC_PROD_E::CNXXXX.
+ _ \<7:0\> is typically set to PCC_DEV_IDL_E::PCIERC. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_id_s cn; */
+};
+typedef union bdk_pciercx_id bdk_pciercx_id_t;
+
+static inline uint64_t BDK_PCIERCX_ID(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ID(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ID", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ID(a) bdk_pciercx_id_t
+#define bustype_BDK_PCIERCX_ID(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ID(a) "PCIERCX_ID"
+#define busnum_BDK_PCIERCX_ID(a) (a)
+#define arguments_BDK_PCIERCX_ID(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_int
+ *
+ * PCIe RC Interrupt Line Register/Interrupt Pin/Bridge Control Register
+ */
+union bdk_pciercx_int
+{
+ uint32_t u;
+ struct bdk_pciercx_int_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t inta : 8; /**< [ 15: 8](RO/WRSL) Interrupt pin. Identifies the legacy interrupt message that the device (or device
+ function) uses. The interrupt pin register is writable through PEM()_CFG_WR. */
+ uint32_t il : 8; /**< [ 7: 0](R/W) Interrupt line. */
+#else /* Word 0 - Little Endian */
+ uint32_t il : 8; /**< [ 7: 0](R/W) Interrupt line. */
+ uint32_t inta : 8; /**< [ 15: 8](RO/WRSL) Interrupt pin. Identifies the legacy interrupt message that the device (or device
+ function) uses. The interrupt pin register is writable through PEM()_CFG_WR. */
+ uint32_t pere : 1; /**< [ 16: 16](R/W) Parity error response enable. */
+ uint32_t see : 1; /**< [ 17: 17](R/W) SERR enable. */
+ uint32_t isae : 1; /**< [ 18: 18](R/W) ISA enable. */
+ uint32_t vgae : 1; /**< [ 19: 19](RO) VGA enable. */
+ uint32_t vga16d : 1; /**< [ 20: 20](RO) VGA 16-bit decode. */
+ uint32_t mam : 1; /**< [ 21: 21](RO) Master abort mode. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t sbrst : 1; /**< [ 22: 22](R/W) Secondary bus reset. Hot reset. Causes TS1s with the hot reset bit to be sent to the link
+ partner. When set, software should wait 2 ms before clearing. The link partner normally
+ responds by sending TS1s with the hot reset bit set, which will cause a link down event.
+ Refer to 'PCIe Link-Down Reset in RC Mode' section. */
+ uint32_t fbbe : 1; /**< [ 23: 23](RO) Fast back-to-back transactions enable. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t pdt : 1; /**< [ 24: 24](RO) Primary discard timer. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t sdt : 1; /**< [ 25: 25](RO) Secondary discard timer. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t dts : 1; /**< [ 26: 26](RO) Discard timer status. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t dtsees : 1; /**< [ 27: 27](RO) Discard timer SERR enable status. Not applicable to PCI Express, hardwired to zero. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_int_s cn; */
+};
+typedef union bdk_pciercx_int bdk_pciercx_int_t;
+
+static inline uint64_t BDK_PCIERCX_INT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_INT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_INT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_INT(a) bdk_pciercx_int_t
+#define bustype_BDK_PCIERCX_INT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_INT(a) "PCIERCX_INT"
+#define busnum_BDK_PCIERCX_INT(a) (a)
+#define arguments_BDK_PCIERCX_INT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_iobasel
+ *
+ * PCIe RC I/O Base and I/O Limit/Secondary Status Register
+ */
+union bdk_pciercx_iobasel
+{
+ uint32_t u;
+ struct bdk_pciercx_iobasel_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error */
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t reserved_22 : 1;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t reserved_16_20 : 5;
+ uint32_t lio_limi : 4; /**< [ 15: 12](R/W) I/O space limit. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t io32b : 1; /**< [ 8: 8](RO/H) 32-bit I/O space.
+ This is a read-only copy of [IO32A]. */
+ uint32_t lio_base : 4; /**< [ 7: 4](R/W) I/O space base. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t io32a : 1; /**< [ 0: 0](RO/WRSL) 32-bit I/O space.
+ 0 = 16-bit I/O addressing.
+ 1 = 32-bit I/O addressing.
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to [IO32B]. */
+#else /* Word 0 - Little Endian */
+ uint32_t io32a : 1; /**< [ 0: 0](RO/WRSL) 32-bit I/O space.
+ 0 = 16-bit I/O addressing.
+ 1 = 32-bit I/O addressing.
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to [IO32B]. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t lio_base : 4; /**< [ 7: 4](R/W) I/O space base. */
+ uint32_t io32b : 1; /**< [ 8: 8](RO/H) 32-bit I/O space.
+ This is a read-only copy of [IO32A]. */
+ uint32_t reserved_9_11 : 3;
+ uint32_t lio_limi : 4; /**< [ 15: 12](R/W) I/O space limit. */
+ uint32_t reserved_16_20 : 5;
+ uint32_t m66 : 1; /**< [ 21: 21](RO) 66 MHz capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t reserved_22 : 1;
+ uint32_t fbb : 1; /**< [ 23: 23](RO) Fast back-to-back capable. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t mdpe : 1; /**< [ 24: 24](R/W1C/H) Master data parity error */
+ uint32_t devt : 2; /**< [ 26: 25](RO) DEVSEL timing. Not applicable for PCI Express. Hardwired to zero. */
+ uint32_t sta : 1; /**< [ 27: 27](R/W1C/H) Signaled target abort. */
+ uint32_t rta : 1; /**< [ 28: 28](R/W1C/H) Received target abort. */
+ uint32_t rma : 1; /**< [ 29: 29](R/W1C/H) Received master abort. */
+ uint32_t sse : 1; /**< [ 30: 30](R/W1C/H) Signaled system error. */
+ uint32_t dpe : 1; /**< [ 31: 31](R/W1C/H) Detected parity error. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_iobasel_s cn; */
+};
+typedef union bdk_pciercx_iobasel bdk_pciercx_iobasel_t;
+
+static inline uint64_t BDK_PCIERCX_IOBASEL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_IOBASEL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_IOBASEL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_IOBASEL(a) bdk_pciercx_iobasel_t
+#define bustype_BDK_PCIERCX_IOBASEL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_IOBASEL(a) "PCIERCX_IOBASEL"
+#define busnum_BDK_PCIERCX_IOBASEL(a) (a)
+#define arguments_BDK_PCIERCX_IOBASEL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_iobaseu
+ *
+ * PCIe RC I/O Base and Limit Upper 16 Bits Register
+ */
+union bdk_pciercx_iobaseu
+{
+ uint32_t u;
+ struct bdk_pciercx_iobaseu_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t uio_limit : 16; /**< [ 31: 16](R/W) Upper 16 bits of I/O limit (if 32-bit I/O decoding is supported for devices on the secondary side). */
+ uint32_t uio_base : 16; /**< [ 15: 0](R/W) Upper 16 bits of I/O base (if 32-bit I/O decoding is supported for devices on the secondary side). */
+#else /* Word 0 - Little Endian */
+ uint32_t uio_base : 16; /**< [ 15: 0](R/W) Upper 16 bits of I/O base (if 32-bit I/O decoding is supported for devices on the secondary side). */
+ uint32_t uio_limit : 16; /**< [ 31: 16](R/W) Upper 16 bits of I/O limit (if 32-bit I/O decoding is supported for devices on the secondary side). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_iobaseu_s cn; */
+};
+typedef union bdk_pciercx_iobaseu bdk_pciercx_iobaseu_t;
+
+static inline uint64_t BDK_PCIERCX_IOBASEU(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_IOBASEU(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x30ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_IOBASEU", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_IOBASEU(a) bdk_pciercx_iobaseu_t
+#define bustype_BDK_PCIERCX_IOBASEU(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_IOBASEU(a) "PCIERCX_IOBASEU"
+#define busnum_BDK_PCIERCX_IOBASEU(a) (a)
+#define arguments_BDK_PCIERCX_IOBASEU(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_l1_substates
+ *
+ * PCIe RC L1 Substates Timing Register
+ */
+union bdk_pciercx_l1_substates
+{
+ uint32_t u;
+ struct bdk_pciercx_l1_substates_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t l1sub_t_pclkack : 2; /**< [ 7: 6](R/W) Max delay (in 1 us units) between a MAC request to remove
+ the clock on mac_phy_pclkreq_n and a PHY response on
+ phy_mac_pclkack_n. If the PHY does not respond within this
+ time the request is aborted. */
+ uint32_t l1sub_t_l1_2 : 4; /**< [ 5: 2](R/W) Duration (in us) of L1.2. */
+ uint32_t l1sub_t_power_off : 2; /**< [ 1: 0](R/W) Duration (in us) of L1.2 entry. */
+#else /* Word 0 - Little Endian */
+ uint32_t l1sub_t_power_off : 2; /**< [ 1: 0](R/W) Duration (in us) of L1.2 entry. */
+ uint32_t l1sub_t_l1_2 : 4; /**< [ 5: 2](R/W) Duration (in us) of L1.2. */
+ uint32_t l1sub_t_pclkack : 2; /**< [ 7: 6](R/W) Max delay (in 1 us units) between a MAC request to remove
+ the clock on mac_phy_pclkreq_n and a PHY response on
+ phy_mac_pclkack_n. If the PHY does not respond within this
+ time the request is aborted. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_l1_substates_s cn; */
+};
+typedef union bdk_pciercx_l1_substates bdk_pciercx_l1_substates_t;
+
+static inline uint64_t BDK_PCIERCX_L1_SUBSTATES(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_L1_SUBSTATES(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb44ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_L1_SUBSTATES", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_L1_SUBSTATES(a) bdk_pciercx_l1_substates_t
+#define bustype_BDK_PCIERCX_L1_SUBSTATES(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_L1_SUBSTATES(a) "PCIERCX_L1_SUBSTATES"
+#define busnum_BDK_PCIERCX_L1_SUBSTATES(a) (a)
+#define arguments_BDK_PCIERCX_L1_SUBSTATES(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_l1sub_cap
+ *
+ * PCIe RC L1 PM Substates Capability Register
+ */
+union bdk_pciercx_l1sub_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_l1sub_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t pwron_val : 5; /**< [ 23: 19](RO/WRSL) Port T power on value.
+ Along with [PWRON_SCALE] sets the time (in us) that this
+ Port requires the port on the opposite side of the Link to
+ wait in L.1.2.Exit after sampling PCI_CLKREQ_L asserted before
+ actively driving the interface. */
+ uint32_t reserved_18 : 1;
+ uint32_t pwron_scale : 2; /**< [ 17: 16](RO/WRSL) Port T power on scale.
+ 0x0 = 2 us.
+ 0x1 = 10 us.
+ 0x2 = 100 us.
+ 0x3 = Reserved. */
+ uint32_t com_md_supp : 8; /**< [ 15: 8](RO/WRSL) Port common mode restore time.
+ Time (in us) required for this Port to reestablish
+ common mode. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t l1_pmsub_sup : 1; /**< [ 4: 4](RO/WRSL) L1 PM substates ECN supported. */
+ uint32_t l1_1_aspm_sup : 1; /**< [ 3: 3](RO/WRSL) ASPM L11 supported. */
+ uint32_t l1_2_aspm_sup : 1; /**< [ 2: 2](RO/WRSL) ASPM L12 supported. */
+ uint32_t l1_1_pcipm_sup : 1; /**< [ 1: 1](RO/WRSL) PCI-PM L11 supported. */
+ uint32_t l1_2_pcipm_sup : 1; /**< [ 0: 0](RO/WRSL) PCI-PM L12 supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t l1_2_pcipm_sup : 1; /**< [ 0: 0](RO/WRSL) PCI-PM L12 supported. */
+ uint32_t l1_1_pcipm_sup : 1; /**< [ 1: 1](RO/WRSL) PCI-PM L11 supported. */
+ uint32_t l1_2_aspm_sup : 1; /**< [ 2: 2](RO/WRSL) ASPM L12 supported. */
+ uint32_t l1_1_aspm_sup : 1; /**< [ 3: 3](RO/WRSL) ASPM L11 supported. */
+ uint32_t l1_pmsub_sup : 1; /**< [ 4: 4](RO/WRSL) L1 PM substates ECN supported. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t com_md_supp : 8; /**< [ 15: 8](RO/WRSL) Port common mode restore time.
+ Time (in us) required for this Port to reestablish
+ common mode. */
+ uint32_t pwron_scale : 2; /**< [ 17: 16](RO/WRSL) Port T power on scale.
+ 0x0 = 2 us.
+ 0x1 = 10 us.
+ 0x2 = 100 us.
+ 0x3 = Reserved. */
+ uint32_t reserved_18 : 1;
+ uint32_t pwron_val : 5; /**< [ 23: 19](RO/WRSL) Port T power on value.
+ Along with [PWRON_SCALE] sets the time (in us) that this
+ Port requires the port on the opposite side of the Link to
+ wait in L.1.2.Exit after sampling PCI_CLKREQ_L asserted before
+ actively driving the interface. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_l1sub_cap_s cn; */
+};
+typedef union bdk_pciercx_l1sub_cap bdk_pciercx_l1sub_cap_t;
+
+static inline uint64_t BDK_PCIERCX_L1SUB_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_L1SUB_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x304ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_L1SUB_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_L1SUB_CAP(a) bdk_pciercx_l1sub_cap_t
+#define bustype_BDK_PCIERCX_L1SUB_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_L1SUB_CAP(a) "PCIERCX_L1SUB_CAP"
+#define busnum_BDK_PCIERCX_L1SUB_CAP(a) (a)
+#define arguments_BDK_PCIERCX_L1SUB_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_l1sub_cap_hdr
+ *
+ * PCIe RC L1 Substates Capability Header Register
+ */
+union bdk_pciercx_l1sub_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_l1sub_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_l1sub_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_l1sub_cap_hdr bdk_pciercx_l1sub_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_L1SUB_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_L1SUB_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x300ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_L1SUB_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_L1SUB_CAP_HDR(a) bdk_pciercx_l1sub_cap_hdr_t
+#define bustype_BDK_PCIERCX_L1SUB_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_L1SUB_CAP_HDR(a) "PCIERCX_L1SUB_CAP_HDR"
+#define busnum_BDK_PCIERCX_L1SUB_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_L1SUB_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_l1sub_ctl1
+ *
+ * PCIe RC L1 Substates Control 1 Register
+ */
+union bdk_pciercx_l1sub_ctl1
+{
+ uint32_t u;
+ struct bdk_pciercx_l1sub_ctl1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t l1_2_th_sca : 3; /**< [ 31: 29](R/W) LTR L12 threshold scale.
+ 0x0 = 1 ns.
+ 0x1 = 32 ns.
+ 0x2 = 1024 ns.
+ 0x3 = 32,768 ns.
+ 0x4 = 1,048,575 ns.
+ 0x5 = 33,554,432 ns.
+ 0x6-7 = Reserved. */
+ uint32_t reserved_26_28 : 3;
+ uint32_t l1_2_th_val : 10; /**< [ 25: 16](R/W) LTR L12 threshold value.
+ Along with [L1_2_TH_SCA], this field indicates the LTR threshold
+ use to determine if entry into L1 results in L1.1 (if enabled) or
+ L1.2 (if enabled). */
+ uint32_t t_com_mode : 8; /**< [ 15: 8](RO/WRSL) Common mode restore time.
+ The value (in us), which must be used by the downstream port
+ for timing the reestablishment of common mode. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t l1_1_aspm_en : 1; /**< [ 3: 3](R/W) ASPM L11 enable. */
+ uint32_t l1_2_aspm_en : 1; /**< [ 2: 2](R/W) ASPM L12 enable. */
+ uint32_t l1_1_pcipm_en : 1; /**< [ 1: 1](R/W) PCI-PM L11 enable. */
+ uint32_t l1_2_pcipm_en : 1; /**< [ 0: 0](R/W) PCI-PM L12 enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t l1_2_pcipm_en : 1; /**< [ 0: 0](R/W) PCI-PM L12 enable. */
+ uint32_t l1_1_pcipm_en : 1; /**< [ 1: 1](R/W) PCI-PM L11 enable. */
+ uint32_t l1_2_aspm_en : 1; /**< [ 2: 2](R/W) ASPM L12 enable. */
+ uint32_t l1_1_aspm_en : 1; /**< [ 3: 3](R/W) ASPM L11 enable. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t t_com_mode : 8; /**< [ 15: 8](RO/WRSL) Common mode restore time.
+ The value (in us), which must be used by the downstream port
+ for timing the reestablishment of common mode. */
+ uint32_t l1_2_th_val : 10; /**< [ 25: 16](R/W) LTR L12 threshold value.
+ Along with [L1_2_TH_SCA], this field indicates the LTR threshold
+ use to determine if entry into L1 results in L1.1 (if enabled) or
+ L1.2 (if enabled). */
+ uint32_t reserved_26_28 : 3;
+ uint32_t l1_2_th_sca : 3; /**< [ 31: 29](R/W) LTR L12 threshold scale.
+ 0x0 = 1 ns.
+ 0x1 = 32 ns.
+ 0x2 = 1024 ns.
+ 0x3 = 32,768 ns.
+ 0x4 = 1,048,575 ns.
+ 0x5 = 33,554,432 ns.
+ 0x6-7 = Reserved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_l1sub_ctl1_s cn; */
+};
+typedef union bdk_pciercx_l1sub_ctl1 bdk_pciercx_l1sub_ctl1_t;
+
+static inline uint64_t BDK_PCIERCX_L1SUB_CTL1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_L1SUB_CTL1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x308ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_L1SUB_CTL1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_L1SUB_CTL1(a) bdk_pciercx_l1sub_ctl1_t
+#define bustype_BDK_PCIERCX_L1SUB_CTL1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_L1SUB_CTL1(a) "PCIERCX_L1SUB_CTL1"
+#define busnum_BDK_PCIERCX_L1SUB_CTL1(a) (a)
+#define arguments_BDK_PCIERCX_L1SUB_CTL1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_l1sub_ctl2
+ *
+ * PCIe RC L1 Substates Control 2 Register
+ */
+union bdk_pciercx_l1sub_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_l1sub_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t t_pwr_on_val : 5; /**< [ 7: 3](R/W) T power on value.
+ Along with the [T_PWR_ON_SCA], sets the minimum amount of time (in us)
+ that the Port must wait in L.1.2.Exit after sampling PCI_CLKREQ_L asserted
+ before actively driving the interface. */
+ uint32_t reserved_2 : 1;
+ uint32_t t_pwr_on_sca : 2; /**< [ 1: 0](R/W) T power on scale.
+ 0x0 = 2 us.
+ 0x1 = 10 us.
+ 0x2 = 100 us.
+ 0x3 = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t t_pwr_on_sca : 2; /**< [ 1: 0](R/W) T power on scale.
+ 0x0 = 2 us.
+ 0x1 = 10 us.
+ 0x2 = 100 us.
+ 0x3 = Reserved. */
+ uint32_t reserved_2 : 1;
+ uint32_t t_pwr_on_val : 5; /**< [ 7: 3](R/W) T power on value.
+ Along with the [T_PWR_ON_SCA], sets the minimum amount of time (in us)
+ that the Port must wait in L.1.2.Exit after sampling PCI_CLKREQ_L asserted
+ before actively driving the interface. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_l1sub_ctl2_s cn; */
+};
+typedef union bdk_pciercx_l1sub_ctl2 bdk_pciercx_l1sub_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_L1SUB_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_L1SUB_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x30cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_L1SUB_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_L1SUB_CTL2(a) bdk_pciercx_l1sub_ctl2_t
+#define bustype_BDK_PCIERCX_L1SUB_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_L1SUB_CTL2(a) "PCIERCX_L1SUB_CTL2"
+#define busnum_BDK_PCIERCX_L1SUB_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_L1SUB_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_lane_skew
+ *
+ * PCIe RC Lane Skew Register
+ */
+union bdk_pciercx_lane_skew
+{
+ uint32_t u;
+ struct bdk_pciercx_lane_skew_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dlld : 1; /**< [ 31: 31](R/W) Disable lane-to-lane deskew. Disables the internal lane-to-lane deskew logic. */
+ uint32_t inuml : 4; /**< [ 30: 27](R/W) Implemented number of lanes (minus one). */
+ uint32_t lane_skew : 1; /**< [ 26: 26](R/W) Reserved. */
+ uint32_t ack_nak : 1; /**< [ 25: 25](R/W) ACK/NAK disable. Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
+ uint32_t fcd : 1; /**< [ 24: 24](R/W) Flow control disable. Prevents the PCI Express bus from sending FC DLLPs. */
+ uint32_t ilst : 24; /**< [ 23: 0](R/W) Insert lane skew for transmit (not supported for *16). Causes skew between lanes for test
+ purposes. There are three bits per lane. The value is in units of one symbol time. For
+ example, the value 0x2 for a lane forces a skew of two symbol times for that lane. The
+ maximum skew value for any lane is five symbol times. */
+#else /* Word 0 - Little Endian */
+ uint32_t ilst : 24; /**< [ 23: 0](R/W) Insert lane skew for transmit (not supported for *16). Causes skew between lanes for test
+ purposes. There are three bits per lane. The value is in units of one symbol time. For
+ example, the value 0x2 for a lane forces a skew of two symbol times for that lane. The
+ maximum skew value for any lane is five symbol times. */
+ uint32_t fcd : 1; /**< [ 24: 24](R/W) Flow control disable. Prevents the PCI Express bus from sending FC DLLPs. */
+ uint32_t ack_nak : 1; /**< [ 25: 25](R/W) ACK/NAK disable. Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
+ uint32_t lane_skew : 1; /**< [ 26: 26](R/W) Reserved. */
+ uint32_t inuml : 4; /**< [ 30: 27](R/W) Implemented number of lanes (minus one). */
+ uint32_t dlld : 1; /**< [ 31: 31](R/W) Disable lane-to-lane deskew. Disables the internal lane-to-lane deskew logic. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_lane_skew_s cn; */
+};
+typedef union bdk_pciercx_lane_skew bdk_pciercx_lane_skew_t;
+
+static inline uint64_t BDK_PCIERCX_LANE_SKEW(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LANE_SKEW(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x714ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LANE_SKEW", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LANE_SKEW(a) bdk_pciercx_lane_skew_t
+#define bustype_BDK_PCIERCX_LANE_SKEW(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LANE_SKEW(a) "PCIERCX_LANE_SKEW"
+#define busnum_BDK_PCIERCX_LANE_SKEW(a) (a)
+#define arguments_BDK_PCIERCX_LANE_SKEW(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_cap
+ *
+ * PCIe RC Link Capabilities Register
+ */
+union bdk_pciercx_link_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_link_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_23 : 1;
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to one for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO/WRSL) Surprise down error reporting capable. Set to one for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. Set to 0 for root complex devices. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software
+ specifies during hardware configuration, writable through PEM()_CFG_WR. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. Only L1 is supported (L0s not supported).
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width. Legal encodings are 0x1 (l lane), 0x2 (2 lanes), 0x4 (4 lanes),
+ 0x8 (8 lanes), and 0x10 (16 lanes). Some encodings may not be legal for all PEMs.
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed.
+
+ 0x1 = 2.5 GHz supported.
+ 0x2 = 5.0 GHz and 2.5 GHz supported.
+ 0x3 = 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+ 0x4 = 16.0 GHz, 8.0 Ghz, 5.0 GHz, and 2.5 GHz supported.
+
+ This field is writable through PEM()_CFG_WR. */
+#else /* Word 0 - Little Endian */
+ uint32_t mls : 4; /**< [ 3: 0](RO/WRSL) Maximum link speed.
+
+ 0x1 = 2.5 GHz supported.
+ 0x2 = 5.0 GHz and 2.5 GHz supported.
+ 0x3 = 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+ 0x4 = 16.0 GHz, 8.0 Ghz, 5.0 GHz, and 2.5 GHz supported.
+
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t mlw : 6; /**< [ 9: 4](RO/WRSL/H) Maximum link width. Legal encodings are 0x1 (l lane), 0x2 (2 lanes), 0x4 (4 lanes),
+ 0x8 (8 lanes), and 0x10 (16 lanes). Some encodings may not be legal for all PEMs.
+ This field is writable through PEM()_CFG_WR. */
+ uint32_t aslpms : 2; /**< [ 11: 10](RO/WRSL) Active state link PM support. Only L1 is supported (L0s not supported).
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t l0el : 3; /**< [ 14: 12](RO/WRSL) L0s exit latency. The default value is the value that software
+ specifies during hardware configuration, writable through PEM()_CFG_WR. */
+ uint32_t l1el : 3; /**< [ 17: 15](RO/WRSL) L1 exit latency. The default value is the value that software specifies during hardware
+ configuration, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t cpm : 1; /**< [ 18: 18](RO) Clock power management. Set to 0 for root complex devices. */
+ uint32_t sderc : 1; /**< [ 19: 19](RO/WRSL) Surprise down error reporting capable. Set to one for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t dllarc : 1; /**< [ 20: 20](RO) Data link layer active reporting capable. Set to one for root complex devices and 0 for
+ endpoint devices. */
+ uint32_t lbnc : 1; /**< [ 21: 21](RO/WRSL) Link bandwidth notification capability. */
+ uint32_t aspm : 1; /**< [ 22: 22](RO/WRSL) ASPM optionality compliance. */
+ uint32_t reserved_23 : 1;
+ uint32_t pnum : 8; /**< [ 31: 24](RO/WRSL) Port number, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_cap_s cn; */
+};
+typedef union bdk_pciercx_link_cap bdk_pciercx_link_cap_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x7cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_CAP(a) bdk_pciercx_link_cap_t
+#define bustype_BDK_PCIERCX_LINK_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_CAP(a) "PCIERCX_LINK_CAP"
+#define busnum_BDK_PCIERCX_LINK_CAP(a) (a)
+#define arguments_BDK_PCIERCX_LINK_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_cap2
+ *
+ * PCIe RC Link Capabilities 2 Register
+ */
+union bdk_pciercx_link_cap2
+{
+ uint32_t u;
+ struct bdk_pciercx_link_cap2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t trtds : 1; /**< [ 24: 24](RO/WRSL) Two retimers presence detect supported. */
+ uint32_t rtds : 1; /**< [ 23: 23](RO/WRSL) Retimer presence detect supported. */
+ uint32_t reserved_9_22 : 14;
+ uint32_t cls : 1; /**< [ 8: 8](RO) Crosslink supported. */
+ uint32_t slsv : 7; /**< [ 7: 1](RO/WRSL) Supported link speeds vector. Indicates the supported link speeds of the associated port.
+ For each bit, a value of 1 b indicates that the corresponding link speed is supported;
+ otherwise, the link speed is not supported. Bit definitions are:
+
+ _ Bit \<1\> = 2.5 GT/s.
+ _ Bit \<2\> = 5.0 GT/s.
+ _ Bit \<3\> = 8.0 GT/s.
+ _ Bit \<4\> = 16.0 GT/s
+
+ _ Bits \<7:5\> are reserved. */
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t slsv : 7; /**< [ 7: 1](RO/WRSL) Supported link speeds vector. Indicates the supported link speeds of the associated port.
+ For each bit, a value of 1 b indicates that the corresponding link speed is supported;
+ otherwise, the link speed is not supported. Bit definitions are:
+
+ _ Bit \<1\> = 2.5 GT/s.
+ _ Bit \<2\> = 5.0 GT/s.
+ _ Bit \<3\> = 8.0 GT/s.
+ _ Bit \<4\> = 16.0 GT/s
+
+ _ Bits \<7:5\> are reserved. */
+ uint32_t cls : 1; /**< [ 8: 8](RO) Crosslink supported. */
+ uint32_t reserved_9_22 : 14;
+ uint32_t rtds : 1; /**< [ 23: 23](RO/WRSL) Retimer presence detect supported. */
+ uint32_t trtds : 1; /**< [ 24: 24](RO/WRSL) Two retimers presence detect supported. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_cap2_s cn; */
+};
+typedef union bdk_pciercx_link_cap2 bdk_pciercx_link_cap2_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_CAP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_CAP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x9cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_CAP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_CAP2(a) bdk_pciercx_link_cap2_t
+#define bustype_BDK_PCIERCX_LINK_CAP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_CAP2(a) "PCIERCX_LINK_CAP2"
+#define busnum_BDK_PCIERCX_LINK_CAP2(a) (a)
+#define arguments_BDK_PCIERCX_LINK_CAP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_ctl
+ *
+ * PCIe RC Link Control/Link Status Register
+ */
+union bdk_pciercx_link_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_link_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_Down status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value
+ selected during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t reserved_26 : 1;
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2.
+ 0x4 = Supported link speeds vector field bit 3. */
+ uint32_t drs_ctl : 2; /**< [ 15: 14](RO) DRS signaling control. */
+ uint32_t reserved_12_13 : 2;
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t hawd : 1; /**< [ 9: 9](R/W) Hardware autonomous width disable. */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through PEM()_CFG_WR.
+ However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+#else /* Word 0 - Little Endian */
+ uint32_t aslpc : 2; /**< [ 1: 0](R/W) Active state link PM control. */
+ uint32_t reserved_2 : 1;
+ uint32_t rcb : 1; /**< [ 3: 3](RO/WRSL) Read completion boundary (RCB), writable through PEM()_CFG_WR.
+ However, the application must not change this field because an RCB of 64
+ bytes is not supported. */
+ uint32_t ld : 1; /**< [ 4: 4](R/W) Link disable. */
+ uint32_t rl : 1; /**< [ 5: 5](R/W/H) Retrain link.
+ As per the PCIe specification this bit always reads as zero. */
+ uint32_t ccc : 1; /**< [ 6: 6](R/W) Common clock configuration. */
+ uint32_t es : 1; /**< [ 7: 7](R/W) Extended synch. */
+ uint32_t ecpm : 1; /**< [ 8: 8](R/W/H) Enable clock power management. Hardwired to 0 if clock power management is disabled in the
+ link capabilities register. */
+ uint32_t hawd : 1; /**< [ 9: 9](R/W) Hardware autonomous width disable. */
+ uint32_t lbm_int_enb : 1; /**< [ 10: 10](R/W) Link bandwidth management interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link bandwidth management status bit has been set. */
+ uint32_t lab_int_enb : 1; /**< [ 11: 11](R/W) Link autonomous bandwidth interrupt enable. When set, enables the generation of an
+ interrupt to indicate that the link autonomous bandwidth status bit has been set. */
+ uint32_t reserved_12_13 : 2;
+ uint32_t drs_ctl : 2; /**< [ 15: 14](RO) DRS signaling control. */
+ uint32_t ls : 4; /**< [ 19: 16](RO/H) Current link speed. The encoded value specifies a bit location in the supported link
+ speeds vector (in the link capabilities 2 register) that corresponds to the current link
+ speed.
+ 0x1 = Supported link speeds vector field bit 0.
+ 0x2 = Supported link speeds vector field bit 1.
+ 0x3 = Supported link speeds vector field bit 2.
+ 0x4 = Supported link speeds vector field bit 3. */
+ uint32_t nlw : 6; /**< [ 25: 20](RO/H) Negotiated link width. Set automatically by hardware after link initialization. Value is
+ undefined when link is not up. */
+ uint32_t reserved_26 : 1;
+ uint32_t lt : 1; /**< [ 27: 27](RO/H) Link training. */
+ uint32_t scc : 1; /**< [ 28: 28](RO/WRSL) Slot clock configuration. Indicates that the component uses the same physical reference
+ clock that the platform provides on the connector. The default value is the value
+ selected during hardware configuration, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t dlla : 1; /**< [ 29: 29](RO/H) Data link layer active. */
+ uint32_t lbm : 1; /**< [ 30: 30](R/W1C/H) Link bandwidth management status. This bit is set to indicate either of the following has
+ occurred without the port transitioning through DL_Down status:
+
+ * A link retraining has completed following a write of 1b to the retrain link bit.
+
+ * Hardware has changed the Link speed or width to attempt to correct unreliable link
+ operation, either through a LTSSM timeout of higher level process. This bit must be set if
+ the physical layer reports a speed or width change was initiated by the downstream
+ component that was not indicated as an autonomous change. */
+ uint32_t lab : 1; /**< [ 31: 31](R/W1C/H) Link autonomous bandwidth status. This bit is set to indicate that hardware has
+ autonomously changed link speed or width, without the port transitioning through DL_Down
+ status, for reasons other than to attempt to correct unreliable link operation. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_ctl_s cn; */
+};
+typedef union bdk_pciercx_link_ctl bdk_pciercx_link_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x80ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_CTL(a) bdk_pciercx_link_ctl_t
+#define bustype_BDK_PCIERCX_LINK_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_CTL(a) "PCIERCX_LINK_CTL"
+#define busnum_BDK_PCIERCX_LINK_CTL(a) (a)
+#define arguments_BDK_PCIERCX_LINK_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_ctl2
+ *
+ * PCIe RC Link Control 2 Register/Link Status 2 Register
+ */
+union bdk_pciercx_link_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_link_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t drs_mr : 1; /**< [ 31: 31](R/W1C) DRS message received. */
+ uint32_t dcp : 3; /**< [ 30: 28](RO) Downstream component presence. */
+ uint32_t reserved_26_27 : 2;
+ uint32_t crossl : 2; /**< [ 25: 24](RO) Crosslink resolution (not supported). */
+ uint32_t trtd : 1; /**< [ 23: 23](RO) Two retimers presence detected. */
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request 8.0 GT/s. */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization 8.0 GT/s phase 3 successful. */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization 8.0 GT/s phase 2 successful. */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization 8.0 GT/s phase 1 successful. */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization 8.0 GT/s complete. */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being one.
+ 0x0 = -6 dB.
+ 0x1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to one, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to one, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter pins:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis on the downstream device. Must be set prior to link training.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect.
+
+ PCIERC_GEN2_PORT[S_D_E] can be used to change the deemphasis on the upstream ports. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to one in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+ 0x4 = 16 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+#else /* Word 0 - Little Endian */
+ uint32_t tls : 4; /**< [ 3: 0](R/W) Target link speed. For downstream ports, this field sets an upper limit on link
+ operational speed by restricting the values advertised by the upstream component in its
+ training sequences:
+
+ 0x1 = 2.5 Gb/s target link speed.
+ 0x2 = 5 Gb/s target link speed.
+ 0x3 = 8 Gb/s target link speed.
+ 0x4 = 16 Gb/s target link speed.
+
+ All other encodings are reserved.
+
+ If a value is written to this field that does not correspond to a speed included in the
+ supported link speeds field, the result is undefined. For both upstream and downstream
+ ports, this field is used to set the target compliance mode speed when software is using
+ the enter compliance bit to force a link into compliance mode.
+
+ _ MD is 0x0, reset to 0x1: 2.5 GHz supported.
+
+ _ MD is 0x1, reset to 0x2: 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x2, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported.
+
+ _ MD is 0x3, reset to 0x3: 8.0 GHz, 5.0 GHz and 2.5 GHz supported (RC Mode). */
+ uint32_t ec : 1; /**< [ 4: 4](R/W) Enter compliance. Software is permitted to force a link to enter compliance mode at the
+ speed indicated in the target link speed field by setting this bit to one in both components
+ on a link and then initiating a hot reset on the link. */
+ uint32_t hasd : 1; /**< [ 5: 5](R/W) Hardware autonomous speed disable. When asserted, the application must disable hardware
+ from changing the link speed for device-specific reasons other than attempting to correct
+ unreliable link operation by reducing link speed. Initial transition to the highest
+ supported common link speed is not blocked by this signal. */
+ uint32_t sde : 1; /**< [ 6: 6](RO/WRSL) Selectable deemphasis. When the link is operating at 5.0 GT/s speed, selects the level of
+ deemphasis on the downstream device. Must be set prior to link training.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s speed, the setting of this bit has no effect.
+
+ PCIERC_GEN2_PORT[S_D_E] can be used to change the deemphasis on the upstream ports. */
+ uint32_t tm : 3; /**< [ 9: 7](R/W/H) Transmit margin. This field controls the value of the non-deemphasized voltage level at
+ the transmitter pins:
+ 0x0 = 800-1200 mV for full swing 400-600 mV for half-swing.
+ 0x1-0x2 = Values must be monotonic with a nonzero slope.
+ 0x3 = 200-400 mV for full-swing and 100-200 mV for half-swing.
+ 0x4-0x7 = Reserved.
+
+ This field is reset to 0x0 on entry to the LTSSM Polling.Compliance substate. When
+ operating in 5.0 GT/s mode with full swing, the deemphasis ratio must be maintained within
+ +/- 1 dB from the specification-defined operational value either -3.5 or -6 dB. */
+ uint32_t emc : 1; /**< [ 10: 10](R/W) Enter modified compliance. When this bit is set to one, the device transmits a modified
+ compliance pattern if the LTSSM enters Polling.Compliance state. */
+ uint32_t csos : 1; /**< [ 11: 11](R/W) Compliance SOS. When set to one, the LTSSM is required to send SKP ordered sets periodically
+ in between the (modified) compliance patterns.
+
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cde : 4; /**< [ 15: 12](R/W) Compliance deemphasis. This bit sets the deemphasis level in Polling.Compliance state if
+ the entry occurred due to the TX compliance receive bit being one.
+ 0x0 = -6 dB.
+ 0x1 = -3.5 dB.
+
+ When the link is operating at 2.5 GT/s, the setting of this bit has no effect. */
+ uint32_t cdl : 1; /**< [ 16: 16](RO/H) Current deemphasis level. When the link is operating at 5 GT/s speed, this bit reflects
+ the level of deemphasis.
+ 0 = -6 dB.
+ 1 = -3.5 dB.
+
+ The value in this bit is undefined when the link is operating at 2.5 GT/s speed. */
+ uint32_t eqc : 1; /**< [ 17: 17](RO/H) Equalization 8.0 GT/s complete. */
+ uint32_t ep1s : 1; /**< [ 18: 18](RO/H) Equalization 8.0 GT/s phase 1 successful. */
+ uint32_t ep2s : 1; /**< [ 19: 19](RO/H) Equalization 8.0 GT/s phase 2 successful. */
+ uint32_t ep3s : 1; /**< [ 20: 20](RO/H) Equalization 8.0 GT/s phase 3 successful. */
+ uint32_t ler : 1; /**< [ 21: 21](R/W1C/H) Link equalization request 8.0 GT/s. */
+ uint32_t rtd : 1; /**< [ 22: 22](RO) Retimer presence detected. */
+ uint32_t trtd : 1; /**< [ 23: 23](RO) Two retimers presence detected. */
+ uint32_t crossl : 2; /**< [ 25: 24](RO) Crosslink resolution (not supported). */
+ uint32_t reserved_26_27 : 2;
+ uint32_t dcp : 3; /**< [ 30: 28](RO) Downstream component presence. */
+ uint32_t drs_mr : 1; /**< [ 31: 31](R/W1C) DRS message received. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_ctl2_s cn; */
+};
+typedef union bdk_pciercx_link_ctl2 bdk_pciercx_link_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xa0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_CTL2(a) bdk_pciercx_link_ctl2_t
+#define bustype_BDK_PCIERCX_LINK_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_CTL2(a) "PCIERCX_LINK_CTL2"
+#define busnum_BDK_PCIERCX_LINK_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_LINK_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_ctl3
+ *
+ * PCIe RC Link Control 3 Register
+ */
+union bdk_pciercx_link_ctl3
+{
+ uint32_t u;
+ struct bdk_pciercx_link_ctl3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_2_31 : 30;
+ uint32_t ler : 1; /**< [ 1: 1](RO/WRSL) Link equalization request interrupt enable. */
+ uint32_t pe : 1; /**< [ 0: 0](RO/WRSL) Perform equalization. */
+#else /* Word 0 - Little Endian */
+ uint32_t pe : 1; /**< [ 0: 0](RO/WRSL) Perform equalization. */
+ uint32_t ler : 1; /**< [ 1: 1](RO/WRSL) Link equalization request interrupt enable. */
+ uint32_t reserved_2_31 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_ctl3_s cn; */
+};
+typedef union bdk_pciercx_link_ctl3 bdk_pciercx_link_ctl3_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_CTL3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_CTL3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x17cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_CTL3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_CTL3(a) bdk_pciercx_link_ctl3_t
+#define bustype_BDK_PCIERCX_LINK_CTL3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_CTL3(a) "PCIERCX_LINK_CTL3"
+#define busnum_BDK_PCIERCX_LINK_CTL3(a) (a)
+#define arguments_BDK_PCIERCX_LINK_CTL3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_link_err_status
+ *
+ * Lane Error Status Register
+ */
+union bdk_pciercx_link_err_status
+{
+ uint32_t u;
+ struct bdk_pciercx_link_err_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t les : 16; /**< [ 15: 0](R/W1C) Lane error status bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t les : 16; /**< [ 15: 0](R/W1C) Lane error status bits. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_link_err_status_s cn; */
+};
+typedef union bdk_pciercx_link_err_status bdk_pciercx_link_err_status_t;
+
+static inline uint64_t BDK_PCIERCX_LINK_ERR_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_LINK_ERR_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x180ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_LINK_ERR_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_LINK_ERR_STATUS(a) bdk_pciercx_link_err_status_t
+#define bustype_BDK_PCIERCX_LINK_ERR_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_LINK_ERR_STATUS(a) "PCIERCX_LINK_ERR_STATUS"
+#define busnum_BDK_PCIERCX_LINK_ERR_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_LINK_ERR_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_margin_ext_cap_hdr
+ *
+ * PCIe RC Margining Extended Capability Header Register
+ */
+union bdk_pciercx_margin_ext_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_margin_ext_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCIE Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_margin_ext_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_margin_ext_cap_hdr bdk_pciercx_margin_ext_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_MARGIN_EXT_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MARGIN_EXT_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1d8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MARGIN_EXT_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MARGIN_EXT_CAP_HDR(a) bdk_pciercx_margin_ext_cap_hdr_t
+#define bustype_BDK_PCIERCX_MARGIN_EXT_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MARGIN_EXT_CAP_HDR(a) "PCIERCX_MARGIN_EXT_CAP_HDR"
+#define busnum_BDK_PCIERCX_MARGIN_EXT_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_MARGIN_EXT_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mem
+ *
+ * PCIe RC Memory Base and Memory Limit Register
+ */
+union bdk_pciercx_mem
+{
+ uint32_t u;
+ struct bdk_pciercx_mem_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ml_addr : 12; /**< [ 31: 20](R/W) Memory limit address. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t mb_addr : 12; /**< [ 15: 4](R/W) Memory base address. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t mb_addr : 12; /**< [ 15: 4](R/W) Memory base address. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t ml_addr : 12; /**< [ 31: 20](R/W) Memory limit address. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mem_s cn; */
+};
+typedef union bdk_pciercx_mem bdk_pciercx_mem_t;
+
+static inline uint64_t BDK_PCIERCX_MEM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MEM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x20ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MEM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MEM(a) bdk_pciercx_mem_t
+#define bustype_BDK_PCIERCX_MEM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MEM(a) "PCIERCX_MEM"
+#define busnum_BDK_PCIERCX_MEM(a) (a)
+#define arguments_BDK_PCIERCX_MEM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_misc_ctl1
+ *
+ * PCIe RC Miscellaneous Control 1 Register
+ */
+union bdk_pciercx_misc_ctl1
+{
+ uint32_t u;
+ struct bdk_pciercx_misc_ctl1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_6_31 : 26;
+ uint32_t ari_devn : 1; /**< [ 5: 5](R/W) When ARI is enabled, enables use of the device ID. */
+ uint32_t dis_auto_ltr_clr : 1; /**< [ 4: 4](R/W) Disable the autonomous generation of LTR clear message in upstream port.
+ 0 = Allow the autonomous generation of LTR clear message.
+ 1 = Disable the autonomous generation of LTR clear message. */
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Enables Simplified Replay Timer (Gen4). Simplified replay timer values are:
+
+ A value from 24,000 to 31,000 symbol times when extended synch is 0.
+ A value from 80,000 to 100,000 symbol times when extended synch is 1. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEF_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. When you set this bit, then some
+ RO bits are writable from the DBI. */
+#else /* Word 0 - Little Endian */
+ uint32_t dbi_ro_wr_en : 1; /**< [ 0: 0](R/W) Write to RO registers using DBI. When you set this bit, then some
+ RO bits are writable from the DBI. */
+ uint32_t def_target : 1; /**< [ 1: 1](R/W) Default target a received IO or MEM request with UR/CA/CRS
+ is sent to be the controller.
+ 0x0 = The controller drops all incoming I/O or Mem (after
+ corresponding error reporting). A completion with
+ UR status will be generated for non-posted requests.
+ 0x1 = The controller forwards all incoming I/O or MEM
+ requests with UR/CA/CRS status to your application. */
+ uint32_t ur_c4_mask_4_trgt1 : 1; /**< [ 2: 2](R/W) This field only applies to request TLPs (with UR filtering status) that are
+ chosen to forward to the application (when [DEF_TARGET] is set).
+
+ When set, the core suppresses error logging, error message generation, and CPL
+ generation (for non-posted requests). */
+ uint32_t simp_replay_timer : 1; /**< [ 3: 3](R/W) Enables Simplified Replay Timer (Gen4). Simplified replay timer values are:
+
+ A value from 24,000 to 31,000 symbol times when extended synch is 0.
+ A value from 80,000 to 100,000 symbol times when extended synch is 1. */
+ uint32_t dis_auto_ltr_clr : 1; /**< [ 4: 4](R/W) Disable the autonomous generation of LTR clear message in upstream port.
+ 0 = Allow the autonomous generation of LTR clear message.
+ 1 = Disable the autonomous generation of LTR clear message. */
+ uint32_t ari_devn : 1; /**< [ 5: 5](R/W) When ARI is enabled, enables use of the device ID. */
+ uint32_t reserved_6_31 : 26;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_misc_ctl1_s cn; */
+};
+typedef union bdk_pciercx_misc_ctl1 bdk_pciercx_misc_ctl1_t;
+
+static inline uint64_t BDK_PCIERCX_MISC_CTL1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MISC_CTL1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MISC_CTL1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MISC_CTL1(a) bdk_pciercx_misc_ctl1_t
+#define bustype_BDK_PCIERCX_MISC_CTL1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MISC_CTL1(a) "PCIERCX_MISC_CTL1"
+#define busnum_BDK_PCIERCX_MISC_CTL1(a) (a)
+#define arguments_BDK_PCIERCX_MISC_CTL1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat0
+ *
+ * PCIe RC Margining Lane Control and Status Register 0
+ */
+union bdk_pciercx_mrg_lane_ctl_stat0
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat0_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat0 bdk_pciercx_mrg_lane_ctl_stat0_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1e0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT0(a) bdk_pciercx_mrg_lane_ctl_stat0_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT0(a) "PCIERCX_MRG_LANE_CTL_STAT0"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT0(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat1
+ *
+ * PCIe RC Margining Lane Control and Status Register 1
+ */
+union bdk_pciercx_mrg_lane_ctl_stat1
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat1_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat1 bdk_pciercx_mrg_lane_ctl_stat1_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1e4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT1(a) bdk_pciercx_mrg_lane_ctl_stat1_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT1(a) "PCIERCX_MRG_LANE_CTL_STAT1"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT1(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat10
+ *
+ * PCIe RC Margining Lane Control and Status Register 10
+ */
+union bdk_pciercx_mrg_lane_ctl_stat10
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat10_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat10_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat10 bdk_pciercx_mrg_lane_ctl_stat10_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT10(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT10(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x208ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT10", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT10(a) bdk_pciercx_mrg_lane_ctl_stat10_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT10(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT10(a) "PCIERCX_MRG_LANE_CTL_STAT10"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT10(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT10(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat11
+ *
+ * PCIe RC Margining Lane Control and Status Register 11
+ */
+union bdk_pciercx_mrg_lane_ctl_stat11
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat11_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat11_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat11 bdk_pciercx_mrg_lane_ctl_stat11_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT11(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT11(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x20cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT11", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT11(a) bdk_pciercx_mrg_lane_ctl_stat11_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT11(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT11(a) "PCIERCX_MRG_LANE_CTL_STAT11"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT11(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT11(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat12
+ *
+ * PCIe RC Margining Lane Control and Status Register 12
+ */
+union bdk_pciercx_mrg_lane_ctl_stat12
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat12_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat12_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat12 bdk_pciercx_mrg_lane_ctl_stat12_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT12(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT12(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x210ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT12", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT12(a) bdk_pciercx_mrg_lane_ctl_stat12_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT12(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT12(a) "PCIERCX_MRG_LANE_CTL_STAT12"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT12(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT12(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat13
+ *
+ * PCIe RC Margining Lane Control and Status Register 13
+ */
+union bdk_pciercx_mrg_lane_ctl_stat13
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat13_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat13_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat13 bdk_pciercx_mrg_lane_ctl_stat13_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT13(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT13(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x214ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT13", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT13(a) bdk_pciercx_mrg_lane_ctl_stat13_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT13(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT13(a) "PCIERCX_MRG_LANE_CTL_STAT13"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT13(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT13(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat14
+ *
+ * PCIe RC Margining Lane Control and Status Register 14
+ */
+union bdk_pciercx_mrg_lane_ctl_stat14
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat14_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat14_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat14 bdk_pciercx_mrg_lane_ctl_stat14_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT14(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT14(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x218ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT14", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT14(a) bdk_pciercx_mrg_lane_ctl_stat14_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT14(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT14(a) "PCIERCX_MRG_LANE_CTL_STAT14"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT14(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT14(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat15
+ *
+ * PCIe RC Margining Lane Control and Status Register 15
+ */
+union bdk_pciercx_mrg_lane_ctl_stat15
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat15_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat15_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat15 bdk_pciercx_mrg_lane_ctl_stat15_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT15(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT15(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x21cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT15", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT15(a) bdk_pciercx_mrg_lane_ctl_stat15_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT15(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT15(a) "PCIERCX_MRG_LANE_CTL_STAT15"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT15(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT15(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat2
+ *
+ * PCIe RC Margining Lane Control and Status Register 2
+ */
+union bdk_pciercx_mrg_lane_ctl_stat2
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat2_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat2 bdk_pciercx_mrg_lane_ctl_stat2_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1e8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT2(a) bdk_pciercx_mrg_lane_ctl_stat2_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT2(a) "PCIERCX_MRG_LANE_CTL_STAT2"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT2(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat3
+ *
+ * PCIe RC Margining Lane Control and Status Register 3
+ */
+union bdk_pciercx_mrg_lane_ctl_stat3
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat3_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat3 bdk_pciercx_mrg_lane_ctl_stat3_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT3(a) bdk_pciercx_mrg_lane_ctl_stat3_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT3(a) "PCIERCX_MRG_LANE_CTL_STAT3"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT3(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat4
+ *
+ * PCIe RC Margining Lane Control and Status Register 4
+ */
+union bdk_pciercx_mrg_lane_ctl_stat4
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat4_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat4 bdk_pciercx_mrg_lane_ctl_stat4_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1f0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT4(a) bdk_pciercx_mrg_lane_ctl_stat4_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT4(a) "PCIERCX_MRG_LANE_CTL_STAT4"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT4(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat5
+ *
+ * PCIe RC Margining Lane Control and Status Register 5
+ */
+union bdk_pciercx_mrg_lane_ctl_stat5
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat5_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat5_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat5 bdk_pciercx_mrg_lane_ctl_stat5_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT5(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT5(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1f4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT5", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT5(a) bdk_pciercx_mrg_lane_ctl_stat5_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT5(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT5(a) "PCIERCX_MRG_LANE_CTL_STAT5"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT5(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT5(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat6
+ *
+ * PCIe RC Margining Lane Control and Status Register 6
+ */
+union bdk_pciercx_mrg_lane_ctl_stat6
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat6_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat6_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat6 bdk_pciercx_mrg_lane_ctl_stat6_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT6(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT6(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1f8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT6", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT6(a) bdk_pciercx_mrg_lane_ctl_stat6_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT6(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT6(a) "PCIERCX_MRG_LANE_CTL_STAT6"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT6(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT6(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat7
+ *
+ * PCIe RC Margining Lane Control and Status Register 7
+ */
+union bdk_pciercx_mrg_lane_ctl_stat7
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat7_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat7_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat7 bdk_pciercx_mrg_lane_ctl_stat7_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT7(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT7(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1fcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT7", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT7(a) bdk_pciercx_mrg_lane_ctl_stat7_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT7(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT7(a) "PCIERCX_MRG_LANE_CTL_STAT7"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT7(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT7(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat8
+ *
+ * PCIe RC Margining Lane Control and Status Register 8
+ */
+union bdk_pciercx_mrg_lane_ctl_stat8
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat8_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat8_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat8 bdk_pciercx_mrg_lane_ctl_stat8_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT8(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT8(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x200ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT8", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT8(a) bdk_pciercx_mrg_lane_ctl_stat8_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT8(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT8(a) "PCIERCX_MRG_LANE_CTL_STAT8"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT8(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT8(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_lane_ctl_stat9
+ *
+ * PCIe RC Margining Lane Control and Status Register 9
+ */
+union bdk_pciercx_mrg_lane_ctl_stat9
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_lane_ctl_stat9_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+#else /* Word 0 - Little Endian */
+ uint32_t rnum : 3; /**< [ 2: 0](R/W) Receiver number for this lane. */
+ uint32_t mt : 3; /**< [ 5: 3](R/W) Margin type for this lane. */
+ uint32_t um : 1; /**< [ 6: 6](R/W) Usage model for this lane. */
+ uint32_t reserved_7 : 1;
+ uint32_t mpl : 8; /**< [ 15: 8](R/W) Margin payload for this lane. */
+ uint32_t rnum_stat : 3; /**< [ 18: 16](RO/H) Receiver number (status) for this lane. */
+ uint32_t mt_stat : 3; /**< [ 21: 19](RO/H) Margin type (status) for this lane. */
+ uint32_t um_stat : 1; /**< [ 22: 22](RO/H) Usage model (status) for this lane. */
+ uint32_t reserved_23 : 1;
+ uint32_t pl_stat : 8; /**< [ 31: 24](RO/H) Margin payload (status) for this lane. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_lane_ctl_stat9_s cn; */
+};
+typedef union bdk_pciercx_mrg_lane_ctl_stat9 bdk_pciercx_mrg_lane_ctl_stat9_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT9(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_LANE_CTL_STAT9(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x204ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_LANE_CTL_STAT9", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_LANE_CTL_STAT9(a) bdk_pciercx_mrg_lane_ctl_stat9_t
+#define bustype_BDK_PCIERCX_MRG_LANE_CTL_STAT9(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_LANE_CTL_STAT9(a) "PCIERCX_MRG_LANE_CTL_STAT9"
+#define busnum_BDK_PCIERCX_MRG_LANE_CTL_STAT9(a) (a)
+#define arguments_BDK_PCIERCX_MRG_LANE_CTL_STAT9(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_mrg_port_cap_stat
+ *
+ * PCIe RC Margining Port Capabilities and Status Register
+ */
+union bdk_pciercx_mrg_port_cap_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_mrg_port_cap_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_18_31 : 14;
+ uint32_t m_swrdy : 1; /**< [ 17: 17](RO/H) Margining software ready. */
+ uint32_t m_rdy : 1; /**< [ 16: 16](RO/H) Margining ready. */
+ uint32_t reserved_1_15 : 15;
+ uint32_t m_drv : 1; /**< [ 0: 0](RO/WRSL) Margining uses driver software. */
+#else /* Word 0 - Little Endian */
+ uint32_t m_drv : 1; /**< [ 0: 0](RO/WRSL) Margining uses driver software. */
+ uint32_t reserved_1_15 : 15;
+ uint32_t m_rdy : 1; /**< [ 16: 16](RO/H) Margining ready. */
+ uint32_t m_swrdy : 1; /**< [ 17: 17](RO/H) Margining software ready. */
+ uint32_t reserved_18_31 : 14;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_mrg_port_cap_stat_s cn; */
+};
+typedef union bdk_pciercx_mrg_port_cap_stat bdk_pciercx_mrg_port_cap_stat_t;
+
+static inline uint64_t BDK_PCIERCX_MRG_PORT_CAP_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MRG_PORT_CAP_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1dcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MRG_PORT_CAP_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MRG_PORT_CAP_STAT(a) bdk_pciercx_mrg_port_cap_stat_t
+#define bustype_BDK_PCIERCX_MRG_PORT_CAP_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MRG_PORT_CAP_STAT(a) "PCIERCX_MRG_PORT_CAP_STAT"
+#define busnum_BDK_PCIERCX_MRG_PORT_CAP_STAT(a) (a)
+#define arguments_BDK_PCIERCX_MRG_PORT_CAP_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_msix_cap_cntrl
+ *
+ * PCIe RC PCI Express MSI-X Capability ID/MSI-X Next Item Pointer/MSI-X Control Register
+ */
+union bdk_pciercx_msix_cap_cntrl
+{
+ uint32_t u;
+ struct bdk_pciercx_msix_cap_cntrl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixen : 1; /**< [ 31: 31](R/W) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+ uint32_t funm : 1; /**< [ 30: 30](R/W) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t reserved_27_29 : 3;
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixcid : 8; /**< [ 7: 0](RO/H) MSI-X capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t msixts : 11; /**< [ 26: 16](RO/WRSL) MSI-X table size encoded as (table size - 1). */
+ uint32_t reserved_27_29 : 3;
+ uint32_t funm : 1; /**< [ 30: 30](R/W) Function mask.
+ 0 = Each vectors mask bit determines whether the vector is masked or not.
+ 1 = All vectors associated with the function are masked, regardless of their respective
+ per-vector mask bits. */
+ uint32_t msixen : 1; /**< [ 31: 31](R/W) MSI-X enable. If MSI-X is enabled, MSI and INTx must be disabled. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_msix_cap_cntrl_s cn; */
+};
+typedef union bdk_pciercx_msix_cap_cntrl bdk_pciercx_msix_cap_cntrl_t;
+
+static inline uint64_t BDK_PCIERCX_MSIX_CAP_CNTRL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MSIX_CAP_CNTRL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MSIX_CAP_CNTRL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MSIX_CAP_CNTRL(a) bdk_pciercx_msix_cap_cntrl_t
+#define bustype_BDK_PCIERCX_MSIX_CAP_CNTRL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MSIX_CAP_CNTRL(a) "PCIERCX_MSIX_CAP_CNTRL"
+#define busnum_BDK_PCIERCX_MSIX_CAP_CNTRL(a) (a)
+#define arguments_BDK_PCIERCX_MSIX_CAP_CNTRL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_msix_pba
+ *
+ * PCIe RC PCI Express MSI-X PBA Offset and BIR Register
+ */
+union bdk_pciercx_msix_pba
+{
+ uint32_t u;
+ struct bdk_pciercx_msix_pba_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixpbir : 3; /**< [ 2: 0](RO/WRSL) MSI-X PBA BAR indicator register (BIR). Indicates which BAR is used to map the MSI-X
+ pending bit array into memory space.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t msixpoffs : 29; /**< [ 31: 3](RO/WRSL/H) MSI-X table offset register. Base address of the MSI-X PBA, as an offset from the base
+ address of the BAR indicated by the table PBA bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_msix_pba_s cn; */
+};
+typedef union bdk_pciercx_msix_pba bdk_pciercx_msix_pba_t;
+
+static inline uint64_t BDK_PCIERCX_MSIX_PBA(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MSIX_PBA(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MSIX_PBA", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MSIX_PBA(a) bdk_pciercx_msix_pba_t
+#define bustype_BDK_PCIERCX_MSIX_PBA(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MSIX_PBA(a) "PCIERCX_MSIX_PBA"
+#define busnum_BDK_PCIERCX_MSIX_PBA(a) (a)
+#define arguments_BDK_PCIERCX_MSIX_PBA(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_msix_table
+ *
+ * PCIe RC PCI Express MSI-X Table Offset and BIR Register
+ */
+union bdk_pciercx_msix_table
+{
+ uint32_t u;
+ struct bdk_pciercx_msix_table_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the
+ MSI-X table into memory space. Writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t msixtbir : 3; /**< [ 2: 0](RO/WRSL) MSI-X table BAR indicator register (BIR). Indicates which BAR is used to map the
+ MSI-X table into memory space. Writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t msixtoffs : 29; /**< [ 31: 3](RO/WRSL) MSI-X table offset register. Base address of the MSI-X table, as an offset from the base
+ address of the BAR indicated by the table BIR bits. Writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_msix_table_s cn; */
+};
+typedef union bdk_pciercx_msix_table bdk_pciercx_msix_table_t;
+
+static inline uint64_t BDK_PCIERCX_MSIX_TABLE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_MSIX_TABLE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_MSIX_TABLE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_MSIX_TABLE(a) bdk_pciercx_msix_table_t
+#define bustype_BDK_PCIERCX_MSIX_TABLE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_MSIX_TABLE(a) "PCIERCX_MSIX_TABLE"
+#define busnum_BDK_PCIERCX_MSIX_TABLE(a) (a)
+#define arguments_BDK_PCIERCX_MSIX_TABLE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_np_rcv_credit
+ *
+ * PCIe RC VC0 Nonposted Receive Queue Control Register
+ */
+union bdk_pciercx_np_rcv_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_np_rcv_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t data_sc : 2; /**< [ 27: 26](R/W) VC0 scale non-posted data credits. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](R/W) VC0 scale non-posted header credits. */
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 nonposted TLP queue mode. The operating mode of the nonposted receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 nonposted header credits. The number of initial nonposted header credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 nonposted data credits. The number of initial nonposted data credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL) VC0 nonposted data credits. The number of initial nonposted data credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL) VC0 nonposted header credits. The number of initial nonposted header credits for VC0, used
+ for all receive queue buffer configurations. This field is writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 nonposted TLP queue mode. The operating mode of the nonposted receive queue for VC0,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward.
+
+ The application must not change this field. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](R/W) VC0 scale non-posted header credits. */
+ uint32_t data_sc : 2; /**< [ 27: 26](R/W) VC0 scale non-posted data credits. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_np_rcv_credit_s cn; */
+};
+typedef union bdk_pciercx_np_rcv_credit bdk_pciercx_np_rcv_credit_t;
+
+static inline uint64_t BDK_PCIERCX_NP_RCV_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_NP_RCV_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x74cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_NP_RCV_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_NP_RCV_CREDIT(a) bdk_pciercx_np_rcv_credit_t
+#define bustype_BDK_PCIERCX_NP_RCV_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_NP_RCV_CREDIT(a) "PCIERCX_NP_RCV_CREDIT"
+#define busnum_BDK_PCIERCX_NP_RCV_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_NP_RCV_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_np_xmit_credit
+ *
+ * PCIe RC Transmit Nonposted FC Credit Status Register
+ */
+union bdk_pciercx_np_xmit_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_np_xmit_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit nonposted header FC credits. The nonposted header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit nonposted data FC credits. The nonposted data credits advertised by the receiver
+ at the other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tcdfcc : 12; /**< [ 11: 0](RO/H) Transmit nonposted data FC credits. The nonposted data credits advertised by the receiver
+ at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tchfcc : 8; /**< [ 19: 12](RO/H) Transmit nonposted header FC credits. The nonposted header credits advertised by the
+ receiver at the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_np_xmit_credit_s cn; */
+};
+typedef union bdk_pciercx_np_xmit_credit bdk_pciercx_np_xmit_credit_t;
+
+static inline uint64_t BDK_PCIERCX_NP_XMIT_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_NP_XMIT_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x734ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_NP_XMIT_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_NP_XMIT_CREDIT(a) bdk_pciercx_np_xmit_credit_t
+#define bustype_BDK_PCIERCX_NP_XMIT_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_NP_XMIT_CREDIT(a) "PCIERCX_NP_XMIT_CREDIT"
+#define busnum_BDK_PCIERCX_NP_XMIT_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_NP_XMIT_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_omsg_ptr
+ *
+ * PCIe RC Other Message Register
+ */
+union bdk_pciercx_omsg_ptr
+{
+ uint32_t u;
+ struct bdk_pciercx_omsg_ptr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t omr : 32; /**< [ 31: 0](R/W) Other message register. This register can be used for either of the following purposes:
+
+ * To send a specific PCI Express message, the application writes the payload of the
+ message into this register, then sets bit 0 of the port link control register to send the
+ message.
+
+ * To store a corruption pattern for corrupting the LCRC on all TLPs, the application
+ places a 32-bit corruption pattern into this register and enables this function by setting
+ bit 25 of the port link control register. When enabled, the transmit LCRC result is XORed
+ with this pattern before inserting it into the packet. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 32; /**< [ 31: 0](R/W) Other message register. This register can be used for either of the following purposes:
+
+ * To send a specific PCI Express message, the application writes the payload of the
+ message into this register, then sets bit 0 of the port link control register to send the
+ message.
+
+ * To store a corruption pattern for corrupting the LCRC on all TLPs, the application
+ places a 32-bit corruption pattern into this register and enables this function by setting
+ bit 25 of the port link control register. When enabled, the transmit LCRC result is XORed
+ with this pattern before inserting it into the packet. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_omsg_ptr_s cn; */
+};
+typedef union bdk_pciercx_omsg_ptr bdk_pciercx_omsg_ptr_t;
+
+static inline uint64_t BDK_PCIERCX_OMSG_PTR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_OMSG_PTR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x704ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_OMSG_PTR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_OMSG_PTR(a) bdk_pciercx_omsg_ptr_t
+#define bustype_BDK_PCIERCX_OMSG_PTR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_OMSG_PTR(a) "PCIERCX_OMSG_PTR"
+#define busnum_BDK_PCIERCX_OMSG_PTR(a) (a)
+#define arguments_BDK_PCIERCX_OMSG_PTR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ord_rule_ctrl
+ *
+ * PCIe RC Order Rule Control Register
+ */
+union bdk_pciercx_ord_rule_ctrl
+{
+ uint32_t u;
+ struct bdk_pciercx_ord_rule_ctrl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t cpl_pass_p : 8; /**< [ 15: 8](R/W) Completion passing posted ordering rule control.
+ Determines if a CPL can pass halted P queue.
+ 0x0 = CPL can not pass P (recommended).
+ 0x1 = CPL can pass P.
+ 0x2-0xFF = Reserved. */
+ uint32_t np_pass_p : 8; /**< [ 7: 0](R/W) Non-Posted passing posted ordering rule control.
+ Determines if a NP can pass halted P queue.
+ 0x0 = NP can not pass P (recommended).
+ 0x1 = NP can pass P.
+ 0x2-0xFF = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t np_pass_p : 8; /**< [ 7: 0](R/W) Non-Posted passing posted ordering rule control.
+ Determines if a NP can pass halted P queue.
+ 0x0 = NP can not pass P (recommended).
+ 0x1 = NP can pass P.
+ 0x2-0xFF = Reserved. */
+ uint32_t cpl_pass_p : 8; /**< [ 15: 8](R/W) Completion passing posted ordering rule control.
+ Determines if a CPL can pass halted P queue.
+ 0x0 = CPL can not pass P (recommended).
+ 0x1 = CPL can pass P.
+ 0x2-0xFF = Reserved. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ord_rule_ctrl_s cn; */
+};
+typedef union bdk_pciercx_ord_rule_ctrl bdk_pciercx_ord_rule_ctrl_t;
+
+static inline uint64_t BDK_PCIERCX_ORD_RULE_CTRL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ORD_RULE_CTRL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8b4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ORD_RULE_CTRL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ORD_RULE_CTRL(a) bdk_pciercx_ord_rule_ctrl_t
+#define bustype_BDK_PCIERCX_ORD_RULE_CTRL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ORD_RULE_CTRL(a) "PCIERCX_ORD_RULE_CTRL"
+#define busnum_BDK_PCIERCX_ORD_RULE_CTRL(a) (a)
+#define arguments_BDK_PCIERCX_ORD_RULE_CTRL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_p_rcv_credit
+ *
+ * PCIe RC VC0 Posted Receive Queue Control Register
+ */
+union bdk_pciercx_p_rcv_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_p_rcv_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t rx_queue_order : 1; /**< [ 31: 31](R/W) VC ordering for receive queues. Determines the VC ordering rule for the receive queues,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR:
+ 0 = Round robin.
+ 1 = Strict ordering, higher numbered VCs have higher priority.
+
+ However, the application must not change this field. */
+ uint32_t type_ordering : 1; /**< [ 30: 30](RO/WRSL) TLP type ordering for VC0. Determines the TLP type ordering rule for VC0 receive queues,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR:
+ 0 = Strict ordering for received TLPs: Posted, then completion, then NonPosted.
+ 1 = Ordering of received TLPs follows the rules in PCI Express Base Specification.
+
+ The application must not change this field. */
+ uint32_t reserved_28_29 : 2;
+ uint32_t data_sc : 2; /**< [ 27: 26](R/W) VC0 scale posted data credits. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](R/W) VC0 scale posted header credits. */
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 posted TLP queue mode. The operating mode of the posted receive queue for VC0, used
+ only in the segmented-buffer configuration, writable through PEM()_CFG_WR. However,
+ the application must not change this field.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward. */
+ uint32_t reserved_20 : 1;
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL/H) VC0 posted header credits. The number of initial posted header credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x40.
+ _ BPEM: 0x20. */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL/H) VC0 posted data credits. The number of initial posted data credits for VC0, used for all
+ receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x400.
+ _ BPEM: 0x200. */
+#else /* Word 0 - Little Endian */
+ uint32_t data_credits : 12; /**< [ 11: 0](RO/WRSL/H) VC0 posted data credits. The number of initial posted data credits for VC0, used for all
+ receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x400.
+ _ BPEM: 0x200. */
+ uint32_t header_credits : 8; /**< [ 19: 12](RO/WRSL/H) VC0 posted header credits. The number of initial posted header credits for VC0, used for
+ all receive queue buffer configurations. This field is writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+
+ Reset values:
+ _ UPEM: 0x40.
+ _ BPEM: 0x20. */
+ uint32_t reserved_20 : 1;
+ uint32_t queue_mode : 3; /**< [ 23: 21](RO/WRSL) VC0 posted TLP queue mode. The operating mode of the posted receive queue for VC0, used
+ only in the segmented-buffer configuration, writable through PEM()_CFG_WR. However,
+ the application must not change this field.
+ Only one bit can be set at a time:
+
+ _ Bit 23 = Bypass.
+
+ _ Bit 22 = Cut-through.
+
+ _ Bit 21 = Store-and-forward. */
+ uint32_t hdr_sc : 2; /**< [ 25: 24](R/W) VC0 scale posted header credits. */
+ uint32_t data_sc : 2; /**< [ 27: 26](R/W) VC0 scale posted data credits. */
+ uint32_t reserved_28_29 : 2;
+ uint32_t type_ordering : 1; /**< [ 30: 30](RO/WRSL) TLP type ordering for VC0. Determines the TLP type ordering rule for VC0 receive queues,
+ used only in the segmented-buffer configuration, writable through
+ PEM()_CFG_WR:
+ 0 = Strict ordering for received TLPs: Posted, then completion, then NonPosted.
+ 1 = Ordering of received TLPs follows the rules in PCI Express Base Specification.
+
+ The application must not change this field. */
+ uint32_t rx_queue_order : 1; /**< [ 31: 31](R/W) VC ordering for receive queues. Determines the VC ordering rule for the receive queues,
+ used only in the segmented-buffer configuration, writable through PEM()_CFG_WR:
+ 0 = Round robin.
+ 1 = Strict ordering, higher numbered VCs have higher priority.
+
+ However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_p_rcv_credit_s cn; */
+};
+typedef union bdk_pciercx_p_rcv_credit bdk_pciercx_p_rcv_credit_t;
+
+static inline uint64_t BDK_PCIERCX_P_RCV_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_P_RCV_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x748ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_P_RCV_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_P_RCV_CREDIT(a) bdk_pciercx_p_rcv_credit_t
+#define bustype_BDK_PCIERCX_P_RCV_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_P_RCV_CREDIT(a) "PCIERCX_P_RCV_CREDIT"
+#define busnum_BDK_PCIERCX_P_RCV_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_P_RCV_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_p_xmit_credit
+ *
+ * PCIe RC Transmit Posted FC Credit Status Register
+ */
+union bdk_pciercx_p_xmit_credit
+{
+ uint32_t u;
+ struct bdk_pciercx_p_xmit_credit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_20_31 : 12;
+ uint32_t tphfcc : 8; /**< [ 19: 12](RO/H) Transmit posted header FC credits. The posted header credits advertised by the receiver at
+ the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tpdfcc : 12; /**< [ 11: 0](RO/H) Transmit posted data FC credits. The posted data credits advertised by the receiver at the
+ other end of the link, updated with each UpdateFC DLLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tpdfcc : 12; /**< [ 11: 0](RO/H) Transmit posted data FC credits. The posted data credits advertised by the receiver at the
+ other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t tphfcc : 8; /**< [ 19: 12](RO/H) Transmit posted header FC credits. The posted header credits advertised by the receiver at
+ the other end of the link, updated with each UpdateFC DLLP. */
+ uint32_t reserved_20_31 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_p_xmit_credit_s cn; */
+};
+typedef union bdk_pciercx_p_xmit_credit bdk_pciercx_p_xmit_credit_t;
+
+static inline uint64_t BDK_PCIERCX_P_XMIT_CREDIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_P_XMIT_CREDIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x730ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_P_XMIT_CREDIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_P_XMIT_CREDIT(a) bdk_pciercx_p_xmit_credit_t
+#define bustype_BDK_PCIERCX_P_XMIT_CREDIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_P_XMIT_CREDIT(a) "PCIERCX_P_XMIT_CREDIT"
+#define busnum_BDK_PCIERCX_P_XMIT_CREDIT(a) (a)
+#define arguments_BDK_PCIERCX_P_XMIT_CREDIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pb_base
+ *
+ * PCIe RC Power Budgeting Extended Capability Header Register
+ */
+union bdk_pciercx_pb_base
+{
+ uint32_t u;
+ struct bdk_pciercx_pb_base_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pb_base_s cn; */
+};
+typedef union bdk_pciercx_pb_base bdk_pciercx_pb_base_t;
+
+static inline uint64_t BDK_PCIERCX_PB_BASE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PB_BASE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x158ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PB_BASE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PB_BASE(a) bdk_pciercx_pb_base_t
+#define bustype_BDK_PCIERCX_PB_BASE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PB_BASE(a) "PCIERCX_PB_BASE"
+#define busnum_BDK_PCIERCX_PB_BASE(a) (a)
+#define arguments_BDK_PCIERCX_PB_BASE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pb_cap_hdr
+ *
+ * PCIe RC Power Budget Capability Header Register
+ */
+union bdk_pciercx_pb_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_pb_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t sapb : 1; /**< [ 0: 0](RO/WRSL) System allocated PB. */
+#else /* Word 0 - Little Endian */
+ uint32_t sapb : 1; /**< [ 0: 0](RO/WRSL) System allocated PB. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pb_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_pb_cap_hdr bdk_pciercx_pb_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_PB_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PB_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x164ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PB_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PB_CAP_HDR(a) bdk_pciercx_pb_cap_hdr_t
+#define bustype_BDK_PCIERCX_PB_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PB_CAP_HDR(a) "PCIERCX_PB_CAP_HDR"
+#define busnum_BDK_PCIERCX_PB_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_PB_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pb_data
+ *
+ * PCIe RC Power Budgeting Data Register
+ */
+union bdk_pciercx_pb_data
+{
+ uint32_t u;
+ struct bdk_pciercx_pb_data_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_21_31 : 11;
+ uint32_t prs : 3; /**< [ 20: 18](RO) Power rail state. */
+ uint32_t typ : 3; /**< [ 17: 15](RO) Type of operating condition. */
+ uint32_t pms : 2; /**< [ 14: 13](RO) PM state. */
+ uint32_t pmss : 3; /**< [ 12: 10](RO) PM substate. */
+ uint32_t pds : 2; /**< [ 9: 8](RO) Data scale. */
+ uint32_t pbp : 8; /**< [ 7: 0](RO) Base power. */
+#else /* Word 0 - Little Endian */
+ uint32_t pbp : 8; /**< [ 7: 0](RO) Base power. */
+ uint32_t pds : 2; /**< [ 9: 8](RO) Data scale. */
+ uint32_t pmss : 3; /**< [ 12: 10](RO) PM substate. */
+ uint32_t pms : 2; /**< [ 14: 13](RO) PM state. */
+ uint32_t typ : 3; /**< [ 17: 15](RO) Type of operating condition. */
+ uint32_t prs : 3; /**< [ 20: 18](RO) Power rail state. */
+ uint32_t reserved_21_31 : 11;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pb_data_s cn; */
+};
+typedef union bdk_pciercx_pb_data bdk_pciercx_pb_data_t;
+
+static inline uint64_t BDK_PCIERCX_PB_DATA(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PB_DATA(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x160ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PB_DATA", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PB_DATA(a) bdk_pciercx_pb_data_t
+#define bustype_BDK_PCIERCX_PB_DATA(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PB_DATA(a) "PCIERCX_PB_DATA"
+#define busnum_BDK_PCIERCX_PB_DATA(a) (a)
+#define arguments_BDK_PCIERCX_PB_DATA(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pb_data_select
+ *
+ * PCIe RC Power Budgeting Data Select Register
+ */
+union bdk_pciercx_pb_data_select
+{
+ uint32_t u;
+ struct bdk_pciercx_pb_data_select_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t dsel : 8; /**< [ 7: 0](R/W) Data select register. */
+#else /* Word 0 - Little Endian */
+ uint32_t dsel : 8; /**< [ 7: 0](R/W) Data select register. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pb_data_select_s cn; */
+};
+typedef union bdk_pciercx_pb_data_select bdk_pciercx_pb_data_select_t;
+
+static inline uint64_t BDK_PCIERCX_PB_DATA_SELECT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PB_DATA_SELECT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x15cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PB_DATA_SELECT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PB_DATA_SELECT(a) bdk_pciercx_pb_data_select_t
+#define bustype_BDK_PCIERCX_PB_DATA_SELECT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PB_DATA_SELECT(a) "PCIERCX_PB_DATA_SELECT"
+#define busnum_BDK_PCIERCX_PB_DATA_SELECT(a) (a)
+#define arguments_BDK_PCIERCX_PB_DATA_SELECT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_phy_ctl
+ *
+ * PCIe RC PHY Control Register
+ */
+union bdk_pciercx_phy_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_phy_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t phy_ctrl : 32; /**< [ 31: 0](R/W) PHY control. Sideband control signaling (not supported). */
+#else /* Word 0 - Little Endian */
+ uint32_t phy_ctrl : 32; /**< [ 31: 0](R/W) PHY control. Sideband control signaling (not supported). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_phy_ctl_s cn; */
+};
+typedef union bdk_pciercx_phy_ctl bdk_pciercx_phy_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PHY_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PHY_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x814ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PHY_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PHY_CTL(a) bdk_pciercx_phy_ctl_t
+#define bustype_BDK_PCIERCX_PHY_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PHY_CTL(a) "PCIERCX_PHY_CTL"
+#define busnum_BDK_PCIERCX_PHY_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PHY_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_phy_gen3_ctl
+ *
+ * PCIe RC Gen3 Control Register
+ */
+union bdk_pciercx_phy_gen3_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_phy_gen3_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t rss : 2; /**< [ 25: 24](R/W) Data rate for shadow register. */
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval different time assertion disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t us8etd : 1; /**< [ 22: 22](R/W/H) Upstream port send 8GT/s EQ TS2 disable. The base spec defines that USP can
+ optionally send 8GT EQ TS2 and it means USP can set DSP TxPreset value in Gen4
+ Data Rate. If this register set to 0, USP sends 8GT EQ TS2. If this register
+ set to 1, USP does not send 8GT EQ TS2. This applies to upstream ports only.
+ No Function for downstream ports.
+ Note: When CX_GEN4_SPEED, this register is shadow register for Gen3 and Gen4 data
+ rate. If RATE_SHADOW_SEL==00b, this register is RSVD and cannot be written.
+ If RATE_SHADOW_SEL==01b, this register is for Gen4 data rate and can be written. */
+ uint32_t aed : 1; /**< [ 21: 21](R/W) Autonomous equalization disable. When the controller is in L0 state at Gen3
+ data rate and equalization was completed successfully in Autonomous EQ Mechanism,
+ setting this bit in DSP will not direct the controller to Recovery state to
+ perform Gen4 equalization. Link stays in Gen3 rate and DSP sends DLLPs to USP.
+ If the bit is 0, DSP will block DLLPs and direct the link to perform Gen4 EQ
+ in Autonomous Mechanism.
+ Note: When CX_GEN4_SPEED, this register is shadow register for Gen3 and Gen4 data
+ rate. If RATE_SHADOW_SEL==00b, this register is RSVD and cannot be written.
+ If RATE_SHADOW_SEL==01b, this register is for Gen4 data rate and can be written. */
+ uint32_t reserved_19_20 : 2;
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t rxeq_rgrdless_rsts : 1; /**< [ 13: 13](R/W) The controller as Gen3 EQ master asserts RxEqEval to instruct the
+ PHY to do Rx adaptation and evaluation.
+ 0x0 = Asserts after 1 us and 2 TS1 received from remote partner.
+ 0x1 = Asserts after 500 ns regardless of TS's received or not. */
+ uint32_t rxeq_ph01_en : 1; /**< [ 12: 12](R/W) Rx equalization phase 0/phase 1 hold enable. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t reserved_1_7 : 7;
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+#else /* Word 0 - Little Endian */
+ uint32_t grizdnc : 1; /**< [ 0: 0](R/W) Gen3 receiver impedance ZRX-DC not compliant. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t dsg3 : 1; /**< [ 8: 8](R/W) Disable scrambler for Gen3 data rate. The Gen3 scrambler/descrambler within the core needs
+ to be disabled when the scrambling function is implemented outside of the core (within the
+ PHY). */
+ uint32_t ep2p3d : 1; /**< [ 9: 9](R/W) Equalization phase 2 and phase 3 disable. This applies to downstream ports only. */
+ uint32_t ecrd : 1; /**< [ 10: 10](R/W) Equalization EIEOS count reset disable. Disable requesting reset of EIEOS count during
+ equalization. */
+ uint32_t erd : 1; /**< [ 11: 11](R/W) Equalization redo disable. Disable requesting reset of EIEOS count during equalization. */
+ uint32_t rxeq_ph01_en : 1; /**< [ 12: 12](R/W) Rx equalization phase 0/phase 1 hold enable. */
+ uint32_t rxeq_rgrdless_rsts : 1; /**< [ 13: 13](R/W) The controller as Gen3 EQ master asserts RxEqEval to instruct the
+ PHY to do Rx adaptation and evaluation.
+ 0x0 = Asserts after 1 us and 2 TS1 received from remote partner.
+ 0x1 = Asserts after 500 ns regardless of TS's received or not. */
+ uint32_t reserved_14_15 : 2;
+ uint32_t ed : 1; /**< [ 16: 16](R/W) Equalization disable. Disable equalization feature. */
+ uint32_t dtdd : 1; /**< [ 17: 17](R/W) DLLP transmission delay disable. Disable delay transmission of DLLPs before equalization. */
+ uint32_t dcbd : 1; /**< [ 18: 18](R/W) Disable balance disable. Disable DC balance feature. */
+ uint32_t reserved_19_20 : 2;
+ uint32_t aed : 1; /**< [ 21: 21](R/W) Autonomous equalization disable. When the controller is in L0 state at Gen3
+ data rate and equalization was completed successfully in Autonomous EQ Mechanism,
+ setting this bit in DSP will not direct the controller to Recovery state to
+ perform Gen4 equalization. Link stays in Gen3 rate and DSP sends DLLPs to USP.
+ If the bit is 0, DSP will block DLLPs and direct the link to perform Gen4 EQ
+ in Autonomous Mechanism.
+ Note: When CX_GEN4_SPEED, this register is shadow register for Gen3 and Gen4 data
+ rate. If RATE_SHADOW_SEL==00b, this register is RSVD and cannot be written.
+ If RATE_SHADOW_SEL==01b, this register is for Gen4 data rate and can be written. */
+ uint32_t us8etd : 1; /**< [ 22: 22](R/W/H) Upstream port send 8GT/s EQ TS2 disable. The base spec defines that USP can
+ optionally send 8GT EQ TS2 and it means USP can set DSP TxPreset value in Gen4
+ Data Rate. If this register set to 0, USP sends 8GT EQ TS2. If this register
+ set to 1, USP does not send 8GT EQ TS2. This applies to upstream ports only.
+ No Function for downstream ports.
+ Note: When CX_GEN4_SPEED, this register is shadow register for Gen3 and Gen4 data
+ rate. If RATE_SHADOW_SEL==00b, this register is RSVD and cannot be written.
+ If RATE_SHADOW_SEL==01b, this register is for Gen4 data rate and can be written. */
+ uint32_t eiedd : 1; /**< [ 23: 23](R/W) Eq InvalidRequest and RxEqEval different time assertion disable. Disable the assertion of
+ Eq InvalidRequest and RxEqEval at different time. */
+ uint32_t rss : 2; /**< [ 25: 24](R/W) Data rate for shadow register. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_phy_gen3_ctl_s cn; */
+};
+typedef union bdk_pciercx_phy_gen3_ctl bdk_pciercx_phy_gen3_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PHY_GEN3_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PHY_GEN3_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x890ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PHY_GEN3_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PHY_GEN3_CTL(a) bdk_pciercx_phy_gen3_ctl_t
+#define bustype_BDK_PCIERCX_PHY_GEN3_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PHY_GEN3_CTL(a) "PCIERCX_PHY_GEN3_CTL"
+#define busnum_BDK_PCIERCX_PHY_GEN3_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PHY_GEN3_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_phy_intop_ctl
+ *
+ * PCIe RC PHY Interoperability Control Register
+ */
+union bdk_pciercx_phy_intop_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_phy_intop_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_11_31 : 21;
+ uint32_t l1_clk_sel : 1; /**< [ 10: 10](R/W) L1 clock control bit.
+ 0 = Controller requests aux_clk switch and core_clk gating in L1.
+ 1 = Controller does not request aux_clk switch and core_clk gating in L1. */
+ uint32_t l1_nowait_p1 : 1; /**< [ 9: 9](RO) L1 entry control bit.
+ 0 = Core waits for the PHY to acknowledge transition to P1 before entering L1.
+ 1 = Core does not wait for PHY to acknowledge transition to P1 before entering L1. */
+ uint32_t l1sub_exit_mode : 1; /**< [ 8: 8](R/W) L1 exit control using phy_mac_pclkack_n.
+ 0 = Core waits for the PHY to assert phy_mac_pclkack_n before exiting L1.
+ 1 = Core exits L1 without waiting for the PHY to assert phy_mac_pclkack_n. */
+ uint32_t reserved_7 : 1;
+ uint32_t rxstby_ctl : 7; /**< [ 6: 0](R/W) Rxstandby control. Bits 0..5 determine if the controller asserts the RxStandby signal
+ (mac_phy_rxstandby) in the indicated condition. Bit 6 enables the controller
+ to perform the RxStandby/RxStandbyStatus handshake.
+ 0x0 = Rx EIOS and subsequent T TX-IDLE-MIN.
+ 0x1 = Rate Change.
+ 0x2 = Inactive lane for upconfigure/downconfigure.
+ 0x3 = PowerDown = P1orP2.
+ 0x4 = RxL0s.Idle.
+ 0x5 = EI Infer in L0.
+ 0x6 = Execute RxStandby/RxStandbyStatus Handshake. */
+#else /* Word 0 - Little Endian */
+ uint32_t rxstby_ctl : 7; /**< [ 6: 0](R/W) Rxstandby control. Bits 0..5 determine if the controller asserts the RxStandby signal
+ (mac_phy_rxstandby) in the indicated condition. Bit 6 enables the controller
+ to perform the RxStandby/RxStandbyStatus handshake.
+ 0x0 = Rx EIOS and subsequent T TX-IDLE-MIN.
+ 0x1 = Rate Change.
+ 0x2 = Inactive lane for upconfigure/downconfigure.
+ 0x3 = PowerDown = P1orP2.
+ 0x4 = RxL0s.Idle.
+ 0x5 = EI Infer in L0.
+ 0x6 = Execute RxStandby/RxStandbyStatus Handshake. */
+ uint32_t reserved_7 : 1;
+ uint32_t l1sub_exit_mode : 1; /**< [ 8: 8](R/W) L1 exit control using phy_mac_pclkack_n.
+ 0 = Core waits for the PHY to assert phy_mac_pclkack_n before exiting L1.
+ 1 = Core exits L1 without waiting for the PHY to assert phy_mac_pclkack_n. */
+ uint32_t l1_nowait_p1 : 1; /**< [ 9: 9](RO) L1 entry control bit.
+ 0 = Core waits for the PHY to acknowledge transition to P1 before entering L1.
+ 1 = Core does not wait for PHY to acknowledge transition to P1 before entering L1. */
+ uint32_t l1_clk_sel : 1; /**< [ 10: 10](R/W) L1 clock control bit.
+ 0 = Controller requests aux_clk switch and core_clk gating in L1.
+ 1 = Controller does not request aux_clk switch and core_clk gating in L1. */
+ uint32_t reserved_11_31 : 21;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_phy_intop_ctl_s cn; */
+};
+typedef union bdk_pciercx_phy_intop_ctl bdk_pciercx_phy_intop_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PHY_INTOP_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PHY_INTOP_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8c4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PHY_INTOP_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PHY_INTOP_CTL(a) bdk_pciercx_phy_intop_ctl_t
+#define bustype_BDK_PCIERCX_PHY_INTOP_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PHY_INTOP_CTL(a) "PCIERCX_PHY_INTOP_CTL"
+#define busnum_BDK_PCIERCX_PHY_INTOP_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PHY_INTOP_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_phy_status
+ *
+ * PCIe RC PHY Status Register
+ */
+union bdk_pciercx_phy_status
+{
+ uint32_t u;
+ struct bdk_pciercx_phy_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t phy_stat : 32; /**< [ 31: 0](RO/H) PHY status. Sideband control signaling (not supported). */
+#else /* Word 0 - Little Endian */
+ uint32_t phy_stat : 32; /**< [ 31: 0](RO/H) PHY status. Sideband control signaling (not supported). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_phy_status_s cn; */
+};
+typedef union bdk_pciercx_phy_status bdk_pciercx_phy_status_t;
+
+static inline uint64_t BDK_PCIERCX_PHY_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PHY_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x810ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PHY_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PHY_STATUS(a) bdk_pciercx_phy_status_t
+#define bustype_BDK_PCIERCX_PHY_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PHY_STATUS(a) "PCIERCX_PHY_STATUS"
+#define busnum_BDK_PCIERCX_PHY_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_PHY_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pipe_rel
+ *
+ * PCIe RC Pipe Related Register
+ */
+union bdk_pciercx_pipe_rel
+{
+ uint32_t u;
+ struct bdk_pciercx_pipe_rel_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t tx_msg_wbuf_depth : 4; /**< [ 7: 4](RO/H) Tx message bus write buffer depth. */
+ uint32_t rx_msg_wbuf_depth : 4; /**< [ 3: 0](RO/H) Rx message bus write buffer depth. */
+#else /* Word 0 - Little Endian */
+ uint32_t rx_msg_wbuf_depth : 4; /**< [ 3: 0](RO/H) Rx message bus write buffer depth. */
+ uint32_t tx_msg_wbuf_depth : 4; /**< [ 7: 4](RO/H) Tx message bus write buffer depth. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pipe_rel_s cn; */
+};
+typedef union bdk_pciercx_pipe_rel bdk_pciercx_pipe_rel_t;
+
+static inline uint64_t BDK_PCIERCX_PIPE_REL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PIPE_REL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb90ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PIPE_REL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PIPE_REL(a) bdk_pciercx_pipe_rel_t
+#define bustype_BDK_PCIERCX_PIPE_REL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PIPE_REL(a) "PCIERCX_PIPE_REL"
+#define busnum_BDK_PCIERCX_PIPE_REL(a) (a)
+#define arguments_BDK_PCIERCX_PIPE_REL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_cap
+ *
+ * PCIe RC 16.0 GT/s Capabilities Register
+ */
+union bdk_pciercx_pl16g_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_cap_s cn; */
+};
+typedef union bdk_pciercx_pl16g_cap bdk_pciercx_pl16g_cap_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1acll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_CAP(a) bdk_pciercx_pl16g_cap_t
+#define bustype_BDK_PCIERCX_PL16G_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_CAP(a) "PCIERCX_PL16G_CAP"
+#define busnum_BDK_PCIERCX_PL16G_CAP(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_ctl
+ *
+ * PCIe RC 16.0 GT/s Control Register
+ */
+union bdk_pciercx_pl16g_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_ctl_s cn; */
+};
+typedef union bdk_pciercx_pl16g_ctl bdk_pciercx_pl16g_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1b0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_CTL(a) bdk_pciercx_pl16g_ctl_t
+#define bustype_BDK_PCIERCX_PL16G_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_CTL(a) "PCIERCX_PL16G_CTL"
+#define busnum_BDK_PCIERCX_PL16G_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_eq_ctl0123
+ *
+ * PCIe RC 16.0 GT/s Lane Equalization Control for Lane 0-3 Register
+ */
+union bdk_pciercx_pl16g_eq_ctl0123
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_eq_ctl0123_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t l3utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 3. */
+ uint32_t l3dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 3. */
+ uint32_t l2utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 2. */
+ uint32_t l2dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 2. */
+ uint32_t l1utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 1. */
+ uint32_t l1dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 1. */
+ uint32_t l0utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 0. */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 0. */
+#else /* Word 0 - Little Endian */
+ uint32_t l0dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 0. */
+ uint32_t l0utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 0. */
+ uint32_t l1dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 1. */
+ uint32_t l1utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 1. */
+ uint32_t l2dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 2. */
+ uint32_t l2utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 2. */
+ uint32_t l3dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 3. */
+ uint32_t l3utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 3. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_eq_ctl0123_s cn; */
+};
+typedef union bdk_pciercx_pl16g_eq_ctl0123 bdk_pciercx_pl16g_eq_ctl0123_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL0123(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL0123(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_EQ_CTL0123", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_EQ_CTL0123(a) bdk_pciercx_pl16g_eq_ctl0123_t
+#define bustype_BDK_PCIERCX_PL16G_EQ_CTL0123(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_EQ_CTL0123(a) "PCIERCX_PL16G_EQ_CTL0123"
+#define busnum_BDK_PCIERCX_PL16G_EQ_CTL0123(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_EQ_CTL0123(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_eq_ctl12131415
+ *
+ * PCIe RC 16.0 GT/s Lane Equalization Control for Lane 12-15 Register
+ */
+union bdk_pciercx_pl16g_eq_ctl12131415
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_eq_ctl12131415_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t l15utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 15. */
+ uint32_t l15dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 15. */
+ uint32_t l14utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 14. */
+ uint32_t l14dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 14. */
+ uint32_t l13utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 13. */
+ uint32_t l13dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 13. */
+ uint32_t l12utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 12. */
+ uint32_t l12dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 12. */
+#else /* Word 0 - Little Endian */
+ uint32_t l12dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 12. */
+ uint32_t l12utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 12. */
+ uint32_t l13dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 13. */
+ uint32_t l13utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 13. */
+ uint32_t l14dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 14. */
+ uint32_t l14utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 14. */
+ uint32_t l15dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 15. */
+ uint32_t l15utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 15. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_eq_ctl12131415_s cn; */
+};
+typedef union bdk_pciercx_pl16g_eq_ctl12131415 bdk_pciercx_pl16g_eq_ctl12131415_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL12131415(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL12131415(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1d4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_EQ_CTL12131415", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_EQ_CTL12131415(a) bdk_pciercx_pl16g_eq_ctl12131415_t
+#define bustype_BDK_PCIERCX_PL16G_EQ_CTL12131415(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_EQ_CTL12131415(a) "PCIERCX_PL16G_EQ_CTL12131415"
+#define busnum_BDK_PCIERCX_PL16G_EQ_CTL12131415(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_EQ_CTL12131415(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_eq_ctl4567
+ *
+ * PCIe RC 16.0 GT/s Lane Equalization Control for Lane 4-7 Register
+ */
+union bdk_pciercx_pl16g_eq_ctl4567
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_eq_ctl4567_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t l7utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 7. */
+ uint32_t l7dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 7. */
+ uint32_t l6utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 6. */
+ uint32_t l6dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 6. */
+ uint32_t l5utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 5. */
+ uint32_t l5dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 5. */
+ uint32_t l4utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 4. */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 4. */
+#else /* Word 0 - Little Endian */
+ uint32_t l4dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 4. */
+ uint32_t l4utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 4. */
+ uint32_t l5dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 5. */
+ uint32_t l5utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 5. */
+ uint32_t l6dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 6. */
+ uint32_t l6utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 6. */
+ uint32_t l7dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 7. */
+ uint32_t l7utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 7. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_eq_ctl4567_s cn; */
+};
+typedef union bdk_pciercx_pl16g_eq_ctl4567 bdk_pciercx_pl16g_eq_ctl4567_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL4567(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL4567(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1ccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_EQ_CTL4567", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_EQ_CTL4567(a) bdk_pciercx_pl16g_eq_ctl4567_t
+#define bustype_BDK_PCIERCX_PL16G_EQ_CTL4567(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_EQ_CTL4567(a) "PCIERCX_PL16G_EQ_CTL4567"
+#define busnum_BDK_PCIERCX_PL16G_EQ_CTL4567(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_EQ_CTL4567(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_eq_ctl891011
+ *
+ * PCIe RC 16.0 GT/s Lane Equalization Control for Lane 8-11 Register
+ */
+union bdk_pciercx_pl16g_eq_ctl891011
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_eq_ctl891011_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t l11utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 11. */
+ uint32_t l11dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 11. */
+ uint32_t l10utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 10. */
+ uint32_t l10dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 10. */
+ uint32_t l9utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 9. */
+ uint32_t l9dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 9. */
+ uint32_t l8utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 8. */
+ uint32_t l8dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 8. */
+#else /* Word 0 - Little Endian */
+ uint32_t l8dtp : 4; /**< [ 3: 0](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 8. */
+ uint32_t l8utp : 4; /**< [ 7: 4](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 8. */
+ uint32_t l9dtp : 4; /**< [ 11: 8](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 9. */
+ uint32_t l9utp : 4; /**< [ 15: 12](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 9. */
+ uint32_t l10dtp : 4; /**< [ 19: 16](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 10. */
+ uint32_t l10utp : 4; /**< [ 23: 20](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 10. */
+ uint32_t l11dtp : 4; /**< [ 27: 24](RO/WRSL) Downstream port 16.0 GT/s transmitter preset 11. */
+ uint32_t l11utp : 4; /**< [ 31: 28](RO/WRSL) Upstream port 16.0 GT/s transmitter preset 11. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_eq_ctl891011_s cn; */
+};
+typedef union bdk_pciercx_pl16g_eq_ctl891011 bdk_pciercx_pl16g_eq_ctl891011_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL891011(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_EQ_CTL891011(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1d0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_EQ_CTL891011", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_EQ_CTL891011(a) bdk_pciercx_pl16g_eq_ctl891011_t
+#define bustype_BDK_PCIERCX_PL16G_EQ_CTL891011(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_EQ_CTL891011(a) "PCIERCX_PL16G_EQ_CTL891011"
+#define busnum_BDK_PCIERCX_PL16G_EQ_CTL891011(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_EQ_CTL891011(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_ext_cap_hdr
+ *
+ * PCIe RC Pysical Layer 16.0 GT/s Extended Capability Header Register
+ */
+union bdk_pciercx_pl16g_ext_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_ext_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_ext_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_pl16g_ext_cap_hdr bdk_pciercx_pl16g_ext_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_EXT_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_EXT_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1a8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_EXT_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_EXT_CAP_HDR(a) bdk_pciercx_pl16g_ext_cap_hdr_t
+#define bustype_BDK_PCIERCX_PL16G_EXT_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_EXT_CAP_HDR(a) "PCIERCX_PL16G_EXT_CAP_HDR"
+#define busnum_BDK_PCIERCX_PL16G_EXT_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_EXT_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_fret_dpar_stat
+ *
+ * PCIe RC 16.0 GT/s First Retimer Data Parity Mismatch Status Register
+ */
+union bdk_pciercx_pl16g_fret_dpar_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_fret_dpar_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t frt_dp_status : 16; /**< [ 15: 0](R/W/H) First retimer data parity mismatch status. */
+#else /* Word 0 - Little Endian */
+ uint32_t frt_dp_status : 16; /**< [ 15: 0](R/W/H) First retimer data parity mismatch status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_fret_dpar_stat_s cn; */
+};
+typedef union bdk_pciercx_pl16g_fret_dpar_stat bdk_pciercx_pl16g_fret_dpar_stat_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_FRET_DPAR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_FRET_DPAR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_FRET_DPAR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_FRET_DPAR_STAT(a) bdk_pciercx_pl16g_fret_dpar_stat_t
+#define bustype_BDK_PCIERCX_PL16G_FRET_DPAR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_FRET_DPAR_STAT(a) "PCIERCX_PL16G_FRET_DPAR_STAT"
+#define busnum_BDK_PCIERCX_PL16G_FRET_DPAR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_FRET_DPAR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_lc_dpar_stat
+ *
+ * PCIe RC 16.0 GT/s Local Data Parity Mismatch Status Register
+ */
+union bdk_pciercx_pl16g_lc_dpar_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_lc_dpar_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t ldp_status : 16; /**< [ 15: 0](R/W/H) Local data parity mismatch status. */
+#else /* Word 0 - Little Endian */
+ uint32_t ldp_status : 16; /**< [ 15: 0](R/W/H) Local data parity mismatch status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_lc_dpar_stat_s cn; */
+};
+typedef union bdk_pciercx_pl16g_lc_dpar_stat bdk_pciercx_pl16g_lc_dpar_stat_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_LC_DPAR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_LC_DPAR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1b8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_LC_DPAR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_LC_DPAR_STAT(a) bdk_pciercx_pl16g_lc_dpar_stat_t
+#define bustype_BDK_PCIERCX_PL16G_LC_DPAR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_LC_DPAR_STAT(a) "PCIERCX_PL16G_LC_DPAR_STAT"
+#define busnum_BDK_PCIERCX_PL16G_LC_DPAR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_LC_DPAR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_sret_dpar_stat
+ *
+ * PCIe RC 16.0 GT/s Second Retimer Data Parity Mismatch Status Register
+ */
+union bdk_pciercx_pl16g_sret_dpar_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_sret_dpar_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t srt_dp_status : 16; /**< [ 15: 0](R/W/H) Second retimer data parity mismatch status. */
+#else /* Word 0 - Little Endian */
+ uint32_t srt_dp_status : 16; /**< [ 15: 0](R/W/H) Second retimer data parity mismatch status. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_sret_dpar_stat_s cn; */
+};
+typedef union bdk_pciercx_pl16g_sret_dpar_stat bdk_pciercx_pl16g_sret_dpar_stat_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_SRET_DPAR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_SRET_DPAR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_SRET_DPAR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_SRET_DPAR_STAT(a) bdk_pciercx_pl16g_sret_dpar_stat_t
+#define bustype_BDK_PCIERCX_PL16G_SRET_DPAR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_SRET_DPAR_STAT(a) "PCIERCX_PL16G_SRET_DPAR_STAT"
+#define busnum_BDK_PCIERCX_PL16G_SRET_DPAR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_SRET_DPAR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl16g_status
+ *
+ * PCIe RC 16.0 GT/s Status Register
+ */
+union bdk_pciercx_pl16g_status
+{
+ uint32_t u;
+ struct bdk_pciercx_pl16g_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_5_31 : 27;
+ uint32_t leq_req : 1; /**< [ 4: 4](R/W/H) Link equalization request 16.0 GT/s */
+ uint32_t eq_cpl_p3 : 1; /**< [ 3: 3](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t eq_cpl_p2 : 1; /**< [ 2: 2](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t eq_cpl_p1 : 1; /**< [ 1: 1](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t eq_cpl : 1; /**< [ 0: 0](RO/H) Equalization 16.0 GT/s complete. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_cpl : 1; /**< [ 0: 0](RO/H) Equalization 16.0 GT/s complete. */
+ uint32_t eq_cpl_p1 : 1; /**< [ 1: 1](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t eq_cpl_p2 : 1; /**< [ 2: 2](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t eq_cpl_p3 : 1; /**< [ 3: 3](RO/H) Equalization 16.0 GT/s phase 3 successful. */
+ uint32_t leq_req : 1; /**< [ 4: 4](R/W/H) Link equalization request 16.0 GT/s */
+ uint32_t reserved_5_31 : 27;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl16g_status_s cn; */
+};
+typedef union bdk_pciercx_pl16g_status bdk_pciercx_pl16g_status_t;
+
+static inline uint64_t BDK_PCIERCX_PL16G_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL16G_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x1b4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL16G_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL16G_STATUS(a) bdk_pciercx_pl16g_status_t
+#define bustype_BDK_PCIERCX_PL16G_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL16G_STATUS(a) "PCIERCX_PL16G_STATUS"
+#define busnum_BDK_PCIERCX_PL16G_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_PL16G_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pl_ltr_latency
+ *
+ * PCIe RC LTR Latency Register
+ */
+union bdk_pciercx_pl_ltr_latency
+{
+ uint32_t u;
+ struct bdk_pciercx_pl_ltr_latency_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nslreq : 1; /**< [ 31: 31](R/W) No snoop latency requirement. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t nsls : 3; /**< [ 28: 26](R/W) No snoop latency scale. */
+ uint32_t nslv : 10; /**< [ 25: 16](R/W) No snoop latency value. */
+ uint32_t slr : 1; /**< [ 15: 15](R/W) Snoop latency requirement. */
+ uint32_t reserved_13_14 : 2;
+ uint32_t sls : 3; /**< [ 12: 10](R/W) Snoop latency scale. */
+ uint32_t slv : 10; /**< [ 9: 0](R/W) Snoop latency value. */
+#else /* Word 0 - Little Endian */
+ uint32_t slv : 10; /**< [ 9: 0](R/W) Snoop latency value. */
+ uint32_t sls : 3; /**< [ 12: 10](R/W) Snoop latency scale. */
+ uint32_t reserved_13_14 : 2;
+ uint32_t slr : 1; /**< [ 15: 15](R/W) Snoop latency requirement. */
+ uint32_t nslv : 10; /**< [ 25: 16](R/W) No snoop latency value. */
+ uint32_t nsls : 3; /**< [ 28: 26](R/W) No snoop latency scale. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t nslreq : 1; /**< [ 31: 31](R/W) No snoop latency requirement. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pl_ltr_latency_s cn; */
+};
+typedef union bdk_pciercx_pl_ltr_latency bdk_pciercx_pl_ltr_latency_t;
+
+static inline uint64_t BDK_PCIERCX_PL_LTR_LATENCY(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PL_LTR_LATENCY(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xb30ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PL_LTR_LATENCY", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PL_LTR_LATENCY(a) bdk_pciercx_pl_ltr_latency_t
+#define bustype_BDK_PCIERCX_PL_LTR_LATENCY(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PL_LTR_LATENCY(a) "PCIERCX_PL_LTR_LATENCY"
+#define busnum_BDK_PCIERCX_PL_LTR_LATENCY(a) (a)
+#define arguments_BDK_PCIERCX_PL_LTR_LATENCY(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pm_cap_id
+ *
+ * PCIe RC Power Management Capability ID Register
+ */
+union bdk_pciercx_pm_cap_id
+{
+ uint32_t u;
+ struct bdk_pciercx_pm_cap_id_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ This field is writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t reserved_20 : 1;
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to zero. */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable
+ through PEM()_CFG_WR. For a root complex, should be changed by configuration software
+ to 0x50 (Enhanced Allocation). */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pmcid : 8; /**< [ 7: 0](RO) Power management capability ID. */
+ uint32_t ncp : 8; /**< [ 15: 8](RO/WRSL) Next capability pointer. Points to the PCIe capabilities list by default, writable
+ through PEM()_CFG_WR. For a root complex, should be changed by configuration software
+ to 0x50 (Enhanced Allocation). */
+ uint32_t pmsv : 3; /**< [ 18: 16](RO/WRSL) Power management specification version, writable through
+ PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pme_clock : 1; /**< [ 19: 19](RO) PME clock, hardwired to zero. */
+ uint32_t reserved_20 : 1;
+ uint32_t dsi : 1; /**< [ 21: 21](RO/WRSL) Device specific initialization (DSI), writable through PEM()_CFG_WR.
+ However, the application must not change this field. */
+ uint32_t auxc : 3; /**< [ 24: 22](RO/WRSL) AUX current, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t d1s : 1; /**< [ 25: 25](RO/WRSL) D1 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t d2s : 1; /**< [ 26: 26](RO/WRSL) D2 support, writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pmes : 5; /**< [ 31: 27](RO/WRSL/H) PME_Support. A value of 0x0 for any bit indicates that the device (or function) is not
+ capable of generating PME messages while in that power state:
+
+ _ Bit 11: If set, PME Messages can be generated from D0.
+
+ _ Bit 12: If set, PME Messages can be generated from D1.
+
+ _ Bit 13: If set, PME Messages can be generated from D2.
+
+ _ Bit 14: If set, PME Messages can be generated from D3hot.
+
+ _ Bit 15: If set, PME Messages can be generated from D3cold.
+
+ This field is writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pm_cap_id_s cn; */
+};
+typedef union bdk_pciercx_pm_cap_id bdk_pciercx_pm_cap_id_t;
+
+static inline uint64_t BDK_PCIERCX_PM_CAP_ID(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PM_CAP_ID(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x40ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PM_CAP_ID", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PM_CAP_ID(a) bdk_pciercx_pm_cap_id_t
+#define bustype_BDK_PCIERCX_PM_CAP_ID(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PM_CAP_ID(a) "PCIERCX_PM_CAP_ID"
+#define busnum_BDK_PCIERCX_PM_CAP_ID(a) (a)
+#define arguments_BDK_PCIERCX_PM_CAP_ID(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pm_ctl
+ *
+ * PCIe RC Power Management Control and Status Register
+ */
+union bdk_pciercx_pm_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_pm_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t pmdia : 8; /**< [ 31: 24](RO) Data register for additional information (not supported). */
+ uint32_t bpccee : 1; /**< [ 23: 23](RO) Bus power/clock control enable, hardwired to zero. */
+ uint32_t bd3h : 1; /**< [ 22: 22](RO) B2/B3 support, hardwired to zero. */
+ uint32_t reserved_16_21 : 6;
+ uint32_t pmess : 1; /**< [ 15: 15](R/W1C/H) PME status. Indicates whether or not a previously enabled PME event occurred. */
+ uint32_t pmedsia : 2; /**< [ 14: 13](RO) Data scale (not supported). */
+ uint32_t pmds : 4; /**< [ 12: 9](RO) Data select (not supported). */
+ uint32_t pmeens : 1; /**< [ 8: 8](R/W) PME enable. A value of one indicates that the device is enabled to generate PME. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t nsr : 1; /**< [ 3: 3](RO/WRSL) No soft reset, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_2 : 1;
+ uint32_t ps : 2; /**< [ 1: 0](R/W/H) Power state. Controls the device power state:
+ 0x0 = D0.
+ 0x1 = D1.
+ 0x2 = D2.
+ 0x3 = D3.
+
+ The written value is ignored if the specific state is not supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t ps : 2; /**< [ 1: 0](R/W/H) Power state. Controls the device power state:
+ 0x0 = D0.
+ 0x1 = D1.
+ 0x2 = D2.
+ 0x3 = D3.
+
+ The written value is ignored if the specific state is not supported. */
+ uint32_t reserved_2 : 1;
+ uint32_t nsr : 1; /**< [ 3: 3](RO/WRSL) No soft reset, writable through PEM()_CFG_WR. However, the application must not change
+ this field. */
+ uint32_t reserved_4_7 : 4;
+ uint32_t pmeens : 1; /**< [ 8: 8](R/W) PME enable. A value of one indicates that the device is enabled to generate PME. */
+ uint32_t pmds : 4; /**< [ 12: 9](RO) Data select (not supported). */
+ uint32_t pmedsia : 2; /**< [ 14: 13](RO) Data scale (not supported). */
+ uint32_t pmess : 1; /**< [ 15: 15](R/W1C/H) PME status. Indicates whether or not a previously enabled PME event occurred. */
+ uint32_t reserved_16_21 : 6;
+ uint32_t bd3h : 1; /**< [ 22: 22](RO) B2/B3 support, hardwired to zero. */
+ uint32_t bpccee : 1; /**< [ 23: 23](RO) Bus power/clock control enable, hardwired to zero. */
+ uint32_t pmdia : 8; /**< [ 31: 24](RO) Data register for additional information (not supported). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pm_ctl_s cn; */
+};
+typedef union bdk_pciercx_pm_ctl bdk_pciercx_pm_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PM_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PM_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x44ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PM_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PM_CTL(a) bdk_pciercx_pm_ctl_t
+#define bustype_BDK_PCIERCX_PM_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PM_CTL(a) "PCIERCX_PM_CTL"
+#define busnum_BDK_PCIERCX_PM_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PM_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pmem
+ *
+ * PCIe RC Prefetchable Memory and Limit Register
+ */
+union bdk_pciercx_pmem
+{
+ uint32_t u;
+ struct bdk_pciercx_pmem_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t mem64b : 1; /**< [ 16: 16](RO) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+#else /* Word 0 - Little Endian */
+ uint32_t mem64a : 1; /**< [ 0: 0](RO/WRSL) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing.
+
+ This bit is writable through PEM()_CFG_WR. When the application writes to this bit
+ through PEM()_CFG_WR, the same value is written to bit 16 of this register. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t lmem_base : 12; /**< [ 15: 4](R/W) Upper 12 bits of 32-bit prefetchable memory start address. */
+ uint32_t mem64b : 1; /**< [ 16: 16](RO) 64-bit memory addressing:
+ 0 = 32-bit memory addressing.
+ 1 = 64-bit memory addressing. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t lmem_limit : 12; /**< [ 31: 20](R/W) Upper 12 bits of 32-bit prefetchable memory end address. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pmem_s cn; */
+};
+typedef union bdk_pciercx_pmem bdk_pciercx_pmem_t;
+
+static inline uint64_t BDK_PCIERCX_PMEM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PMEM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x24ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PMEM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PMEM(a) bdk_pciercx_pmem_t
+#define bustype_BDK_PCIERCX_PMEM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PMEM(a) "PCIERCX_PMEM"
+#define busnum_BDK_PCIERCX_PMEM(a) (a)
+#define arguments_BDK_PCIERCX_PMEM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_port_ctl
+ *
+ * PCIe RC Port Link Control Register
+ */
+union bdk_pciercx_port_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_port_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16.
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0x1F to limit the number of lanes that the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC_LINK_CAP[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x16, x8,
+ x4, x2, and x1 are supported when
+ [LME] = 0x1F, for example. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes.
+ The scaling factor is configured by PCIERC_TIMER_CTL[FLMSF]. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t reserved_4 : 1;
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a one to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+#else /* Word 0 - Little Endian */
+ uint32_t omr : 1; /**< [ 0: 0](WO/H) Other message request. When software writes a one to this bit, the PCI Express bus transmits
+ the message contained in the other message register. */
+ uint32_t sd : 1; /**< [ 1: 1](R/W) Scramble disable. Setting this bit turns off data scrambling. */
+ uint32_t le : 1; /**< [ 2: 2](R/W) Loopback enable. Initiate loopback mode as a master. On a 0-\>1 transition, the PCIe core
+ sends TS ordered sets with the loopback bit set to cause the link partner to enter into
+ loopback mode as a slave. Normal transmission is not possible when LE=1. To exit loopback
+ mode, take the link through a reset sequence. */
+ uint32_t ra : 1; /**< [ 3: 3](R/W) Reset assert. Triggers a recovery and forces the LTSSM to the hot reset state (downstream
+ port only). */
+ uint32_t reserved_4 : 1;
+ uint32_t dllle : 1; /**< [ 5: 5](R/W) DLL link enable. Enables link initialization. If DLL link enable = 0, the PCI Express bus
+ does not transmit InitFC DLLPs and does not establish a link. */
+ uint32_t ldis : 1; /**< [ 6: 6](R/W) Link disable. Internally reserved field, do not set. */
+ uint32_t flm : 1; /**< [ 7: 7](R/W/H) Fast link mode. Sets all internal timers to fast mode for simulation purposes.
+ The scaling factor is configured by PCIERC_TIMER_CTL[FLMSF]. */
+ uint32_t link_rate : 4; /**< [ 11: 8](RO/H) Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t lme : 6; /**< [ 21: 16](R/W) Link mode enable set as follows:
+ 0x1 = x1.
+ 0x3 = x2.
+ 0x7 = x4.
+ 0xF = x8.
+ 0x1F = x16.
+ 0x3F = x32 (not supported).
+
+ This field indicates the maximum number of lanes supported by the PCIe port. The value can
+ be set less than 0x1F to limit the number of lanes that the PCIe will attempt to use. The
+ programming of this field needs to be done by software before enabling the link. See also
+ PCIERC_LINK_CAP[MLW].
+ The value of this field does not indicate the number of lanes in use by the PCIe. This
+ field sets the maximum number of lanes in the PCIe core that could be used. As per the
+ PCIe specification, the PCIe core can negotiate a smaller link width, so all of x16, x8,
+ x4, x2, and x1 are supported when
+ [LME] = 0x1F, for example. */
+ uint32_t cle : 2; /**< [ 23: 22](RAZ) Reserved. */
+ uint32_t beacon_en : 1; /**< [ 24: 24](R/W) Beacon enable. Internally reserved field, do not set. */
+ uint32_t clcrc_en : 1; /**< [ 25: 25](R/W) Corrupt LCRC enable. Internally reserved field, do not set. */
+ uint32_t ex_synch : 1; /**< [ 26: 26](R/W) Extended synch. Internally reserved field, do not set. */
+ uint32_t xlr_en : 1; /**< [ 27: 27](R/W) Transmit lane reversible enable. Internally reserved field, do not set. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_port_ctl_s cn; */
+};
+typedef union bdk_pciercx_port_ctl bdk_pciercx_port_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PORT_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PORT_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x710ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PORT_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PORT_CTL(a) bdk_pciercx_port_ctl_t
+#define bustype_BDK_PCIERCX_PORT_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PORT_CTL(a) "PCIERCX_PORT_CTL"
+#define busnum_BDK_PCIERCX_PORT_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PORT_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_port_flink
+ *
+ * PCIe RC Port Force Link Register
+ */
+union bdk_pciercx_port_flink
+{
+ uint32_t u;
+ struct bdk_pciercx_port_flink_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t deskew_for_sris : 1; /**< [ 23: 23](R/W) Use the transitions from TS2 to logical idle symbol, SKP OS to logical idle symbol,
+ and FTS sequence to SKP OS to do deskew for SRIS instead of using received SKP OS
+ if [DESKEW_FOR_SRIS] is one. */
+ uint32_t reserved_22 : 1;
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+#else /* Word 0 - Little Endian */
+ uint32_t link_num : 8; /**< [ 7: 0](R/W) Link number. */
+ uint32_t forced_ltssm : 4; /**< [ 11: 8](R/W) Forced link command. */
+ uint32_t reserved_12_14 : 3;
+ uint32_t force_link : 1; /**< [ 15: 15](WO/H) Force link. Forces the link to the state specified by [LINK_STATE]. The force link
+ pulse triggers link renegotiation.
+ As the force link is a pulse, writing a 1 to it does trigger the forced link state event,
+ even though reading it always returns a 0. */
+ uint32_t link_state : 6; /**< [ 21: 16](R/W) Link state. The link state that the PCI Express bus is forced to when bit 15 (force link)
+ is set. State encoding:
+ 0x0 = DETECT_QUIET.
+ 0x1 = DETECT_ACT.
+ 0x2 = POLL_ACTIVE.
+ 0x3 = POLL_COMPLIANCE.
+ 0x4 = POLL_CONFIG.
+ 0x5 = PRE_DETECT_QUIET.
+ 0x6 = DETECT_WAIT.
+ 0x7 = CFG_LINKWD_START.
+ 0x8 = CFG_LINKWD_ACEPT.
+ 0x9 = CFG_LANENUM_WAIT.
+ 0xA = CFG_LANENUM_ACEPT.
+ 0xB = CFG_COMPLETE.
+ 0xC = CFG_IDLE.
+ 0xD = RCVRY_LOCK.
+ 0xE = RCVRY_SPEED.
+ 0xF = RCVRY_RCVRCFG.
+ 0x10 = RCVRY_IDLE.
+ 0x11 = L0.
+ 0x12 = L0S.
+ 0x13 = L123_SEND_EIDLE.
+ 0x14 = L1_IDLE.
+ 0x15 = L2_IDLE.
+ 0x16 = L2_WAKE.
+ 0x17 = DISABLED_ENTRY.
+ 0x18 = DISABLED_IDLE.
+ 0x19 = DISABLED.
+ 0x1A = LPBK_ENTRY.
+ 0x1B = LPBK_ACTIVE.
+ 0x1C = LPBK_EXIT.
+ 0x1D = LPBK_EXIT_TIMEOUT.
+ 0x1E = HOT_RESET_ENTRY.
+ 0x1F = HOT_RESET. */
+ uint32_t reserved_22 : 1;
+ uint32_t deskew_for_sris : 1; /**< [ 23: 23](R/W) Use the transitions from TS2 to logical idle symbol, SKP OS to logical idle symbol,
+ and FTS sequence to SKP OS to do deskew for SRIS instead of using received SKP OS
+ if [DESKEW_FOR_SRIS] is one. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_port_flink_s cn; */
+};
+typedef union bdk_pciercx_port_flink bdk_pciercx_port_flink_t;
+
+static inline uint64_t BDK_PCIERCX_PORT_FLINK(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PORT_FLINK(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x708ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PORT_FLINK", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PORT_FLINK(a) bdk_pciercx_port_flink_t
+#define bustype_BDK_PCIERCX_PORT_FLINK(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PORT_FLINK(a) "PCIERCX_PORT_FLINK"
+#define busnum_BDK_PCIERCX_PORT_FLINK(a) (a)
+#define arguments_BDK_PCIERCX_PORT_FLINK(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pre_base
+ *
+ * PCIe RC Prefetchable Base Upper 32 Bits Register
+ */
+union bdk_pciercx_pre_base
+{
+ uint32_t u;
+ struct bdk_pciercx_pre_base_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t umem_base : 32; /**< [ 31: 0](R/W) Upper 32 bits of base address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#else /* Word 0 - Little Endian */
+ uint32_t umem_base : 32; /**< [ 31: 0](R/W) Upper 32 bits of base address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pre_base_s cn; */
+};
+typedef union bdk_pciercx_pre_base bdk_pciercx_pre_base_t;
+
+static inline uint64_t BDK_PCIERCX_PRE_BASE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PRE_BASE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x28ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PRE_BASE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PRE_BASE(a) bdk_pciercx_pre_base_t
+#define bustype_BDK_PCIERCX_PRE_BASE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PRE_BASE(a) "PCIERCX_PRE_BASE"
+#define busnum_BDK_PCIERCX_PRE_BASE(a) (a)
+#define arguments_BDK_PCIERCX_PRE_BASE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_pre_limit
+ *
+ * PCIe RC Prefetchable Limit Upper 32 Bits Register
+ */
+union bdk_pciercx_pre_limit
+{
+ uint32_t u;
+ struct bdk_pciercx_pre_limit_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t umem_limit : 32; /**< [ 31: 0](R/W) Upper 32 bits of limit address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#else /* Word 0 - Little Endian */
+ uint32_t umem_limit : 32; /**< [ 31: 0](R/W) Upper 32 bits of limit address of prefetchable memory space. Used only when 64-bit
+ prefetchable memory addressing is enabled. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_pre_limit_s cn; */
+};
+typedef union bdk_pciercx_pre_limit bdk_pciercx_pre_limit_t;
+
+static inline uint64_t BDK_PCIERCX_PRE_LIMIT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PRE_LIMIT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x2cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PRE_LIMIT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PRE_LIMIT(a) bdk_pciercx_pre_limit_t
+#define bustype_BDK_PCIERCX_PRE_LIMIT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PRE_LIMIT(a) "PCIERCX_PRE_LIMIT"
+#define busnum_BDK_PCIERCX_PRE_LIMIT(a) (a)
+#define arguments_BDK_PCIERCX_PRE_LIMIT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_cap
+ *
+ * PCIe RC Precision Time Measurement Capabilities Register
+ */
+union bdk_pciercx_ptm_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t clkg : 8; /**< [ 15: 8](RO/WRSL) PTM local clock granularity. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t rtc : 1; /**< [ 2: 2](RO/WRSL) PTM root capable. */
+ uint32_t rsc : 1; /**< [ 1: 1](RO/WRSL) PTM responder capable. */
+ uint32_t rqc : 1; /**< [ 0: 0](RO/WRSL) PTM requester capable. */
+#else /* Word 0 - Little Endian */
+ uint32_t rqc : 1; /**< [ 0: 0](RO/WRSL) PTM requester capable. */
+ uint32_t rsc : 1; /**< [ 1: 1](RO/WRSL) PTM responder capable. */
+ uint32_t rtc : 1; /**< [ 2: 2](RO/WRSL) PTM root capable. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t clkg : 8; /**< [ 15: 8](RO/WRSL) PTM local clock granularity. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_cap_s cn; */
+};
+typedef union bdk_pciercx_ptm_cap bdk_pciercx_ptm_cap_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x460ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_CAP(a) bdk_pciercx_ptm_cap_t
+#define bustype_BDK_PCIERCX_PTM_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_CAP(a) "PCIERCX_PTM_CAP"
+#define busnum_BDK_PCIERCX_PTM_CAP(a) (a)
+#define arguments_BDK_PCIERCX_PTM_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_ctl
+ *
+ * PCIe RC Precision Time Measurement Control Register
+ */
+union bdk_pciercx_ptm_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t eff_gran : 8; /**< [ 15: 8](R/W) PTM effective granularity. */
+ uint32_t reserved_2_7 : 6;
+ uint32_t rt_sel : 1; /**< [ 1: 1](R/W) PTM root select. When set this time source is the PTM root.
+ Writeable only when PCIERC_PTM_CAP[RTC] is set. */
+ uint32_t en : 1; /**< [ 0: 0](R/W) PTM enable. When set, this function is permitted to participate in the PTM mechanism. */
+#else /* Word 0 - Little Endian */
+ uint32_t en : 1; /**< [ 0: 0](R/W) PTM enable. When set, this function is permitted to participate in the PTM mechanism. */
+ uint32_t rt_sel : 1; /**< [ 1: 1](R/W) PTM root select. When set this time source is the PTM root.
+ Writeable only when PCIERC_PTM_CAP[RTC] is set. */
+ uint32_t reserved_2_7 : 6;
+ uint32_t eff_gran : 8; /**< [ 15: 8](R/W) PTM effective granularity. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_ctl_s cn; */
+};
+typedef union bdk_pciercx_ptm_ctl bdk_pciercx_ptm_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x464ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_CTL(a) bdk_pciercx_ptm_ctl_t
+#define bustype_BDK_PCIERCX_PTM_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_CTL(a) "PCIERCX_PTM_CTL"
+#define busnum_BDK_PCIERCX_PTM_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PTM_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_ext_cap_hdr
+ *
+ * PCIe RC Precision Time Measurement Capability Header Register
+ */
+union bdk_pciercx_ptm_ext_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_ext_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_ext_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_ptm_ext_cap_hdr bdk_pciercx_ptm_ext_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_EXT_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_EXT_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x45cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_EXT_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_EXT_CAP_HDR(a) bdk_pciercx_ptm_ext_cap_hdr_t
+#define bustype_BDK_PCIERCX_PTM_EXT_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_EXT_CAP_HDR(a) "PCIERCX_PTM_EXT_CAP_HDR"
+#define busnum_BDK_PCIERCX_PTM_EXT_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_PTM_EXT_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_cap_hdr
+ *
+ * PCIe RC Preicsion Time Measurement Responder Capability Header Register
+ */
+union bdk_pciercx_ptm_res_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_cap_hdr bdk_pciercx_ptm_res_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x468ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_CAP_HDR(a) bdk_pciercx_ptm_res_cap_hdr_t
+#define bustype_BDK_PCIERCX_PTM_RES_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_CAP_HDR(a) "PCIERCX_PTM_RES_CAP_HDR"
+#define busnum_BDK_PCIERCX_PTM_RES_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_ctl
+ *
+ * PCIe RC Precision Time Measurement Responder Control Register
+ */
+union bdk_pciercx_ptm_res_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t pres_ctx_vld : 1; /**< [ 0: 0](RO/WRSL/H) PTM responder control context valid - PTM local timing is valid.
+ A speed change or aux_clk_active will set this bit low. */
+#else /* Word 0 - Little Endian */
+ uint32_t pres_ctx_vld : 1; /**< [ 0: 0](RO/WRSL/H) PTM responder control context valid - PTM local timing is valid.
+ A speed change or aux_clk_active will set this bit low. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_ctl_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_ctl bdk_pciercx_ptm_res_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x470ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_CTL(a) bdk_pciercx_ptm_res_ctl_t
+#define bustype_BDK_PCIERCX_PTM_RES_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_CTL(a) "PCIERCX_PTM_RES_CTL"
+#define busnum_BDK_PCIERCX_PTM_RES_CTL(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_hdr
+ *
+ * PCIe RC Precision Time Measurement Responder Vendor Specific Header Register
+ */
+union bdk_pciercx_ptm_res_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vlen : 12; /**< [ 31: 20](RO/WRSL) PTM responder VSEC length. */
+ uint32_t vrev : 4; /**< [ 19: 16](RO/WRSL) PTM responder VSEC revision. */
+ uint32_t vid : 16; /**< [ 15: 0](RO/WRSL) PTM responder VSEC ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t vid : 16; /**< [ 15: 0](RO/WRSL) PTM responder VSEC ID. */
+ uint32_t vrev : 4; /**< [ 19: 16](RO/WRSL) PTM responder VSEC revision. */
+ uint32_t vlen : 12; /**< [ 31: 20](RO/WRSL) PTM responder VSEC length. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_hdr_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_hdr bdk_pciercx_ptm_res_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x46cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_HDR(a) bdk_pciercx_ptm_res_hdr_t
+#define bustype_BDK_PCIERCX_PTM_RES_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_HDR(a) "PCIERCX_PTM_RES_HDR"
+#define busnum_BDK_PCIERCX_PTM_RES_HDR(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_local_lsb
+ *
+ * PCIe RC PTM Responder Local Clock LSB Register
+ */
+union bdk_pciercx_ptm_res_local_lsb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_local_lsb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t clk_lsb : 32; /**< [ 31: 0](RO/WRSL) PTM responder local clock LSB. Lower 32 bits of local timer value. */
+#else /* Word 0 - Little Endian */
+ uint32_t clk_lsb : 32; /**< [ 31: 0](RO/WRSL) PTM responder local clock LSB. Lower 32 bits of local timer value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_local_lsb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_local_lsb bdk_pciercx_ptm_res_local_lsb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_LOCAL_LSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_LOCAL_LSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x478ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_LOCAL_LSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_LOCAL_LSB(a) bdk_pciercx_ptm_res_local_lsb_t
+#define bustype_BDK_PCIERCX_PTM_RES_LOCAL_LSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_LOCAL_LSB(a) "PCIERCX_PTM_RES_LOCAL_LSB"
+#define busnum_BDK_PCIERCX_PTM_RES_LOCAL_LSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_LOCAL_LSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_local_msb
+ *
+ * PCIe RC PTM Responder Local Clock MSB Register
+ */
+union bdk_pciercx_ptm_res_local_msb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_local_msb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t clk_msb : 32; /**< [ 31: 0](RO/WRSL) PTM responder local clock MSB. Upper 32 bits of local timer value. */
+#else /* Word 0 - Little Endian */
+ uint32_t clk_msb : 32; /**< [ 31: 0](RO/WRSL) PTM responder local clock MSB. Upper 32 bits of local timer value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_local_msb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_local_msb bdk_pciercx_ptm_res_local_msb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_LOCAL_MSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_LOCAL_MSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x47cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_LOCAL_MSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_LOCAL_MSB(a) bdk_pciercx_ptm_res_local_msb_t
+#define bustype_BDK_PCIERCX_PTM_RES_LOCAL_MSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_LOCAL_MSB(a) "PCIERCX_PTM_RES_LOCAL_MSB"
+#define busnum_BDK_PCIERCX_PTM_RES_LOCAL_MSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_LOCAL_MSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_rx_latency
+ *
+ * PCIe RC PTM Responder RX Latency Register
+ */
+union bdk_pciercx_ptm_res_rx_latency
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_rx_latency_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t rx_lat : 12; /**< [ 11: 0](R/W) PTM responder RX latency. */
+#else /* Word 0 - Little Endian */
+ uint32_t rx_lat : 12; /**< [ 11: 0](R/W) PTM responder RX latency. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_rx_latency_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_rx_latency bdk_pciercx_ptm_res_rx_latency_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_RX_LATENCY(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_RX_LATENCY(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x4a4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_RX_LATENCY", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_RX_LATENCY(a) bdk_pciercx_ptm_res_rx_latency_t
+#define bustype_BDK_PCIERCX_PTM_RES_RX_LATENCY(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_RX_LATENCY(a) "PCIERCX_PTM_RES_RX_LATENCY"
+#define busnum_BDK_PCIERCX_PTM_RES_RX_LATENCY(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_RX_LATENCY(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_status
+ *
+ * PCIe RC PTM Responder Status Register
+ */
+union bdk_pciercx_ptm_res_status
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_2_31 : 30;
+ uint32_t first_req_rcv : 1; /**< [ 1: 1](RO/H) PTM first request received. */
+ uint32_t ctxt_vld : 1; /**< [ 0: 0](RO/H) PTM responder status context valid. */
+#else /* Word 0 - Little Endian */
+ uint32_t ctxt_vld : 1; /**< [ 0: 0](RO/H) PTM responder status context valid. */
+ uint32_t first_req_rcv : 1; /**< [ 1: 1](RO/H) PTM first request received. */
+ uint32_t reserved_2_31 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_status_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_status bdk_pciercx_ptm_res_status_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x474ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_STATUS(a) bdk_pciercx_ptm_res_status_t
+#define bustype_BDK_PCIERCX_PTM_RES_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_STATUS(a) "PCIERCX_PTM_RES_STATUS"
+#define busnum_BDK_PCIERCX_PTM_RES_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t2_lsb
+ *
+ * PCIe RC PTM Responder T2 Timestamp LSB Register
+ */
+union bdk_pciercx_ptm_res_t2_lsb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t2_lsb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ts_lsb : 32; /**< [ 31: 0](RO) PTM responder T2 timestamp LSB. Lower 32 bits of the T2 timestamp value. */
+#else /* Word 0 - Little Endian */
+ uint32_t ts_lsb : 32; /**< [ 31: 0](RO) PTM responder T2 timestamp LSB. Lower 32 bits of the T2 timestamp value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t2_lsb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t2_lsb bdk_pciercx_ptm_res_t2_lsb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2_LSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2_LSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x480ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T2_LSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T2_LSB(a) bdk_pciercx_ptm_res_t2_lsb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T2_LSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T2_LSB(a) "PCIERCX_PTM_RES_T2_LSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T2_LSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T2_LSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t2_msb
+ *
+ * PCIe RC PTM Responder T2 Timestamp MSB Register
+ */
+union bdk_pciercx_ptm_res_t2_msb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t2_msb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ts_msb : 32; /**< [ 31: 0](RO) PTM responder T2 timestamp MSB. Upper 32 bits of the T2 timestamp value. */
+#else /* Word 0 - Little Endian */
+ uint32_t ts_msb : 32; /**< [ 31: 0](RO) PTM responder T2 timestamp MSB. Upper 32 bits of the T2 timestamp value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t2_msb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t2_msb bdk_pciercx_ptm_res_t2_msb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2_MSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2_MSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x484ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T2_MSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T2_MSB(a) bdk_pciercx_ptm_res_t2_msb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T2_MSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T2_MSB(a) "PCIERCX_PTM_RES_T2_MSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T2_MSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T2_MSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t2p_lsb
+ *
+ * PCIe RC PTM Responder T2 Previous Timestamp LSB Register
+ */
+union bdk_pciercx_ptm_res_t2p_lsb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t2p_lsb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t2p_lsb : 32; /**< [ 31: 0](RO) PTM responder T2 previous timestamp LSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t2p_lsb : 32; /**< [ 31: 0](RO) PTM responder T2 previous timestamp LSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t2p_lsb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t2p_lsb bdk_pciercx_ptm_res_t2p_lsb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2P_LSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2P_LSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x488ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T2P_LSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T2P_LSB(a) bdk_pciercx_ptm_res_t2p_lsb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T2P_LSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T2P_LSB(a) "PCIERCX_PTM_RES_T2P_LSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T2P_LSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T2P_LSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t2p_msb
+ *
+ * PCIe RC PTM Responder T2 Previous Timestamp MSB Register
+ */
+union bdk_pciercx_ptm_res_t2p_msb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t2p_msb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t2p_msb : 32; /**< [ 31: 0](RO) PTM responder T2 previous timestamp MSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t2p_msb : 32; /**< [ 31: 0](RO) PTM responder T2 previous timestamp MSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t2p_msb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t2p_msb bdk_pciercx_ptm_res_t2p_msb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2P_MSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T2P_MSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x48cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T2P_MSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T2P_MSB(a) bdk_pciercx_ptm_res_t2p_msb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T2P_MSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T2P_MSB(a) "PCIERCX_PTM_RES_T2P_MSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T2P_MSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T2P_MSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t3_lsb
+ *
+ * PCIe RC PTM Responder T3 Timestamp LSB Register
+ */
+union bdk_pciercx_ptm_res_t3_lsb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t3_lsb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t3_lsb : 32; /**< [ 31: 0](RO/H) PTM responder T3 timestamp LSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t3_lsb : 32; /**< [ 31: 0](RO/H) PTM responder T3 timestamp LSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t3_lsb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t3_lsb bdk_pciercx_ptm_res_t3_lsb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3_LSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3_LSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x490ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T3_LSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T3_LSB(a) bdk_pciercx_ptm_res_t3_lsb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T3_LSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T3_LSB(a) "PCIERCX_PTM_RES_T3_LSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T3_LSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T3_LSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t3_msb
+ *
+ * PCIe RC PTM Responder T3 Timestamp MSB Register
+ */
+union bdk_pciercx_ptm_res_t3_msb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t3_msb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t3 : 32; /**< [ 31: 0](RO/H) PTM responder T3 timestamp MSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t3 : 32; /**< [ 31: 0](RO/H) PTM responder T3 timestamp MSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t3_msb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t3_msb bdk_pciercx_ptm_res_t3_msb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3_MSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3_MSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x494ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T3_MSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T3_MSB(a) bdk_pciercx_ptm_res_t3_msb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T3_MSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T3_MSB(a) "PCIERCX_PTM_RES_T3_MSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T3_MSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T3_MSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t3p_lsb
+ *
+ * PCIe RC PTM Responder T3 Previous Timestamp LSB Register
+ */
+union bdk_pciercx_ptm_res_t3p_lsb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t3p_lsb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t3p_lsb : 32; /**< [ 31: 0](RO/H) PTM responder T3 previous timestamp LSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t3p_lsb : 32; /**< [ 31: 0](RO/H) PTM responder T3 previous timestamp LSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t3p_lsb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t3p_lsb bdk_pciercx_ptm_res_t3p_lsb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3P_LSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3P_LSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x498ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T3P_LSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T3P_LSB(a) bdk_pciercx_ptm_res_t3p_lsb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T3P_LSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T3P_LSB(a) "PCIERCX_PTM_RES_T3P_LSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T3P_LSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T3P_LSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_t3p_msb
+ *
+ * PCIe RC PTM Responder T3 Previous Timestamp MSB Register
+ */
+union bdk_pciercx_ptm_res_t3p_msb
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_t3p_msb_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t t3p_msb : 32; /**< [ 31: 0](RO/H) PTM responder T3 previous timestamp MSB. */
+#else /* Word 0 - Little Endian */
+ uint32_t t3p_msb : 32; /**< [ 31: 0](RO/H) PTM responder T3 previous timestamp MSB. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_t3p_msb_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_t3p_msb bdk_pciercx_ptm_res_t3p_msb_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3P_MSB(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_T3P_MSB(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x49cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_T3P_MSB", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_T3P_MSB(a) bdk_pciercx_ptm_res_t3p_msb_t
+#define bustype_BDK_PCIERCX_PTM_RES_T3P_MSB(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_T3P_MSB(a) "PCIERCX_PTM_RES_T3P_MSB"
+#define busnum_BDK_PCIERCX_PTM_RES_T3P_MSB(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_T3P_MSB(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ptm_res_tx_latency
+ *
+ * PCIe RC PTM Responder TX Latency Register
+ */
+union bdk_pciercx_ptm_res_tx_latency
+{
+ uint32_t u;
+ struct bdk_pciercx_ptm_res_tx_latency_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t tx_lat : 12; /**< [ 11: 0](R/W) PTM responder TX latency. */
+#else /* Word 0 - Little Endian */
+ uint32_t tx_lat : 12; /**< [ 11: 0](R/W) PTM responder TX latency. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ptm_res_tx_latency_s cn; */
+};
+typedef union bdk_pciercx_ptm_res_tx_latency bdk_pciercx_ptm_res_tx_latency_t;
+
+static inline uint64_t BDK_PCIERCX_PTM_RES_TX_LATENCY(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_PTM_RES_TX_LATENCY(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x4a0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_PTM_RES_TX_LATENCY", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_PTM_RES_TX_LATENCY(a) bdk_pciercx_ptm_res_tx_latency_t
+#define bustype_BDK_PCIERCX_PTM_RES_TX_LATENCY(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_PTM_RES_TX_LATENCY(a) "PCIERCX_PTM_RES_TX_LATENCY"
+#define busnum_BDK_PCIERCX_PTM_RES_TX_LATENCY(a) (a)
+#define arguments_BDK_PCIERCX_PTM_RES_TX_LATENCY(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_queue_status
+ *
+ * PCIe RC Queue Status Register
+ */
+union bdk_pciercx_queue_status
+{
+ uint32_t u;
+ struct bdk_pciercx_queue_status_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t fcltoe : 1; /**< [ 31: 31](R/W) FC latency timer override enable. When this bit is set, the value in
+ PCIERC_QUEUE_STATUS[FCLTOV] will override the FC latency timer value that the
+ core calculates according to the PCIe specification. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t fcltov : 13; /**< [ 28: 16](R/W) FC latency timer override value. When you set PCIERC_QUEUE_STATUS[FCLTOE], the
+ value in this field will override the FC latency timer value that the core
+ calculates according to the PCIe specification. */
+ uint32_t rsqre : 1; /**< [ 15: 15](R/W1C) Receive serialization queue read error. Indicates the serialization queue has
+ attempted to read an incorrectly formatted TLP. */
+ uint32_t rsqwe : 1; /**< [ 14: 14](R/W1C) Receive serialization queue write error. Indicates insufficient buffer space
+ available to write to the serialization queue. */
+ uint32_t rsqne : 1; /**< [ 13: 13](RO/H) Receive serialization queue not empty. Indicates there is data in the serialization queue. */
+ uint32_t reserved_4_12 : 9;
+ uint32_t rqof : 1; /**< [ 3: 3](R/W1C) Receive credit queue overflow. Indicates insufficient buffer space available to
+ write to the P/NP/CPL credit queue. */
+ uint32_t rqne : 1; /**< [ 2: 2](RO/H) Received queue not empty. Indicates there is data in one or more of the receive buffers. */
+ uint32_t trbne : 1; /**< [ 1: 1](RO/H) Transmit retry buffer not empty. Indicates that there is data in the transmit retry buffer. */
+ uint32_t rtlpfccnr : 1; /**< [ 0: 0](RO/H) Received TLP FC credits not returned. Indicates that the PCI Express bus has sent a TLP
+ but has not yet received an UpdateFC DLLP indicating that the credits for that TLP have
+ been restored by the receiver at the other end of the link. */
+#else /* Word 0 - Little Endian */
+ uint32_t rtlpfccnr : 1; /**< [ 0: 0](RO/H) Received TLP FC credits not returned. Indicates that the PCI Express bus has sent a TLP
+ but has not yet received an UpdateFC DLLP indicating that the credits for that TLP have
+ been restored by the receiver at the other end of the link. */
+ uint32_t trbne : 1; /**< [ 1: 1](RO/H) Transmit retry buffer not empty. Indicates that there is data in the transmit retry buffer. */
+ uint32_t rqne : 1; /**< [ 2: 2](RO/H) Received queue not empty. Indicates there is data in one or more of the receive buffers. */
+ uint32_t rqof : 1; /**< [ 3: 3](R/W1C) Receive credit queue overflow. Indicates insufficient buffer space available to
+ write to the P/NP/CPL credit queue. */
+ uint32_t reserved_4_12 : 9;
+ uint32_t rsqne : 1; /**< [ 13: 13](RO/H) Receive serialization queue not empty. Indicates there is data in the serialization queue. */
+ uint32_t rsqwe : 1; /**< [ 14: 14](R/W1C) Receive serialization queue write error. Indicates insufficient buffer space
+ available to write to the serialization queue. */
+ uint32_t rsqre : 1; /**< [ 15: 15](R/W1C) Receive serialization queue read error. Indicates the serialization queue has
+ attempted to read an incorrectly formatted TLP. */
+ uint32_t fcltov : 13; /**< [ 28: 16](R/W) FC latency timer override value. When you set PCIERC_QUEUE_STATUS[FCLTOE], the
+ value in this field will override the FC latency timer value that the core
+ calculates according to the PCIe specification. */
+ uint32_t reserved_29_30 : 2;
+ uint32_t fcltoe : 1; /**< [ 31: 31](R/W) FC latency timer override enable. When this bit is set, the value in
+ PCIERC_QUEUE_STATUS[FCLTOV] will override the FC latency timer value that the
+ core calculates according to the PCIe specification. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_queue_status_s cn; */
+};
+typedef union bdk_pciercx_queue_status bdk_pciercx_queue_status_t;
+
+static inline uint64_t BDK_PCIERCX_QUEUE_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_QUEUE_STATUS(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x73cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_QUEUE_STATUS", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_QUEUE_STATUS(a) bdk_pciercx_queue_status_t
+#define bustype_BDK_PCIERCX_QUEUE_STATUS(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_QUEUE_STATUS(a) "PCIERCX_QUEUE_STATUS"
+#define busnum_BDK_PCIERCX_QUEUE_STATUS(a) (a)
+#define arguments_BDK_PCIERCX_QUEUE_STATUS(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_des_cap_hdr
+ *
+ * PCIe RC Vendor Specific RAS DES Capability Header Register
+ */
+union bdk_pciercx_ras_des_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_des_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_des_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_ras_des_cap_hdr bdk_pciercx_ras_des_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_DES_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_DES_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x318ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_DES_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_DES_CAP_HDR(a) bdk_pciercx_ras_des_cap_hdr_t
+#define bustype_BDK_PCIERCX_RAS_DES_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_DES_CAP_HDR(a) "PCIERCX_RAS_DES_CAP_HDR"
+#define busnum_BDK_PCIERCX_RAS_DES_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_RAS_DES_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_ec_ctl
+ *
+ * PCIe RC Vendor RAS DES Event Counter Control Register
+ */
+union bdk_pciercx_ras_ec_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_ec_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t ev_cntr_data_sel : 12; /**< [ 27: 16](R/W) Event counter data select. This field in conjunction with [EV_CNTR_LANE_SEL]
+ selects PCIERC_RAS_EC_DATA[EV_CNTR_DATA].
+ _ \<27:24\> = Group number (0..0x7).
+ _ \<23:16\> = Event number (0..0x13). */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ev_cntr_lane_sel : 4; /**< [ 11: 8](R/W) Event counter lane select. This field in conjunction with [EV_CNTR_DATA_SEL]
+ indexes the event counter data returned in the PCIERC_RAS_EC_DATA[EV_CNTR_DATA].
+
+ 0x0-0x7 = Lane number.
+ 0x8-0xF = Reserved. */
+ uint32_t ev_cntr_stat : 1; /**< [ 7: 7](RO/H) Event counter status. Returns the enable status of the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL]. */
+ uint32_t reserved_5_6 : 2;
+ uint32_t ev_cntr_en : 3; /**< [ 4: 2](WO) Event counter enable. Enables/disables the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per event off.
+ 0x2 = No change.
+ 0x3 = Per event on.
+ 0x4 = No change.
+ 0x5 = All off.
+ 0x6 = No change.
+ 0x7 = All on. */
+ uint32_t ev_cntr_clr : 2; /**< [ 1: 0](WO) Event counter clear. Clears the event counters
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per clear.
+ 0x2 = No change.
+ 0x3 = All clear. */
+#else /* Word 0 - Little Endian */
+ uint32_t ev_cntr_clr : 2; /**< [ 1: 0](WO) Event counter clear. Clears the event counters
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per clear.
+ 0x2 = No change.
+ 0x3 = All clear. */
+ uint32_t ev_cntr_en : 3; /**< [ 4: 2](WO) Event counter enable. Enables/disables the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL].
+ By default, all event counters are disabled. This field
+ always reads zeros.
+
+ 0x0 = No change.
+ 0x1 = Per event off.
+ 0x2 = No change.
+ 0x3 = Per event on.
+ 0x4 = No change.
+ 0x5 = All off.
+ 0x6 = No change.
+ 0x7 = All on. */
+ uint32_t reserved_5_6 : 2;
+ uint32_t ev_cntr_stat : 1; /**< [ 7: 7](RO/H) Event counter status. Returns the enable status of the event counter
+ selected by [EV_CNTR_DATA_SEL] and [EV_CNTR_LANE_SEL]. */
+ uint32_t ev_cntr_lane_sel : 4; /**< [ 11: 8](R/W) Event counter lane select. This field in conjunction with [EV_CNTR_DATA_SEL]
+ indexes the event counter data returned in the PCIERC_RAS_EC_DATA[EV_CNTR_DATA].
+
+ 0x0-0x7 = Lane number.
+ 0x8-0xF = Reserved. */
+ uint32_t reserved_12_15 : 4;
+ uint32_t ev_cntr_data_sel : 12; /**< [ 27: 16](R/W) Event counter data select. This field in conjunction with [EV_CNTR_LANE_SEL]
+ selects PCIERC_RAS_EC_DATA[EV_CNTR_DATA].
+ _ \<27:24\> = Group number (0..0x7).
+ _ \<23:16\> = Event number (0..0x13). */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_ec_ctl_s cn; */
+};
+typedef union bdk_pciercx_ras_ec_ctl bdk_pciercx_ras_ec_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EC_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EC_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x320ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EC_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EC_CTL(a) bdk_pciercx_ras_ec_ctl_t
+#define bustype_BDK_PCIERCX_RAS_EC_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EC_CTL(a) "PCIERCX_RAS_EC_CTL"
+#define busnum_BDK_PCIERCX_RAS_EC_CTL(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EC_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_ec_data
+ *
+ * PCIe RC Vendor RAS DES Data Register
+ */
+union bdk_pciercx_ras_ec_data
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_ec_data_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ev_cntr_data : 32; /**< [ 31: 0](RO) Event counter data. This field returns data selected by
+ PCIERC_RAS_EC_CTL[EV_CNTR_DATA_SEL]
+ and PCIERC_RAS_EC_CTL[EV_CNTR_LANE_SEL]. */
+#else /* Word 0 - Little Endian */
+ uint32_t ev_cntr_data : 32; /**< [ 31: 0](RO) Event counter data. This field returns data selected by
+ PCIERC_RAS_EC_CTL[EV_CNTR_DATA_SEL]
+ and PCIERC_RAS_EC_CTL[EV_CNTR_LANE_SEL]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_ec_data_s cn; */
+};
+typedef union bdk_pciercx_ras_ec_data bdk_pciercx_ras_ec_data_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EC_DATA(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EC_DATA(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x324ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EC_DATA", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EC_DATA(a) bdk_pciercx_ras_ec_data_t
+#define bustype_BDK_PCIERCX_RAS_EC_DATA(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EC_DATA(a) "PCIERCX_RAS_EC_DATA"
+#define busnum_BDK_PCIERCX_RAS_EC_DATA(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EC_DATA(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl0
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 0 (CRC) Register
+ */
+union bdk_pciercx_ras_einj_ctl0
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t einj0_crc_type : 4; /**< [ 11: 8](R/W) Error injection type. Selects the type of CRC error tp in inserted.
+
+ TX path:
+ 0x0 = New TLP's LCRC error injection.
+ 0x1 = 16bCRC error injection of ACK/NAK DLLP.
+ 0x2 = 16bCRC error injection of Update-FC DLLP.
+ 0x3 = New TLP's ECRC error injection.
+ 0x4 = TLP's FCRC error injection (128b/130b).
+ 0x5 = Parity error of TSOS (128b/130b).
+ 0x6 = Parity error of SKPOS (128b/130b).
+ 0x7 = Reserved.
+
+ RX path:
+ 0x8 = LCRC error injection.
+ 0x9 = ECRC error injection.
+ 0xA - 0xF = Reserved. */
+ uint32_t einj0_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ0_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ0_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ0_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj0_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ0_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ0_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ0_EN] is cleared. */
+ uint32_t einj0_crc_type : 4; /**< [ 11: 8](R/W) Error injection type. Selects the type of CRC error tp in inserted.
+
+ TX path:
+ 0x0 = New TLP's LCRC error injection.
+ 0x1 = 16bCRC error injection of ACK/NAK DLLP.
+ 0x2 = 16bCRC error injection of Update-FC DLLP.
+ 0x3 = New TLP's ECRC error injection.
+ 0x4 = TLP's FCRC error injection (128b/130b).
+ 0x5 = Parity error of TSOS (128b/130b).
+ 0x6 = Parity error of SKPOS (128b/130b).
+ 0x7 = Reserved.
+
+ RX path:
+ 0x8 = LCRC error injection.
+ 0x9 = ECRC error injection.
+ 0xA - 0xF = Reserved. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl0_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl0 bdk_pciercx_ras_einj_ctl0_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x34cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL0(a) bdk_pciercx_ras_einj_ctl0_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL0(a) "PCIERCX_RAS_EINJ_CTL0"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL0(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl1
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 1 (SEQNUM) Register
+ */
+union bdk_pciercx_ras_einj_ctl1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t einj1_bad_seqnum : 13; /**< [ 28: 16](R/W) Bad sequence number. Indicates the value to add/subtract
+ from the naturally-assigned sequence numbers. This value is
+ represented by two's complement.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_9_15 : 7;
+ uint32_t einj1_seqnum_type : 1; /**< [ 8: 8](R/W) Sequence number type. Selects the type of sequence number.
+
+ 0x0 = Insertion of New TLP's SEQ error.
+ 0x1 = Insertion of ACK/NAK DLLP's SEQ error. */
+ uint32_t einj1_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ1_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ1_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ1_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj1_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ1_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ1_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ1_EN] is cleared. */
+ uint32_t einj1_seqnum_type : 1; /**< [ 8: 8](R/W) Sequence number type. Selects the type of sequence number.
+
+ 0x0 = Insertion of New TLP's SEQ error.
+ 0x1 = Insertion of ACK/NAK DLLP's SEQ error. */
+ uint32_t reserved_9_15 : 7;
+ uint32_t einj1_bad_seqnum : 13; /**< [ 28: 16](R/W) Bad sequence number. Indicates the value to add/subtract
+ from the naturally-assigned sequence numbers. This value is
+ represented by two's complement.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl1_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl1 bdk_pciercx_ras_einj_ctl1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x350ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL1(a) bdk_pciercx_ras_einj_ctl1_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL1(a) "PCIERCX_RAS_EINJ_CTL1"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl2
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 2 (DLLP) Register
+ */
+union bdk_pciercx_ras_einj_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t einj2_dllp_type : 2; /**< [ 9: 8](R/W) DLLP type. Selects the type of DLLP errors to be inserted.
+
+ 0x0 = ACK/NAK DLLP transmission block.
+ 0x1 = Update FC DLLP's transmission block.
+ 0x2 = Always transmission for NAK DLLP.
+ 0x3 = Reserved. */
+ uint32_t einj2_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ2_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ2_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ2_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj2_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ2_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ2_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ2_EN] is cleared. */
+ uint32_t einj2_dllp_type : 2; /**< [ 9: 8](R/W) DLLP type. Selects the type of DLLP errors to be inserted.
+
+ 0x0 = ACK/NAK DLLP transmission block.
+ 0x1 = Update FC DLLP's transmission block.
+ 0x2 = Always transmission for NAK DLLP.
+ 0x3 = Reserved. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl2_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl2 bdk_pciercx_ras_einj_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x354ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL2(a) bdk_pciercx_ras_einj_ctl2_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL2(a) "PCIERCX_RAS_EINJ_CTL2"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl3
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 3 (Symbol) Register
+ */
+union bdk_pciercx_ras_einj_ctl3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_11_31 : 21;
+ uint32_t einj3_symbol_type : 3; /**< [ 10: 8](R/W) Error type, 8 b/10 b encoding - Mask K symbol.
+
+ 0x0 = Reserved.
+ 0x1 = COM/PAD(TS1 Order Set).
+ 0x2 = COM/PAD(TS2 Order Set).
+ 0x3 = COM/FTS(FTS Order Set).
+ 0x4 = COM/IDLE(E-Idle Order Set).
+ 0x5 = END/EDB Symbol.
+ 0x6 = STP/SDP Symbol.
+ 0x7 = COM/SKP(SKP Order set). */
+ uint32_t einj3_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ3_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ3_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ3_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj3_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ3_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ3_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ3_EN] is cleared. */
+ uint32_t einj3_symbol_type : 3; /**< [ 10: 8](R/W) Error type, 8 b/10 b encoding - Mask K symbol.
+
+ 0x0 = Reserved.
+ 0x1 = COM/PAD(TS1 Order Set).
+ 0x2 = COM/PAD(TS2 Order Set).
+ 0x3 = COM/FTS(FTS Order Set).
+ 0x4 = COM/IDLE(E-Idle Order Set).
+ 0x5 = END/EDB Symbol.
+ 0x6 = STP/SDP Symbol.
+ 0x7 = COM/SKP(SKP Order set). */
+ uint32_t reserved_11_31 : 21;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl3_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl3 bdk_pciercx_ras_einj_ctl3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x358ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL3(a) bdk_pciercx_ras_einj_ctl3_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL3(a) "PCIERCX_RAS_EINJ_CTL3"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl4
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 4 (FC Credit) Register
+ */
+union bdk_pciercx_ras_einj_ctl4
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t einj4_bad_updfc_val : 13; /**< [ 28: 16](R/W) Bad update-FC credit value. Indicates the value to add/subtract
+ from the UpdateFC credit. The value is represented by two's
+ compliment.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_15 : 1;
+ uint32_t einj4_vc_num : 3; /**< [ 14: 12](R/W) VC number. Indicates the target VC number. */
+ uint32_t reserved_11 : 1;
+ uint32_t einj4_vc_type : 3; /**< [ 10: 8](R/W) Update-FC type. Selects the credit type.
+
+ 0x0 = Posted TLP header credit value control.
+ 0x1 = Non-Posted TLP header credit value control.
+ 0x2 = Completion TLP header credit value control.
+ 0x3 = Reserved.
+ 0x4 = Posted TLP data credit value control.
+ 0x5 = Non-Posted TLP data credit value control.
+ 0x6 = Completion TLP data credit value control.
+ 0x7 = Reserved. */
+ uint32_t einj4_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ4_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ4_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ4_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj4_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ4_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ4_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ4_EN] is cleared. */
+ uint32_t einj4_vc_type : 3; /**< [ 10: 8](R/W) Update-FC type. Selects the credit type.
+
+ 0x0 = Posted TLP header credit value control.
+ 0x1 = Non-Posted TLP header credit value control.
+ 0x2 = Completion TLP header credit value control.
+ 0x3 = Reserved.
+ 0x4 = Posted TLP data credit value control.
+ 0x5 = Non-Posted TLP data credit value control.
+ 0x6 = Completion TLP data credit value control.
+ 0x7 = Reserved. */
+ uint32_t reserved_11 : 1;
+ uint32_t einj4_vc_num : 3; /**< [ 14: 12](R/W) VC number. Indicates the target VC number. */
+ uint32_t reserved_15 : 1;
+ uint32_t einj4_bad_updfc_val : 13; /**< [ 28: 16](R/W) Bad update-FC credit value. Indicates the value to add/subtract
+ from the UpdateFC credit. The value is represented by two's
+ compliment.
+
+ 0x0FFF = +4095.
+
+ 0x0002 = +2.
+ 0x0001 = +1.
+ 0x0000 = 0.
+ 0x1FFF = -1.
+ 0x1FFE = -2.
+
+ 0x1001 = -4095. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl4_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl4 bdk_pciercx_ras_einj_ctl4_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x35cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL4(a) bdk_pciercx_ras_einj_ctl4_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL4(a) "PCIERCX_RAS_EINJ_CTL4"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL4(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl5
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 5 (Specific TLP) Register
+ */
+union bdk_pciercx_ras_einj_ctl5
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl5_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_9_31 : 23;
+ uint32_t einj5_sp_tlp : 1; /**< [ 8: 8](R/W) Specified TLP. Selects the specified TLP to be inserted.
+
+ 0x0 = Generates duplicate TLPs by handling ACK DLLP as NAK DLLP.
+ 0x1 = Generates nullified TLP (Original TLP will be stored in retry buffer). */
+ uint32_t einj5_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ5_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ5_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ5_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj5_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ5_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ5_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ5_EN] is cleared. */
+ uint32_t einj5_sp_tlp : 1; /**< [ 8: 8](R/W) Specified TLP. Selects the specified TLP to be inserted.
+
+ 0x0 = Generates duplicate TLPs by handling ACK DLLP as NAK DLLP.
+ 0x1 = Generates nullified TLP (Original TLP will be stored in retry buffer). */
+ uint32_t reserved_9_31 : 23;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl5_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl5 bdk_pciercx_ras_einj_ctl5_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL5(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL5(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x360ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL5", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL5(a) bdk_pciercx_ras_einj_ctl5_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL5(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL5(a) "PCIERCX_RAS_EINJ_CTL5"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL5(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL5(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgp0
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H0) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgp0
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgp0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h0 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV0[EINJ6_CHG_VAL_H0]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h0 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV0[EINJ6_CHG_VAL_H0]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgp0_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgp0 bdk_pciercx_ras_einj_ctl6chgp0_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x384ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGP0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(a) bdk_pciercx_ras_einj_ctl6chgp0_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(a) "PCIERCX_RAS_EINJ_CTL6CHGP0"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGP0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgp1
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H1) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgp1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgp1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h1 : 32; /**< [ 31: 0](R/W) Packet change point second DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV1[EINJ6_CHG_VAL_H1]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h1 : 32; /**< [ 31: 0](R/W) Packet change point second DWORD.
+ Specifies which TX TLP header DWORD0 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV1[EINJ6_CHG_VAL_H1]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgp1_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgp1 bdk_pciercx_ras_einj_ctl6chgp1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x388ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGP1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(a) bdk_pciercx_ras_einj_ctl6chgp1_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(a) "PCIERCX_RAS_EINJ_CTL6CHGP1"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGP1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgp2
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H2) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgp2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgp2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h2 : 32; /**< [ 31: 0](R/W) Packet change point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV2[EINJ6_CHG_VAL_H2]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h2 : 32; /**< [ 31: 0](R/W) Packet change point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV2[EINJ6_CHG_VAL_H2]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgp2_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgp2 bdk_pciercx_ras_einj_ctl6chgp2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x38cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(a) bdk_pciercx_ras_einj_ctl6chgp2_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(a) "PCIERCX_RAS_EINJ_CTL6CHGP2"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgp3
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Point H3) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgp3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgp3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_pt_h3 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD3 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV3[EINJ6_CHG_VAL_H3]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_pt_h3 : 32; /**< [ 31: 0](R/W) Packet change point first DWORD.
+ Specifies which TX TLP header DWORD3 bits to replace
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CHGV3[EINJ6_CHG_VAL_H3]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgp3_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgp3 bdk_pciercx_ras_einj_ctl6chgp3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x390ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGP3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(a) bdk_pciercx_ras_einj_ctl6chgp3_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(a) "PCIERCX_RAS_EINJ_CTL6CHGP3"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGP3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgv0
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H0) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgv0
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgv0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h0 : 32; /**< [ 31: 0](R/W) Packet change value first DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD0 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP0[EINJ6_CHG_PT_H0].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h0 : 32; /**< [ 31: 0](R/W) Packet change value first DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD0 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP0[EINJ6_CHG_PT_H0].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgv0_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgv0 bdk_pciercx_ras_einj_ctl6chgv0_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x394ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGV0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(a) bdk_pciercx_ras_einj_ctl6chgv0_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(a) "PCIERCX_RAS_EINJ_CTL6CHGV0"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGV0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgv1
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H1) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgv1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgv1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h1 : 32; /**< [ 31: 0](R/W) Packet change value second DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD1 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP1[EINJ6_CHG_PT_H1].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h1 : 32; /**< [ 31: 0](R/W) Packet change value second DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD1 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP1[EINJ6_CHG_PT_H1].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgv1_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgv1 bdk_pciercx_ras_einj_ctl6chgv1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x398ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGV1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(a) bdk_pciercx_ras_einj_ctl6chgv1_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(a) "PCIERCX_RAS_EINJ_CTL6CHGV1"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGV1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgv2
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H2) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgv2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgv2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h2 : 32; /**< [ 31: 0](R/W) Packet change value third DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD2 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP2[EINJ6_CHG_PT_H2].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set." */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h2 : 32; /**< [ 31: 0](R/W) Packet change value third DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD2 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP2[EINJ6_CHG_PT_H2].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set." */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgv2_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgv2 bdk_pciercx_ras_einj_ctl6chgv2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x39cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGV2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(a) bdk_pciercx_ras_einj_ctl6chgv2_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(a) "PCIERCX_RAS_EINJ_CTL6CHGV2"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGV2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6chgv3
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Change Value H3) Register
+ */
+union bdk_pciercx_ras_einj_ctl6chgv3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6chgv3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_chg_val_h3 : 32; /**< [ 31: 0](R/W) Packet change value fourth DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD3 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP3[EINJ6_CHG_PT_H3].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_chg_val_h3 : 32; /**< [ 31: 0](R/W) Packet change value fourth DWORD.
+ Specifies replacement values for the TX TLP header
+ DWORD3 bits defined in the PCIERC_RAS_EINJ_CTL6CHGP3[EINJ6_CHG_PT_H3].
+ Only applies when PCIERC_RAS_EINJ_CTL6PE[EINJ6_INV_CNTRL] is not set. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6chgv3_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6chgv3 bdk_pciercx_ras_einj_ctl6chgv3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3a0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CHGV3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(a) bdk_pciercx_ras_einj_ctl6chgv3_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(a) "PCIERCX_RAS_EINJ_CTL6CHGV3"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CHGV3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpp0
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H0) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpp0
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpp0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h0 : 32; /**< [ 31: 0](R/W) Packet compare point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV0[EINJ6_COM_VAL_H0].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV0[EINJ6_COM_VAL_H0] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h0 : 32; /**< [ 31: 0](R/W) Packet compare point first DWORD.
+ Specifies which TX TLP header DWORD0 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV0[EINJ6_COM_VAL_H0].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV0[EINJ6_COM_VAL_H0] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpp0_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpp0 bdk_pciercx_ras_einj_ctl6cmpp0_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x364ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPP0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(a) bdk_pciercx_ras_einj_ctl6cmpp0_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(a) "PCIERCX_RAS_EINJ_CTL6CMPP0"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPP0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpp1
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H1) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpp1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpp1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h1 : 32; /**< [ 31: 0](R/W) Packet compare point second DWORD.
+ Specifies which TX TLP header DWORD1 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV1[EINJ6_COM_VAL_H1].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV1[EINJ6_COM_VAL_H1] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h1 : 32; /**< [ 31: 0](R/W) Packet compare point second DWORD.
+ Specifies which TX TLP header DWORD1 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV1[EINJ6_COM_VAL_H1].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV1[EINJ6_COM_VAL_H1] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpp1_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpp1 bdk_pciercx_ras_einj_ctl6cmpp1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x368ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPP1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(a) bdk_pciercx_ras_einj_ctl6cmpp1_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(a) "PCIERCX_RAS_EINJ_CTL6CMPP1"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPP1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpp2
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H2) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpp2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpp2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h2 : 32; /**< [ 31: 0](R/W) Packet compare point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV2[EINJ6_COM_VAL_H2].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV2[EINJ6_COM_VAL_H2] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h2 : 32; /**< [ 31: 0](R/W) Packet compare point third DWORD.
+ Specifies which TX TLP header DWORD2 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV2[EINJ6_COM_VAL_H2].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV2[EINJ6_COM_VAL_H2] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpp2_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpp2 bdk_pciercx_ras_einj_ctl6cmpp2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x36cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(a) bdk_pciercx_ras_einj_ctl6cmpp2_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(a) "PCIERCX_RAS_EINJ_CTL6CMPP2"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpp3
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Point H3) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpp3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpp3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_pt_h3 : 32; /**< [ 31: 0](R/W) Packet compare point fourth DWORD.
+ Specifies which TX TLP header DWORD3 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV3[EINJ6_COM_VAL_H3].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV3[EINJ6_COM_VAL_H3] match, an error is inserted into the TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_pt_h3 : 32; /**< [ 31: 0](R/W) Packet compare point fourth DWORD.
+ Specifies which TX TLP header DWORD3 bits to compare
+ with the corresponding bits in PCIERC_RAS_EINJ_CTL6CMPV3[EINJ6_COM_VAL_H3].
+ When all specified bits (in the TX TLP header and
+ PCIERC_RAS_EINJ_CTL6CMPV3[EINJ6_COM_VAL_H3] match, an error is inserted into the TLP. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpp3_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpp3 bdk_pciercx_ras_einj_ctl6cmpp3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x370ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPP3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(a) bdk_pciercx_ras_einj_ctl6cmpp3_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(a) "PCIERCX_RAS_EINJ_CTL6CMPP3"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPP3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpv0
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H0) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpv0
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpv0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h0 : 32; /**< [ 31: 0](R/W) Packet compare value first DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD0 bits specified in PCIERC_RAS_EINJ_CTL6CMPP0[EINJ6_COM_PT_H0]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h0 : 32; /**< [ 31: 0](R/W) Packet compare value first DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD0 bits specified in PCIERC_RAS_EINJ_CTL6CMPP0[EINJ6_COM_PT_H0]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpv0_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpv0 bdk_pciercx_ras_einj_ctl6cmpv0_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x374ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPV0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(a) bdk_pciercx_ras_einj_ctl6cmpv0_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(a) "PCIERCX_RAS_EINJ_CTL6CMPV0"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPV0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpv1
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H1) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpv1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpv1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h1 : 32; /**< [ 31: 0](R/W) Packet compare value second DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD1 bits specified in PCIERC_RAS_EINJ_CTL6CMPP1[EINJ6_COM_PT_H1]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h1 : 32; /**< [ 31: 0](R/W) Packet compare value second DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD1 bits specified in PCIERC_RAS_EINJ_CTL6CMPP1[EINJ6_COM_PT_H1]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpv1_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpv1 bdk_pciercx_ras_einj_ctl6cmpv1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x378ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPV1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(a) bdk_pciercx_ras_einj_ctl6cmpv1_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(a) "PCIERCX_RAS_EINJ_CTL6CMPV1"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPV1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpv2
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H2) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpv2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpv2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h2 : 32; /**< [ 31: 0](R/W) Packet compare value third DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD2 bits specified in the PCIERC_RAS_EINJ_CTL6CMPP2[EINJ6_COM_PT_H2]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h2 : 32; /**< [ 31: 0](R/W) Packet compare value third DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD2 bits specified in the PCIERC_RAS_EINJ_CTL6CMPP2[EINJ6_COM_PT_H2]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpv2_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpv2 bdk_pciercx_ras_einj_ctl6cmpv2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x37cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPV2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(a) bdk_pciercx_ras_einj_ctl6cmpv2_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(a) "PCIERCX_RAS_EINJ_CTL6CMPV2"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPV2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6cmpv3
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Compare Value H3) Register
+ */
+union bdk_pciercx_ras_einj_ctl6cmpv3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6cmpv3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t einj6_com_val_h3 : 32; /**< [ 31: 0](R/W) Packet compare value fourth DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD3 bits specified in the PCIERC_RAS_EINJ_CTL6CMPP3[EINJ6_COM_PT_H3]. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_com_val_h3 : 32; /**< [ 31: 0](R/W) Packet compare value fourth DWORD.
+ Specifies the value to compare against TX the TLP header
+ DWORD3 bits specified in the PCIERC_RAS_EINJ_CTL6CMPP3[EINJ6_COM_PT_H3]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6cmpv3_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6cmpv3 bdk_pciercx_ras_einj_ctl6cmpv3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x380ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6CMPV3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(a) bdk_pciercx_ras_einj_ctl6cmpv3_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(a) "PCIERCX_RAS_EINJ_CTL6CMPV3"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6CMPV3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_ctl6pe
+ *
+ * PCIe RC Vendor RAS DES Error Injection Control 6 (Packet Error) Register
+ */
+union bdk_pciercx_ras_einj_ctl6pe
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_ctl6pe_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_12_31 : 20;
+ uint32_t einj6_pkt_typ : 3; /**< [ 11: 9](R/W) Packet type. Selects the TLP packets to inject errors into.
+
+ 0x0 = TLP header.
+ 0x1 = TLP prefix 1st 4-DWORDs.
+ 0x2 = TLP prefix 2nd 4-DWORDs.
+ 0x3 - 0x7 = Reserved. */
+ uint32_t einj6_inv_cntrl : 1; /**< [ 8: 8](R/W) Inverted error injection control.
+
+ 0x0 = EINJ6_CHG_VAL_H[0/1/2/3] is used to replace bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3].
+ 0x1 = EINJ6_CHG_VAL_H[0/1/2/3] is ignored and inverts bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3]. */
+ uint32_t einj6_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ6_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ6_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ6_EN] is cleared. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj6_cnt : 8; /**< [ 7: 0](R/W) Error injection count. Indicates the number of errors.
+ This register is decremented when errors are inserted.
+
+ If the counter value is 0x1 and error is inserted,
+ PCIERC_RAS_EINJ_EN[EINJ6_EN] returns zero.
+
+ If the counter value is 0x0 and PCIERC_RAS_EINJ_EN[EINJ6_EN] is set,
+ errors are inserted until PCIERC_RAS_EINJ_EN[EINJ6_EN] is cleared. */
+ uint32_t einj6_inv_cntrl : 1; /**< [ 8: 8](R/W) Inverted error injection control.
+
+ 0x0 = EINJ6_CHG_VAL_H[0/1/2/3] is used to replace bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3].
+ 0x1 = EINJ6_CHG_VAL_H[0/1/2/3] is ignored and inverts bits specified by
+ EINJ6_CHG_PT_H[0/1/2/3]. */
+ uint32_t einj6_pkt_typ : 3; /**< [ 11: 9](R/W) Packet type. Selects the TLP packets to inject errors into.
+
+ 0x0 = TLP header.
+ 0x1 = TLP prefix 1st 4-DWORDs.
+ 0x2 = TLP prefix 2nd 4-DWORDs.
+ 0x3 - 0x7 = Reserved. */
+ uint32_t reserved_12_31 : 20;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_ctl6pe_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_ctl6pe bdk_pciercx_ras_einj_ctl6pe_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6PE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_CTL6PE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3a4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_CTL6PE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_CTL6PE(a) bdk_pciercx_ras_einj_ctl6pe_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_CTL6PE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_CTL6PE(a) "PCIERCX_RAS_EINJ_CTL6PE"
+#define busnum_BDK_PCIERCX_RAS_EINJ_CTL6PE(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_CTL6PE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_einj_en
+ *
+ * PCIe RC Vendor RAS DES Error Injection Enable Register
+ */
+union bdk_pciercx_ras_einj_en
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_einj_en_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_7_31 : 25;
+ uint32_t einj6_en : 1; /**< [ 6: 6](R/W) Specific TLP error injection enable. Enables insertion of errors into the
+ packet selected. For more details, refer to PCIERC_RAS_EINJ_CTL6CMPP0. */
+ uint32_t einj5_en : 1; /**< [ 5: 5](R/W) TLP duplicate/nullify error injection enable. Enables insertion of duplicate/nullified
+ TLPs. For more details, refer to PCIERC_RAS_EINJ_CTL5. */
+ uint32_t einj4_en : 1; /**< [ 4: 4](R/W) FC credit update error injection enable. Enables insertion of errors into
+ Updated FCs. See PCIERC_RAS_EINJ_CTL4. */
+ uint32_t einj3_en : 1; /**< [ 3: 3](R/W) Symbol datak mask or sync header error enable. Enables data masking of special
+ symbols or the breaking of the sync header. See PCIERC_RAS_EINJ_CTL3. */
+ uint32_t einj2_en : 1; /**< [ 2: 2](R/W) DLLP error injection enable. enables insertion of DLLP errors.
+ See PCIERC_RAS_EINJ_CTL2. */
+ uint32_t einj1_en : 1; /**< [ 1: 1](R/W) Sequence number error injection enable. Enables insertion of errors into
+ sequence numbers.
+ See PCIERC_RAS_EINJ_CTL1. */
+ uint32_t einj0_en : 1; /**< [ 0: 0](R/W) CRC error injection enable. Enables insertion of errors into various CRC.
+ See PCIERC_RAS_EINJ_CTL0. */
+#else /* Word 0 - Little Endian */
+ uint32_t einj0_en : 1; /**< [ 0: 0](R/W) CRC error injection enable. Enables insertion of errors into various CRC.
+ See PCIERC_RAS_EINJ_CTL0. */
+ uint32_t einj1_en : 1; /**< [ 1: 1](R/W) Sequence number error injection enable. Enables insertion of errors into
+ sequence numbers.
+ See PCIERC_RAS_EINJ_CTL1. */
+ uint32_t einj2_en : 1; /**< [ 2: 2](R/W) DLLP error injection enable. enables insertion of DLLP errors.
+ See PCIERC_RAS_EINJ_CTL2. */
+ uint32_t einj3_en : 1; /**< [ 3: 3](R/W) Symbol datak mask or sync header error enable. Enables data masking of special
+ symbols or the breaking of the sync header. See PCIERC_RAS_EINJ_CTL3. */
+ uint32_t einj4_en : 1; /**< [ 4: 4](R/W) FC credit update error injection enable. Enables insertion of errors into
+ Updated FCs. See PCIERC_RAS_EINJ_CTL4. */
+ uint32_t einj5_en : 1; /**< [ 5: 5](R/W) TLP duplicate/nullify error injection enable. Enables insertion of duplicate/nullified
+ TLPs. For more details, refer to PCIERC_RAS_EINJ_CTL5. */
+ uint32_t einj6_en : 1; /**< [ 6: 6](R/W) Specific TLP error injection enable. Enables insertion of errors into the
+ packet selected. For more details, refer to PCIERC_RAS_EINJ_CTL6CMPP0. */
+ uint32_t reserved_7_31 : 25;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_einj_en_s cn; */
+};
+typedef union bdk_pciercx_ras_einj_en bdk_pciercx_ras_einj_en_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_EN(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_EINJ_EN(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x348ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_EINJ_EN", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_EINJ_EN(a) bdk_pciercx_ras_einj_en_t
+#define bustype_BDK_PCIERCX_RAS_EINJ_EN(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_EINJ_EN(a) "PCIERCX_RAS_EINJ_EN"
+#define busnum_BDK_PCIERCX_RAS_EINJ_EN(a) (a)
+#define arguments_BDK_PCIERCX_RAS_EINJ_EN(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_hdr
+ *
+ * PCIe RC Vendor RAS DES Header Register
+ */
+union bdk_pciercx_ras_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_hdr_s cn; */
+};
+typedef union bdk_pciercx_ras_hdr bdk_pciercx_ras_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x31cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_HDR(a) bdk_pciercx_ras_hdr_t
+#define bustype_BDK_PCIERCX_RAS_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_HDR(a) "PCIERCX_RAS_HDR"
+#define busnum_BDK_PCIERCX_RAS_HDR(a) (a)
+#define arguments_BDK_PCIERCX_RAS_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_ctl1
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Control 1 Register
+ */
+union bdk_pciercx_ras_sd_ctl1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_ctl1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t lp_intv : 2; /**< [ 23: 22](R/W) Low power entry interval time.
+ Interval time that the core starts monitoring RXELECIDLE
+ signal after L0s/L1/L2 entry. You should set the value
+ according to the latency from receiving EIOS to,
+ RXELECIDLE assertion at the PHY
+
+ 0x0 = 40ns.
+ 0x1 = 160ns.
+ 0x2 = 320ns.
+ 0x3 - 640ns. */
+ uint32_t tx_eios_num : 2; /**< [ 21: 20](R/W) Number of TX EIOS.
+ This register sets the number of transmit EIOS for L0s/L1
+ entry and disable/loopback/hot-reset exit. The core selects
+ the greater value between this register and the value defined
+ by the PCI-SIG specification.
+
+ Gen1 or Gen3
+ 0x0 = 1.
+ 0x1 = 4.
+ 0x2 = 8.
+ 0x3 - 16.
+
+ Gen2
+ 0x0 = 2.
+ 0x1 = 8.
+ 0x2 = 16.
+ 0x3 - 32. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t force_detect_lane_en : 1; /**< [ 16: 16](R/W) Force detect lane enable.
+ When this bit is set, the core ignores receiver detection from
+ PHY during LTSSM detect state and uses
+ [FORCE_DETECT_LANE]. */
+ uint32_t force_detect_lane : 16; /**< [ 15: 0](R/W) Force detect lane.
+ When set, the core
+ ignores receiver detection from PHY during LTSSM detect
+ state and uses this value instead.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_detect_lane : 16; /**< [ 15: 0](R/W) Force detect lane.
+ When set, the core
+ ignores receiver detection from PHY during LTSSM detect
+ state and uses this value instead.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7. */
+ uint32_t force_detect_lane_en : 1; /**< [ 16: 16](R/W) Force detect lane enable.
+ When this bit is set, the core ignores receiver detection from
+ PHY during LTSSM detect state and uses
+ [FORCE_DETECT_LANE]. */
+ uint32_t reserved_17_19 : 3;
+ uint32_t tx_eios_num : 2; /**< [ 21: 20](R/W) Number of TX EIOS.
+ This register sets the number of transmit EIOS for L0s/L1
+ entry and disable/loopback/hot-reset exit. The core selects
+ the greater value between this register and the value defined
+ by the PCI-SIG specification.
+
+ Gen1 or Gen3
+ 0x0 = 1.
+ 0x1 = 4.
+ 0x2 = 8.
+ 0x3 - 16.
+
+ Gen2
+ 0x0 = 2.
+ 0x1 = 8.
+ 0x2 = 16.
+ 0x3 - 32. */
+ uint32_t lp_intv : 2; /**< [ 23: 22](R/W) Low power entry interval time.
+ Interval time that the core starts monitoring RXELECIDLE
+ signal after L0s/L1/L2 entry. You should set the value
+ according to the latency from receiving EIOS to,
+ RXELECIDLE assertion at the PHY
+
+ 0x0 = 40ns.
+ 0x1 = 160ns.
+ 0x2 = 320ns.
+ 0x3 - 640ns. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_ctl1_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_ctl1 bdk_pciercx_ras_sd_ctl1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_CTL1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_CTL1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3b8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_CTL1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_CTL1(a) bdk_pciercx_ras_sd_ctl1_t
+#define bustype_BDK_PCIERCX_RAS_SD_CTL1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_CTL1(a) "PCIERCX_RAS_SD_CTL1"
+#define busnum_BDK_PCIERCX_RAS_SD_CTL1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_CTL1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_ctl2
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Control 2 Register
+ */
+union bdk_pciercx_ras_sd_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_17_31 : 15;
+ uint32_t fr_err_rcvy_dis : 1; /**< [ 16: 16](R/W) Framing error recovery disable.
+ This bit disables a transition to recovery state when a framing
+ error has occurred. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t dir_lpbslv_to_exit : 1; /**< [ 10: 10](R/W) Direct loopback slave to exit.
+ When set and the LTSSM is in loopback slave active state,
+ the LTSSM transitions to the loopback slave exit state. */
+ uint32_t dir_polcmp_to_det : 1; /**< [ 9: 9](R/W) Direct Polling.Compliance to detect.
+ When this bit is set and the LTSSM is in polling compliance
+ state, the LTSSM transitions to detect state. */
+ uint32_t dir_recidle_config : 1; /**< [ 8: 8](R/W) Direct Recovery.Idle to configuration.
+ When this bit is set and the LTSSM is in recovery idle state,
+ the LTSSM transitions to configuration state. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t noack_force_lnkdn : 1; /**< [ 2: 2](R/W) Force link down.
+ When this bit is set and the core detects REPLY_NUM rolling
+ over 4 times, the LTSSM transitions to detect state. */
+ uint32_t rcry_req : 1; /**< [ 1: 1](WO) Recovery request.
+ When this bit is set in L0 or L0s, the LTSSM starts
+ transitioning to recovery state. This request does not cause
+ a speed change or reequalization. This bit always reads
+ a zero. */
+ uint32_t hold_ltssm : 1; /**< [ 0: 0](R/W) Hold and release LTSSM.
+ For as long as this is set, the core stays in the current
+ LTSSM. */
+#else /* Word 0 - Little Endian */
+ uint32_t hold_ltssm : 1; /**< [ 0: 0](R/W) Hold and release LTSSM.
+ For as long as this is set, the core stays in the current
+ LTSSM. */
+ uint32_t rcry_req : 1; /**< [ 1: 1](WO) Recovery request.
+ When this bit is set in L0 or L0s, the LTSSM starts
+ transitioning to recovery state. This request does not cause
+ a speed change or reequalization. This bit always reads
+ a zero. */
+ uint32_t noack_force_lnkdn : 1; /**< [ 2: 2](R/W) Force link down.
+ When this bit is set and the core detects REPLY_NUM rolling
+ over 4 times, the LTSSM transitions to detect state. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t dir_recidle_config : 1; /**< [ 8: 8](R/W) Direct Recovery.Idle to configuration.
+ When this bit is set and the LTSSM is in recovery idle state,
+ the LTSSM transitions to configuration state. */
+ uint32_t dir_polcmp_to_det : 1; /**< [ 9: 9](R/W) Direct Polling.Compliance to detect.
+ When this bit is set and the LTSSM is in polling compliance
+ state, the LTSSM transitions to detect state. */
+ uint32_t dir_lpbslv_to_exit : 1; /**< [ 10: 10](R/W) Direct loopback slave to exit.
+ When set and the LTSSM is in loopback slave active state,
+ the LTSSM transitions to the loopback slave exit state. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t fr_err_rcvy_dis : 1; /**< [ 16: 16](R/W) Framing error recovery disable.
+ This bit disables a transition to recovery state when a framing
+ error has occurred. */
+ uint32_t reserved_17_31 : 15;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_ctl2_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_ctl2 bdk_pciercx_ras_sd_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3bcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_CTL2(a) bdk_pciercx_ras_sd_ctl2_t
+#define bustype_BDK_PCIERCX_RAS_SD_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_CTL2(a) "PCIERCX_RAS_SD_CTL2"
+#define busnum_BDK_PCIERCX_RAS_SD_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_ctl1
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 1 Register
+ */
+union bdk_pciercx_ras_sd_eq_ctl1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_ctl1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t fom_target : 8; /**< [ 31: 24](R/W) FOM target.
+ Indicates figure of merit target criteria value of EQ
+ master (DSP in EQ Phase3/USP in EQ Phase2).
+ This field is only valid when PCIERC_GEN3_EQ_CTL[FM] is
+ 0x1 (figure of merit). */
+ uint32_t fom_target_en : 1; /**< [ 23: 23](R/W) FOM target enable.
+ Enables the [FOM_TARGET] field. */
+ uint32_t reserved_18_22 : 5;
+ uint32_t eval_interval_time : 2; /**< [ 17: 16](R/W) Eval interval time.
+ Indicates interval time of RxEqEval assertion.
+ 0x0 = 500 ns.
+ 0x1 = 1 us.
+ 0x2 = 2 us.
+ 0x3 = 4 us.
+
+ This field is used for EQ master (DSP in EQ Phase3/USP in
+ EQ Phase2). */
+ uint32_t reserved_10_15 : 6;
+ uint32_t ext_eq_timeout : 2; /**< [ 9: 8](R/W) Extends EQ Phase2/3 timeout.
+ This field is used when the ltssm is in Recovery.EQ2/3.
+ When this field is set, the value of the EQ2/3 timeout is
+ extended.
+
+ EQ master (DSP in EQ Phase 3/USP in EQ Phaase2)
+ 0x0 = 24 ms (default).
+ 0x1 = 48 ms
+ 0x2 = 240 ms.
+ 0x3 = No timeout.
+
+ EQ slave (DSP in EQ Phase 2/USP in EQ Phaase3)
+ 0x0 = 32 ms (default).
+ 0x1 = 56 ms
+ 0x2 = 248 ms.
+ 0x3 = No timeout. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t eq_rate_sel : 1; /**< [ 4: 4](R/W) EQ status rate select.
+ Setting this field in conjunction with [EQ_LANE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = 8.0 GT/s speed.
+ 0x1 = 16.0 GT/s speed. */
+ uint32_t eq_lane_sel : 4; /**< [ 3: 0](R/W) EQ status lane select.
+ Setting this field in conjunction with [EQ_RATE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+ _ ...
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_lane_sel : 4; /**< [ 3: 0](R/W) EQ status lane select.
+ Setting this field in conjunction with [EQ_RATE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+ _ ...
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+ uint32_t eq_rate_sel : 1; /**< [ 4: 4](R/W) EQ status rate select.
+ Setting this field in conjunction with [EQ_LANE_SEL]
+ determines the per-lane silicon debug EQ status data
+ returned by the SD_EQ_CONTROL[2/3] and
+ SD_EQ_STATUS[1/2/3] viewport registers.
+ 0x0 = 8.0 GT/s speed.
+ 0x1 = 16.0 GT/s speed. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t ext_eq_timeout : 2; /**< [ 9: 8](R/W) Extends EQ Phase2/3 timeout.
+ This field is used when the ltssm is in Recovery.EQ2/3.
+ When this field is set, the value of the EQ2/3 timeout is
+ extended.
+
+ EQ master (DSP in EQ Phase 3/USP in EQ Phaase2)
+ 0x0 = 24 ms (default).
+ 0x1 = 48 ms
+ 0x2 = 240 ms.
+ 0x3 = No timeout.
+
+ EQ slave (DSP in EQ Phase 2/USP in EQ Phaase3)
+ 0x0 = 32 ms (default).
+ 0x1 = 56 ms
+ 0x2 = 248 ms.
+ 0x3 = No timeout. */
+ uint32_t reserved_10_15 : 6;
+ uint32_t eval_interval_time : 2; /**< [ 17: 16](R/W) Eval interval time.
+ Indicates interval time of RxEqEval assertion.
+ 0x0 = 500 ns.
+ 0x1 = 1 us.
+ 0x2 = 2 us.
+ 0x3 = 4 us.
+
+ This field is used for EQ master (DSP in EQ Phase3/USP in
+ EQ Phase2). */
+ uint32_t reserved_18_22 : 5;
+ uint32_t fom_target_en : 1; /**< [ 23: 23](R/W) FOM target enable.
+ Enables the [FOM_TARGET] field. */
+ uint32_t fom_target : 8; /**< [ 31: 24](R/W) FOM target.
+ Indicates figure of merit target criteria value of EQ
+ master (DSP in EQ Phase3/USP in EQ Phase2).
+ This field is only valid when PCIERC_GEN3_EQ_CTL[FM] is
+ 0x1 (figure of merit). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_ctl1_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_ctl1 bdk_pciercx_ras_sd_eq_ctl1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3e8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_CTL1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_CTL1(a) bdk_pciercx_ras_sd_eq_ctl1_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_CTL1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_CTL1(a) "PCIERCX_RAS_SD_EQ_CTL1"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_CTL1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_CTL1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_ctl2
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 2 Register
+ */
+union bdk_pciercx_ras_sd_eq_ctl2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_ctl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t force_loc_txpre_en : 1; /**< [ 30: 30](R/W) Force local transmitter preset enable. Enables [FORCE_LOC_TXPRE]. */
+ uint32_t force_loc_rxhint_en : 1; /**< [ 29: 29](R/W) Force local receiver preset hint enable. Enables [FORCE_LOC_RXHINT]. */
+ uint32_t force_loc_txcoef_en : 1; /**< [ 28: 28](R/W) Force local transmitter coefficient enable.
+ Enables the following fields:
+ [FORCE_LOC_TXPRE_CUR],
+ [FORCE_LOC_TX_CUR],
+ [FORCE_LOC_TXPOST_CUR]. */
+ uint32_t force_loc_txpre : 4; /**< [ 27: 24](R/W) Force local transmitter preset.
+ Indicates initial preset value of USP in EQ slave (EQ Phase2)
+ instead of receiving EQ TS2. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t force_loc_rxhint : 3; /**< [ 20: 18](R/W) Force local receiver preset hint.
+ Indicates the RxPresetHint value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of received or set value. */
+ uint32_t force_loc_txpost_cur : 6; /**< [ 17: 12](R/W) Force local transmitter postcursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_tx_cur : 6; /**< [ 11: 6](R/W) Force local transmitter cursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_txpre_cur : 6; /**< [ 5: 0](R/W) Force local transmitter precursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_loc_txpre_cur : 6; /**< [ 5: 0](R/W) Force local transmitter precursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_tx_cur : 6; /**< [ 11: 6](R/W) Force local transmitter cursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_txpost_cur : 6; /**< [ 17: 12](R/W) Force local transmitter postcursor.
+ Indicates the coefficient value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of the value instructed
+ from link partner. */
+ uint32_t force_loc_rxhint : 3; /**< [ 20: 18](R/W) Force local receiver preset hint.
+ Indicates the RxPresetHint value of EQ slave (DSP in EQ
+ Phase2/USP in EQ Phase3), instead of received or set value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t force_loc_txpre : 4; /**< [ 27: 24](R/W) Force local transmitter preset.
+ Indicates initial preset value of USP in EQ slave (EQ Phase2)
+ instead of receiving EQ TS2. */
+ uint32_t force_loc_txcoef_en : 1; /**< [ 28: 28](R/W) Force local transmitter coefficient enable.
+ Enables the following fields:
+ [FORCE_LOC_TXPRE_CUR],
+ [FORCE_LOC_TX_CUR],
+ [FORCE_LOC_TXPOST_CUR]. */
+ uint32_t force_loc_rxhint_en : 1; /**< [ 29: 29](R/W) Force local receiver preset hint enable. Enables [FORCE_LOC_RXHINT]. */
+ uint32_t force_loc_txpre_en : 1; /**< [ 30: 30](R/W) Force local transmitter preset enable. Enables [FORCE_LOC_TXPRE]. */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_ctl2_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_ctl2 bdk_pciercx_ras_sd_eq_ctl2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3ecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_CTL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_CTL2(a) bdk_pciercx_ras_sd_eq_ctl2_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_CTL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_CTL2(a) "PCIERCX_RAS_SD_EQ_CTL2"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_CTL2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_CTL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_ctl3
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Control 3 Register
+ */
+union bdk_pciercx_ras_sd_eq_ctl3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_ctl3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_29_31 : 3;
+ uint32_t force_rem_txcoef_en : 1; /**< [ 28: 28](R/W) Force remote transmitter coefficient enable as selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Enables the following fields:
+ [FORCE_REM_TXPRE_CUR],
+ [FORCE_REM_TX_CUR],
+ [FORCE_REM_TXPOST_CUR]. */
+ uint32_t reserved_18_27 : 10;
+ uint32_t force_rem_txpost_cur : 6; /**< [ 17: 12](R/W) Force remote transmitter postcursor as selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_tx_cur : 6; /**< [ 11: 6](R/W) Force remote transmitter cursors selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_txpre_cur : 6; /**< [ 5: 0](RAZ) Force remote transmitter precursors selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+#else /* Word 0 - Little Endian */
+ uint32_t force_rem_txpre_cur : 6; /**< [ 5: 0](RAZ) Force remote transmitter precursors selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_tx_cur : 6; /**< [ 11: 6](R/W) Force remote transmitter cursors selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t force_rem_txpost_cur : 6; /**< [ 17: 12](R/W) Force remote transmitter postcursor as selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Indicates the coefficient value of EQ master (DSP in EQ
+ Phase3/USP in EQ Phase2), instead of the value instructed
+ from link partner. */
+ uint32_t reserved_18_27 : 10;
+ uint32_t force_rem_txcoef_en : 1; /**< [ 28: 28](R/W) Force remote transmitter coefficient enable as selected by
+ PCIERC_RAS_SD_EQ_CTL1[EQ_LANE_SEL].
+ Enables the following fields:
+ [FORCE_REM_TXPRE_CUR],
+ [FORCE_REM_TX_CUR],
+ [FORCE_REM_TXPOST_CUR]. */
+ uint32_t reserved_29_31 : 3;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_ctl3_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_ctl3 bdk_pciercx_ras_sd_eq_ctl3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_CTL3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3f0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_CTL3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_CTL3(a) bdk_pciercx_ras_sd_eq_ctl3_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_CTL3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_CTL3(a) "PCIERCX_RAS_SD_EQ_CTL3"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_CTL3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_CTL3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_stat1
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 1 Register
+ */
+union bdk_pciercx_ras_sd_eq_stat1
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_stat1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t eq_reject_event : 1; /**< [ 7: 7](RO/H) EQ reject event.
+ Indicates that the core receives two consecutive TS1 OS
+ w/Reject=1b during EQ master phase (DSP in EQ
+ Phase3/USP in EQ Phase2). This bit is automatically cleared
+ when the core starts EQ master phase again. */
+ uint32_t eq_rulec_viol : 1; /**< [ 6: 6](RO/H) EQ rule C violation.
+ Indicates that coefficient rule C violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rule C
+ correspond to the rules c) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t eq_ruleb_viol : 1; /**< [ 5: 5](RO/H) EQ rule B violation.
+ Indicates that coefficient rule B violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules B
+ correspond to the rules b) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t eq_rulea_viol : 1; /**< [ 4: 4](RO/H) EQ rule A violation.
+ Indicates that coefficient rule A violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules A
+ correspond to the rules a) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t reserved_3 : 1;
+ uint32_t eq_conv_info : 2; /**< [ 2: 1](RO/H) EQ convergence info.
+ Indicates equalization convergence information.
+ 0x0 = Equalization is not attempted.
+ 0x1 = Equalization finished successfully.
+ 0x2 = Equalization finished unsuccessfully.
+ 0x3 = Reserved.
+ This bit is automatically cleared when the core starts EQ
+ master phase again. */
+ uint32_t eq_sequence : 1; /**< [ 0: 0](RO) EQ sequence.
+ Indicates that the core is starting the equalization sequence. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_sequence : 1; /**< [ 0: 0](RO) EQ sequence.
+ Indicates that the core is starting the equalization sequence. */
+ uint32_t eq_conv_info : 2; /**< [ 2: 1](RO/H) EQ convergence info.
+ Indicates equalization convergence information.
+ 0x0 = Equalization is not attempted.
+ 0x1 = Equalization finished successfully.
+ 0x2 = Equalization finished unsuccessfully.
+ 0x3 = Reserved.
+ This bit is automatically cleared when the core starts EQ
+ master phase again. */
+ uint32_t reserved_3 : 1;
+ uint32_t eq_rulea_viol : 1; /**< [ 4: 4](RO/H) EQ rule A violation.
+ Indicates that coefficient rule A violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules A
+ correspond to the rules a) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t eq_ruleb_viol : 1; /**< [ 5: 5](RO/H) EQ rule B violation.
+ Indicates that coefficient rule B violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rules B
+ correspond to the rules b) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t eq_rulec_viol : 1; /**< [ 6: 6](RO/H) EQ rule C violation.
+ Indicates that coefficient rule C violation is detected in the
+ values provided by PHY using direction change method
+ during EQ master phase (DSP in EQ Phase3/USP in EQ
+ Phase2). The coefficients rule C
+ correspond to the rules c) from section "Rules for
+ Transmitter Coefficients" in the PCI Express Base Specification.
+ This bit is automatically cleared when the controller starts
+ EQ master phase again. */
+ uint32_t eq_reject_event : 1; /**< [ 7: 7](RO/H) EQ reject event.
+ Indicates that the core receives two consecutive TS1 OS
+ w/Reject=1b during EQ master phase (DSP in EQ
+ Phase3/USP in EQ Phase2). This bit is automatically cleared
+ when the core starts EQ master phase again. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_stat1_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_stat1 bdk_pciercx_ras_sd_eq_stat1_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3f8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_STAT1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_STAT1(a) bdk_pciercx_ras_sd_eq_stat1_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_STAT1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_STAT1(a) "PCIERCX_RAS_SD_EQ_STAT1"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_STAT1(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_STAT1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_stat2
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 2 Register
+ */
+union bdk_pciercx_ras_sd_eq_stat2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_stat2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t eq_loc_fom_val : 8; /**< [ 31: 24](RO/H) EQ local figure of merit.
+ Indicates local maximum figure of merit value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t eq_loc_rxhint : 3; /**< [ 20: 18](RO/H) EQ local receiver preset hint.
+ Indicates local receiver preset hint value. */
+ uint32_t eq_loc_post_cur : 6; /**< [ 17: 12](RO/H) EQ local postcursor.
+ Indicates local post cursor coefficient value. */
+ uint32_t eq_loc_cur : 6; /**< [ 11: 6](RO/H) EQ local cursor.
+ Indicates local cursor coefficient value. */
+ uint32_t eq_loc_pre_cur : 6; /**< [ 5: 0](RO/H) EQ local precursor.
+ Indicates local precursor coefficient value. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_loc_pre_cur : 6; /**< [ 5: 0](RO/H) EQ local precursor.
+ Indicates local precursor coefficient value. */
+ uint32_t eq_loc_cur : 6; /**< [ 11: 6](RO/H) EQ local cursor.
+ Indicates local cursor coefficient value. */
+ uint32_t eq_loc_post_cur : 6; /**< [ 17: 12](RO/H) EQ local postcursor.
+ Indicates local post cursor coefficient value. */
+ uint32_t eq_loc_rxhint : 3; /**< [ 20: 18](RO/H) EQ local receiver preset hint.
+ Indicates local receiver preset hint value. */
+ uint32_t reserved_21_23 : 3;
+ uint32_t eq_loc_fom_val : 8; /**< [ 31: 24](RO/H) EQ local figure of merit.
+ Indicates local maximum figure of merit value. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_stat2_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_stat2 bdk_pciercx_ras_sd_eq_stat2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3fcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_STAT2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_STAT2(a) bdk_pciercx_ras_sd_eq_stat2_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_STAT2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_STAT2(a) "PCIERCX_RAS_SD_EQ_STAT2"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_STAT2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_STAT2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_eq_stat3
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug EQ Status 3 Register
+ */
+union bdk_pciercx_ras_sd_eq_stat3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_eq_stat3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_30_31 : 2;
+ uint32_t eq_rem_fs : 6; /**< [ 29: 24](RO/H) EQ remote FS.
+ Indicates remote FS value. */
+ uint32_t eq_rem_lf : 6; /**< [ 23: 18](RO/H) EQ remote LF.
+ Indicates remote LF value. */
+ uint32_t eq_rem_post_cur : 6; /**< [ 17: 12](RO/H) EQ remote postcursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_cur : 6; /**< [ 11: 6](RO/H) EQ remote cursor.
+ Indicates remote cursor coefficient value. */
+ uint32_t eq_rem_pre_cur : 6; /**< [ 5: 0](RO/H) EQ remote precursor.
+ Indicates remote postcursor coefficient value. */
+#else /* Word 0 - Little Endian */
+ uint32_t eq_rem_pre_cur : 6; /**< [ 5: 0](RO/H) EQ remote precursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_cur : 6; /**< [ 11: 6](RO/H) EQ remote cursor.
+ Indicates remote cursor coefficient value. */
+ uint32_t eq_rem_post_cur : 6; /**< [ 17: 12](RO/H) EQ remote postcursor.
+ Indicates remote postcursor coefficient value. */
+ uint32_t eq_rem_lf : 6; /**< [ 23: 18](RO/H) EQ remote LF.
+ Indicates remote LF value. */
+ uint32_t eq_rem_fs : 6; /**< [ 29: 24](RO/H) EQ remote FS.
+ Indicates remote FS value. */
+ uint32_t reserved_30_31 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_eq_stat3_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_eq_stat3 bdk_pciercx_ras_sd_eq_stat3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_EQ_STAT3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x400ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_EQ_STAT3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_EQ_STAT3(a) bdk_pciercx_ras_sd_eq_stat3_t
+#define bustype_BDK_PCIERCX_RAS_SD_EQ_STAT3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_EQ_STAT3(a) "PCIERCX_RAS_SD_EQ_STAT3"
+#define busnum_BDK_PCIERCX_RAS_SD_EQ_STAT3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_EQ_STAT3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_l1lane
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L1Lane Register
+ */
+union bdk_pciercx_ras_sd_l1lane
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_l1lane_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t deskew_ptr : 8; /**< [ 31: 24](RO/H) Deskew pointer.
+ Indicates deskew pointer of internal deskew buffer of
+ selected lane number ([LANE_SELECT]). */
+ uint32_t reserved_21_23 : 3;
+ uint32_t pipe_txelecidle : 1; /**< [ 20: 20](RO/H) PIPE:TxElecIdle.
+ Indicates PIPE TXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxelecidle : 1; /**< [ 19: 19](RO/H) PIPE:RxElecIdle.
+ Indicates PIPE RXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxvalid : 1; /**< [ 18: 18](RO/H) PIPE:RxValid.
+ Indicates PIPE RXVALID signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_det_lane : 1; /**< [ 17: 17](RO/H) PIPE:Detect Lane.
+ Indicates whether PHY indicates receiver detection or not on
+ selected lane number ([LANE_SELECT]). */
+ uint32_t pipe_rxpol : 1; /**< [ 16: 16](RO/H) PIPE:RxPolarity.
+ Indicates PIPE RXPOLARITY signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t reserved_4_15 : 12;
+ uint32_t lane_select : 4; /**< [ 3: 0](R/W) Lane select.
+ Lane select register for silicon debug status register of
+ Layer1-PerLane.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t lane_select : 4; /**< [ 3: 0](R/W) Lane select.
+ Lane select register for silicon debug status register of
+ Layer1-PerLane.
+ 0x0 = Lane0.
+ 0x1 = Lane1.
+ 0x2 = Lane2.
+
+ 0x7 = Lane7.
+ 0x8-0xF = Reserved. */
+ uint32_t reserved_4_15 : 12;
+ uint32_t pipe_rxpol : 1; /**< [ 16: 16](RO/H) PIPE:RxPolarity.
+ Indicates PIPE RXPOLARITY signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_det_lane : 1; /**< [ 17: 17](RO/H) PIPE:Detect Lane.
+ Indicates whether PHY indicates receiver detection or not on
+ selected lane number ([LANE_SELECT]). */
+ uint32_t pipe_rxvalid : 1; /**< [ 18: 18](RO/H) PIPE:RxValid.
+ Indicates PIPE RXVALID signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_rxelecidle : 1; /**< [ 19: 19](RO/H) PIPE:RxElecIdle.
+ Indicates PIPE RXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t pipe_txelecidle : 1; /**< [ 20: 20](RO/H) PIPE:TxElecIdle.
+ Indicates PIPE TXELECIDLE signal of selected lane
+ number ([LANE_SELECT]). */
+ uint32_t reserved_21_23 : 3;
+ uint32_t deskew_ptr : 8; /**< [ 31: 24](RO/H) Deskew pointer.
+ Indicates deskew pointer of internal deskew buffer of
+ selected lane number ([LANE_SELECT]). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_l1lane_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_l1lane bdk_pciercx_ras_sd_l1lane_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_L1LANE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_L1LANE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_L1LANE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_L1LANE(a) bdk_pciercx_ras_sd_l1lane_t
+#define bustype_BDK_PCIERCX_RAS_SD_L1LANE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_L1LANE(a) "PCIERCX_RAS_SD_L1LANE"
+#define busnum_BDK_PCIERCX_RAS_SD_L1LANE(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_L1LANE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_l1ltssm
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L1LTSSM Register
+ */
+union bdk_pciercx_ras_sd_l1ltssm
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_l1ltssm_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ltssm_var : 16; /**< [ 31: 16](RO/H) LTSSM variable.
+ Indicates internal LTSSM variables defined in the PCI
+ Express base specification.
+ 0x0 = directed_speed change.
+ 0x1 = changed_speed_recovery.
+ 0x2 = successful_speed_negotiation.
+ 0x3 = upconfigure_capable; Set to one if both ports advertised
+ the UpConfigure capability in the last Config.Complete.
+ 0x4 = select_deemphasis.
+ 0x5 = start_equalization_w_preset.
+ 0x6 = equalization_done_8GT_data_rate.
+ 0x7 = equalization_done_16GT_data_rate.
+ 0x8-0xF = idle_to_rlock_transitioned. */
+ uint32_t lane_rev : 1; /**< [ 15: 15](RO/H) Lane reversal operation.
+ Receiver detected lane reversal. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t pipe_pwr_dwn : 3; /**< [ 10: 8](RO/H) PIPE:PowerDown.
+ Indicates PIPE PowerDown signal. */
+ uint32_t framing_err : 1; /**< [ 7: 7](R/W1C) Framing error.
+ Indicates framing error detection status. */
+ uint32_t framing_err_ptr : 7; /**< [ 6: 0](RO) First framing error pointer.
+ Identifies the first framing error using the following
+ encoding. The field contents are only valid value when
+ [FRAMING_ERR] = 1.
+
+ Received unexpected framing token:
+ 0x1 = When non-STP/SDP/IDL token was received and it
+ was not in TLP/DLLP reception.
+ 0x02 = When current token was not a valid EDB token and
+ previous token was an EDB. (128/256 bit core only).
+ 0x03 = When SDP token was received but not expected.
+ 0x04 = When STP token was received but not expected.
+ 0x05 = When EDS token was expected but not received or
+ whenever an EDS token was received but not expected.
+ 0x06 = When a framing error was detected in the deskew
+ block while a packet has been in progress in token_finder.
+ Received Unexpected STP Token
+ 0x11 = When framing CRC in STP token did not match.
+ 0x12 = When framing parity in STP token did not match.
+ 0x13 = When framing TLP length in STP token was
+ smaller than 5 DWORDs.
+
+ \<page\>
+
+ Received unexpected block:
+ 0x21 = When receiving an OS block following SDS in datastream state.n.
+ 0x22 = When data block followed by OS block different.
+ from SKP, EI, EIE in datastream state.
+ 0x23 = When block with an undefined block type in datastream state.
+ 0x24 = When data stream without data over three cycles in datastream state.
+ 0x25 = When OS block during data stream in datastream state.
+ 0x26 = When RxStatus error was detected in datastream state.
+ 0x27 = When not all active lanes receiving SKP OS starting
+ at same cycle time in SKPOS state.
+ 0x28 = When a two-block timeout occurs for SKP OS in SKPOS state.
+ 0x29 = When receiving consecutive OS blocks within a data stream in SKPOS state.n.
+ 0x2A = When Phy status error was detected in SKPOS state.
+ 0x2B = When not all active lanes receiving EIOS starting at
+ same cycle time in EIOS state.
+ 0x2C = When at least one symbol from the first 4 symbols
+ is not EIOS symbol in EIOS state (CX_NB=2 only).
+ 0x2D = When not all active lanes receiving EIEOS starting
+ at same cycle time in EIEOS state.
+ 0x2E = When not full 16 eieos symbols are received in EIEOS state.
+
+ All other values not listed above are reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t framing_err_ptr : 7; /**< [ 6: 0](RO) First framing error pointer.
+ Identifies the first framing error using the following
+ encoding. The field contents are only valid value when
+ [FRAMING_ERR] = 1.
+
+ Received unexpected framing token:
+ 0x1 = When non-STP/SDP/IDL token was received and it
+ was not in TLP/DLLP reception.
+ 0x02 = When current token was not a valid EDB token and
+ previous token was an EDB. (128/256 bit core only).
+ 0x03 = When SDP token was received but not expected.
+ 0x04 = When STP token was received but not expected.
+ 0x05 = When EDS token was expected but not received or
+ whenever an EDS token was received but not expected.
+ 0x06 = When a framing error was detected in the deskew
+ block while a packet has been in progress in token_finder.
+ Received Unexpected STP Token
+ 0x11 = When framing CRC in STP token did not match.
+ 0x12 = When framing parity in STP token did not match.
+ 0x13 = When framing TLP length in STP token was
+ smaller than 5 DWORDs.
+
+ \<page\>
+
+ Received unexpected block:
+ 0x21 = When receiving an OS block following SDS in datastream state.n.
+ 0x22 = When data block followed by OS block different.
+ from SKP, EI, EIE in datastream state.
+ 0x23 = When block with an undefined block type in datastream state.
+ 0x24 = When data stream without data over three cycles in datastream state.
+ 0x25 = When OS block during data stream in datastream state.
+ 0x26 = When RxStatus error was detected in datastream state.
+ 0x27 = When not all active lanes receiving SKP OS starting
+ at same cycle time in SKPOS state.
+ 0x28 = When a two-block timeout occurs for SKP OS in SKPOS state.
+ 0x29 = When receiving consecutive OS blocks within a data stream in SKPOS state.n.
+ 0x2A = When Phy status error was detected in SKPOS state.
+ 0x2B = When not all active lanes receiving EIOS starting at
+ same cycle time in EIOS state.
+ 0x2C = When at least one symbol from the first 4 symbols
+ is not EIOS symbol in EIOS state (CX_NB=2 only).
+ 0x2D = When not all active lanes receiving EIEOS starting
+ at same cycle time in EIEOS state.
+ 0x2E = When not full 16 eieos symbols are received in EIEOS state.
+
+ All other values not listed above are reserved. */
+ uint32_t framing_err : 1; /**< [ 7: 7](R/W1C) Framing error.
+ Indicates framing error detection status. */
+ uint32_t pipe_pwr_dwn : 3; /**< [ 10: 8](RO/H) PIPE:PowerDown.
+ Indicates PIPE PowerDown signal. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t lane_rev : 1; /**< [ 15: 15](RO/H) Lane reversal operation.
+ Receiver detected lane reversal. */
+ uint32_t ltssm_var : 16; /**< [ 31: 16](RO/H) LTSSM variable.
+ Indicates internal LTSSM variables defined in the PCI
+ Express base specification.
+ 0x0 = directed_speed change.
+ 0x1 = changed_speed_recovery.
+ 0x2 = successful_speed_negotiation.
+ 0x3 = upconfigure_capable; Set to one if both ports advertised
+ the UpConfigure capability in the last Config.Complete.
+ 0x4 = select_deemphasis.
+ 0x5 = start_equalization_w_preset.
+ 0x6 = equalization_done_8GT_data_rate.
+ 0x7 = equalization_done_16GT_data_rate.
+ 0x8-0xF = idle_to_rlock_transitioned. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_l1ltssm_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_l1ltssm bdk_pciercx_ras_sd_l1ltssm_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_L1LTSSM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_L1LTSSM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3ccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_L1LTSSM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_L1LTSSM(a) bdk_pciercx_ras_sd_l1ltssm_t
+#define bustype_BDK_PCIERCX_RAS_SD_L1LTSSM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_L1LTSSM(a) "PCIERCX_RAS_SD_L1LTSSM"
+#define busnum_BDK_PCIERCX_RAS_SD_L1LTSSM(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_L1LTSSM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_statusl2
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L2 Register
+ */
+union bdk_pciercx_ras_sd_statusl2
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_statusl2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_28_31 : 4;
+ uint32_t fc_init2 : 1; /**< [ 27: 27](RO) Indicates the core is in FC_INIT2(VC0) state. */
+ uint32_t fc_init1 : 1; /**< [ 26: 26](RO) Indicates the core is in FC_INIT1(VC0) state. */
+ uint32_t dlcmsm : 2; /**< [ 25: 24](RO/H) Indicates the current DLCMSM.
+ 0x0 = DL_INACTIVE.
+ 0x1 = DL_FC_INIT.
+ 0x2 = Reserved.
+ 0x3 = DL_ACTIVE. */
+ uint32_t rx_ack_seq_no : 12; /**< [ 23: 12](RO/H) RX ACK sequence number.
+ Indicates the ack sequence number which is updated by receiving
+ ACK/NAK DLLP. */
+ uint32_t tx_ack_seq_no : 12; /**< [ 11: 0](RO/H) TX ACK sequence number.
+ Indicates next transmit sequence number for transmit TLP. */
+#else /* Word 0 - Little Endian */
+ uint32_t tx_ack_seq_no : 12; /**< [ 11: 0](RO/H) TX ACK sequence number.
+ Indicates next transmit sequence number for transmit TLP. */
+ uint32_t rx_ack_seq_no : 12; /**< [ 23: 12](RO/H) RX ACK sequence number.
+ Indicates the ack sequence number which is updated by receiving
+ ACK/NAK DLLP. */
+ uint32_t dlcmsm : 2; /**< [ 25: 24](RO/H) Indicates the current DLCMSM.
+ 0x0 = DL_INACTIVE.
+ 0x1 = DL_FC_INIT.
+ 0x2 = Reserved.
+ 0x3 = DL_ACTIVE. */
+ uint32_t fc_init1 : 1; /**< [ 26: 26](RO) Indicates the core is in FC_INIT1(VC0) state. */
+ uint32_t fc_init2 : 1; /**< [ 27: 27](RO) Indicates the core is in FC_INIT2(VC0) state. */
+ uint32_t reserved_28_31 : 4;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_statusl2_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_statusl2 bdk_pciercx_ras_sd_statusl2_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3d4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_STATUSL2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_STATUSL2(a) bdk_pciercx_ras_sd_statusl2_t
+#define bustype_BDK_PCIERCX_RAS_SD_STATUSL2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_STATUSL2(a) "PCIERCX_RAS_SD_STATUSL2"
+#define busnum_BDK_PCIERCX_RAS_SD_STATUSL2(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_STATUSL2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_statusl3
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L3 Register
+ */
+union bdk_pciercx_ras_sd_statusl3
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_statusl3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t mftlp_status : 1; /**< [ 7: 7](R/W1C) Malformed TLP status.
+ Indicates malformed TLP has occurred. */
+ uint32_t mftlp_ptr : 7; /**< [ 6: 0](RO) First malformed TLP error pointer.
+ Indicates the element of the received first malformed TLP.
+ This pointer is validated by [MFTLP_STATUS].
+ 0x01 = AtomicOp address alignment.
+ 0x02 = AtomicOp operand.
+ 0x03 = AtomicOp byte enable.
+ 0x04 = TLP length miss match.
+ 0x05 = Max payload size.
+ 0x06 = Message TLP without TC0.
+ 0x07 = Invalid TC.
+ 0x08 = Unexpected route bit in message TLP.
+ 0x09 = Unexpected CRS status in completion TLP.
+ 0x0A = Byte enable.
+ 0x0B = Memory address 4KB boundary.
+ 0x0C = TLP prefix rules.
+ 0x0D = Translation request rules.
+ 0x0E = Invalid TLP type.
+ 0x0F = Completion rules.
+ 0x10-0x7E = Reserved.
+ 0x7F = Application. */
+#else /* Word 0 - Little Endian */
+ uint32_t mftlp_ptr : 7; /**< [ 6: 0](RO) First malformed TLP error pointer.
+ Indicates the element of the received first malformed TLP.
+ This pointer is validated by [MFTLP_STATUS].
+ 0x01 = AtomicOp address alignment.
+ 0x02 = AtomicOp operand.
+ 0x03 = AtomicOp byte enable.
+ 0x04 = TLP length miss match.
+ 0x05 = Max payload size.
+ 0x06 = Message TLP without TC0.
+ 0x07 = Invalid TC.
+ 0x08 = Unexpected route bit in message TLP.
+ 0x09 = Unexpected CRS status in completion TLP.
+ 0x0A = Byte enable.
+ 0x0B = Memory address 4KB boundary.
+ 0x0C = TLP prefix rules.
+ 0x0D = Translation request rules.
+ 0x0E = Invalid TLP type.
+ 0x0F = Completion rules.
+ 0x10-0x7E = Reserved.
+ 0x7F = Application. */
+ uint32_t mftlp_status : 1; /**< [ 7: 7](R/W1C) Malformed TLP status.
+ Indicates malformed TLP has occurred. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_statusl3_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_statusl3 bdk_pciercx_ras_sd_statusl3_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3dcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_STATUSL3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_STATUSL3(a) bdk_pciercx_ras_sd_statusl3_t
+#define bustype_BDK_PCIERCX_RAS_SD_STATUSL3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_STATUSL3(a) "PCIERCX_RAS_SD_STATUSL3"
+#define busnum_BDK_PCIERCX_RAS_SD_STATUSL3(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_STATUSL3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_statusl3fc
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status L2 Register
+ */
+union bdk_pciercx_ras_sd_statusl3fc
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_statusl3fc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t credit_data1 : 12; /**< [ 31: 20](RO/H) Credit data 1.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit allocated value.
+ TX = Credit limit value. This value is valid when DLCMSM=0x3(DL_ACTIVE). */
+ uint32_t credit_data0 : 12; /**< [ 19: 8](RO/H) Credit data 0.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit received value.
+ TX = Credit consumed value. */
+ uint32_t reserved_7 : 1;
+ uint32_t credit_sel_hd : 1; /**< [ 6: 6](R/W) Credit select (HeaderData).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and
+ [CREDIT_SEL_TLP_TYPE] viewport-select fields determines
+ that data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = Header credit.
+ 0x1 = Data credit. */
+ uint32_t credit_sel_tlp_type : 2; /**< [ 5: 4](R/W) Credit select (TLP Type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and [CREDIT_SEL_HD]
+ viewport-select fields determines that data that is returned
+ by the [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = Posted.
+ 0x1 = Non-posted.
+ 0x2 = Completion.
+ 0x3 = Reserved. */
+ uint32_t credit_sel_credit_type : 1; /**< [ 3: 3](R/W) Credit select (credit type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_TLP_TYPE], and [CREDIT_SEL_HD] viewport-select
+ fields determines that data that is returned by the
+ [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = RX.
+ 0x1 = TX. */
+ uint32_t credit_sel_vc : 3; /**< [ 2: 0](R/W) Credit select (VC).
+ This field in conjunction with the
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields determines that
+ data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = VC0.
+ 0x1 = VC1.
+ 0x2 = VC2.
+ ...
+ 0x7 = VC7. */
+#else /* Word 0 - Little Endian */
+ uint32_t credit_sel_vc : 3; /**< [ 2: 0](R/W) Credit select (VC).
+ This field in conjunction with the
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields determines that
+ data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = VC0.
+ 0x1 = VC1.
+ 0x2 = VC2.
+ ...
+ 0x7 = VC7. */
+ uint32_t credit_sel_credit_type : 1; /**< [ 3: 3](R/W) Credit select (credit type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_TLP_TYPE], and [CREDIT_SEL_HD] viewport-select
+ fields determines that data that is returned by the
+ [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = RX.
+ 0x1 = TX. */
+ uint32_t credit_sel_tlp_type : 2; /**< [ 5: 4](R/W) Credit select (TLP Type).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and [CREDIT_SEL_HD]
+ viewport-select fields determines that data that is returned
+ by the [CREDIT_DATA0] and [CREDIT_DATA1] data fields.
+ 0x0 = Posted.
+ 0x1 = Non-posted.
+ 0x2 = Completion.
+ 0x3 = Reserved. */
+ uint32_t credit_sel_hd : 1; /**< [ 6: 6](R/W) Credit select (HeaderData).
+ This field in conjunction with the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], and
+ [CREDIT_SEL_TLP_TYPE] viewport-select fields determines
+ that data that is returned by the [CREDIT_DATA0] and
+ [CREDIT_DATA1] data fields.
+ 0x0 = Header credit.
+ 0x1 = Data credit. */
+ uint32_t reserved_7 : 1;
+ uint32_t credit_data0 : 12; /**< [ 19: 8](RO/H) Credit data 0.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit received value.
+ TX = Credit consumed value. */
+ uint32_t credit_data1 : 12; /**< [ 31: 20](RO/H) Credit data 1.
+ Current FC credit data selected by the [CREDIT_SEL_VC],
+ [CREDIT_SEL_CREDIT_TYPE], [CREDIT_SEL_TLP_TYPE],
+ and [CREDIT_SEL_HD] viewport-select fields.
+ RX = Credit allocated value.
+ TX = Credit limit value. This value is valid when DLCMSM=0x3(DL_ACTIVE). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_statusl3fc_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_statusl3fc bdk_pciercx_ras_sd_statusl3fc_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL3FC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSL3FC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3d8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_STATUSL3FC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_STATUSL3FC(a) bdk_pciercx_ras_sd_statusl3fc_t
+#define bustype_BDK_PCIERCX_RAS_SD_STATUSL3FC(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_STATUSL3FC(a) "PCIERCX_RAS_SD_STATUSL3FC"
+#define busnum_BDK_PCIERCX_RAS_SD_STATUSL3FC(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_STATUSL3FC(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_sd_statuspm
+ *
+ * PCIe RC Vendor RAS DES Silicon Debug Status PM Register
+ */
+union bdk_pciercx_ras_sd_statuspm
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_sd_statuspm_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t latched_nfts : 8; /**< [ 23: 16](RO/H) Latched N_FTS.
+ Indicates the value of N_FTS in the received TS ordered
+ sets from the link partner. */
+ uint32_t l1sub_state : 3; /**< [ 15: 13](RO/H) Indicates the internal L1Sub state machine state.
+ Internal:
+ 0x0 = Idle state.
+ 0x1 = Wait for aux_clk_active.
+ 0x2 = Wait for pclkack.
+ 0x3 = Wait for clkreq.
+ 0x4 = Check clkreq_in_n is de-asserted for t_power_off time.
+ 0x5 = L1 substate, turn off txcommonmode circuits (L1.2 only)
+ and rx electrical idle detection circuits.
+ 0x6 = Locally/remotely initiated exit, assert pclkreq, wait for pclkack.
+ 0x7 = Wait for pclkack when aborting an attempt to enter L1_N. */
+ uint32_t pme_rsnd_flag : 1; /**< [ 12: 12](RO) PME resend flag.
+ When the DUT sends a PM_PME message TLP, the DUT
+ sets PME_Status bit. If host software does not clear
+ PME_Status bit for 100ms (+50%/-5%), the DUT resends the
+ PM_PME message. This bit indicates that a PM_PME was
+ resent. */
+ uint32_t int_pm_sstate : 4; /**< [ 11: 8](RO/H) Internal PM state (slave).
+ Indicates internal state machine of power management
+ slave controller.
+ 0x00 = S_IDLE.
+ 0x01 = S_RESPOND_NAK.
+ 0x02 = S_BLOCK_TLP.
+ 0x03 = S_WAIT_LAST_TLP_ACK.
+ 0x04 = S_WAIT_EIDLE.
+ 0x08 = S_LINK_ENTR_L1.
+ 0x09 = S_L1.
+ 0x0A = S_L1_EXIT.
+ 0x0B = S_L23RDY.
+ 0x0C = S_LINK_ENTR_L23.
+ 0x0D = S_L23RDY_WAIT4ALIVE.
+ 0x0F = S_L23RDY_WAIT4IDLE.
+ 0x10 = S_WAIT_LAST_PMDLLP.
+ 0x10-0x1F = Reserved. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t int_pm_mstate : 5; /**< [ 4: 0](RO/H) Internal PM state (master).
+ Indicates internal state machine of power management
+ master controller.
+ 0x00 = IDLE.
+ 0x01 = L0.
+ 0x02 = L0S.
+ 0x03 = ENTER_L0S.
+ 0x04 = L0S_EXIT.
+ 0x08 = L1.
+ 0x09 = L1_BLOCK_TLP.
+ 0x0A = L1_WAIT_LAST_TLP_ACK.
+ 0x0B = L1_WAIT_PMDLLP_ACK.
+ 0x0C = L1_LINK_ENTR_L1.
+ 0x0D = L1_EXIT.
+ 0x0F = PREP_4L1.
+ 0x10 = L23_BLOCK_TLP.
+ 0x11 = L23_WAIT_LAST_TLP_ACK.
+ 0x12 = L23_WAIT_PMDLLP_ACK.
+ 0x13 = L23_ENTR_L23.
+ 0x14 = L23RDY.
+ 0x15 = PREP_4L23.
+ 0x16 = L23RDY_WAIT4ALIVE.
+ 0x17 = L0S_BLOCK_TLP.
+ 0x18 = WAIT_LAST_PMDLLP.
+ 0x19 = WAIT_DSTATE_UPDATE.
+ 0x20-0x1F = Reserved. */
+#else /* Word 0 - Little Endian */
+ uint32_t int_pm_mstate : 5; /**< [ 4: 0](RO/H) Internal PM state (master).
+ Indicates internal state machine of power management
+ master controller.
+ 0x00 = IDLE.
+ 0x01 = L0.
+ 0x02 = L0S.
+ 0x03 = ENTER_L0S.
+ 0x04 = L0S_EXIT.
+ 0x08 = L1.
+ 0x09 = L1_BLOCK_TLP.
+ 0x0A = L1_WAIT_LAST_TLP_ACK.
+ 0x0B = L1_WAIT_PMDLLP_ACK.
+ 0x0C = L1_LINK_ENTR_L1.
+ 0x0D = L1_EXIT.
+ 0x0F = PREP_4L1.
+ 0x10 = L23_BLOCK_TLP.
+ 0x11 = L23_WAIT_LAST_TLP_ACK.
+ 0x12 = L23_WAIT_PMDLLP_ACK.
+ 0x13 = L23_ENTR_L23.
+ 0x14 = L23RDY.
+ 0x15 = PREP_4L23.
+ 0x16 = L23RDY_WAIT4ALIVE.
+ 0x17 = L0S_BLOCK_TLP.
+ 0x18 = WAIT_LAST_PMDLLP.
+ 0x19 = WAIT_DSTATE_UPDATE.
+ 0x20-0x1F = Reserved. */
+ uint32_t reserved_5_7 : 3;
+ uint32_t int_pm_sstate : 4; /**< [ 11: 8](RO/H) Internal PM state (slave).
+ Indicates internal state machine of power management
+ slave controller.
+ 0x00 = S_IDLE.
+ 0x01 = S_RESPOND_NAK.
+ 0x02 = S_BLOCK_TLP.
+ 0x03 = S_WAIT_LAST_TLP_ACK.
+ 0x04 = S_WAIT_EIDLE.
+ 0x08 = S_LINK_ENTR_L1.
+ 0x09 = S_L1.
+ 0x0A = S_L1_EXIT.
+ 0x0B = S_L23RDY.
+ 0x0C = S_LINK_ENTR_L23.
+ 0x0D = S_L23RDY_WAIT4ALIVE.
+ 0x0F = S_L23RDY_WAIT4IDLE.
+ 0x10 = S_WAIT_LAST_PMDLLP.
+ 0x10-0x1F = Reserved. */
+ uint32_t pme_rsnd_flag : 1; /**< [ 12: 12](RO) PME resend flag.
+ When the DUT sends a PM_PME message TLP, the DUT
+ sets PME_Status bit. If host software does not clear
+ PME_Status bit for 100ms (+50%/-5%), the DUT resends the
+ PM_PME message. This bit indicates that a PM_PME was
+ resent. */
+ uint32_t l1sub_state : 3; /**< [ 15: 13](RO/H) Indicates the internal L1Sub state machine state.
+ Internal:
+ 0x0 = Idle state.
+ 0x1 = Wait for aux_clk_active.
+ 0x2 = Wait for pclkack.
+ 0x3 = Wait for clkreq.
+ 0x4 = Check clkreq_in_n is de-asserted for t_power_off time.
+ 0x5 = L1 substate, turn off txcommonmode circuits (L1.2 only)
+ and rx electrical idle detection circuits.
+ 0x6 = Locally/remotely initiated exit, assert pclkreq, wait for pclkack.
+ 0x7 = Wait for pclkack when aborting an attempt to enter L1_N. */
+ uint32_t latched_nfts : 8; /**< [ 23: 16](RO/H) Latched N_FTS.
+ Indicates the value of N_FTS in the received TS ordered
+ sets from the link partner. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_sd_statuspm_s cn; */
+};
+typedef union bdk_pciercx_ras_sd_statuspm bdk_pciercx_ras_sd_statuspm_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSPM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_SD_STATUSPM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x3d0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_SD_STATUSPM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_SD_STATUSPM(a) bdk_pciercx_ras_sd_statuspm_t
+#define bustype_BDK_PCIERCX_RAS_SD_STATUSPM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_SD_STATUSPM(a) "PCIERCX_RAS_SD_STATUSPM"
+#define busnum_BDK_PCIERCX_RAS_SD_STATUSPM(a) (a)
+#define arguments_BDK_PCIERCX_RAS_SD_STATUSPM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_tba_ctl
+ *
+ * PCIe RC Vendor RAS DES Time Based Analysis Control Register
+ */
+union bdk_pciercx_ras_tba_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_tba_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t tbase_rpt_sel : 8; /**< [ 31: 24](R/W) Time-based report select. Selects what type of data is measured for the selected
+ duration [TBASE_DUR_SEL]. Data is returned in PCIERC_RAS_TBA_DATA[TBASE_DATA].
+
+ Each type of data is measured using one of three types of units.
+
+ Core clock cycles.
+ 0x0 = Duration of 1 cycle.
+ 0x1 = TxL0s.
+ 0x2 = RxL0s.
+ 0x3 = L0.
+ 0x4 = L1.
+ 0x7 = Configuration/recovery.
+
+ Aux_clk cycles.
+ 0x5 = L1.1.
+ 0x6 = L1.2.
+
+ Data bytes. Actual amount is 16x value.
+ 0x20 = TX TLP Bytes.
+ 0x21 = RX TLP Bytes. */
+ uint32_t reserved_16_23 : 8;
+ uint32_t tbase_dur_sel : 8; /**< [ 15: 8](R/W) Time-based duration select. Selects the duration of time-based
+ analysis.
+
+ 0x0 = Manual control. Analysis controlled by [TIMER_START].
+ 0x1 = 1 ms.
+ 0x2 = 10 ms.
+ 0x3 = 100 ms.
+ 0x4 = 1 s.
+ 0x5 = 2 s.
+ 0x6 = 4 s.
+ 0x7 - 0xF = Reserved. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t timer_start : 1; /**< [ 0: 0](R/W) Timer start.
+
+ 0x0 = Start/restart.
+ 0x1 = Stop.
+
+ This bit will be cleared automatically when the measurement is finished. */
+#else /* Word 0 - Little Endian */
+ uint32_t timer_start : 1; /**< [ 0: 0](R/W) Timer start.
+
+ 0x0 = Start/restart.
+ 0x1 = Stop.
+
+ This bit will be cleared automatically when the measurement is finished. */
+ uint32_t reserved_1_7 : 7;
+ uint32_t tbase_dur_sel : 8; /**< [ 15: 8](R/W) Time-based duration select. Selects the duration of time-based
+ analysis.
+
+ 0x0 = Manual control. Analysis controlled by [TIMER_START].
+ 0x1 = 1 ms.
+ 0x2 = 10 ms.
+ 0x3 = 100 ms.
+ 0x4 = 1 s.
+ 0x5 = 2 s.
+ 0x6 = 4 s.
+ 0x7 - 0xF = Reserved. */
+ uint32_t reserved_16_23 : 8;
+ uint32_t tbase_rpt_sel : 8; /**< [ 31: 24](R/W) Time-based report select. Selects what type of data is measured for the selected
+ duration [TBASE_DUR_SEL]. Data is returned in PCIERC_RAS_TBA_DATA[TBASE_DATA].
+
+ Each type of data is measured using one of three types of units.
+
+ Core clock cycles.
+ 0x0 = Duration of 1 cycle.
+ 0x1 = TxL0s.
+ 0x2 = RxL0s.
+ 0x3 = L0.
+ 0x4 = L1.
+ 0x7 = Configuration/recovery.
+
+ Aux_clk cycles.
+ 0x5 = L1.1.
+ 0x6 = L1.2.
+
+ Data bytes. Actual amount is 16x value.
+ 0x20 = TX TLP Bytes.
+ 0x21 = RX TLP Bytes. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_tba_ctl_s cn; */
+};
+typedef union bdk_pciercx_ras_tba_ctl bdk_pciercx_ras_tba_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_TBA_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_TBA_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x328ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_TBA_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_TBA_CTL(a) bdk_pciercx_ras_tba_ctl_t
+#define bustype_BDK_PCIERCX_RAS_TBA_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_TBA_CTL(a) "PCIERCX_RAS_TBA_CTL"
+#define busnum_BDK_PCIERCX_RAS_TBA_CTL(a) (a)
+#define arguments_BDK_PCIERCX_RAS_TBA_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ras_tba_data
+ *
+ * PCIe RC Vendor RAS DES Time Based Analysis Data Register
+ */
+union bdk_pciercx_ras_tba_data
+{
+ uint32_t u;
+ struct bdk_pciercx_ras_tba_data_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t tbase_data : 32; /**< [ 31: 0](RO/H) Time-based analysis data. This register returns data selected in the
+ PCIERC_RAS_TBA_CTL[TBASE_RPT_SEL] field. The results are cleared when
+ the next measurement starts. */
+#else /* Word 0 - Little Endian */
+ uint32_t tbase_data : 32; /**< [ 31: 0](RO/H) Time-based analysis data. This register returns data selected in the
+ PCIERC_RAS_TBA_CTL[TBASE_RPT_SEL] field. The results are cleared when
+ the next measurement starts. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ras_tba_data_s cn; */
+};
+typedef union bdk_pciercx_ras_tba_data bdk_pciercx_ras_tba_data_t;
+
+static inline uint64_t BDK_PCIERCX_RAS_TBA_DATA(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RAS_TBA_DATA(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x32cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RAS_TBA_DATA", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RAS_TBA_DATA(a) bdk_pciercx_ras_tba_data_t
+#define bustype_BDK_PCIERCX_RAS_TBA_DATA(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RAS_TBA_DATA(a) "PCIERCX_RAS_TBA_DATA"
+#define busnum_BDK_PCIERCX_RAS_TBA_DATA(a) (a)
+#define arguments_BDK_PCIERCX_RAS_TBA_DATA(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_cap_hdr
+ *
+ * PCIe RC Vendor RAS Data Path Protection Header Register
+ */
+union bdk_pciercx_rasdp_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_rasdp_cap_hdr bdk_pciercx_rasdp_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x418ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_CAP_HDR(a) bdk_pciercx_rasdp_cap_hdr_t
+#define bustype_BDK_PCIERCX_RASDP_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_CAP_HDR(a) "PCIERCX_RASDP_CAP_HDR"
+#define busnum_BDK_PCIERCX_RASDP_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_ce_ctl
+ *
+ * PCIe RC RAS Data Path Correctable Error Control Register
+ */
+union bdk_pciercx_rasdp_ce_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_ce_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [CORR_CNT_SEL_REG]) whose contents
+ can be read from PCIERC_RAS_TBA_CTL. You can
+ cycle this field value from 0 to 255 to access all counters. */
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine inbound (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t corr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all correctable error counters. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all correctable error counters. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t corr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine inbound (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [CORR_CNT_SEL_REG]) whose contents
+ can be read from PCIERC_RAS_TBA_CTL. You can
+ cycle this field value from 0 to 255 to access all counters. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_ce_ctl_s cn; */
+};
+typedef union bdk_pciercx_rasdp_ce_ctl bdk_pciercx_rasdp_ce_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_CE_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_CE_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x424ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_CE_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_CE_CTL(a) bdk_pciercx_rasdp_ce_ctl_t
+#define bustype_BDK_PCIERCX_RASDP_CE_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_CE_CTL(a) "PCIERCX_RASDP_CE_CTL"
+#define busnum_BDK_PCIERCX_RASDP_CE_CTL(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_CE_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_ce_ictl
+ *
+ * PCIe RC RAS Data Correctable Error Injection Control Register
+ */
+union bdk_pciercx_rasdp_ce_ictl
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_ce_ictl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_24_31 : 8;
+ uint32_t err_inj_loc : 8; /**< [ 23: 16](R/W) Error injection location. Selects where error injection takes place. You
+ can cycle this field value from 0 to 255 to access all locations. */
+ uint32_t err_inj_cnt : 8; /**< [ 15: 8](R/W) Error injection count.
+ 0x0 = errors are injected in every TLP until [ERR_INJ_EN] is cleared.
+ 0x1 - 0xFF = number of errors injected. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t err_inj_type : 2; /**< [ 5: 4](R/W) Error injection type.
+ 0x0 = None.
+ 0x1 = 1-bit.
+ 0x2 = 2-bit.
+ 0x3 = Reserved. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t err_inj_en : 1; /**< [ 0: 0](R/W) Error injection global enable. When set, enables the error
+ insertion logic. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_inj_en : 1; /**< [ 0: 0](R/W) Error injection global enable. When set, enables the error
+ insertion logic. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t err_inj_type : 2; /**< [ 5: 4](R/W) Error injection type.
+ 0x0 = None.
+ 0x1 = 1-bit.
+ 0x2 = 2-bit.
+ 0x3 = Reserved. */
+ uint32_t reserved_6_7 : 2;
+ uint32_t err_inj_cnt : 8; /**< [ 15: 8](R/W) Error injection count.
+ 0x0 = errors are injected in every TLP until [ERR_INJ_EN] is cleared.
+ 0x1 - 0xFF = number of errors injected. */
+ uint32_t err_inj_loc : 8; /**< [ 23: 16](R/W) Error injection location. Selects where error injection takes place. You
+ can cycle this field value from 0 to 255 to access all locations. */
+ uint32_t reserved_24_31 : 8;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_ce_ictl_s cn; */
+};
+typedef union bdk_pciercx_rasdp_ce_ictl bdk_pciercx_rasdp_ce_ictl_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_CE_ICTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_CE_ICTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x434ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_CE_ICTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_CE_ICTL(a) bdk_pciercx_rasdp_ce_ictl_t
+#define bustype_BDK_PCIERCX_RASDP_CE_ICTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_CE_ICTL(a) "PCIERCX_RASDP_CE_ICTL"
+#define busnum_BDK_PCIERCX_RASDP_CE_ICTL(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_CE_ICTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_ce_loc
+ *
+ * PCIe RC RAS Data Correctable Error Location Register
+ */
+union bdk_pciercx_rasdp_ce_loc
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_ce_loc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t loc_last_corr_err : 8; /**< [ 31: 24](RO) Location/ID of the last corrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+ uint32_t reg_last_corr_err : 4; /**< [ 23: 20](RO) Region of last corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t loc_first_corr_err : 8; /**< [ 15: 8](RO) Location/ID of the first corrected error within the region defined by
+ [REG_FIRST_CORR_ERR]. */
+ uint32_t reg_first_corr_err : 4; /**< [ 7: 4](RO) Region of first corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA write engine (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t reg_first_corr_err : 4; /**< [ 7: 4](RO) Region of first corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA read engine (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA write engine (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_first_corr_err : 8; /**< [ 15: 8](RO) Location/ID of the first corrected error within the region defined by
+ [REG_FIRST_CORR_ERR]. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t reg_last_corr_err : 4; /**< [ 23: 20](RO) Region of last corrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_last_corr_err : 8; /**< [ 31: 24](RO) Location/ID of the last corrected error within the region defined by
+ [REG_LAST_CORR_ERR]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_ce_loc_s cn; */
+};
+typedef union bdk_pciercx_rasdp_ce_loc bdk_pciercx_rasdp_ce_loc_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_CE_LOC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_CE_LOC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x438ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_CE_LOC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_CE_LOC(a) bdk_pciercx_rasdp_ce_loc_t
+#define bustype_BDK_PCIERCX_RASDP_CE_LOC(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_CE_LOC(a) "PCIERCX_RASDP_CE_LOC"
+#define busnum_BDK_PCIERCX_RASDP_CE_LOC(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_CE_LOC(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_ce_rp
+ *
+ * PCIe RC RAS Data Path Correctable Error Report Register
+ */
+union bdk_pciercx_rasdp_ce_rp
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_ce_rp_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in PCIERC_RASDP_CE_CTL[CORR_CNT_SEL]. */
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t corr_count : 8; /**< [ 7: 0](RO) Current corrected count for the selected counter. */
+#else /* Word 0 - Little Endian */
+ uint32_t corr_count : 8; /**< [ 7: 0](RO) Current corrected count for the selected counter. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t corr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t corr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in PCIERC_RASDP_CE_CTL[CORR_CNT_SEL]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_ce_rp_s cn; */
+};
+typedef union bdk_pciercx_rasdp_ce_rp bdk_pciercx_rasdp_ce_rp_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_CE_RP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_CE_RP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x428ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_CE_RP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_CE_RP(a) bdk_pciercx_rasdp_ce_rp_t
+#define bustype_BDK_PCIERCX_RASDP_CE_RP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_CE_RP(a) "PCIERCX_RASDP_CE_RP"
+#define busnum_BDK_PCIERCX_RASDP_CE_RP(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_CE_RP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_de_mc
+ *
+ * PCIe RC RAS Data Error Mode Clear Register
+ */
+union bdk_pciercx_rasdp_de_mc
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_de_mc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t err_mode_clr : 1; /**< [ 0: 0](R/W1C) Set this bit to take the core out of RASDP error mode. The core will then report
+ uncorrectable
+ errors (through AER internal error reporting) and also stop nullifying/discarding TLPs. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_mode_clr : 1; /**< [ 0: 0](R/W1C) Set this bit to take the core out of RASDP error mode. The core will then report
+ uncorrectable
+ errors (through AER internal error reporting) and also stop nullifying/discarding TLPs. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_de_mc_s cn; */
+};
+typedef union bdk_pciercx_rasdp_de_mc bdk_pciercx_rasdp_de_mc_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_DE_MC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_DE_MC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x444ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_DE_MC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_DE_MC(a) bdk_pciercx_rasdp_de_mc_t
+#define bustype_BDK_PCIERCX_RASDP_DE_MC(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_DE_MC(a) "PCIERCX_RASDP_DE_MC"
+#define busnum_BDK_PCIERCX_RASDP_DE_MC(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_DE_MC(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_de_me
+ *
+ * PCIe RC RAS Data Error Mode Enable Register
+ */
+union bdk_pciercx_rasdp_de_me
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_de_me_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_2_31 : 30;
+ uint32_t auto_lnk_dn_en : 1; /**< [ 1: 1](R/W) Set this bit to enable the core to bring the link down when RASDP error mode is entered. */
+ uint32_t err_mode_en : 1; /**< [ 0: 0](R/W) Set this bit to enable the core to enter RASDP error mode when it detects an uncorrectable error. */
+#else /* Word 0 - Little Endian */
+ uint32_t err_mode_en : 1; /**< [ 0: 0](R/W) Set this bit to enable the core to enter RASDP error mode when it detects an uncorrectable error. */
+ uint32_t auto_lnk_dn_en : 1; /**< [ 1: 1](R/W) Set this bit to enable the core to bring the link down when RASDP error mode is entered. */
+ uint32_t reserved_2_31 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_de_me_s cn; */
+};
+typedef union bdk_pciercx_rasdp_de_me bdk_pciercx_rasdp_de_me_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_DE_ME(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_DE_ME(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x440ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_DE_ME", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_DE_ME(a) bdk_pciercx_rasdp_de_me_t
+#define bustype_BDK_PCIERCX_RASDP_DE_ME(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_DE_ME(a) "PCIERCX_RASDP_DE_ME"
+#define busnum_BDK_PCIERCX_RASDP_DE_ME(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_DE_ME(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_ep_ctl
+ *
+ * PCIe RC RAS Data Path Error Protection Control Register
+ */
+union bdk_pciercx_rasdp_ep_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_ep_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_23_31 : 9;
+ uint32_t ep_dis_adm_rx : 1; /**< [ 22: 22](R/W) Error correction disable for ADM RX path. */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 21: 21](R/W) Error correction disable for layer 3 RX path. */
+ uint32_t ep_dis_l2_rx : 1; /**< [ 20: 20](R/W) Error correction disable for layer 2 RX path. */
+ uint32_t ep_dis_dma_rd : 1; /**< [ 19: 19](R/W) Error correction disable for DMA read (not supported). */
+ uint32_t ep_dis_axib_inbr : 1; /**< [ 18: 18](R/W) Error correction disable for AXI bridge inbound request path (not supported). */
+ uint32_t ep_dis_axib_inbc : 1; /**< [ 17: 17](R/W) Error correction disable for AXI bridge inbound completion composer (not supported). */
+ uint32_t ep_dis_rx : 1; /**< [ 16: 16](R/W) Global error correction disable for all RX layers. */
+ uint32_t reserved_7_15 : 9;
+ uint32_t ep_dis_adm_tx : 1; /**< [ 6: 6](R/W) Error correction disable for ADM TX path. */
+ uint32_t ep_dis_l3_tx : 1; /**< [ 5: 5](R/W) Error correction disable for layer 3 TX path. */
+ uint32_t ep_dis_l2_tx : 1; /**< [ 4: 4](R/W) Error correction disable for layer 2 TX path. */
+ uint32_t ep_dis_dma_wr : 1; /**< [ 3: 3](R/W) Error correction disable for DMA write (not supported). */
+ uint32_t ep_dis_axib_outb : 1; /**< [ 2: 2](R/W) Error correction disable for AXI bridge outbound request path (not supported). */
+ uint32_t ep_dis_axib_masc : 1; /**< [ 1: 1](R/W) Error correction disable for AXI bridge master completion buffer (not supported). */
+ uint32_t ep_dis_tx : 1; /**< [ 0: 0](R/W) Global error correction disable for all TX layers. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_tx : 1; /**< [ 0: 0](R/W) Global error correction disable for all TX layers. */
+ uint32_t ep_dis_axib_masc : 1; /**< [ 1: 1](R/W) Error correction disable for AXI bridge master completion buffer (not supported). */
+ uint32_t ep_dis_axib_outb : 1; /**< [ 2: 2](R/W) Error correction disable for AXI bridge outbound request path (not supported). */
+ uint32_t ep_dis_dma_wr : 1; /**< [ 3: 3](R/W) Error correction disable for DMA write (not supported). */
+ uint32_t ep_dis_l2_tx : 1; /**< [ 4: 4](R/W) Error correction disable for layer 2 TX path. */
+ uint32_t ep_dis_l3_tx : 1; /**< [ 5: 5](R/W) Error correction disable for layer 3 TX path. */
+ uint32_t ep_dis_adm_tx : 1; /**< [ 6: 6](R/W) Error correction disable for ADM TX path. */
+ uint32_t reserved_7_15 : 9;
+ uint32_t ep_dis_rx : 1; /**< [ 16: 16](R/W) Global error correction disable for all RX layers. */
+ uint32_t ep_dis_axib_inbc : 1; /**< [ 17: 17](R/W) Error correction disable for AXI bridge inbound completion composer (not supported). */
+ uint32_t ep_dis_axib_inbr : 1; /**< [ 18: 18](R/W) Error correction disable for AXI bridge inbound request path (not supported). */
+ uint32_t ep_dis_dma_rd : 1; /**< [ 19: 19](R/W) Error correction disable for DMA read (not supported). */
+ uint32_t ep_dis_l2_rx : 1; /**< [ 20: 20](R/W) Error correction disable for layer 2 RX path. */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 21: 21](R/W) Error correction disable for layer 3 RX path. */
+ uint32_t ep_dis_adm_rx : 1; /**< [ 22: 22](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_23_31 : 9;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_ep_ctl_s cn; */
+};
+typedef union bdk_pciercx_rasdp_ep_ctl bdk_pciercx_rasdp_ep_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_EP_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_EP_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x420ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_EP_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_EP_CTL(a) bdk_pciercx_rasdp_ep_ctl_t
+#define bustype_BDK_PCIERCX_RASDP_EP_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_EP_CTL(a) "PCIERCX_RASDP_EP_CTL"
+#define busnum_BDK_PCIERCX_RASDP_EP_CTL(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_EP_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_hdr
+ *
+ * PCIe RC RAS Data Path Extended Capability Register
+ */
+union bdk_pciercx_rasdp_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t vsec_id : 16; /**< [ 15: 0](RO) VSEC ID. */
+ uint32_t vsec_rev : 4; /**< [ 19: 16](RO) Capability version. */
+ uint32_t vsec_length : 12; /**< [ 31: 20](RO) VSEC length. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_hdr_s cn; */
+};
+typedef union bdk_pciercx_rasdp_hdr bdk_pciercx_rasdp_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x41cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_HDR(a) bdk_pciercx_rasdp_hdr_t
+#define bustype_BDK_PCIERCX_RASDP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_HDR(a) "PCIERCX_RASDP_HDR"
+#define busnum_BDK_PCIERCX_RASDP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_radr_ce
+ *
+ * PCIe RC RAS RAM Address Corrected Error Register
+ */
+union bdk_pciercx_rasdp_radr_ce
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_radr_ce_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ram_idx_corr_err : 4; /**< [ 31: 28](RO) RAM index where a corrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_addr_corr_err : 27; /**< [ 26: 0](RO) RAM address where a corrected error has been detected. */
+#else /* Word 0 - Little Endian */
+ uint32_t ram_addr_corr_err : 27; /**< [ 26: 0](RO) RAM address where a corrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_idx_corr_err : 4; /**< [ 31: 28](RO) RAM index where a corrected error has been detected. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_radr_ce_s cn; */
+};
+typedef union bdk_pciercx_rasdp_radr_ce bdk_pciercx_rasdp_radr_ce_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_RADR_CE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_RADR_CE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x448ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_RADR_CE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_RADR_CE(a) bdk_pciercx_rasdp_radr_ce_t
+#define bustype_BDK_PCIERCX_RASDP_RADR_CE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_RADR_CE(a) "PCIERCX_RASDP_RADR_CE"
+#define busnum_BDK_PCIERCX_RASDP_RADR_CE(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_RADR_CE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_radr_uce
+ *
+ * PCIe RC RAS RAM Address Uncorrected Error Register
+ */
+union bdk_pciercx_rasdp_radr_uce
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_radr_uce_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ram_idx_ucorr_err : 4; /**< [ 31: 28](RO) RAM index where a uncorrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_addr_ucorr_err : 27; /**< [ 26: 0](RO) RAM address where a uncorrected error has been detected. */
+#else /* Word 0 - Little Endian */
+ uint32_t ram_addr_ucorr_err : 27; /**< [ 26: 0](RO) RAM address where a uncorrected error has been detected. */
+ uint32_t reserved_27 : 1;
+ uint32_t ram_idx_ucorr_err : 4; /**< [ 31: 28](RO) RAM index where a uncorrected error has been detected. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_radr_uce_s cn; */
+};
+typedef union bdk_pciercx_rasdp_radr_uce bdk_pciercx_rasdp_radr_uce_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_RADR_UCE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_RADR_UCE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x44cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_RADR_UCE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_RADR_UCE(a) bdk_pciercx_rasdp_radr_uce_t
+#define bustype_BDK_PCIERCX_RASDP_RADR_UCE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_RADR_UCE(a) "PCIERCX_RASDP_RADR_UCE"
+#define busnum_BDK_PCIERCX_RASDP_RADR_UCE(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_RADR_UCE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_uce_ctl
+ *
+ * PCIe RC RAS Data Path Uncorrectable Error Control Register
+ */
+union bdk_pciercx_rasdp_uce_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_uce_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [UCORR_CNT_SEL_REG]) whose contents
+ can be read from PCIERC_RAS_TBA_CTL. You can
+ cycle this field value from 0 to 255 to access all counters. */
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t ucorr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all uncorrectable error counters. */
+#else /* Word 0 - Little Endian */
+ uint32_t ep_dis_l3_rx : 1; /**< [ 0: 0](R/W1C) Clears all uncorrectable error counters. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t ucorr_en_cntrs : 1; /**< [ 4: 4](R/W) Error correction disable for ADM RX path. */
+ uint32_t reserved_5_19 : 15;
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](R/W) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](R/W) Counter selection. This field selects the counter ID (within
+ the region defined by [UCORR_CNT_SEL_REG]) whose contents
+ can be read from PCIERC_RAS_TBA_CTL. You can
+ cycle this field value from 0 to 255 to access all counters. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_uce_ctl_s cn; */
+};
+typedef union bdk_pciercx_rasdp_uce_ctl bdk_pciercx_rasdp_uce_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x42cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_UCE_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_UCE_CTL(a) bdk_pciercx_rasdp_uce_ctl_t
+#define bustype_BDK_PCIERCX_RASDP_UCE_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_UCE_CTL(a) "PCIERCX_RASDP_UCE_CTL"
+#define busnum_BDK_PCIERCX_RASDP_UCE_CTL(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_UCE_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_uce_loc
+ *
+ * PCIe RC RAS Data Uncorrectable Error Location Register
+ */
+union bdk_pciercx_rasdp_uce_loc
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_uce_loc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t loc_last_ucorr_err : 8; /**< [ 31: 24](RO) Location/ID of the last uncorrected error within the region defined by
+ [REG_LAST_UCORR_ERR]. */
+ uint32_t reg_last_ucorr_err : 4; /**< [ 23: 20](RO) Region of last uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t loc_first_ucorr_err : 8; /**< [ 15: 8](RO) Location/ID of the first uncorrected error within the region defined by
+ [REG_FIRST_UCORR_ERR]. */
+ uint32_t reg_first_ucorr_err : 4; /**< [ 7: 4](RO) Region of first uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t reg_first_ucorr_err : 4; /**< [ 7: 4](RO) Region of first uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_first_ucorr_err : 8; /**< [ 15: 8](RO) Location/ID of the first uncorrected error within the region defined by
+ [REG_FIRST_UCORR_ERR]. */
+ uint32_t reserved_16_19 : 4;
+ uint32_t reg_last_ucorr_err : 4; /**< [ 23: 20](RO) Region of last uncorrected error
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t loc_last_ucorr_err : 8; /**< [ 31: 24](RO) Location/ID of the last uncorrected error within the region defined by
+ [REG_LAST_UCORR_ERR]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_uce_loc_s cn; */
+};
+typedef union bdk_pciercx_rasdp_uce_loc bdk_pciercx_rasdp_uce_loc_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_LOC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_LOC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x43cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_UCE_LOC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_UCE_LOC(a) bdk_pciercx_rasdp_uce_loc_t
+#define bustype_BDK_PCIERCX_RASDP_UCE_LOC(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_UCE_LOC(a) "PCIERCX_RASDP_UCE_LOC"
+#define busnum_BDK_PCIERCX_RASDP_UCE_LOC(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_UCE_LOC(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rasdp_uce_rp
+ *
+ * PCIe RC RAS Data Path Uncorrectable Error Report Register
+ */
+union bdk_pciercx_rasdp_uce_rp
+{
+ uint32_t u;
+ struct bdk_pciercx_rasdp_uce_rp_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in PCIERC_RASDP_UCE_CTL[UCORR_CNT_SEL]. */
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t ucorr_count : 8; /**< [ 7: 0](RO) Current uncorrected count for the selected counter. */
+#else /* Word 0 - Little Endian */
+ uint32_t ucorr_count : 8; /**< [ 7: 0](RO) Current uncorrected count for the selected counter. */
+ uint32_t reserved_8_19 : 12;
+ uint32_t ucorr_cnt_sel_reg : 4; /**< [ 23: 20](RO/H) Selected correctable counter region.
+ 0x0 = ADM RX path.
+ 0x1 = Layer 3 RX path.
+ 0x2 = Layer 2 RX path.
+ 0x3 = DMA inbound path (not supported).
+ 0x4 = AXI bridge inbound request path (not supported).
+ 0x5 = AXI bridge inbound completion composer path (not supported).
+ 0x6 = ADM TX path.
+ 0x7 = Layer 3 TX path.
+ 0x8 = Layer 2 TX path.
+ 0x9 = DMA outbound path (not supported).
+ 0xA = AXI bridge outbound request path (not supported).
+ 0xB = AXI bridge outbound master completion buffer path (not supported).
+ 0xC - 0xF = Reserved. */
+ uint32_t ucorr_cnt_sel : 8; /**< [ 31: 24](RO/H) Counter selection. Returns the value set in PCIERC_RASDP_UCE_CTL[UCORR_CNT_SEL]. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rasdp_uce_rp_s cn; */
+};
+typedef union bdk_pciercx_rasdp_uce_rp bdk_pciercx_rasdp_uce_rp_t;
+
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_RP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RASDP_UCE_RP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x430ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RASDP_UCE_RP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RASDP_UCE_RP(a) bdk_pciercx_rasdp_uce_rp_t
+#define bustype_BDK_PCIERCX_RASDP_UCE_RP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RASDP_UCE_RP(a) "PCIERCX_RASDP_UCE_RP"
+#define busnum_BDK_PCIERCX_RASDP_UCE_RP(a) (a)
+#define arguments_BDK_PCIERCX_RASDP_UCE_RP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rev
+ *
+ * PCIe RC Class Code/Revision ID Register
+ */
+union bdk_pciercx_rev
+{
+ uint32_t u;
+ struct bdk_pciercx_rev_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x6 = Bridge. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x4 = PCI-to-PCI. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x0 = No standard interface. */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ See FUS_FUSE_NUM_E::CHIP_ID() for more information. */
+#else /* Word 0 - Little Endian */
+ uint32_t rid : 8; /**< [ 7: 0](RO/WRSL) Revision ID, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ See FUS_FUSE_NUM_E::CHIP_ID() for more information. */
+ uint32_t pi : 8; /**< [ 15: 8](RO/WRSL) Programming interface, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x0 = No standard interface. */
+ uint32_t sc : 8; /**< [ 23: 16](RO/WRSL) Subclass code, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x4 = PCI-to-PCI. */
+ uint32_t bcc : 8; /**< [ 31: 24](RO/WRSL) Base class code, writable through PEM()_CFG_WR.
+ However, the application must not change this field.
+ 0x6 = Bridge. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rev_s cn; */
+};
+typedef union bdk_pciercx_rev bdk_pciercx_rev_t;
+
+static inline uint64_t BDK_PCIERCX_REV(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_REV(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_REV", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_REV(a) bdk_pciercx_rev_t
+#define bustype_BDK_PCIERCX_REV(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_REV(a) "PCIERCX_REV"
+#define busnum_BDK_PCIERCX_REV(a) (a)
+#define arguments_BDK_PCIERCX_REV(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_root_ctl_cap
+ *
+ * PCIe RC Root Control/Root Capabilities Register
+ */
+union bdk_pciercx_root_ctl_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_root_ctl_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_17_31 : 15;
+ uint32_t crssv : 1; /**< [ 16: 16](RO) CRS software visibility. Not supported, hardwired to zero. */
+ uint32_t reserved_5_15 : 11;
+ uint32_t crssve : 1; /**< [ 4: 4](RO) CRS software visibility enable. Not supported, hardwired to zero. */
+ uint32_t pmeie : 1; /**< [ 3: 3](R/W) PME interrupt enable. */
+ uint32_t sefee : 1; /**< [ 2: 2](R/W) System error on fatal error enable. */
+ uint32_t senfee : 1; /**< [ 1: 1](R/W) System error on nonfatal error enable. */
+ uint32_t secee : 1; /**< [ 0: 0](R/W) System error on correctable error enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t secee : 1; /**< [ 0: 0](R/W) System error on correctable error enable. */
+ uint32_t senfee : 1; /**< [ 1: 1](R/W) System error on nonfatal error enable. */
+ uint32_t sefee : 1; /**< [ 2: 2](R/W) System error on fatal error enable. */
+ uint32_t pmeie : 1; /**< [ 3: 3](R/W) PME interrupt enable. */
+ uint32_t crssve : 1; /**< [ 4: 4](RO) CRS software visibility enable. Not supported, hardwired to zero. */
+ uint32_t reserved_5_15 : 11;
+ uint32_t crssv : 1; /**< [ 16: 16](RO) CRS software visibility. Not supported, hardwired to zero. */
+ uint32_t reserved_17_31 : 15;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_root_ctl_cap_s cn; */
+};
+typedef union bdk_pciercx_root_ctl_cap bdk_pciercx_root_ctl_cap_t;
+
+static inline uint64_t BDK_PCIERCX_ROOT_CTL_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ROOT_CTL_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ROOT_CTL_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ROOT_CTL_CAP(a) bdk_pciercx_root_ctl_cap_t
+#define bustype_BDK_PCIERCX_ROOT_CTL_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ROOT_CTL_CAP(a) "PCIERCX_ROOT_CTL_CAP"
+#define busnum_BDK_PCIERCX_ROOT_CTL_CAP(a) (a)
+#define arguments_BDK_PCIERCX_ROOT_CTL_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_root_err_cmd
+ *
+ * PCIe RC Root Error Command Register
+ */
+union bdk_pciercx_root_err_cmd
+{
+ uint32_t u;
+ struct bdk_pciercx_root_err_cmd_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_3_31 : 29;
+ uint32_t fere : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t nfere : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t cere : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t cere : 1; /**< [ 0: 0](R/W) Correctable error reporting enable. */
+ uint32_t nfere : 1; /**< [ 1: 1](R/W) Nonfatal error reporting enable. */
+ uint32_t fere : 1; /**< [ 2: 2](R/W) Fatal error reporting enable. */
+ uint32_t reserved_3_31 : 29;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_root_err_cmd_s cn; */
+};
+typedef union bdk_pciercx_root_err_cmd bdk_pciercx_root_err_cmd_t;
+
+static inline uint64_t BDK_PCIERCX_ROOT_ERR_CMD(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ROOT_ERR_CMD(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x12cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ROOT_ERR_CMD", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ROOT_ERR_CMD(a) bdk_pciercx_root_err_cmd_t
+#define bustype_BDK_PCIERCX_ROOT_ERR_CMD(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ROOT_ERR_CMD(a) "PCIERCX_ROOT_ERR_CMD"
+#define busnum_BDK_PCIERCX_ROOT_ERR_CMD(a) (a)
+#define arguments_BDK_PCIERCX_ROOT_ERR_CMD(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_root_err_stat
+ *
+ * PCIe RC Root Error Status Register
+ */
+union bdk_pciercx_root_err_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_root_err_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t aeimn : 5; /**< [ 31: 27](RO/WRSL) Advanced error interrupt message number, writable through
+ PEM()_CFG_WR. */
+ uint32_t reserved_7_26 : 20;
+ uint32_t femr : 1; /**< [ 6: 6](R/W1C/H) Fatal error messages received. */
+ uint32_t nfemr : 1; /**< [ 5: 5](R/W1C/H) Nonfatal error messages received. */
+ uint32_t fuf : 1; /**< [ 4: 4](R/W1C/H) First uncorrectable fatal. */
+ uint32_t multi_efnfr : 1; /**< [ 3: 3](R/W1C/H) Multiple ERR_FATAL/NONFATAL received. */
+ uint32_t efnfr : 1; /**< [ 2: 2](R/W1C/H) ERR_FATAL/NONFATAL received. */
+ uint32_t multi_ecr : 1; /**< [ 1: 1](R/W1C/H) Multiple ERR_COR received. */
+ uint32_t ecr : 1; /**< [ 0: 0](R/W1C/H) ERR_COR received. */
+#else /* Word 0 - Little Endian */
+ uint32_t ecr : 1; /**< [ 0: 0](R/W1C/H) ERR_COR received. */
+ uint32_t multi_ecr : 1; /**< [ 1: 1](R/W1C/H) Multiple ERR_COR received. */
+ uint32_t efnfr : 1; /**< [ 2: 2](R/W1C/H) ERR_FATAL/NONFATAL received. */
+ uint32_t multi_efnfr : 1; /**< [ 3: 3](R/W1C/H) Multiple ERR_FATAL/NONFATAL received. */
+ uint32_t fuf : 1; /**< [ 4: 4](R/W1C/H) First uncorrectable fatal. */
+ uint32_t nfemr : 1; /**< [ 5: 5](R/W1C/H) Nonfatal error messages received. */
+ uint32_t femr : 1; /**< [ 6: 6](R/W1C/H) Fatal error messages received. */
+ uint32_t reserved_7_26 : 20;
+ uint32_t aeimn : 5; /**< [ 31: 27](RO/WRSL) Advanced error interrupt message number, writable through
+ PEM()_CFG_WR. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_root_err_stat_s cn; */
+};
+typedef union bdk_pciercx_root_err_stat bdk_pciercx_root_err_stat_t;
+
+static inline uint64_t BDK_PCIERCX_ROOT_ERR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ROOT_ERR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x130ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ROOT_ERR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ROOT_ERR_STAT(a) bdk_pciercx_root_err_stat_t
+#define bustype_BDK_PCIERCX_ROOT_ERR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ROOT_ERR_STAT(a) "PCIERCX_ROOT_ERR_STAT"
+#define busnum_BDK_PCIERCX_ROOT_ERR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_ROOT_ERR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_root_stat
+ *
+ * PCIe RC Root Status Register
+ */
+union bdk_pciercx_root_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_root_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_18_31 : 14;
+ uint32_t pme_pend : 1; /**< [ 17: 17](RO) PME pending. */
+ uint32_t pme_stat : 1; /**< [ 16: 16](R/W1C/H) PME status. */
+ uint32_t pme_rid : 16; /**< [ 15: 0](RO) PME requester ID. */
+#else /* Word 0 - Little Endian */
+ uint32_t pme_rid : 16; /**< [ 15: 0](RO) PME requester ID. */
+ uint32_t pme_stat : 1; /**< [ 16: 16](R/W1C/H) PME status. */
+ uint32_t pme_pend : 1; /**< [ 17: 17](RO) PME pending. */
+ uint32_t reserved_18_31 : 14;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_root_stat_s cn; */
+};
+typedef union bdk_pciercx_root_stat bdk_pciercx_root_stat_t;
+
+static inline uint64_t BDK_PCIERCX_ROOT_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_ROOT_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x90ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_ROOT_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_ROOT_STAT(a) bdk_pciercx_root_stat_t
+#define bustype_BDK_PCIERCX_ROOT_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_ROOT_STAT(a) "PCIERCX_ROOT_STAT"
+#define busnum_BDK_PCIERCX_ROOT_STAT(a) (a)
+#define arguments_BDK_PCIERCX_ROOT_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_rx_ser_q_ctrl
+ *
+ * PCIe RC Receive Serialization Queue Control Register
+ */
+union bdk_pciercx_rx_ser_q_ctrl
+{
+ uint32_t u;
+ struct bdk_pciercx_rx_ser_q_ctrl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t qof_prv_en : 1; /**< [ 31: 31](R/W) Enable receive serialization queue overflow prevention. */
+ uint32_t af_thres_sign : 1; /**< [ 30: 30](R/W) Almost full threshold adjustment sign. */
+ uint32_t reserved_28_29 : 2;
+ uint32_t af_thres_val : 12; /**< [ 27: 16](R/W) Almost full threshold adjustment value. */
+ uint32_t af_thres : 16; /**< [ 15: 0](RO) Current almost full threshold. */
+#else /* Word 0 - Little Endian */
+ uint32_t af_thres : 16; /**< [ 15: 0](RO) Current almost full threshold. */
+ uint32_t af_thres_val : 12; /**< [ 27: 16](R/W) Almost full threshold adjustment value. */
+ uint32_t reserved_28_29 : 2;
+ uint32_t af_thres_sign : 1; /**< [ 30: 30](R/W) Almost full threshold adjustment sign. */
+ uint32_t qof_prv_en : 1; /**< [ 31: 31](R/W) Enable receive serialization queue overflow prevention. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_rx_ser_q_ctrl_s cn; */
+};
+typedef union bdk_pciercx_rx_ser_q_ctrl bdk_pciercx_rx_ser_q_ctrl_t;
+
+static inline uint64_t BDK_PCIERCX_RX_SER_Q_CTRL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_RX_SER_Q_CTRL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xc00ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_RX_SER_Q_CTRL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_RX_SER_Q_CTRL(a) bdk_pciercx_rx_ser_q_ctrl_t
+#define bustype_BDK_PCIERCX_RX_SER_Q_CTRL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_RX_SER_Q_CTRL(a) "PCIERCX_RX_SER_Q_CTRL"
+#define busnum_BDK_PCIERCX_RX_SER_Q_CTRL(a) (a)
+#define arguments_BDK_PCIERCX_RX_SER_Q_CTRL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_scap_hdr
+ *
+ * PCIe RC PCI Express Secondary Capability (Gen3) Header Register
+ */
+union bdk_pciercx_scap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_scap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_scap_hdr_s cn; */
+};
+typedef union bdk_pciercx_scap_hdr bdk_pciercx_scap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_SCAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SCAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x178ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SCAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SCAP_HDR(a) bdk_pciercx_scap_hdr_t
+#define bustype_BDK_PCIERCX_SCAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SCAP_HDR(a) "PCIERCX_SCAP_HDR"
+#define busnum_BDK_PCIERCX_SCAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_SCAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ser_num_1
+ *
+ * PCIe RC Serial Number 1 Register
+ */
+union bdk_pciercx_ser_num_1
+{
+ uint32_t u;
+ struct bdk_pciercx_ser_num_1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](R/W) IEEE 64-bit device serial number (doubleword 1). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](R/W) IEEE 64-bit device serial number (doubleword 1). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ser_num_1_s cn; */
+};
+typedef union bdk_pciercx_ser_num_1 bdk_pciercx_ser_num_1_t;
+
+static inline uint64_t BDK_PCIERCX_SER_NUM_1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SER_NUM_1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x14cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SER_NUM_1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SER_NUM_1(a) bdk_pciercx_ser_num_1_t
+#define bustype_BDK_PCIERCX_SER_NUM_1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SER_NUM_1(a) "PCIERCX_SER_NUM_1"
+#define busnum_BDK_PCIERCX_SER_NUM_1(a) (a)
+#define arguments_BDK_PCIERCX_SER_NUM_1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ser_num_2
+ *
+ * PCIe RC Serial Number 2 Register
+ */
+union bdk_pciercx_ser_num_2
+{
+ uint32_t u;
+ struct bdk_pciercx_ser_num_2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](R/W) IEEE 64-bit device serial number (doubleword 2). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](R/W) IEEE 64-bit device serial number (doubleword 2). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ser_num_2_s cn; */
+};
+typedef union bdk_pciercx_ser_num_2 bdk_pciercx_ser_num_2_t;
+
+static inline uint64_t BDK_PCIERCX_SER_NUM_2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SER_NUM_2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x150ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SER_NUM_2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SER_NUM_2(a) bdk_pciercx_ser_num_2_t
+#define bustype_BDK_PCIERCX_SER_NUM_2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SER_NUM_2(a) "PCIERCX_SER_NUM_2"
+#define busnum_BDK_PCIERCX_SER_NUM_2(a) (a)
+#define arguments_BDK_PCIERCX_SER_NUM_2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_slot_cap
+ *
+ * PCIe RC Slot Capabilities Register
+ */
+union bdk_pciercx_slot_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_slot_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ps_num : 13; /**< [ 31: 19](RO/WRSL) Physical slot number, writable through PEM()_CFG_WR. */
+ uint32_t nccs : 1; /**< [ 18: 18](RO/WRSL) No command complete support, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t emip : 1; /**< [ 17: 17](RO/WRSL) Electromechanical interlock present, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t sp_ls : 2; /**< [ 16: 15](RO/WRSL) Slot power limit scale, writable through PEM()_CFG_WR. */
+ uint32_t sp_lv : 8; /**< [ 14: 7](RO/WRSL) Slot power limit value, writable through PEM()_CFG_WR. */
+ uint32_t hp_c : 1; /**< [ 6: 6](RO/WRSL) Hot plug capable, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t hp_s : 1; /**< [ 5: 5](RO/WRSL) Hot plug surprise, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t pip : 1; /**< [ 4: 4](RO/WRSL) Power indicator present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t aip : 1; /**< [ 3: 3](RO/WRSL) Attention indicator present, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t mrlsp : 1; /**< [ 2: 2](RO/WRSL) MRL sensor present, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t pcp : 1; /**< [ 1: 1](RO/WRSL) Power controller present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t abp : 1; /**< [ 0: 0](RO/WRSL) Attention button present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t abp : 1; /**< [ 0: 0](RO/WRSL) Attention button present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t pcp : 1; /**< [ 1: 1](RO/WRSL) Power controller present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t mrlsp : 1; /**< [ 2: 2](RO/WRSL) MRL sensor present, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t aip : 1; /**< [ 3: 3](RO/WRSL) Attention indicator present, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t pip : 1; /**< [ 4: 4](RO/WRSL) Power indicator present, writable through PEM()_CFG_WR. However, the application must
+ not change this field. */
+ uint32_t hp_s : 1; /**< [ 5: 5](RO/WRSL) Hot plug surprise, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t hp_c : 1; /**< [ 6: 6](RO/WRSL) Hot plug capable, writable through PEM()_CFG_WR. However, the application must not
+ change this field. */
+ uint32_t sp_lv : 8; /**< [ 14: 7](RO/WRSL) Slot power limit value, writable through PEM()_CFG_WR. */
+ uint32_t sp_ls : 2; /**< [ 16: 15](RO/WRSL) Slot power limit scale, writable through PEM()_CFG_WR. */
+ uint32_t emip : 1; /**< [ 17: 17](RO/WRSL) Electromechanical interlock present, writable through PEM()_CFG_WR. However, the
+ application must not change this field. */
+ uint32_t nccs : 1; /**< [ 18: 18](RO/WRSL) No command complete support, writable through PEM()_CFG_WR. However, the application
+ must not change this field. */
+ uint32_t ps_num : 13; /**< [ 31: 19](RO/WRSL) Physical slot number, writable through PEM()_CFG_WR. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_slot_cap_s cn; */
+};
+typedef union bdk_pciercx_slot_cap bdk_pciercx_slot_cap_t;
+
+static inline uint64_t BDK_PCIERCX_SLOT_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SLOT_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x84ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SLOT_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SLOT_CAP(a) bdk_pciercx_slot_cap_t
+#define bustype_BDK_PCIERCX_SLOT_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SLOT_CAP(a) "PCIERCX_SLOT_CAP"
+#define busnum_BDK_PCIERCX_SLOT_CAP(a) (a)
+#define arguments_BDK_PCIERCX_SLOT_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_slot_cap2
+ *
+ * PCIe RC Slot Capabilities 2 Register
+ */
+union bdk_pciercx_slot_cap2
+{
+ uint32_t u;
+ struct bdk_pciercx_slot_cap2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_slot_cap2_s cn; */
+};
+typedef union bdk_pciercx_slot_cap2 bdk_pciercx_slot_cap2_t;
+
+static inline uint64_t BDK_PCIERCX_SLOT_CAP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SLOT_CAP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xa4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SLOT_CAP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SLOT_CAP2(a) bdk_pciercx_slot_cap2_t
+#define bustype_BDK_PCIERCX_SLOT_CAP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SLOT_CAP2(a) "PCIERCX_SLOT_CAP2"
+#define busnum_BDK_PCIERCX_SLOT_CAP2(a) (a)
+#define arguments_BDK_PCIERCX_SLOT_CAP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_slot_ctl
+ *
+ * PCIe RC Slot Control/Slot Status Register
+ */
+union bdk_pciercx_slot_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_slot_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t pds : 1; /**< [ 22: 22](RO/H) Presence detect state. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+#else /* Word 0 - Little Endian */
+ uint32_t abp_en : 1; /**< [ 0: 0](R/W) Attention button pressed enable. */
+ uint32_t pf_en : 1; /**< [ 1: 1](R/W) Power fault detected enable. */
+ uint32_t mrls_en : 1; /**< [ 2: 2](R/W) MRL sensor changed enable. */
+ uint32_t pd_en : 1; /**< [ 3: 3](R/W) Presence detect changed enable. */
+ uint32_t ccint_en : 1; /**< [ 4: 4](R/W) Command completed interrupt enable. */
+ uint32_t hpint_en : 1; /**< [ 5: 5](R/W) Hot-plug interrupt enable. */
+ uint32_t aic : 2; /**< [ 7: 6](R/W) Attention indicator control. */
+ uint32_t pic : 2; /**< [ 9: 8](R/W) Power indicator control. */
+ uint32_t pcc : 1; /**< [ 10: 10](R/W) Power controller control. */
+ uint32_t emic : 1; /**< [ 11: 11](WO) Electromechanical interlock control. */
+ uint32_t dlls_en : 1; /**< [ 12: 12](R/W) Data link layer state changed enable. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t abp_d : 1; /**< [ 16: 16](R/W1C/H) Attention button pressed. */
+ uint32_t pf_d : 1; /**< [ 17: 17](R/W1C/H) Power fault detected. */
+ uint32_t mrls_c : 1; /**< [ 18: 18](R/W1C/H) MRL sensor changed. */
+ uint32_t pd_c : 1; /**< [ 19: 19](R/W1C/H) Presence detect changed. */
+ uint32_t ccint_d : 1; /**< [ 20: 20](R/W1C/H) Command completed. */
+ uint32_t mrlss : 1; /**< [ 21: 21](RO) MRL sensor state. */
+ uint32_t pds : 1; /**< [ 22: 22](RO/H) Presence detect state. */
+ uint32_t emis : 1; /**< [ 23: 23](RO) Electromechanical interlock status. */
+ uint32_t dlls_c : 1; /**< [ 24: 24](R/W1C/H) Data link layer state changed. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_slot_ctl_s cn; */
+};
+typedef union bdk_pciercx_slot_ctl bdk_pciercx_slot_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_SLOT_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SLOT_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x88ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SLOT_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SLOT_CTL(a) bdk_pciercx_slot_ctl_t
+#define bustype_BDK_PCIERCX_SLOT_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SLOT_CTL(a) "PCIERCX_SLOT_CTL"
+#define busnum_BDK_PCIERCX_SLOT_CTL(a) (a)
+#define arguments_BDK_PCIERCX_SLOT_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_slot_ctl_stat2
+ *
+ * PCIe RC Slot Control 2 Register/Slot Status 2 Register
+ */
+union bdk_pciercx_slot_ctl_stat2
+{
+ uint32_t u;
+ struct bdk_pciercx_slot_ctl_stat2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_slot_ctl_stat2_s cn; */
+};
+typedef union bdk_pciercx_slot_ctl_stat2 bdk_pciercx_slot_ctl_stat2_t;
+
+static inline uint64_t BDK_PCIERCX_SLOT_CTL_STAT2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SLOT_CTL_STAT2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xa8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SLOT_CTL_STAT2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SLOT_CTL_STAT2(a) bdk_pciercx_slot_ctl_stat2_t
+#define bustype_BDK_PCIERCX_SLOT_CTL_STAT2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SLOT_CTL_STAT2(a) "PCIERCX_SLOT_CTL_STAT2"
+#define busnum_BDK_PCIERCX_SLOT_CTL_STAT2(a) (a)
+#define arguments_BDK_PCIERCX_SLOT_CTL_STAT2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_sn_base
+ *
+ * Device Serial Number Extended Capability Header Register
+ * Device Serial Number Extended Capability Header
+ */
+union bdk_pciercx_sn_base
+{
+ uint32_t u;
+ struct bdk_pciercx_sn_base_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_sn_base_s cn; */
+};
+typedef union bdk_pciercx_sn_base bdk_pciercx_sn_base_t;
+
+static inline uint64_t BDK_PCIERCX_SN_BASE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SN_BASE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x148ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SN_BASE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SN_BASE(a) bdk_pciercx_sn_base_t
+#define bustype_BDK_PCIERCX_SN_BASE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SN_BASE(a) "PCIERCX_SN_BASE"
+#define busnum_BDK_PCIERCX_SN_BASE(a) (a)
+#define arguments_BDK_PCIERCX_SN_BASE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_symb_timer
+ *
+ * PCIe RC Symbol Timer/Filter Mask Register 1
+ */
+union bdk_pciercx_symb_timer
+{
+ uint32_t u;
+ struct bdk_pciercx_symb_timer_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. The number of symbol times to wait
+ between transmitting SKP ordered sets. Note that the
+ controller actually waits the number of symbol times in this
+ register plus one between transmitting SKP ordered sets.
+
+ This value is not used at Gen3 speed; the skip interval
+ is hardcoded to 370 blocks. */
+#else /* Word 0 - Little Endian */
+ uint32_t skpiv : 11; /**< [ 10: 0](R/W) SKP interval value. The number of symbol times to wait
+ between transmitting SKP ordered sets. Note that the
+ controller actually waits the number of symbol times in this
+ register plus one between transmitting SKP ordered sets.
+
+ This value is not used at Gen3 speed; the skip interval
+ is hardcoded to 370 blocks. */
+ uint32_t reserved_11_14 : 4;
+ uint32_t dfcwt : 1; /**< [ 15: 15](R/W) Disable FC watchdog timer. */
+ uint32_t m_fun : 1; /**< [ 16: 16](R/W) Mask function. */
+ uint32_t m_pois_filt : 1; /**< [ 17: 17](R/W) Mask poisoned TLP filtering. */
+ uint32_t m_bar_match : 1; /**< [ 18: 18](R/W) Mask BAR match filtering. */
+ uint32_t m_cfg1_filt : 1; /**< [ 19: 19](R/W) Mask type 1 configuration request filtering. */
+ uint32_t m_lk_filt : 1; /**< [ 20: 20](R/W) Mask locked request filtering. */
+ uint32_t m_cpl_tag_err : 1; /**< [ 21: 21](R/W) Mask tag error rules for received completions. */
+ uint32_t m_cpl_rid_err : 1; /**< [ 22: 22](R/W) Mask requester ID mismatch error for received completions. */
+ uint32_t m_cpl_fun_err : 1; /**< [ 23: 23](R/W) Mask function mismatch error for received completions. */
+ uint32_t m_cpl_tc_err : 1; /**< [ 24: 24](R/W) Mask traffic class mismatch error for received completions. */
+ uint32_t m_cpl_attr_err : 1; /**< [ 25: 25](R/W) Mask attributes mismatch error for received completions. */
+ uint32_t m_cpl_len_err : 1; /**< [ 26: 26](R/W) Mask length mismatch error for received completions. */
+ uint32_t m_ecrc_filt : 1; /**< [ 27: 27](R/W) Mask ECRC error filtering. */
+ uint32_t m_cpl_ecrc_filt : 1; /**< [ 28: 28](R/W) Mask ECRC error filtering for completions. */
+ uint32_t msg_ctrl : 1; /**< [ 29: 29](R/W) Message control. The application must not change this field. */
+ uint32_t m_io_filt : 1; /**< [ 30: 30](R/W) Mask filtering of received I/O requests (RC mode only). */
+ uint32_t m_cfg0_filt : 1; /**< [ 31: 31](R/W) Mask filtering of received configuration requests (RC mode only). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_symb_timer_s cn; */
+};
+typedef union bdk_pciercx_symb_timer bdk_pciercx_symb_timer_t;
+
+static inline uint64_t BDK_PCIERCX_SYMB_TIMER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_SYMB_TIMER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x71cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_SYMB_TIMER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_SYMB_TIMER(a) bdk_pciercx_symb_timer_t
+#define bustype_BDK_PCIERCX_SYMB_TIMER(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_SYMB_TIMER(a) "PCIERCX_SYMB_TIMER"
+#define busnum_BDK_PCIERCX_SYMB_TIMER(a) (a)
+#define arguments_BDK_PCIERCX_SYMB_TIMER(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_timer_ctl
+ *
+ * PCIe RC PF Timer Control and Max Function Number Register
+ */
+union bdk_pciercx_timer_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_timer_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_31 : 1;
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast link timer scaling factor. Sets the scaling factor of
+ LTSSM timer when PCIERC_PORT_CTL[FLM] is set.
+ 0x0 = Scaling factor is 1024 (1 ms is 1 us).
+ 0x1 = Scaling factor is 256 (1 ms is 4 us).
+ 0x2 = Scaling factor is 64 (1 ms is 16 us).
+ 0x3 = Scaling factor is 16 (1 ms is 64 us). */
+ uint32_t updft : 5; /**< [ 28: 24](R/W) Update frequency timer. This is an internally reserved field, do not use. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W/H) Max number of functions supported.
+
+ Reset values:
+ _ UPEM: 0xf.
+ _ BPEM: 0x1. */
+#else /* Word 0 - Little Endian */
+ uint32_t mfuncn : 8; /**< [ 7: 0](R/W/H) Max number of functions supported.
+
+ Reset values:
+ _ UPEM: 0xf.
+ _ BPEM: 0x1. */
+ uint32_t reserved_8_13 : 6;
+ uint32_t tmrt : 5; /**< [ 18: 14](R/W/H) Timer modifier for replay timer. Increases the timer value for the replay timer, in
+ increments of 64 clock cycles. */
+ uint32_t tmanlt : 5; /**< [ 23: 19](R/W) Timer modifier for ACK/NAK latency timer. Increases the timer value for the ACK/NAK
+ latency timer, in increments of 64 clock cycles. */
+ uint32_t updft : 5; /**< [ 28: 24](R/W) Update frequency timer. This is an internally reserved field, do not use. */
+ uint32_t flmsf : 2; /**< [ 30: 29](R/W) Fast link timer scaling factor. Sets the scaling factor of
+ LTSSM timer when PCIERC_PORT_CTL[FLM] is set.
+ 0x0 = Scaling factor is 1024 (1 ms is 1 us).
+ 0x1 = Scaling factor is 256 (1 ms is 4 us).
+ 0x2 = Scaling factor is 64 (1 ms is 16 us).
+ 0x3 = Scaling factor is 16 (1 ms is 64 us). */
+ uint32_t reserved_31 : 1;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_timer_ctl_s cn; */
+};
+typedef union bdk_pciercx_timer_ctl bdk_pciercx_timer_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_TIMER_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TIMER_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x718ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TIMER_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TIMER_CTL(a) bdk_pciercx_timer_ctl_t
+#define bustype_BDK_PCIERCX_TIMER_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TIMER_CTL(a) "PCIERCX_TIMER_CTL"
+#define busnum_BDK_PCIERCX_TIMER_CTL(a) (a)
+#define arguments_BDK_PCIERCX_TIMER_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tlp_plog1
+ *
+ * PCIe RC TLP Prefix Log Register 1
+ * PCIe RC TLP Prefix Log Register 1
+ */
+union bdk_pciercx_tlp_plog1
+{
+ uint32_t u;
+ struct bdk_pciercx_tlp_plog1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO) TLP Prefix log register (first DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword1 : 32; /**< [ 31: 0](RO) TLP Prefix log register (first DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tlp_plog1_s cn; */
+};
+typedef union bdk_pciercx_tlp_plog1 bdk_pciercx_tlp_plog1_t;
+
+static inline uint64_t BDK_PCIERCX_TLP_PLOG1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TLP_PLOG1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x138ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TLP_PLOG1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TLP_PLOG1(a) bdk_pciercx_tlp_plog1_t
+#define bustype_BDK_PCIERCX_TLP_PLOG1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TLP_PLOG1(a) "PCIERCX_TLP_PLOG1"
+#define busnum_BDK_PCIERCX_TLP_PLOG1(a) (a)
+#define arguments_BDK_PCIERCX_TLP_PLOG1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tlp_plog2
+ *
+ * PCIe RC TLP Prefix Log Register 2
+ * PCIe RC TLP Prefix Log Register 2
+ */
+union bdk_pciercx_tlp_plog2
+{
+ uint32_t u;
+ struct bdk_pciercx_tlp_plog2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO) TLP Prefix log register (second DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword2 : 32; /**< [ 31: 0](RO) TLP Prefix log register (second DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tlp_plog2_s cn; */
+};
+typedef union bdk_pciercx_tlp_plog2 bdk_pciercx_tlp_plog2_t;
+
+static inline uint64_t BDK_PCIERCX_TLP_PLOG2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TLP_PLOG2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x13cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TLP_PLOG2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TLP_PLOG2(a) bdk_pciercx_tlp_plog2_t
+#define bustype_BDK_PCIERCX_TLP_PLOG2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TLP_PLOG2(a) "PCIERCX_TLP_PLOG2"
+#define busnum_BDK_PCIERCX_TLP_PLOG2(a) (a)
+#define arguments_BDK_PCIERCX_TLP_PLOG2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tlp_plog3
+ *
+ * PCIe RC TLP Prefix Log Register 3
+ * PCIe RC TLP Prefix Log Register 3
+ */
+union bdk_pciercx_tlp_plog3
+{
+ uint32_t u;
+ struct bdk_pciercx_tlp_plog3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO) TLP Prefix log register (third DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword3 : 32; /**< [ 31: 0](RO) TLP Prefix log register (third DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tlp_plog3_s cn; */
+};
+typedef union bdk_pciercx_tlp_plog3 bdk_pciercx_tlp_plog3_t;
+
+static inline uint64_t BDK_PCIERCX_TLP_PLOG3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TLP_PLOG3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x140ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TLP_PLOG3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TLP_PLOG3(a) bdk_pciercx_tlp_plog3_t
+#define bustype_BDK_PCIERCX_TLP_PLOG3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TLP_PLOG3(a) "PCIERCX_TLP_PLOG3"
+#define busnum_BDK_PCIERCX_TLP_PLOG3(a) (a)
+#define arguments_BDK_PCIERCX_TLP_PLOG3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tlp_plog4
+ *
+ * PCIe RC TLP Prefix Log Register 4
+ * PCIe RC TLP Prefix Log Register 4
+ */
+union bdk_pciercx_tlp_plog4
+{
+ uint32_t u;
+ struct bdk_pciercx_tlp_plog4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO) TLP Prefix log register (fourth DWORD). */
+#else /* Word 0 - Little Endian */
+ uint32_t dword4 : 32; /**< [ 31: 0](RO) TLP Prefix log register (fourth DWORD). */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tlp_plog4_s cn; */
+};
+typedef union bdk_pciercx_tlp_plog4 bdk_pciercx_tlp_plog4_t;
+
+static inline uint64_t BDK_PCIERCX_TLP_PLOG4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TLP_PLOG4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x144ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TLP_PLOG4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TLP_PLOG4(a) bdk_pciercx_tlp_plog4_t
+#define bustype_BDK_PCIERCX_TLP_PLOG4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TLP_PLOG4(a) "PCIERCX_TLP_PLOG4"
+#define busnum_BDK_PCIERCX_TLP_PLOG4(a) (a)
+#define arguments_BDK_PCIERCX_TLP_PLOG4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tph_ext_cap_hdr
+ *
+ * PCIe RC TPH Extended Capability Header Register
+ */
+union bdk_pciercx_tph_ext_cap_hdr
+{
+ uint32_t u;
+ struct bdk_pciercx_tph_ext_cap_hdr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 16; /**< [ 15: 0](RO/WRSL) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t cv : 4; /**< [ 19: 16](RO/WRSL) Capability version.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 12; /**< [ 31: 20](RO/WRSL) Next capability offset.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tph_ext_cap_hdr_s cn; */
+};
+typedef union bdk_pciercx_tph_ext_cap_hdr bdk_pciercx_tph_ext_cap_hdr_t;
+
+static inline uint64_t BDK_PCIERCX_TPH_EXT_CAP_HDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TPH_EXT_CAP_HDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x260ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TPH_EXT_CAP_HDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TPH_EXT_CAP_HDR(a) bdk_pciercx_tph_ext_cap_hdr_t
+#define bustype_BDK_PCIERCX_TPH_EXT_CAP_HDR(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TPH_EXT_CAP_HDR(a) "PCIERCX_TPH_EXT_CAP_HDR"
+#define busnum_BDK_PCIERCX_TPH_EXT_CAP_HDR(a) (a)
+#define arguments_BDK_PCIERCX_TPH_EXT_CAP_HDR(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tph_req_cap
+ *
+ * PCIe RC TPH Requestor Capability Register
+ */
+union bdk_pciercx_tph_req_cap
+{
+ uint32_t u;
+ struct bdk_pciercx_tph_req_cap_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_27_31 : 5;
+ uint32_t st_tbl_size : 11; /**< [ 26: 16](RO/WRSL) ST table size. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t st_tbl_l1 : 1; /**< [ 10: 10](RO/WRSL) Steering tag table bit 1. */
+ uint32_t st_tbl_l0 : 1; /**< [ 9: 9](RO/WRSL) Steering tag table bit 0. */
+ uint32_t ext : 1; /**< [ 8: 8](RO/WRSL) Extended TPH requester supported.
+ This field is writable through PEM()_CFG_WR. However, Extended TPH requester
+ is not supported. Therefore, the application must not write any value
+ other than 0x0 to this field. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t dev_sms : 1; /**< [ 2: 2](RO/WRSL) Device specific mode supported. */
+ uint32_t ivms : 1; /**< [ 1: 1](RO/WRSL) Interrupt vector mode supported. */
+ uint32_t nsms : 1; /**< [ 0: 0](RO) No ST mode supported. */
+#else /* Word 0 - Little Endian */
+ uint32_t nsms : 1; /**< [ 0: 0](RO) No ST mode supported. */
+ uint32_t ivms : 1; /**< [ 1: 1](RO/WRSL) Interrupt vector mode supported. */
+ uint32_t dev_sms : 1; /**< [ 2: 2](RO/WRSL) Device specific mode supported. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t ext : 1; /**< [ 8: 8](RO/WRSL) Extended TPH requester supported.
+ This field is writable through PEM()_CFG_WR. However, Extended TPH requester
+ is not supported. Therefore, the application must not write any value
+ other than 0x0 to this field. */
+ uint32_t st_tbl_l0 : 1; /**< [ 9: 9](RO/WRSL) Steering tag table bit 0. */
+ uint32_t st_tbl_l1 : 1; /**< [ 10: 10](RO/WRSL) Steering tag table bit 1. */
+ uint32_t reserved_11_15 : 5;
+ uint32_t st_tbl_size : 11; /**< [ 26: 16](RO/WRSL) ST table size. */
+ uint32_t reserved_27_31 : 5;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tph_req_cap_s cn; */
+};
+typedef union bdk_pciercx_tph_req_cap bdk_pciercx_tph_req_cap_t;
+
+static inline uint64_t BDK_PCIERCX_TPH_REQ_CAP(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TPH_REQ_CAP(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x264ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TPH_REQ_CAP", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TPH_REQ_CAP(a) bdk_pciercx_tph_req_cap_t
+#define bustype_BDK_PCIERCX_TPH_REQ_CAP(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TPH_REQ_CAP(a) "PCIERCX_TPH_REQ_CAP"
+#define busnum_BDK_PCIERCX_TPH_REQ_CAP(a) (a)
+#define arguments_BDK_PCIERCX_TPH_REQ_CAP(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tph_req_ctl
+ *
+ * PCIe RC TPH Requestor Control Register
+ */
+union bdk_pciercx_tph_req_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_tph_req_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t en : 2; /**< [ 9: 8](R/W) TPH requestor enable. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t msel : 3; /**< [ 2: 0](R/W) ST mode select. */
+#else /* Word 0 - Little Endian */
+ uint32_t msel : 3; /**< [ 2: 0](R/W) ST mode select. */
+ uint32_t reserved_3_7 : 5;
+ uint32_t en : 2; /**< [ 9: 8](R/W) TPH requestor enable. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tph_req_ctl_s cn; */
+};
+typedef union bdk_pciercx_tph_req_ctl bdk_pciercx_tph_req_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_TPH_REQ_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TPH_REQ_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x268ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TPH_REQ_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TPH_REQ_CTL(a) bdk_pciercx_tph_req_ctl_t
+#define bustype_BDK_PCIERCX_TPH_REQ_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TPH_REQ_CTL(a) "PCIERCX_TPH_REQ_CTL"
+#define busnum_BDK_PCIERCX_TPH_REQ_CTL(a) (a)
+#define arguments_BDK_PCIERCX_TPH_REQ_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_tph_st_table0
+ *
+ * PCIe RC TPH St Table Register 0
+ */
+union bdk_pciercx_tph_st_table0
+{
+ uint32_t u;
+ struct bdk_pciercx_tph_st_table0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t ubyte : 8; /**< [ 15: 8](RO) ST table 0 upper byte. */
+ uint32_t lbyte : 8; /**< [ 7: 0](RO) ST table 0 lower byte. */
+#else /* Word 0 - Little Endian */
+ uint32_t lbyte : 8; /**< [ 7: 0](RO) ST table 0 lower byte. */
+ uint32_t ubyte : 8; /**< [ 15: 8](RO) ST table 0 upper byte. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_tph_st_table0_s cn; */
+};
+typedef union bdk_pciercx_tph_st_table0 bdk_pciercx_tph_st_table0_t;
+
+static inline uint64_t BDK_PCIERCX_TPH_ST_TABLE0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TPH_ST_TABLE0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x26cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TPH_ST_TABLE0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TPH_ST_TABLE0(a) bdk_pciercx_tph_st_table0_t
+#define bustype_BDK_PCIERCX_TPH_ST_TABLE0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TPH_ST_TABLE0(a) "PCIERCX_TPH_ST_TABLE0"
+#define busnum_BDK_PCIERCX_TPH_ST_TABLE0(a) (a)
+#define arguments_BDK_PCIERCX_TPH_ST_TABLE0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_trgt_cpl_lut_del_ent
+ *
+ * PCIe RC TRGT_CPL_LUT Delete Entry Control Register
+ */
+union bdk_pciercx_trgt_cpl_lut_del_ent
+{
+ uint32_t u;
+ struct bdk_pciercx_trgt_cpl_lut_del_ent_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t del_en : 1; /**< [ 31: 31](R/W1C/H) This is a one-shot bit. Writing a one triggers the deletion of the target
+ completion LUT entry that is specified in [LKUP_ID]. This is a self-clearing
+ register field. Reading from this register field always returns a zero. */
+ uint32_t lkup_id : 31; /**< [ 30: 0](R/W) This number selects one entry to delete from the target completion LUT. */
+#else /* Word 0 - Little Endian */
+ uint32_t lkup_id : 31; /**< [ 30: 0](R/W) This number selects one entry to delete from the target completion LUT. */
+ uint32_t del_en : 1; /**< [ 31: 31](R/W1C/H) This is a one-shot bit. Writing a one triggers the deletion of the target
+ completion LUT entry that is specified in [LKUP_ID]. This is a self-clearing
+ register field. Reading from this register field always returns a zero. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_trgt_cpl_lut_del_ent_s cn; */
+};
+typedef union bdk_pciercx_trgt_cpl_lut_del_ent bdk_pciercx_trgt_cpl_lut_del_ent_t;
+
+static inline uint64_t BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8c8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TRGT_CPL_LUT_DEL_ENT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(a) bdk_pciercx_trgt_cpl_lut_del_ent_t
+#define bustype_BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(a) "PCIERCX_TRGT_CPL_LUT_DEL_ENT"
+#define busnum_BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(a) (a)
+#define arguments_BDK_PCIERCX_TRGT_CPL_LUT_DEL_ENT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_trgt_map_ctl
+ *
+ * PCIe RC Programmable Target Map Control Register
+ */
+union bdk_pciercx_trgt_map_ctl
+{
+ uint32_t u;
+ struct bdk_pciercx_trgt_map_ctl_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_21_31 : 11;
+ uint32_t map_idx : 5; /**< [ 20: 16](R/W/H) The number of the PF function on which target values are set. This register does
+ not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t map_vf : 6; /**< [ 12: 7](R/W/H) Target values for each BAR on the VF Function selected by the index number. This register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t map_rom : 1; /**< [ 6: 6](R/W/H) Target values for the ROM page of the PF Function selected by the index number. This
+ register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t map_pf : 6; /**< [ 5: 0](R/W/H) Target values for each BAR on the PF Function selected by the index number. This register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+#else /* Word 0 - Little Endian */
+ uint32_t map_pf : 6; /**< [ 5: 0](R/W/H) Target values for each BAR on the PF Function selected by the index number. This register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t map_rom : 1; /**< [ 6: 6](R/W/H) Target values for the ROM page of the PF Function selected by the index number. This
+ register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t map_vf : 6; /**< [ 12: 7](R/W/H) Target values for each BAR on the VF Function selected by the index number. This register
+ does not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t reserved_13_15 : 3;
+ uint32_t map_idx : 5; /**< [ 20: 16](R/W/H) The number of the PF function on which target values are set. This register does
+ not respect the Byte Enable setting. any write will affect all register bits. */
+ uint32_t reserved_21_31 : 11;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_trgt_map_ctl_s cn; */
+};
+typedef union bdk_pciercx_trgt_map_ctl bdk_pciercx_trgt_map_ctl_t;
+
+static inline uint64_t BDK_PCIERCX_TRGT_MAP_CTL(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_TRGT_MAP_CTL(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x81cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_TRGT_MAP_CTL", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_TRGT_MAP_CTL(a) bdk_pciercx_trgt_map_ctl_t
+#define bustype_BDK_PCIERCX_TRGT_MAP_CTL(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_TRGT_MAP_CTL(a) "PCIERCX_TRGT_MAP_CTL"
+#define busnum_BDK_PCIERCX_TRGT_MAP_CTL(a) (a)
+#define arguments_BDK_PCIERCX_TRGT_MAP_CTL(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ucor_err_msk
+ *
+ * PCIe RC Uncorrectable Error Mask Register
+ */
+union bdk_pciercx_ucor_err_msk
+{
+ uint32_t u;
+ struct bdk_pciercx_ucor_err_msk_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](R/W) TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t avm : 1; /**< [ 21: 21](R/W) ACS violation mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as clear. */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as clear. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t avm : 1; /**< [ 21: 21](R/W) ACS violation mask. */
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked mask. */
+ uint32_t tpbem : 1; /**< [ 25: 25](R/W) TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_ucor_err_msk_cn
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbem : 1; /**< [ 25: 25](R/W) TLP prefix blocked error mask. */
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t avm : 1; /**< [ 21: 21](R/W) ACS violation mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as clear. */
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpem : 1; /**< [ 4: 4](R/W) Data link protocol error mask. */
+ uint32_t sdem : 1; /**< [ 5: 5](R/W) Surprise down error mask. Writeable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as clear. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlpm : 1; /**< [ 12: 12](R/W) Poisoned TLP mask. */
+ uint32_t fcpem : 1; /**< [ 13: 13](R/W) Flow control protocol error mask. */
+ uint32_t ctm : 1; /**< [ 14: 14](R/W) Completion timeout mask. */
+ uint32_t cam : 1; /**< [ 15: 15](R/W) Completer abort mask. */
+ uint32_t ucm : 1; /**< [ 16: 16](R/W) Unexpected completion mask. */
+ uint32_t rom : 1; /**< [ 17: 17](R/W) Receiver overflow mask. */
+ uint32_t mtlpm : 1; /**< [ 18: 18](R/W) Malformed TLP mask. */
+ uint32_t ecrcem : 1; /**< [ 19: 19](R/W) ECRC error mask. */
+ uint32_t urem : 1; /**< [ 20: 20](R/W) Unsupported request error mask. */
+ uint32_t avm : 1; /**< [ 21: 21](R/W) ACS violation mask. */
+ uint32_t uciem : 1; /**< [ 22: 22](R/W) Uncorrectable internal error mask. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombm : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked mask. */
+ uint32_t tpbem : 1; /**< [ 25: 25](R/W) TLP prefix blocked error mask. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn;
+};
+typedef union bdk_pciercx_ucor_err_msk bdk_pciercx_ucor_err_msk_t;
+
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_MSK(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_MSK(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x108ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UCOR_ERR_MSK", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UCOR_ERR_MSK(a) bdk_pciercx_ucor_err_msk_t
+#define bustype_BDK_PCIERCX_UCOR_ERR_MSK(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UCOR_ERR_MSK(a) "PCIERCX_UCOR_ERR_MSK"
+#define busnum_BDK_PCIERCX_UCOR_ERR_MSK(a) (a)
+#define arguments_BDK_PCIERCX_UCOR_ERR_MSK(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ucor_err_sev
+ *
+ * PCIe RC Uncorrectable Error Severity Register
+ */
+union bdk_pciercx_ucor_err_sev
+{
+ uint32_t u;
+ struct bdk_pciercx_ucor_err_sev_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](R/W) TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t reserved_23 : 1;
+ uint32_t ies : 1; /**< [ 22: 22](R/W) Uncorrectable internal error severity. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W) AVCS violation severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as set. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as set. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W) AVCS violation severity. */
+ uint32_t ies : 1; /**< [ 22: 22](R/W) Uncorrectable internal error severity. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](R/W) TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_ucor_err_sev_cn
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](R/W) TLP prefix blocked error severity. */
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t reserved_23 : 1;
+ uint32_t ies : 1; /**< [ 22: 22](R/W) Uncorrectable internal error severity. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W) AVCS violation severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as set. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W) Data link protocol error severity. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W) Surprise down error severity. Writable when PCIERC_LINK_CAP[SDERC] is set.
+ When PCIERC_LINK_CAP[SDERC] is clear, will always read as set. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W) Poisoned TLP severity. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W) Flow control protocol error severity. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W) Completion timeout severity. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W) Completer abort severity. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W) Unexpected completion severity. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W) Receiver overflow severity. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W) Malformed TLP severity. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W) ECRC error severity. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W) Unsupported request error severity. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W) AVCS violation severity. */
+ uint32_t ies : 1; /**< [ 22: 22](R/W) Uncorrectable internal error severity. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](R/W) Unsupported AtomicOp egress blocked severity. */
+ uint32_t tpbes : 1; /**< [ 25: 25](R/W) TLP prefix blocked error severity. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn;
+};
+typedef union bdk_pciercx_ucor_err_sev bdk_pciercx_ucor_err_sev_t;
+
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_SEV(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_SEV(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x10cll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UCOR_ERR_SEV", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UCOR_ERR_SEV(a) bdk_pciercx_ucor_err_sev_t
+#define bustype_BDK_PCIERCX_UCOR_ERR_SEV(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UCOR_ERR_SEV(a) "PCIERCX_UCOR_ERR_SEV"
+#define busnum_BDK_PCIERCX_UCOR_ERR_SEV(a) (a)
+#define arguments_BDK_PCIERCX_UCOR_ERR_SEV(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ucor_err_stat
+ *
+ * PCIe RC Uncorrectable Error Status Register
+ */
+union bdk_pciercx_ucor_err_stat
+{
+ uint32_t u;
+ struct bdk_pciercx_ucor_err_stat_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W1C) ACS violation status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise link down error status. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t reserved_0_3 : 4;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_3 : 4;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise link down error status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W1C) ACS violation status. */
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_pciercx_ucor_err_stat_cn
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_26_31 : 6;
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t reserved_23 : 1;
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W1C) ACS violation status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise link down error status. */
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t reserved_1_3 : 3;
+ uint32_t reserved_0 : 1;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0 : 1;
+ uint32_t reserved_1_3 : 3;
+ uint32_t dlpes : 1; /**< [ 4: 4](R/W1C/H) Data link protocol error status. */
+ uint32_t sdes : 1; /**< [ 5: 5](R/W1C/H) Surprise link down error status. */
+ uint32_t reserved_6_11 : 6;
+ uint32_t ptlps : 1; /**< [ 12: 12](R/W1C/H) Poisoned TLP status. */
+ uint32_t fcpes : 1; /**< [ 13: 13](R/W1C/H) Flow control protocol error status. */
+ uint32_t cts : 1; /**< [ 14: 14](R/W1C/H) Completion timeout status. */
+ uint32_t cas : 1; /**< [ 15: 15](R/W1C/H) Completer abort status. */
+ uint32_t ucs : 1; /**< [ 16: 16](R/W1C/H) Unexpected completion status. */
+ uint32_t ros : 1; /**< [ 17: 17](R/W1C/H) Receiver overflow status. */
+ uint32_t mtlps : 1; /**< [ 18: 18](R/W1C/H) Malformed TLP status. */
+ uint32_t ecrces : 1; /**< [ 19: 19](R/W1C/H) ECRC error status. */
+ uint32_t ures : 1; /**< [ 20: 20](R/W1C/H) Unsupported request error status. */
+ uint32_t avs : 1; /**< [ 21: 21](R/W1C) ACS violation status. */
+ uint32_t ucies : 1; /**< [ 22: 22](R/W1C/H) Uncorrectable internal error status. */
+ uint32_t reserved_23 : 1;
+ uint32_t uatombs : 1; /**< [ 24: 24](RO) Unsupported AtomicOp egress blocked status. */
+ uint32_t tpbes : 1; /**< [ 25: 25](RO) Unsupported TLP prefix blocked error status. */
+ uint32_t reserved_26_31 : 6;
+#endif /* Word 0 - End */
+ } cn;
+};
+typedef union bdk_pciercx_ucor_err_stat bdk_pciercx_ucor_err_stat_t;
+
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_STAT(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UCOR_ERR_STAT(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x104ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UCOR_ERR_STAT", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UCOR_ERR_STAT(a) bdk_pciercx_ucor_err_stat_t
+#define bustype_BDK_PCIERCX_UCOR_ERR_STAT(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UCOR_ERR_STAT(a) "PCIERCX_UCOR_ERR_STAT"
+#define busnum_BDK_PCIERCX_UCOR_ERR_STAT(a) (a)
+#define arguments_BDK_PCIERCX_UCOR_ERR_STAT(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap0
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap0
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap0_s cn; */
+};
+typedef union bdk_pciercx_unused_cap0 bdk_pciercx_unused_cap0_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xbcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP0(a) bdk_pciercx_unused_cap0_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP0(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP0(a) "PCIERCX_UNUSED_CAP0"
+#define busnum_BDK_PCIERCX_UNUSED_CAP0(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP0(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap1
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap1
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap1_s cn; */
+};
+typedef union bdk_pciercx_unused_cap1 bdk_pciercx_unused_cap1_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xc0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP1(a) bdk_pciercx_unused_cap1_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP1(a) "PCIERCX_UNUSED_CAP1"
+#define busnum_BDK_PCIERCX_UNUSED_CAP1(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap10
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap10
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap10_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap10_s cn; */
+};
+typedef union bdk_pciercx_unused_cap10 bdk_pciercx_unused_cap10_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP10(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP10(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xe4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP10", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP10(a) bdk_pciercx_unused_cap10_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP10(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP10(a) "PCIERCX_UNUSED_CAP10"
+#define busnum_BDK_PCIERCX_UNUSED_CAP10(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP10(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap11
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap11
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap11_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap11_s cn; */
+};
+typedef union bdk_pciercx_unused_cap11 bdk_pciercx_unused_cap11_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP11(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP11(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xe8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP11", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP11(a) bdk_pciercx_unused_cap11_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP11(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP11(a) "PCIERCX_UNUSED_CAP11"
+#define busnum_BDK_PCIERCX_UNUSED_CAP11(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP11(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap12
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap12
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap12_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap12_s cn; */
+};
+typedef union bdk_pciercx_unused_cap12 bdk_pciercx_unused_cap12_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP12(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP12(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xecll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP12", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP12(a) bdk_pciercx_unused_cap12_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP12(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP12(a) "PCIERCX_UNUSED_CAP12"
+#define busnum_BDK_PCIERCX_UNUSED_CAP12(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP12(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap13
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap13
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap13_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap13_s cn; */
+};
+typedef union bdk_pciercx_unused_cap13 bdk_pciercx_unused_cap13_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP13(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP13(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xf0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP13", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP13(a) bdk_pciercx_unused_cap13_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP13(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP13(a) "PCIERCX_UNUSED_CAP13"
+#define busnum_BDK_PCIERCX_UNUSED_CAP13(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP13(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap14
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap14
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap14_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap14_s cn; */
+};
+typedef union bdk_pciercx_unused_cap14 bdk_pciercx_unused_cap14_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP14(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP14(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xf4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP14", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP14(a) bdk_pciercx_unused_cap14_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP14(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP14(a) "PCIERCX_UNUSED_CAP14"
+#define busnum_BDK_PCIERCX_UNUSED_CAP14(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP14(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap15
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap15
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap15_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap15_s cn; */
+};
+typedef union bdk_pciercx_unused_cap15 bdk_pciercx_unused_cap15_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP15(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP15(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xf8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP15", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP15(a) bdk_pciercx_unused_cap15_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP15(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP15(a) "PCIERCX_UNUSED_CAP15"
+#define busnum_BDK_PCIERCX_UNUSED_CAP15(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP15(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap16
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap16
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap16_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap16_s cn; */
+};
+typedef union bdk_pciercx_unused_cap16 bdk_pciercx_unused_cap16_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP16(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP16(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xfcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP16", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP16(a) bdk_pciercx_unused_cap16_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP16(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP16(a) "PCIERCX_UNUSED_CAP16"
+#define busnum_BDK_PCIERCX_UNUSED_CAP16(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP16(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap2
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap2
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap2_s cn; */
+};
+typedef union bdk_pciercx_unused_cap2 bdk_pciercx_unused_cap2_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xc4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP2(a) bdk_pciercx_unused_cap2_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP2(a) "PCIERCX_UNUSED_CAP2"
+#define busnum_BDK_PCIERCX_UNUSED_CAP2(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP2(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap3
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap3
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap3_s cn; */
+};
+typedef union bdk_pciercx_unused_cap3 bdk_pciercx_unused_cap3_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xc8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP3(a) bdk_pciercx_unused_cap3_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP3(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP3(a) "PCIERCX_UNUSED_CAP3"
+#define busnum_BDK_PCIERCX_UNUSED_CAP3(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP3(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap4
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap4
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap4_s cn; */
+};
+typedef union bdk_pciercx_unused_cap4 bdk_pciercx_unused_cap4_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xccll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP4(a) bdk_pciercx_unused_cap4_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP4(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP4(a) "PCIERCX_UNUSED_CAP4"
+#define busnum_BDK_PCIERCX_UNUSED_CAP4(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP4(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap7
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap7
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap7_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap7_s cn; */
+};
+typedef union bdk_pciercx_unused_cap7 bdk_pciercx_unused_cap7_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP7(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP7(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xd8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP7", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP7(a) bdk_pciercx_unused_cap7_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP7(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP7(a) "PCIERCX_UNUSED_CAP7"
+#define busnum_BDK_PCIERCX_UNUSED_CAP7(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP7(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap8
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap8
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap8_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap8_s cn; */
+};
+typedef union bdk_pciercx_unused_cap8 bdk_pciercx_unused_cap8_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP8(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP8(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xdcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP8", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP8(a) bdk_pciercx_unused_cap8_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP8(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP8(a) "PCIERCX_UNUSED_CAP8"
+#define busnum_BDK_PCIERCX_UNUSED_CAP8(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP8(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_unused_cap9
+ *
+ * PCIe RC Unused Capability Registers
+ */
+union bdk_pciercx_unused_cap9
+{
+ uint32_t u;
+ struct bdk_pciercx_unused_cap9_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t sw_hdr : 32; /**< [ 31: 0](RO/WRSL) Software headers. This configuration area is opaque to PCIERC hardware. It is available
+ for software to add additional configuration capabilities.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_unused_cap9_s cn; */
+};
+typedef union bdk_pciercx_unused_cap9 bdk_pciercx_unused_cap9_t;
+
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP9(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UNUSED_CAP9(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xe0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UNUSED_CAP9", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UNUSED_CAP9(a) bdk_pciercx_unused_cap9_t
+#define bustype_BDK_PCIERCX_UNUSED_CAP9(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UNUSED_CAP9(a) "PCIERCX_UNUSED_CAP9"
+#define busnum_BDK_PCIERCX_UNUSED_CAP9(a) (a)
+#define arguments_BDK_PCIERCX_UNUSED_CAP9(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_upconfig
+ *
+ * PCIe RC UpConfigure Multi-lane Control Register
+ */
+union bdk_pciercx_upconfig
+{
+ uint32_t u;
+ struct bdk_pciercx_upconfig_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t upc_supp : 1; /**< [ 7: 7](R/W) Upconfigure support.
+ The core sends this value to the link upconfigure capability in TS2 ordered
+ sets in Configuration.Complete state. */
+ uint32_t dir_lnk_wdth_chg : 1; /**< [ 6: 6](R/W/H) Directed link width change.
+ The core always moves to configuration state through recovery state
+ when this bit is set.
+
+ If PCIERC_RAS_EINJ_CTL6PE[LTSSM_VAR] is set and PCIERC_LINK_CTL2[HASD]
+ is zero, the core starts upconfigure or autonomous width
+ downsizing (to the [TRGT_LNK_WDTH] value) in the configuration
+ state.
+
+ If [TRGT_LNK_WDTH] is 0x0, the core does not start upconfigure or autonomous
+ width downsizing in the configuration state.
+
+ The core self-clears this field when the core accepts this
+ request. */
+ uint32_t trgt_lnk_wdth : 6; /**< [ 5: 0](R/W/H) Target link width.
+ 0x0 = Core does not start upconfigure or autonomous width downsizing in configuration
+ state.
+ 0x1 = x1.
+ 0x2 = x2.
+ 0x4 = x4.
+ 0x8 = x8.
+ 0x10 = x16.
+ 0x20 = x32 (Not supported). */
+#else /* Word 0 - Little Endian */
+ uint32_t trgt_lnk_wdth : 6; /**< [ 5: 0](R/W/H) Target link width.
+ 0x0 = Core does not start upconfigure or autonomous width downsizing in configuration
+ state.
+ 0x1 = x1.
+ 0x2 = x2.
+ 0x4 = x4.
+ 0x8 = x8.
+ 0x10 = x16.
+ 0x20 = x32 (Not supported). */
+ uint32_t dir_lnk_wdth_chg : 1; /**< [ 6: 6](R/W/H) Directed link width change.
+ The core always moves to configuration state through recovery state
+ when this bit is set.
+
+ If PCIERC_RAS_EINJ_CTL6PE[LTSSM_VAR] is set and PCIERC_LINK_CTL2[HASD]
+ is zero, the core starts upconfigure or autonomous width
+ downsizing (to the [TRGT_LNK_WDTH] value) in the configuration
+ state.
+
+ If [TRGT_LNK_WDTH] is 0x0, the core does not start upconfigure or autonomous
+ width downsizing in the configuration state.
+
+ The core self-clears this field when the core accepts this
+ request. */
+ uint32_t upc_supp : 1; /**< [ 7: 7](R/W) Upconfigure support.
+ The core sends this value to the link upconfigure capability in TS2 ordered
+ sets in Configuration.Complete state. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_upconfig_s cn; */
+};
+typedef union bdk_pciercx_upconfig bdk_pciercx_upconfig_t;
+
+static inline uint64_t BDK_PCIERCX_UPCONFIG(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_UPCONFIG(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8c0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_UPCONFIG", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_UPCONFIG(a) bdk_pciercx_upconfig_t
+#define bustype_BDK_PCIERCX_UPCONFIG(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_UPCONFIG(a) "PCIERCX_UPCONFIG"
+#define busnum_BDK_PCIERCX_UPCONFIG(a) (a)
+#define arguments_BDK_PCIERCX_UPCONFIG(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ver_num
+ *
+ * PCIe RC Controller IIP Release Version Number Register
+ */
+union bdk_pciercx_ver_num
+{
+ uint32_t u;
+ struct bdk_pciercx_ver_num_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vn : 32; /**< [ 31: 0](RO) Version number. Convert hex characters to ASCII to interpret. */
+#else /* Word 0 - Little Endian */
+ uint32_t vn : 32; /**< [ 31: 0](RO) Version number. Convert hex characters to ASCII to interpret. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ver_num_s cn; */
+};
+typedef union bdk_pciercx_ver_num bdk_pciercx_ver_num_t;
+
+static inline uint64_t BDK_PCIERCX_VER_NUM(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_VER_NUM(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8f8ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_VER_NUM", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_VER_NUM(a) bdk_pciercx_ver_num_t
+#define bustype_BDK_PCIERCX_VER_NUM(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_VER_NUM(a) "PCIERCX_VER_NUM"
+#define busnum_BDK_PCIERCX_VER_NUM(a) (a)
+#define arguments_BDK_PCIERCX_VER_NUM(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_ver_type
+ *
+ * PCIe RC Contorller IIP Release Version Type Register
+ */
+union bdk_pciercx_ver_type
+{
+ uint32_t u;
+ struct bdk_pciercx_ver_type_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vt : 32; /**< [ 31: 0](RO) Version type. Convert hex characters to ASCII to interpret. */
+#else /* Word 0 - Little Endian */
+ uint32_t vt : 32; /**< [ 31: 0](RO) Version type. Convert hex characters to ASCII to interpret. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_ver_type_s cn; */
+};
+typedef union bdk_pciercx_ver_type bdk_pciercx_ver_type_t;
+
+static inline uint64_t BDK_PCIERCX_VER_TYPE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_VER_TYPE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x8fcll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_VER_TYPE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_VER_TYPE(a) bdk_pciercx_ver_type_t
+#define bustype_BDK_PCIERCX_VER_TYPE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_VER_TYPE(a) "PCIERCX_VER_TYPE"
+#define busnum_BDK_PCIERCX_VER_TYPE(a) (a)
+#define arguments_BDK_PCIERCX_VER_TYPE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_vpd_base
+ *
+ * PCIe RC PCI Express VPD Control and Capabilities Register
+ * Internal:
+ * All 32 bits are writable through PEM()_CFG_WR, so that software may replace VPD
+ * capability with another desired capablility as a PCIERC_UNUSED_CAP5, (e.g. Enhanced
+ * Allocation) if desired.
+ */
+union bdk_pciercx_vpd_base
+{
+ uint32_t u;
+ struct bdk_pciercx_vpd_base_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t flag : 1; /**< [ 31: 31](R/W) VPD flag. */
+ uint32_t addr : 15; /**< [ 30: 16](R/W) VPD address. */
+ uint32_t nco : 8; /**< [ 15: 8](RO/WRSL) Next capability offset. End of list.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t pcieec : 8; /**< [ 7: 0](RO) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+#else /* Word 0 - Little Endian */
+ uint32_t pcieec : 8; /**< [ 7: 0](RO) PCI Express extended capability.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t nco : 8; /**< [ 15: 8](RO/WRSL) Next capability offset. End of list.
+ Writable through PEM()_CFG_WR. However, the application must not change this field. */
+ uint32_t addr : 15; /**< [ 30: 16](R/W) VPD address. */
+ uint32_t flag : 1; /**< [ 31: 31](R/W) VPD flag. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_vpd_base_s cn; */
+};
+typedef union bdk_pciercx_vpd_base bdk_pciercx_vpd_base_t;
+
+static inline uint64_t BDK_PCIERCX_VPD_BASE(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_VPD_BASE(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xd0ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_VPD_BASE", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_VPD_BASE(a) bdk_pciercx_vpd_base_t
+#define bustype_BDK_PCIERCX_VPD_BASE(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_VPD_BASE(a) "PCIERCX_VPD_BASE"
+#define busnum_BDK_PCIERCX_VPD_BASE(a) (a)
+#define arguments_BDK_PCIERCX_VPD_BASE(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_vpd_data
+ *
+ * PCIe RC PCI Express VPD Data Register
+ * Internal:
+ * All 32 bits are writable through PEM()_CFG_WR, so that software may replace VPD
+ * capability with another desired capablility as a PCIERC_UNUSED_CAP6, (e.g. Enhanced
+ * Allocation) if desired.
+ */
+union bdk_pciercx_vpd_data
+{
+ uint32_t u;
+ struct bdk_pciercx_vpd_data_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t data : 32; /**< [ 31: 0](R/W) VPD data. */
+#else /* Word 0 - Little Endian */
+ uint32_t data : 32; /**< [ 31: 0](R/W) VPD data. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_vpd_data_s cn; */
+};
+typedef union bdk_pciercx_vpd_data bdk_pciercx_vpd_data_t;
+
+static inline uint64_t BDK_PCIERCX_VPD_DATA(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_VPD_DATA(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0xd4ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_VPD_DATA", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_VPD_DATA(a) bdk_pciercx_vpd_data_t
+#define bustype_BDK_PCIERCX_VPD_DATA(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_VPD_DATA(a) "PCIERCX_VPD_DATA"
+#define busnum_BDK_PCIERCX_VPD_DATA(a) (a)
+#define arguments_BDK_PCIERCX_VPD_DATA(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_xmit_arb1
+ *
+ * PCIe RC VC Transmit Arbitration Register 1
+ */
+union bdk_pciercx_xmit_arb1
+{
+ uint32_t u;
+ struct bdk_pciercx_xmit_arb1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO) WRR weight for VC3. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO) WRR weight for VC2. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO) WRR weight for VC1. */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO) WRR weight for VC0. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc0 : 8; /**< [ 7: 0](RO) WRR weight for VC0. */
+ uint32_t wrr_vc1 : 8; /**< [ 15: 8](RO) WRR weight for VC1. */
+ uint32_t wrr_vc2 : 8; /**< [ 23: 16](RO) WRR weight for VC2. */
+ uint32_t wrr_vc3 : 8; /**< [ 31: 24](RO) WRR weight for VC3. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_xmit_arb1_s cn; */
+};
+typedef union bdk_pciercx_xmit_arb1 bdk_pciercx_xmit_arb1_t;
+
+static inline uint64_t BDK_PCIERCX_XMIT_ARB1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_XMIT_ARB1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x740ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_XMIT_ARB1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_XMIT_ARB1(a) bdk_pciercx_xmit_arb1_t
+#define bustype_BDK_PCIERCX_XMIT_ARB1(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_XMIT_ARB1(a) "PCIERCX_XMIT_ARB1"
+#define busnum_BDK_PCIERCX_XMIT_ARB1(a) (a)
+#define arguments_BDK_PCIERCX_XMIT_ARB1(a) (a),-1,-1,-1
+
+/**
+ * Register (PCICONFIGRC) pcierc#_xmit_arb2
+ *
+ * PCIe RC VC Transmit Arbitration Register 2
+ */
+union bdk_pciercx_xmit_arb2
+{
+ uint32_t u;
+ struct bdk_pciercx_xmit_arb2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO) WRR weight for VC7. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO) WRR weight for VC6. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO) WRR weight for VC5. */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO) WRR weight for VC4. */
+#else /* Word 0 - Little Endian */
+ uint32_t wrr_vc4 : 8; /**< [ 7: 0](RO) WRR weight for VC4. */
+ uint32_t wrr_vc5 : 8; /**< [ 15: 8](RO) WRR weight for VC5. */
+ uint32_t wrr_vc6 : 8; /**< [ 23: 16](RO) WRR weight for VC6. */
+ uint32_t wrr_vc7 : 8; /**< [ 31: 24](RO) WRR weight for VC7. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_pciercx_xmit_arb2_s cn; */
+};
+typedef union bdk_pciercx_xmit_arb2 bdk_pciercx_xmit_arb2_t;
+
+static inline uint64_t BDK_PCIERCX_XMIT_ARB2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_PCIERCX_XMIT_ARB2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=3))
+ return 0x744ll + 0x100000000ll * ((a) & 0x3);
+ __bdk_csr_fatal("PCIERCX_XMIT_ARB2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_PCIERCX_XMIT_ARB2(a) bdk_pciercx_xmit_arb2_t
+#define bustype_BDK_PCIERCX_XMIT_ARB2(a) BDK_CSR_TYPE_PCICONFIGRC
+#define basename_BDK_PCIERCX_XMIT_ARB2(a) "PCIERCX_XMIT_ARB2"
+#define busnum_BDK_PCIERCX_XMIT_ARB2(a) (a)
+#define arguments_BDK_PCIERCX_XMIT_ARB2(a) (a),-1,-1,-1
+
+#endif /* __BDK_CSRS_PCIERC_H__ */