diff options
Diffstat (limited to 'sys/contrib/octeon-sdk/cvmx-csr-typedefs.h')
-rw-r--r-- | sys/contrib/octeon-sdk/cvmx-csr-typedefs.h | 74070 |
1 files changed, 95 insertions, 73975 deletions
diff --git a/sys/contrib/octeon-sdk/cvmx-csr-typedefs.h b/sys/contrib/octeon-sdk/cvmx-csr-typedefs.h index 24d6386..4354209 100644 --- a/sys/contrib/octeon-sdk/cvmx-csr-typedefs.h +++ b/sys/contrib/octeon-sdk/cvmx-csr-typedefs.h @@ -1,41 +1,43 @@ /***********************license start*************** - * Copyright (c) 2003-2009 Cavium Networks (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 Networks nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written - * permission. - * - * 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. - * - * - * For any questions regarding licensing please contact marketing@caviumnetworks.com - * + * Copyright (c) 2003-2010 Cavium Networks (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 Networks 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 * @@ -44,73948 +46,66 @@ * * This file is auto generated. Do not edit. * - * <hr>$Revision: 41586 $<hr> + * <hr>$Revision: 49448 $<hr> * */ #ifndef __CVMX_CSR_TYPEDEFS_H__ #define __CVMX_CSR_TYPEDEFS_H__ - - -/** - * cvmx_agl_gmx_bad_reg - * - * AGL_GMX_BAD_REG = A collection of things that have gone very, very wrong - * - * - * Notes: - * OUT_OVR[0], OVRFLW, TXPOP, TXPSH will be reset when MIX0_CTL[RESET] is set to 1. - * OUT_OVR[1], OVRFLW1, TXPOP1, TXPSH1 will be reset when MIX1_CTL[RESET] is set to 1. - * LOSTSTAT, STATOVR, STATOVR will bee reset when both MIX0/1_CTL[RESET] are set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_bad_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t txpsh1 : 1; /**< TX FIFO overflow (MII1) */ - uint64_t txpop1 : 1; /**< TX FIFO underflow (MII1) */ - uint64_t ovrflw1 : 1; /**< RX FIFO overflow (MII1) */ - uint64_t txpsh : 1; /**< TX FIFO overflow */ - uint64_t txpop : 1; /**< TX FIFO underflow */ - uint64_t ovrflw : 1; /**< RX FIFO overflow */ - uint64_t reserved_27_31 : 5; - uint64_t statovr : 1; /**< TX Statistics overflow */ - uint64_t reserved_23_25 : 3; - uint64_t loststat : 1; /**< TX Statistics data was over-written - TX Stats are corrupted */ - uint64_t reserved_4_21 : 18; - uint64_t out_ovr : 2; /**< Outbound data FIFO overflow */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t out_ovr : 2; - uint64_t reserved_4_21 : 18; - uint64_t loststat : 1; - uint64_t reserved_23_25 : 3; - uint64_t statovr : 1; - uint64_t reserved_27_31 : 5; - uint64_t ovrflw : 1; - uint64_t txpop : 1; - uint64_t txpsh : 1; - uint64_t ovrflw1 : 1; - uint64_t txpop1 : 1; - uint64_t txpsh1 : 1; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_agl_gmx_bad_reg_s cn52xx; - struct cvmx_agl_gmx_bad_reg_s cn52xxp1; - struct cvmx_agl_gmx_bad_reg_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_35_63 : 29; - uint64_t txpsh : 1; /**< TX FIFO overflow */ - uint64_t txpop : 1; /**< TX FIFO underflow */ - uint64_t ovrflw : 1; /**< RX FIFO overflow */ - uint64_t reserved_27_31 : 5; - uint64_t statovr : 1; /**< TX Statistics overflow */ - uint64_t reserved_23_25 : 3; - uint64_t loststat : 1; /**< TX Statistics data was over-written - TX Stats are corrupted */ - uint64_t reserved_3_21 : 19; - uint64_t out_ovr : 1; /**< Outbound data FIFO overflow */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t out_ovr : 1; - uint64_t reserved_3_21 : 19; - uint64_t loststat : 1; - uint64_t reserved_23_25 : 3; - uint64_t statovr : 1; - uint64_t reserved_27_31 : 5; - uint64_t ovrflw : 1; - uint64_t txpop : 1; - uint64_t txpsh : 1; - uint64_t reserved_35_63 : 29; -#endif - } cn56xx; - struct cvmx_agl_gmx_bad_reg_cn56xx cn56xxp1; -} cvmx_agl_gmx_bad_reg_t; - - -/** - * cvmx_agl_gmx_bist - * - * AGL_GMX_BIST = GMX BIST Results - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_bist_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t status : 10; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - - 0: gmx#.inb.drf64x78m1_bist - - 1: gmx#.outb.fif.drf64x71m1_bist - - 2: gmx#.csr.gmi0.srf8x64m1_bist - - 3: 0 - - 4: 0 - - 5: 0 - - 6: gmx#.csr.drf20x80m1_bist - - 7: gmx#.outb.stat.drf16x27m1_bist - - 8: gmx#.outb.stat.drf40x64m1_bist - - 9: 0 */ -#else - uint64_t status : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_agl_gmx_bist_s cn52xx; - struct cvmx_agl_gmx_bist_s cn52xxp1; - struct cvmx_agl_gmx_bist_s cn56xx; - struct cvmx_agl_gmx_bist_s cn56xxp1; -} cvmx_agl_gmx_bist_t; - - -/** - * cvmx_agl_gmx_drv_ctl - * - * AGL_GMX_DRV_CTL = GMX Drive Control - * - * - * Notes: - * NCTL, PCTL, BYP_EN will be reset when MIX0_CTL[RESET] is set to 1. - * NCTL1, PCTL1, BYP_EN1 will be reset when MIX1_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_drv_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t byp_en1 : 1; /**< Compensation Controller Bypass Enable (MII1) */ - uint64_t reserved_45_47 : 3; - uint64_t pctl1 : 5; /**< AGL PCTL (MII1) */ - uint64_t reserved_37_39 : 3; - uint64_t nctl1 : 5; /**< AGL NCTL (MII1) */ - uint64_t reserved_17_31 : 15; - uint64_t byp_en : 1; /**< Compensation Controller Bypass Enable */ - uint64_t reserved_13_15 : 3; - uint64_t pctl : 5; /**< AGL PCTL */ - uint64_t reserved_5_7 : 3; - uint64_t nctl : 5; /**< AGL NCTL */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; - uint64_t reserved_13_15 : 3; - uint64_t byp_en : 1; - uint64_t reserved_17_31 : 15; - uint64_t nctl1 : 5; - uint64_t reserved_37_39 : 3; - uint64_t pctl1 : 5; - uint64_t reserved_45_47 : 3; - uint64_t byp_en1 : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_agl_gmx_drv_ctl_s cn52xx; - struct cvmx_agl_gmx_drv_ctl_s cn52xxp1; - struct cvmx_agl_gmx_drv_ctl_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t byp_en : 1; /**< Compensation Controller Bypass Enable */ - uint64_t reserved_13_15 : 3; - uint64_t pctl : 5; /**< AGL PCTL */ - uint64_t reserved_5_7 : 3; - uint64_t nctl : 5; /**< AGL NCTL */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; - uint64_t reserved_13_15 : 3; - uint64_t byp_en : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn56xx; - struct cvmx_agl_gmx_drv_ctl_cn56xx cn56xxp1; -} cvmx_agl_gmx_drv_ctl_t; - - -/** - * cvmx_agl_gmx_inf_mode - * - * AGL_GMX_INF_MODE = Interface Mode - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_inf_mode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t en : 1; /**< Interface Enable */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t en : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_agl_gmx_inf_mode_s cn52xx; - struct cvmx_agl_gmx_inf_mode_s cn52xxp1; - struct cvmx_agl_gmx_inf_mode_s cn56xx; - struct cvmx_agl_gmx_inf_mode_s cn56xxp1; -} cvmx_agl_gmx_inf_mode_t; - - -/** - * cvmx_agl_gmx_prt#_cfg - * - * AGL_GMX_PRT_CFG = Port description - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_prtx_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t tx_en : 1; /**< Port enable. Must be set for Octane to send - RMGII traffic. When this bit clear on a given - port, then all MII cycles will appear as - inter-frame cycles. */ - uint64_t rx_en : 1; /**< Port enable. Must be set for Octane to receive - RMGII traffic. When this bit clear on a given - port, then the all MII cycles will appear as - inter-frame cycles. */ - uint64_t slottime : 1; /**< Slot Time for Half-Duplex operation - 0 = 512 bitimes (10/100Mbs operation) - 1 = Reserved */ - uint64_t duplex : 1; /**< Duplex - 0 = Half Duplex (collisions/extentions/bursts) - 1 = Full Duplex */ - uint64_t speed : 1; /**< Link Speed - 0 = 10/100Mbs operation - 1 = Reserved */ - uint64_t en : 1; /**< Link Enable - When EN is clear, packets will not be received - or transmitted (including PAUSE and JAM packets). - If EN is cleared while a packet is currently - being received or transmitted, the packet will - be allowed to complete before the bus is idled. - On the RX side, subsequent packets in a burst - will be ignored. */ -#else - uint64_t en : 1; - uint64_t speed : 1; - uint64_t duplex : 1; - uint64_t slottime : 1; - uint64_t rx_en : 1; - uint64_t tx_en : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_agl_gmx_prtx_cfg_s cn52xx; - struct cvmx_agl_gmx_prtx_cfg_s cn52xxp1; - struct cvmx_agl_gmx_prtx_cfg_s cn56xx; - struct cvmx_agl_gmx_prtx_cfg_s cn56xxp1; -} cvmx_agl_gmx_prtx_cfg_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam0 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam0_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam1 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam1_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam2 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam2_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam3 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam3_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam4 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam4_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam5 - * - * AGL_GMX_RX_ADR_CAM = Address Filtering Control - * - * - * Notes: - * Not reset when MIX*_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to AGL_GMX_RX_ADR_CAM will not - change the CSR when AGL_GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam5_t; - - -/** - * cvmx_agl_gmx_rx#_adr_cam_en - * - * AGL_GMX_RX_ADR_CAM_EN = Address Filtering Control Enable - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_cam_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t en : 8; /**< CAM Entry Enables */ -#else - uint64_t en : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_cam_en_t; - - -/** - * cvmx_agl_gmx_rx#_adr_ctl - * - * AGL_GMX_RX_ADR_CTL = Address Filtering Control - * - * - * Notes: - * * ALGORITHM - * Here is some pseudo code that represents the address filter behavior. - * - * @verbatim - * bool dmac_addr_filter(uint8 prt, uint48 dmac) [ - * ASSERT(prt >= 0 && prt <= 3); - * if (is_bcst(dmac)) // broadcast accept - * return (AGL_GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT); - * if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 1) // multicast reject - * return REJECT; - * if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 2) // multicast accept - * return ACCEPT; - * - * cam_hit = 0; - * - * for (i=0; i<8; i++) [ - * if (AGL_GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0) - * continue; - * uint48 unswizzled_mac_adr = 0x0; - * for (j=5; j>=0; j--) [ - * unswizzled_mac_adr = (unswizzled_mac_adr << 8) | AGL_GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>]; - * ] - * if (unswizzled_mac_adr == dmac) [ - * cam_hit = 1; - * break; - * ] - * ] - * - * if (cam_hit) - * return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT); - * else - * return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT); - * ] - * @endverbatim - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_adr_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t cam_mode : 1; /**< Allow or deny DMAC address filter - 0 = reject the packet on DMAC address match - 1 = accept the packet on DMAC address match */ - uint64_t mcst : 2; /**< Multicast Mode - 0 = Use the Address Filter CAM - 1 = Force reject all multicast packets - 2 = Force accept all multicast packets - 3 = Reserved */ - uint64_t bcst : 1; /**< Accept All Broadcast Packets */ -#else - uint64_t bcst : 1; - uint64_t mcst : 2; - uint64_t cam_mode : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xx; - struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xxp1; - struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xx; - struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xxp1; -} cvmx_agl_gmx_rxx_adr_ctl_t; - - -/** - * cvmx_agl_gmx_rx#_decision - * - * AGL_GMX_RX_DECISION = The byte count to decide when to accept or filter a packet - * - * - * Notes: - * As each byte in a packet is received by GMX, the L2 byte count is compared - * against the AGL_GMX_RX_DECISION[CNT]. The L2 byte count is the number of bytes - * from the beginning of the L2 header (DMAC). In normal operation, the L2 - * header begins after the PREAMBLE+SFD (AGL_GMX_RX_FRM_CTL[PRE_CHK]=1) and any - * optional UDD skip data (AGL_GMX_RX_UDD_SKP[LEN]). - * - * When AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the - * packet and would require UDD skip length to account for them. - * - * L2 Size - * Port Mode <=AGL_GMX_RX_DECISION bytes (default=24) >AGL_GMX_RX_DECISION bytes (default=24) - * - * MII/Full Duplex accept packet apply filters - * no filtering is applied accept packet based on DMAC and PAUSE packet filters - * - * MII/Half Duplex drop packet apply filters - * packet is unconditionally dropped accept packet based on DMAC - * - * where l2_size = MAX(0, total_packet_size - AGL_GMX_RX_UDD_SKP[LEN] - ((AGL_GMX_RX_FRM_CTL[PRE_CHK]==1)*8) - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_decision_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t cnt : 5; /**< The byte count to decide when to accept or filter - a packet. */ -#else - uint64_t cnt : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_agl_gmx_rxx_decision_s cn52xx; - struct cvmx_agl_gmx_rxx_decision_s cn52xxp1; - struct cvmx_agl_gmx_rxx_decision_s cn56xx; - struct cvmx_agl_gmx_rxx_decision_s cn56xxp1; -} cvmx_agl_gmx_rxx_decision_t; - - -/** - * cvmx_agl_gmx_rx#_frm_chk - * - * AGL_GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame - * - * - * Notes: - * If AGL_GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW. - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_frm_chk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with MII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t reserved_1_1 : 1; - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t reserved_1_1 : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_agl_gmx_rxx_frm_chk_s cn52xx; - struct cvmx_agl_gmx_rxx_frm_chk_s cn52xxp1; - struct cvmx_agl_gmx_rxx_frm_chk_s cn56xx; - struct cvmx_agl_gmx_rxx_frm_chk_s cn56xxp1; -} cvmx_agl_gmx_rxx_frm_chk_t; - - -/** - * cvmx_agl_gmx_rx#_frm_ctl - * - * AGL_GMX_RX_FRM_CTL = Frame Control - * - * - * Notes: - * * PRE_CHK - * When set, the MII state expects a typical frame consisting of - * INTER_FRAME=>PREAMBLE(x7)=>SFD(x1)=>DAT. The state machine watches for - * this exact sequence in order to recognize a valid frame and push frame - * data into the Octane. There must be exactly 7 PREAMBLE cycles followed by - * the single SFD cycle for the frame to be accepted. - * - * When a problem does occur within the PREAMBLE seqeunce, the frame is - * marked as bad and not sent into the core. The AGL_GMX_RX_INT_REG[PCTERR] - * interrupt is also raised. - * - * * PRE_STRP - * When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP - * determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane - * core as part of the packet. - * - * In either mode, the PREAMBLE+SFD bytes are not counted toward the packet - * size when checking against the MIN and MAX bounds. Furthermore, the bytes - * are skipped when locating the start of the L2 header for DMAC and Control - * frame recognition. - * - * * CTL_BCK/CTL_DRP - * These bits control how the HW handles incoming PAUSE packets. Here are - * the most common modes of operation: - * CTL_BCK=1,CTL_DRP=1 - HW does it all - * CTL_BCK=0,CTL_DRP=0 - SW sees all pause frames - * CTL_BCK=0,CTL_DRP=1 - all pause frames are completely ignored - * - * These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode. - * Since PAUSE packets only apply to fulldup operation, any PAUSE packet - * would constitute an exception which should be handled by the processing - * cores. PAUSE packets should not be forwarded. - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_frm_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pre_align : 1; /**< When set, PREAMBLE parser aligns the the SFD byte - regardless of the number of previous PREAMBLE - nibbles. In this mode, PREAMBLE can be consumed - by the HW so when PRE_ALIGN is set, PRE_FREE, - PRE_STRP must be set for correct operation. - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t pad_len : 1; /**< When set, disables the length check for non-min - sized pkts with padding in the client data */ - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */ - uint64_t pre_free : 1; /**< When set, PREAMBLE checking is less strict. - 0 - 254 cycles of PREAMBLE followed by SFD - PRE_FREE must be set if PRE_ALIGN is set. - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped - PRE_STRP must be set if PRE_ALIGN is set. - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t vlan_len : 1; - uint64_t pad_len : 1; - uint64_t pre_align : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_agl_gmx_rxx_frm_ctl_s cn52xx; - struct cvmx_agl_gmx_rxx_frm_ctl_s cn52xxp1; - struct cvmx_agl_gmx_rxx_frm_ctl_s cn56xx; - struct cvmx_agl_gmx_rxx_frm_ctl_s cn56xxp1; -} cvmx_agl_gmx_rxx_frm_ctl_t; - - -/** - * cvmx_agl_gmx_rx#_frm_max - * - * AGL_GMX_RX_FRM_MAX = Frame Max length - * - * - * Notes: - * When changing the LEN field, be sure that LEN does not exceed - * AGL_GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that - * are within the maximum length parameter to be rejected because they exceed - * the AGL_GMX_RX_JABBER[CNT] limit. - * - * Notes: - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_frm_max_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t len : 16; /**< Byte count for Max-sized frame check - Failing packets set the MAXERR interrupt and are - optionally sent with opcode==MAXERR - LEN <= AGL_GMX_RX_JABBER[CNT] */ -#else - uint64_t len : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_rxx_frm_max_s cn52xx; - struct cvmx_agl_gmx_rxx_frm_max_s cn52xxp1; - struct cvmx_agl_gmx_rxx_frm_max_s cn56xx; - struct cvmx_agl_gmx_rxx_frm_max_s cn56xxp1; -} cvmx_agl_gmx_rxx_frm_max_t; - - -/** - * cvmx_agl_gmx_rx#_frm_min - * - * AGL_GMX_RX_FRM_MIN = Frame Min length - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_frm_min_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t len : 16; /**< Byte count for Min-sized frame check - Failing packets set the MINERR interrupt and are - optionally sent with opcode==MINERR */ -#else - uint64_t len : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_rxx_frm_min_s cn52xx; - struct cvmx_agl_gmx_rxx_frm_min_s cn52xxp1; - struct cvmx_agl_gmx_rxx_frm_min_s cn56xx; - struct cvmx_agl_gmx_rxx_frm_min_s cn56xxp1; -} cvmx_agl_gmx_rxx_frm_min_t; - - -/** - * cvmx_agl_gmx_rx#_ifg - * - * AGL_GMX_RX_IFG = RX Min IFG - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_ifg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ifg : 4; /**< Min IFG between packets used to determine IFGERR */ -#else - uint64_t ifg : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_agl_gmx_rxx_ifg_s cn52xx; - struct cvmx_agl_gmx_rxx_ifg_s cn52xxp1; - struct cvmx_agl_gmx_rxx_ifg_s cn56xx; - struct cvmx_agl_gmx_rxx_ifg_s cn56xxp1; -} cvmx_agl_gmx_rxx_ifg_t; - - -/** - * cvmx_agl_gmx_rx#_int_en - * - * AGL_GMX_RX_INT_EN = Interrupt Enable - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< MII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t reserved_1_1 : 1; - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t reserved_1_1 : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_agl_gmx_rxx_int_en_s cn52xx; - struct cvmx_agl_gmx_rxx_int_en_s cn52xxp1; - struct cvmx_agl_gmx_rxx_int_en_s cn56xx; - struct cvmx_agl_gmx_rxx_int_en_s cn56xxp1; -} cvmx_agl_gmx_rxx_int_en_t; - - -/** - * cvmx_agl_gmx_rx#_int_reg - * - * AGL_GMX_RX_INT_REG = Interrupt Register - * - * - * Notes: - * (1) exceptions will only be raised to the control processor if the - * corresponding bit in the AGL_GMX_RX_INT_EN register is set. - * - * (2) exception conditions 10:0 can also set the rcv/opcode in the received - * packet's workQ entry. The AGL_GMX_RX_FRM_CHK register provides a bit mask - * for configuring which conditions set the error. - * - * (3) in half duplex operation, the expectation is that collisions will appear - * as MINERRs. - * - * (4) JABBER - An RX Jabber error indicates that a packet was received which - * is longer than the maximum allowed packet as defined by the - * system. GMX will truncate the packet at the JABBER count. - * Failure to do so could lead to system instabilty. - * - * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS > - * AGL_GMX_RX_FRM_MAX. For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS - * > AGL_GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED. - * - * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < AGL_GMX_RX_FRM_MIN. - * - * (8) ALNERR - Indicates that the packet received was not an integer number of - * bytes. If FCS checking is enabled, ALNERR will only assert if - * the FCS is bad. If FCS checking is disabled, ALNERR will - * assert in all non-integer frame cases. - * - * (9) Collisions - Collisions can only occur in half-duplex mode. A collision - * is assumed by the receiver when the received - * frame < AGL_GMX_RX_FRM_MIN - this is normally a MINERR - * - * (A) LENERR - Length errors occur when the received packet does not match the - * length field. LENERR is only checked for packets between 64 - * and 1500 bytes. For untagged frames, the length must exact - * match. For tagged frames the length or length+4 must match. - * - * (B) PCTERR - checks that the frame transtions from PREAMBLE=>SFD=>DATA. - * Does not check the number of PREAMBLE cycles. - * - * (C) OVRERR - Not to be included in the HRM - * - * OVRERR is an architectural assertion check internal to GMX to - * make sure no assumption was violated. In a correctly operating - * system, this interrupt can never fire. - * - * GMX has an internal arbiter which selects which of 4 ports to - * buffer in the main RX FIFO. If we normally buffer 8 bytes, - * then each port will typically push a tick every 8 cycles - if - * the packet interface is going as fast as possible. If there - * are four ports, they push every two cycles. So that's the - * assumption. That the inbound module will always be able to - * consume the tick before another is produced. If that doesn't - * happen - that's when OVRERR will assert. - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< MII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with MII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t reserved_1_1 : 1; - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t reserved_1_1 : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_agl_gmx_rxx_int_reg_s cn52xx; - struct cvmx_agl_gmx_rxx_int_reg_s cn52xxp1; - struct cvmx_agl_gmx_rxx_int_reg_s cn56xx; - struct cvmx_agl_gmx_rxx_int_reg_s cn56xxp1; -} cvmx_agl_gmx_rxx_int_reg_t; - - -/** - * cvmx_agl_gmx_rx#_jabber - * - * AGL_GMX_RX_JABBER = The max size packet after which GMX will truncate - * - * - * Notes: - * CNT must be 8-byte aligned such that CNT[2:0] == 0 - * - * The packet that will be sent to the packet input logic will have an - * additionl 8 bytes if AGL_GMX_RX_FRM_CTL[PRE_CHK] is set and - * AGL_GMX_RX_FRM_CTL[PRE_STRP] is clear. The max packet that will be sent is - * defined as... - * - * max_sized_packet = AGL_GMX_RX_JABBER[CNT]+((AGL_GMX_RX_FRM_CTL[PRE_CHK] & !AGL_GMX_RX_FRM_CTL[PRE_STRP])*8) - * - * Be sure the CNT field value is at least as large as the - * AGL_GMX_RX_FRM_MAX[LEN] value. Failure to meet this constraint will cause - * packets that are within the AGL_GMX_RX_FRM_MAX[LEN] length to be rejected - * because they exceed the CNT limit. - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_jabber_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt : 16; /**< Byte count for jabber check - Failing packets set the JABBER interrupt and are - optionally sent with opcode==JABBER - GMX will truncate the packet to CNT bytes - CNT >= AGL_GMX_RX_FRM_MAX[LEN] */ -#else - uint64_t cnt : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_rxx_jabber_s cn52xx; - struct cvmx_agl_gmx_rxx_jabber_s cn52xxp1; - struct cvmx_agl_gmx_rxx_jabber_s cn56xx; - struct cvmx_agl_gmx_rxx_jabber_s cn56xxp1; -} cvmx_agl_gmx_rxx_jabber_t; - - -/** - * cvmx_agl_gmx_rx#_pause_drop_time - * - * AGL_GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_pause_drop_time_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t status : 16; /**< Time extracted from the dropped PAUSE packet */ -#else - uint64_t status : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xx; - struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xxp1; - struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xx; - struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xxp1; -} cvmx_agl_gmx_rxx_pause_drop_time_t; - - -/** - * cvmx_agl_gmx_rx#_stats_ctl - * - * AGL_GMX_RX_STATS_CTL = RX Stats Control register - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rd_clr : 1; /**< RX Stats registers will clear on reads */ -#else - uint64_t rd_clr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_ctl_t; - - -/** - * cvmx_agl_gmx_rx#_stats_octs - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_octs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of received good packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_octs_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_octs_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_octs_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_octs_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_octs_t; - - -/** - * cvmx_agl_gmx_rx#_stats_octs_ctl - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_octs_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of received pause packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_octs_ctl_t; - - -/** - * cvmx_agl_gmx_rx#_stats_octs_dmac - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_octs_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of filtered dmac packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_octs_dmac_t; - - -/** - * cvmx_agl_gmx_rx#_stats_octs_drp - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_octs_drp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of dropped packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_octs_drp_t; - - -/** - * cvmx_agl_gmx_rx#_stats_pkts - * - * AGL_GMX_RX_STATS_PKTS - * - * Count of good received packets - packets that are not recognized as PAUSE - * packets, dropped due the DMAC filter, dropped due FIFO full status, or - * have any other OPCODE (FCS, Length, etc). - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_pkts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of received good packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_pkts_t; - - -/** - * cvmx_agl_gmx_rx#_stats_pkts_bad - * - * AGL_GMX_RX_STATS_PKTS_BAD - * - * Count of all packets received with some error that were not dropped - * either due to the dmac filter or lack of room in the receive FIFO. - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_pkts_bad_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of bad packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_pkts_bad_t; - - -/** - * cvmx_agl_gmx_rx#_stats_pkts_ctl - * - * AGL_GMX_RX_STATS_PKTS_CTL - * - * Count of all packets received that were recognized as Flow Control or - * PAUSE packets. PAUSE packets with any kind of error are counted in - * AGL_GMX_RX_STATS_PKTS_BAD. Pause packets can be optionally dropped or - * forwarded based on the AGL_GMX_RX_FRM_CTL[CTL_DRP] bit. This count - * increments regardless of whether the packet is dropped. Pause packets - * will never be counted in AGL_GMX_RX_STATS_PKTS. Packets dropped due the dmac - * filter will be counted in AGL_GMX_RX_STATS_PKTS_DMAC and not here. - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of received pause packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_pkts_ctl_t; - - -/** - * cvmx_agl_gmx_rx#_stats_pkts_dmac - * - * AGL_GMX_RX_STATS_PKTS_DMAC - * - * Count of all packets received that were dropped by the dmac filter. - * Packets that match the DMAC will be dropped and counted here regardless - * of if they were bad packets. These packets will never be counted in - * AGL_GMX_RX_STATS_PKTS. - * - * Some packets that were not able to satisify the DECISION_CNT may not - * actually be dropped by Octeon, but they will be counted here as if they - * were dropped. - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of filtered dmac packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_pkts_dmac_t; - - -/** - * cvmx_agl_gmx_rx#_stats_pkts_drp - * - * AGL_GMX_RX_STATS_PKTS_DRP - * - * Count of all packets received that were dropped due to a full receive - * FIFO. This counts good and bad packets received - all packets dropped by - * the FIFO. It does not count packets dropped by the dmac or pause packet - * filters. - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_stats_pkts_drp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of dropped packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xx; - struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xxp1; - struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xx; - struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xxp1; -} cvmx_agl_gmx_rxx_stats_pkts_drp_t; - - -/** - * cvmx_agl_gmx_rx#_udd_skp - * - * AGL_GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data - * - * - * Notes: - * (1) The skip bytes are part of the packet and will be sent down the NCB - * packet interface and will be handled by PKI. - * - * (2) The system can determine if the UDD bytes are included in the FCS check - * by using the FCSSEL field - if the FCS check is enabled. - * - * (3) Assume that the preamble/sfd is always at the start of the frame - even - * before UDD bytes. In most cases, there will be no preamble in these - * cases since it will be MII to MII communication without a PHY - * involved. - * - * (4) We can still do address filtering and control packet filtering is the - * user desires. - * - * (5) UDD_SKP must be 0 in half-duplex operation unless - * AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear. If AGL_GMX_RX_FRM_CTL[PRE_CHK] is set, - * then UDD_SKP will normally be 8. - * - * (6) In all cases, the UDD bytes will be sent down the packet interface as - * part of the packet. The UDD bytes are never stripped from the actual - * packet. - * - * (7) If LEN != 0, then AGL_GMX_RX_FRM_CHK[LENERR] will be disabled and AGL_GMX_RX_INT_REG[LENERR] will be zero - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rxx_udd_skp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t fcssel : 1; /**< Include the skip bytes in the FCS calculation - 0 = all skip bytes are included in FCS - 1 = the skip bytes are not included in FCS */ - uint64_t reserved_7_7 : 1; - uint64_t len : 7; /**< Amount of User-defined data before the start of - the L2 data. Zero means L2 comes first. - Max value is 64. */ -#else - uint64_t len : 7; - uint64_t reserved_7_7 : 1; - uint64_t fcssel : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_agl_gmx_rxx_udd_skp_s cn52xx; - struct cvmx_agl_gmx_rxx_udd_skp_s cn52xxp1; - struct cvmx_agl_gmx_rxx_udd_skp_s cn56xx; - struct cvmx_agl_gmx_rxx_udd_skp_s cn56xxp1; -} cvmx_agl_gmx_rxx_udd_skp_t; - - -/** - * cvmx_agl_gmx_rx_bp_drop# - * - * AGL_GMX_RX_BP_DROP = FIFO mark for packet drop - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rx_bp_dropx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mark : 6; /**< Number of 8B ticks to reserve in the RX FIFO. - When the FIFO exceeds this count, packets will - be dropped and not buffered. - MARK should typically be programmed to 2. - Failure to program correctly can lead to system - instability. */ -#else - uint64_t mark : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_agl_gmx_rx_bp_dropx_s cn52xx; - struct cvmx_agl_gmx_rx_bp_dropx_s cn52xxp1; - struct cvmx_agl_gmx_rx_bp_dropx_s cn56xx; - struct cvmx_agl_gmx_rx_bp_dropx_s cn56xxp1; -} cvmx_agl_gmx_rx_bp_dropx_t; - - -/** - * cvmx_agl_gmx_rx_bp_off# - * - * AGL_GMX_RX_BP_OFF = Lowater mark for packet drop - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rx_bp_offx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mark : 6; /**< Water mark (8B ticks) to deassert backpressure */ -#else - uint64_t mark : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_agl_gmx_rx_bp_offx_s cn52xx; - struct cvmx_agl_gmx_rx_bp_offx_s cn52xxp1; - struct cvmx_agl_gmx_rx_bp_offx_s cn56xx; - struct cvmx_agl_gmx_rx_bp_offx_s cn56xxp1; -} cvmx_agl_gmx_rx_bp_offx_t; - - -/** - * cvmx_agl_gmx_rx_bp_on# - * - * AGL_GMX_RX_BP_ON = Hiwater mark for port/interface backpressure - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rx_bp_onx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t mark : 9; /**< Hiwater mark (8B ticks) for backpressure. */ -#else - uint64_t mark : 9; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_agl_gmx_rx_bp_onx_s cn52xx; - struct cvmx_agl_gmx_rx_bp_onx_s cn52xxp1; - struct cvmx_agl_gmx_rx_bp_onx_s cn56xx; - struct cvmx_agl_gmx_rx_bp_onx_s cn56xxp1; -} cvmx_agl_gmx_rx_bp_onx_t; - - -/** - * cvmx_agl_gmx_rx_prt_info - * - * AGL_GMX_RX_PRT_INFO = state information for the ports - * - * - * Notes: - * COMMIT[0], DROP[0] will be reset when MIX0_CTL[RESET] is set to 1. - * COMMIT[1], DROP[1] will be reset when MIX1_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rx_prt_info_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t drop : 2; /**< Port indication that data was dropped */ - uint64_t reserved_2_15 : 14; - uint64_t commit : 2; /**< Port indication that SOP was accepted */ -#else - uint64_t commit : 2; - uint64_t reserved_2_15 : 14; - uint64_t drop : 2; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_agl_gmx_rx_prt_info_s cn52xx; - struct cvmx_agl_gmx_rx_prt_info_s cn52xxp1; - struct cvmx_agl_gmx_rx_prt_info_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t drop : 1; /**< Port indication that data was dropped */ - uint64_t reserved_1_15 : 15; - uint64_t commit : 1; /**< Port indication that SOP was accepted */ -#else - uint64_t commit : 1; - uint64_t reserved_1_15 : 15; - uint64_t drop : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn56xx; - struct cvmx_agl_gmx_rx_prt_info_cn56xx cn56xxp1; -} cvmx_agl_gmx_rx_prt_info_t; - - -/** - * cvmx_agl_gmx_rx_tx_status - * - * AGL_GMX_RX_TX_STATUS = GMX RX/TX Status - * - * - * Notes: - * RX[0], TX[0] will be reset when MIX0_CTL[RESET] is set to 1. - * RX[1], TX[1] will be reset when MIX1_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_rx_tx_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t tx : 2; /**< Transmit data since last read */ - uint64_t reserved_2_3 : 2; - uint64_t rx : 2; /**< Receive data since last read */ -#else - uint64_t rx : 2; - uint64_t reserved_2_3 : 2; - uint64_t tx : 2; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_agl_gmx_rx_tx_status_s cn52xx; - struct cvmx_agl_gmx_rx_tx_status_s cn52xxp1; - struct cvmx_agl_gmx_rx_tx_status_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t tx : 1; /**< Transmit data since last read */ - uint64_t reserved_1_3 : 3; - uint64_t rx : 1; /**< Receive data since last read */ -#else - uint64_t rx : 1; - uint64_t reserved_1_3 : 3; - uint64_t tx : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn56xx; - struct cvmx_agl_gmx_rx_tx_status_cn56xx cn56xxp1; -} cvmx_agl_gmx_rx_tx_status_t; - - -/** - * cvmx_agl_gmx_smac# - * - * AGL_GMX_SMAC = MII SMAC - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_smacx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t smac : 48; /**< The SMAC field is used for generating and - accepting Control Pause packets */ -#else - uint64_t smac : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_smacx_s cn52xx; - struct cvmx_agl_gmx_smacx_s cn52xxp1; - struct cvmx_agl_gmx_smacx_s cn56xx; - struct cvmx_agl_gmx_smacx_s cn56xxp1; -} cvmx_agl_gmx_smacx_t; - - -/** - * cvmx_agl_gmx_stat_bp - * - * AGL_GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_stat_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t bp : 1; /**< Current BP state */ - uint64_t cnt : 16; /**< Number of cycles that BP has been asserted - Saturating counter */ -#else - uint64_t cnt : 16; - uint64_t bp : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_agl_gmx_stat_bp_s cn52xx; - struct cvmx_agl_gmx_stat_bp_s cn52xxp1; - struct cvmx_agl_gmx_stat_bp_s cn56xx; - struct cvmx_agl_gmx_stat_bp_s cn56xxp1; -} cvmx_agl_gmx_stat_bp_t; - - -/** - * cvmx_agl_gmx_tx#_append - * - * AGL_GMX_TX_APPEND = MII TX Append Control - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_append_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t force_fcs : 1; /**< Append the Ethernet FCS on each pause packet - when FCS is clear. Pause packets are normally - padded to 60 bytes. If - AGL_GMX_TX_MIN_PKT[MIN_SIZE] exceeds 59, then - FORCE_FCS will not be used. */ - uint64_t fcs : 1; /**< Append the Ethernet FCS on each packet */ - uint64_t pad : 1; /**< Append PAD bytes such that min sized */ - uint64_t preamble : 1; /**< Prepend the Ethernet preamble on each transfer */ -#else - uint64_t preamble : 1; - uint64_t pad : 1; - uint64_t fcs : 1; - uint64_t force_fcs : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_agl_gmx_txx_append_s cn52xx; - struct cvmx_agl_gmx_txx_append_s cn52xxp1; - struct cvmx_agl_gmx_txx_append_s cn56xx; - struct cvmx_agl_gmx_txx_append_s cn56xxp1; -} cvmx_agl_gmx_txx_append_t; - - -/** - * cvmx_agl_gmx_tx#_ctl - * - * AGL_GMX_TX_CTL = TX Control register - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t xsdef_en : 1; /**< Enables the excessive deferral check for stats - and interrupts */ - uint64_t xscol_en : 1; /**< Enables the excessive collision check for stats - and interrupts */ -#else - uint64_t xscol_en : 1; - uint64_t xsdef_en : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_agl_gmx_txx_ctl_s cn52xx; - struct cvmx_agl_gmx_txx_ctl_s cn52xxp1; - struct cvmx_agl_gmx_txx_ctl_s cn56xx; - struct cvmx_agl_gmx_txx_ctl_s cn56xxp1; -} cvmx_agl_gmx_txx_ctl_t; - - -/** - * cvmx_agl_gmx_tx#_min_pkt - * - * AGL_GMX_TX_MIN_PKT = MII TX Min Size Packet (PAD upto min size) - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_min_pkt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t min_size : 8; /**< Min frame in bytes before the FCS is applied - Padding is only appened when - AGL_GMX_TX_APPEND[PAD] for the coresponding MII - port is set. Packets will be padded to - MIN_SIZE+1 The reset value will pad to 60 bytes. */ -#else - uint64_t min_size : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_agl_gmx_txx_min_pkt_s cn52xx; - struct cvmx_agl_gmx_txx_min_pkt_s cn52xxp1; - struct cvmx_agl_gmx_txx_min_pkt_s cn56xx; - struct cvmx_agl_gmx_txx_min_pkt_s cn56xxp1; -} cvmx_agl_gmx_txx_min_pkt_t; - - -/** - * cvmx_agl_gmx_tx#_pause_pkt_interval - * - * AGL_GMX_TX_PAUSE_PKT_INTERVAL = MII TX Pause Packet transmission interval - how often PAUSE packets will be sent - * - * - * Notes: - * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and - * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system - * designer. It is suggested that TIME be much greater than INTERVAL and - * AGL_GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE - * count and then when the backpressure condition is lifted, a PAUSE packet - * with TIME==0 will be sent indicating that Octane is ready for additional - * data. - * - * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is - * suggested that TIME and INTERVAL are programmed such that they satisify the - * following rule... - * - * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size) - * - * where largest_pkt_size is that largest packet that the system can send - * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size - * of the PAUSE packet (normally 64B). - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_pause_pkt_interval_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t interval : 16; /**< Arbitrate for a pause packet every (INTERVAL*512) - bit-times. - Normally, 0 < INTERVAL < AGL_GMX_TX_PAUSE_PKT_TIME - INTERVAL=0, will only send a single PAUSE packet - for each backpressure event */ -#else - uint64_t interval : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xx; - struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xxp1; - struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xx; - struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xxp1; -} cvmx_agl_gmx_txx_pause_pkt_interval_t; - - -/** - * cvmx_agl_gmx_tx#_pause_pkt_time - * - * AGL_GMX_TX_PAUSE_PKT_TIME = MII TX Pause Packet pause_time field - * - * - * Notes: - * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and - * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system - * designer. It is suggested that TIME be much greater than INTERVAL and - * AGL_GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE - * count and then when the backpressure condition is lifted, a PAUSE packet - * with TIME==0 will be sent indicating that Octane is ready for additional - * data. - * - * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is - * suggested that TIME and INTERVAL are programmed such that they satisify the - * following rule... - * - * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size) - * - * where largest_pkt_size is that largest packet that the system can send - * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size - * of the PAUSE packet (normally 64B). - * - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_pause_pkt_time_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< The pause_time field placed is outbnd pause pkts - pause_time is in 512 bit-times - Normally, TIME > AGL_GMX_TX_PAUSE_PKT_INTERVAL */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xx; - struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xxp1; - struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xx; - struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xxp1; -} cvmx_agl_gmx_txx_pause_pkt_time_t; - - -/** - * cvmx_agl_gmx_tx#_pause_togo - * - * AGL_GMX_TX_PAUSE_TOGO = MII TX Amount of time remaining to backpressure - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_pause_togo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< Amount of time remaining to backpressure */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_txx_pause_togo_s cn52xx; - struct cvmx_agl_gmx_txx_pause_togo_s cn52xxp1; - struct cvmx_agl_gmx_txx_pause_togo_s cn56xx; - struct cvmx_agl_gmx_txx_pause_togo_s cn56xxp1; -} cvmx_agl_gmx_txx_pause_togo_t; - - -/** - * cvmx_agl_gmx_tx#_pause_zero - * - * AGL_GMX_TX_PAUSE_ZERO = MII TX Amount of time remaining to backpressure - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_pause_zero_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t send : 1; /**< When backpressure condition clear, send PAUSE - packet with pause_time of zero to enable the - channel */ -#else - uint64_t send : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_agl_gmx_txx_pause_zero_s cn52xx; - struct cvmx_agl_gmx_txx_pause_zero_s cn52xxp1; - struct cvmx_agl_gmx_txx_pause_zero_s cn56xx; - struct cvmx_agl_gmx_txx_pause_zero_s cn56xxp1; -} cvmx_agl_gmx_txx_pause_zero_t; - - -/** - * cvmx_agl_gmx_tx#_soft_pause - * - * AGL_GMX_TX_SOFT_PAUSE = MII TX Software Pause - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_soft_pause_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< Back off the TX bus for (TIME*512) bit-times - for full-duplex operation only */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_txx_soft_pause_s cn52xx; - struct cvmx_agl_gmx_txx_soft_pause_s cn52xxp1; - struct cvmx_agl_gmx_txx_soft_pause_s cn56xx; - struct cvmx_agl_gmx_txx_soft_pause_s cn56xxp1; -} cvmx_agl_gmx_txx_soft_pause_t; - - -/** - * cvmx_agl_gmx_tx#_stat0 - * - * AGL_GMX_TX_STAT0 = AGL_GMX_TX_STATS_XSDEF / AGL_GMX_TX_STATS_XSCOL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t xsdef : 32; /**< Number of packets dropped (never successfully - sent) due to excessive deferal */ - uint64_t xscol : 32; /**< Number of packets dropped (never successfully - sent) due to excessive collision. Defined by - AGL_GMX_TX_COL_ATTEMPT[LIMIT]. */ -#else - uint64_t xscol : 32; - uint64_t xsdef : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat0_s cn52xx; - struct cvmx_agl_gmx_txx_stat0_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat0_s cn56xx; - struct cvmx_agl_gmx_txx_stat0_s cn56xxp1; -} cvmx_agl_gmx_txx_stat0_t; - - -/** - * cvmx_agl_gmx_tx#_stat1 - * - * AGL_GMX_TX_STAT1 = AGL_GMX_TX_STATS_SCOL / AGL_GMX_TX_STATS_MCOL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t scol : 32; /**< Number of packets sent with a single collision */ - uint64_t mcol : 32; /**< Number of packets sent with multiple collisions - but < AGL_GMX_TX_COL_ATTEMPT[LIMIT]. */ -#else - uint64_t mcol : 32; - uint64_t scol : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat1_s cn52xx; - struct cvmx_agl_gmx_txx_stat1_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat1_s cn56xx; - struct cvmx_agl_gmx_txx_stat1_s cn56xxp1; -} cvmx_agl_gmx_txx_stat1_t; - - -/** - * cvmx_agl_gmx_tx#_stat2 - * - * AGL_GMX_TX_STAT2 = AGL_GMX_TX_STATS_OCTS - * - * - * Notes: - * - Octect counts are the sum of all data transmitted on the wire including - * packet data, pad bytes, fcs bytes, pause bytes, and jam bytes. The octect - * counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t octs : 48; /**< Number of total octets sent on the interface. - Does not count octets from frames that were - truncated due to collisions in halfdup mode. */ -#else - uint64_t octs : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_txx_stat2_s cn52xx; - struct cvmx_agl_gmx_txx_stat2_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat2_s cn56xx; - struct cvmx_agl_gmx_txx_stat2_s cn56xxp1; -} cvmx_agl_gmx_txx_stat2_t; - - -/** - * cvmx_agl_gmx_tx#_stat3 - * - * AGL_GMX_TX_STAT3 = AGL_GMX_TX_STATS_PKTS - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pkts : 32; /**< Number of total frames sent on the interface. - Does not count frames that were truncated due to - collisions in halfdup mode. */ -#else - uint64_t pkts : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat3_s cn52xx; - struct cvmx_agl_gmx_txx_stat3_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat3_s cn56xx; - struct cvmx_agl_gmx_txx_stat3_s cn56xxp1; -} cvmx_agl_gmx_txx_stat3_t; - - -/** - * cvmx_agl_gmx_tx#_stat4 - * - * AGL_GMX_TX_STAT4 = AGL_GMX_TX_STATS_HIST1 (64) / AGL_GMX_TX_STATS_HIST0 (<64) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist1 : 32; /**< Number of packets sent with an octet count of 64. */ - uint64_t hist0 : 32; /**< Number of packets sent with an octet count - of < 64. */ -#else - uint64_t hist0 : 32; - uint64_t hist1 : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat4_s cn52xx; - struct cvmx_agl_gmx_txx_stat4_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat4_s cn56xx; - struct cvmx_agl_gmx_txx_stat4_s cn56xxp1; -} cvmx_agl_gmx_txx_stat4_t; - - -/** - * cvmx_agl_gmx_tx#_stat5 - * - * AGL_GMX_TX_STAT5 = AGL_GMX_TX_STATS_HIST3 (128- 255) / AGL_GMX_TX_STATS_HIST2 (65- 127) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist3 : 32; /**< Number of packets sent with an octet count of - 128 - 255. */ - uint64_t hist2 : 32; /**< Number of packets sent with an octet count of - 65 - 127. */ -#else - uint64_t hist2 : 32; - uint64_t hist3 : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat5_s cn52xx; - struct cvmx_agl_gmx_txx_stat5_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat5_s cn56xx; - struct cvmx_agl_gmx_txx_stat5_s cn56xxp1; -} cvmx_agl_gmx_txx_stat5_t; - - -/** - * cvmx_agl_gmx_tx#_stat6 - * - * AGL_GMX_TX_STAT6 = AGL_GMX_TX_STATS_HIST5 (512-1023) / AGL_GMX_TX_STATS_HIST4 (256-511) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist5 : 32; /**< Number of packets sent with an octet count of - 512 - 1023. */ - uint64_t hist4 : 32; /**< Number of packets sent with an octet count of - 256 - 511. */ -#else - uint64_t hist4 : 32; - uint64_t hist5 : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat6_s cn52xx; - struct cvmx_agl_gmx_txx_stat6_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat6_s cn56xx; - struct cvmx_agl_gmx_txx_stat6_s cn56xxp1; -} cvmx_agl_gmx_txx_stat6_t; - - -/** - * cvmx_agl_gmx_tx#_stat7 - * - * AGL_GMX_TX_STAT7 = AGL_GMX_TX_STATS_HIST7 (1024-1518) / AGL_GMX_TX_STATS_HIST6 (>1518) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist7 : 32; /**< Number of packets sent with an octet count - of > 1518. */ - uint64_t hist6 : 32; /**< Number of packets sent with an octet count of - 1024 - 1518. */ -#else - uint64_t hist6 : 32; - uint64_t hist7 : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat7_s cn52xx; - struct cvmx_agl_gmx_txx_stat7_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat7_s cn56xx; - struct cvmx_agl_gmx_txx_stat7_s cn56xxp1; -} cvmx_agl_gmx_txx_stat7_t; - - -/** - * cvmx_agl_gmx_tx#_stat8 - * - * AGL_GMX_TX_STAT8 = AGL_GMX_TX_STATS_MCST / AGL_GMX_TX_STATS_BCST - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the - * packet. GMX assumes that the DMAC lies in the first 6 bytes of the packet - * as per the 802.3 frame definition. If the system requires additional data - * before the L2 header, then the MCST and BCST counters may not reflect - * reality and should be ignored by software. - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat8_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mcst : 32; /**< Number of packets sent to multicast DMAC. - Does not include BCST packets. */ - uint64_t bcst : 32; /**< Number of packets sent to broadcast DMAC. - Does not include MCST packets. */ -#else - uint64_t bcst : 32; - uint64_t mcst : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat8_s cn52xx; - struct cvmx_agl_gmx_txx_stat8_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat8_s cn56xx; - struct cvmx_agl_gmx_txx_stat8_s cn56xxp1; -} cvmx_agl_gmx_txx_stat8_t; - - -/** - * cvmx_agl_gmx_tx#_stat9 - * - * AGL_GMX_TX_STAT9 = AGL_GMX_TX_STATS_UNDFLW / AGL_GMX_TX_STATS_CTL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Not reset when MIX*_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stat9_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t undflw : 32; /**< Number of underflow packets */ - uint64_t ctl : 32; /**< Number of Control packets (PAUSE flow control) - generated by GMX. It does not include control - packets forwarded or generated by the PP's. */ -#else - uint64_t ctl : 32; - uint64_t undflw : 32; -#endif - } s; - struct cvmx_agl_gmx_txx_stat9_s cn52xx; - struct cvmx_agl_gmx_txx_stat9_s cn52xxp1; - struct cvmx_agl_gmx_txx_stat9_s cn56xx; - struct cvmx_agl_gmx_txx_stat9_s cn56xxp1; -} cvmx_agl_gmx_txx_stat9_t; - - -/** - * cvmx_agl_gmx_tx#_stats_ctl - * - * AGL_GMX_TX_STATS_CTL = TX Stats Control register - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_stats_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rd_clr : 1; /**< Stats registers will clear on reads */ -#else - uint64_t rd_clr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_agl_gmx_txx_stats_ctl_s cn52xx; - struct cvmx_agl_gmx_txx_stats_ctl_s cn52xxp1; - struct cvmx_agl_gmx_txx_stats_ctl_s cn56xx; - struct cvmx_agl_gmx_txx_stats_ctl_s cn56xxp1; -} cvmx_agl_gmx_txx_stats_ctl_t; - - -/** - * cvmx_agl_gmx_tx#_thresh - * - * AGL_GMX_TX_THRESH = MII TX Threshold - * - * - * Notes: - * Additionally reset when MIX<prt>_CTL[RESET] is set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_txx_thresh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t cnt : 6; /**< Number of 16B ticks to accumulate in the TX FIFO - before sending on the MII interface - This register should be large enough to prevent - underflow on the MII interface and must never - be set below 4. This register cannot exceed the - the TX FIFO depth which is 32 16B entries. */ -#else - uint64_t cnt : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_agl_gmx_txx_thresh_s cn52xx; - struct cvmx_agl_gmx_txx_thresh_s cn52xxp1; - struct cvmx_agl_gmx_txx_thresh_s cn56xx; - struct cvmx_agl_gmx_txx_thresh_s cn56xxp1; -} cvmx_agl_gmx_txx_thresh_t; - - -/** - * cvmx_agl_gmx_tx_bp - * - * AGL_GMX_TX_BP = MII TX BackPressure Register - * - * - * Notes: - * BP[0] will be reset when MIX0_CTL[RESET] is set to 1. - * BP[1] will be reset when MIX1_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t bp : 2; /**< Port BackPressure status - 0=Port is available - 1=Port should be back pressured */ -#else - uint64_t bp : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_agl_gmx_tx_bp_s cn52xx; - struct cvmx_agl_gmx_tx_bp_s cn52xxp1; - struct cvmx_agl_gmx_tx_bp_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t bp : 1; /**< Port BackPressure status - 0=Port is available - 1=Port should be back pressured */ -#else - uint64_t bp : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn56xx; - struct cvmx_agl_gmx_tx_bp_cn56xx cn56xxp1; -} cvmx_agl_gmx_tx_bp_t; - - -/** - * cvmx_agl_gmx_tx_col_attempt - * - * AGL_GMX_TX_COL_ATTEMPT = MII TX collision attempts before dropping frame - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_col_attempt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t limit : 5; /**< Collision Attempts */ -#else - uint64_t limit : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_agl_gmx_tx_col_attempt_s cn52xx; - struct cvmx_agl_gmx_tx_col_attempt_s cn52xxp1; - struct cvmx_agl_gmx_tx_col_attempt_s cn56xx; - struct cvmx_agl_gmx_tx_col_attempt_s cn56xxp1; -} cvmx_agl_gmx_tx_col_attempt_t; - - -/** - * cvmx_agl_gmx_tx_ifg - * - * Common - * - * - * AGL_GMX_TX_IFG = MII TX Interframe Gap - * - * Notes: - * Notes: - * * Programming IFG1 and IFG2. - * - * For half-duplex systems that require IEEE 802.3 compatibility, IFG1 must - * be in the range of 1-8, IFG2 must be in the range of 4-12, and the - * IFG1+IFG2 sum must be 12. - * - * For full-duplex systems that require IEEE 802.3 compatibility, IFG1 must - * be in the range of 1-11, IFG2 must be in the range of 1-11, and the - * IFG1+IFG2 sum must be 12. - * - * For all other systems, IFG1 and IFG2 can be any value in the range of - * 1-15. Allowing for a total possible IFG sum of 2-30. - * - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_ifg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ifg2 : 4; /**< 1/3 of the interframe gap timing - If CRS is detected during IFG2, then the - interFrameSpacing timer is not reset and a frame - is transmited once the timer expires. */ - uint64_t ifg1 : 4; /**< 2/3 of the interframe gap timing - If CRS is detected during IFG1, then the - interFrameSpacing timer is reset and a frame is - not transmited. */ -#else - uint64_t ifg1 : 4; - uint64_t ifg2 : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_agl_gmx_tx_ifg_s cn52xx; - struct cvmx_agl_gmx_tx_ifg_s cn52xxp1; - struct cvmx_agl_gmx_tx_ifg_s cn56xx; - struct cvmx_agl_gmx_tx_ifg_s cn56xxp1; -} cvmx_agl_gmx_tx_ifg_t; - - -/** - * cvmx_agl_gmx_tx_int_en - * - * AGL_GMX_TX_INT_EN = Interrupt Enable - * - * - * Notes: - * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0] will be reset when MIX0_CTL[RESET] is set to 1. - * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1] will be reset when MIX1_CTL[RESET] is set to 1. - * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t late_col : 2; /**< TX Late Collision */ - uint64_t reserved_14_15 : 2; - uint64_t xsdef : 2; /**< TX Excessive deferral (MII/halfdup mode only) */ - uint64_t reserved_10_11 : 2; - uint64_t xscol : 2; /**< TX Excessive collisions (MII/halfdup mode only) */ - uint64_t reserved_4_7 : 4; - uint64_t undflw : 2; /**< TX Underflow (MII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 2; - uint64_t reserved_4_7 : 4; - uint64_t xscol : 2; - uint64_t reserved_10_11 : 2; - uint64_t xsdef : 2; - uint64_t reserved_14_15 : 2; - uint64_t late_col : 2; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_agl_gmx_tx_int_en_s cn52xx; - struct cvmx_agl_gmx_tx_int_en_s cn52xxp1; - struct cvmx_agl_gmx_tx_int_en_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t late_col : 1; /**< TX Late Collision */ - uint64_t reserved_13_15 : 3; - uint64_t xsdef : 1; /**< TX Excessive deferral (MII/halfdup mode only) */ - uint64_t reserved_9_11 : 3; - uint64_t xscol : 1; /**< TX Excessive collisions (MII/halfdup mode only) */ - uint64_t reserved_3_7 : 5; - uint64_t undflw : 1; /**< TX Underflow (MII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 1; - uint64_t reserved_3_7 : 5; - uint64_t xscol : 1; - uint64_t reserved_9_11 : 3; - uint64_t xsdef : 1; - uint64_t reserved_13_15 : 3; - uint64_t late_col : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn56xx; - struct cvmx_agl_gmx_tx_int_en_cn56xx cn56xxp1; -} cvmx_agl_gmx_tx_int_en_t; - - -/** - * cvmx_agl_gmx_tx_int_reg - * - * AGL_GMX_TX_INT_REG = Interrupt Register - * - * - * Notes: - * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0] will be reset when MIX0_CTL[RESET] is set to 1. - * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1] will be reset when MIX1_CTL[RESET] is set to 1. - * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t late_col : 2; /**< TX Late Collision */ - uint64_t reserved_14_15 : 2; - uint64_t xsdef : 2; /**< TX Excessive deferral (MII/halfdup mode only) */ - uint64_t reserved_10_11 : 2; - uint64_t xscol : 2; /**< TX Excessive collisions (MII/halfdup mode only) */ - uint64_t reserved_4_7 : 4; - uint64_t undflw : 2; /**< TX Underflow (MII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 2; - uint64_t reserved_4_7 : 4; - uint64_t xscol : 2; - uint64_t reserved_10_11 : 2; - uint64_t xsdef : 2; - uint64_t reserved_14_15 : 2; - uint64_t late_col : 2; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_agl_gmx_tx_int_reg_s cn52xx; - struct cvmx_agl_gmx_tx_int_reg_s cn52xxp1; - struct cvmx_agl_gmx_tx_int_reg_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t late_col : 1; /**< TX Late Collision */ - uint64_t reserved_13_15 : 3; - uint64_t xsdef : 1; /**< TX Excessive deferral (MII/halfdup mode only) */ - uint64_t reserved_9_11 : 3; - uint64_t xscol : 1; /**< TX Excessive collisions (MII/halfdup mode only) */ - uint64_t reserved_3_7 : 5; - uint64_t undflw : 1; /**< TX Underflow (MII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 1; - uint64_t reserved_3_7 : 5; - uint64_t xscol : 1; - uint64_t reserved_9_11 : 3; - uint64_t xsdef : 1; - uint64_t reserved_13_15 : 3; - uint64_t late_col : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn56xx; - struct cvmx_agl_gmx_tx_int_reg_cn56xx cn56xxp1; -} cvmx_agl_gmx_tx_int_reg_t; - - -/** - * cvmx_agl_gmx_tx_jam - * - * AGL_GMX_TX_JAM = MII TX Jam Pattern - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_jam_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t jam : 8; /**< Jam pattern */ -#else - uint64_t jam : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_agl_gmx_tx_jam_s cn52xx; - struct cvmx_agl_gmx_tx_jam_s cn52xxp1; - struct cvmx_agl_gmx_tx_jam_s cn56xx; - struct cvmx_agl_gmx_tx_jam_s cn56xxp1; -} cvmx_agl_gmx_tx_jam_t; - - -/** - * cvmx_agl_gmx_tx_lfsr - * - * AGL_GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_lfsr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t lfsr : 16; /**< The current state of the LFSR used to feed random - numbers to compute truncated binary exponential - backoff. */ -#else - uint64_t lfsr : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_tx_lfsr_s cn52xx; - struct cvmx_agl_gmx_tx_lfsr_s cn52xxp1; - struct cvmx_agl_gmx_tx_lfsr_s cn56xx; - struct cvmx_agl_gmx_tx_lfsr_s cn56xxp1; -} cvmx_agl_gmx_tx_lfsr_t; - - -/** - * cvmx_agl_gmx_tx_ovr_bp - * - * AGL_GMX_TX_OVR_BP = MII TX Override BackPressure - * - * - * Notes: - * IGN_FULL[0], BP[0], EN[0] will be reset when MIX0_CTL[RESET] is set to 1. - * IGN_FULL[1], BP[1], EN[1] will be reset when MIX1_CTL[RESET] is set to 1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_ovr_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t en : 2; /**< Per port Enable back pressure override */ - uint64_t reserved_6_7 : 2; - uint64_t bp : 2; /**< Port BackPressure status to use - 0=Port is available - 1=Port should be back pressured */ - uint64_t reserved_2_3 : 2; - uint64_t ign_full : 2; /**< Ignore the RX FIFO full when computing BP */ -#else - uint64_t ign_full : 2; - uint64_t reserved_2_3 : 2; - uint64_t bp : 2; - uint64_t reserved_6_7 : 2; - uint64_t en : 2; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_agl_gmx_tx_ovr_bp_s cn52xx; - struct cvmx_agl_gmx_tx_ovr_bp_s cn52xxp1; - struct cvmx_agl_gmx_tx_ovr_bp_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t en : 1; /**< Per port Enable back pressure override */ - uint64_t reserved_5_7 : 3; - uint64_t bp : 1; /**< Port BackPressure status to use - 0=Port is available - 1=Port should be back pressured */ - uint64_t reserved_1_3 : 3; - uint64_t ign_full : 1; /**< Ignore the RX FIFO full when computing BP */ -#else - uint64_t ign_full : 1; - uint64_t reserved_1_3 : 3; - uint64_t bp : 1; - uint64_t reserved_5_7 : 3; - uint64_t en : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn56xx; - struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn56xxp1; -} cvmx_agl_gmx_tx_ovr_bp_t; - - -/** - * cvmx_agl_gmx_tx_pause_pkt_dmac - * - * AGL_GMX_TX_PAUSE_PKT_DMAC = MII TX Pause Packet DMAC field - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_pause_pkt_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t dmac : 48; /**< The DMAC field placed is outbnd pause pkts */ -#else - uint64_t dmac : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xx; - struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xxp1; - struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xx; - struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xxp1; -} cvmx_agl_gmx_tx_pause_pkt_dmac_t; - - -/** - * cvmx_agl_gmx_tx_pause_pkt_type - * - * AGL_GMX_TX_PAUSE_PKT_TYPE = MII TX Pause Packet TYPE field - * - * - * Notes: - * Additionally reset when both MIX0/1_CTL[RESET] are set to 1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_agl_gmx_tx_pause_pkt_type_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t type : 16; /**< The TYPE field placed is outbnd pause pkts */ -#else - uint64_t type : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xx; - struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xxp1; - struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xx; - struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xxp1; -} cvmx_agl_gmx_tx_pause_pkt_type_t; - - -/** - * cvmx_asx#_gmii_rx_clk_set - * - * ASX_GMII_RX_CLK_SET = GMII Clock delay setting - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_gmii_rx_clk_set_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< Setting to place on the RXCLK (GMII receive clk) - delay line. The intrinsic delay can range from - 50ps to 80ps per tap. */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_gmii_rx_clk_set_s cn30xx; - struct cvmx_asxx_gmii_rx_clk_set_s cn31xx; - struct cvmx_asxx_gmii_rx_clk_set_s cn50xx; -} cvmx_asxx_gmii_rx_clk_set_t; - - -/** - * cvmx_asx#_gmii_rx_dat_set - * - * ASX_GMII_RX_DAT_SET = GMII Clock delay setting - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_gmii_rx_dat_set_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< Setting to place on the RXD (GMII receive data) - delay lines. The intrinsic delay can range from - 50ps to 80ps per tap. */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_gmii_rx_dat_set_s cn30xx; - struct cvmx_asxx_gmii_rx_dat_set_s cn31xx; - struct cvmx_asxx_gmii_rx_dat_set_s cn50xx; -} cvmx_asxx_gmii_rx_dat_set_t; - - -/** - * cvmx_asx#_int_en - * - * ASX_INT_EN = Interrupt Enable - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t txpsh : 4; /**< TX FIFO overflow on RMGII port */ - uint64_t txpop : 4; /**< TX FIFO underflow on RMGII port */ - uint64_t ovrflw : 4; /**< RX FIFO overflow on RMGII port */ -#else - uint64_t ovrflw : 4; - uint64_t txpop : 4; - uint64_t txpsh : 4; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_asxx_int_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t txpsh : 3; /**< TX FIFO overflow on RMGII port */ - uint64_t reserved_7_7 : 1; - uint64_t txpop : 3; /**< TX FIFO underflow on RMGII port */ - uint64_t reserved_3_3 : 1; - uint64_t ovrflw : 3; /**< RX FIFO overflow on RMGII port */ -#else - uint64_t ovrflw : 3; - uint64_t reserved_3_3 : 1; - uint64_t txpop : 3; - uint64_t reserved_7_7 : 1; - uint64_t txpsh : 3; - uint64_t reserved_11_63 : 53; -#endif - } cn30xx; - struct cvmx_asxx_int_en_cn30xx cn31xx; - struct cvmx_asxx_int_en_s cn38xx; - struct cvmx_asxx_int_en_s cn38xxp2; - struct cvmx_asxx_int_en_cn30xx cn50xx; - struct cvmx_asxx_int_en_s cn58xx; - struct cvmx_asxx_int_en_s cn58xxp1; -} cvmx_asxx_int_en_t; - - -/** - * cvmx_asx#_int_reg - * - * ASX_INT_REG = Interrupt Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t txpsh : 4; /**< TX FIFO overflow on RMGII port */ - uint64_t txpop : 4; /**< TX FIFO underflow on RMGII port */ - uint64_t ovrflw : 4; /**< RX FIFO overflow on RMGII port */ -#else - uint64_t ovrflw : 4; - uint64_t txpop : 4; - uint64_t txpsh : 4; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_asxx_int_reg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t txpsh : 3; /**< TX FIFO overflow on RMGII port */ - uint64_t reserved_7_7 : 1; - uint64_t txpop : 3; /**< TX FIFO underflow on RMGII port */ - uint64_t reserved_3_3 : 1; - uint64_t ovrflw : 3; /**< RX FIFO overflow on RMGII port */ -#else - uint64_t ovrflw : 3; - uint64_t reserved_3_3 : 1; - uint64_t txpop : 3; - uint64_t reserved_7_7 : 1; - uint64_t txpsh : 3; - uint64_t reserved_11_63 : 53; -#endif - } cn30xx; - struct cvmx_asxx_int_reg_cn30xx cn31xx; - struct cvmx_asxx_int_reg_s cn38xx; - struct cvmx_asxx_int_reg_s cn38xxp2; - struct cvmx_asxx_int_reg_cn30xx cn50xx; - struct cvmx_asxx_int_reg_s cn58xx; - struct cvmx_asxx_int_reg_s cn58xxp1; -} cvmx_asxx_int_reg_t; - - -/** - * cvmx_asx#_mii_rx_dat_set - * - * ASX_MII_RX_DAT_SET = GMII Clock delay setting - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_mii_rx_dat_set_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< Setting to place on the RXD (MII receive data) - delay lines. The intrinsic delay can range from - 50ps to 80ps per tap. */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_mii_rx_dat_set_s cn30xx; - struct cvmx_asxx_mii_rx_dat_set_s cn50xx; -} cvmx_asxx_mii_rx_dat_set_t; - - -/** - * cvmx_asx#_prt_loop - * - * ASX_PRT_LOOP = Internal Loopback mode - TX FIFO output goes into RX FIFO (and maybe pins) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_prt_loop_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ext_loop : 4; /**< External Loopback Enable - 0 = No Loopback (TX FIFO is filled by RMGII) - 1 = RX FIFO drives the TX FIFO - - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex) - - GMX_PRT_CFG[SPEED] must be 1 (GigE speed) - - core clock > 250MHZ - - rxc must not deviate from the +-50ppm - - if txc>rxc, idle cycle may drop over time */ - uint64_t int_loop : 4; /**< Internal Loopback Enable - 0 = No Loopback (RX FIFO is filled by RMGII pins) - 1 = TX FIFO drives the RX FIFO - Note, in internal loop-back mode, the RGMII link - status is not used (since there is no real PHY). - Software cannot use the inband status. */ -#else - uint64_t int_loop : 4; - uint64_t ext_loop : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_asxx_prt_loop_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t ext_loop : 3; /**< External Loopback Enable - 0 = No Loopback (TX FIFO is filled by RMGII) - 1 = RX FIFO drives the TX FIFO - - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex) - - GMX_PRT_CFG[SPEED] must be 1 (GigE speed) - - core clock > 250MHZ - - rxc must not deviate from the +-50ppm - - if txc>rxc, idle cycle may drop over time */ - uint64_t reserved_3_3 : 1; - uint64_t int_loop : 3; /**< Internal Loopback Enable - 0 = No Loopback (RX FIFO is filled by RMGII pins) - 1 = TX FIFO drives the RX FIFO - - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex) - - GMX_PRT_CFG[SPEED] must be 1 (GigE speed) - - GMX_TX_CLK[CLK_CNT] must be 1 - Note, in internal loop-back mode, the RGMII link - status is not used (since there is no real PHY). - Software cannot use the inband status. */ -#else - uint64_t int_loop : 3; - uint64_t reserved_3_3 : 1; - uint64_t ext_loop : 3; - uint64_t reserved_7_63 : 57; -#endif - } cn30xx; - struct cvmx_asxx_prt_loop_cn30xx cn31xx; - struct cvmx_asxx_prt_loop_s cn38xx; - struct cvmx_asxx_prt_loop_s cn38xxp2; - struct cvmx_asxx_prt_loop_cn30xx cn50xx; - struct cvmx_asxx_prt_loop_s cn58xx; - struct cvmx_asxx_prt_loop_s cn58xxp1; -} cvmx_asxx_prt_loop_t; - - -/** - * cvmx_asx#_rld_bypass - * - * ASX_RLD_BYPASS - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_bypass_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t bypass : 1; /**< When set, the rld_dll setting is bypassed with - ASX_RLD_BYPASS_SETTING */ -#else - uint64_t bypass : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_asxx_rld_bypass_s cn38xx; - struct cvmx_asxx_rld_bypass_s cn38xxp2; - struct cvmx_asxx_rld_bypass_s cn58xx; - struct cvmx_asxx_rld_bypass_s cn58xxp1; -} cvmx_asxx_rld_bypass_t; - - -/** - * cvmx_asx#_rld_bypass_setting - * - * ASX_RLD_BYPASS_SETTING - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_bypass_setting_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< The rld_dll setting bypass value */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rld_bypass_setting_s cn38xx; - struct cvmx_asxx_rld_bypass_setting_s cn38xxp2; - struct cvmx_asxx_rld_bypass_setting_s cn58xx; - struct cvmx_asxx_rld_bypass_setting_s cn58xxp1; -} cvmx_asxx_rld_bypass_setting_t; - - -/** - * cvmx_asx#_rld_comp - * - * ASX_RLD_COMP - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_comp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t pctl : 5; /**< PCTL Compensation Value - These bits reflect the computed compensation - values from the built-in compensation circuit. */ - uint64_t nctl : 4; /**< These bits reflect the computed compensation - values from the built-in compensation circuit. */ -#else - uint64_t nctl : 4; - uint64_t pctl : 5; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_asxx_rld_comp_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t pctl : 4; /**< These bits reflect the computed compensation - values from the built-in compensation circuit. */ - uint64_t nctl : 4; /**< These bits reflect the computed compensation - values from the built-in compensation circuit. */ -#else - uint64_t nctl : 4; - uint64_t pctl : 4; - uint64_t reserved_8_63 : 56; -#endif - } cn38xx; - struct cvmx_asxx_rld_comp_cn38xx cn38xxp2; - struct cvmx_asxx_rld_comp_s cn58xx; - struct cvmx_asxx_rld_comp_s cn58xxp1; -} cvmx_asxx_rld_comp_t; - - -/** - * cvmx_asx#_rld_data_drv - * - * ASX_RLD_DATA_DRV - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_data_drv_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t pctl : 4; /**< These bits specify a driving strength (positive - integer) for the RLD I/Os when the built-in - compensation circuit is bypassed. */ - uint64_t nctl : 4; /**< These bits specify a driving strength (positive - integer) for the RLD I/Os when the built-in - compensation circuit is bypassed. */ -#else - uint64_t nctl : 4; - uint64_t pctl : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_asxx_rld_data_drv_s cn38xx; - struct cvmx_asxx_rld_data_drv_s cn38xxp2; - struct cvmx_asxx_rld_data_drv_s cn58xx; - struct cvmx_asxx_rld_data_drv_s cn58xxp1; -} cvmx_asxx_rld_data_drv_t; - - -/** - * cvmx_asx#_rld_fcram_mode - * - * ASX_RLD_FCRAM_MODE - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_fcram_mode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t mode : 1; /**< Memory Mode - - 0: RLDRAM - - 1: FCRAM */ -#else - uint64_t mode : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_asxx_rld_fcram_mode_s cn38xx; - struct cvmx_asxx_rld_fcram_mode_s cn38xxp2; -} cvmx_asxx_rld_fcram_mode_t; - - -/** - * cvmx_asx#_rld_nctl_strong - * - * ASX_RLD_NCTL_STRONG - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_nctl_strong_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t nctl : 5; /**< Duke's drive control */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rld_nctl_strong_s cn38xx; - struct cvmx_asxx_rld_nctl_strong_s cn38xxp2; - struct cvmx_asxx_rld_nctl_strong_s cn58xx; - struct cvmx_asxx_rld_nctl_strong_s cn58xxp1; -} cvmx_asxx_rld_nctl_strong_t; - - -/** - * cvmx_asx#_rld_nctl_weak - * - * ASX_RLD_NCTL_WEAK - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_nctl_weak_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t nctl : 5; /**< UNUSED (not needed for O9N) */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rld_nctl_weak_s cn38xx; - struct cvmx_asxx_rld_nctl_weak_s cn38xxp2; - struct cvmx_asxx_rld_nctl_weak_s cn58xx; - struct cvmx_asxx_rld_nctl_weak_s cn58xxp1; -} cvmx_asxx_rld_nctl_weak_t; - - -/** - * cvmx_asx#_rld_pctl_strong - * - * ASX_RLD_PCTL_STRONG - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_pctl_strong_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t pctl : 5; /**< Duke's drive control */ -#else - uint64_t pctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rld_pctl_strong_s cn38xx; - struct cvmx_asxx_rld_pctl_strong_s cn38xxp2; - struct cvmx_asxx_rld_pctl_strong_s cn58xx; - struct cvmx_asxx_rld_pctl_strong_s cn58xxp1; -} cvmx_asxx_rld_pctl_strong_t; - - -/** - * cvmx_asx#_rld_pctl_weak - * - * ASX_RLD_PCTL_WEAK - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_pctl_weak_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t pctl : 5; /**< UNUSED (not needed for O9N) */ -#else - uint64_t pctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rld_pctl_weak_s cn38xx; - struct cvmx_asxx_rld_pctl_weak_s cn38xxp2; - struct cvmx_asxx_rld_pctl_weak_s cn58xx; - struct cvmx_asxx_rld_pctl_weak_s cn58xxp1; -} cvmx_asxx_rld_pctl_weak_t; - - -/** - * cvmx_asx#_rld_setting - * - * ASX_RLD_SETTING - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rld_setting_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t dfaset : 5; /**< RLD ClkGen DLL Setting(debug) - ** NEW O9N ** */ - uint64_t dfalag : 1; /**< RLD ClkGen DLL Lag Error(debug) - ** NEW O9N ** */ - uint64_t dfalead : 1; /**< RLD ClkGen DLL Lead Error(debug) - ** NEW O9N ** */ - uint64_t dfalock : 1; /**< RLD ClkGen DLL Lock acquisition(debug) - ** NEW O9N ** */ - uint64_t setting : 5; /**< RLDCK90 DLL Setting(debug) */ -#else - uint64_t setting : 5; - uint64_t dfalock : 1; - uint64_t dfalead : 1; - uint64_t dfalag : 1; - uint64_t dfaset : 5; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_asxx_rld_setting_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< This is the read-only true rld dll_setting. */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } cn38xx; - struct cvmx_asxx_rld_setting_cn38xx cn38xxp2; - struct cvmx_asxx_rld_setting_s cn58xx; - struct cvmx_asxx_rld_setting_s cn58xxp1; -} cvmx_asxx_rld_setting_t; - - -/** - * cvmx_asx#_rx_clk_set# - * - * ASX_RX_CLK_SET = RGMII Clock delay setting - * - * - * Notes: - * Setting to place on the open-loop RXC (RGMII receive clk) - * delay line, which can delay the recieved clock. This - * can be used if the board and/or transmitting device - * has not otherwise delayed the clock. - * - * A value of SETTING=0 disables the delay line. The delay - * line should be disabled unless the transmitter or board - * does not delay the clock. - * - * Note that this delay line provides only a coarse control - * over the delay. Generally, it can only reliably provide - * a delay in the range 1.25-2.5ns, which may not be adequate - * for some system applications. - * - * The open loop delay line selects - * from among a series of tap positions. Each incremental - * tap position adds a delay of 50ps to 135ps per tap, depending - * on the chip, its temperature, and the voltage. - * To achieve from 1.25-2.5ns of delay on the recieved - * clock, a fixed value of SETTING=24 may work. - * For more precision, we recommend the following settings - * based on the chip voltage: - * - * VDD SETTING - * ----------------------------- - * 1.0 18 - * 1.05 19 - * 1.1 21 - * 1.15 22 - * 1.2 23 - * 1.25 24 - * 1.3 25 - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_clk_setx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< Setting to place on the open-loop RXC delay line */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_rx_clk_setx_s cn30xx; - struct cvmx_asxx_rx_clk_setx_s cn31xx; - struct cvmx_asxx_rx_clk_setx_s cn38xx; - struct cvmx_asxx_rx_clk_setx_s cn38xxp2; - struct cvmx_asxx_rx_clk_setx_s cn50xx; - struct cvmx_asxx_rx_clk_setx_s cn58xx; - struct cvmx_asxx_rx_clk_setx_s cn58xxp1; -} cvmx_asxx_rx_clk_setx_t; - - -/** - * cvmx_asx#_rx_prt_en - * - * ASX_RX_PRT_EN = RGMII Port Enable - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_prt_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t prt_en : 4; /**< Port enable. Must be set for Octane to receive - RMGII traffic. When this bit clear on a given - port, then the all RGMII cycles will appear as - inter-frame cycles. */ -#else - uint64_t prt_en : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_asxx_rx_prt_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t prt_en : 3; /**< Port enable. Must be set for Octane to receive - RMGII traffic. When this bit clear on a given - port, then the all RGMII cycles will appear as - inter-frame cycles. */ -#else - uint64_t prt_en : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_asxx_rx_prt_en_cn30xx cn31xx; - struct cvmx_asxx_rx_prt_en_s cn38xx; - struct cvmx_asxx_rx_prt_en_s cn38xxp2; - struct cvmx_asxx_rx_prt_en_cn30xx cn50xx; - struct cvmx_asxx_rx_prt_en_s cn58xx; - struct cvmx_asxx_rx_prt_en_s cn58xxp1; -} cvmx_asxx_rx_prt_en_t; - - -/** - * cvmx_asx#_rx_wol - * - * ASX_RX_WOL = RGMII RX Wake on LAN status register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_wol_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t status : 1; /**< Copy of PMCSR[15] - PME_status */ - uint64_t enable : 1; /**< Copy of PMCSR[8] - PME_enable */ -#else - uint64_t enable : 1; - uint64_t status : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_asxx_rx_wol_s cn38xx; - struct cvmx_asxx_rx_wol_s cn38xxp2; -} cvmx_asxx_rx_wol_t; - - -/** - * cvmx_asx#_rx_wol_msk - * - * ASX_RX_WOL_MSK = RGMII RX Wake on LAN byte mask - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_wol_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t msk : 64; /**< Bytes to include in the CRC signature */ -#else - uint64_t msk : 64; -#endif - } s; - struct cvmx_asxx_rx_wol_msk_s cn38xx; - struct cvmx_asxx_rx_wol_msk_s cn38xxp2; -} cvmx_asxx_rx_wol_msk_t; - - -/** - * cvmx_asx#_rx_wol_powok - * - * ASX_RX_WOL_POWOK = RGMII RX Wake on LAN Power OK - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_wol_powok_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t powerok : 1; /**< Power OK */ -#else - uint64_t powerok : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_asxx_rx_wol_powok_s cn38xx; - struct cvmx_asxx_rx_wol_powok_s cn38xxp2; -} cvmx_asxx_rx_wol_powok_t; - - -/** - * cvmx_asx#_rx_wol_sig - * - * ASX_RX_WOL_SIG = RGMII RX Wake on LAN CRC signature - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_rx_wol_sig_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t sig : 32; /**< CRC signature */ -#else - uint64_t sig : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_asxx_rx_wol_sig_s cn38xx; - struct cvmx_asxx_rx_wol_sig_s cn38xxp2; -} cvmx_asxx_rx_wol_sig_t; - - -/** - * cvmx_asx#_tx_clk_set# - * - * ASX_TX_CLK_SET = RGMII Clock delay setting - * - * - * Notes: - * Setting to place on the open-loop TXC (RGMII transmit clk) - * delay line, which can delay the transmited clock. This - * can be used if the board and/or transmitting device - * has not otherwise delayed the clock. - * - * A value of SETTING=0 disables the delay line. The delay - * line should be disabled unless the transmitter or board - * does not delay the clock. - * - * Note that this delay line provides only a coarse control - * over the delay. Generally, it can only reliably provide - * a delay in the range 1.25-2.5ns, which may not be adequate - * for some system applications. - * - * The open loop delay line selects - * from among a series of tap positions. Each incremental - * tap position adds a delay of 50ps to 135ps per tap, depending - * on the chip, its temperature, and the voltage. - * To achieve from 1.25-2.5ns of delay on the recieved - * clock, a fixed value of SETTING=24 may work. - * For more precision, we recommend the following settings - * based on the chip voltage: - * - * VDD SETTING - * ----------------------------- - * 1.0 18 - * 1.05 19 - * 1.1 21 - * 1.15 22 - * 1.2 23 - * 1.25 24 - * 1.3 25 - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_tx_clk_setx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t setting : 5; /**< Setting to place on the open-loop TXC delay line */ -#else - uint64_t setting : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_asxx_tx_clk_setx_s cn30xx; - struct cvmx_asxx_tx_clk_setx_s cn31xx; - struct cvmx_asxx_tx_clk_setx_s cn38xx; - struct cvmx_asxx_tx_clk_setx_s cn38xxp2; - struct cvmx_asxx_tx_clk_setx_s cn50xx; - struct cvmx_asxx_tx_clk_setx_s cn58xx; - struct cvmx_asxx_tx_clk_setx_s cn58xxp1; -} cvmx_asxx_tx_clk_setx_t; - - -/** - * cvmx_asx#_tx_comp_byp - * - * ASX_TX_COMP_BYP = RGMII Clock delay setting - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_tx_comp_byp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_asxx_tx_comp_byp_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t bypass : 1; /**< Compensation bypass */ - uint64_t pctl : 4; /**< PCTL Compensation Value (see Duke) */ - uint64_t nctl : 4; /**< NCTL Compensation Value (see Duke) */ -#else - uint64_t nctl : 4; - uint64_t pctl : 4; - uint64_t bypass : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn30xx; - struct cvmx_asxx_tx_comp_byp_cn30xx cn31xx; - struct cvmx_asxx_tx_comp_byp_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t pctl : 4; /**< PCTL Compensation Value (see Duke) */ - uint64_t nctl : 4; /**< NCTL Compensation Value (see Duke) */ -#else - uint64_t nctl : 4; - uint64_t pctl : 4; - uint64_t reserved_8_63 : 56; -#endif - } cn38xx; - struct cvmx_asxx_tx_comp_byp_cn38xx cn38xxp2; - struct cvmx_asxx_tx_comp_byp_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t bypass : 1; /**< Compensation bypass */ - uint64_t reserved_13_15 : 3; - uint64_t pctl : 5; /**< PCTL Compensation Value (see Duke) */ - uint64_t reserved_5_7 : 3; - uint64_t nctl : 5; /**< NCTL Compensation Value (see Duke) */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; - uint64_t reserved_13_15 : 3; - uint64_t bypass : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn50xx; - struct cvmx_asxx_tx_comp_byp_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t pctl : 5; /**< PCTL Compensation Value (see Duke) */ - uint64_t reserved_5_7 : 3; - uint64_t nctl : 5; /**< NCTL Compensation Value (see Duke) */ -#else - uint64_t nctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; - uint64_t reserved_13_63 : 51; -#endif - } cn58xx; - struct cvmx_asxx_tx_comp_byp_cn58xx cn58xxp1; -} cvmx_asxx_tx_comp_byp_t; - - -/** - * cvmx_asx#_tx_hi_water# - * - * ASX_TX_HI_WATER = RGMII TX FIFO Hi WaterMark - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_tx_hi_waterx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t mark : 4; /**< TX FIFO HiWatermark to stall GMX - Value of 0 maps to 16 - Reset value changed from 10 in pass1 - Pass1 settings (assuming 125 tclk) - - 325-375: 12 - - 375-437: 11 - - 437-550: 10 - - 550-687: 9 */ -#else - uint64_t mark : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_asxx_tx_hi_waterx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t mark : 3; /**< TX FIFO HiWatermark to stall GMX - Value 0 maps to 8. */ -#else - uint64_t mark : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_asxx_tx_hi_waterx_cn30xx cn31xx; - struct cvmx_asxx_tx_hi_waterx_s cn38xx; - struct cvmx_asxx_tx_hi_waterx_s cn38xxp2; - struct cvmx_asxx_tx_hi_waterx_cn30xx cn50xx; - struct cvmx_asxx_tx_hi_waterx_s cn58xx; - struct cvmx_asxx_tx_hi_waterx_s cn58xxp1; -} cvmx_asxx_tx_hi_waterx_t; - - -/** - * cvmx_asx#_tx_prt_en - * - * ASX_TX_PRT_EN = RGMII Port Enable - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asxx_tx_prt_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t prt_en : 4; /**< Port enable. Must be set for Octane to send - RMGII traffic. When this bit clear on a given - port, then all RGMII cycles will appear as - inter-frame cycles. */ -#else - uint64_t prt_en : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_asxx_tx_prt_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t prt_en : 3; /**< Port enable. Must be set for Octane to send - RMGII traffic. When this bit clear on a given - port, then all RGMII cycles will appear as - inter-frame cycles. */ -#else - uint64_t prt_en : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_asxx_tx_prt_en_cn30xx cn31xx; - struct cvmx_asxx_tx_prt_en_s cn38xx; - struct cvmx_asxx_tx_prt_en_s cn38xxp2; - struct cvmx_asxx_tx_prt_en_cn30xx cn50xx; - struct cvmx_asxx_tx_prt_en_s cn58xx; - struct cvmx_asxx_tx_prt_en_s cn58xxp1; -} cvmx_asxx_tx_prt_en_t; - - -/** - * cvmx_asx0_dbg_data_drv - * - * ASX_DBG_DATA_DRV - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asx0_dbg_data_drv_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t pctl : 5; /**< These bits control the driving strength of the dbg - interface. */ - uint64_t nctl : 4; /**< These bits control the driving strength of the dbg - interface. */ -#else - uint64_t nctl : 4; - uint64_t pctl : 5; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_asx0_dbg_data_drv_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t pctl : 4; /**< These bits control the driving strength of the dbg - interface. */ - uint64_t nctl : 4; /**< These bits control the driving strength of the dbg - interface. */ -#else - uint64_t nctl : 4; - uint64_t pctl : 4; - uint64_t reserved_8_63 : 56; -#endif - } cn38xx; - struct cvmx_asx0_dbg_data_drv_cn38xx cn38xxp2; - struct cvmx_asx0_dbg_data_drv_s cn58xx; - struct cvmx_asx0_dbg_data_drv_s cn58xxp1; -} cvmx_asx0_dbg_data_drv_t; - - -/** - * cvmx_asx0_dbg_data_enable - * - * ASX_DBG_DATA_ENABLE - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_asx0_dbg_data_enable_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t en : 1; /**< A 1->0 transistion, turns the dbg interface OFF. */ -#else - uint64_t en : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_asx0_dbg_data_enable_s cn38xx; - struct cvmx_asx0_dbg_data_enable_s cn38xxp2; - struct cvmx_asx0_dbg_data_enable_s cn58xx; - struct cvmx_asx0_dbg_data_enable_s cn58xxp1; -} cvmx_asx0_dbg_data_enable_t; - - -/** - * cvmx_ciu_bist - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_bist_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t bist : 4; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - BIST. */ -#else - uint64_t bist : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_ciu_bist_s cn30xx; - struct cvmx_ciu_bist_s cn31xx; - struct cvmx_ciu_bist_s cn38xx; - struct cvmx_ciu_bist_s cn38xxp2; - struct cvmx_ciu_bist_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t bist : 2; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - BIST. */ -#else - uint64_t bist : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn50xx; - struct cvmx_ciu_bist_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t bist : 3; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - BIST. */ -#else - uint64_t bist : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn52xx; - struct cvmx_ciu_bist_cn52xx cn52xxp1; - struct cvmx_ciu_bist_s cn56xx; - struct cvmx_ciu_bist_s cn56xxp1; - struct cvmx_ciu_bist_s cn58xx; - struct cvmx_ciu_bist_s cn58xxp1; -} cvmx_ciu_bist_t; - - -/** - * cvmx_ciu_dint - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_dint_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dint : 16; /**< Send DINT pulse to PP vector */ -#else - uint64_t dint : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ciu_dint_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t dint : 1; /**< Send DINT pulse to PP vector */ -#else - uint64_t dint : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_dint_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dint : 2; /**< Send DINT pulse to PP vector */ -#else - uint64_t dint : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_dint_s cn38xx; - struct cvmx_ciu_dint_s cn38xxp2; - struct cvmx_ciu_dint_cn31xx cn50xx; - struct cvmx_ciu_dint_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t dint : 4; /**< Send DINT pulse to PP vector */ -#else - uint64_t dint : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn52xx; - struct cvmx_ciu_dint_cn52xx cn52xxp1; - struct cvmx_ciu_dint_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t dint : 12; /**< Send DINT pulse to PP vector */ -#else - uint64_t dint : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_dint_cn56xx cn56xxp1; - struct cvmx_ciu_dint_s cn58xx; - struct cvmx_ciu_dint_s cn58xxp1; -} cvmx_ciu_dint_t; - - -/** - * cvmx_ciu_fuse - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_fuse_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t fuse : 16; /**< Physical PP is present */ -#else - uint64_t fuse : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ciu_fuse_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t fuse : 1; /**< Physical PP is present */ -#else - uint64_t fuse : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_fuse_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t fuse : 2; /**< Physical PP is present */ -#else - uint64_t fuse : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_fuse_s cn38xx; - struct cvmx_ciu_fuse_s cn38xxp2; - struct cvmx_ciu_fuse_cn31xx cn50xx; - struct cvmx_ciu_fuse_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t fuse : 4; /**< Physical PP is present */ -#else - uint64_t fuse : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn52xx; - struct cvmx_ciu_fuse_cn52xx cn52xxp1; - struct cvmx_ciu_fuse_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t fuse : 12; /**< Physical PP is present */ -#else - uint64_t fuse : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_fuse_cn56xx cn56xxp1; - struct cvmx_ciu_fuse_s cn58xx; - struct cvmx_ciu_fuse_s cn58xxp1; -} cvmx_ciu_fuse_t; - - -/** - * cvmx_ciu_gstop - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_gstop_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t gstop : 1; /**< GSTOP bit */ -#else - uint64_t gstop : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_ciu_gstop_s cn30xx; - struct cvmx_ciu_gstop_s cn31xx; - struct cvmx_ciu_gstop_s cn38xx; - struct cvmx_ciu_gstop_s cn38xxp2; - struct cvmx_ciu_gstop_s cn50xx; - struct cvmx_ciu_gstop_s cn52xx; - struct cvmx_ciu_gstop_s cn52xxp1; - struct cvmx_ciu_gstop_s cn56xx; - struct cvmx_ciu_gstop_s cn56xxp1; - struct cvmx_ciu_gstop_s cn58xx; - struct cvmx_ciu_gstop_s cn58xxp1; -} cvmx_ciu_gstop_t; - - -/** - * cvmx_ciu_int#_en0 - * - * Notes: - * CIU_INT0_EN0: PP0 /IP2 - * CIU_INT1_EN0: PP0 /IP3 - * ... - * CIU_INT6_EN0: PP3/IP2 - * CIU_INT7_EN0: PP3/IP3 - * (hole) - * CIU_INT32_EN0: PCI /IP - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t reserved_47_47 : 1; - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t reserved_47_47 : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn30xx; - struct cvmx_ciu_intx_en0_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn31xx; - struct cvmx_ciu_intx_en0_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn38xx; - struct cvmx_ciu_intx_en0_cn38xx cn38xxp2; - struct cvmx_ciu_intx_en0_cn30xx cn50xx; - struct cvmx_ciu_intx_en0_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en0_cn52xx cn52xxp1; - struct cvmx_ciu_intx_en0_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn56xx; - struct cvmx_ciu_intx_en0_cn56xx cn56xxp1; - struct cvmx_ciu_intx_en0_cn38xx cn58xx; - struct cvmx_ciu_intx_en0_cn38xx cn58xxp1; -} cvmx_ciu_intx_en0_t; - - -/** - * cvmx_ciu_int#_en0_w1c - * - * Notes: - * Write-1-to-clear version of the CIU_INTx_EN0 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en0_w1c_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en0_w1c_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en0_w1c_s cn56xx; - struct cvmx_ciu_intx_en0_w1c_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; -} cvmx_ciu_intx_en0_w1c_t; - - -/** - * cvmx_ciu_int#_en0_w1s - * - * Notes: - * Write-1-to-set version of the CIU_INTx_EN0 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en0_w1s_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en0_w1s_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en0_w1s_s cn56xx; - struct cvmx_ciu_intx_en0_w1s_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; -} cvmx_ciu_intx_en0_w1s_t; - - -/** - * cvmx_ciu_int#_en1 - * - * Notes: - * @verbatim - * PPx/IP2 will be raised when... - * - * n = x*2 - * PPx/IP2 = |([CIU_INT_SUM1, CIU_INTn_SUM0] & [CIU_INTn_EN1, CIU_INTn_EN0]) - * - * PPx/IP3 will be raised when... - * - * n = x*2 + 1 - * PPx/IP3 = |([CIU_INT_SUM1, CIU_INTn_SUM0] & [CIU_INTn_EN1, CIU_INTn_EN0]) - * - * PCI/INT will be raised when... - * - * PCI/INT = |([CIU_INT_SUM1, CIU_INT32_SUM0] & [CIU_INT32_EN1, CIU_INT32_EN0]) - * @endverbatim - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en1_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t wdog : 1; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_intx_en1_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t wdog : 2; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_intx_en1_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_ciu_intx_en1_cn38xx cn38xxp2; - struct cvmx_ciu_intx_en1_cn31xx cn50xx; - struct cvmx_ciu_intx_en1_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en1_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn52xxp1; - struct cvmx_ciu_intx_en1_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en1_cn56xx cn56xxp1; - struct cvmx_ciu_intx_en1_cn38xx cn58xx; - struct cvmx_ciu_intx_en1_cn38xx cn58xxp1; -} cvmx_ciu_intx_en1_t; - - -/** - * cvmx_ciu_int#_en1_w1c - * - * Notes: - * Write-1-to-clear version of the CIU_INTx_EN1 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en1_w1c_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en1_w1c_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en1_w1c_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en1_w1c_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn58xx; -} cvmx_ciu_intx_en1_w1c_t; - - -/** - * cvmx_ciu_int#_en1_w1s - * - * Notes: - * Write-1-to-set version of the CIU_INTx_EN1 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en1_w1s_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en1_w1s_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en1_w1s_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en1_w1s_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn58xx; -} cvmx_ciu_intx_en1_w1s_t; - - -/** - * cvmx_ciu_int#_en4_0 - * - * Notes: - * CIU_INT0_EN4_0: PP0 /IP4 - * CIU_INT1_EN4_0: PP1 /IP4 - * ... - * CIU_INT11_EN4_0: PP11 /IP4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en4_0_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t reserved_47_47 : 1; - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t reserved_47_47 : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn50xx; - struct cvmx_ciu_intx_en4_0_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_0_cn52xx cn52xxp1; - struct cvmx_ciu_intx_en4_0_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn56xx; - struct cvmx_ciu_intx_en4_0_cn56xx cn56xxp1; - struct cvmx_ciu_intx_en4_0_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; - struct cvmx_ciu_intx_en4_0_cn58xx cn58xxp1; -} cvmx_ciu_intx_en4_0_t; - - -/** - * cvmx_ciu_int#_en4_0_w1c - * - * Notes: - * Write-1-to-clear version of the CIU_INTx_EN4_0 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_0_w1c_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en4_0_w1c_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_0_w1c_s cn56xx; - struct cvmx_ciu_intx_en4_0_w1c_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; -} cvmx_ciu_intx_en4_0_w1c_t; - - -/** - * cvmx_ciu_int#_en4_0_w1s - * - * Notes: - * Write-1-to-set version of the CIU_INTx_EN4_0 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_0_w1s_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_en4_0_w1s_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_0_w1s_s cn56xx; - struct cvmx_ciu_intx_en4_0_w1s_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t reserved_44_44 : 1; - uint64_t pci_msi : 4; /**< PCI MSI */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox/PCI interrupts */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t reserved_44_44 : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; -} cvmx_ciu_intx_en4_0_w1s_t; - - -/** - * cvmx_ciu_int#_en4_1 - * - * Notes: - * PPx/IP4 will be raised when... - * PPx/IP4 = |([CIU_INT_SUM1, CIU_INTx_SUM4] & [CIU_INTx_EN4_1, CIU_INTx_EN4_0]) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en4_1_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t wdog : 2; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn50xx; - struct cvmx_ciu_intx_en4_1_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_1_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn52xxp1; - struct cvmx_ciu_intx_en4_1_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en4_1_cn56xx cn56xxp1; - struct cvmx_ciu_intx_en4_1_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn58xx; - struct cvmx_ciu_intx_en4_1_cn58xx cn58xxp1; -} cvmx_ciu_intx_en4_1_t; - - -/** - * cvmx_ciu_int#_en4_1_w1c - * - * Notes: - * Write-1-to-clear version of the CIU_INTx_EN4_1 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_1_w1c_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en4_1_w1c_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_1_w1c_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en4_1_w1c_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn58xx; -} cvmx_ciu_intx_en4_1_w1c_t; - - -/** - * cvmx_ciu_int#_en4_1_w1s - * - * Notes: - * Write-1-to-set version of the CIU_INTx_EN4_1 register - * (Pass2 ONLY) - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_en4_1_w1s_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_intx_en4_1_w1s_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< Watchdog summary interrupt enable vector */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_intx_en4_1_w1s_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_intx_en4_1_w1s_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< Watchdog summary interrupt enable vectory */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn58xx; -} cvmx_ciu_intx_en4_1_w1s_t; - - -/** - * cvmx_ciu_int#_sum0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_sum0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM0 where x=0-31. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_sum0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t reserved_47_47 : 1; - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM0 where x=0-1. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t reserved_47_47 : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn30xx; - struct cvmx_ciu_intx_sum0_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM0 where x=0-3. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn31xx; - struct cvmx_ciu_intx_sum0_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM0 where x=0-31. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn38xx; - struct cvmx_ciu_intx_sum0_cn38xx cn38xxp2; - struct cvmx_ciu_intx_sum0_cn30xx cn50xx; - struct cvmx_ciu_intx_sum0_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< SUM1&EN1 summary bit - This read-only bit reads as a one whenever any - CIU_INT_SUM1 bit is set and corresponding - enable bit in CIU_INTx_EN is set, where x - is the same as x in this CIU_INTx_SUM0. - PPs use CIU_INTx_SUM0 where x=0-7. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 - Note that WDOG_SUM only summarizes the SUM/EN1 - result and does not have a corresponding enable - bit, so does not directly contribute to - interrupts. */ - uint64_t pci_msi : 4; /**< PCI MSI - Refer to "Receiving Message-Signalled - Interrupts" in the PCIe chapter of the spec */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D - Refer to "Receiving Emulated INTA/INTB/ - INTC/INTD" in the PCIe chapter of the spec */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-7 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_sum0_cn52xx cn52xxp1; - struct cvmx_ciu_intx_sum0_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM0 where x=0-23. - PCI uses the CIU_INTx_SUM0 where x=32. - Even INTx registers report WDOG to IP2 - Odd INTx registers report WDOG to IP3 */ - uint64_t pci_msi : 4; /**< PCI MSI - Refer to "Receiving Message-Signalled - Interrupts" in the PCIe chapter of the spec */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D - Refer to "Receiving Emulated INTA/INTB/ - INTC/INTD" in the PCIe chapter of the spec */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-23 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn56xx; - struct cvmx_ciu_intx_sum0_cn56xx cn56xxp1; - struct cvmx_ciu_intx_sum0_cn38xx cn58xx; - struct cvmx_ciu_intx_sum0_cn38xx cn58xxp1; -} cvmx_ciu_intx_sum0_t; - - -/** - * cvmx_ciu_int#_sum4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_intx_sum4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - These registers report WDOG to IP4 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } s; - struct cvmx_ciu_intx_sum4_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t mpi : 1; /**< MPI/SPI interrupt */ - uint64_t pcm : 1; /**< PCM/TDM interrupt */ - uint64_t usb : 1; /**< USB interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t reserved_47_47 : 1; - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - PPs use CIU_INTx_SUM4 where x=0-1. */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t reserved_47_47 : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t pcm : 1; - uint64_t mpi : 1; - uint64_t reserved_59_63 : 5; -#endif - } cn50xx; - struct cvmx_ciu_intx_sum4_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t reserved_51_51 : 1; - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t reserved_49_49 : 1; - uint64_t gmx_drp : 1; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< SUM1&EN4_1 summary bit - This read-only bit reads as a one whenever any - CIU_INT_SUM1 bit is set and corresponding - enable bit in CIU_INTx_EN4_1 is set, where x - is the same as x in this CIU_INTx_SUM4. - PPs use CIU_INTx_SUM4 for IP4, where x=PPid. - Note that WDOG_SUM only summarizes the SUM/EN4_1 - result and does not have a corresponding enable - bit, so does not directly contribute to - interrupts. */ - uint64_t pci_msi : 4; /**< PCI MSI - Refer to "Receiving Message-Signalled - Interrupts" in the PCIe chapter of the spec */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D - Refer to "Receiving Emulated INTA/INTB/ - INTC/INTD" in the PCIe chapter of the spec */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-3 - [33] is the or of <31:16> - [32] is the or of <15:0> */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 1; - uint64_t reserved_49_49 : 1; - uint64_t ipd_drp : 1; - uint64_t reserved_51_51 : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn52xx; - struct cvmx_ciu_intx_sum4_cn52xx cn52xxp1; - struct cvmx_ciu_intx_sum4_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bootdma : 1; /**< Boot bus DMA engines Interrupt */ - uint64_t mii : 1; /**< MII Interface Interrupt */ - uint64_t ipdppthr : 1; /**< IPD per-port counter threshold interrupt */ - uint64_t powiq : 1; /**< POW IQ interrupt */ - uint64_t twsi2 : 1; /**< 2nd TWSI Interrupt */ - uint64_t reserved_57_58 : 2; - uint64_t usb : 1; /**< USB Interrupt */ - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - These registers report WDOG to IP4 */ - uint64_t pci_msi : 4; /**< PCI MSI - Refer to "Receiving Message-Signalled - Interrupts" in the PCIe chapter of the spec */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D - Refer to "Receiving Emulated INTA/INTB/ - INTC/INTD" in the PCIe chapter of the spec */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-11 - [33] is the or of <31:16> - [32] is the or of <15:0> */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t usb : 1; - uint64_t reserved_57_58 : 2; - uint64_t twsi2 : 1; - uint64_t powiq : 1; - uint64_t ipdppthr : 1; - uint64_t mii : 1; - uint64_t bootdma : 1; -#endif - } cn56xx; - struct cvmx_ciu_intx_sum4_cn56xx cn56xxp1; - struct cvmx_ciu_intx_sum4_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t timer : 4; /**< General timer interrupts */ - uint64_t key_zero : 1; /**< Key Zeroization interrupt - KEY_ZERO will be set when the external ZERO_KEYS - pin is sampled high. KEY_ZERO is cleared by SW */ - uint64_t ipd_drp : 1; /**< IPD QOS packet drop */ - uint64_t gmx_drp : 2; /**< GMX packet drop */ - uint64_t trace : 1; /**< L2C has the CMB trace buffer */ - uint64_t rml : 1; /**< RML Interrupt */ - uint64_t twsi : 1; /**< TWSI Interrupt */ - uint64_t wdog_sum : 1; /**< Watchdog summary - These registers report WDOG to IP4 */ - uint64_t pci_msi : 4; /**< PCI MSI - [43] is the or of <63:48> - [42] is the or of <47:32> - [41] is the or of <31:16> - [40] is the or of <15:0> */ - uint64_t pci_int : 4; /**< PCI INTA/B/C/D */ - uint64_t uart : 2; /**< Two UART interrupts */ - uint64_t mbox : 2; /**< Two mailbox interrupts for entries 0-31 - [33] is the or of <31:16> - [32] is the or of <15:0> - Two PCI internal interrupts for entry 32 - CIU_PCI_INTA */ - uint64_t gpio : 16; /**< 16 GPIO interrupts */ - uint64_t workq : 16; /**< 16 work queue interrupts - 1 bit/group. A copy of the R/W1C bit in the POW. */ -#else - uint64_t workq : 16; - uint64_t gpio : 16; - uint64_t mbox : 2; - uint64_t uart : 2; - uint64_t pci_int : 4; - uint64_t pci_msi : 4; - uint64_t wdog_sum : 1; - uint64_t twsi : 1; - uint64_t rml : 1; - uint64_t trace : 1; - uint64_t gmx_drp : 2; - uint64_t ipd_drp : 1; - uint64_t key_zero : 1; - uint64_t timer : 4; - uint64_t reserved_56_63 : 8; -#endif - } cn58xx; - struct cvmx_ciu_intx_sum4_cn58xx cn58xxp1; -} cvmx_ciu_intx_sum4_t; - - -/** - * cvmx_ciu_int_sum1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_int_sum1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t wdog : 16; /**< 16 watchdog interrupts */ -#else - uint64_t wdog : 16; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_ciu_int_sum1_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t wdog : 1; /**< 1 watchdog interrupt */ -#else - uint64_t wdog : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_int_sum1_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t wdog : 2; /**< 2 watchdog interrupts */ -#else - uint64_t wdog : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_int_sum1_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t wdog : 16; /**< 16 watchdog interrupts */ -#else - uint64_t wdog : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_ciu_int_sum1_cn38xx cn38xxp2; - struct cvmx_ciu_int_sum1_cn31xx cn50xx; - struct cvmx_ciu_int_sum1_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t nand : 1; /**< NAND Flash Controller */ - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< 4 watchdog interrupts */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t nand : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_ciu_int_sum1_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t mii1 : 1; /**< Second MII Interrupt */ - uint64_t usb1 : 1; /**< Second USB Interrupt */ - uint64_t uart2 : 1; /**< Third UART interrupt */ - uint64_t reserved_4_15 : 12; - uint64_t wdog : 4; /**< 4 watchdog interrupts */ -#else - uint64_t wdog : 4; - uint64_t reserved_4_15 : 12; - uint64_t uart2 : 1; - uint64_t usb1 : 1; - uint64_t mii1 : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn52xxp1; - struct cvmx_ciu_int_sum1_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t wdog : 12; /**< 12 watchdog interrupts */ -#else - uint64_t wdog : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_int_sum1_cn56xx cn56xxp1; - struct cvmx_ciu_int_sum1_cn38xx cn58xx; - struct cvmx_ciu_int_sum1_cn38xx cn58xxp1; -} cvmx_ciu_int_sum1_t; - - -/** - * cvmx_ciu_mbox_clr# - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_mbox_clrx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bits : 32; /**< On writes, clr corresponding bit in MBOX register - on reads, return the MBOX register */ -#else - uint64_t bits : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_ciu_mbox_clrx_s cn30xx; - struct cvmx_ciu_mbox_clrx_s cn31xx; - struct cvmx_ciu_mbox_clrx_s cn38xx; - struct cvmx_ciu_mbox_clrx_s cn38xxp2; - struct cvmx_ciu_mbox_clrx_s cn50xx; - struct cvmx_ciu_mbox_clrx_s cn52xx; - struct cvmx_ciu_mbox_clrx_s cn52xxp1; - struct cvmx_ciu_mbox_clrx_s cn56xx; - struct cvmx_ciu_mbox_clrx_s cn56xxp1; - struct cvmx_ciu_mbox_clrx_s cn58xx; - struct cvmx_ciu_mbox_clrx_s cn58xxp1; -} cvmx_ciu_mbox_clrx_t; - - -/** - * cvmx_ciu_mbox_set# - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_mbox_setx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bits : 32; /**< On writes, set corresponding bit in MBOX register - on reads, return the MBOX register */ -#else - uint64_t bits : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_ciu_mbox_setx_s cn30xx; - struct cvmx_ciu_mbox_setx_s cn31xx; - struct cvmx_ciu_mbox_setx_s cn38xx; - struct cvmx_ciu_mbox_setx_s cn38xxp2; - struct cvmx_ciu_mbox_setx_s cn50xx; - struct cvmx_ciu_mbox_setx_s cn52xx; - struct cvmx_ciu_mbox_setx_s cn52xxp1; - struct cvmx_ciu_mbox_setx_s cn56xx; - struct cvmx_ciu_mbox_setx_s cn56xxp1; - struct cvmx_ciu_mbox_setx_s cn58xx; - struct cvmx_ciu_mbox_setx_s cn58xxp1; -} cvmx_ciu_mbox_setx_t; - - -/** - * cvmx_ciu_nmi - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_nmi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t nmi : 16; /**< Send NMI pulse to PP vector */ -#else - uint64_t nmi : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ciu_nmi_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t nmi : 1; /**< Send NMI pulse to PP vector */ -#else - uint64_t nmi : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_nmi_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t nmi : 2; /**< Send NMI pulse to PP vector */ -#else - uint64_t nmi : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_nmi_s cn38xx; - struct cvmx_ciu_nmi_s cn38xxp2; - struct cvmx_ciu_nmi_cn31xx cn50xx; - struct cvmx_ciu_nmi_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t nmi : 4; /**< Send NMI pulse to PP vector */ -#else - uint64_t nmi : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn52xx; - struct cvmx_ciu_nmi_cn52xx cn52xxp1; - struct cvmx_ciu_nmi_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t nmi : 12; /**< Send NMI pulse to PP vector */ -#else - uint64_t nmi : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_nmi_cn56xx cn56xxp1; - struct cvmx_ciu_nmi_s cn58xx; - struct cvmx_ciu_nmi_s cn58xxp1; -} cvmx_ciu_nmi_t; - - -/** - * cvmx_ciu_pci_inta - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_pci_inta_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t intr : 2; /**< PCI interrupt - These bits are observed in CIU_INT32_SUM0<33:32> */ -#else - uint64_t intr : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_ciu_pci_inta_s cn30xx; - struct cvmx_ciu_pci_inta_s cn31xx; - struct cvmx_ciu_pci_inta_s cn38xx; - struct cvmx_ciu_pci_inta_s cn38xxp2; - struct cvmx_ciu_pci_inta_s cn50xx; - struct cvmx_ciu_pci_inta_s cn52xx; - struct cvmx_ciu_pci_inta_s cn52xxp1; - struct cvmx_ciu_pci_inta_s cn56xx; - struct cvmx_ciu_pci_inta_s cn56xxp1; - struct cvmx_ciu_pci_inta_s cn58xx; - struct cvmx_ciu_pci_inta_s cn58xxp1; -} cvmx_ciu_pci_inta_t; - - -/** - * cvmx_ciu_pp_dbg - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_pp_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ppdbg : 16; /**< Debug[DM] value for each PP - whether the PP's are in debug mode or not */ -#else - uint64_t ppdbg : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ciu_pp_dbg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t ppdbg : 1; /**< Debug[DM] value for each PP - whether the PP's are in debug mode or not */ -#else - uint64_t ppdbg : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_pp_dbg_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t ppdbg : 2; /**< Debug[DM] value for each PP - whether the PP's are in debug mode or not */ -#else - uint64_t ppdbg : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_pp_dbg_s cn38xx; - struct cvmx_ciu_pp_dbg_s cn38xxp2; - struct cvmx_ciu_pp_dbg_cn31xx cn50xx; - struct cvmx_ciu_pp_dbg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ppdbg : 4; /**< Debug[DM] value for each PP - whether the PP's are in debug mode or not */ -#else - uint64_t ppdbg : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn52xx; - struct cvmx_ciu_pp_dbg_cn52xx cn52xxp1; - struct cvmx_ciu_pp_dbg_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t ppdbg : 12; /**< Debug[DM] value for each PP - whether the PP's are in debug mode or not */ -#else - uint64_t ppdbg : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_pp_dbg_cn56xx cn56xxp1; - struct cvmx_ciu_pp_dbg_s cn58xx; - struct cvmx_ciu_pp_dbg_s cn58xxp1; -} cvmx_ciu_pp_dbg_t; - - -/** - * cvmx_ciu_pp_poke# - * - * Notes: - * Any write to a CIU_PP_POKE register clears any pending interrupt generated - * by the associated watchdog, resets the CIU_WDOG[STATE] field, and set - * CIU_WDOG[CNT] to be (CIU_WDOG[LEN] << 8). - * - * Reads to this register will return the associated CIU_WDOG register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_pp_pokex_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t poke : 64; /**< Reserved */ -#else - uint64_t poke : 64; -#endif - } s; - struct cvmx_ciu_pp_pokex_s cn30xx; - struct cvmx_ciu_pp_pokex_s cn31xx; - struct cvmx_ciu_pp_pokex_s cn38xx; - struct cvmx_ciu_pp_pokex_s cn38xxp2; - struct cvmx_ciu_pp_pokex_s cn50xx; - struct cvmx_ciu_pp_pokex_s cn52xx; - struct cvmx_ciu_pp_pokex_s cn52xxp1; - struct cvmx_ciu_pp_pokex_s cn56xx; - struct cvmx_ciu_pp_pokex_s cn56xxp1; - struct cvmx_ciu_pp_pokex_s cn58xx; - struct cvmx_ciu_pp_pokex_s cn58xxp1; -} cvmx_ciu_pp_pokex_t; - - -/** - * cvmx_ciu_pp_rst - * - * Contains the reset control for each PP. Value of '1' will hold a PP in reset, '0' will release. - * Resets to 0xffff when PCI boot is enabled, 0xfffe otherwise. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_pp_rst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t rst : 15; /**< PP Rst for PP's 15-1 */ - uint64_t rst0 : 1; /**< PP Rst for PP0 - depends on standalone mode */ -#else - uint64_t rst0 : 1; - uint64_t rst : 15; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ciu_pp_rst_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rst0 : 1; /**< PP Rst for PP0 - depends on standalone mode */ -#else - uint64_t rst0 : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn30xx; - struct cvmx_ciu_pp_rst_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t rst : 1; /**< PP Rst for PP1 */ - uint64_t rst0 : 1; /**< PP Rst for PP0 - depends on standalone mode */ -#else - uint64_t rst0 : 1; - uint64_t rst : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_ciu_pp_rst_s cn38xx; - struct cvmx_ciu_pp_rst_s cn38xxp2; - struct cvmx_ciu_pp_rst_cn31xx cn50xx; - struct cvmx_ciu_pp_rst_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t rst : 3; /**< PP Rst for PP's 11-1 */ - uint64_t rst0 : 1; /**< PP Rst for PP0 - depends on standalone mode */ -#else - uint64_t rst0 : 1; - uint64_t rst : 3; - uint64_t reserved_4_63 : 60; -#endif - } cn52xx; - struct cvmx_ciu_pp_rst_cn52xx cn52xxp1; - struct cvmx_ciu_pp_rst_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t rst : 11; /**< PP Rst for PP's 11-1 */ - uint64_t rst0 : 1; /**< PP Rst for PP0 - depends on standalone mode */ -#else - uint64_t rst0 : 1; - uint64_t rst : 11; - uint64_t reserved_12_63 : 52; -#endif - } cn56xx; - struct cvmx_ciu_pp_rst_cn56xx cn56xxp1; - struct cvmx_ciu_pp_rst_s cn58xx; - struct cvmx_ciu_pp_rst_s cn58xxp1; -} cvmx_ciu_pp_rst_t; - - -/** - * cvmx_ciu_qlm_dcok - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_qlm_dcok_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t qlm_dcok : 4; /**< Re-assert dcok for each QLM. The value in this - field is "anded" with the pll_dcok pin and then - sent to each QLM (0..3). */ -#else - uint64_t qlm_dcok : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_ciu_qlm_dcok_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t qlm_dcok : 2; /**< Re-assert dcok for each QLM. The value in this - field is "anded" with the pll_dcok pin and then - sent to each QLM (0..3). */ -#else - uint64_t qlm_dcok : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn52xx; - struct cvmx_ciu_qlm_dcok_cn52xx cn52xxp1; - struct cvmx_ciu_qlm_dcok_s cn56xx; - struct cvmx_ciu_qlm_dcok_s cn56xxp1; -} cvmx_ciu_qlm_dcok_t; - - -/** - * cvmx_ciu_qlm_jtgc - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_qlm_jtgc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t clk_div : 3; /**< Clock divider for QLM JTAG operations. eclk is - divided by 2^(CLK_DIV + 2) */ - uint64_t reserved_6_7 : 2; - uint64_t mux_sel : 2; /**< Selects which QLM JTAG shift out is shifted into - the QLM JTAG shift register: CIU_QLM_JTGD[SHFT_REG] */ - uint64_t bypass : 4; /**< Selects which QLM JTAG shift chains are bypassed - by the QLM JTAG data register (CIU_QLM_JTGD) (one - bit per QLM) */ -#else - uint64_t bypass : 4; - uint64_t mux_sel : 2; - uint64_t reserved_6_7 : 2; - uint64_t clk_div : 3; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_ciu_qlm_jtgc_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t clk_div : 3; /**< Clock divider for QLM JTAG operations. eclk is - divided by 2^(CLK_DIV + 2) */ - uint64_t reserved_5_7 : 3; - uint64_t mux_sel : 1; /**< Selects which QLM JTAG shift out is shifted into - the QLM JTAG shift register: CIU_QLM_JTGD[SHFT_REG] */ - uint64_t reserved_2_3 : 2; - uint64_t bypass : 2; /**< Selects which QLM JTAG shift chains are bypassed - by the QLM JTAG data register (CIU_QLM_JTGD) (one - bit per QLM) */ -#else - uint64_t bypass : 2; - uint64_t reserved_2_3 : 2; - uint64_t mux_sel : 1; - uint64_t reserved_5_7 : 3; - uint64_t clk_div : 3; - uint64_t reserved_11_63 : 53; -#endif - } cn52xx; - struct cvmx_ciu_qlm_jtgc_cn52xx cn52xxp1; - struct cvmx_ciu_qlm_jtgc_s cn56xx; - struct cvmx_ciu_qlm_jtgc_s cn56xxp1; -} cvmx_ciu_qlm_jtgc_t; - - -/** - * cvmx_ciu_qlm_jtgd - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_qlm_jtgd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t capture : 1; /**< Perform JTAG capture operation (self-clearing when - op completes) */ - uint64_t shift : 1; /**< Perform JTAG shift operation (self-clearing when - op completes) */ - uint64_t update : 1; /**< Perform JTAG update operation (self-clearing when - op completes) */ - uint64_t reserved_44_60 : 17; - uint64_t select : 4; /**< Selects which QLM JTAG shift chains the JTAG - operations are performed on */ - uint64_t reserved_37_39 : 3; - uint64_t shft_cnt : 5; /**< QLM JTAG shift count (encoded in -1 notation) */ - uint64_t shft_reg : 32; /**< QLM JTAG shift register */ -#else - uint64_t shft_reg : 32; - uint64_t shft_cnt : 5; - uint64_t reserved_37_39 : 3; - uint64_t select : 4; - uint64_t reserved_44_60 : 17; - uint64_t update : 1; - uint64_t shift : 1; - uint64_t capture : 1; -#endif - } s; - struct cvmx_ciu_qlm_jtgd_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t capture : 1; /**< Perform JTAG capture operation (self-clearing when - op completes) */ - uint64_t shift : 1; /**< Perform JTAG shift operation (self-clearing when - op completes) */ - uint64_t update : 1; /**< Perform JTAG update operation (self-clearing when - op completes) */ - uint64_t reserved_42_60 : 19; - uint64_t select : 2; /**< Selects which QLM JTAG shift chains the JTAG - operations are performed on */ - uint64_t reserved_37_39 : 3; - uint64_t shft_cnt : 5; /**< QLM JTAG shift count (encoded in -1 notation) */ - uint64_t shft_reg : 32; /**< QLM JTAG shift register */ -#else - uint64_t shft_reg : 32; - uint64_t shft_cnt : 5; - uint64_t reserved_37_39 : 3; - uint64_t select : 2; - uint64_t reserved_42_60 : 19; - uint64_t update : 1; - uint64_t shift : 1; - uint64_t capture : 1; -#endif - } cn52xx; - struct cvmx_ciu_qlm_jtgd_cn52xx cn52xxp1; - struct cvmx_ciu_qlm_jtgd_s cn56xx; - struct cvmx_ciu_qlm_jtgd_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t capture : 1; /**< Perform JTAG capture operation (self-clearing when - op completes) */ - uint64_t shift : 1; /**< Perform JTAG shift operation (self-clearing when - op completes) */ - uint64_t update : 1; /**< Perform JTAG update operation (self-clearing when - op completes) */ - uint64_t reserved_37_60 : 24; - uint64_t shft_cnt : 5; /**< QLM JTAG shift count (encoded in -1 notation) */ - uint64_t shft_reg : 32; /**< QLM JTAG shift register */ -#else - uint64_t shft_reg : 32; - uint64_t shft_cnt : 5; - uint64_t reserved_37_60 : 24; - uint64_t update : 1; - uint64_t shift : 1; - uint64_t capture : 1; -#endif - } cn56xxp1; -} cvmx_ciu_qlm_jtgd_t; - - -/** - * cvmx_ciu_soft_bist - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_soft_bist_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t soft_bist : 1; /**< Run BIST on soft reset. */ -#else - uint64_t soft_bist : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_ciu_soft_bist_s cn30xx; - struct cvmx_ciu_soft_bist_s cn31xx; - struct cvmx_ciu_soft_bist_s cn38xx; - struct cvmx_ciu_soft_bist_s cn38xxp2; - struct cvmx_ciu_soft_bist_s cn50xx; - struct cvmx_ciu_soft_bist_s cn52xx; - struct cvmx_ciu_soft_bist_s cn52xxp1; - struct cvmx_ciu_soft_bist_s cn56xx; - struct cvmx_ciu_soft_bist_s cn56xxp1; - struct cvmx_ciu_soft_bist_s cn58xx; - struct cvmx_ciu_soft_bist_s cn58xxp1; -} cvmx_ciu_soft_bist_t; - - -/** - * cvmx_ciu_soft_prst - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_soft_prst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t host64 : 1; /**< PCX Host Mode Device Capability (0=32b/1=64b) */ - uint64_t npi : 1; /**< When PCI soft reset is asserted, also reset the - NPI and PNI logic */ - uint64_t soft_prst : 1; /**< Reset the PCI bus. Only works when Octane is - configured as a HOST. When OCTEON is a PCI host - (i.e. when PCI_HOST_MODE = 1), This controls - PCI_RST_L. Refer to section 10.11.1. */ -#else - uint64_t soft_prst : 1; - uint64_t npi : 1; - uint64_t host64 : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_ciu_soft_prst_s cn30xx; - struct cvmx_ciu_soft_prst_s cn31xx; - struct cvmx_ciu_soft_prst_s cn38xx; - struct cvmx_ciu_soft_prst_s cn38xxp2; - struct cvmx_ciu_soft_prst_s cn50xx; - struct cvmx_ciu_soft_prst_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t soft_prst : 1; /**< Reset the PCI bus. Only works when Octane is - configured as a HOST. When OCTEON is a PCI host - (i.e. when PCI_HOST_MODE = 1), This controls - PCI_RST_L. Refer to section 10.11.1. */ -#else - uint64_t soft_prst : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn52xx; - struct cvmx_ciu_soft_prst_cn52xx cn52xxp1; - struct cvmx_ciu_soft_prst_cn52xx cn56xx; - struct cvmx_ciu_soft_prst_cn52xx cn56xxp1; - struct cvmx_ciu_soft_prst_s cn58xx; - struct cvmx_ciu_soft_prst_s cn58xxp1; -} cvmx_ciu_soft_prst_t; - - -/** - * cvmx_ciu_soft_prst1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_soft_prst1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t soft_prst : 1; /**< Reset the PCI bus. Only works when Octane is - configured as a HOST. When OCTEON is a PCI host - (i.e. when PCI_HOST_MODE = 1), This controls - PCI_RST_L. Refer to section 10.11.1. */ -#else - uint64_t soft_prst : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_ciu_soft_prst1_s cn52xx; - struct cvmx_ciu_soft_prst1_s cn52xxp1; - struct cvmx_ciu_soft_prst1_s cn56xx; - struct cvmx_ciu_soft_prst1_s cn56xxp1; -} cvmx_ciu_soft_prst1_t; - - -/** - * cvmx_ciu_soft_rst - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_soft_rst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t soft_rst : 1; /**< Resets Octeon - When soft reseting Octeon from a remote PCI host, - always read CIU_SOFT_RST (and wait for result) - before writing SOFT_RST to '1'. */ -#else - uint64_t soft_rst : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_ciu_soft_rst_s cn30xx; - struct cvmx_ciu_soft_rst_s cn31xx; - struct cvmx_ciu_soft_rst_s cn38xx; - struct cvmx_ciu_soft_rst_s cn38xxp2; - struct cvmx_ciu_soft_rst_s cn50xx; - struct cvmx_ciu_soft_rst_s cn52xx; - struct cvmx_ciu_soft_rst_s cn52xxp1; - struct cvmx_ciu_soft_rst_s cn56xx; - struct cvmx_ciu_soft_rst_s cn56xxp1; - struct cvmx_ciu_soft_rst_s cn58xx; - struct cvmx_ciu_soft_rst_s cn58xxp1; -} cvmx_ciu_soft_rst_t; - - -/** - * cvmx_ciu_tim# - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_timx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t one_shot : 1; /**< One-shot mode */ - uint64_t len : 36; /**< Timeout length in core clock cycles - Periodic interrupts will occur every LEN+1 core - clock cycles when ONE_SHOT==0 - Timer disabled when LEN==0 */ -#else - uint64_t len : 36; - uint64_t one_shot : 1; - uint64_t reserved_37_63 : 27; -#endif - } s; - struct cvmx_ciu_timx_s cn30xx; - struct cvmx_ciu_timx_s cn31xx; - struct cvmx_ciu_timx_s cn38xx; - struct cvmx_ciu_timx_s cn38xxp2; - struct cvmx_ciu_timx_s cn50xx; - struct cvmx_ciu_timx_s cn52xx; - struct cvmx_ciu_timx_s cn52xxp1; - struct cvmx_ciu_timx_s cn56xx; - struct cvmx_ciu_timx_s cn56xxp1; - struct cvmx_ciu_timx_s cn58xx; - struct cvmx_ciu_timx_s cn58xxp1; -} cvmx_ciu_timx_t; - - -/** - * cvmx_ciu_wdog# - */ -typedef union -{ - uint64_t u64; - struct cvmx_ciu_wdogx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_46_63 : 18; - uint64_t gstopen : 1; /**< GSTOPEN */ - uint64_t dstop : 1; /**< DSTOP */ - uint64_t cnt : 24; /**< Number of 256-cycle intervals until next watchdog - expiration. Cleared on write to associated - CIU_PP_POKE register. */ - uint64_t len : 16; /**< Watchdog time expiration length - The 16 bits of LEN represent the most significant - bits of a 24 bit decrementer that decrements - every 256 cycles. - LEN must be set > 0 */ - uint64_t state : 2; /**< Watchdog state - number of watchdog time expirations since last - PP poke. Cleared on write to associated - CIU_PP_POKE register. */ - uint64_t mode : 2; /**< Watchdog mode - 0 = Off - 1 = Interrupt Only - 2 = Interrupt + NMI - 3 = Interrupt + NMI + Soft-Reset */ -#else - uint64_t mode : 2; - uint64_t state : 2; - uint64_t len : 16; - uint64_t cnt : 24; - uint64_t dstop : 1; - uint64_t gstopen : 1; - uint64_t reserved_46_63 : 18; -#endif - } s; - struct cvmx_ciu_wdogx_s cn30xx; - struct cvmx_ciu_wdogx_s cn31xx; - struct cvmx_ciu_wdogx_s cn38xx; - struct cvmx_ciu_wdogx_s cn38xxp2; - struct cvmx_ciu_wdogx_s cn50xx; - struct cvmx_ciu_wdogx_s cn52xx; - struct cvmx_ciu_wdogx_s cn52xxp1; - struct cvmx_ciu_wdogx_s cn56xx; - struct cvmx_ciu_wdogx_s cn56xxp1; - struct cvmx_ciu_wdogx_s cn58xx; - struct cvmx_ciu_wdogx_s cn58xxp1; -} cvmx_ciu_wdogx_t; - - -/** - * cvmx_dbg_data - * - * DBG_DATA = Debug Data Register - * - * Value returned on the debug-data lines from the RSLs - */ -typedef union -{ - uint64_t u64; - struct cvmx_dbg_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t c_mul : 5; /**< C_MUL pins sampled at DCOK assertion */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_dbg_data_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t pll_mul : 3; /**< pll_mul pins sampled at DCOK assertion */ - uint64_t reserved_23_27 : 5; - uint64_t c_mul : 5; /**< Core PLL multiplier sampled at DCOK assertion */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t reserved_23_27 : 5; - uint64_t pll_mul : 3; - uint64_t reserved_31_63 : 33; -#endif - } cn30xx; - struct cvmx_dbg_data_cn30xx cn31xx; - struct cvmx_dbg_data_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t d_mul : 4; /**< D_MUL pins sampled on DCOK assertion */ - uint64_t dclk_mul2 : 1; /**< Should always be set for fast DDR-II operation */ - uint64_t cclk_div2 : 1; /**< Should always be clear for fast core clock */ - uint64_t c_mul : 5; /**< C_MUL pins sampled at DCOK assertion */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t cclk_div2 : 1; - uint64_t dclk_mul2 : 1; - uint64_t d_mul : 4; - uint64_t reserved_29_63 : 35; -#endif - } cn38xx; - struct cvmx_dbg_data_cn38xx cn38xxp2; - struct cvmx_dbg_data_cn30xx cn50xx; - struct cvmx_dbg_data_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t rem : 6; /**< Remaining debug_select pins sampled at DCOK */ - uint64_t c_mul : 5; /**< C_MUL pins sampled at DCOK assertion */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t rem : 6; - uint64_t reserved_29_63 : 35; -#endif - } cn58xx; - struct cvmx_dbg_data_cn58xx cn58xxp1; -} cvmx_dbg_data_t; - - -/** - * cvmx_dfa_bst0 - * - * DFA_BST0 = DFA Bist Status - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_bst0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rdf : 16; /**< Bist Results for RDF[3:0] RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t pdf : 16; /**< Bist Results for PDF[3:0] RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t pdf : 16; - uint64_t rdf : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_dfa_bst0_s cn31xx; - struct cvmx_dfa_bst0_s cn38xx; - struct cvmx_dfa_bst0_s cn38xxp2; - struct cvmx_dfa_bst0_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t rdf : 4; /**< Bist Results for RDF[3:0] RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_4_15 : 12; - uint64_t pdf : 4; /**< Bist Results for PDF[3:0] RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t pdf : 4; - uint64_t reserved_4_15 : 12; - uint64_t rdf : 4; - uint64_t reserved_20_63 : 44; -#endif - } cn58xx; - struct cvmx_dfa_bst0_cn58xx cn58xxp1; -} cvmx_dfa_bst0_t; - - -/** - * cvmx_dfa_bst1 - * - * DFA_BST1 = DFA Bist Status - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_bst1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t crq : 1; /**< Bist Results for CRQ RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ifu : 1; /**< Bist Results for IFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t gfu : 1; /**< Bist Results for GFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t drf : 1; /**< Bist Results for DRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t crf : 1; /**< Bist Results for CRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p0_bwb : 1; /**< Bist Results for P0_BWB RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p1_bwb : 1; /**< Bist Results for P1_BWB RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p0_brf : 8; /**< Bist Results for P0_BRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p1_brf : 8; /**< Bist Results for P1_BRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t p1_brf : 8; - uint64_t p0_brf : 8; - uint64_t p1_bwb : 1; - uint64_t p0_bwb : 1; - uint64_t crf : 1; - uint64_t drf : 1; - uint64_t gfu : 1; - uint64_t ifu : 1; - uint64_t crq : 1; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_dfa_bst1_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t crq : 1; /**< Bist Results for CRQ RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ifu : 1; /**< Bist Results for IFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t gfu : 1; /**< Bist Results for GFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t drf : 1; /**< Bist Results for DRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t crf : 1; /**< Bist Results for CRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_0_17 : 18; -#else - uint64_t reserved_0_17 : 18; - uint64_t crf : 1; - uint64_t drf : 1; - uint64_t gfu : 1; - uint64_t ifu : 1; - uint64_t crq : 1; - uint64_t reserved_23_63 : 41; -#endif - } cn31xx; - struct cvmx_dfa_bst1_s cn38xx; - struct cvmx_dfa_bst1_s cn38xxp2; - struct cvmx_dfa_bst1_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t crq : 1; /**< Bist Results for CRQ RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ifu : 1; /**< Bist Results for IFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t gfu : 1; /**< Bist Results for GFU RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_19_19 : 1; - uint64_t crf : 1; /**< Bist Results for CRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p0_bwb : 1; /**< Bist Results for P0_BWB RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p1_bwb : 1; /**< Bist Results for P1_BWB RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p0_brf : 8; /**< Bist Results for P0_BRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t p1_brf : 8; /**< Bist Results for P1_BRF RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t p1_brf : 8; - uint64_t p0_brf : 8; - uint64_t p1_bwb : 1; - uint64_t p0_bwb : 1; - uint64_t crf : 1; - uint64_t reserved_19_19 : 1; - uint64_t gfu : 1; - uint64_t ifu : 1; - uint64_t crq : 1; - uint64_t reserved_23_63 : 41; -#endif - } cn58xx; - struct cvmx_dfa_bst1_cn58xx cn58xxp1; -} cvmx_dfa_bst1_t; - - -/** - * cvmx_dfa_cfg - * - * Specify the RSL base addresses for the block - * - * DFA_CFG = DFA Configuration - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t nrpl_ena : 1; /**< When set, allows the per-node replication feature to be - enabled. - In 36-bit mode: The IWORD0[31:30]=SNREPL field AND - bits [21:20] of the Next Node ptr are used in generating - the next node address (see OCTEON HRM - DFA Chapter for - psuedo-code of DTE next node address generation). - NOTE: When NRPL_ENA=1 and IWORD0[TY]=1(36b mode), - (regardless of IWORD0[NRPLEN]), the Resultant Word1+ - [[47:44],[23:20]] = Next Node's [27:20] bits. This allows - SW to use the RESERVED bits of the final node for SW - caching. Also, if required, SW will use [22:21]=Node - Replication to re-start the same graph walk(if graph - walk prematurely terminated (ie: DATA_GONE). - In 18-bit mode: The IWORD0[31:30]=SNREPL field AND - bit [16:14] of the Next Node ptr are used in generating - the next node address (see OCTEON HRM - DFA Chapter for - psuedo-code of DTE next node address generation). - If (IWORD0[NREPLEN]=1 and DFA_CFG[NRPL_ENA]=1) [ - If next node ptr[16] is set [ - next node ptr[15:14] indicates the next node repl - next node ptr[13:0] indicates the position of the - node relative to the first normal node (i.e. - IWORD3[Msize] must be added to get the final node) - ] - else If next node ptr[16] is not set [ - next node ptr[15:0] indicates the next node id - next node repl = 0 - ] - ] - NOTE: For 18b node replication, MAX node space=64KB(2^16) - is used in detecting terminal node space(see HRM for full - description). - NOTE: The DFA graphs MUST BE built/written to DFA LLM memory - aware of the "per-node" replication. */ - uint64_t nxor_ena : 1; /**< When set, allows the DTE Instruction IWORD0[NXOREN] - to be used to enable/disable the per-node address 'scramble' - of the LLM address to lessen the effects of bank conflicts. - If IWORD0[NXOREN] is also set, then: - In 36-bit mode: The node_Id[7:0] 8-bit value is XORed - against the LLM address addr[9:2]. - In 18-bit mode: The node_id[6:0] 7-bit value is XORed - against the LLM address addr[8:2]. (note: we don't address - scramble outside the mode's node space). - NOTE: The DFA graphs MUST BE built/written to DFA LLM memory - aware of the "per-node" address scramble. - NOTE: The address 'scramble' ocurs for BOTH DFA LLM graph - read/write operations. */ - uint64_t gxor_ena : 1; /**< When set, the DTE Instruction IWORD0[GXOR] - field is used to 'scramble' the LLM address - to lessen the effects of bank conflicts. - In 36-bit mode: The GXOR[7:0] 8-bit value is XORed - against the LLM address addr[9:2]. - In 18-bit mode: GXOR[6:0] 7-bit value is XORed against - the LLM address addr[8:2]. (note: we don't address - scramble outside the mode's node space) - NOTE: The DFA graphs MUST BE built/written to DFA LLM memory - aware of the "per-graph" address scramble. - NOTE: The address 'scramble' ocurs for BOTH DFA LLM graph - read/write operations. */ - uint64_t sarb : 1; /**< DFA Source Arbiter Mode - Selects the arbitration mode used to select DFA - requests issued from either CP2 or the DTE (NCB-CSR - or DFA HW engine). - - 0: Fixed Priority [Highest=CP2, Lowest=DTE] - - 1: Round-Robin - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t sarb : 1; - uint64_t gxor_ena : 1; - uint64_t nxor_ena : 1; - uint64_t nrpl_ena : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_dfa_cfg_s cn38xx; - struct cvmx_dfa_cfg_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t sarb : 1; /**< DFA Source Arbiter Mode - Selects the arbitration mode used to select DFA - requests issued from either CP2 or the DTE (NCB-CSR - or DFA HW engine). - - 0: Fixed Priority [Highest=CP2, Lowest=DTE] - - 1: Round-Robin - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t sarb : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn38xxp2; - struct cvmx_dfa_cfg_s cn58xx; - struct cvmx_dfa_cfg_s cn58xxp1; -} cvmx_dfa_cfg_t; - - -/** - * cvmx_dfa_dbell - * - * DFA_DBELL = DFA Doorbell Register - * - * Description: - * NOTE: To write to the DFA_DBELL register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b00. - * To read the DFA_DBELL register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b00. - * - * NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DBELL register do not take effect. - * NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DBELL register do not take effect. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t dbell : 20; /**< Represents the cumulative total of pending - DFA instructions which SW has previously written - into the DFA Instruction FIFO (DIF) in main memory. - Each DFA instruction contains a fixed size 32B - instruction word which is executed by the DFA HW. - The DBL register can hold up to 1M-1 (2^20-1) - pending DFA instruction requests. - During a read (by SW), the 'most recent' contents - of the DFA_DBELL register are returned at the time - the NCB-INB bus is driven. - NOTE: Since DFA HW updates this register, its - contents are unpredictable in SW. */ -#else - uint64_t dbell : 20; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_dfa_dbell_s cn31xx; - struct cvmx_dfa_dbell_s cn38xx; - struct cvmx_dfa_dbell_s cn38xxp2; - struct cvmx_dfa_dbell_s cn58xx; - struct cvmx_dfa_dbell_s cn58xxp1; -} cvmx_dfa_dbell_t; - - -/** - * cvmx_dfa_ddr2_addr - * - * DFA_DDR2_ADDR = DFA DDR2 fclk-domain Memory Address Config Register - * - * - * Description: The following registers are used to compose the DFA's DDR2 address into ROW/COL/BNK - * etc. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t rdimm_ena : 1; /**< If there is a need to insert a register chip on the - system (the equivalent of a registered DIMM) to - provide better setup for the command and control bits - turn this mode on. - RDIMM_ENA - 0 Registered Mode OFF - 1 Registered Mode ON */ - uint64_t num_rnks : 2; /**< NUM_RNKS is programmed based on how many ranks there - are in the system. This needs to be programmed correctly - regardless of whether we are in RNK_LO mode or not. - NUM_RNKS \# of Ranks - 0 1 - 1 2 - 2 4 - 3 RESERVED */ - uint64_t rnk_lo : 1; /**< When this mode is turned on, consecutive addresses - outside the bank boundary - are programmed to go to different ranks in order to - minimize bank conflicts. It is useful in 4-bank DDR2 - parts based memory to extend out the \#physical banks - available and minimize bank conflicts. - On 8 bank ddr2 parts, this mode is not very useful - because this mode does come with - a penalty which is that every successive reads that - cross rank boundary will need a 1 cycle bubble - inserted to prevent bus turnaround conflicts. - RNK_LO - 0 - OFF - 1 - ON */ - uint64_t num_colrows : 3; /**< NUM_COLROWS is used to set the MSB of the ROW_ADDR - and the LSB of RANK address when not in RNK_LO mode. - Calculate the sum of \#COL and \#ROW and program the - controller appropriately - RANK_LSB \#COLs + \#ROWs - ------------------------------ - - 000: 22 - - 001: 23 - - 010: 24 - - 011: 25 - - 100-111: RESERVED */ - uint64_t num_cols : 2; /**< The Long word address that the controller receives - needs to be converted to Row, Col, Rank and Bank - addresses depending on the memory part's micro arch. - NUM_COL tells the controller how many colum bits - there are and the controller uses this info to map - the LSB of the row address - - 00: num_cols = 9 - - 01: num_cols = 10 - - 10: num_cols = 11 - - 11: RESERVED */ -#else - uint64_t num_cols : 2; - uint64_t num_colrows : 3; - uint64_t rnk_lo : 1; - uint64_t num_rnks : 2; - uint64_t rdimm_ena : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_dfa_ddr2_addr_s cn31xx; -} cvmx_dfa_ddr2_addr_t; - - -/** - * cvmx_dfa_ddr2_bus - * - * DFA_DDR2_BUS = DFA DDR Bus Activity Counter - * - * - * Description: This counter counts \# cycles that the memory bus is doing a read/write/command - * Useful to benchmark the bus utilization as a ratio of - * \#Cycles of Data Transfer/\#Cycles since init or - * \#Cycles of Data Transfer/\#Cycles that memory controller is active - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_bus_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_47_63 : 17; - uint64_t bus_cnt : 47; /**< Counter counts the \# cycles of Data transfer */ -#else - uint64_t bus_cnt : 47; - uint64_t reserved_47_63 : 17; -#endif - } s; - struct cvmx_dfa_ddr2_bus_s cn31xx; -} cvmx_dfa_ddr2_bus_t; - - -/** - * cvmx_dfa_ddr2_cfg - * - * DFA_DDR2_CFG = DFA DDR2 fclk-domain Memory Configuration \#0 Register - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_41_63 : 23; - uint64_t trfc : 5; /**< Establishes tRFC(from DDR2 data sheets) in \# of - 4 fclk intervals. - General Equation: - TRFC(csr) = ROUNDUP[tRFC(data-sheet-ns)/(4 * fclk(ns))] - Example: - tRFC(data-sheet-ns) = 127.5ns - Operational Frequency: 533MHz DDR rate - [fclk=266MHz(3.75ns)] - Then: - TRFC(csr) = ROUNDUP[127.5ns/(4 * 3.75ns)] - = 9 */ - uint64_t mrs_pgm : 1; /**< When clear, the HW initialization sequence fixes - some of the *MRS register bit definitions. - EMRS: - A[14:13] = 0 RESERVED - A[12] = 0 Output Buffers Enabled (FIXED) - A[11] = 0 RDQS Disabled (FIXED) - A[10] = 0 DQSn Enabled (FIXED) - A[9:7] = 0 OCD Not supported (FIXED) - A[6] = 0 RTT Disabled (FIXED) - A[5:3]=DFA_DDR2_TMG[ADDLAT] (if DFA_DDR2_TMG[POCAS]=1) - Additive LATENCY (Programmable) - A[2]=0 RTT Disabled (FIXED) - A[1]=DFA_DDR2_TMG[DIC] (Programmable) - A[0] = 0 DLL Enabled (FIXED) - MRS: - A[14:13] = 0 RESERVED - A[12] = 0 Fast Active Power Down Mode (FIXED) - A[11:9] = DFA_DDR2_TMG[TWR](Programmable) - A[8] = 1 DLL Reset (FIXED) - A[7] = 0 Test Mode (FIXED) - A[6:4]=DFA_DDR2_TMG[CASLAT] CAS LATENCY (Programmable) - A[3] = 0 Burst Type(must be 0:Sequential) (FIXED) - A[2:0] = 2 Burst Length=4 (must be 0:Sequential) (FIXED) - When set, the HW initialization sequence sources - the DFA_DDR2_MRS, DFA_DDR2_EMRS registers which are - driven onto the DFA_A[] pins. (this allows the MRS/EMRS - fields to be completely programmable - however care - must be taken by software). - This mode is useful for customers who wish to: - 1) override the FIXED definitions(above), or - 2) Use a "clamshell mode" of operation where the - address bits(per rank) are swizzled on the - board to reduce stub lengths for optimal - frequency operation. - Use this in combination with DFA_DDR2_CFG[RNK_MSK] - to specify the INIT sequence for each of the 4 - supported ranks. */ - uint64_t fpip : 3; /**< Early Fill Programmable Pipe [\#fclks] - This field dictates the \#fclks prior to the arrival - of fill data(in fclk domain), to start the 'early' fill - command pipe (in the eclk domain) so as to minimize the - overall fill latency. - The programmable early fill command signal is synchronized - into the eclk domain, where it is used to pull data out of - asynchronous RAM as fast as possible. - NOTE: A value of FPIP=0 is the 'safest' setting and will - result in the early fill command pipe starting in the - same cycle as the fill data. - General Equation: (for FPIP) - FPIP <= MIN[6, (ROUND_DOWN[6/EF_RATIO] + 1)] - where: - EF_RATIO = ECLK/FCLK Ratio [eclk(MHz)/fclk(MHz)] - Example: FCLK=200MHz/ECLK=600MHz - FPIP = MIN[6, (ROUND_DOWN[6/(600/200))] + 1)] - FPIP <= 3 */ - uint64_t reserved_29_31 : 3; - uint64_t ref_int : 13; /**< Refresh Interval (represented in \#of fclk - increments). - Each refresh interval will generate a single - auto-refresh command sequence which implicitly targets - all banks within the device: - Example: For fclk=200MHz(5ns)/400MHz(DDR): - trefint(ns) = [tREFI(max)=3.9us = 3900ns [datasheet] - REF_INT = ROUND_DOWN[(trefint/fclk)] - = ROUND_DOWN[(3900ns/5ns)] - = 780 fclks (0x30c) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t reserved_14_15 : 2; - uint64_t tskw : 2; /**< Board Skew (represented in \#fclks) - Represents additional board skew of DQ/DQS. - - 00: board-skew = 0 fclk - - 01: board-skew = 1 fclk - - 10: board-skew = 2 fclk - - 11: board-skew = 3 fclk - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t rnk_msk : 4; /**< Controls the CS_N[3:0] during a) a HW Initialization - sequence (triggered by DFA_DDR2_CFG[INIT]) or - b) during a normal refresh sequence. If - the RNK_MSK[x]=1, the corresponding CS_N[x] is driven. - NOTE: This is required for DRAM used in a - clamshell configuration, since the address lines - carry Mode Register write data that is unique - per rank(or clam). In a clamshell configuration, - the N3K DFA_A[x] pin may be tied into Clam#0's A[x] - and also into Clam#1's 'mirrored' address bit A[y] - (eg: Clam0 sees A[5] and Clam1 sees A[15]). - To support clamshell designs, SW must initiate - separate HW init sequences each unique rank address - mapping. Before each HW init sequence is triggered, - SW must preload the DFA_DDR2_MRS/EMRS registers with - the data that will be driven onto the A[14:0] wires - during the EMRS/MRS mode register write(s). - NOTE: After the final HW initialization sequence has - been triggered, SW must wait 64K eclks before writing - the RNK_MSK[3:0] field = 3'b1111 (so that CS_N[3:0] - is driven during refresh sequences in normal operation. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t silo_qc : 1; /**< Enables Quarter Cycle move of the Rd sampling window */ - uint64_t silo_hc : 1; /**< A combination of SILO_HC, SILO_QC and TSKW - specifies the positioning of the sampling strobe - when receiving read data back from DDR2. This is - done to offset any board trace induced delay on - the DQ and DQS which inherently makes these - asynchronous with respect to the internal clk of - controller. TSKW moves this sampling window by - integer cycles. SILO_QC and HC move this quarter - and half a cycle respectively. */ - uint64_t sil_lat : 2; /**< Silo Latency (\#fclks): On reads, determines how many - additional fclks to wait (on top of CASLAT+1) before - pulling data out of the padring silos used for time - domain boundary crossing. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t bprch : 1; /**< Tristate Enable (back porch) (\#fclks) - On reads, allows user to control the shape of the - tristate disable back porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t fprch : 1; /**< Tristate Enable (front porch) (\#fclks) - On reads, allows user to control the shape of the - tristate disable front porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t init : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for the LLM Memory Port is - initiated. - NOTE: To initialize memory, SW must: - 1) Enable memory port - a) PRTENA=1 - 2) Wait 200us (to ensure a stable clock - to the DDR2) - as per DDR2 spec. - 3) Write a '1' to the INIT which - will initiate a hardware initialization - sequence. - NOTE: After writing a '1', SW must wait 64K eclk - cycles to ensure the HW init sequence has completed - before writing to ANY of the DFA_DDR2* registers. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t prtena : 1; /**< Enable DFA Memory - When enabled, this bit lets N3K be the default - driver for DFA-LLM memory port. */ -#else - uint64_t prtena : 1; - uint64_t init : 1; - uint64_t fprch : 1; - uint64_t bprch : 1; - uint64_t sil_lat : 2; - uint64_t silo_hc : 1; - uint64_t silo_qc : 1; - uint64_t rnk_msk : 4; - uint64_t tskw : 2; - uint64_t reserved_14_15 : 2; - uint64_t ref_int : 13; - uint64_t reserved_29_31 : 3; - uint64_t fpip : 3; - uint64_t mrs_pgm : 1; - uint64_t trfc : 5; - uint64_t reserved_41_63 : 23; -#endif - } s; - struct cvmx_dfa_ddr2_cfg_s cn31xx; -} cvmx_dfa_ddr2_cfg_t; - - -/** - * cvmx_dfa_ddr2_comp - * - * DFA_DDR2_COMP = DFA DDR2 I/O PVT Compensation Configuration - * - * - * Description: The following are registers to program the DDR2 PLL and DLL - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_comp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dfa__pctl : 4; /**< DFA DDR pctl from compensation circuit - Internal DBG only */ - uint64_t dfa__nctl : 4; /**< DFA DDR nctl from compensation circuit - Internal DBG only */ - uint64_t reserved_9_55 : 47; - uint64_t pctl_csr : 4; /**< Compensation control bits */ - uint64_t nctl_csr : 4; /**< Compensation control bits */ - uint64_t comp_bypass : 1; /**< Compensation Bypass */ -#else - uint64_t comp_bypass : 1; - uint64_t nctl_csr : 4; - uint64_t pctl_csr : 4; - uint64_t reserved_9_55 : 47; - uint64_t dfa__nctl : 4; - uint64_t dfa__pctl : 4; -#endif - } s; - struct cvmx_dfa_ddr2_comp_s cn31xx; -} cvmx_dfa_ddr2_comp_t; - - -/** - * cvmx_dfa_ddr2_emrs - * - * DFA_DDR2_EMRS = DDR2 EMRS Register(s) EMRS1[14:0], EMRS1_OCD[14:0] - * Description: This register contains the data driven onto the Address[14:0] lines during DDR INIT - * To support Clamshelling (where N3K DFA_A[] pins are not 1:1 mapped to each clam(or rank), a HW init - * sequence is allowed on a "per-rank" basis. Care must be taken in the values programmed into these - * registers during the HW initialization sequence (see N3K specific restrictions in notes below). - * DFA_DDR2_CFG[MRS_PGM] must be 1 to support this feature. - * - * Notes: - * For DDR-II please consult your device's data sheet for further details: - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_emrs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t emrs1_ocd : 15; /**< Memory Address[14:0] during "EMRS1 (OCD Calibration)" - step \#12a "EMRS OCD Default Command" A[9:7]=111 - of DDR2 HW initialization sequence. - (See JEDEC DDR2 specification (JESD79-2): - Power Up and initialization sequence). - A[14:13] = 0, RESERVED - A[12] = 0, Output Buffers Enabled - A[11] = 0, RDQS Disabled (we do not support RDQS) - A[10] = 0, DQSn Enabled - A[9:7] = 7, OCD Calibration Mode Default - A[6] = 0, ODT Disabled - A[5:3]=DFA_DDR2_TMG[ADDLAT] Additive LATENCY (Default 0) - A[2]=0 Termination Res RTT (ODT off Default) - [A6,A2] = 0 -> ODT Disabled - 1 -> 75 ohm; 2 -> 150 ohm; 3 - Reserved - A[1]=0 Normal Output Driver Imp mode - (1 - weak ie., 60% of normal drive strength) - A[0] = 0 DLL Enabled */ - uint64_t reserved_15_15 : 1; - uint64_t emrs1 : 15; /**< Memory Address[14:0] during: - a) Step \#7 "EMRS1 to enable DLL (A[0]=0)" - b) Step \#12b "EMRS OCD Calibration Mode Exit" - steps of DDR2 HW initialization sequence. - (See JEDEC DDR2 specification (JESD79-2): Power Up and - initialization sequence). - A[14:13] = 0, RESERVED - A[12] = 0, Output Buffers Enabled - A[11] = 0, RDQS Disabled (we do not support RDQS) - A[10] = 0, DQSn Enabled - A[9:7] = 0, OCD Calibration Mode exit/maintain - A[6] = 0, ODT Disabled - A[5:3]=DFA_DDR2_TMG[ADDLAT] Additive LATENCY (Default 0) - A[2]=0 Termination Res RTT (ODT off Default) - [A6,A2] = 0 -> ODT Disabled - 1 -> 75 ohm; 2 -> 150 ohm; 3 - Reserved - A[1]=0 Normal Output Driver Imp mode - (1 - weak ie., 60% of normal drive strength) - A[0] = 0 DLL Enabled */ -#else - uint64_t emrs1 : 15; - uint64_t reserved_15_15 : 1; - uint64_t emrs1_ocd : 15; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_dfa_ddr2_emrs_s cn31xx; -} cvmx_dfa_ddr2_emrs_t; - - -/** - * cvmx_dfa_ddr2_fcnt - * - * DFA_DDR2_FCNT = DFA FCLK Counter - * - * - * Description: This FCLK cycle counter gets going after memory has been initialized - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_fcnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_47_63 : 17; - uint64_t fcyc_cnt : 47; /**< Counter counts FCLK cycles or \# cycles that the memory - controller has requests queued up depending on FCNT_MODE - If FCNT_MODE = 0, this counter counts the \# FCLK cycles - If FCNT_MODE = 1, this counter counts the \# cycles the - controller is active with memory requests. */ -#else - uint64_t fcyc_cnt : 47; - uint64_t reserved_47_63 : 17; -#endif - } s; - struct cvmx_dfa_ddr2_fcnt_s cn31xx; -} cvmx_dfa_ddr2_fcnt_t; - - -/** - * cvmx_dfa_ddr2_mrs - * - * DFA_DDR2_MRS = DDR2 MRS Register(s) MRS_DLL[14:0], MRS[14:0] - * Description: This register contains the data driven onto the Address[14:0] lines during DDR INIT - * To support Clamshelling (where N3K DFA_A[] pins are not 1:1 mapped to each clam(or rank), a HW init - * sequence is allowed on a "per-rank" basis. Care must be taken in the values programmed into these - * registers during the HW initialization sequence (see N3K specific restrictions in notes below). - * DFA_DDR2_CFG[MRS_PGM] must be 1 to support this feature. - * - * Notes: - * For DDR-II please consult your device's data sheet for further details: - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_mrs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t mrs : 15; /**< Memory Address[14:0] during "MRS without resetting - DLL A[8]=0" step of HW initialization sequence. - (See JEDEC DDR2 specification (JESD79-2): Power Up - and initialization sequence - Step \#11). - A[14:13] = 0, RESERVED - A[12] = 0, Fast Active Power Down Mode - A[11:9] = DFA_DDR2_TMG[TWR] - A[8] = 0, for DLL Reset - A[7] =0 Test Mode (must be 0 for normal operation) - A[6:4]=DFA_DDR2_TMG[CASLAT] CAS LATENCY (default 4) - A[3]=0 Burst Type(must be 0:Sequential) - A[2:0]=2 Burst Length=4(default) */ - uint64_t reserved_15_15 : 1; - uint64_t mrs_dll : 15; /**< Memory Address[14:0] during "MRS for DLL_RESET A[8]=1" - step of HW initialization sequence. - (See JEDEC DDR2 specification (JESD79-2): Power Up - and initialization sequence - Step \#8). - A[14:13] = 0, RESERVED - A[12] = 0, Fast Active Power Down Mode - A[11:9] = DFA_DDR2_TMG[TWR] - A[8] = 1, for DLL Reset - A[7] = 0 Test Mode (must be 0 for normal operation) - A[6:4]=DFA_DDR2_TMG[CASLAT] CAS LATENCY (default 4) - A[3] = 0 Burst Type(must be 0:Sequential) - A[2:0] = 2 Burst Length=4(default) */ -#else - uint64_t mrs_dll : 15; - uint64_t reserved_15_15 : 1; - uint64_t mrs : 15; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_dfa_ddr2_mrs_s cn31xx; -} cvmx_dfa_ddr2_mrs_t; - - -/** - * cvmx_dfa_ddr2_opt - * - * DFA_DDR2_OPT = DFA DDR2 Optimization Registers - * - * - * Description: The following are registers to tweak certain parameters to boost performance - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_opt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t max_read_batch : 5; /**< Maximum number of consecutive read to service before - allowing write to interrupt. */ - uint64_t max_write_batch : 5; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ -#else - uint64_t max_write_batch : 5; - uint64_t max_read_batch : 5; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_dfa_ddr2_opt_s cn31xx; -} cvmx_dfa_ddr2_opt_t; - - -/** - * cvmx_dfa_ddr2_pll - * - * DFA_DDR2_PLL = DFA DDR2 PLL and DLL Configuration - * - * - * Description: The following are registers to program the DDR2 PLL and DLL - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_pll_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pll_setting : 17; /**< Internal Debug Use Only */ - uint64_t reserved_32_46 : 15; - uint64_t setting90 : 5; /**< Contains the setting of DDR DLL; Internal DBG only */ - uint64_t reserved_21_26 : 6; - uint64_t dll_setting : 5; /**< Contains the open loop setting value for the DDR90 delay - line. */ - uint64_t dll_byp : 1; /**< DLL Bypass. When set, the DDR90 DLL is bypassed and - the DLL behaves in Open Loop giving a fixed delay - set by DLL_SETTING */ - uint64_t qdll_ena : 1; /**< DDR Quad DLL Enable: A 0->1 transition on this bit after - erst deassertion will reset the DDR 90 DLL. Allow - 200 micro seconds for Lock before DDR Init. */ - uint64_t bw_ctl : 4; /**< Internal Use Only - for Debug */ - uint64_t bw_upd : 1; /**< Internal Use Only - for Debug */ - uint64_t pll_div2 : 1; /**< PLL Output is further divided by 2. Useful for slow - fclk frequencies where the PLL may be out of range. */ - uint64_t reserved_7_7 : 1; - uint64_t pll_ratio : 5; /**< Bits <6:2> sets the clk multiplication ratio - If the fclk frequency desired is less than 260MHz - (lower end saturation point of the pll), write 2x - the ratio desired in this register and set PLL_DIV2 */ - uint64_t pll_bypass : 1; /**< PLL Bypass. Uses the ref_clk without multiplication. */ - uint64_t pll_init : 1; /**< Need a 0 to 1 pulse on this CSR to get the DFA - Clk Generator Started. Write this register before - starting anything. Allow 200 uS for PLL Lock before - doing anything. */ -#else - uint64_t pll_init : 1; - uint64_t pll_bypass : 1; - uint64_t pll_ratio : 5; - uint64_t reserved_7_7 : 1; - uint64_t pll_div2 : 1; - uint64_t bw_upd : 1; - uint64_t bw_ctl : 4; - uint64_t qdll_ena : 1; - uint64_t dll_byp : 1; - uint64_t dll_setting : 5; - uint64_t reserved_21_26 : 6; - uint64_t setting90 : 5; - uint64_t reserved_32_46 : 15; - uint64_t pll_setting : 17; -#endif - } s; - struct cvmx_dfa_ddr2_pll_s cn31xx; -} cvmx_dfa_ddr2_pll_t; - - -/** - * cvmx_dfa_ddr2_tmg - * - * DFA_DDR2_TMG = DFA DDR2 Memory Timing Config Register - * - * - * Description: The following are registers to program the DDR2 memory timing parameters. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ddr2_tmg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_47_63 : 17; - uint64_t fcnt_mode : 1; /**< If FCNT_MODE = 0, this counter counts the \# FCLK cycles - If FCNT_MODE = 1, this counter counts the \# cycles the - controller is active with memory requests. */ - uint64_t cnt_clr : 1; /**< Clears the FCLK Cyc & Bus Util counter */ - uint64_t cavmipo : 1; /**< RESERVED */ - uint64_t ctr_rst : 1; /**< Reset oneshot pulse for refresh counter & Perf counters - SW should first write this field to a one to clear - & then write to a zero for normal operation */ - uint64_t odt_rtt : 2; /**< DDR2 Termination Resistor Setting - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination */ - uint64_t dqsn_ena : 1; /**< For DDR-II Mode, DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ - uint64_t dic : 1; /**< Drive Strength Control: - For DDR-I/II Mode, DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. (see DDR-I data sheet EMRS - description) - 0 = Normal - 1 = Reduced */ - uint64_t r2r_slot : 1; /**< A 1 on this register will force the controller to - slot a bubble between every reads */ - uint64_t tfaw : 5; /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1 - Four Access Window time. Relevant only in - 8-bank parts. - TFAW = 5'b0 for DDR2-4bank - TFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1 in DDR2-8bank */ - uint64_t twtr : 4; /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)] - Last Wr Data to Rd Command time. - (Represented in fclk cycles) - TYP=15ns - - 0000: RESERVED - - 0001: 1 - - ... - - 0111: 7 - - 1000-1111: RESERVED */ - uint64_t twr : 3; /**< DDR Write Recovery time (tWR). Last Wr Brst to Prech - This is not a direct encoding of the value. Its - programmed as below per DDR2 spec. The decimal number - on the right is RNDUP(tWR(ns) / clkFreq) - TYP=15ns - - 000: RESERVED - - 001: 2 - - 010: 3 - - 011: 4 - - 100: 5 - - 101: 6 - - 110-111: RESERVED */ - uint64_t trp : 4; /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)] - (Represented in fclk cycles) - TYP=15ns - - 0000: RESERVED - - 0001: 1 - - ... - - 0111: 7 - - 1000-1111: RESERVED - When using parts with 8 banks (DFA_CFG->MAX_BNK - is 1), load tRP cycles + 1 into this register. */ - uint64_t tras : 5; /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)] - (Represented in fclk cycles) - TYP=45ns - - 00000-0001: RESERVED - - 00010: 2 - - ... - - 10100: 20 - - 10101-11111: RESERVED */ - uint64_t trrd : 3; /**< tRRD cycles: ACT-ACT timing parameter for different - banks. (Represented in fclk cycles) - For DDR2, TYP=7.5ns - - 000: RESERVED - - 001: 1 tCYC - - 010: 2 tCYC - - 011: 3 tCYC - - 100: 4 tCYC - - 101: 5 tCYC - - 110-111: RESERVED */ - uint64_t trcd : 4; /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)] - (Represented in fclk cycles) - TYP=15ns - - 0000: RESERVED - - 0001: 2 (2 is the smallest value allowed) - - 0002: 2 - - ... - - 0111: 7 - - 1110-1111: RESERVED */ - uint64_t addlat : 3; /**< When in Posted CAS mode ADDLAT needs to be programmed - to tRCD-1 - ADDLAT \#additional latency cycles - 000 0 - 001 1 (tRCD = 2 fclk's) - 010 2 (tRCD = 3 fclk's) - 011 3 (tRCD = 4 fclk's) - 100 4 (tRCD = 5 fclk's) - 101 5 (tRCD = 6 fclk's) - 110 6 (tRCD = 7 fclk's) - 111 7 (tRCD = 8 fclk's) */ - uint64_t pocas : 1; /**< Posted CAS mode. When 1, we use DDR2's Posted CAS - feature. When using this mode, ADDLAT needs to be - programmed as well */ - uint64_t caslat : 3; /**< CAS Latency in \# fclk Cycles - CASLAT \# CAS latency cycles - 000 - 010 RESERVED - 011 3 - 100 4 - 101 5 - 110 6 - 111 7 */ - uint64_t tmrd : 2; /**< tMRD Cycles - (Represented in fclk tCYC) - For DDR2, its TYP 2*tCYC) - - 000: RESERVED - - 001: 1 - - 010: 2 - - 011: 3 */ - uint64_t ddr2t : 1; /**< When 2T mode is turned on, command signals are - setup a cycle ahead of when the CS is enabled - and kept for a total of 2 cycles. This mode is - enabled in higher speeds when there is difficulty - meeting setup. Performance could - be negatively affected in 2T mode */ -#else - uint64_t ddr2t : 1; - uint64_t tmrd : 2; - uint64_t caslat : 3; - uint64_t pocas : 1; - uint64_t addlat : 3; - uint64_t trcd : 4; - uint64_t trrd : 3; - uint64_t tras : 5; - uint64_t trp : 4; - uint64_t twr : 3; - uint64_t twtr : 4; - uint64_t tfaw : 5; - uint64_t r2r_slot : 1; - uint64_t dic : 1; - uint64_t dqsn_ena : 1; - uint64_t odt_rtt : 2; - uint64_t ctr_rst : 1; - uint64_t cavmipo : 1; - uint64_t cnt_clr : 1; - uint64_t fcnt_mode : 1; - uint64_t reserved_47_63 : 17; -#endif - } s; - struct cvmx_dfa_ddr2_tmg_s cn31xx; -} cvmx_dfa_ddr2_tmg_t; - - -/** - * cvmx_dfa_difctl - * - * DFA_DIFCTL = DFA Instruction FIFO (DIF) Control Register - * - * Description: - * NOTE: To write to the DFA_DIFCTL register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b11. - * To read the DFA_DIFCTL register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b11. - * - * NOTE: This register is intended to ONLY be written once (at power-up). Any future writes could - * cause the DFA and FPA HW to become unpredictable. - * - * NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DIFCTL register do not take effect. - * NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DIFCTL register do not take effect. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_difctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t dwbcnt : 8; /**< Represents the \# of cache lines in the instruction - buffer that may be dirty and should not be - written-back to memory when the instruction - chunk is returned to the Free Page list. - NOTE: Typically SW will want to mark all DFA - Instruction memory returned to the Free Page list - as DWB (Don't WriteBack), therefore SW should - seed this register as: - DFA_DIFCTL[DWBCNT] = (DFA_DIFCTL[SIZE] + 4)/4 */ - uint64_t pool : 3; /**< Represents the 3bit buffer pool-id used by DFA HW - when the DFA instruction chunk is recycled back - to the Free Page List maintained by the FPA HW - (once the DFA instruction has been issued). */ - uint64_t size : 9; /**< Represents the \# of 32B instructions contained - within each DFA instruction chunk. At Power-on, - SW will seed the SIZE register with a fixed - chunk-size. (Must be at least 3) - DFA HW uses this field to determine the size - of each DFA instruction chunk, in order to: - a) determine when to read the next DFA - instruction chunk pointer which is - written by SW at the end of the current - DFA instruction chunk (see DFA description - of next chunk buffer Ptr for format). - b) determine when a DFA instruction chunk - can be returned to the Free Page List - maintained by the FPA HW. */ -#else - uint64_t size : 9; - uint64_t pool : 3; - uint64_t dwbcnt : 8; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_dfa_difctl_s cn31xx; - struct cvmx_dfa_difctl_s cn38xx; - struct cvmx_dfa_difctl_s cn38xxp2; - struct cvmx_dfa_difctl_s cn58xx; - struct cvmx_dfa_difctl_s cn58xxp1; -} cvmx_dfa_difctl_t; - - -/** - * cvmx_dfa_difrdptr - * - * DFA_DIFRDPTR = DFA Instruction FIFO (DIF) RDPTR Register - * - * Description: - * NOTE: To write to the DFA_DIFRDPTR register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b01. - * To read the DFA_DIFRDPTR register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b01. - * - * NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DIFRDPTR register do not take effect. - * NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DIFRDPTR register do not take effect. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_difrdptr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t rdptr : 31; /**< Represents the 32B-aligned address of the current - instruction in the DFA Instruction FIFO in main - memory. The RDPTR must be seeded by software at - boot time, and is then maintained thereafter - by DFA HW. - During the seed write (by SW), RDPTR[6:5]=0, - since DFA instruction chunks must be 128B aligned. - During a read (by SW), the 'most recent' contents - of the RDPTR register are returned at the time - the NCB-INB bus is driven. - NOTE: Since DFA HW updates this register, its - contents are unpredictable in SW (unless - its guaranteed that no new DoorBell register - writes have occurred and the DoorBell register is - read as zero). */ - uint64_t reserved_0_4 : 5; -#else - uint64_t reserved_0_4 : 5; - uint64_t rdptr : 31; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_dfa_difrdptr_s cn31xx; - struct cvmx_dfa_difrdptr_s cn38xx; - struct cvmx_dfa_difrdptr_s cn38xxp2; - struct cvmx_dfa_difrdptr_s cn58xx; - struct cvmx_dfa_difrdptr_s cn58xxp1; -} cvmx_dfa_difrdptr_t; - - -/** - * cvmx_dfa_eclkcfg - * - * Specify the RSL base addresses for the block - * - * DFA_ECLKCFG = DFA eclk-domain Configuration Registers - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_eclkcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t sbdnum : 3; /**< SBD Debug Entry# - For internal use only. (DFA Scoreboard debug) - Selects which one of 8 DFA Scoreboard entries is - latched into the DFA_SBD_DBG[0-3] registers. */ - uint64_t reserved_15_15 : 1; - uint64_t sbdlck : 1; /**< DFA Scoreboard LOCK Strobe - For internal use only. (DFA Scoreboard debug) - When written with a '1', the DFA Scoreboard Debug - registers (DFA_SBD_DBG[0-3]) are all locked down. - This allows SW to lock down the contents of the entire - SBD for a single instant in time. All subsequent reads - of the DFA scoreboard registers will return the data - from that instant in time. */ - uint64_t dcmode : 1; /**< DRF-CRQ/DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t dtmode : 1; /**< DRF-DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t pmode : 1; /**< NCB-NRP Arbiter Mode - (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t qmode : 1; /**< NCB-NRQ Arbiter Mode - (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t imode : 1; /**< NCB-Inbound Arbiter - (0=FP [LP=NRQ,HP=NRP], 1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t sarb : 1; /**< DFA Source Arbiter Mode - Selects the arbitration mode used to select DFA requests - issued from either CP2 or the DTE (NCB-CSR or DFA HW engine). - - 0: Fixed Priority [Highest=CP2, Lowest=DTE] - - 1: Round-Robin - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t reserved_3_7 : 5; - uint64_t dteclkdis : 1; /**< DFA DTE Clock Disable - When SET, the DFA clocks for DTE(thread engine) - operation are disabled. - NOTE: When SET, SW MUST NEVER issue ANY operations to - the DFA via the NCB Bus. All DFA Operations must be - issued solely through the CP2 interface. */ - uint64_t maxbnk : 1; /**< Maximum Banks per-device (used by the address mapper - when extracting address bits for the memory bank#. - - 0: 4 banks/device - - 1: 8 banks/device */ - uint64_t dfa_frstn : 1; /**< Hold this 0 until the DFA DDR PLL and DLL lock - and then write a 1. A 1 on this register deasserts - the internal frst_n. Refer to DFA_DDR2_PLL registers for more - startup information. - Startup sequence if DFA interface needs to be ON: - After valid power up, - Write DFA_DDR2_PLL-> PLL_RATIO & PLL_DIV2 & PLL_BYPASS - to the appropriate values - Wait a few cycles - Write a 1 DFA_DDR2_PLL -> PLL_INIT - Wait 100 microseconds - Write a 1 to DFA_DDR2_PLL -> QDLL_ENA - Wait 10 microseconds - Write a 1 to this register DFA_FRSTN to pull DFA out of - reset - Now the DFA block is ready to be initialized (follow the - DDR init sequence). */ -#else - uint64_t dfa_frstn : 1; - uint64_t maxbnk : 1; - uint64_t dteclkdis : 1; - uint64_t reserved_3_7 : 5; - uint64_t sarb : 1; - uint64_t imode : 1; - uint64_t qmode : 1; - uint64_t pmode : 1; - uint64_t dtmode : 1; - uint64_t dcmode : 1; - uint64_t sbdlck : 1; - uint64_t reserved_15_15 : 1; - uint64_t sbdnum : 3; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_dfa_eclkcfg_s cn31xx; -} cvmx_dfa_eclkcfg_t; - - -/** - * cvmx_dfa_err - * - * DFA_ERR = DFA ERROR Register - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_33_63 : 31; - uint64_t dblina : 1; /**< Doorbell Overflow Interrupt Enable bit. - When set, doorbell overflow conditions are reported. */ - uint64_t dblovf : 1; /**< Doorbell Overflow detected - Status bit - When set, the 20b accumulated doorbell register - had overflowed (SW wrote too many doorbell requests). - If the DBLINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - NOTE: Detection of a Doorbell Register overflow - is a catastrophic error which may leave the DFA - HW in an unrecoverable state. */ - uint64_t cp2pina : 1; /**< CP2 LW Mode Parity Error Interrupt Enable bit. - When set, all PP-generated LW Mode read - transactions which encounter a parity error (across - the 36b of data) are reported. */ - uint64_t cp2perr : 1; /**< PP-CP2 Parity Error Detected - Status bit - When set, a parity error had been detected for a - PP-generated LW Mode read transaction. - If the CP2PINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - See also: DFA_MEMFADR CSR which contains more data - about the memory address/control to help isolate - the failure. */ - uint64_t cp2parena : 1; /**< CP2 LW Mode Parity Error Enable - When set, all PP-generated LW Mode read - transactions which encounter a parity error (across - the 36b of data) are reported. - NOTE: This signal must only be written to a different - value when there are no PP-CP2 transactions - (preferrably during power-on software initialization). */ - uint64_t dtepina : 1; /**< DTE Parity Error Interrupt Enable bit - (for 18b SIMPLE mode ONLY). - When set, all DTE-generated 18b SIMPLE Mode read - transactions which encounter a parity error (across - the 17b of data) are reported. */ - uint64_t dteperr : 1; /**< DTE Parity Error Detected (for 18b SIMPLE mode ONLY) - When set, all DTE-generated 18b SIMPLE Mode read - transactions which encounter a parity error (across - the 17b of data) are reported. */ - uint64_t dteparena : 1; /**< DTE Parity Error Enable (for 18b SIMPLE mode ONLY) - When set, all DTE-generated 18b SIMPLE Mode read - transactions which encounter a parity error (across - the 17b of data) are reported. - NOTE: This signal must only be written to a different - value when there are no DFA thread engines active - (preferrably during power-on). */ - uint64_t dtesyn : 7; /**< DTE 29b ECC Failing 6bit Syndrome - When DTESBE or DTEDBE are set, this field contains - the failing 7b ECC syndrome. */ - uint64_t dtedbina : 1; /**< DTE 29b Double Bit Error Interrupt Enable bit - When set, an interrupt is posted for any DTE-generated - 36b SIMPLE Mode read which encounters a double bit - error. */ - uint64_t dtesbina : 1; /**< DTE 29b Single Bit Error Interrupt Enable bit - When set, an interrupt is posted for any DTE-generated - 36b SIMPLE Mode read which encounters a single bit - error (which is also corrected). */ - uint64_t dtedbe : 1; /**< DTE 29b Double Bit Error Detected - Status bit - When set, a double bit error had been detected - for a DTE-generated 36b SIMPLE Mode read transaction. - The DTESYN contains the failing syndrome. - If the DTEDBINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - See also: DFA_MEMFADR CSR which contains more data - about the memory address/control to help isolate - the failure. - NOTE: DTE-generated 18b SIMPLE Mode Read transactions - do not participate in ECC check/correct). */ - uint64_t dtesbe : 1; /**< DTE 29b Single Bit Error Corrected - Status bit - When set, a single bit error had been detected and - corrected for a DTE-generated 36b SIMPLE Mode read - transaction. - If the DTEDBE=0, then the DTESYN contains the - failing syndrome (used during correction). - NOTE: DTE-generated 18b SIMPLE Mode Read - transactions do not participate in ECC check/correct). - If the DTESBINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - See also: DFA_MEMFADR CSR which contains more data - about the memory address/control to help isolate - the failure. */ - uint64_t dteeccena : 1; /**< DTE 29b ECC Enable (for 36b SIMPLE mode ONLY) - When set, 29b ECC is enabled on all DTE-generated - 36b SIMPLE Mode read transactions. - NOTE: This signal must only be written to a different - value when there are no DFA thread engines active - (preferrably during power-on software initialization). */ - uint64_t cp2syn : 8; /**< PP-CP2 QW ECC Failing 8bit Syndrome - When CP2SBE or CP2DBE are set, this field contains - the failing ECC 8b syndrome. - Refer to CP2ECCENA. */ - uint64_t cp2dbina : 1; /**< PP-CP2 Double Bit Error Interrupt Enable bit - When set, an interrupt is posted for any PP-generated - QW Mode read which encounters a double bit error. - Refer to CP2DBE. */ - uint64_t cp2sbina : 1; /**< PP-CP2 Single Bit Error Interrupt Enable bit - When set, an interrupt is posted for any PP-generated - QW Mode read which encounters a single bit error - (which is also corrected). - Refer to CP2SBE. */ - uint64_t cp2dbe : 1; /**< PP-CP2 Double Bit Error Detected - Status bit - When set, a double bit error had been detected - for a PP-generated QW Mode read transaction. - The CP2SYN contains the failing syndrome. - NOTE: PP-generated LW Mode Read transactions - do not participate in ECC check/correct). - Refer to CP2ECCENA. - If the CP2DBINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - See also: DFA_MEMFADR CSR which contains more data - about the memory address/control to help isolate - the failure. */ - uint64_t cp2sbe : 1; /**< PP-CP2 Single Bit Error Corrected - Status bit - When set, a single bit error had been detected and - corrected for a PP-generated QW Mode read - transaction. - If the CP2DBE=0, then the CP2SYN contains the - failing syndrome (used during correction). - Refer to CP2ECCENA. - If the CP2SBINA had previously been enabled(set), - an interrupt will be posted. Software can clear - the interrupt by writing a 1 to this register bit. - See also: DFA_MEMFADR CSR which contains more data - about the memory address/control to help isolate - the failure. - NOTE: PP-generated LW Mode Read transactions - do not participate in ECC check/correct). */ - uint64_t cp2eccena : 1; /**< PP-CP2 QW ECC Enable (for QW Mode transactions) - When set, 8bit QW ECC is enabled on all PP-generated - QW Mode read transactions, CP2SBE and - CP2DBE may be set, and CP2SYN may be filled. - NOTE: This signal must only be written to a different - value when there are no PP-CP2 transactions - (preferrably during power-on software initialization). - NOTE: QW refers to a 64-bit LLM Load/Store (intiated - by a processor core). LW refers to a 36-bit load/store. */ -#else - uint64_t cp2eccena : 1; - uint64_t cp2sbe : 1; - uint64_t cp2dbe : 1; - uint64_t cp2sbina : 1; - uint64_t cp2dbina : 1; - uint64_t cp2syn : 8; - uint64_t dteeccena : 1; - uint64_t dtesbe : 1; - uint64_t dtedbe : 1; - uint64_t dtesbina : 1; - uint64_t dtedbina : 1; - uint64_t dtesyn : 7; - uint64_t dteparena : 1; - uint64_t dteperr : 1; - uint64_t dtepina : 1; - uint64_t cp2parena : 1; - uint64_t cp2perr : 1; - uint64_t cp2pina : 1; - uint64_t dblovf : 1; - uint64_t dblina : 1; - uint64_t reserved_33_63 : 31; -#endif - } s; - struct cvmx_dfa_err_s cn31xx; - struct cvmx_dfa_err_s cn38xx; - struct cvmx_dfa_err_s cn38xxp2; - struct cvmx_dfa_err_s cn58xx; - struct cvmx_dfa_err_s cn58xxp1; -} cvmx_dfa_err_t; - - -/** - * cvmx_dfa_memcfg0 - * - * DFA_MEMCFG0 = DFA Memory Configuration - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memcfg0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rldqck90_rst : 1; /**< RLDCK90 and RLDQK90 DLL SW Reset - When written with a '1' the RLDCK90 and RLDQK90 DLL are - in soft-reset. */ - uint64_t rldck_rst : 1; /**< RLDCK Zero Delay DLL(Clock Generator) SW Reset - When written with a '1' the RLDCK zero delay DLL is in - soft-reset. */ - uint64_t clkdiv : 2; /**< RLDCLK Divisor Select - - 0: RLDx_CK_H/L = Core Clock /2 - - 1: RESERVED (must not be used) - - 2: RLDx_CK_H/L = Core Clock /3 - - 3: RLDx_CK_H/L = Core Clock /4 - The DFA LLM interface(s) are tied to the core clock - frequency through this programmable clock divisor. - Examples: - Core Clock(MHz) | DFA-LLM Clock(MHz) | CLKDIV - -----------------+--------------------+-------- - 800 | 400/(800-DDR) | /2 - 1000 | 333/(666-DDR) | /3 - 800 | 200/(400-DDR) | /4 - NOTE: This value MUST BE programmed BEFORE doing a - Hardware init sequence (see: DFA_MEMCFG0[INIT_Px] bits). - *** NOTE: O9N PASS1 Addition */ - uint64_t lpp_ena : 1; /**< PP Linear Port Addressing Mode Enable - When enabled, PP-core LLM accesses to the lower-512MB - LLM address space are sent to the single DFA port - which is enabled. NOTE: If LPP_ENA=1, only - one DFA RLDRAM port may be enabled for RLDRAM accesses - (ie: ENA_P0 and ENA_P1 CAN NEVER BOTH be set). - PP-core LLM accesses to the upper-512MB LLM address - space are sent to the other 'disabled' DFA port. - SW RESTRICTION: If LPP_ENA=1, then only one DFA port - may be enabled for RLDRAM accesses (ie: ENA_P0 and - ENA_P1 CAN NEVER BOTH be set). - NOTE: This bit is used to allow PP-Core LLM accesses to a - disabled port, such that each port can be sequentially - addressed (ie: disable LW address interleaving). - Enabling this bit allows BOTH PORTs to be active and - sequentially addressable. The single port that is - enabled(ENA_Px) will respond to the low-512MB LLM address - space, and the other 'disabled' port will respond to the - high-512MB LLM address space. - Example usage: - - DFA RLD0 pins used for TCAM-FPGA(CP2 accesses) - - DFA RLD1 pins used for RLDRAM (DTE/CP2 accesses). - USAGE NOTE: - If LPP_ENA=1 and SW DOES NOT initialize the disabled port - (ie: INIT_Px=0->1), then refreshes and the HW init - sequence WILL NOT occur for the disabled port. - If LPP_ENA=1 and SW does initialize the disabled port - (INIT_Px=0->1 with ENA_Px=0), then refreshes and - the HW init sequence WILL occur to the disabled port. */ - uint64_t bunk_init : 2; /**< Controls the CS_N[1:0] during a) a HW Initialization - sequence (triggered by DFA_MEMCFG0[INIT_Px]) or - b) during a normal refresh sequence. If - the BNK_INIT[x]=1, the corresponding CS_N[x] is driven. - NOTE: This is required for DRAM used in a - clamshell configuration, since the address lines - carry Mode Register write data that is unique - per bunk(or clam). In a clamshell configuration, - The N3K A[x] pin may be tied into Clam#0's A[x] - and also into Clam#1's 'mirrored' address bit A[y] - (eg: Clam0 sees A[5] and Clam1 sees A[15]). - To support clamshell designs, SW must initiate - two separate HW init sequences for the two bunks - (or clams) . Before each HW init sequence is triggered, - SW must preload the DFA_MEMRLD[22:0] with the data - that will be driven onto the A[22:0] wires during - an MRS mode register write. - NOTE: After the final HW initialization sequence has - been triggered, SW must wait 64K eclks before writing - the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is - driven during refresh sequences in normal operation. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t init_p0 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#0 is - initiated. - NOTE: To initialize memory, SW must: - 1) Set up the DFA_MEMCFG0[CLKDIV] ratio for intended - RLDRAM operation. - [legal values 0: DIV2 2: DIV3 3: DIV4] - 2) Write a '1' into BOTH the DFA_MEM_CFG0[RLDCK_RST] - and DFA_MEM_CFG0[RLDQCK90_RST] field at - the SAME TIME. This step puts all three DLLs in - SW reset (RLDCK, RLDCK90, RLDQK90 DLLs). - 3) Write a '0' into the DFA_MEM_CFG0[RLDCK_RST] field. - This step takes the RLDCK DLL out of soft-reset so - that the DLL can generate the RLDx_CK_H/L clock pins. - 4) Wait 1ms (for RLDCK DLL to achieve lock) - 5) Write a '0' into DFA_MEM_CFG0[RLDQCK90_RST] field. - This step takes the RLDCK90 DLL AND RLDQK90 DLL out - of soft-reset. - 6) Wait 1ms (for RLDCK90/RLDQK90 DLLs to achieve lock) - 7) Enable memory port(s): ENA_P0=1/ENA_P1=1 - 8) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - - - - - - Hardware Initialization Sequence - - - - - - 9) Setup the DFA_MEMCFG0[BUNK_INIT] for the bunk(s) - intended to be initialized. - 10) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence to that'specific' port. - 11) Wait (DFA_MEMCFG0[CLKDIV] * 32K) eclk cycles. - [to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers] - - - - - - Hardware Initialization Sequence - - - - - - 12) Write the DFA_MEMCFG0[BUNK_INIT]=3 to enable - refreshes to BOTH bunks. - NOTE: In some cases (where the address wires are routed - differently between the front and back 'bunks'), - SW will need to use DFA_MEMCFG0[BUNK_INIT] bits to - control the Hardware initialization sequence for a - 'specific bunk'. In these cases, SW would setup the - BUNK_INIT and repeat Steps \#9-11 for each bunk/port. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t init_p1 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#1 is - initiated. - NOTE: To initialize memory, SW must: - 1) Set up the DFA_MEMCFG0[CLKDIV] ratio for intended - RLDRAM operation. - [legal values 0: DIV2 2: DIV3 3: DIV4] - 2) Write a '1' into BOTH the DFA_MEM_CFG0[RLDCK_RST] - and DFA_MEM_CFG0[RLDQCK90_RST] field at - the SAME TIME. This step puts all three DLLs in - SW reset (RLDCK, RLDCK90, RLDQK90 DLLs). - 3) Write a '0' into the DFA_MEM_CFG0[RLDCK_RST] field. - This step takes the RLDCK DLL out of soft-reset so - that the DLL can generate the RLDx_CK_H/L clock pins. - 4) Wait 1ms (for RLDCK DLL to achieve lock) - 5) Write a '0' into DFA_MEM_CFG0[RLDQCK90_RST] field. - This step takes the RLDCK90 DLL AND RLDQK90 DLL out - of soft-reset. - 6) Wait 1ms (for RLDCK90/RLDQK90 DLLs to achieve lock) - 7) Enable memory port(s) ENA_P0=1/ENA_P1=1 - 8) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - - - - - - Hardware Initialization Sequence - - - - - - 9) Setup the DFA_MEMCFG0[BUNK_INIT] for the bunk(s) - intended to be initialized. - 10) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence to that'specific' port. - 11) Wait (DFA_MEMCFG0[CLKDIV] * 32K) eclk cycles. - [to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers] - - - - - - Hardware Initialization Sequence - - - - - - 12) Write the DFA_MEMCFG0[BUNK_INIT]=3 to enable - refreshes to BOTH bunks. - NOTE: In some cases (where the address wires are routed - differently between the front and back 'bunks'), - SW will need to use DFA_MEMCFG0[BUNK_INIT] bits to - control the Hardware initialization sequence for a - 'specific bunk'. In these cases, SW would setup the - BUNK_INIT and repeat Steps \#9-11 for each bunk/port. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ - uint64_t r2r_pbunk : 1; /**< When enabled, an additional command bubble is inserted - if back to back reads are issued to different physical - bunks. This is to avoid DQ data bus collisions when - references cross between physical bunks. - [NOTE: the physical bunk address boundary is determined - by the PBUNK bit]. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t pbunk : 3; /**< Physical Bunk address bit pointer. - Specifies which address bit within the Longword - Memory address MA[23:0] is used to determine the - chip selects. - [RLD_CS0_N corresponds to physical bunk \#0, and - RLD_CS1_N corresponds to physical bunk \#1]. - - 000: CS0_N = MA[19]/CS1_N = !MA[19] - - 001: CS0_N = MA[20]/CS1_N = !MA[20] - - 010: CS0_N = MA[21]/CS1_N = !MA[21] - - 011: CS0_N = MA[22]/CS1_N = !MA[22] - - 100: CS0_N = MA[23]/CS1_N = !MA[23] - - 101-111: CS0_N = 0 /CS1_N = 1 - Example(s): - To build out a 128MB DFA memory, 4x 32Mx9 - parts could be used to fill out TWO physical - bunks (clamshell configuration). Each (of the - two) physical bunks contains 2x 32Mx9 = 16Mx36. - Each RLDRAM device also contains 8 internal banks, - therefore the memory Address is 16M/8banks = 2M - addresses/bunk (2^21). In this case, MA[21] would - select the physical bunk. - NOTE: This should only be written to a different value - during power-on SW initialization. - be used to determine the Chip Select(s). */ - uint64_t blen : 1; /**< Device Burst Length (0=2-burst/1=4-burst) - NOTE: RLDRAM-II MUST USE BLEN=0(2-burst) */ - uint64_t bprch : 2; /**< Tristate Enable (back porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable back porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t fprch : 2; /**< Tristate Enable (front porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable front porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t wr_dly : 4; /**< Write->Read CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from write to read. This allows programmer - to control the data bus contention. - For RLDRAM-II(BL2): (TBL=1) - WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the WR_DLY 'may' be tuned down(-1) if bus fight - on W->R transitions is not pronounced. */ - uint64_t rw_dly : 4; /**< Read->Write CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from read to write. This allows programmer - to control the data bus contention. - For RLDRAM-II(BL2): (TBL=1) - RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the RW_DLY 'may' be tuned down(-1) if bus fight - on R->W transitions is not pronounced. */ - uint64_t sil_lat : 2; /**< Silo Latency (\#dclks): On reads, determines how many - additional dclks to wait (on top of tRL+1) before - pulling data out of the padring silos used for time - domain boundary crossing. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t mtype : 1; /**< FCRAM-II Memory Type - *** O9N UNSUPPORTED *** */ - uint64_t reserved_2_2 : 1; - uint64_t ena_p0 : 1; /**< Enable DFA RLDRAM Port#0 - When enabled, this bit lets N3K be the default - driver for memory port \#0. - NOTE: a customer is at - liberty to enable either Port#0 or Port#1 or both. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t ena_p1 : 1; /**< Enable DFA RLDRAM Port#1 - When enabled, this bit lets N3K be the default - driver for memory port \#1. - NOTE: a customer is at - liberty to enable either Port#0 or Port#1 or both. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ -#else - uint64_t ena_p1 : 1; - uint64_t ena_p0 : 1; - uint64_t reserved_2_2 : 1; - uint64_t mtype : 1; - uint64_t sil_lat : 2; - uint64_t rw_dly : 4; - uint64_t wr_dly : 4; - uint64_t fprch : 2; - uint64_t bprch : 2; - uint64_t blen : 1; - uint64_t pbunk : 3; - uint64_t r2r_pbunk : 1; - uint64_t init_p1 : 1; - uint64_t init_p0 : 1; - uint64_t bunk_init : 2; - uint64_t lpp_ena : 1; - uint64_t clkdiv : 2; - uint64_t rldck_rst : 1; - uint64_t rldqck90_rst : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_dfa_memcfg0_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lpp_ena : 1; /**< PP Linear Port Addressing Mode Enable - When enabled, PP-core LLM accesses to the lower-512MB - LLM address space are sent to the single DFA port - which is enabled. NOTE: If LPP_ENA=1, only - one DFA RLDRAM port may be enabled for RLDRAM accesses - (ie: ENA_P0 and ENA_P1 CAN NEVER BOTH be set). - PP-core LLM accesses to the upper-512MB LLM address - space are sent to the other 'disabled' DFA port. - SW RESTRICTION: If LPP_ENA=1, then only one DFA port - may be enabled for RLDRAM accesses (ie: ENA_P0 and - ENA_P1 CAN NEVER BOTH be set). - NOTE: This bit is used to allow PP-Core LLM accesses to a - disabled port, such that each port can be sequentially - addressed (ie: disable LW address interleaving). - Enabling this bit allows BOTH PORTs to be active and - sequentially addressable. The single port that is - enabled(ENA_Px) will respond to the low-512MB LLM address - space, and the other 'disabled' port will respond to the - high-512MB LLM address space. - Example usage: - - DFA RLD0 pins used for TCAM-FPGA(CP2 accesses) - - DFA RLD1 pins used for RLDRAM (DTE/CP2 accesses). - USAGE NOTE: - If LPP_ENA=1 and SW DOES NOT initialize the disabled port - (ie: INIT_Px=0->1), then refreshes and the HW init - sequence WILL NOT occur for the disabled port. - If LPP_ENA=1 and SW does initialize the disabled port - (INIT_Px=0->1 with ENA_Px=0), then refreshes and - the HW init sequence WILL occur to the disabled port. */ - uint64_t bunk_init : 2; /**< Controls the CS_N[1:0] during a) a HW Initialization - sequence (triggered by DFA_MEMCFG0[INIT_Px]) or - b) during a normal refresh sequence. If - the BNK_INIT[x]=1, the corresponding CS_N[x] is driven. - NOTE: This is required for DRAM used in a - clamshell configuration, since the address lines - carry Mode Register write data that is unique - per bunk(or clam). In a clamshell configuration, - The N3K A[x] pin may be tied into Clam#0's A[x] - and also into Clam#1's 'mirrored' address bit A[y] - (eg: Clam0 sees A[5] and Clam1 sees A[15]). - To support clamshell designs, SW must initiate - two separate HW init sequences for the two bunks - (or clams) . Before each HW init sequence is triggered, - SW must preload the DFA_MEMRLD[22:0] with the data - that will be driven onto the A[22:0] wires during - an MRS mode register write. - NOTE: After the final HW initialization sequence has - been triggered, SW must wait 64K eclks before writing - the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is - driven during refresh sequences in normal operation. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For MTYPE=1(FCRAM) Mode, each bunk MUST BE - initialized independently. In other words, a HW init - must be done for Bunk#0, and then another HW init - must be done for Bunk#1 at power-on. */ - uint64_t init_p0 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#0 is - initiated. - NOTE: To initialize memory, SW must: - 1) Enable memory port(s): - a) ENA_P1=1 (single port in pass 1) OR - b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1) - 2) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - 3) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence. - NOTE: After writing a '1', SW must wait 64K eclk - cycles to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t init_p1 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#1 is - initiated. - NOTE: To initialize memory, SW must: - 1) Enable memory port(s): - a) ENA_P1=1 (single port in pass 1) OR - b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1) - 2) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - 3) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence. - NOTE: After writing a '1', SW must wait 64K eclk - cycles to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ - uint64_t r2r_pbunk : 1; /**< When enabled, an additional command bubble is inserted - if back to back reads are issued to different physical - bunks. This is to avoid DQ data bus collisions when - references cross between physical bunks. - [NOTE: the physical bunk address boundary is determined - by the PBUNK bit]. - NOTE: This should only be written to a different value - during power-on SW initialization. - When MTYPE=1(FCRAM)/BLEN=0(2-burst), R2R_PBUNK SHOULD BE - ZERO(for optimal performance). However, if electrically, - DQ-sharing becomes a power/heat issue, then R2R_PBUNK - should be set (but at a cost to performance (1/2 BW). */ - uint64_t pbunk : 3; /**< Physical Bunk address bit pointer. - Specifies which address bit within the Longword - Memory address MA[23:0] is used to determine the - chip selects. - [RLD_CS0_N corresponds to physical bunk \#0, and - RLD_CS1_N corresponds to physical bunk \#1]. - - 000: CS0_N = MA[19]/CS1_N = !MA[19] - - 001: CS0_N = MA[20]/CS1_N = !MA[20] - - 010: CS0_N = MA[21]/CS1_N = !MA[21] - - 011: CS0_N = MA[22]/CS1_N = !MA[22] - - 100: CS0_N = MA[23]/CS1_N = !MA[23] - - 101-111: CS0_N = 0 /CS1_N = 1 - Example(s): - To build out a 128MB DFA memory, 4x 32Mx9 - parts could be used to fill out TWO physical - bunks (clamshell configuration). Each (of the - two) physical bunks contains 2x 32Mx9 = 16Mx36. - Each RLDRAM device also contains 8 internal banks, - therefore the memory Address is 16M/8banks = 2M - addresses/bunk (2^21). In this case, MA[21] would - select the physical bunk. - NOTE: This should only be written to a different value - during power-on SW initialization. - be used to determine the Chip Select(s). - NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), a - "Redundant Bunk" scheme is employed to provide the - highest overall performance (1 Req/ MCLK cycle). - In this mode, it's imperative that SW set the PBUNK - field +1 'above' the highest address bit. (such that - the PBUNK extracted from the address will always be - zero). In this mode, the CS_N[1:0] pins are driven - to each redundant bunk based on a TDM scheme: - [MCLK-EVEN=Bunk#0/MCLK-ODD=Bunk#1]. */ - uint64_t blen : 1; /**< Device Burst Length (0=2-burst/1=4-burst) - When BLEN=0(BL2), all QW reads/writes from CP2 are - decomposed into 2 separate BL2(LW) requests to the - Low-Latency memory. - When BLEN=1(BL4), a LW request (from CP2 or NCB) is - treated as 1 BL4(QW) request to the low latency memory. - NOTE: QW refers to a 64-bit LLM Load/Store (intiated - by a processor core). LW refers to a 36-bit load/store. - NOTE: This should only be written to a different value - during power-on SW initialization before the DFA LLM - (low latency memory) is used. - NOTE: MTYPE=0(RLDRAM-II) MUST USE BLEN=0(2-burst) - NOTE: MTYPE=1(FCRAM)/BLEN=0(BL2) requires a - multi-bunk(clam) board design. - NOTE: If MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=1(BL4), - SW SHOULD use CP2 QW read/write requests (for - optimal low-latency bus performance). - [LW length read/write requests(in BL4 mode) use 50% - of the available bus bandwidth] - NOTE: MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=0(BL2) can only - be used with FCRAM-II devices which support BL2 mode - (see: Toshiba FCRAM-II, where DQ tristate after 2 data - transfers). - NOTE: MTYPE=1(FCRAM)/FCRAM2P=1(II+) does not support LW - write requests (FCRAM-II+ device specification has removed - the variable write mask function from the devices). - As such, if this mode is used, SW must be careful to - issue only PP-CP2 QW write requests. */ - uint64_t bprch : 2; /**< Tristate Enable (back porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable back porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t fprch : 2; /**< Tristate Enable (front porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable front porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t wr_dly : 4; /**< Write->Read CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from write to read. This allows programmer - to control the data bus contention. - For RLDRAM-II(BL2): (TBL=1) - For FCRAM-II (BL4): (TBL=2) - For FCRAM-II (BL2 grepl=1x ONLY): (TBL=1) - For FCRAM-II (BL2 grepl>=2x): (TBL=3) - NOTE: When MTYTPE=1(FCRAM-II) BLEN=0(BL2 Mode), - grepl>=2x, writes require redundant bunk writes - which require an additional 2 cycles before slotting - the next read. - WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the WR_DLY 'may' be tuned down(-1) if bus fight - on W->R transitions is not pronounced. */ - uint64_t rw_dly : 4; /**< Read->Write CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from read to write. This allows programmer - to control the data bus contention. - For RLDRAM-II/FCRAM-II (BL2): (TBL=1) - For FCRAM-II (BL4): (TBL=2) - RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the RW_DLY 'may' be tuned down(-1) if bus fight - on R->W transitions is not pronounced. */ - uint64_t sil_lat : 2; /**< Silo Latency (\#dclks): On reads, determines how many - additional dclks to wait (on top of tRL+1) before - pulling data out of the padring silos used for time - domain boundary crossing. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t mtype : 1; /**< Memory Type (0=RLDRAM-II/1=Network DRAM-II/FCRAM) - NOTE: N3K-P1 only supports RLDRAM-II - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), only the - "unidirectional DS/QS" mode is supported. (see FCRAM - data sheet EMRS[A6:A5]=SS(Strobe Select) register - definition. [in FCRAM 2-burst mode, we use FCRAM - in a clamshell configuration such that clam0 is - addressed independently of clam1, and DQ is shared - for optimal performance. As such it's imperative that - the QS are conditionally received (and are NOT - free-running), as the N3K receive data capture silos - OR the clam0/1 QS strobes. - NOTE: If this bit is SET, the ASX0/1 - ASX_RLD_FCRAM_MODE[MODE] bit(s) should also be SET - in order for the RLD0/1-PHY(s) to support FCRAM devices. */ - uint64_t reserved_2_2 : 1; - uint64_t ena_p0 : 1; /**< Enable DFA RLDRAM Port#0 - When enabled, this bit lets N3K be the default - driver for memory port \#0. - NOTE: For N3K-P1, to enable Port#0(2nd port), - Port#1 MUST ALSO be enabled. - NOTE: For N3K-P2, single port mode, a customer is at - liberty to enable either Port#0 or Port#1. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t ena_p1 : 1; /**< Enable DFA RLDRAM Port#1 - When enabled, this bit lets N3K be the default - driver for memory port \#1. - NOTE: For N3K-P1, If the customer wishes to use a - single port, s/he must enable Port#1 (and not Port#0). - NOTE: For N3K-P2, single port mode, a customer is at - liberty to enable either Port#0 or Port#1. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ -#else - uint64_t ena_p1 : 1; - uint64_t ena_p0 : 1; - uint64_t reserved_2_2 : 1; - uint64_t mtype : 1; - uint64_t sil_lat : 2; - uint64_t rw_dly : 4; - uint64_t wr_dly : 4; - uint64_t fprch : 2; - uint64_t bprch : 2; - uint64_t blen : 1; - uint64_t pbunk : 3; - uint64_t r2r_pbunk : 1; - uint64_t init_p1 : 1; - uint64_t init_p0 : 1; - uint64_t bunk_init : 2; - uint64_t lpp_ena : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn38xx; - struct cvmx_dfa_memcfg0_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t bunk_init : 2; /**< Controls the CS_N[1:0] during a) a HW Initialization - sequence (triggered by DFA_MEMCFG0[INIT_Px]) or - b) during a normal refresh sequence. If - the BNK_INIT[x]=1, the corresponding CS_N[x] is driven. - NOTE: This is required for DRAM used in a - clamshell configuration, since the address lines - carry Mode Register write data that is unique - per bunk(or clam). In a clamshell configuration, - The N3K A[x] pin may be tied into Clam#0's A[x] - and also into Clam#1's 'mirrored' address bit A[y] - (eg: Clam0 sees A[5] and Clam1 sees A[15]). - To support clamshell designs, SW must initiate - two separate HW init sequences for the two bunks - (or clams) . Before each HW init sequence is triggered, - SW must preload the DFA_MEMRLD[22:0] with the data - that will be driven onto the A[22:0] wires during - an MRS mode register write. - NOTE: After the final HW initialization sequence has - been triggered, SW must wait 64K eclks before writing - the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is - driven during refresh sequences in normal operation. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For MTYPE=1(FCRAM) Mode, each bunk MUST BE - initialized independently. In other words, a HW init - must be done for Bunk#0, and then another HW init - must be done for Bunk#1 at power-on. */ - uint64_t init_p0 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#0 is - initiated. - NOTE: To initialize memory, SW must: - 1) Enable memory port(s): - a) ENA_P1=1 (single port in pass 1) OR - b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1) - 2) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - 3) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence. - NOTE: After writing a '1', SW must wait 64K eclk - cycles to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t init_p1 : 1; /**< When a '1' is written (and the previous value was '0'), - the HW init sequence(s) for Memory Port \#1 is - initiated. - NOTE: To initialize memory, SW must: - 1) Enable memory port(s): - a) ENA_P1=1 (single port in pass 1) OR - b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1) - 2) Wait 100us (to ensure a stable clock - to the RLDRAMs) - as per RLDRAM spec. - 3) Write a '1' to the corresponding INIT_Px which - will initiate a hardware initialization - sequence. - NOTE: After writing a '1', SW must wait 64K eclk - cycles to ensure the HW init sequence has completed - before writing to ANY of the DFA_MEM* registers. - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ - uint64_t r2r_pbunk : 1; /**< When enabled, an additional command bubble is inserted - if back to back reads are issued to different physical - bunks. This is to avoid DQ data bus collisions when - references cross between physical bunks. - [NOTE: the physical bunk address boundary is determined - by the PBUNK bit]. - NOTE: This should only be written to a different value - during power-on SW initialization. - When MTYPE=1(FCRAM)/BLEN=0(2-burst), R2R_PBUNK SHOULD BE - ZERO(for optimal performance). However, if electrically, - DQ-sharing becomes a power/heat issue, then R2R_PBUNK - should be set (but at a cost to performance (1/2 BW). */ - uint64_t pbunk : 3; /**< Physical Bunk address bit pointer. - Specifies which address bit within the Longword - Memory address MA[23:0] is used to determine the - chip selects. - [RLD_CS0_N corresponds to physical bunk \#0, and - RLD_CS1_N corresponds to physical bunk \#1]. - - 000: CS0_N = MA[19]/CS1_N = !MA[19] - - 001: CS0_N = MA[20]/CS1_N = !MA[20] - - 010: CS0_N = MA[21]/CS1_N = !MA[21] - - 011: CS0_N = MA[22]/CS1_N = !MA[22] - - 100: CS0_N = MA[23]/CS1_N = !MA[23] - - 101-111: CS0_N = 0 /CS1_N = 1 - Example(s): - To build out a 128MB DFA memory, 4x 32Mx9 - parts could be used to fill out TWO physical - bunks (clamshell configuration). Each (of the - two) physical bunks contains 2x 32Mx9 = 16Mx36. - Each RLDRAM device also contains 8 internal banks, - therefore the memory Address is 16M/8banks = 2M - addresses/bunk (2^21). In this case, MA[21] would - select the physical bunk. - NOTE: This should only be written to a different value - during power-on SW initialization. - be used to determine the Chip Select(s). - NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), a - "Redundant Bunk" scheme is employed to provide the - highest overall performance (1 Req/ MCLK cycle). - In this mode, it's imperative that SW set the PBUNK - field +1 'above' the highest address bit. (such that - the PBUNK extracted from the address will always be - zero). In this mode, the CS_N[1:0] pins are driven - to each redundant bunk based on a TDM scheme: - [MCLK-EVEN=Bunk#0/MCLK-ODD=Bunk#1]. */ - uint64_t blen : 1; /**< Device Burst Length (0=2-burst/1=4-burst) - When BLEN=0(BL2), all QW reads/writes from CP2 are - decomposed into 2 separate BL2(LW) requests to the - Low-Latency memory. - When BLEN=1(BL4), a LW request (from CP2 or NCB) is - treated as 1 BL4(QW) request to the low latency memory. - NOTE: QW refers to a 64-bit LLM Load/Store (intiated - by a processor core). LW refers to a 36-bit load/store. - NOTE: This should only be written to a different value - during power-on SW initialization before the DFA LLM - (low latency memory) is used. - NOTE: MTYPE=0(RLDRAM-II) MUST USE BLEN=0(2-burst) - NOTE: MTYPE=1(FCRAM)/BLEN=0(BL2) requires a - multi-bunk(clam) board design. - NOTE: If MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=1(BL4), - SW SHOULD use CP2 QW read/write requests (for - optimal low-latency bus performance). - [LW length read/write requests(in BL4 mode) use 50% - of the available bus bandwidth] - NOTE: MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=0(BL2) can only - be used with FCRAM-II devices which support BL2 mode - (see: Toshiba FCRAM-II, where DQ tristate after 2 data - transfers). - NOTE: MTYPE=1(FCRAM)/FCRAM2P=1(II+) does not support LW - write requests (FCRAM-II+ device specification has removed - the variable write mask function from the devices). - As such, if this mode is used, SW must be careful to - issue only PP-CP2 QW write requests. */ - uint64_t bprch : 2; /**< Tristate Enable (back porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable back porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t fprch : 2; /**< Tristate Enable (front porch) (\#dclks) - On reads, allows user to control the shape of the - tristate disable front porch for the DQ data bus. - This parameter is also very dependent on the - RW_DLY and WR_DLY parameters and care must be - taken when programming these parameters to avoid - data bus contention. Valid range [0..2] - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t wr_dly : 4; /**< Write->Read CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from write to read. This allows programmer - to control the data bus contention. - For RLDRAM-II(BL2): (TBL=1) - For FCRAM-II (BL4): (TBL=2) - For FCRAM-II (BL2 grepl=1x ONLY): (TBL=1) - For FCRAM-II (BL2 grepl>=2x): (TBL=3) - NOTE: When MTYTPE=1(FCRAM-II) BLEN=0(BL2 Mode), - grepl>=2x, writes require redundant bunk writes - which require an additional 2 cycles before slotting - the next read. - WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the WR_DLY 'may' be tuned down(-1) if bus fight - on W->R transitions is not pronounced. */ - uint64_t rw_dly : 4; /**< Read->Write CMD Delay (\#mclks): - Determines \#mclk cycles to insert when controller - switches from read to write. This allows programmer - to control the data bus contention. - For RLDRAM-II/FCRAM-II (BL2): (TBL=1) - For FCRAM-II (BL4): (TBL=2) - RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1 - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: For aggressive(performance optimal) designs, - the RW_DLY 'may' be tuned down(-1) if bus fight - on R->W transitions is not pronounced. */ - uint64_t sil_lat : 2; /**< Silo Latency (\#dclks): On reads, determines how many - additional dclks to wait (on top of tRL+1) before - pulling data out of the padring silos used for time - domain boundary crossing. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t mtype : 1; /**< Memory Type (0=RLDRAM-II/1=Network DRAM-II/FCRAM) - NOTE: N3K-P1 only supports RLDRAM-II - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), only the - "unidirectional DS/QS" mode is supported. (see FCRAM - data sheet EMRS[A6:A5]=SS(Strobe Select) register - definition. [in FCRAM 2-burst mode, we use FCRAM - in a clamshell configuration such that clam0 is - addressed independently of clam1, and DQ is shared - for optimal performance. As such it's imperative that - the QS are conditionally received (and are NOT - free-running), as the N3K receive data capture silos - OR the clam0/1 QS strobes. - NOTE: If this bit is SET, the ASX0/1 - ASX_RLD_FCRAM_MODE[MODE] bit(s) should also be SET - in order for the RLD0/1-PHY(s) to support FCRAM devices. */ - uint64_t reserved_2_2 : 1; - uint64_t ena_p0 : 1; /**< Enable DFA RLDRAM Port#0 - When enabled, this bit lets N3K be the default - driver for memory port \#0. - NOTE: For N3K-P1, to enable Port#0(2nd port), - Port#1 MUST ALSO be enabled. - NOTE: For N3K-P2, single port mode, a customer is at - liberty to enable either Port#0 or Port#1. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#0 corresponds to the Octeon - RLD0_* pins. */ - uint64_t ena_p1 : 1; /**< Enable DFA RLDRAM Port#1 - When enabled, this bit lets N3K be the default - driver for memory port \#1. - NOTE: For N3K-P1, If the customer wishes to use a - single port, s/he must enable Port#1 (and not Port#0). - NOTE: For N3K-P2, single port mode, a customer is at - liberty to enable either Port#0 or Port#1. - NOTE: Once a port has been disabled, it MUST NEVER - be re-enabled. [the only way to enable a port is - through a chip reset]. - NOTE: DFA Memory Port#1 corresponds to the Octeon - RLD1_* pins. */ -#else - uint64_t ena_p1 : 1; - uint64_t ena_p0 : 1; - uint64_t reserved_2_2 : 1; - uint64_t mtype : 1; - uint64_t sil_lat : 2; - uint64_t rw_dly : 4; - uint64_t wr_dly : 4; - uint64_t fprch : 2; - uint64_t bprch : 2; - uint64_t blen : 1; - uint64_t pbunk : 3; - uint64_t r2r_pbunk : 1; - uint64_t init_p1 : 1; - uint64_t init_p0 : 1; - uint64_t bunk_init : 2; - uint64_t reserved_27_63 : 37; -#endif - } cn38xxp2; - struct cvmx_dfa_memcfg0_s cn58xx; - struct cvmx_dfa_memcfg0_s cn58xxp1; -} cvmx_dfa_memcfg0_t; - - -/** - * cvmx_dfa_memcfg1 - * - * DFA_MEMCFG1 = RLDRAM Memory Timing Configuration - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memcfg1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ref_intlo : 9; /**< Burst Refresh Interval[8:0] (\#dclks) - For finer refresh interval granularity control. - This field provides an additional level of granularity - for the refresh interval. It specifies the additional - \#dclks [0...511] to be added to the REF_INT[3:0] field. - For RLDRAM-II: For dclk(400MHz=2.5ns): - Example: 64K AREF cycles required within tREF=32ms - trefint = tREF(ms)/(64K cycles/8banks) - = 32ms/8K = 3.9us = 3900ns - REF_INT[3:0] = ROUND_DOWN[(trefint/dclk)/512] - = ROUND_DOWN[(3900/2.5)/512] - = 3 - REF_INTLO[8:0] = MOD[(trefint/dclk)/512] - = MOD[(3900/2.5)/512] - = 24 - NOTE: This should only be written to a different value - during power-on SW initialization. - *** NOTE: PASS2 Addition */ - uint64_t aref_ena : 1; /**< Auto Refresh Cycle Enable - INTERNAL USE ONLY: - NOTE: This mode bit is ONLY intended to be used by - low-level power-on initialization routines in the - event that the hardware initialization routine - does not work. It allows SW to create AREF - commands on the RLDRAM bus directly. - When this bit is set, ALL RLDRAM writes (issued by - a PP through the NCB or CP2) are converted to AREF - commands on the RLDRAM bus. The write-address is - presented on the A[20:0]/BA[2:0] pins (for which - the RLDRAM only interprets BA[2:0]). - When this bit is set, only writes are allowed - and MUST use grepl=0 (1x). - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: MRS_ENA and AREF_ENA are mutually exclusive - (SW can set one or the other, but never both!) - NOTE: AREF commands generated using this method target - the 'addressed' bunk. */ - uint64_t mrs_ena : 1; /**< Mode Register Set Cycle Enable - INTERNAL USE ONLY: - NOTE: This mode bit is ONLY intended to be used by - low-level power-on initialization routines in the - event that the hardware initialization routine - does not work. It allows SW to create MRS - commands on the RLDRAM bus directly. - When this bit is set, ALL RLDRAM writes (issued by - a PP through the NCB or CP2) are converted to MRS - commands on the RLDRAM bus. The write-address is - presented on the A[20:0]/BA[2:0] pins (for which - the RLDRAM only interprets A[17:0]). - When this bit is set, only writes are allowed - and MUST use grepl=0 (1x). - NOTE: This should only be written to a different value - during power-on SW initialization. - NOTE: MRS_ENA and AREF_ENA are mutually exclusive - (SW can set one or the other, but never both!) - NOTE: MRS commands generated using this method target - the 'addressed' bunk. */ - uint64_t tmrsc : 3; /**< Mode Register Set Cycle Time (represented in \#mclks) - - 000-001: RESERVED - - 010: tMRSC = 2 mclks - - 011: tMRSC = 3 mclks - - ... - - 111: tMRSC = 7 mclks - NOTE: The device tMRSC parameter is a function of CL - (which during HW initialization is not known. Its - recommended to load tMRSC(MAX) value to avoid timing - violations. - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t trc : 4; /**< Row Cycle Time (represented in \#mclks) - see also: DFA_MEMRLD[RLCFG] field which must - correspond with tRL/tWL parameter(s). - - 0000-0010: RESERVED - - 0011: tRC = 3 mclks - - 0100: tRC = 4 mclks - - 0101: tRC = 5 mclks - - 0110: tRC = 6 mclks - - 0111: tRC = 7 mclks - - 1000: tRC = 8 mclks - - 1001: tRC = 9 mclks - - 1010-1111: RESERVED - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t twl : 4; /**< Write Latency (represented in \#mclks) - see also: DFA_MEMRLD[RLCFG] field which must - correspond with tRL/tWL parameter(s). - - 0000-0001: RESERVED - - 0010: Write Latency (WL=2.0 mclk) - - 0011: Write Latency (WL=3.0 mclks) - - 0100: Write Latency (WL=4.0 mclks) - - 0101: Write Latency (WL=5.0 mclks) - - 0110: Write Latency (WL=6.0 mclks) - - 0111: Write Latency (WL=7.0 mclks) - - 1000: Write Latency (WL=8.0 mclks) - - 1001: Write Latency (WL=9.0 mclks) - - 1010: Write Latency (WL=10.0 mclks) - - 1011-1111: RESERVED - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t trl : 4; /**< Read Latency (represented in \#mclks) - see also: DFA_MEMRLD[RLCFG] field which must - correspond with tRL/tWL parameter(s). - - 0000-0010: RESERVED - - 0011: Read Latency = 3 mclks - - 0100: Read Latency = 4 mclks - - 0101: Read Latency = 5 mclks - - 0110: Read Latency = 6 mclks - - 0111: Read Latency = 7 mclks - - 1000: Read Latency = 8 mclks - - 1001: Read Latency = 9 mclks - - 1010: Read Latency = 10 mclks - - 1011-1111: RESERVED - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t reserved_6_7 : 2; - uint64_t tskw : 2; /**< Board Skew (represented in \#dclks) - Represents additional board skew of DQ/DQS. - - 00: board-skew = 0 dclk - - 01: board-skew = 1 dclk - - 10: board-skew = 2 dclk - - 11: board-skew = 3 dclk - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t ref_int : 4; /**< Refresh Interval (represented in \#of 512 dclk - increments). - - 0000: RESERVED - - 0001: 1 * 512 = 512 dclks - - ... - - 1111: 15 * 512 = 7680 dclks - NOTE: For finer level of granularity, refer to - REF_INTLO[8:0] field. - For RLDRAM-II, each refresh interval will - generate a burst of 8 AREF commands, one to each of - 8 explicit banks (referenced using the RLD_BA[2:0] - pins. - Example: For mclk=200MHz/dclk(400MHz=2.5ns): - 64K AREF cycles required within tREF=32ms - trefint = tREF(ms)/(64K cycles/8banks) - = 32ms/8K = 3.9us = 3900ns - REF_INT = ROUND_DOWN[(trefint/dclk)/512] - = ROUND_DOWN[(3900/2.5)/512] - = 3 - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t ref_int : 4; - uint64_t tskw : 2; - uint64_t reserved_6_7 : 2; - uint64_t trl : 4; - uint64_t twl : 4; - uint64_t trc : 4; - uint64_t tmrsc : 3; - uint64_t mrs_ena : 1; - uint64_t aref_ena : 1; - uint64_t ref_intlo : 9; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_dfa_memcfg1_s cn38xx; - struct cvmx_dfa_memcfg1_s cn38xxp2; - struct cvmx_dfa_memcfg1_s cn58xx; - struct cvmx_dfa_memcfg1_s cn58xxp1; -} cvmx_dfa_memcfg1_t; - - -/** - * cvmx_dfa_memcfg2 - * - * DFA_MEMCFG2 = DFA Memory Config Register \#2 - * *** NOTE: Pass2 Addition - * - * Description: Additional Memory Configuration CSRs to support FCRAM-II/II+ and Network DRAM-II - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memcfg2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t dteclkdis : 1; /**< DFA DTE Clock Disable - When SET, the DFA clocks for DTE(thread engine) - operation are disabled. - NOTE: When SET, SW MUST NEVER issue ANY operations to - the DFA via the NCB Bus. All DFA Operations must be - issued solely through the CP2 interface. - *** NOTE: PASS2 Addition - NOTE: When DTECLKDIS=1, if CP2 Errors are encountered - (ie: CP2SBE, CP2DBE, CP2PERR), the DFA_MEMFADR CSR - does not reflect the failing address/ctl information. */ - uint64_t silrst : 1; /**< LLM-PHY Silo Reset - When a '1' is written (when the previous - value was a '0') causes the the LLM-PHY Silo read/write - pointers to be reset. - NOTE: SW MUST WAIT 400 dclks after the LAST HW Init - sequence was launched (ie: INIT_START 0->1 CSR write), - before the SILRST can be triggered (0->1). */ - uint64_t trfc : 5; /**< FCRAM-II Refresh Interval - *** O9N UNSUPPORTED *** */ - uint64_t refshort : 1; /**< FCRAM Short Refresh Mode - *** O9N UNSUPPORTED *** */ - uint64_t ua_start : 2; /**< FCRAM-II Upper Addres Start - *** O9N UNSUPPORTED *** */ - uint64_t maxbnk : 1; /**< Maximum Banks per-device (used by the address mapper - when extracting address bits for the memory bank#. - - 0: 4 banks/device - - 1: 8 banks/device - *** NOTE: PASS2 Addition */ - uint64_t fcram2p : 1; /**< FCRAM-II+ Mode Enable - *** O9N UNSUPPORTED *** */ -#else - uint64_t fcram2p : 1; - uint64_t maxbnk : 1; - uint64_t ua_start : 2; - uint64_t refshort : 1; - uint64_t trfc : 5; - uint64_t silrst : 1; - uint64_t dteclkdis : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_dfa_memcfg2_s cn38xx; - struct cvmx_dfa_memcfg2_s cn38xxp2; - struct cvmx_dfa_memcfg2_s cn58xx; - struct cvmx_dfa_memcfg2_s cn58xxp1; -} cvmx_dfa_memcfg2_t; - - -/** - * cvmx_dfa_memfadr - * - * DFA_MEMFADR = RLDRAM Failing Address/Control Register - * - * Description: DFA Memory Failing Address/Control Error Capture information - * This register contains useful information to help in isolating an RLDRAM memory failure. - * NOTE: The first detected SEC/DED/PERR failure is captured in DFA_MEMFADR, however, a DED or PERR (which is - * more severe) will always overwrite a SEC error. The user can 'infer' the source of the interrupt - * via the FSRC field. - * NOTE: If DFA_MEMCFG2[DTECLKDIS]=1, the contents of this register are UNDEFINED. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memfadr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t maddr : 24; /**< Memory Address */ -#else - uint64_t maddr : 24; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_dfa_memfadr_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t fdst : 9; /**< Fill-Destination - FSRC[1:0] | FDST[8:0] - -------------+------------------------------------- - 0(NCB-DTE) | [fillstart,2'b0,WIDX(1),DMODE(1),DTE(4)] - 1(NCB-CSR) | [ncbSRC[8:0]] - 3(CP2-PP) | [2'b0,SIZE(1),INDEX(1),PP(4),FID(1)] - where: - DTE: DFA Thread Engine ID# - PP: Packet Processor ID# - FID: Fill-ID# (unique per PP) - WIDX: 16b SIMPLE Mode (index) - DMODE: (0=16b SIMPLE/1=32b SIMPLE) - SIZE: (0=LW Mode access/1=QW Mode Access) - INDEX: (0=Low LW/1=High LW) - NOTE: QW refers to a 56/64-bit LLM Load/Store (intiated - by a processor core). LW refers to a 32-bit load/store. */ - uint64_t fsrc : 2; /**< Fill-Source (0=NCB-DTE/1=NCB-CSR/2=RESERVED/3=PP-CP2) */ - uint64_t pnum : 1; /**< Memory Port - NOTE: For O2P, this bit will always return zero. */ - uint64_t bnum : 3; /**< Memory Bank - When DFA_DDR2_ADDR[RNK_LO]=1, BNUM[2]=RANK[0]. - (RANK[1] can be inferred from MADDR[24:0]) */ - uint64_t maddr : 25; /**< Memory Address */ -#else - uint64_t maddr : 25; - uint64_t bnum : 3; - uint64_t pnum : 1; - uint64_t fsrc : 2; - uint64_t fdst : 9; - uint64_t reserved_40_63 : 24; -#endif - } cn31xx; - struct cvmx_dfa_memfadr_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t fdst : 9; /**< Fill-Destination - FSRC[1:0] | FDST[8:0] - -------------+------------------------------------- - 0(NCB-DTE) | [fillstart,2'b0,WIDX(1),DMODE(1),DTE(4)] - 1(NCB-CSR) | [ncbSRC[8:0]] - 3(CP2-PP) | [2'b0,SIZE(1),INDEX(1),PP(4),FID(1)] - where: - DTE: DFA Thread Engine ID# - PP: Packet Processor ID# - FID: Fill-ID# (unique per PP) - WIDX: 18b SIMPLE Mode (index) - DMODE: (0=18b SIMPLE/1=36b SIMPLE) - SIZE: (0=LW Mode access/1=QW Mode Access) - INDEX: (0=Low LW/1=High LW) - NOTE: QW refers to a 64-bit LLM Load/Store (intiated - by a processor core). LW refers to a 36-bit load/store. */ - uint64_t fsrc : 2; /**< Fill-Source (0=NCB-DTE/1=NCB-CSR/2=RESERVED/3=PP-CP2) */ - uint64_t pnum : 1; /**< Memory Port - NOTE: the port id's are reversed - PNUM==0 => port#1 - PNUM==1 => port#0 */ - uint64_t bnum : 3; /**< Memory Bank */ - uint64_t maddr : 24; /**< Memory Address */ -#else - uint64_t maddr : 24; - uint64_t bnum : 3; - uint64_t pnum : 1; - uint64_t fsrc : 2; - uint64_t fdst : 9; - uint64_t reserved_39_63 : 25; -#endif - } cn38xx; - struct cvmx_dfa_memfadr_cn38xx cn38xxp2; - struct cvmx_dfa_memfadr_cn38xx cn58xx; - struct cvmx_dfa_memfadr_cn38xx cn58xxp1; -} cvmx_dfa_memfadr_t; - - -/** - * cvmx_dfa_memfcr - * - * DFA_MEMFCR = FCRAM MRS Register(s) EMRS2[14:0], EMRS1[14:0], MRS[14:0] - * *** O9N UNSUPPORTED *** - * - * Notes: - * For FCRAM-II please consult your device's data sheet for further details: - * MRS Definition: - * A[13:8]=0 RESERVED - * A[7]=0 TEST MODE (N3K requires test mode 0:"disabled") - * A[6:4] CAS LATENCY (fully programmable - SW must ensure that the value programmed - * into DFA_MEM_CFG0[TRL] corresponds with this value). - * A[3]=0 BURST TYPE (N3K requires 0:"Sequential" Burst Type) - * A[2:0] BURST LENGTH Burst Length [1:BL2/2:BL4] (N3K only supports BL=2,4) - * - * In BL2 mode(for highest performance), only 1/2 the phsyical - * memory is unique (ie: each bunk stores the same information). - * In BL4 mode(highest capacity), all of the physical memory - * is unique (ie: each bunk is uniquely addressable). - * EMRS Definition: - * A[13:12] REFRESH MODE (N3K Supports only 0:"Conventional" and 1:"Short" auto-refresh modes) - * - * (SW must ensure that the value programmed into DFA_MEMCFG2[REFSHORT] - * is also reflected in the Refresh Mode encoding). - * A[11:7]=0 RESERVED - * A[6:5]=2 STROBE SELECT (N3K supports only 2:"Unidirectional DS/QS" mode - the read capture - * silos rely on a conditional QS strobe) - * A[4:3] DIC(QS) QS Drive Strength: fully programmable (consult your FCRAM-II data sheet) - * [0: Normal Output Drive/1: Strong Output Drive/2: Weak output Drive] - * A[2:1] DIC(DQ) DQ Drive Strength: fully programmable (consult your FCRAM-II data sheet) - * [0: Normal Output Drive/1: Strong Output Drive/2: Weak output Drive] - * A[0] DLL DLL Enable: Programmable [0:DLL Enable/1: DLL Disable] - * - * EMRS2 Definition: (for FCRAM-II+) - * A[13:11]=0 RESERVED - * A[10:8] ODTDS On Die Termination (DS+/-) - * [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED] - * A[7:6]=0 MBW Multi-Bank Write: (N3K requires use of 0:"single bank" mode only) - * A[5:3] ODTin On Die Termination (input pin) - * [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED] - * A[2:0] ODTDQ On Die Termination (DQ) - * [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED] - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memfcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_47_63 : 17; - uint64_t emrs2 : 15; /**< Memory Address[14:0] during EMRS2(for FCRAM-II+) - *** O9N UNSUPPORTED *** */ - uint64_t reserved_31_31 : 1; - uint64_t emrs : 15; /**< Memory Address[14:0] during EMRS - *** O9N UNSUPPORTED *** - A[0]=1: DLL Enabled) */ - uint64_t reserved_15_15 : 1; - uint64_t mrs : 15; /**< FCRAM Memory Address[14:0] during MRS - *** O9N UNSUPPORTED *** - A[6:4]=4 CAS LATENCY=4(default) - A[3]=0 Burst Type(must be 0:Sequential) - A[2:0]=2 Burst Length=4(default) */ -#else - uint64_t mrs : 15; - uint64_t reserved_15_15 : 1; - uint64_t emrs : 15; - uint64_t reserved_31_31 : 1; - uint64_t emrs2 : 15; - uint64_t reserved_47_63 : 17; -#endif - } s; - struct cvmx_dfa_memfcr_s cn38xx; - struct cvmx_dfa_memfcr_s cn38xxp2; - struct cvmx_dfa_memfcr_s cn58xx; - struct cvmx_dfa_memfcr_s cn58xxp1; -} cvmx_dfa_memfcr_t; - - -/** - * cvmx_dfa_memrld - * - * DFA_MEMRLD = DFA RLDRAM MRS Register Values - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_memrld_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t mrsdat : 23; /**< This field represents the data driven onto the - A[22:0] address lines during MRS(Mode Register Set) - commands (during a HW init sequence). This field - corresponds with the Mode Register Bit Map from - your RLDRAM-II device specific data sheet. - A[17:10]: RESERVED - A[9]: ODT (on die termination) - A[8]: Impedance Matching - A[7]: DLL Reset - A[6]: UNUSED - A[5]: Address Mux (for N3K: MUST BE ZERO) - A[4:3]: Burst Length (for N3K: MUST BE ZERO) - A[2:0]: Configuration (see data sheet for - specific RLDRAM-II device). - - 000-001: CFG=1 [tRC=4/tRL=4/tWL=5] - - 010: CFG=2 [tRC=6/tRL=6/tWL=7] - - 011: CFG=3 [tRC=8/tRL=8/tWL=9] - - 100-111: RESERVED - NOTE: For additional density, the RLDRAM-II parts - can be 'clamshelled' (ie: two devices mounted on - different sides of the PCB board), since the BGA - pinout supports 'mirroring'. - To support a clamshell design, SW must preload - the MRSDAT[22:0] with the proper A[22:0] pin mapping - which is dependent on the 'selected' bunk/clam - (see also: DFA_MEMCFG0[BUNK_INIT] field). - NOTE: Care MUST BE TAKEN NOT to write to this register - within 64K eclk cycles of a HW INIT (see: INIT_P0/INIT_P1). - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t mrsdat : 23; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_dfa_memrld_s cn38xx; - struct cvmx_dfa_memrld_s cn38xxp2; - struct cvmx_dfa_memrld_s cn58xx; - struct cvmx_dfa_memrld_s cn58xxp1; -} cvmx_dfa_memrld_t; - - -/** - * cvmx_dfa_ncbctl - * - * DFA_NCBCTL = DFA NCB CTL Register - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_ncbctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t sbdnum : 5; /**< SBD Debug Entry# - For internal use only. (DFA Scoreboard debug) - Selects which one of 32 DFA Scoreboard entries is - latched into the DFA_SBD_DBG[0-3] registers. */ - uint64_t sbdlck : 1; /**< DFA Scoreboard LOCK Strobe - For internal use only. (DFA Scoreboard debug) - When written with a '1', the DFA Scoreboard Debug - registers (DFA_SBD_DBG[0-3]) are all locked down. - This allows SW to lock down the contents of the entire - SBD for a single instant in time. All subsequent reads - of the DFA scoreboard registers will return the data - from that instant in time. */ - uint64_t dcmode : 1; /**< DRF-CRQ/DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t dtmode : 1; /**< DRF-DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t pmode : 1; /**< NCB-NRP Arbiter Mode - (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t qmode : 1; /**< NCB-NRQ Arbiter Mode - (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t imode : 1; /**< NCB-Inbound Arbiter - (0=FP [LP=NRQ,HP=NRP], 1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t imode : 1; - uint64_t qmode : 1; - uint64_t pmode : 1; - uint64_t dtmode : 1; - uint64_t dcmode : 1; - uint64_t sbdlck : 1; - uint64_t sbdnum : 5; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_dfa_ncbctl_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t sbdnum : 4; /**< SBD Debug Entry# - For internal use only. (DFA Scoreboard debug) - Selects which one of 16 DFA Scoreboard entries is - latched into the DFA_SBD_DBG[0-3] registers. */ - uint64_t sbdlck : 1; /**< DFA Scoreboard LOCK Strobe - For internal use only. (DFA Scoreboard debug) - When written with a '1', the DFA Scoreboard Debug - registers (DFA_SBD_DBG[0-3]) are all locked down. - This allows SW to lock down the contents of the entire - SBD for a single instant in time. All subsequent reads - of the DFA scoreboard registers will return the data - from that instant in time. */ - uint64_t dcmode : 1; /**< DRF-CRQ/DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t dtmode : 1; /**< DRF-DTE Arbiter Mode - DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t pmode : 1; /**< NCB-NRP Arbiter Mode - (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t qmode : 1; /**< NCB-NRQ Arbiter Mode - (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR - NOTE: This should only be written to a different value - during power-on SW initialization. */ - uint64_t imode : 1; /**< NCB-Inbound Arbiter - (0=FP [LP=NRQ,HP=NRP], 1=RR) - NOTE: This should only be written to a different value - during power-on SW initialization. */ -#else - uint64_t imode : 1; - uint64_t qmode : 1; - uint64_t pmode : 1; - uint64_t dtmode : 1; - uint64_t dcmode : 1; - uint64_t sbdlck : 1; - uint64_t sbdnum : 4; - uint64_t reserved_10_63 : 54; -#endif - } cn38xx; - struct cvmx_dfa_ncbctl_cn38xx cn38xxp2; - struct cvmx_dfa_ncbctl_s cn58xx; - struct cvmx_dfa_ncbctl_s cn58xxp1; -} cvmx_dfa_ncbctl_t; - - -/** - * cvmx_dfa_rodt_comp_ctl - * - * DFA_RODT_COMP_CTL = DFA RLD Compensation control (For read "on die termination") - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_rodt_comp_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t enable : 1; /**< Read On Die Termination Enable - (0=disable, 1=enable) */ - uint64_t reserved_12_15 : 4; - uint64_t nctl : 4; /**< Compensation control bits */ - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; /**< Compensation control bits */ -#else - uint64_t pctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t nctl : 4; - uint64_t reserved_12_15 : 4; - uint64_t enable : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_dfa_rodt_comp_ctl_s cn58xx; - struct cvmx_dfa_rodt_comp_ctl_s cn58xxp1; -} cvmx_dfa_rodt_comp_ctl_t; - - -/** - * cvmx_dfa_sbd_dbg0 - * - * DFA_SBD_DBG0 = DFA Scoreboard Debug \#0 Register - * - * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down. - * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the - * CSR read. - * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model) - * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an - * instruction. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_sbd_dbg0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t sbd0 : 64; /**< DFA ScoreBoard \#0 Data - For internal use only! (DFA Scoreboard Debug) - [63:40] rptr[26:3]: Result Base Pointer - [39:24] rwcnt[15:0] Cumulative Result Write Counter - [23] lastgrdrsp: Last Gather-Rd Response - [22] wtgrdrsp: Waiting Gather-Rd Response - [21] wtgrdreq: Waiting for Gather-Rd Issue - [20] glvld: GLPTR/GLCNT Valid - [19] cmpmark: Completion Marked Node Detected - [18:17] cmpcode[1:0]: Completion Code - [0=PDGONE/1=PERR/2=RFULL/3=TERM] - [16] cmpdet: Completion Detected - [15] wthdrwrcmtrsp: Waiting for HDR RWrCmtRsp - [14] wtlastwrcmtrsp: Waiting for LAST RESULT - RWrCmtRsp - [13] hdrwrreq: Waiting for HDR RWrReq - [12] wtrwrreq: Waiting for RWrReq - [11] wtwqwrreq: Waiting for WQWrReq issue - [10] lastprdrspeot: Last Packet-Rd Response - [9] lastprdrsp: Last Packet-Rd Response - [8] wtprdrsp: Waiting for PRdRsp EOT - [7] wtprdreq: Waiting for PRdReq Issue - [6] lastpdvld: PDPTR/PDLEN Valid - [5] pdvld: Packet Data Valid - [4] wqvld: WQVLD - [3] wqdone: WorkQueue Done condition - a) WQWrReq issued(for WQPTR<>0) OR - b) HDR RWrCmtRsp completed) - [2] rwstf: Resultant write STF/P Mode - [1] pdldt: Packet-Data LDT mode - [0] gmode: Gather-Mode */ -#else - uint64_t sbd0 : 64; -#endif - } s; - struct cvmx_dfa_sbd_dbg0_s cn31xx; - struct cvmx_dfa_sbd_dbg0_s cn38xx; - struct cvmx_dfa_sbd_dbg0_s cn38xxp2; - struct cvmx_dfa_sbd_dbg0_s cn58xx; - struct cvmx_dfa_sbd_dbg0_s cn58xxp1; -} cvmx_dfa_sbd_dbg0_t; - - -/** - * cvmx_dfa_sbd_dbg1 - * - * DFA_SBD_DBG1 = DFA Scoreboard Debug \#1 Register - * - * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down. - * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the - * CSR read. - * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model) - * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an - * instruction. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_sbd_dbg1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t sbd1 : 64; /**< DFA ScoreBoard \#1 Data - For internal use only! (DFA Scoreboard Debug) - [63:61] wqptr[35:33]: Work Queue Pointer - [60:52] rptr[35:27]: Result Base Pointer - [51:16] pdptr[35:0]: Packet Data Pointer - [15:0] pdcnt[15:0]: Packet Data Counter */ -#else - uint64_t sbd1 : 64; -#endif - } s; - struct cvmx_dfa_sbd_dbg1_s cn31xx; - struct cvmx_dfa_sbd_dbg1_s cn38xx; - struct cvmx_dfa_sbd_dbg1_s cn38xxp2; - struct cvmx_dfa_sbd_dbg1_s cn58xx; - struct cvmx_dfa_sbd_dbg1_s cn58xxp1; -} cvmx_dfa_sbd_dbg1_t; - - -/** - * cvmx_dfa_sbd_dbg2 - * - * DFA_SBD_DBG2 = DFA Scoreboard Debug \#2 Register - * - * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down. - * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the - * CSR read. - * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model) - * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an - * instruction. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_sbd_dbg2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t sbd2 : 64; /**< DFA ScoreBoard \#2 Data - [63:49] wqptr[17:3]: Work Queue Pointer - [48:16] rwptr[35:3]: Result Write Pointer - [15:0] prwcnt[15:0]: Pending Result Write Counter */ -#else - uint64_t sbd2 : 64; -#endif - } s; - struct cvmx_dfa_sbd_dbg2_s cn31xx; - struct cvmx_dfa_sbd_dbg2_s cn38xx; - struct cvmx_dfa_sbd_dbg2_s cn38xxp2; - struct cvmx_dfa_sbd_dbg2_s cn58xx; - struct cvmx_dfa_sbd_dbg2_s cn58xxp1; -} cvmx_dfa_sbd_dbg2_t; - - -/** - * cvmx_dfa_sbd_dbg3 - * - * DFA_SBD_DBG3 = DFA Scoreboard Debug \#3 Register - * - * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down. - * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the - * CSR read. - * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model) - * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an - * instruction. - */ -typedef union -{ - uint64_t u64; - struct cvmx_dfa_sbd_dbg3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t sbd3 : 64; /**< DFA ScoreBoard \#3 Data - [63:49] wqptr[32:18]: Work Queue Pointer - [48:16] glptr[35:3]: Gather List Pointer - [15:0] glcnt[15:0]: Gather List Counter */ -#else - uint64_t sbd3 : 64; -#endif - } s; - struct cvmx_dfa_sbd_dbg3_s cn31xx; - struct cvmx_dfa_sbd_dbg3_s cn38xx; - struct cvmx_dfa_sbd_dbg3_s cn38xxp2; - struct cvmx_dfa_sbd_dbg3_s cn58xx; - struct cvmx_dfa_sbd_dbg3_s cn58xxp1; -} cvmx_dfa_sbd_dbg3_t; - - -/** - * cvmx_fpa_bist_status - * - * FPA_BIST_STATUS = BIST Status of FPA Memories - * - * The result of the BIST run on the FPA memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t frd : 1; /**< fpa_frd memory bist status. */ - uint64_t fpf0 : 1; /**< fpa_fpf0 memory bist status. */ - uint64_t fpf1 : 1; /**< fpa_fpf1 memory bist status. */ - uint64_t ffr : 1; /**< fpa_ffr memory bist status. */ - uint64_t fdr : 1; /**< fpa_fdr memory bist status. */ -#else - uint64_t fdr : 1; - uint64_t ffr : 1; - uint64_t fpf1 : 1; - uint64_t fpf0 : 1; - uint64_t frd : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_fpa_bist_status_s cn30xx; - struct cvmx_fpa_bist_status_s cn31xx; - struct cvmx_fpa_bist_status_s cn38xx; - struct cvmx_fpa_bist_status_s cn38xxp2; - struct cvmx_fpa_bist_status_s cn50xx; - struct cvmx_fpa_bist_status_s cn52xx; - struct cvmx_fpa_bist_status_s cn52xxp1; - struct cvmx_fpa_bist_status_s cn56xx; - struct cvmx_fpa_bist_status_s cn56xxp1; - struct cvmx_fpa_bist_status_s cn58xx; - struct cvmx_fpa_bist_status_s cn58xxp1; -} cvmx_fpa_bist_status_t; - - -/** - * cvmx_fpa_ctl_status - * - * FPA_CTL_STATUS = FPA's Control/Status Register - * - * The FPA's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t reset : 1; /**< When set causes a reset of the FPA with the - exception of the RSL. */ - uint64_t use_ldt : 1; /**< When clear '0' the FPA will use LDT to load - pointers from the L2C. */ - uint64_t use_stt : 1; /**< When clear '0' the FPA will use STT to store - pointers to the L2C. */ - uint64_t enb : 1; /**< Must be set to 1 AFTER writing all config registers - and 10 cycles have past. If any of the config - register are written after writing this bit the - FPA may begin to operate incorrectly. */ - uint64_t mem1_err : 7; /**< Causes a flip of the ECC bit associated 38:32 - respective to bit 6:0 of this field, for FPF - FIFO 1. */ - uint64_t mem0_err : 7; /**< Causes a flip of the ECC bit associated 38:32 - respective to bit 6:0 of this field, for FPF - FIFO 0. */ -#else - uint64_t mem0_err : 7; - uint64_t mem1_err : 7; - uint64_t enb : 1; - uint64_t use_stt : 1; - uint64_t use_ldt : 1; - uint64_t reset : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_fpa_ctl_status_s cn30xx; - struct cvmx_fpa_ctl_status_s cn31xx; - struct cvmx_fpa_ctl_status_s cn38xx; - struct cvmx_fpa_ctl_status_s cn38xxp2; - struct cvmx_fpa_ctl_status_s cn50xx; - struct cvmx_fpa_ctl_status_s cn52xx; - struct cvmx_fpa_ctl_status_s cn52xxp1; - struct cvmx_fpa_ctl_status_s cn56xx; - struct cvmx_fpa_ctl_status_s cn56xxp1; - struct cvmx_fpa_ctl_status_s cn58xx; - struct cvmx_fpa_ctl_status_s cn58xxp1; -} cvmx_fpa_ctl_status_t; - - -/** - * cvmx_fpa_fpf#_marks - * - * FPA_FPF1_MARKS = FPA's Queue 1 Free Page FIFO Read Write Marks - * - * The high and low watermark register that determines when we write and read free pages from L2C - * for Queue 1. The value of FPF_RD and FPF_WR should have at least a 33 diffrence. Recommend value - * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75) - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_fpfx_marks_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_22_63 : 42; - uint64_t fpf_wr : 11; /**< When the number of free-page-pointers in a - queue exceeds this value the FPA will write - 32-page-pointers of that queue to DRAM. - The MAX value for this field should be - FPA_FPF0_SIZE[FPF_SIZ]-2. */ - uint64_t fpf_rd : 11; /**< When the number of free-page-pointers in a - queue drops below this value amd there are - free-page-pointers in DRAM, the FPA will - read one page (32 pointers) from DRAM. - This maximum value for this field should be - FPA_FPF0_SIZE[FPF_SIZ]-34. The min number - for this would be 16. */ -#else - uint64_t fpf_rd : 11; - uint64_t fpf_wr : 11; - uint64_t reserved_22_63 : 42; -#endif - } s; - struct cvmx_fpa_fpfx_marks_s cn38xx; - struct cvmx_fpa_fpfx_marks_s cn38xxp2; - struct cvmx_fpa_fpfx_marks_s cn56xx; - struct cvmx_fpa_fpfx_marks_s cn56xxp1; - struct cvmx_fpa_fpfx_marks_s cn58xx; - struct cvmx_fpa_fpfx_marks_s cn58xxp1; -} cvmx_fpa_fpfx_marks_t; - - -/** - * cvmx_fpa_fpf#_size - * - * FPA_FPFX_SIZE = FPA's Queue 1-7 Free Page FIFO Size - * - * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are - * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used. - * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_fpfx_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t fpf_siz : 11; /**< The number of entries assigned in the FPA FIFO - (used to hold page-pointers) for this Queue. - The value of this register must divisable by 2, - and the FPA will ignore bit [0] of this register. - The total of the FPF_SIZ field of the 8 (0-7) - FPA_FPF#_SIZE registers must not exceed 2048. - After writing this field the FPA will need 10 - core clock cycles to be ready for operation. The - assignment of location in the FPA FIFO must - start with Queue 0, then 1, 2, etc. - The number of useable entries will be FPF_SIZ-2. */ -#else - uint64_t fpf_siz : 11; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_fpa_fpfx_size_s cn38xx; - struct cvmx_fpa_fpfx_size_s cn38xxp2; - struct cvmx_fpa_fpfx_size_s cn56xx; - struct cvmx_fpa_fpfx_size_s cn56xxp1; - struct cvmx_fpa_fpfx_size_s cn58xx; - struct cvmx_fpa_fpfx_size_s cn58xxp1; -} cvmx_fpa_fpfx_size_t; - - -/** - * cvmx_fpa_fpf0_marks - * - * FPA_FPF0_MARKS = FPA's Queue 0 Free Page FIFO Read Write Marks - * - * The high and low watermark register that determines when we write and read free pages from L2C - * for Queue 0. The value of FPF_RD and FPF_WR should have at least a 33 diffrence. Recommend value - * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75) - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_fpf0_marks_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t fpf_wr : 12; /**< When the number of free-page-pointers in a - queue exceeds this value the FPA will write - 32-page-pointers of that queue to DRAM. - The MAX value for this field should be - FPA_FPF0_SIZE[FPF_SIZ]-2. */ - uint64_t fpf_rd : 12; /**< When the number of free-page-pointers in a - queue drops below this value amd there are - free-page-pointers in DRAM, the FPA will - read one page (32 pointers) from DRAM. - This maximum value for this field should be - FPA_FPF0_SIZE[FPF_SIZ]-34. The min number - for this would be 16. */ -#else - uint64_t fpf_rd : 12; - uint64_t fpf_wr : 12; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_fpa_fpf0_marks_s cn38xx; - struct cvmx_fpa_fpf0_marks_s cn38xxp2; - struct cvmx_fpa_fpf0_marks_s cn56xx; - struct cvmx_fpa_fpf0_marks_s cn56xxp1; - struct cvmx_fpa_fpf0_marks_s cn58xx; - struct cvmx_fpa_fpf0_marks_s cn58xxp1; -} cvmx_fpa_fpf0_marks_t; - - -/** - * cvmx_fpa_fpf0_size - * - * FPA_FPF0_SIZE = FPA's Queue 0 Free Page FIFO Size - * - * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are - * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used. - * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_fpf0_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t fpf_siz : 12; /**< The number of entries assigned in the FPA FIFO - (used to hold page-pointers) for this Queue. - The value of this register must divisable by 2, - and the FPA will ignore bit [0] of this register. - The total of the FPF_SIZ field of the 8 (0-7) - FPA_FPF#_SIZE registers must not exceed 2048. - After writing this field the FPA will need 10 - core clock cycles to be ready for operation. The - assignment of location in the FPA FIFO must - start with Queue 0, then 1, 2, etc. - The number of useable entries will be FPF_SIZ-2. */ -#else - uint64_t fpf_siz : 12; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_fpa_fpf0_size_s cn38xx; - struct cvmx_fpa_fpf0_size_s cn38xxp2; - struct cvmx_fpa_fpf0_size_s cn56xx; - struct cvmx_fpa_fpf0_size_s cn56xxp1; - struct cvmx_fpa_fpf0_size_s cn58xx; - struct cvmx_fpa_fpf0_size_s cn58xxp1; -} cvmx_fpa_fpf0_size_t; - - -/** - * cvmx_fpa_int_enb - * - * FPA_INT_ENB = FPA's Interrupt Enable - * - * The FPA's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t q7_perr : 1; /**< When set (1) and bit 27 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q7_coff : 1; /**< When set (1) and bit 26 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q7_und : 1; /**< When set (1) and bit 25 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q6_perr : 1; /**< When set (1) and bit 24 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q6_coff : 1; /**< When set (1) and bit 23 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q6_und : 1; /**< When set (1) and bit 22 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q5_perr : 1; /**< When set (1) and bit 21 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q5_coff : 1; /**< When set (1) and bit 20 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q5_und : 1; /**< When set (1) and bit 19 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q4_perr : 1; /**< When set (1) and bit 18 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q4_coff : 1; /**< When set (1) and bit 17 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q4_und : 1; /**< When set (1) and bit 16 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q3_perr : 1; /**< When set (1) and bit 15 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q3_coff : 1; /**< When set (1) and bit 14 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q3_und : 1; /**< When set (1) and bit 13 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q2_perr : 1; /**< When set (1) and bit 12 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q2_coff : 1; /**< When set (1) and bit 11 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q2_und : 1; /**< When set (1) and bit 10 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q1_perr : 1; /**< When set (1) and bit 9 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q1_coff : 1; /**< When set (1) and bit 8 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q1_und : 1; /**< When set (1) and bit 7 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q0_perr : 1; /**< When set (1) and bit 6 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q0_coff : 1; /**< When set (1) and bit 5 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t q0_und : 1; /**< When set (1) and bit 4 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t fed1_dbe : 1; /**< When set (1) and bit 3 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t fed1_sbe : 1; /**< When set (1) and bit 2 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t fed0_dbe : 1; /**< When set (1) and bit 1 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ - uint64_t fed0_sbe : 1; /**< When set (1) and bit 0 of the FPA_INT_SUM - register is asserted the FPA will assert an - interrupt. */ -#else - uint64_t fed0_sbe : 1; - uint64_t fed0_dbe : 1; - uint64_t fed1_sbe : 1; - uint64_t fed1_dbe : 1; - uint64_t q0_und : 1; - uint64_t q0_coff : 1; - uint64_t q0_perr : 1; - uint64_t q1_und : 1; - uint64_t q1_coff : 1; - uint64_t q1_perr : 1; - uint64_t q2_und : 1; - uint64_t q2_coff : 1; - uint64_t q2_perr : 1; - uint64_t q3_und : 1; - uint64_t q3_coff : 1; - uint64_t q3_perr : 1; - uint64_t q4_und : 1; - uint64_t q4_coff : 1; - uint64_t q4_perr : 1; - uint64_t q5_und : 1; - uint64_t q5_coff : 1; - uint64_t q5_perr : 1; - uint64_t q6_und : 1; - uint64_t q6_coff : 1; - uint64_t q6_perr : 1; - uint64_t q7_und : 1; - uint64_t q7_coff : 1; - uint64_t q7_perr : 1; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_fpa_int_enb_s cn30xx; - struct cvmx_fpa_int_enb_s cn31xx; - struct cvmx_fpa_int_enb_s cn38xx; - struct cvmx_fpa_int_enb_s cn38xxp2; - struct cvmx_fpa_int_enb_s cn50xx; - struct cvmx_fpa_int_enb_s cn52xx; - struct cvmx_fpa_int_enb_s cn52xxp1; - struct cvmx_fpa_int_enb_s cn56xx; - struct cvmx_fpa_int_enb_s cn56xxp1; - struct cvmx_fpa_int_enb_s cn58xx; - struct cvmx_fpa_int_enb_s cn58xxp1; -} cvmx_fpa_int_enb_t; - - -/** - * cvmx_fpa_int_sum - * - * FPA_INT_SUM = FPA's Interrupt Summary Register - * - * Contains the diffrent interrupt summary bits of the FPA. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t q7_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q7_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q7_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q6_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q6_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q6_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q5_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q5_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q5_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q4_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q4_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q4_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q3_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q3_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q3_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q2_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q2_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than than pointers - present in the FPA. */ - uint64_t q2_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q1_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q1_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than pointers - present in the FPA. */ - uint64_t q1_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t q0_perr : 1; /**< Set when a Queue0 pointer read from the stack in - the L2C does not have the FPA owner ship bit set. */ - uint64_t q0_coff : 1; /**< Set when a Queue0 stack end tag is present and - the count available is greater than pointers - present in the FPA. */ - uint64_t q0_und : 1; /**< Set when a Queue0 page count available goes - negative. */ - uint64_t fed1_dbe : 1; /**< Set when a Double Bit Error is detected in FPF1. */ - uint64_t fed1_sbe : 1; /**< Set when a Single Bit Error is detected in FPF1. */ - uint64_t fed0_dbe : 1; /**< Set when a Double Bit Error is detected in FPF0. */ - uint64_t fed0_sbe : 1; /**< Set when a Single Bit Error is detected in FPF0. */ -#else - uint64_t fed0_sbe : 1; - uint64_t fed0_dbe : 1; - uint64_t fed1_sbe : 1; - uint64_t fed1_dbe : 1; - uint64_t q0_und : 1; - uint64_t q0_coff : 1; - uint64_t q0_perr : 1; - uint64_t q1_und : 1; - uint64_t q1_coff : 1; - uint64_t q1_perr : 1; - uint64_t q2_und : 1; - uint64_t q2_coff : 1; - uint64_t q2_perr : 1; - uint64_t q3_und : 1; - uint64_t q3_coff : 1; - uint64_t q3_perr : 1; - uint64_t q4_und : 1; - uint64_t q4_coff : 1; - uint64_t q4_perr : 1; - uint64_t q5_und : 1; - uint64_t q5_coff : 1; - uint64_t q5_perr : 1; - uint64_t q6_und : 1; - uint64_t q6_coff : 1; - uint64_t q6_perr : 1; - uint64_t q7_und : 1; - uint64_t q7_coff : 1; - uint64_t q7_perr : 1; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_fpa_int_sum_s cn30xx; - struct cvmx_fpa_int_sum_s cn31xx; - struct cvmx_fpa_int_sum_s cn38xx; - struct cvmx_fpa_int_sum_s cn38xxp2; - struct cvmx_fpa_int_sum_s cn50xx; - struct cvmx_fpa_int_sum_s cn52xx; - struct cvmx_fpa_int_sum_s cn52xxp1; - struct cvmx_fpa_int_sum_s cn56xx; - struct cvmx_fpa_int_sum_s cn56xxp1; - struct cvmx_fpa_int_sum_s cn58xx; - struct cvmx_fpa_int_sum_s cn58xxp1; -} cvmx_fpa_int_sum_t; - - -/** - * cvmx_fpa_que#_available - * - * FPA_QUEX_PAGES_AVAILABLE = FPA's Queue 0-7 Free Page Available Register - * - * The number of page pointers that are available in the FPA and local DRAM. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_quex_available_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t que_siz : 29; /**< The number of free pages available in this Queue. */ -#else - uint64_t que_siz : 29; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_fpa_quex_available_s cn30xx; - struct cvmx_fpa_quex_available_s cn31xx; - struct cvmx_fpa_quex_available_s cn38xx; - struct cvmx_fpa_quex_available_s cn38xxp2; - struct cvmx_fpa_quex_available_s cn50xx; - struct cvmx_fpa_quex_available_s cn52xx; - struct cvmx_fpa_quex_available_s cn52xxp1; - struct cvmx_fpa_quex_available_s cn56xx; - struct cvmx_fpa_quex_available_s cn56xxp1; - struct cvmx_fpa_quex_available_s cn58xx; - struct cvmx_fpa_quex_available_s cn58xxp1; -} cvmx_fpa_quex_available_t; - - -/** - * cvmx_fpa_que#_page_index - * - * FPA_QUE0_PAGE_INDEX = FPA's Queue0 Page Index - * - * The present index page for queue 0 of the FPA. - * This numbr reflests the number of pages of pointers that have been written to memory - * for this queue. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_quex_page_index_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_25_63 : 39; - uint64_t pg_num : 25; /**< Page number. */ -#else - uint64_t pg_num : 25; - uint64_t reserved_25_63 : 39; -#endif - } s; - struct cvmx_fpa_quex_page_index_s cn30xx; - struct cvmx_fpa_quex_page_index_s cn31xx; - struct cvmx_fpa_quex_page_index_s cn38xx; - struct cvmx_fpa_quex_page_index_s cn38xxp2; - struct cvmx_fpa_quex_page_index_s cn50xx; - struct cvmx_fpa_quex_page_index_s cn52xx; - struct cvmx_fpa_quex_page_index_s cn52xxp1; - struct cvmx_fpa_quex_page_index_s cn56xx; - struct cvmx_fpa_quex_page_index_s cn56xxp1; - struct cvmx_fpa_quex_page_index_s cn58xx; - struct cvmx_fpa_quex_page_index_s cn58xxp1; -} cvmx_fpa_quex_page_index_t; - - -/** - * cvmx_fpa_que_act - * - * FPA_QUE_ACT = FPA's Queue# Actual Page Index - * - * When a INT_SUM[PERR#] occurs this will be latched with the value read from L2C. - * This is latched on the first error and will not latch again unitl all errors are cleared. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_que_act_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t act_que : 3; /**< FPA-queue-number read from memory. */ - uint64_t act_indx : 26; /**< Page number read from memory. */ -#else - uint64_t act_indx : 26; - uint64_t act_que : 3; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_fpa_que_act_s cn30xx; - struct cvmx_fpa_que_act_s cn31xx; - struct cvmx_fpa_que_act_s cn38xx; - struct cvmx_fpa_que_act_s cn38xxp2; - struct cvmx_fpa_que_act_s cn50xx; - struct cvmx_fpa_que_act_s cn52xx; - struct cvmx_fpa_que_act_s cn52xxp1; - struct cvmx_fpa_que_act_s cn56xx; - struct cvmx_fpa_que_act_s cn56xxp1; - struct cvmx_fpa_que_act_s cn58xx; - struct cvmx_fpa_que_act_s cn58xxp1; -} cvmx_fpa_que_act_t; - - -/** - * cvmx_fpa_que_exp - * - * FPA_QUE_EXP = FPA's Queue# Expected Page Index - * - * When a INT_SUM[PERR#] occurs this will be latched with the expected value. - * This is latched on the first error and will not latch again unitl all errors are cleared. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_que_exp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t exp_que : 3; /**< Expected fpa-queue-number read from memory. */ - uint64_t exp_indx : 26; /**< Expected page number read from memory. */ -#else - uint64_t exp_indx : 26; - uint64_t exp_que : 3; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_fpa_que_exp_s cn30xx; - struct cvmx_fpa_que_exp_s cn31xx; - struct cvmx_fpa_que_exp_s cn38xx; - struct cvmx_fpa_que_exp_s cn38xxp2; - struct cvmx_fpa_que_exp_s cn50xx; - struct cvmx_fpa_que_exp_s cn52xx; - struct cvmx_fpa_que_exp_s cn52xxp1; - struct cvmx_fpa_que_exp_s cn56xx; - struct cvmx_fpa_que_exp_s cn56xxp1; - struct cvmx_fpa_que_exp_s cn58xx; - struct cvmx_fpa_que_exp_s cn58xxp1; -} cvmx_fpa_que_exp_t; - - -/** - * cvmx_fpa_wart_ctl - * - * FPA_WART_CTL = FPA's WART Control - * - * Control and status for the WART block. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_wart_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ctl : 16; /**< Control information. */ -#else - uint64_t ctl : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_fpa_wart_ctl_s cn30xx; - struct cvmx_fpa_wart_ctl_s cn31xx; - struct cvmx_fpa_wart_ctl_s cn38xx; - struct cvmx_fpa_wart_ctl_s cn38xxp2; - struct cvmx_fpa_wart_ctl_s cn50xx; - struct cvmx_fpa_wart_ctl_s cn52xx; - struct cvmx_fpa_wart_ctl_s cn52xxp1; - struct cvmx_fpa_wart_ctl_s cn56xx; - struct cvmx_fpa_wart_ctl_s cn56xxp1; - struct cvmx_fpa_wart_ctl_s cn58xx; - struct cvmx_fpa_wart_ctl_s cn58xxp1; -} cvmx_fpa_wart_ctl_t; - - -/** - * cvmx_fpa_wart_status - * - * FPA_WART_STATUS = FPA's WART Status - * - * Control and status for the WART block. - */ -typedef union -{ - uint64_t u64; - struct cvmx_fpa_wart_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t status : 32; /**< Status information. */ -#else - uint64_t status : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_fpa_wart_status_s cn30xx; - struct cvmx_fpa_wart_status_s cn31xx; - struct cvmx_fpa_wart_status_s cn38xx; - struct cvmx_fpa_wart_status_s cn38xxp2; - struct cvmx_fpa_wart_status_s cn50xx; - struct cvmx_fpa_wart_status_s cn52xx; - struct cvmx_fpa_wart_status_s cn52xxp1; - struct cvmx_fpa_wart_status_s cn56xx; - struct cvmx_fpa_wart_status_s cn56xxp1; - struct cvmx_fpa_wart_status_s cn58xx; - struct cvmx_fpa_wart_status_s cn58xxp1; -} cvmx_fpa_wart_status_t; - - -/** - * cvmx_gmx#_bad_reg - * - * GMX_BAD_REG = A collection of things that have gone very, very wrong - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of INB_NXA, LOSTSTAT, OUT_OVR, are used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_bad_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t inb_nxa : 4; /**< Inbound port > GMX_RX_PRTS */ - uint64_t statovr : 1; /**< TX Statistics overflow */ - uint64_t loststat : 4; /**< TX Statistics data was over-written (per RGM port) - TX Stats are corrupted */ - uint64_t reserved_18_21 : 4; - uint64_t out_ovr : 16; /**< Outbound data FIFO overflow (per port) */ - uint64_t ncb_ovr : 1; /**< Outbound NCB FIFO Overflow */ - uint64_t out_col : 1; /**< Outbound collision occured between PKO and NCB */ -#else - uint64_t out_col : 1; - uint64_t ncb_ovr : 1; - uint64_t out_ovr : 16; - uint64_t reserved_18_21 : 4; - uint64_t loststat : 4; - uint64_t statovr : 1; - uint64_t inb_nxa : 4; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_gmxx_bad_reg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t inb_nxa : 4; /**< Inbound port > GMX_RX_PRTS */ - uint64_t statovr : 1; /**< TX Statistics overflow */ - uint64_t reserved_25_25 : 1; - uint64_t loststat : 3; /**< TX Statistics data was over-written (per RGM port) - TX Stats are corrupted */ - uint64_t reserved_5_21 : 17; - uint64_t out_ovr : 3; /**< Outbound data FIFO overflow (per port) */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t out_ovr : 3; - uint64_t reserved_5_21 : 17; - uint64_t loststat : 3; - uint64_t reserved_25_25 : 1; - uint64_t statovr : 1; - uint64_t inb_nxa : 4; - uint64_t reserved_31_63 : 33; -#endif - } cn30xx; - struct cvmx_gmxx_bad_reg_cn30xx cn31xx; - struct cvmx_gmxx_bad_reg_s cn38xx; - struct cvmx_gmxx_bad_reg_s cn38xxp2; - struct cvmx_gmxx_bad_reg_cn30xx cn50xx; - struct cvmx_gmxx_bad_reg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t inb_nxa : 4; /**< Inbound port > GMX_RX_PRTS */ - uint64_t statovr : 1; /**< TX Statistics overflow - The common FIFO to SGMII and XAUI had an overflow - TX Stats are corrupted */ - uint64_t loststat : 4; /**< TX Statistics data was over-written - In SGMII, one bit per port - In XAUI, only port0 is used - TX Stats are corrupted */ - uint64_t reserved_6_21 : 16; - uint64_t out_ovr : 4; /**< Outbound data FIFO overflow (per port) */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t out_ovr : 4; - uint64_t reserved_6_21 : 16; - uint64_t loststat : 4; - uint64_t statovr : 1; - uint64_t inb_nxa : 4; - uint64_t reserved_31_63 : 33; -#endif - } cn52xx; - struct cvmx_gmxx_bad_reg_cn52xx cn52xxp1; - struct cvmx_gmxx_bad_reg_cn52xx cn56xx; - struct cvmx_gmxx_bad_reg_cn52xx cn56xxp1; - struct cvmx_gmxx_bad_reg_s cn58xx; - struct cvmx_gmxx_bad_reg_s cn58xxp1; -} cvmx_gmxx_bad_reg_t; - - -/** - * cvmx_gmx#_bist - * - * GMX_BIST = GMX BIST Results - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_bist_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t status : 17; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - - 0: gmx#.inb.fif_bnk0 - - 1: gmx#.inb.fif_bnk1 - - 2: gmx#.inb.fif_bnk2 - - 3: gmx#.inb.fif_bnk3 - - 4: gmx#.outb.fif.fif_bnk0 - - 5: gmx#.outb.fif.fif_bnk1 - - 6: gmx#.outb.fif.fif_bnk2 - - 7: gmx#.outb.fif.fif_bnk3 - - 8: gmx#.csr.gmi0.srf8x64m1_bist - - 9: gmx#.csr.gmi1.srf8x64m1_bist - - 10: gmx#.csr.gmi2.srf8x64m1_bist - - 11: gmx#.csr.gmi3.srf8x64m1_bist - - 12: gmx#.csr.drf20x80m1_bist - - 13: gmx#.outb.stat.drf16x27m1_bist - - 14: gmx#.outb.stat.drf40x64m1_bist - - 15: gmx#.outb.ncb.drf16x76m1_bist - - 16: gmx#.outb.fif.srf32x16m2_bist */ -#else - uint64_t status : 17; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_gmxx_bist_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t status : 10; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - - 0: gmx#.inb.dpr512x78m4_bist - - 1: gmx#.outb.fif.dpr512x71m4_bist - - 2: gmx#.csr.gmi0.srf8x64m1_bist - - 3: gmx#.csr.gmi1.srf8x64m1_bist - - 4: gmx#.csr.gmi2.srf8x64m1_bist - - 5: 0 - - 6: gmx#.csr.drf20x80m1_bist - - 7: gmx#.outb.stat.drf16x27m1_bist - - 8: gmx#.outb.stat.drf40x64m1_bist - - 9: 0 */ -#else - uint64_t status : 10; - uint64_t reserved_10_63 : 54; -#endif - } cn30xx; - struct cvmx_gmxx_bist_cn30xx cn31xx; - struct cvmx_gmxx_bist_cn30xx cn38xx; - struct cvmx_gmxx_bist_cn30xx cn38xxp2; - struct cvmx_gmxx_bist_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t status : 12; /**< BIST Results. - HW sets a bit in BIST for for memory that fails */ -#else - uint64_t status : 12; - uint64_t reserved_12_63 : 52; -#endif - } cn50xx; - struct cvmx_gmxx_bist_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t status : 16; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - - 0: gmx#.inb.fif_bnk0 - - 1: gmx#.inb.fif_bnk1 - - 2: gmx#.inb.fif_bnk2 - - 3: gmx#.inb.fif_bnk3 - - 4: gmx#.outb.fif.fif_bnk0 - - 5: gmx#.outb.fif.fif_bnk1 - - 6: gmx#.outb.fif.fif_bnk2 - - 7: gmx#.outb.fif.fif_bnk3 - - 8: gmx#.csr.gmi0.srf8x64m1_bist - - 9: gmx#.csr.gmi1.srf8x64m1_bist - - 10: gmx#.csr.gmi2.srf8x64m1_bist - - 11: gmx#.csr.gmi3.srf8x64m1_bist - - 12: gmx#.csr.drf20x80m1_bist - - 13: gmx#.outb.stat.drf16x27m1_bist - - 14: gmx#.outb.stat.drf40x64m1_bist - - 15: xgmii.tx.drf16x38m1_async_bist */ -#else - uint64_t status : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn52xx; - struct cvmx_gmxx_bist_cn52xx cn52xxp1; - struct cvmx_gmxx_bist_cn52xx cn56xx; - struct cvmx_gmxx_bist_cn52xx cn56xxp1; - struct cvmx_gmxx_bist_s cn58xx; - struct cvmx_gmxx_bist_s cn58xxp1; -} cvmx_gmxx_bist_t; - - -/** - * cvmx_gmx#_clk_en - * - * DO NOT DOCUMENT THIS REGISTER - IT IS NOT OFFICIAL - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_clk_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t clk_en : 1; /**< Force the clock enables on */ -#else - uint64_t clk_en : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_clk_en_s cn52xx; - struct cvmx_gmxx_clk_en_s cn52xxp1; - struct cvmx_gmxx_clk_en_s cn56xx; - struct cvmx_gmxx_clk_en_s cn56xxp1; -} cvmx_gmxx_clk_en_t; - - -/** - * cvmx_gmx#_hg2_control - * - * Notes: - * The HiGig2 TX and RX enable would normally be both set together for HiGig2 messaging. However - * setting just the TX or RX bit will result in only the HG2 message transmit or the receive - * capability. - * PHYS_EN and LOGL_EN bits when 1, allow link pause or back pressure to PKO as per received - * HiGig2 message. When 0, link pause and back pressure to PKO in response to received messages - * are disabled. - * - * GMX*_TX_XAUI_CTL[HG_EN] must be set to one(to enable HiGig) whenever either HG2TX_EN or HG2RX_EN - * are set. - * - * GMX*_RX0_UDD_SKP[LEN] must be set to 16 (to select HiGig2) whenever either HG2TX_EN or HG2RX_EN - * are set. - * - * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero - * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol when - * GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by GMX*_TX_XAUI_CTL[HG_EN]=1 - * and GMX*_RX0_UDD_SKP[LEN]=16.) The HW can only auto-generate backpressure via HiGig2 messages - * (optionally, when HG2TX_EN=1) with the HiGig2 protocol. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_hg2_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t hg2tx_en : 1; /**< Enable Transmission of HG2 phys and logl messages - When set, also disables HW auto-generated (802.3 - and CBFC) pause frames. (OCTEON cannot generate - proper 802.3 or CBFC pause frames in HiGig2 mode.) */ - uint64_t hg2rx_en : 1; /**< Enable extraction and processing of HG2 message - packet from RX flow. Physical logical pause info - is used to pause physical link, back pressure PKO - HG2RX_EN must be set when HiGig2 messages are - present in the receive stream. */ - uint64_t phys_en : 1; /**< 1 bit physical link pause enable for recevied - HiGig2 physical pause message */ - uint64_t logl_en : 16; /**< 16 bit xof enables for recevied HiGig2 messages - or CBFC packets */ -#else - uint64_t logl_en : 16; - uint64_t phys_en : 1; - uint64_t hg2rx_en : 1; - uint64_t hg2tx_en : 1; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_gmxx_hg2_control_s cn52xx; - struct cvmx_gmxx_hg2_control_s cn52xxp1; - struct cvmx_gmxx_hg2_control_s cn56xx; -} cvmx_gmxx_hg2_control_t; - - -/** - * cvmx_gmx#_inf_mode - * - * GMX_INF_MODE = Interface Mode - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_inf_mode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t speed : 2; /**< Interface Speed - - 0: 1.250GHz - - 1: 2.500GHz - - 2: 3.125GHz - - 3: 3.750GHz */ - uint64_t reserved_6_7 : 2; - uint64_t mode : 2; /**< Interface Electrical Operating Mode - - 0: Disabled (PCIe) - - 1: XAUI (IEEE 802.3-2005) - - 2: SGMII (v1.8) - - 3: PICMG3.1 */ - uint64_t reserved_3_3 : 1; - uint64_t p0mii : 1; /**< Port 0 Interface Mode - - 0: Port 0 is RGMII - - 1: Port 0 is MII */ - uint64_t en : 1; /**< Interface Enable */ - uint64_t type : 1; /**< Interface Mode - - 0: RGMII Mode - - 1: Spi4 Mode */ -#else - uint64_t type : 1; - uint64_t en : 1; - uint64_t p0mii : 1; - uint64_t reserved_3_3 : 1; - uint64_t mode : 2; - uint64_t reserved_6_7 : 2; - uint64_t speed : 2; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_gmxx_inf_mode_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t p0mii : 1; /**< Port 0 Interface Mode - - 0: Port 0 is RGMII - - 1: Port 0 is MII */ - uint64_t en : 1; /**< Interface Enable - Must be set to enable the packet interface. - Should be enabled before any other requests to - GMX including enabling port back pressure with - IPD_CTL_STATUS[PBP_EN] */ - uint64_t type : 1; /**< Port 1/2 Interface Mode - - 0: Ports 1 and 2 are RGMII - - 1: Port 1 is GMII/MII, Port 2 is unused - GMII/MII is selected by GMX_PRT1_CFG[SPEED] */ -#else - uint64_t type : 1; - uint64_t en : 1; - uint64_t p0mii : 1; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_gmxx_inf_mode_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t en : 1; /**< Interface Enable - Must be set to enable the packet interface. - Should be enabled before any other requests to - GMX including enabling port back pressure with - IPD_CTL_STATUS[PBP_EN] */ - uint64_t type : 1; /**< Interface Mode - - 0: All three ports are RGMII ports - - 1: prt0 is RGMII, prt1 is GMII, and prt2 is unused */ -#else - uint64_t type : 1; - uint64_t en : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn31xx; - struct cvmx_gmxx_inf_mode_cn31xx cn38xx; - struct cvmx_gmxx_inf_mode_cn31xx cn38xxp2; - struct cvmx_gmxx_inf_mode_cn30xx cn50xx; - struct cvmx_gmxx_inf_mode_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t speed : 2; /**< Interface Speed - - 0: 1.250GHz - - 1: 2.500GHz - - 2: 3.125GHz - - 3: 3.750GHz */ - uint64_t reserved_6_7 : 2; - uint64_t mode : 2; /**< Interface Electrical Operating Mode - - 0: Disabled (PCIe) - - 1: XAUI (IEEE 802.3-2005) - - 2: SGMII (v1.8) - - 3: PICMG3.1 */ - uint64_t reserved_2_3 : 2; - uint64_t en : 1; /**< Interface Enable - Must be set to enable the packet interface. - Should be enabled before any other requests to - GMX including enabling port back pressure with - IPD_CTL_STATUS[PBP_EN] */ - uint64_t type : 1; /**< Interface Protocol Type - - 0: SGMII/1000Base-X - - 1: XAUI */ -#else - uint64_t type : 1; - uint64_t en : 1; - uint64_t reserved_2_3 : 2; - uint64_t mode : 2; - uint64_t reserved_6_7 : 2; - uint64_t speed : 2; - uint64_t reserved_10_63 : 54; -#endif - } cn52xx; - struct cvmx_gmxx_inf_mode_cn52xx cn52xxp1; - struct cvmx_gmxx_inf_mode_cn52xx cn56xx; - struct cvmx_gmxx_inf_mode_cn52xx cn56xxp1; - struct cvmx_gmxx_inf_mode_cn31xx cn58xx; - struct cvmx_gmxx_inf_mode_cn31xx cn58xxp1; -} cvmx_gmxx_inf_mode_t; - - -/** - * cvmx_gmx#_nxa_adr - * - * GMX_NXA_ADR = NXA Port Address - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_nxa_adr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t prt : 6; /**< Logged address for NXA exceptions - The logged address will be from the first - exception that caused the problem. NCB has - higher priority than PKO and will win. */ -#else - uint64_t prt : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_gmxx_nxa_adr_s cn30xx; - struct cvmx_gmxx_nxa_adr_s cn31xx; - struct cvmx_gmxx_nxa_adr_s cn38xx; - struct cvmx_gmxx_nxa_adr_s cn38xxp2; - struct cvmx_gmxx_nxa_adr_s cn50xx; - struct cvmx_gmxx_nxa_adr_s cn52xx; - struct cvmx_gmxx_nxa_adr_s cn52xxp1; - struct cvmx_gmxx_nxa_adr_s cn56xx; - struct cvmx_gmxx_nxa_adr_s cn56xxp1; - struct cvmx_gmxx_nxa_adr_s cn58xx; - struct cvmx_gmxx_nxa_adr_s cn58xxp1; -} cvmx_gmxx_nxa_adr_t; - - -/** - * cvmx_gmx#_prt#_cbfc_ctl - * - * ** HG2 message CSRs end - * - * - * Notes: - * XOFF for a specific port is XOFF<prt> = (PHYS_EN<prt> & PHYS_BP) | (LOGL_EN<prt> & LOGL_BP<prt>) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_prtx_cbfc_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t phys_en : 16; /**< Determines which ports will have physical - backpressure pause packets. - The value pplaced in the Class Enable Vector - field of the CBFC pause packet will be - PHYS_EN | LOGL_EN */ - uint64_t logl_en : 16; /**< Determines which ports will have logical - backpressure pause packets. - The value pplaced in the Class Enable Vector - field of the CBFC pause packet will be - PHYS_EN | LOGL_EN */ - uint64_t phys_bp : 16; /**< When RX_EN is set and the HW is backpressuring any - ports (from either CBFC pause packets or the - GMX_TX_OVR_BP[TX_PRT_BP] register) and all ports - indiciated by PHYS_BP are backpressured, simulate - physical backpressure by defering all packets on - the transmitter. */ - uint64_t reserved_4_15 : 12; - uint64_t bck_en : 1; /**< Forward CBFC Pause information to BP block */ - uint64_t drp_en : 1; /**< Drop Control CBFC Pause Frames */ - uint64_t tx_en : 1; /**< When set, allow for CBFC Pause Packets - Must be clear in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ - uint64_t rx_en : 1; /**< When set, allow for CBFC Pause Packets - Must be clear in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ -#else - uint64_t rx_en : 1; - uint64_t tx_en : 1; - uint64_t drp_en : 1; - uint64_t bck_en : 1; - uint64_t reserved_4_15 : 12; - uint64_t phys_bp : 16; - uint64_t logl_en : 16; - uint64_t phys_en : 16; -#endif - } s; - struct cvmx_gmxx_prtx_cbfc_ctl_s cn52xx; - struct cvmx_gmxx_prtx_cbfc_ctl_s cn56xx; -} cvmx_gmxx_prtx_cbfc_ctl_t; - - -/** - * cvmx_gmx#_prt#_cfg - * - * GMX_PRT_CFG = Port description - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_prtx_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t tx_idle : 1; /**< TX Machine is idle */ - uint64_t rx_idle : 1; /**< RX Machine is idle */ - uint64_t reserved_9_11 : 3; - uint64_t speed_msb : 1; /**< Link Speed MSB [SPEED_MSB:SPEED] - 10 = 10Mbs operation - 00 = 100Mbs operation - 01 = 1000Mbs operation - 11 = Reserved - (SGMII/1000Base-X only) */ - uint64_t reserved_4_7 : 4; - uint64_t slottime : 1; /**< Slot Time for Half-Duplex operation - 0 = 512 bitimes (10/100Mbs operation) - 1 = 4096 bitimes (1000Mbs operation) */ - uint64_t duplex : 1; /**< Duplex - 0 = Half Duplex (collisions/extentions/bursts) - 1 = Full Duplex */ - uint64_t speed : 1; /**< Link Speed - 0 = 10/100Mbs operation - (GMX_TX_CLK[CLK_CNT] > 1) - 1 = 1000Mbs operation */ - uint64_t en : 1; /**< Link Enable - When EN is clear, packets will not be received - or transmitted (including PAUSE and JAM packets). - If EN is cleared while a packet is currently - being received or transmitted, the packet will - be allowed to complete before the bus is idled. - On the RX side, subsequent packets in a burst - will be ignored. */ -#else - uint64_t en : 1; - uint64_t speed : 1; - uint64_t duplex : 1; - uint64_t slottime : 1; - uint64_t reserved_4_7 : 4; - uint64_t speed_msb : 1; - uint64_t reserved_9_11 : 3; - uint64_t rx_idle : 1; - uint64_t tx_idle : 1; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_gmxx_prtx_cfg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t slottime : 1; /**< Slot Time for Half-Duplex operation - 0 = 512 bitimes (10/100Mbs operation) - 1 = 4096 bitimes (1000Mbs operation) */ - uint64_t duplex : 1; /**< Duplex - 0 = Half Duplex (collisions/extentions/bursts) - 1 = Full Duplex */ - uint64_t speed : 1; /**< Link Speed - 0 = 10/100Mbs operation - (in RGMII mode, GMX_TX_CLK[CLK_CNT] > 1) - (in MII mode, GMX_TX_CLK[CLK_CNT] == 1) - 1 = 1000Mbs operation */ - uint64_t en : 1; /**< Link Enable - When EN is clear, packets will not be received - or transmitted (including PAUSE and JAM packets). - If EN is cleared while a packet is currently - being received or transmitted, the packet will - be allowed to complete before the bus is idled. - On the RX side, subsequent packets in a burst - will be ignored. */ -#else - uint64_t en : 1; - uint64_t speed : 1; - uint64_t duplex : 1; - uint64_t slottime : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_gmxx_prtx_cfg_cn30xx cn31xx; - struct cvmx_gmxx_prtx_cfg_cn30xx cn38xx; - struct cvmx_gmxx_prtx_cfg_cn30xx cn38xxp2; - struct cvmx_gmxx_prtx_cfg_cn30xx cn50xx; - struct cvmx_gmxx_prtx_cfg_s cn52xx; - struct cvmx_gmxx_prtx_cfg_s cn52xxp1; - struct cvmx_gmxx_prtx_cfg_s cn56xx; - struct cvmx_gmxx_prtx_cfg_s cn56xxp1; - struct cvmx_gmxx_prtx_cfg_cn30xx cn58xx; - struct cvmx_gmxx_prtx_cfg_cn30xx cn58xxp1; -} cvmx_gmxx_prtx_cfg_t; - - -/** - * cvmx_gmx#_rx#_adr_cam0 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam0_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam0_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam0_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam0_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam0_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam0_t; - - -/** - * cvmx_gmx#_rx#_adr_cam1 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam1_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam1_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam1_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam1_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam1_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam1_t; - - -/** - * cvmx_gmx#_rx#_adr_cam2 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam2_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam2_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam2_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam2_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam2_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam2_t; - - -/** - * cvmx_gmx#_rx#_adr_cam3 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam3_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam3_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam3_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam3_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam3_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam3_t; - - -/** - * cvmx_gmx#_rx#_adr_cam4 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam4_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam4_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam4_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam4_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam4_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam4_t; - - -/** - * cvmx_gmx#_rx#_adr_cam5 - * - * GMX_RX_ADR_CAM = Address Filtering Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t adr : 64; /**< The DMAC address to match on - Each entry contributes 8bits to one of 8 matchers - Write transactions to GMX_RX_ADR_CAM will not - change the CSR when GMX_PRT_CFG[EN] is enabled - The CAM matches against unicst or multicst DMAC - addresses. */ -#else - uint64_t adr : 64; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam5_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam5_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam5_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam5_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam5_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam5_t; - - -/** - * cvmx_gmx#_rx#_adr_cam_en - * - * GMX_RX_ADR_CAM_EN = Address Filtering Control Enable - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_cam_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t en : 8; /**< CAM Entry Enables */ -#else - uint64_t en : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_gmxx_rxx_adr_cam_en_s cn30xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn31xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn38xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_cam_en_s cn50xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn52xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_cam_en_s cn56xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_cam_en_s cn58xx; - struct cvmx_gmxx_rxx_adr_cam_en_s cn58xxp1; -} cvmx_gmxx_rxx_adr_cam_en_t; - - -/** - * cvmx_gmx#_rx#_adr_ctl - * - * GMX_RX_ADR_CTL = Address Filtering Control - * - * - * Notes: - * * ALGORITHM - * Here is some pseudo code that represents the address filter behavior. - * - * @verbatim - * bool dmac_addr_filter(uint8 prt, uint48 dmac) [ - * ASSERT(prt >= 0 && prt <= 3); - * if (is_bcst(dmac)) // broadcast accept - * return (GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT); - * if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 1) // multicast reject - * return REJECT; - * if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 2) // multicast accept - * return ACCEPT; - * - * cam_hit = 0; - * - * for (i=0; i<8; i++) [ - * if (GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0) - * continue; - * uint48 unswizzled_mac_adr = 0x0; - * for (j=5; j>=0; j--) [ - * unswizzled_mac_adr = (unswizzled_mac_adr << 8) | GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>]; - * ] - * if (unswizzled_mac_adr == dmac) [ - * cam_hit = 1; - * break; - * ] - * ] - * - * if (cam_hit) - * return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT); - * else - * return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT); - * ] - * @endverbatim - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_adr_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t cam_mode : 1; /**< Allow or deny DMAC address filter - 0 = reject the packet on DMAC address match - 1 = accept the packet on DMAC address match */ - uint64_t mcst : 2; /**< Multicast Mode - 0 = Use the Address Filter CAM - 1 = Force reject all multicast packets - 2 = Force accept all multicast packets - 3 = Reserved */ - uint64_t bcst : 1; /**< Accept All Broadcast Packets */ -#else - uint64_t bcst : 1; - uint64_t mcst : 2; - uint64_t cam_mode : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_rxx_adr_ctl_s cn30xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn31xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn38xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn38xxp2; - struct cvmx_gmxx_rxx_adr_ctl_s cn50xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn52xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn52xxp1; - struct cvmx_gmxx_rxx_adr_ctl_s cn56xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn56xxp1; - struct cvmx_gmxx_rxx_adr_ctl_s cn58xx; - struct cvmx_gmxx_rxx_adr_ctl_s cn58xxp1; -} cvmx_gmxx_rxx_adr_ctl_t; - - -/** - * cvmx_gmx#_rx#_decision - * - * GMX_RX_DECISION = The byte count to decide when to accept or filter a packet - * - * - * Notes: - * As each byte in a packet is received by GMX, the L2 byte count is compared - * against the GMX_RX_DECISION[CNT]. The L2 byte count is the number of bytes - * from the beginning of the L2 header (DMAC). In normal operation, the L2 - * header begins after the PREAMBLE+SFD (GMX_RX_FRM_CTL[PRE_CHK]=1) and any - * optional UDD skip data (GMX_RX_UDD_SKP[LEN]). - * - * When GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the - * packet and would require UDD skip length to account for them. - * - * L2 Size - * Port Mode <GMX_RX_DECISION bytes (default=24) >=GMX_RX_DECISION bytes (default=24) - * - * Full Duplex accept packet apply filters - * no filtering is applied accept packet based on DMAC and PAUSE packet filters - * - * Half Duplex drop packet apply filters - * packet is unconditionally dropped accept packet based on DMAC - * - * where l2_size = MAX(0, total_packet_size - GMX_RX_UDD_SKP[LEN] - ((GMX_RX_FRM_CTL[PRE_CHK]==1)*8) - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_decision_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t cnt : 5; /**< The byte count to decide when to accept or filter - a packet. */ -#else - uint64_t cnt : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_gmxx_rxx_decision_s cn30xx; - struct cvmx_gmxx_rxx_decision_s cn31xx; - struct cvmx_gmxx_rxx_decision_s cn38xx; - struct cvmx_gmxx_rxx_decision_s cn38xxp2; - struct cvmx_gmxx_rxx_decision_s cn50xx; - struct cvmx_gmxx_rxx_decision_s cn52xx; - struct cvmx_gmxx_rxx_decision_s cn52xxp1; - struct cvmx_gmxx_rxx_decision_s cn56xx; - struct cvmx_gmxx_rxx_decision_s cn56xxp1; - struct cvmx_gmxx_rxx_decision_s cn58xx; - struct cvmx_gmxx_rxx_decision_s cn58xxp1; -} cvmx_gmxx_rxx_decision_t; - - -/** - * cvmx_gmx#_rx#_frm_chk - * - * GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame - * - * - * Notes: - * If GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW. - * - * In XAUI mode prt0 is used for checking. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_frm_chk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_gmxx_rxx_frm_chk_s cn30xx; - struct cvmx_gmxx_rxx_frm_chk_s cn31xx; - struct cvmx_gmxx_rxx_frm_chk_s cn38xx; - struct cvmx_gmxx_rxx_frm_chk_s cn38xxp2; - struct cvmx_gmxx_rxx_frm_chk_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t reserved_6_6 : 1; - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t reserved_6_6 : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn50xx; - struct cvmx_gmxx_rxx_frm_chk_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with Data reception error */ - uint64_t reserved_5_6 : 2; - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< Carrier extend error - (SGMII/1000Base-X only) */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t reserved_5_6 : 2; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn52xx; - struct cvmx_gmxx_rxx_frm_chk_cn52xx cn52xxp1; - struct cvmx_gmxx_rxx_frm_chk_cn52xx cn56xx; - struct cvmx_gmxx_rxx_frm_chk_cn52xx cn56xxp1; - struct cvmx_gmxx_rxx_frm_chk_s cn58xx; - struct cvmx_gmxx_rxx_frm_chk_s cn58xxp1; -} cvmx_gmxx_rxx_frm_chk_t; - - -/** - * cvmx_gmx#_rx#_frm_ctl - * - * GMX_RX_FRM_CTL = Frame Control - * - * - * Notes: - * * PRE_CHK - * When set, the RX state expects a typical frame consisting of - * INTER_FRAME=>PREAMBLE(x7)=>SFD(x1)=>DAT. The state machine watches for - * this exact sequence in order to recognize a valid frame and push frame - * data into the Octane. There must be exactly 7 PREAMBLE cycles followed by - * the single SFD cycle for the frame to be accepted. - * - * When a problem does occur within the PREAMBLE seqeunce, the frame is - * marked as bad and not sent into the core. The GMX_RX_INT_REG[PCTERR] - * interrupt is also raised. - * - * * PRE_STRP - * When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP - * determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane - * core as part of the packet. - * - * In either mode, the PREAMBLE+SFD bytes are not counted toward the packet - * size when checking against the MIN and MAX bounds. Furthermore, the bytes - * are skipped when locating the start of the L2 header for DMAC and Control - * frame recognition. - * - * * CTL_BCK/CTL_DRP - * These bits control how the HW handles incoming PAUSE packets. Here are - * the most common modes of operation: - * CTL_BCK=1,CTL_DRP=1 - HW does it all - * CTL_BCK=0,CTL_DRP=0 - SW sees all pause frames - * CTL_BCK=0,CTL_DRP=1 - all pause frames are completely ignored - * - * These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode. - * Since PAUSE packets only apply to fulldup operation, any PAUSE packet - * would constitute an exception which should be handled by the processing - * cores. PAUSE packets should not be forwarded. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_frm_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t null_dis : 1; /**< When set, do not modify the MOD bits on NULL ticks - due to PARITAL packets - In spi4 mode, all ports use prt0 for checking. */ - uint64_t pre_align : 1; /**< When set, PREAMBLE parser aligns the the SFD byte - regardless of the number of previous PREAMBLE - nibbles. In this mode, PREAMBLE can be consumed - by the HW so when PRE_ALIGN is set, PRE_FREE, - PRE_STRP must be set for correct operation. - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t pad_len : 1; /**< When set, disables the length check for non-min - sized pkts with padding in the client data - (PASS3 Only) */ - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts - (PASS2 only) */ - uint64_t pre_free : 1; /**< When set, PREAMBLE checking is less strict. - 0 - 254 cycles of PREAMBLE followed by SFD */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t vlan_len : 1; - uint64_t pad_len : 1; - uint64_t pre_align : 1; - uint64_t null_dis : 1; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_gmxx_rxx_frm_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t pad_len : 1; /**< When set, disables the length check for non-min - sized pkts with padding in the client data */ - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */ - uint64_t pre_free : 1; /**< Allows for less strict PREAMBLE checking. - 0-7 cycles of PREAMBLE followed by SFD (pass 1.0) - 0-254 cycles of PREAMBLE followed by SFD (else) */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t vlan_len : 1; - uint64_t pad_len : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn30xx; - struct cvmx_gmxx_rxx_frm_ctl_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */ - uint64_t pre_free : 1; /**< Allows for less strict PREAMBLE checking. - 0 - 7 cycles of PREAMBLE followed by SFD (pass1.0) - 0 - 254 cycles of PREAMBLE followed by SFD (else) */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t vlan_len : 1; - uint64_t reserved_8_63 : 56; -#endif - } cn31xx; - struct cvmx_gmxx_rxx_frm_ctl_cn30xx cn38xx; - struct cvmx_gmxx_rxx_frm_ctl_cn31xx cn38xxp2; - struct cvmx_gmxx_rxx_frm_ctl_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t null_dis : 1; /**< When set, do not modify the MOD bits on NULL ticks - due to PARITAL packets */ - uint64_t pre_align : 1; /**< When set, PREAMBLE parser aligns the the SFD byte - regardless of the number of previous PREAMBLE - nibbles. In this mode, PREAMBLE can be consumed - by the HW so when PRE_ALIGN is set, PRE_FREE, - PRE_STRP must be set for correct operation. - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t reserved_7_8 : 2; - uint64_t pre_free : 1; /**< Allows for less strict PREAMBLE checking. - 0-254 cycles of PREAMBLE followed by SFD */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t reserved_7_8 : 2; - uint64_t pre_align : 1; - uint64_t null_dis : 1; - uint64_t reserved_11_63 : 53; -#endif - } cn50xx; - struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn52xx; - struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn52xxp1; - struct cvmx_gmxx_rxx_frm_ctl_cn50xx cn56xx; - struct cvmx_gmxx_rxx_frm_ctl_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pre_align : 1; /**< When set, PREAMBLE parser aligns the the SFD byte - regardless of the number of previous PREAMBLE - nibbles. In this mode, PRE_STRP should be set to - account for the variable nature of the PREAMBLE. - PRE_CHK must be set to enable this and all - PREAMBLE features. - (SGMII at 10/100Mbs only) */ - uint64_t reserved_7_8 : 2; - uint64_t pre_free : 1; /**< When set, PREAMBLE checking is less strict. - 0 - 254 cycles of PREAMBLE followed by SFD - PRE_CHK must be set to enable this and all - PREAMBLE features. - (SGMII/1000Base-X only) */ - uint64_t ctl_smac : 1; /**< Control Pause Frames can match station SMAC */ - uint64_t ctl_mcst : 1; /**< Control Pause Frames can match globally assign - Multicast address */ - uint64_t ctl_bck : 1; /**< Forward pause information to TX block */ - uint64_t ctl_drp : 1; /**< Drop Control Pause Frames */ - uint64_t pre_strp : 1; /**< Strip off the preamble (when present) - 0=PREAMBLE+SFD is sent to core as part of frame - 1=PREAMBLE+SFD is dropped - PRE_CHK must be set to enable this and all - PREAMBLE features. */ - uint64_t pre_chk : 1; /**< This port is configured to send PREAMBLE+SFD - to begin every frame. GMX checks that the - PREAMBLE is sent correctly. - When GMX_TX_XAUI_CTL[HG_EN] is set, PRE_CHK - must be zero. */ -#else - uint64_t pre_chk : 1; - uint64_t pre_strp : 1; - uint64_t ctl_drp : 1; - uint64_t ctl_bck : 1; - uint64_t ctl_mcst : 1; - uint64_t ctl_smac : 1; - uint64_t pre_free : 1; - uint64_t reserved_7_8 : 2; - uint64_t pre_align : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn56xxp1; - struct cvmx_gmxx_rxx_frm_ctl_s cn58xx; - struct cvmx_gmxx_rxx_frm_ctl_cn30xx cn58xxp1; -} cvmx_gmxx_rxx_frm_ctl_t; - - -/** - * cvmx_gmx#_rx#_frm_max - * - * GMX_RX_FRM_MAX = Frame Max length - * - * - * Notes: - * In spi4 mode, all spi4 ports use prt0 for checking. - * - * When changing the LEN field, be sure that LEN does not exceed - * GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that - * are within the maximum length parameter to be rejected because they exceed - * the GMX_RX_JABBER[CNT] limit. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_frm_max_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t len : 16; /**< Byte count for Max-sized frame check - Failing packets set the MAXERR interrupt and are - optionally sent with opcode==MAXERR - LEN =< GMX_RX_JABBER[CNT] */ -#else - uint64_t len : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_rxx_frm_max_s cn30xx; - struct cvmx_gmxx_rxx_frm_max_s cn31xx; - struct cvmx_gmxx_rxx_frm_max_s cn38xx; - struct cvmx_gmxx_rxx_frm_max_s cn38xxp2; - struct cvmx_gmxx_rxx_frm_max_s cn58xx; - struct cvmx_gmxx_rxx_frm_max_s cn58xxp1; -} cvmx_gmxx_rxx_frm_max_t; - - -/** - * cvmx_gmx#_rx#_frm_min - * - * GMX_RX_FRM_MIN = Frame Min length - * - * - * Notes: - * In spi4 mode, all spi4 ports use prt0 for checking. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_frm_min_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t len : 16; /**< Byte count for Min-sized frame check - Failing packets set the MINERR interrupt and are - optionally sent with opcode==MINERR */ -#else - uint64_t len : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_rxx_frm_min_s cn30xx; - struct cvmx_gmxx_rxx_frm_min_s cn31xx; - struct cvmx_gmxx_rxx_frm_min_s cn38xx; - struct cvmx_gmxx_rxx_frm_min_s cn38xxp2; - struct cvmx_gmxx_rxx_frm_min_s cn58xx; - struct cvmx_gmxx_rxx_frm_min_s cn58xxp1; -} cvmx_gmxx_rxx_frm_min_t; - - -/** - * cvmx_gmx#_rx#_ifg - * - * GMX_RX_IFG = RX Min IFG - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_ifg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ifg : 4; /**< Min IFG between packets used to determine IFGERR - 1000Mbs, IFG==0.096us or 12 clks - 100Mbs, IFG==0.96us or 24 clks - 10Mbs, IFG==9.6us or 24 clks - In order to simplify the programming model, - IFG is doubled internally when - GMX_PRT_CFG[SPEED]==0. */ -#else - uint64_t ifg : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_rxx_ifg_s cn30xx; - struct cvmx_gmxx_rxx_ifg_s cn31xx; - struct cvmx_gmxx_rxx_ifg_s cn38xx; - struct cvmx_gmxx_rxx_ifg_s cn38xxp2; - struct cvmx_gmxx_rxx_ifg_s cn50xx; - struct cvmx_gmxx_rxx_ifg_s cn52xx; - struct cvmx_gmxx_rxx_ifg_s cn52xxp1; - struct cvmx_gmxx_rxx_ifg_s cn56xx; - struct cvmx_gmxx_rxx_ifg_s cn56xxp1; - struct cvmx_gmxx_rxx_ifg_s cn58xx; - struct cvmx_gmxx_rxx_ifg_s cn58xxp1; -} cvmx_gmxx_rxx_ifg_t; - - -/** - * cvmx_gmx#_rx#_int_en - * - * GMX_RX_INT_EN = Interrupt Enable - * - * - * Notes: - * In XAUI mode prt0 is used for checking. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t hg2cc : 1; /**< HiGig2 CRC8 or Control char error interrupt enable */ - uint64_t hg2fld : 1; /**< HiGig2 Bad field error interrupt enable */ - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t hg2fld : 1; - uint64_t hg2cc : 1; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_gmxx_rxx_int_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn30xx; - struct cvmx_gmxx_rxx_int_en_cn30xx cn31xx; - struct cvmx_gmxx_rxx_int_en_cn30xx cn38xx; - struct cvmx_gmxx_rxx_int_en_cn30xx cn38xxp2; - struct cvmx_gmxx_rxx_int_en_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t reserved_6_6 : 1; - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t reserved_6_6 : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn50xx; - struct cvmx_gmxx_rxx_int_en_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t hg2cc : 1; /**< HiGig2 CRC8 or Control char error interrupt enable */ - uint64_t hg2fld : 1; /**< HiGig2 Bad field error interrupt enable */ - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation - (SGMII/1000Base-X only) */ - uint64_t coldet : 1; /**< Collision Detection - (SGMII/1000Base-X half-duplex only) */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime - (SGMII/1000Base-X only) */ - uint64_t rsverr : 1; /**< Reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - (SGMII/1000Base-X only) */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with Data reception error */ - uint64_t reserved_5_6 : 2; - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< Carrier extend error - (SGMII/1000Base-X only) */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t reserved_5_6 : 2; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t hg2fld : 1; - uint64_t hg2cc : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn52xx; - struct cvmx_gmxx_rxx_int_en_cn52xx cn52xxp1; - struct cvmx_gmxx_rxx_int_en_cn52xx cn56xx; - struct cvmx_gmxx_rxx_int_en_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation - (SGMII/1000Base-X only) */ - uint64_t coldet : 1; /**< Collision Detection - (SGMII/1000Base-X half-duplex only) */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime - (SGMII/1000Base-X only) */ - uint64_t rsverr : 1; /**< Reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - (SGMII/1000Base-X only) */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with Data reception error */ - uint64_t reserved_5_6 : 2; - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< Carrier extend error - (SGMII/1000Base-X only) */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t reserved_5_6 : 2; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t reserved_27_63 : 37; -#endif - } cn56xxp1; - struct cvmx_gmxx_rxx_int_en_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn58xx; - struct cvmx_gmxx_rxx_int_en_cn58xx cn58xxp1; -} cvmx_gmxx_rxx_int_en_t; - - -/** - * cvmx_gmx#_rx#_int_reg - * - * GMX_RX_INT_REG = Interrupt Register - * - * - * Notes: - * (1) exceptions will only be raised to the control processor if the - * corresponding bit in the GMX_RX_INT_EN register is set. - * - * (2) exception conditions 10:0 can also set the rcv/opcode in the received - * packet's workQ entry. The GMX_RX_FRM_CHK register provides a bit mask - * for configuring which conditions set the error. - * - * (3) in half duplex operation, the expectation is that collisions will appear - * as either MINERR o r CAREXT errors. - * - * (4) JABBER - An RX Jabber error indicates that a packet was received which - * is longer than the maximum allowed packet as defined by the - * system. GMX will truncate the packet at the JABBER count. - * Failure to do so could lead to system instabilty. - * - * (5) NIBERR - This error is illegal at 1000Mbs speeds - * (GMX_RX_PRT_CFG[SPEED]==0) and will never assert. - * - * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS > - * GMX_RX_FRM_MAX. For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS - * > GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED. - * - * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < GMX_RX_FRM_MIN. - * - * (8) ALNERR - Indicates that the packet received was not an integer number of - * bytes. If FCS checking is enabled, ALNERR will only assert if - * the FCS is bad. If FCS checking is disabled, ALNERR will - * assert in all non-integer frame cases. - * - * (9) Collisions - Collisions can only occur in half-duplex mode. A collision - * is assumed by the receiver when the slottime - * (GMX_PRT_CFG[SLOTTIME]) is not satisfied. In 10/100 mode, - * this will result in a frame < SLOTTIME. In 1000 mode, it - * could result either in frame < SLOTTIME or a carrier extend - * error with the SLOTTIME. These conditions are visible by... - * - * . transfer ended before slottime - COLDET - * . carrier extend error - CAREXT - * - * (A) LENERR - Length errors occur when the received packet does not match the - * length field. LENERR is only checked for packets between 64 - * and 1500 bytes. For untagged frames, the length must exact - * match. For tagged frames the length or length+4 must match. - * - * (B) PCTERR - checks that the frame transtions from PREAMBLE=>SFD=>DATA. - * Does not check the number of PREAMBLE cycles. - * - * (C) OVRERR - Not to be included in the HRM - * - * OVRERR is an architectural assertion check internal to GMX to - * make sure no assumption was violated. In a correctly operating - * system, this interrupt can never fire. - * - * GMX has an internal arbiter which selects which of 4 ports to - * buffer in the main RX FIFO. If we normally buffer 8 bytes, - * then each port will typically push a tick every 8 cycles - if - * the packet interface is going as fast as possible. If there - * are four ports, they push every two cycles. So that's the - * assumption. That the inbound module will always be able to - * consume the tick before another is produced. If that doesn't - * happen - that's when OVRERR will assert. - * - * (D) In XAUI mode prt0 is used for interrupt logging. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t hg2cc : 1; /**< HiGig2 received message CRC or Control char error - Set when either CRC8 error detected or when - a Control Character is found in the message - bytes after the K.SOM - NOTE: HG2CC has higher priority than HG2FLD - i.e. a HiGig2 message that results in HG2CC - getting set, will never set HG2FLD. */ - uint64_t hg2fld : 1; /**< HiGig2 received message field error, as below - 1) MSG_TYPE field not 6'b00_0000 - i.e. it is not a FLOW CONTROL message, which - is the only defined type for HiGig2 - 2) FWD_TYPE field not 2'b00 i.e. Link Level msg - which is the only defined type for HiGig2 - 3) FC_OBJECT field is neither 4'b0000 for - Physical Link nor 4'b0010 for Logical Link. - Those are the only two defined types in HiGig2 */ - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t hg2fld : 1; - uint64_t hg2cc : 1; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_gmxx_rxx_int_reg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn30xx; - struct cvmx_gmxx_rxx_int_reg_cn30xx cn31xx; - struct cvmx_gmxx_rxx_int_reg_cn30xx cn38xx; - struct cvmx_gmxx_rxx_int_reg_cn30xx cn38xxp2; - struct cvmx_gmxx_rxx_int_reg_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t reserved_6_6 : 1; - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t reserved_6_6 : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn50xx; - struct cvmx_gmxx_rxx_int_reg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t hg2cc : 1; /**< HiGig2 received message CRC or Control char error - Set when either CRC8 error detected or when - a Control Character is found in the message - bytes after the K.SOM - NOTE: HG2CC has higher priority than HG2FLD - i.e. a HiGig2 message that results in HG2CC - getting set, will never set HG2FLD. */ - uint64_t hg2fld : 1; /**< HiGig2 received message field error, as below - 1) MSG_TYPE field not 6'b00_0000 - i.e. it is not a FLOW CONTROL message, which - is the only defined type for HiGig2 - 2) FWD_TYPE field not 2'b00 i.e. Link Level msg - which is the only defined type for HiGig2 - 3) FC_OBJECT field is neither 4'b0000 for - Physical Link nor 4'b0010 for Logical Link. - Those are the only two defined types in HiGig2 */ - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure - (SGMII/1000Base-X only) */ - uint64_t coldet : 1; /**< Collision Detection - (SGMII/1000Base-X half-duplex only) */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime - (SGMII/1000Base-X only) */ - uint64_t rsverr : 1; /**< Reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol - In XAUI mode, the column of data that was bad - will be logged in GMX_RX_XAUI_BAD_COL */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert - (SGMII/1000Base-X only) */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with Data reception error */ - uint64_t reserved_5_6 : 2; - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< Carrier extend error - (SGMII/1000Base-X only) */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t reserved_5_6 : 2; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t hg2fld : 1; - uint64_t hg2cc : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn52xx; - struct cvmx_gmxx_rxx_int_reg_cn52xx cn52xxp1; - struct cvmx_gmxx_rxx_int_reg_cn52xx cn56xx; - struct cvmx_gmxx_rxx_int_reg_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t undat : 1; /**< Unexpected Data - (XAUI Mode only) */ - uint64_t uneop : 1; /**< Unexpected EOP - (XAUI Mode only) */ - uint64_t unsop : 1; /**< Unexpected SOP - (XAUI Mode only) */ - uint64_t bad_term : 1; /**< Frame is terminated by control character other - than /T/. The error propagation control - character /E/ will be included as part of the - frame and does not cause a frame termination. - (XAUI Mode only) */ - uint64_t bad_seq : 1; /**< Reserved Sequence Deteted - (XAUI Mode only) */ - uint64_t rem_fault : 1; /**< Remote Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t loc_fault : 1; /**< Local Fault Sequence Deteted - (XAUI Mode only) */ - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t reserved_16_18 : 3; - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure - (SGMII/1000Base-X only) */ - uint64_t coldet : 1; /**< Collision Detection - (SGMII/1000Base-X half-duplex only) */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime - (SGMII/1000Base-X only) */ - uint64_t rsverr : 1; /**< Reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol - In XAUI mode, the column of data that was bad - will be logged in GMX_RX_XAUI_BAD_COL */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert - (SGMII/1000Base-X only) */ - uint64_t reserved_9_9 : 1; - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with Data reception error */ - uint64_t reserved_5_6 : 2; - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t reserved_2_2 : 1; - uint64_t carext : 1; /**< Carrier extend error - (SGMII/1000Base-X only) */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t carext : 1; - uint64_t reserved_2_2 : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t reserved_5_6 : 2; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t reserved_9_9 : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t reserved_16_18 : 3; - uint64_t pause_drp : 1; - uint64_t loc_fault : 1; - uint64_t rem_fault : 1; - uint64_t bad_seq : 1; - uint64_t bad_term : 1; - uint64_t unsop : 1; - uint64_t uneop : 1; - uint64_t undat : 1; - uint64_t reserved_27_63 : 37; -#endif - } cn56xxp1; - struct cvmx_gmxx_rxx_int_reg_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pause_drp : 1; /**< Pause packet was dropped due to full GMX RX FIFO */ - uint64_t phy_dupx : 1; /**< Change in the RMGII inbound LinkDuplex */ - uint64_t phy_spd : 1; /**< Change in the RMGII inbound LinkSpeed */ - uint64_t phy_link : 1; /**< Change in the RMGII inbound LinkStatus */ - uint64_t ifgerr : 1; /**< Interframe Gap Violation - Does not necessarily indicate a failure */ - uint64_t coldet : 1; /**< Collision Detection */ - uint64_t falerr : 1; /**< False carrier error or extend error after slottime */ - uint64_t rsverr : 1; /**< RGMII reserved opcodes */ - uint64_t pcterr : 1; /**< Bad Preamble / Protocol */ - uint64_t ovrerr : 1; /**< Internal Data Aggregation Overflow - This interrupt should never assert */ - uint64_t niberr : 1; /**< Nibble error (hi_nibble != lo_nibble) */ - uint64_t skperr : 1; /**< Skipper error */ - uint64_t rcverr : 1; /**< Frame was received with RMGII Data reception error */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t alnerr : 1; /**< Frame was received with an alignment error */ - uint64_t fcserr : 1; /**< Frame was received with FCS/CRC error */ - uint64_t jabber : 1; /**< Frame was received with length > sys_length */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t carext : 1; /**< RGMII carrier extend error */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ -#else - uint64_t minerr : 1; - uint64_t carext : 1; - uint64_t maxerr : 1; - uint64_t jabber : 1; - uint64_t fcserr : 1; - uint64_t alnerr : 1; - uint64_t lenerr : 1; - uint64_t rcverr : 1; - uint64_t skperr : 1; - uint64_t niberr : 1; - uint64_t ovrerr : 1; - uint64_t pcterr : 1; - uint64_t rsverr : 1; - uint64_t falerr : 1; - uint64_t coldet : 1; - uint64_t ifgerr : 1; - uint64_t phy_link : 1; - uint64_t phy_spd : 1; - uint64_t phy_dupx : 1; - uint64_t pause_drp : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn58xx; - struct cvmx_gmxx_rxx_int_reg_cn58xx cn58xxp1; -} cvmx_gmxx_rxx_int_reg_t; - - -/** - * cvmx_gmx#_rx#_jabber - * - * GMX_RX_JABBER = The max size packet after which GMX will truncate - * - * - * Notes: - * CNT must be 8-byte aligned such that CNT[2:0] == 0 - * - * The packet that will be sent to the packet input logic will have an - * additionl 8 bytes if GMX_RX_FRM_CTL[PRE_CHK] is set and - * GMX_RX_FRM_CTL[PRE_STRP] is clear. The max packet that will be sent is - * defined as... - * - * max_sized_packet = GMX_RX_JABBER[CNT]+((GMX_RX_FRM_CTL[PRE_CHK] & !GMX_RX_FRM_CTL[PRE_STRP])*8) - * - * In XAUI mode prt0 is used for checking. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_jabber_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt : 16; /**< Byte count for jabber check - Failing packets set the JABBER interrupt and are - optionally sent with opcode==JABBER - GMX will truncate the packet to CNT bytes - CNT >= GMX_RX_FRM_MAX[LEN] */ -#else - uint64_t cnt : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_rxx_jabber_s cn30xx; - struct cvmx_gmxx_rxx_jabber_s cn31xx; - struct cvmx_gmxx_rxx_jabber_s cn38xx; - struct cvmx_gmxx_rxx_jabber_s cn38xxp2; - struct cvmx_gmxx_rxx_jabber_s cn50xx; - struct cvmx_gmxx_rxx_jabber_s cn52xx; - struct cvmx_gmxx_rxx_jabber_s cn52xxp1; - struct cvmx_gmxx_rxx_jabber_s cn56xx; - struct cvmx_gmxx_rxx_jabber_s cn56xxp1; - struct cvmx_gmxx_rxx_jabber_s cn58xx; - struct cvmx_gmxx_rxx_jabber_s cn58xxp1; -} cvmx_gmxx_rxx_jabber_t; - - -/** - * cvmx_gmx#_rx#_pause_drop_time - * - * GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_pause_drop_time_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t status : 16; /**< Time extracted from the dropped PAUSE packet */ -#else - uint64_t status : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_rxx_pause_drop_time_s cn50xx; - struct cvmx_gmxx_rxx_pause_drop_time_s cn52xx; - struct cvmx_gmxx_rxx_pause_drop_time_s cn52xxp1; - struct cvmx_gmxx_rxx_pause_drop_time_s cn56xx; - struct cvmx_gmxx_rxx_pause_drop_time_s cn56xxp1; - struct cvmx_gmxx_rxx_pause_drop_time_s cn58xx; - struct cvmx_gmxx_rxx_pause_drop_time_s cn58xxp1; -} cvmx_gmxx_rxx_pause_drop_time_t; - - -/** - * cvmx_gmx#_rx#_rx_inbnd - * - * GMX_RX_INBND = RGMII InBand Link Status - * - * - * Notes: - * These fields are only valid if the attached PHY is operating in RGMII mode - * and supports the optional in-band status (see section 3.4.1 of the RGMII - * specification, version 1.3 for more information). - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_rx_inbnd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t duplex : 1; /**< RGMII Inbound LinkDuplex - 0=half-duplex - 1=full-duplex */ - uint64_t speed : 2; /**< RGMII Inbound LinkSpeed - 00=2.5MHz - 01=25MHz - 10=125MHz - 11=Reserved */ - uint64_t status : 1; /**< RGMII Inbound LinkStatus - 0=down - 1=up */ -#else - uint64_t status : 1; - uint64_t speed : 2; - uint64_t duplex : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_rxx_rx_inbnd_s cn30xx; - struct cvmx_gmxx_rxx_rx_inbnd_s cn31xx; - struct cvmx_gmxx_rxx_rx_inbnd_s cn38xx; - struct cvmx_gmxx_rxx_rx_inbnd_s cn38xxp2; - struct cvmx_gmxx_rxx_rx_inbnd_s cn50xx; - struct cvmx_gmxx_rxx_rx_inbnd_s cn58xx; - struct cvmx_gmxx_rxx_rx_inbnd_s cn58xxp1; -} cvmx_gmxx_rxx_rx_inbnd_t; - - -/** - * cvmx_gmx#_rx#_stats_ctl - * - * GMX_RX_STATS_CTL = RX Stats Control register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rd_clr : 1; /**< RX Stats registers will clear on reads */ -#else - uint64_t rd_clr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_rxx_stats_ctl_s cn30xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn31xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn38xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_ctl_s cn50xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn52xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_ctl_s cn56xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_ctl_s cn58xx; - struct cvmx_gmxx_rxx_stats_ctl_s cn58xxp1; -} cvmx_gmxx_rxx_stats_ctl_t; - - -/** - * cvmx_gmx#_rx#_stats_octs - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_octs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of received good packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_rxx_stats_octs_s cn30xx; - struct cvmx_gmxx_rxx_stats_octs_s cn31xx; - struct cvmx_gmxx_rxx_stats_octs_s cn38xx; - struct cvmx_gmxx_rxx_stats_octs_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_octs_s cn50xx; - struct cvmx_gmxx_rxx_stats_octs_s cn52xx; - struct cvmx_gmxx_rxx_stats_octs_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_octs_s cn56xx; - struct cvmx_gmxx_rxx_stats_octs_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_octs_s cn58xx; - struct cvmx_gmxx_rxx_stats_octs_s cn58xxp1; -} cvmx_gmxx_rxx_stats_octs_t; - - -/** - * cvmx_gmx#_rx#_stats_octs_ctl - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_octs_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of received pause packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn30xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn31xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn50xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xx; - struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xxp1; -} cvmx_gmxx_rxx_stats_octs_ctl_t; - - -/** - * cvmx_gmx#_rx#_stats_octs_dmac - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_octs_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of filtered dmac packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn30xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn31xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn50xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xx; - struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xxp1; -} cvmx_gmxx_rxx_stats_octs_dmac_t; - - -/** - * cvmx_gmx#_rx#_stats_octs_drp - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_octs_drp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t cnt : 48; /**< Octet count of dropped packets */ -#else - uint64_t cnt : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn30xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn31xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn50xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xx; - struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xxp1; -} cvmx_gmxx_rxx_stats_octs_drp_t; - - -/** - * cvmx_gmx#_rx#_stats_pkts - * - * GMX_RX_STATS_PKTS - * - * Count of good received packets - packets that are not recognized as PAUSE - * packets, dropped due the DMAC filter, dropped due FIFO full status, or - * have any other OPCODE (FCS, Length, etc). - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_pkts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of received good packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rxx_stats_pkts_s cn30xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn31xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn38xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_pkts_s cn50xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn52xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_pkts_s cn56xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_pkts_s cn58xx; - struct cvmx_gmxx_rxx_stats_pkts_s cn58xxp1; -} cvmx_gmxx_rxx_stats_pkts_t; - - -/** - * cvmx_gmx#_rx#_stats_pkts_bad - * - * GMX_RX_STATS_PKTS_BAD - * - * Count of all packets received with some error that were not dropped - * either due to the dmac filter or lack of room in the receive FIFO. - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_pkts_bad_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of bad packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn30xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn31xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn50xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xx; - struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xxp1; -} cvmx_gmxx_rxx_stats_pkts_bad_t; - - -/** - * cvmx_gmx#_rx#_stats_pkts_ctl - * - * GMX_RX_STATS_PKTS_CTL - * - * Count of all packets received that were recognized as Flow Control or - * PAUSE packets. PAUSE packets with any kind of error are counted in - * GMX_RX_STATS_PKTS_BAD. Pause packets can be optionally dropped or - * forwarded based on the GMX_RX_FRM_CTL[CTL_DRP] bit. This count - * increments regardless of whether the packet is dropped. Pause packets - * will never be counted in GMX_RX_STATS_PKTS. Packets dropped due the dmac - * filter will be counted in GMX_RX_STATS_PKTS_DMAC and not here. - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of received pause packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn30xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn31xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn50xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xx; - struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xxp1; -} cvmx_gmxx_rxx_stats_pkts_ctl_t; - - -/** - * cvmx_gmx#_rx#_stats_pkts_dmac - * - * GMX_RX_STATS_PKTS_DMAC - * - * Count of all packets received that were dropped by the dmac filter. - * Packets that match the DMAC will be dropped and counted here regardless - * of if they were bad packets. These packets will never be counted in - * GMX_RX_STATS_PKTS. - * - * Some packets that were not able to satisify the DECISION_CNT may not - * actually be dropped by Octeon, but they will be counted here as if they - * were dropped. - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of filtered dmac packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn30xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn31xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn50xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xx; - struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xxp1; -} cvmx_gmxx_rxx_stats_pkts_dmac_t; - - -/** - * cvmx_gmx#_rx#_stats_pkts_drp - * - * GMX_RX_STATS_PKTS_DRP - * - * Count of all packets received that were dropped due to a full receive - * FIFO. This counts good and bad packets received - all packets dropped by - * the FIFO. It does not count packets dropped by the dmac or pause packet - * filters. - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_stats_pkts_drp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Count of dropped packets */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn30xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn31xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xxp2; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn50xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xxp1; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xxp1; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xx; - struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xxp1; -} cvmx_gmxx_rxx_stats_pkts_drp_t; - - -/** - * cvmx_gmx#_rx#_udd_skp - * - * GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data - * - * - * Notes: - * (1) The skip bytes are part of the packet and will be sent down the NCB - * packet interface and will be handled by PKI. - * - * (2) The system can determine if the UDD bytes are included in the FCS check - * by using the FCSSEL field - if the FCS check is enabled. - * - * (3) Assume that the preamble/sfd is always at the start of the frame - even - * before UDD bytes. In most cases, there will be no preamble in these - * cases since it will be packet interface in direct communication to - * another packet interface (MAC to MAC) without a PHY involved. - * - * (4) We can still do address filtering and control packet filtering is the - * user desires. - * - * (5) UDD_SKP must be 0 in half-duplex operation unless - * GMX_RX_FRM_CTL[PRE_CHK] is clear. If GMX_RX_FRM_CTL[PRE_CHK] is clear, - * then UDD_SKP will normally be 8. - * - * (6) In all cases, the UDD bytes will be sent down the packet interface as - * part of the packet. The UDD bytes are never stripped from the actual - * packet. - * - * (7) If LEN != 0, then GMX_RX_FRM_CHK[LENERR] will be disabled and GMX_RX_INT_REG[LENERR] will be zero - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rxx_udd_skp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t fcssel : 1; /**< Include the skip bytes in the FCS calculation - 0 = all skip bytes are included in FCS - 1 = the skip bytes are not included in FCS */ - uint64_t reserved_7_7 : 1; - uint64_t len : 7; /**< Amount of User-defined data before the start of - the L2 data. Zero means L2 comes first. - Max value is 64. */ -#else - uint64_t len : 7; - uint64_t reserved_7_7 : 1; - uint64_t fcssel : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_gmxx_rxx_udd_skp_s cn30xx; - struct cvmx_gmxx_rxx_udd_skp_s cn31xx; - struct cvmx_gmxx_rxx_udd_skp_s cn38xx; - struct cvmx_gmxx_rxx_udd_skp_s cn38xxp2; - struct cvmx_gmxx_rxx_udd_skp_s cn50xx; - struct cvmx_gmxx_rxx_udd_skp_s cn52xx; - struct cvmx_gmxx_rxx_udd_skp_s cn52xxp1; - struct cvmx_gmxx_rxx_udd_skp_s cn56xx; - struct cvmx_gmxx_rxx_udd_skp_s cn56xxp1; - struct cvmx_gmxx_rxx_udd_skp_s cn58xx; - struct cvmx_gmxx_rxx_udd_skp_s cn58xxp1; -} cvmx_gmxx_rxx_udd_skp_t; - - -/** - * cvmx_gmx#_rx_bp_drop# - * - * GMX_RX_BP_DROP = FIFO mark for packet drop - * - * - * Notes: - * The actual watermark is dynamic with respect to the GMX_RX_PRTS - * register. The GMX_RX_PRTS controls the depth of the port's - * FIFO so as ports are added or removed, the drop point may change. - * - * In XAUI mode prt0 is used for checking. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_bp_dropx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mark : 6; /**< Number of 8B ticks to reserve in the RX FIFO. - When the FIFO exceeds this count, packets will - be dropped and not buffered. - MARK should typically be programmed to ports+1. - Failure to program correctly can lead to system - instability. - Reset value for RGMII mode = 2 - Reset value for Spi4 mode = 17 */ -#else - uint64_t mark : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_gmxx_rx_bp_dropx_s cn30xx; - struct cvmx_gmxx_rx_bp_dropx_s cn31xx; - struct cvmx_gmxx_rx_bp_dropx_s cn38xx; - struct cvmx_gmxx_rx_bp_dropx_s cn38xxp2; - struct cvmx_gmxx_rx_bp_dropx_s cn50xx; - struct cvmx_gmxx_rx_bp_dropx_s cn52xx; - struct cvmx_gmxx_rx_bp_dropx_s cn52xxp1; - struct cvmx_gmxx_rx_bp_dropx_s cn56xx; - struct cvmx_gmxx_rx_bp_dropx_s cn56xxp1; - struct cvmx_gmxx_rx_bp_dropx_s cn58xx; - struct cvmx_gmxx_rx_bp_dropx_s cn58xxp1; -} cvmx_gmxx_rx_bp_dropx_t; - - -/** - * cvmx_gmx#_rx_bp_off# - * - * GMX_RX_BP_OFF = Lowater mark for packet drop - * - * - * Notes: - * In XAUI mode, prt0 is used for checking. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_bp_offx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mark : 6; /**< Water mark (8B ticks) to deassert backpressure */ -#else - uint64_t mark : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_gmxx_rx_bp_offx_s cn30xx; - struct cvmx_gmxx_rx_bp_offx_s cn31xx; - struct cvmx_gmxx_rx_bp_offx_s cn38xx; - struct cvmx_gmxx_rx_bp_offx_s cn38xxp2; - struct cvmx_gmxx_rx_bp_offx_s cn50xx; - struct cvmx_gmxx_rx_bp_offx_s cn52xx; - struct cvmx_gmxx_rx_bp_offx_s cn52xxp1; - struct cvmx_gmxx_rx_bp_offx_s cn56xx; - struct cvmx_gmxx_rx_bp_offx_s cn56xxp1; - struct cvmx_gmxx_rx_bp_offx_s cn58xx; - struct cvmx_gmxx_rx_bp_offx_s cn58xxp1; -} cvmx_gmxx_rx_bp_offx_t; - - -/** - * cvmx_gmx#_rx_bp_on# - * - * GMX_RX_BP_ON = Hiwater mark for port/interface backpressure - * - * - * Notes: - * In XAUI mode, prt0 is used for checking. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_bp_onx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t mark : 9; /**< Hiwater mark (8B ticks) for backpressure. - In RGMII mode, the backpressure is given per - port. In Spi4 mode, the backpressure is for the - entire interface. GMX_RX_BP_ON must satisfy - BP_OFF <= BP_ON < (FIFO_SIZE - BP_DROP) - The reset value is half the FIFO. - Reset value RGMII mode = 0x40 (512bytes) - Reset value Spi4 mode = 0x100 (2048bytes) - A value of zero will immediately assert back - pressure. */ -#else - uint64_t mark : 9; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_gmxx_rx_bp_onx_s cn30xx; - struct cvmx_gmxx_rx_bp_onx_s cn31xx; - struct cvmx_gmxx_rx_bp_onx_s cn38xx; - struct cvmx_gmxx_rx_bp_onx_s cn38xxp2; - struct cvmx_gmxx_rx_bp_onx_s cn50xx; - struct cvmx_gmxx_rx_bp_onx_s cn52xx; - struct cvmx_gmxx_rx_bp_onx_s cn52xxp1; - struct cvmx_gmxx_rx_bp_onx_s cn56xx; - struct cvmx_gmxx_rx_bp_onx_s cn56xxp1; - struct cvmx_gmxx_rx_bp_onx_s cn58xx; - struct cvmx_gmxx_rx_bp_onx_s cn58xxp1; -} cvmx_gmxx_rx_bp_onx_t; - - -/** - * cvmx_gmx#_rx_hg2_status - * - * ** HG2 message CSRs - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_hg2_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t phtim2go : 16; /**< Physical time to go for removal of physical link - pause. Initial value from received HiGig2 msg pkt - Non-zero only when physical back pressure active */ - uint64_t xof : 16; /**< 16 bit xof back pressure vector from HiGig2 msg pkt - or from CBFC packets. - Non-zero only when logical back pressure is active - All bits will be 0 when LGTIM2GO=0 */ - uint64_t lgtim2go : 16; /**< Logical packet flow back pressure time remaining - Initial value set from xof time field of HiGig2 - message packet received or a function of the - enabled and current timers for CBFC packets. - Non-zero only when logical back pressure is active */ -#else - uint64_t lgtim2go : 16; - uint64_t xof : 16; - uint64_t phtim2go : 16; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_rx_hg2_status_s cn52xx; - struct cvmx_gmxx_rx_hg2_status_s cn52xxp1; - struct cvmx_gmxx_rx_hg2_status_s cn56xx; -} cvmx_gmxx_rx_hg2_status_t; - - -/** - * cvmx_gmx#_rx_pass_en - * - * GMX_RX_PASS_EN = Packet pass through mode enable - * - * When both Octane ports are running in Spi4 mode, packets can be directly - * passed from one SPX interface to the other without being processed by the - * core or PP's. The register has one bit for each port to enable the pass - * through feature. - * - * Notes: - * (1) Can only be used in dual Spi4 configs - * - * (2) The mapped pass through output port cannot be the destination port for - * any Octane core traffic. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_pass_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t en : 16; /**< Which ports to configure in pass through mode */ -#else - uint64_t en : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_rx_pass_en_s cn38xx; - struct cvmx_gmxx_rx_pass_en_s cn38xxp2; - struct cvmx_gmxx_rx_pass_en_s cn58xx; - struct cvmx_gmxx_rx_pass_en_s cn58xxp1; -} cvmx_gmxx_rx_pass_en_t; - - -/** - * cvmx_gmx#_rx_pass_map# - * - * GMX_RX_PASS_MAP = Packet pass through port map - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_pass_mapx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t dprt : 4; /**< Destination port to map Spi pass through traffic */ -#else - uint64_t dprt : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_rx_pass_mapx_s cn38xx; - struct cvmx_gmxx_rx_pass_mapx_s cn38xxp2; - struct cvmx_gmxx_rx_pass_mapx_s cn58xx; - struct cvmx_gmxx_rx_pass_mapx_s cn58xxp1; -} cvmx_gmxx_rx_pass_mapx_t; - - -/** - * cvmx_gmx#_rx_prt_info - * - * GMX_RX_PRT_INFO = Report the RX status for port - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of DROP and COMMIT are used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_prt_info_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t drop : 16; /**< Per port indication that data was dropped - (PASS3 only) */ - uint64_t commit : 16; /**< Per port indication that SOP was accepted - (PASS3 only) */ -#else - uint64_t commit : 16; - uint64_t drop : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_rx_prt_info_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t drop : 3; /**< Per port indication that data was dropped */ - uint64_t reserved_3_15 : 13; - uint64_t commit : 3; /**< Per port indication that SOP was accepted */ -#else - uint64_t commit : 3; - uint64_t reserved_3_15 : 13; - uint64_t drop : 3; - uint64_t reserved_19_63 : 45; -#endif - } cn30xx; - struct cvmx_gmxx_rx_prt_info_cn30xx cn31xx; - struct cvmx_gmxx_rx_prt_info_s cn38xx; - struct cvmx_gmxx_rx_prt_info_cn30xx cn50xx; - struct cvmx_gmxx_rx_prt_info_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t drop : 4; /**< Per port indication that data was dropped */ - uint64_t reserved_4_15 : 12; - uint64_t commit : 4; /**< Per port indication that SOP was accepted */ -#else - uint64_t commit : 4; - uint64_t reserved_4_15 : 12; - uint64_t drop : 4; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_gmxx_rx_prt_info_cn52xx cn52xxp1; - struct cvmx_gmxx_rx_prt_info_cn52xx cn56xx; - struct cvmx_gmxx_rx_prt_info_cn52xx cn56xxp1; - struct cvmx_gmxx_rx_prt_info_s cn58xx; - struct cvmx_gmxx_rx_prt_info_s cn58xxp1; -} cvmx_gmxx_rx_prt_info_t; - - -/** - * cvmx_gmx#_rx_prts - * - * GMX_RX_PRTS = Number of FIFOs to carve the RX buffer into - * - * - * Notes: - * GMX_RX_PRTS is unused in XAUI mode since the RX buffer is always unified. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_prts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t prts : 3; /**< In RGMII mode, the RX buffer can be carved into - several logical buffers depending on the number - or implemented ports. - 0 or 1 port = 512ticks / 4096bytes - 2 ports = 256ticks / 2048bytes - 3 or 4 ports = 128ticks / 1024bytes */ -#else - uint64_t prts : 3; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_gmxx_rx_prts_s cn30xx; - struct cvmx_gmxx_rx_prts_s cn31xx; - struct cvmx_gmxx_rx_prts_s cn38xx; - struct cvmx_gmxx_rx_prts_s cn38xxp2; - struct cvmx_gmxx_rx_prts_s cn50xx; - struct cvmx_gmxx_rx_prts_s cn52xx; - struct cvmx_gmxx_rx_prts_s cn52xxp1; - struct cvmx_gmxx_rx_prts_s cn56xx; - struct cvmx_gmxx_rx_prts_s cn56xxp1; - struct cvmx_gmxx_rx_prts_s cn58xx; - struct cvmx_gmxx_rx_prts_s cn58xxp1; -} cvmx_gmxx_rx_prts_t; - - -/** - * cvmx_gmx#_rx_tx_status - * - * GMX_RX_TX_STATUS = GMX RX/TX Status - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_tx_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t tx : 3; /**< Transmit data since last read */ - uint64_t reserved_3_3 : 1; - uint64_t rx : 3; /**< Receive data since last read */ -#else - uint64_t rx : 3; - uint64_t reserved_3_3 : 1; - uint64_t tx : 3; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_gmxx_rx_tx_status_s cn30xx; - struct cvmx_gmxx_rx_tx_status_s cn31xx; - struct cvmx_gmxx_rx_tx_status_s cn50xx; -} cvmx_gmxx_rx_tx_status_t; - - -/** - * cvmx_gmx#_rx_xaui_bad_col - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_xaui_bad_col_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t val : 1; /**< Set when GMX_RX_INT_REG[PCTERR] is set. - (XAUI mode only) */ - uint64_t state : 3; /**< When GMX_RX_INT_REG[PCTERR] is set, STATE will - conatin the receive state at the time of the - error. - (XAUI mode only) */ - uint64_t lane_rxc : 4; /**< When GMX_RX_INT_REG[PCTERR] is set, LANE_RXC will - conatin the XAUI column at the time of the error. - (XAUI mode only) */ - uint64_t lane_rxd : 32; /**< When GMX_RX_INT_REG[PCTERR] is set, LANE_RXD will - conatin the XAUI column at the time of the error. - (XAUI mode only) */ -#else - uint64_t lane_rxd : 32; - uint64_t lane_rxc : 4; - uint64_t state : 3; - uint64_t val : 1; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_gmxx_rx_xaui_bad_col_s cn52xx; - struct cvmx_gmxx_rx_xaui_bad_col_s cn52xxp1; - struct cvmx_gmxx_rx_xaui_bad_col_s cn56xx; - struct cvmx_gmxx_rx_xaui_bad_col_s cn56xxp1; -} cvmx_gmxx_rx_xaui_bad_col_t; - - -/** - * cvmx_gmx#_rx_xaui_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_rx_xaui_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t status : 2; /**< Link Status - 0=Link OK - 1=Local Fault - 2=Remote Fault - 3=Reserved - (XAUI mode only) */ -#else - uint64_t status : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_gmxx_rx_xaui_ctl_s cn52xx; - struct cvmx_gmxx_rx_xaui_ctl_s cn52xxp1; - struct cvmx_gmxx_rx_xaui_ctl_s cn56xx; - struct cvmx_gmxx_rx_xaui_ctl_s cn56xxp1; -} cvmx_gmxx_rx_xaui_ctl_t; - - -/** - * cvmx_gmx#_smac# - * - * GMX_SMAC = Packet SMAC - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_smacx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t smac : 48; /**< The SMAC field is used for generating and - accepting Control Pause packets */ -#else - uint64_t smac : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_smacx_s cn30xx; - struct cvmx_gmxx_smacx_s cn31xx; - struct cvmx_gmxx_smacx_s cn38xx; - struct cvmx_gmxx_smacx_s cn38xxp2; - struct cvmx_gmxx_smacx_s cn50xx; - struct cvmx_gmxx_smacx_s cn52xx; - struct cvmx_gmxx_smacx_s cn52xxp1; - struct cvmx_gmxx_smacx_s cn56xx; - struct cvmx_gmxx_smacx_s cn56xxp1; - struct cvmx_gmxx_smacx_s cn58xx; - struct cvmx_gmxx_smacx_s cn58xxp1; -} cvmx_gmxx_smacx_t; - - -/** - * cvmx_gmx#_stat_bp - * - * GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_stat_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t bp : 1; /**< Current BP state */ - uint64_t cnt : 16; /**< Number of cycles that BP has been asserted - Saturating counter */ -#else - uint64_t cnt : 16; - uint64_t bp : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_gmxx_stat_bp_s cn30xx; - struct cvmx_gmxx_stat_bp_s cn31xx; - struct cvmx_gmxx_stat_bp_s cn38xx; - struct cvmx_gmxx_stat_bp_s cn38xxp2; - struct cvmx_gmxx_stat_bp_s cn50xx; - struct cvmx_gmxx_stat_bp_s cn52xx; - struct cvmx_gmxx_stat_bp_s cn52xxp1; - struct cvmx_gmxx_stat_bp_s cn56xx; - struct cvmx_gmxx_stat_bp_s cn56xxp1; - struct cvmx_gmxx_stat_bp_s cn58xx; - struct cvmx_gmxx_stat_bp_s cn58xxp1; -} cvmx_gmxx_stat_bp_t; - - -/** - * cvmx_gmx#_tx#_append - * - * GMX_TX_APPEND = Packet TX Append Control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_append_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t force_fcs : 1; /**< Append the Ethernet FCS on each pause packet - When FCS is clear - This implies that FCS==0 and PAD==0 - (PASS2 only) */ - uint64_t fcs : 1; /**< Append the Ethernet FCS on each packet */ - uint64_t pad : 1; /**< Append PAD bytes such that min sized */ - uint64_t preamble : 1; /**< Prepend the Ethernet preamble on each transfer */ -#else - uint64_t preamble : 1; - uint64_t pad : 1; - uint64_t fcs : 1; - uint64_t force_fcs : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_txx_append_s cn30xx; - struct cvmx_gmxx_txx_append_s cn31xx; - struct cvmx_gmxx_txx_append_s cn38xx; - struct cvmx_gmxx_txx_append_s cn38xxp2; - struct cvmx_gmxx_txx_append_s cn50xx; - struct cvmx_gmxx_txx_append_s cn52xx; - struct cvmx_gmxx_txx_append_s cn52xxp1; - struct cvmx_gmxx_txx_append_s cn56xx; - struct cvmx_gmxx_txx_append_s cn56xxp1; - struct cvmx_gmxx_txx_append_s cn58xx; - struct cvmx_gmxx_txx_append_s cn58xxp1; -} cvmx_gmxx_txx_append_t; - - -/** - * cvmx_gmx#_tx#_burst - * - * GMX_TX_BURST = Packet TX Burst Counter - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_burst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t burst : 16; /**< Burst (refer to 802.3 to set correctly) - 10/100Mbs: 0x0 - 1000Mbs: 0x2000 */ -#else - uint64_t burst : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_burst_s cn30xx; - struct cvmx_gmxx_txx_burst_s cn31xx; - struct cvmx_gmxx_txx_burst_s cn38xx; - struct cvmx_gmxx_txx_burst_s cn38xxp2; - struct cvmx_gmxx_txx_burst_s cn50xx; - struct cvmx_gmxx_txx_burst_s cn52xx; - struct cvmx_gmxx_txx_burst_s cn52xxp1; - struct cvmx_gmxx_txx_burst_s cn56xx; - struct cvmx_gmxx_txx_burst_s cn56xxp1; - struct cvmx_gmxx_txx_burst_s cn58xx; - struct cvmx_gmxx_txx_burst_s cn58xxp1; -} cvmx_gmxx_txx_burst_t; - - -/** - * cvmx_gmx#_tx#_cbfc_xoff - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_cbfc_xoff_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t xoff : 16; /**< Which ports to backpressure - Do not write in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ -#else - uint64_t xoff : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_cbfc_xoff_s cn52xx; - struct cvmx_gmxx_txx_cbfc_xoff_s cn56xx; -} cvmx_gmxx_txx_cbfc_xoff_t; - - -/** - * cvmx_gmx#_tx#_cbfc_xon - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_cbfc_xon_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t xon : 16; /**< Which ports to stop backpressure - Do not write in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ -#else - uint64_t xon : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_cbfc_xon_s cn52xx; - struct cvmx_gmxx_txx_cbfc_xon_s cn56xx; -} cvmx_gmxx_txx_cbfc_xon_t; - - -/** - * cvmx_gmx#_tx#_clk - * - * Per Port - * - * - * GMX_TX_CLK = RGMII TX Clock Generation Register - * - * Notes: - * Programming Restrictions: - * (1) In RGMII mode, if GMX_PRT_CFG[SPEED]==0, then CLK_CNT must be > 1. - * (2) In MII mode, CLK_CNT == 1 - * (3) In RGMII or GMII mode, if CLK_CNT==0, Octeon will not generate a tx clock. - * - * RGMII Example: - * Given a 125MHz PLL reference clock... - * CLK_CNT == 1 ==> 125.0MHz TXC clock period (8ns* 1) - * CLK_CNT == 5 ==> 25.0MHz TXC clock period (8ns* 5) - * CLK_CNT == 50 ==> 2.5MHz TXC clock period (8ns*50) - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_clk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t clk_cnt : 6; /**< Controls the RGMII TXC frequency - When PLL is used, TXC(phase) = - spi4_tx_pll_ref_clk(period)/2*CLK_CNT - When PLL bypass is used, TXC(phase) = - spi4_tx_pll_ref_clk(period)*2*CLK_CNT - NOTE: CLK_CNT==0 will not generate any clock - if CLK_CNT > 1 if GMX_PRT_CFG[SPEED]==0 */ -#else - uint64_t clk_cnt : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_gmxx_txx_clk_s cn30xx; - struct cvmx_gmxx_txx_clk_s cn31xx; - struct cvmx_gmxx_txx_clk_s cn38xx; - struct cvmx_gmxx_txx_clk_s cn38xxp2; - struct cvmx_gmxx_txx_clk_s cn50xx; - struct cvmx_gmxx_txx_clk_s cn58xx; - struct cvmx_gmxx_txx_clk_s cn58xxp1; -} cvmx_gmxx_txx_clk_t; - - -/** - * cvmx_gmx#_tx#_ctl - * - * GMX_TX_CTL = TX Control register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t xsdef_en : 1; /**< Enables the excessive deferral check for stats - and interrupts - (PASS2 only) */ - uint64_t xscol_en : 1; /**< Enables the excessive collision check for stats - and interrupts - (PASS2 only) */ -#else - uint64_t xscol_en : 1; - uint64_t xsdef_en : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_gmxx_txx_ctl_s cn30xx; - struct cvmx_gmxx_txx_ctl_s cn31xx; - struct cvmx_gmxx_txx_ctl_s cn38xx; - struct cvmx_gmxx_txx_ctl_s cn38xxp2; - struct cvmx_gmxx_txx_ctl_s cn50xx; - struct cvmx_gmxx_txx_ctl_s cn52xx; - struct cvmx_gmxx_txx_ctl_s cn52xxp1; - struct cvmx_gmxx_txx_ctl_s cn56xx; - struct cvmx_gmxx_txx_ctl_s cn56xxp1; - struct cvmx_gmxx_txx_ctl_s cn58xx; - struct cvmx_gmxx_txx_ctl_s cn58xxp1; -} cvmx_gmxx_txx_ctl_t; - - -/** - * cvmx_gmx#_tx#_min_pkt - * - * GMX_TX_MIN_PKT = Packet TX Min Size Packet (PAD upto min size) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_min_pkt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t min_size : 8; /**< Min frame in bytes before the FCS is applied - Padding is only appened when GMX_TX_APPEND[PAD] - for the coresponding RGMII port is set. */ -#else - uint64_t min_size : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_gmxx_txx_min_pkt_s cn30xx; - struct cvmx_gmxx_txx_min_pkt_s cn31xx; - struct cvmx_gmxx_txx_min_pkt_s cn38xx; - struct cvmx_gmxx_txx_min_pkt_s cn38xxp2; - struct cvmx_gmxx_txx_min_pkt_s cn50xx; - struct cvmx_gmxx_txx_min_pkt_s cn52xx; - struct cvmx_gmxx_txx_min_pkt_s cn52xxp1; - struct cvmx_gmxx_txx_min_pkt_s cn56xx; - struct cvmx_gmxx_txx_min_pkt_s cn56xxp1; - struct cvmx_gmxx_txx_min_pkt_s cn58xx; - struct cvmx_gmxx_txx_min_pkt_s cn58xxp1; -} cvmx_gmxx_txx_min_pkt_t; - - -/** - * cvmx_gmx#_tx#_pause_pkt_interval - * - * GMX_TX_PAUSE_PKT_INTERVAL = Packet TX Pause Packet transmission interval - how often PAUSE packets will be sent - * - * - * Notes: - * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and - * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system - * designer. It is suggested that TIME be much greater than INTERVAL and - * GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE - * count and then when the backpressure condition is lifted, a PAUSE packet - * with TIME==0 will be sent indicating that Octane is ready for additional - * data. - * - * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is - * suggested that TIME and INTERVAL are programmed such that they satisify the - * following rule... - * - * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size) - * - * where largest_pkt_size is that largest packet that the system can send - * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size - * of the PAUSE packet (normally 64B). - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_pause_pkt_interval_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t interval : 16; /**< Arbitrate for a pause packet every (INTERVAL*512) - bit-times. - Normally, 0 < INTERVAL < GMX_TX_PAUSE_PKT_TIME - INTERVAL=0, will only send a single PAUSE packet - for each backpressure event */ -#else - uint64_t interval : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn30xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn31xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xxp2; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn50xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xxp1; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xxp1; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xx; - struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xxp1; -} cvmx_gmxx_txx_pause_pkt_interval_t; - - -/** - * cvmx_gmx#_tx#_pause_pkt_time - * - * GMX_TX_PAUSE_PKT_TIME = Packet TX Pause Packet pause_time field - * - * - * Notes: - * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and - * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system - * designer. It is suggested that TIME be much greater than INTERVAL and - * GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE - * count and then when the backpressure condition is lifted, a PAUSE packet - * with TIME==0 will be sent indicating that Octane is ready for additional - * data. - * - * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is - * suggested that TIME and INTERVAL are programmed such that they satisify the - * following rule... - * - * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size) - * - * where largest_pkt_size is that largest packet that the system can send - * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size - * of the PAUSE packet (normally 64B). - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_pause_pkt_time_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< The pause_time field placed is outbnd pause pkts - pause_time is in 512 bit-times - Normally, TIME > GMX_TX_PAUSE_PKT_INTERVAL */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_pause_pkt_time_s cn30xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn31xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn38xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn38xxp2; - struct cvmx_gmxx_txx_pause_pkt_time_s cn50xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn52xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn52xxp1; - struct cvmx_gmxx_txx_pause_pkt_time_s cn56xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn56xxp1; - struct cvmx_gmxx_txx_pause_pkt_time_s cn58xx; - struct cvmx_gmxx_txx_pause_pkt_time_s cn58xxp1; -} cvmx_gmxx_txx_pause_pkt_time_t; - - -/** - * cvmx_gmx#_tx#_pause_togo - * - * GMX_TX_PAUSE_TOGO = Packet TX Amount of time remaining to backpressure - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_pause_togo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t msg_time : 16; /**< Amount of time remaining to backpressure - From the higig2 physical message pause timer - (only valid on port0) */ - uint64_t time : 16; /**< Amount of time remaining to backpressure */ -#else - uint64_t time : 16; - uint64_t msg_time : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_txx_pause_togo_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< Amount of time remaining to backpressure */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn30xx; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn31xx; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xx; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xxp2; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn50xx; - struct cvmx_gmxx_txx_pause_togo_s cn52xx; - struct cvmx_gmxx_txx_pause_togo_s cn52xxp1; - struct cvmx_gmxx_txx_pause_togo_s cn56xx; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn56xxp1; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xx; - struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xxp1; -} cvmx_gmxx_txx_pause_togo_t; - - -/** - * cvmx_gmx#_tx#_pause_zero - * - * GMX_TX_PAUSE_ZERO = Packet TX Amount of time remaining to backpressure - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_pause_zero_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t send : 1; /**< When backpressure condition clear, send PAUSE - packet with pause_time of zero to enable the - channel */ -#else - uint64_t send : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_txx_pause_zero_s cn30xx; - struct cvmx_gmxx_txx_pause_zero_s cn31xx; - struct cvmx_gmxx_txx_pause_zero_s cn38xx; - struct cvmx_gmxx_txx_pause_zero_s cn38xxp2; - struct cvmx_gmxx_txx_pause_zero_s cn50xx; - struct cvmx_gmxx_txx_pause_zero_s cn52xx; - struct cvmx_gmxx_txx_pause_zero_s cn52xxp1; - struct cvmx_gmxx_txx_pause_zero_s cn56xx; - struct cvmx_gmxx_txx_pause_zero_s cn56xxp1; - struct cvmx_gmxx_txx_pause_zero_s cn58xx; - struct cvmx_gmxx_txx_pause_zero_s cn58xxp1; -} cvmx_gmxx_txx_pause_zero_t; - - -/** - * cvmx_gmx#_tx#_sgmii_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_sgmii_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t align : 1; /**< Align the transmission to even cycles - 0 = Data can be sent on any cycle - Possible to for the TX PCS machine to drop - first byte of preamble - 1 = Data will only be sent on even cycles - There will be no loss of data - (SGMII/1000Base-X only) */ -#else - uint64_t align : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_txx_sgmii_ctl_s cn52xx; - struct cvmx_gmxx_txx_sgmii_ctl_s cn52xxp1; - struct cvmx_gmxx_txx_sgmii_ctl_s cn56xx; - struct cvmx_gmxx_txx_sgmii_ctl_s cn56xxp1; -} cvmx_gmxx_txx_sgmii_ctl_t; - - -/** - * cvmx_gmx#_tx#_slot - * - * GMX_TX_SLOT = Packet TX Slottime Counter - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_slot_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t slot : 10; /**< Slottime (refer to 802.3 to set correctly) - 10/100Mbs: 0x40 - 1000Mbs: 0x200 */ -#else - uint64_t slot : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_gmxx_txx_slot_s cn30xx; - struct cvmx_gmxx_txx_slot_s cn31xx; - struct cvmx_gmxx_txx_slot_s cn38xx; - struct cvmx_gmxx_txx_slot_s cn38xxp2; - struct cvmx_gmxx_txx_slot_s cn50xx; - struct cvmx_gmxx_txx_slot_s cn52xx; - struct cvmx_gmxx_txx_slot_s cn52xxp1; - struct cvmx_gmxx_txx_slot_s cn56xx; - struct cvmx_gmxx_txx_slot_s cn56xxp1; - struct cvmx_gmxx_txx_slot_s cn58xx; - struct cvmx_gmxx_txx_slot_s cn58xxp1; -} cvmx_gmxx_txx_slot_t; - - -/** - * cvmx_gmx#_tx#_soft_pause - * - * GMX_TX_SOFT_PAUSE = Packet TX Software Pause - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_soft_pause_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t time : 16; /**< Back off the TX bus for (TIME*512) bit-times */ -#else - uint64_t time : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_txx_soft_pause_s cn30xx; - struct cvmx_gmxx_txx_soft_pause_s cn31xx; - struct cvmx_gmxx_txx_soft_pause_s cn38xx; - struct cvmx_gmxx_txx_soft_pause_s cn38xxp2; - struct cvmx_gmxx_txx_soft_pause_s cn50xx; - struct cvmx_gmxx_txx_soft_pause_s cn52xx; - struct cvmx_gmxx_txx_soft_pause_s cn52xxp1; - struct cvmx_gmxx_txx_soft_pause_s cn56xx; - struct cvmx_gmxx_txx_soft_pause_s cn56xxp1; - struct cvmx_gmxx_txx_soft_pause_s cn58xx; - struct cvmx_gmxx_txx_soft_pause_s cn58xxp1; -} cvmx_gmxx_txx_soft_pause_t; - - -/** - * cvmx_gmx#_tx#_stat0 - * - * GMX_TX_STAT0 = GMX_TX_STATS_XSDEF / GMX_TX_STATS_XSCOL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t xsdef : 32; /**< Number of packets dropped (never successfully - sent) due to excessive deferal */ - uint64_t xscol : 32; /**< Number of packets dropped (never successfully - sent) due to excessive collision. Defined by - GMX_TX_COL_ATTEMPT[LIMIT]. */ -#else - uint64_t xscol : 32; - uint64_t xsdef : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat0_s cn30xx; - struct cvmx_gmxx_txx_stat0_s cn31xx; - struct cvmx_gmxx_txx_stat0_s cn38xx; - struct cvmx_gmxx_txx_stat0_s cn38xxp2; - struct cvmx_gmxx_txx_stat0_s cn50xx; - struct cvmx_gmxx_txx_stat0_s cn52xx; - struct cvmx_gmxx_txx_stat0_s cn52xxp1; - struct cvmx_gmxx_txx_stat0_s cn56xx; - struct cvmx_gmxx_txx_stat0_s cn56xxp1; - struct cvmx_gmxx_txx_stat0_s cn58xx; - struct cvmx_gmxx_txx_stat0_s cn58xxp1; -} cvmx_gmxx_txx_stat0_t; - - -/** - * cvmx_gmx#_tx#_stat1 - * - * GMX_TX_STAT1 = GMX_TX_STATS_SCOL / GMX_TX_STATS_MCOL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t scol : 32; /**< Number of packets sent with a single collision */ - uint64_t mcol : 32; /**< Number of packets sent with multiple collisions - but < GMX_TX_COL_ATTEMPT[LIMIT]. */ -#else - uint64_t mcol : 32; - uint64_t scol : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat1_s cn30xx; - struct cvmx_gmxx_txx_stat1_s cn31xx; - struct cvmx_gmxx_txx_stat1_s cn38xx; - struct cvmx_gmxx_txx_stat1_s cn38xxp2; - struct cvmx_gmxx_txx_stat1_s cn50xx; - struct cvmx_gmxx_txx_stat1_s cn52xx; - struct cvmx_gmxx_txx_stat1_s cn52xxp1; - struct cvmx_gmxx_txx_stat1_s cn56xx; - struct cvmx_gmxx_txx_stat1_s cn56xxp1; - struct cvmx_gmxx_txx_stat1_s cn58xx; - struct cvmx_gmxx_txx_stat1_s cn58xxp1; -} cvmx_gmxx_txx_stat1_t; - - -/** - * cvmx_gmx#_tx#_stat2 - * - * GMX_TX_STAT2 = GMX_TX_STATS_OCTS - * - * - * Notes: - * - Octect counts are the sum of all data transmitted on the wire including - * packet data, pad bytes, fcs bytes, pause bytes, and jam bytes. The octect - * counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t octs : 48; /**< Number of total octets sent on the interface. - Does not count octets from frames that were - truncated due to collisions in halfdup mode. */ -#else - uint64_t octs : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_txx_stat2_s cn30xx; - struct cvmx_gmxx_txx_stat2_s cn31xx; - struct cvmx_gmxx_txx_stat2_s cn38xx; - struct cvmx_gmxx_txx_stat2_s cn38xxp2; - struct cvmx_gmxx_txx_stat2_s cn50xx; - struct cvmx_gmxx_txx_stat2_s cn52xx; - struct cvmx_gmxx_txx_stat2_s cn52xxp1; - struct cvmx_gmxx_txx_stat2_s cn56xx; - struct cvmx_gmxx_txx_stat2_s cn56xxp1; - struct cvmx_gmxx_txx_stat2_s cn58xx; - struct cvmx_gmxx_txx_stat2_s cn58xxp1; -} cvmx_gmxx_txx_stat2_t; - - -/** - * cvmx_gmx#_tx#_stat3 - * - * GMX_TX_STAT3 = GMX_TX_STATS_PKTS - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pkts : 32; /**< Number of total frames sent on the interface. - Does not count frames that were truncated due to - collisions in halfdup mode. */ -#else - uint64_t pkts : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat3_s cn30xx; - struct cvmx_gmxx_txx_stat3_s cn31xx; - struct cvmx_gmxx_txx_stat3_s cn38xx; - struct cvmx_gmxx_txx_stat3_s cn38xxp2; - struct cvmx_gmxx_txx_stat3_s cn50xx; - struct cvmx_gmxx_txx_stat3_s cn52xx; - struct cvmx_gmxx_txx_stat3_s cn52xxp1; - struct cvmx_gmxx_txx_stat3_s cn56xx; - struct cvmx_gmxx_txx_stat3_s cn56xxp1; - struct cvmx_gmxx_txx_stat3_s cn58xx; - struct cvmx_gmxx_txx_stat3_s cn58xxp1; -} cvmx_gmxx_txx_stat3_t; - - -/** - * cvmx_gmx#_tx#_stat4 - * - * GMX_TX_STAT4 = GMX_TX_STATS_HIST1 (64) / GMX_TX_STATS_HIST0 (<64) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist1 : 32; /**< Number of packets sent with an octet count of 64. */ - uint64_t hist0 : 32; /**< Number of packets sent with an octet count - of < 64. */ -#else - uint64_t hist0 : 32; - uint64_t hist1 : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat4_s cn30xx; - struct cvmx_gmxx_txx_stat4_s cn31xx; - struct cvmx_gmxx_txx_stat4_s cn38xx; - struct cvmx_gmxx_txx_stat4_s cn38xxp2; - struct cvmx_gmxx_txx_stat4_s cn50xx; - struct cvmx_gmxx_txx_stat4_s cn52xx; - struct cvmx_gmxx_txx_stat4_s cn52xxp1; - struct cvmx_gmxx_txx_stat4_s cn56xx; - struct cvmx_gmxx_txx_stat4_s cn56xxp1; - struct cvmx_gmxx_txx_stat4_s cn58xx; - struct cvmx_gmxx_txx_stat4_s cn58xxp1; -} cvmx_gmxx_txx_stat4_t; - - -/** - * cvmx_gmx#_tx#_stat5 - * - * GMX_TX_STAT5 = GMX_TX_STATS_HIST3 (128- 255) / GMX_TX_STATS_HIST2 (65- 127) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist3 : 32; /**< Number of packets sent with an octet count of - 128 - 255. */ - uint64_t hist2 : 32; /**< Number of packets sent with an octet count of - 65 - 127. */ -#else - uint64_t hist2 : 32; - uint64_t hist3 : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat5_s cn30xx; - struct cvmx_gmxx_txx_stat5_s cn31xx; - struct cvmx_gmxx_txx_stat5_s cn38xx; - struct cvmx_gmxx_txx_stat5_s cn38xxp2; - struct cvmx_gmxx_txx_stat5_s cn50xx; - struct cvmx_gmxx_txx_stat5_s cn52xx; - struct cvmx_gmxx_txx_stat5_s cn52xxp1; - struct cvmx_gmxx_txx_stat5_s cn56xx; - struct cvmx_gmxx_txx_stat5_s cn56xxp1; - struct cvmx_gmxx_txx_stat5_s cn58xx; - struct cvmx_gmxx_txx_stat5_s cn58xxp1; -} cvmx_gmxx_txx_stat5_t; - - -/** - * cvmx_gmx#_tx#_stat6 - * - * GMX_TX_STAT6 = GMX_TX_STATS_HIST5 (512-1023) / GMX_TX_STATS_HIST4 (256-511) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist5 : 32; /**< Number of packets sent with an octet count of - 512 - 1023. */ - uint64_t hist4 : 32; /**< Number of packets sent with an octet count of - 256 - 511. */ -#else - uint64_t hist4 : 32; - uint64_t hist5 : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat6_s cn30xx; - struct cvmx_gmxx_txx_stat6_s cn31xx; - struct cvmx_gmxx_txx_stat6_s cn38xx; - struct cvmx_gmxx_txx_stat6_s cn38xxp2; - struct cvmx_gmxx_txx_stat6_s cn50xx; - struct cvmx_gmxx_txx_stat6_s cn52xx; - struct cvmx_gmxx_txx_stat6_s cn52xxp1; - struct cvmx_gmxx_txx_stat6_s cn56xx; - struct cvmx_gmxx_txx_stat6_s cn56xxp1; - struct cvmx_gmxx_txx_stat6_s cn58xx; - struct cvmx_gmxx_txx_stat6_s cn58xxp1; -} cvmx_gmxx_txx_stat6_t; - - -/** - * cvmx_gmx#_tx#_stat7 - * - * GMX_TX_STAT7 = GMX_TX_STATS_HIST7 (1024-1518) / GMX_TX_STATS_HIST6 (>1518) - * - * - * Notes: - * - Packet length is the sum of all data transmitted on the wire for the given - * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam - * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles. - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t hist7 : 32; /**< Number of packets sent with an octet count - of > 1518. */ - uint64_t hist6 : 32; /**< Number of packets sent with an octet count of - 1024 - 1518. */ -#else - uint64_t hist6 : 32; - uint64_t hist7 : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat7_s cn30xx; - struct cvmx_gmxx_txx_stat7_s cn31xx; - struct cvmx_gmxx_txx_stat7_s cn38xx; - struct cvmx_gmxx_txx_stat7_s cn38xxp2; - struct cvmx_gmxx_txx_stat7_s cn50xx; - struct cvmx_gmxx_txx_stat7_s cn52xx; - struct cvmx_gmxx_txx_stat7_s cn52xxp1; - struct cvmx_gmxx_txx_stat7_s cn56xx; - struct cvmx_gmxx_txx_stat7_s cn56xxp1; - struct cvmx_gmxx_txx_stat7_s cn58xx; - struct cvmx_gmxx_txx_stat7_s cn58xxp1; -} cvmx_gmxx_txx_stat7_t; - - -/** - * cvmx_gmx#_tx#_stat8 - * - * GMX_TX_STAT8 = GMX_TX_STATS_MCST / GMX_TX_STATS_BCST - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the - * packet. GMX assumes that the DMAC lies in the first 6 bytes of the packet - * as per the 802.3 frame definition. If the system requires additional data - * before the L2 header, then the MCST and BCST counters may not reflect - * reality and should be ignored by software. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat8_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mcst : 32; /**< Number of packets sent to multicast DMAC. - Does not include BCST packets. */ - uint64_t bcst : 32; /**< Number of packets sent to broadcast DMAC. - Does not include MCST packets. */ -#else - uint64_t bcst : 32; - uint64_t mcst : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat8_s cn30xx; - struct cvmx_gmxx_txx_stat8_s cn31xx; - struct cvmx_gmxx_txx_stat8_s cn38xx; - struct cvmx_gmxx_txx_stat8_s cn38xxp2; - struct cvmx_gmxx_txx_stat8_s cn50xx; - struct cvmx_gmxx_txx_stat8_s cn52xx; - struct cvmx_gmxx_txx_stat8_s cn52xxp1; - struct cvmx_gmxx_txx_stat8_s cn56xx; - struct cvmx_gmxx_txx_stat8_s cn56xxp1; - struct cvmx_gmxx_txx_stat8_s cn58xx; - struct cvmx_gmxx_txx_stat8_s cn58xxp1; -} cvmx_gmxx_txx_stat8_t; - - -/** - * cvmx_gmx#_tx#_stat9 - * - * GMX_TX_STAT9 = GMX_TX_STATS_UNDFLW / GMX_TX_STATS_CTL - * - * - * Notes: - * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set - * - Counters will wrap - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stat9_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t undflw : 32; /**< Number of underflow packets */ - uint64_t ctl : 32; /**< Number of Control packets (PAUSE flow control) - generated by GMX. It does not include control - packets forwarded or generated by the PP's. */ -#else - uint64_t ctl : 32; - uint64_t undflw : 32; -#endif - } s; - struct cvmx_gmxx_txx_stat9_s cn30xx; - struct cvmx_gmxx_txx_stat9_s cn31xx; - struct cvmx_gmxx_txx_stat9_s cn38xx; - struct cvmx_gmxx_txx_stat9_s cn38xxp2; - struct cvmx_gmxx_txx_stat9_s cn50xx; - struct cvmx_gmxx_txx_stat9_s cn52xx; - struct cvmx_gmxx_txx_stat9_s cn52xxp1; - struct cvmx_gmxx_txx_stat9_s cn56xx; - struct cvmx_gmxx_txx_stat9_s cn56xxp1; - struct cvmx_gmxx_txx_stat9_s cn58xx; - struct cvmx_gmxx_txx_stat9_s cn58xxp1; -} cvmx_gmxx_txx_stat9_t; - - -/** - * cvmx_gmx#_tx#_stats_ctl - * - * GMX_TX_STATS_CTL = TX Stats Control register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_stats_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rd_clr : 1; /**< Stats registers will clear on reads */ -#else - uint64_t rd_clr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_txx_stats_ctl_s cn30xx; - struct cvmx_gmxx_txx_stats_ctl_s cn31xx; - struct cvmx_gmxx_txx_stats_ctl_s cn38xx; - struct cvmx_gmxx_txx_stats_ctl_s cn38xxp2; - struct cvmx_gmxx_txx_stats_ctl_s cn50xx; - struct cvmx_gmxx_txx_stats_ctl_s cn52xx; - struct cvmx_gmxx_txx_stats_ctl_s cn52xxp1; - struct cvmx_gmxx_txx_stats_ctl_s cn56xx; - struct cvmx_gmxx_txx_stats_ctl_s cn56xxp1; - struct cvmx_gmxx_txx_stats_ctl_s cn58xx; - struct cvmx_gmxx_txx_stats_ctl_s cn58xxp1; -} cvmx_gmxx_txx_stats_ctl_t; - - -/** - * cvmx_gmx#_tx#_thresh - * - * Per Port - * - * - * GMX_TX_THRESH = Packet TX Threshold - * - * Notes: - * In XAUI mode, prt0 is used for checking. Since XAUI mode uses a single TX FIFO and is higher data rate, recommended value is 0x80. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_txx_thresh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t cnt : 9; /**< Number of 16B ticks to accumulate in the TX FIFO - before sending on the RGMII interface - This register should be large enough to prevent - underflow on the RGMII interface and must never - be set to zero. This register cannot exceed the - the TX FIFO depth which is... - GMX_TX_PRTS==0,1: CNT MAX = 0x100 - GMX_TX_PRTS==2 : CNT MAX = 0x080 - GMX_TX_PRTS==3,4: CNT MAX = 0x040 */ -#else - uint64_t cnt : 9; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_gmxx_txx_thresh_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t cnt : 7; /**< Number of 16B ticks to accumulate in the TX FIFO - before sending on the RGMII interface - This register should be large enough to prevent - underflow on the RGMII interface and must never - be set below 4. This register cannot exceed the - the TX FIFO depth which is 64 16B entries. */ -#else - uint64_t cnt : 7; - uint64_t reserved_7_63 : 57; -#endif - } cn30xx; - struct cvmx_gmxx_txx_thresh_cn30xx cn31xx; - struct cvmx_gmxx_txx_thresh_s cn38xx; - struct cvmx_gmxx_txx_thresh_s cn38xxp2; - struct cvmx_gmxx_txx_thresh_cn30xx cn50xx; - struct cvmx_gmxx_txx_thresh_s cn52xx; - struct cvmx_gmxx_txx_thresh_s cn52xxp1; - struct cvmx_gmxx_txx_thresh_s cn56xx; - struct cvmx_gmxx_txx_thresh_s cn56xxp1; - struct cvmx_gmxx_txx_thresh_s cn58xx; - struct cvmx_gmxx_txx_thresh_s cn58xxp1; -} cvmx_gmxx_txx_thresh_t; - - -/** - * cvmx_gmx#_tx_bp - * - * GMX_TX_BP = Packet Interface TX BackPressure Register - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of BP is used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t bp : 4; /**< Per port BackPressure status - 0=Port is available - 1=Port should be back pressured */ -#else - uint64_t bp : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_tx_bp_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t bp : 3; /**< Per port BackPressure status - 0=Port is available - 1=Port should be back pressured */ -#else - uint64_t bp : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_gmxx_tx_bp_cn30xx cn31xx; - struct cvmx_gmxx_tx_bp_s cn38xx; - struct cvmx_gmxx_tx_bp_s cn38xxp2; - struct cvmx_gmxx_tx_bp_cn30xx cn50xx; - struct cvmx_gmxx_tx_bp_s cn52xx; - struct cvmx_gmxx_tx_bp_s cn52xxp1; - struct cvmx_gmxx_tx_bp_s cn56xx; - struct cvmx_gmxx_tx_bp_s cn56xxp1; - struct cvmx_gmxx_tx_bp_s cn58xx; - struct cvmx_gmxx_tx_bp_s cn58xxp1; -} cvmx_gmxx_tx_bp_t; - - -/** - * cvmx_gmx#_tx_clk_msk# - * - * GMX_TX_CLK_MSK = GMX Clock Select - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_clk_mskx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t msk : 1; /**< Write this bit to a 1 when switching clks */ -#else - uint64_t msk : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_gmxx_tx_clk_mskx_s cn30xx; - struct cvmx_gmxx_tx_clk_mskx_s cn50xx; -} cvmx_gmxx_tx_clk_mskx_t; - - -/** - * cvmx_gmx#_tx_col_attempt - * - * GMX_TX_COL_ATTEMPT = Packet TX collision attempts before dropping frame - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_col_attempt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t limit : 5; /**< Collision Attempts */ -#else - uint64_t limit : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_gmxx_tx_col_attempt_s cn30xx; - struct cvmx_gmxx_tx_col_attempt_s cn31xx; - struct cvmx_gmxx_tx_col_attempt_s cn38xx; - struct cvmx_gmxx_tx_col_attempt_s cn38xxp2; - struct cvmx_gmxx_tx_col_attempt_s cn50xx; - struct cvmx_gmxx_tx_col_attempt_s cn52xx; - struct cvmx_gmxx_tx_col_attempt_s cn52xxp1; - struct cvmx_gmxx_tx_col_attempt_s cn56xx; - struct cvmx_gmxx_tx_col_attempt_s cn56xxp1; - struct cvmx_gmxx_tx_col_attempt_s cn58xx; - struct cvmx_gmxx_tx_col_attempt_s cn58xxp1; -} cvmx_gmxx_tx_col_attempt_t; - - -/** - * cvmx_gmx#_tx_corrupt - * - * GMX_TX_CORRUPT = TX - Corrupt TX packets with the ERR bit set - * - * - * Notes: - * Packets sent from PKO with the ERR wire asserted will be corrupted by - * the transmitter if CORRUPT[prt] is set (XAUI uses prt==0). - * - * Corruption means that GMX will send a bad FCS value. If GMX_TX_APPEND[FCS] - * is clear then no FCS is sent and the GMX cannot corrupt it. The corrupt FCS - * value is 0xeeeeeeee for SGMII/1000Base-X and 4 bytes of the error - * propagation code in XAUI mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_corrupt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t corrupt : 4; /**< Per port error propagation - 0=Never corrupt packets - 1=Corrupt packets with ERR */ -#else - uint64_t corrupt : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_gmxx_tx_corrupt_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t corrupt : 3; /**< Per port error propagation - 0=Never corrupt packets - 1=Corrupt packets with ERR */ -#else - uint64_t corrupt : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_gmxx_tx_corrupt_cn30xx cn31xx; - struct cvmx_gmxx_tx_corrupt_s cn38xx; - struct cvmx_gmxx_tx_corrupt_s cn38xxp2; - struct cvmx_gmxx_tx_corrupt_cn30xx cn50xx; - struct cvmx_gmxx_tx_corrupt_s cn52xx; - struct cvmx_gmxx_tx_corrupt_s cn52xxp1; - struct cvmx_gmxx_tx_corrupt_s cn56xx; - struct cvmx_gmxx_tx_corrupt_s cn56xxp1; - struct cvmx_gmxx_tx_corrupt_s cn58xx; - struct cvmx_gmxx_tx_corrupt_s cn58xxp1; -} cvmx_gmxx_tx_corrupt_t; - - -/** - * cvmx_gmx#_tx_hg2_reg1 - * - * Notes: - * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in - * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address of - * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of - * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior. - * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_hg2_reg1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t tx_xof : 16; /**< TX HiGig2 message for logical link pause when any - bit value changes - Only write in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ -#else - uint64_t tx_xof : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_hg2_reg1_s cn52xx; - struct cvmx_gmxx_tx_hg2_reg1_s cn52xxp1; - struct cvmx_gmxx_tx_hg2_reg1_s cn56xx; -} cvmx_gmxx_tx_hg2_reg1_t; - - -/** - * cvmx_gmx#_tx_hg2_reg2 - * - * Notes: - * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in - * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address of - * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of - * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior. - * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_hg2_reg2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t tx_xon : 16; /**< TX HiGig2 message for logical link pause when any - bit value changes - Only write in HiGig2 mode i.e. when - GMX_TX_XAUI_CTL[HG_EN]=1 and - GMX_RX_UDD_SKP[SKIP]=16. */ -#else - uint64_t tx_xon : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_hg2_reg2_s cn52xx; - struct cvmx_gmxx_tx_hg2_reg2_s cn52xxp1; - struct cvmx_gmxx_tx_hg2_reg2_s cn56xx; -} cvmx_gmxx_tx_hg2_reg2_t; - - -/** - * cvmx_gmx#_tx_ifg - * - * GMX_TX_IFG = Packet TX Interframe Gap - * - * - * Notes: - * * Programming IFG1 and IFG2. - * - * For 10/100/1000Mbs half-duplex systems that require IEEE 802.3 - * compatibility, IFG1 must be in the range of 1-8, IFG2 must be in the range - * of 4-12, and the IFG1+IFG2 sum must be 12. - * - * For 10/100/1000Mbs full-duplex systems that require IEEE 802.3 - * compatibility, IFG1 must be in the range of 1-11, IFG2 must be in the range - * of 1-11, and the IFG1+IFG2 sum must be 12. - * - * For XAUI/10Gbs systems that require IEEE 802.3 compatibility, the - * IFG1+IFG2 sum must be 12. IFG1[1:0] and IFG2[1:0] must be zero. - * - * For all other systems, IFG1 and IFG2 can be any value in the range of - * 1-15. Allowing for a total possible IFG sum of 2-30. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_ifg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ifg2 : 4; /**< 1/3 of the interframe gap timing (in IFG2*8 bits) - If CRS is detected during IFG2, then the - interFrameSpacing timer is not reset and a frame - is transmited once the timer expires. */ - uint64_t ifg1 : 4; /**< 2/3 of the interframe gap timing (in IFG1*8 bits) - If CRS is detected during IFG1, then the - interFrameSpacing timer is reset and a frame is - not transmited. */ -#else - uint64_t ifg1 : 4; - uint64_t ifg2 : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_gmxx_tx_ifg_s cn30xx; - struct cvmx_gmxx_tx_ifg_s cn31xx; - struct cvmx_gmxx_tx_ifg_s cn38xx; - struct cvmx_gmxx_tx_ifg_s cn38xxp2; - struct cvmx_gmxx_tx_ifg_s cn50xx; - struct cvmx_gmxx_tx_ifg_s cn52xx; - struct cvmx_gmxx_tx_ifg_s cn52xxp1; - struct cvmx_gmxx_tx_ifg_s cn56xx; - struct cvmx_gmxx_tx_ifg_s cn56xxp1; - struct cvmx_gmxx_tx_ifg_s cn58xx; - struct cvmx_gmxx_tx_ifg_s cn58xxp1; -} cvmx_gmxx_tx_ifg_t; - - -/** - * cvmx_gmx#_tx_int_en - * - * GMX_TX_INT_EN = Interrupt Enable - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t late_col : 4; /**< TX Late Collision - (PASS3 only) */ - uint64_t xsdef : 4; /**< TX Excessive deferral (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t xscol : 4; /**< TX Excessive collisions (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow (RGMII mode only) */ - uint64_t ncb_nxa : 1; /**< Port address out-of-range from NCB Interface */ - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t ncb_nxa : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t late_col : 4; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_gmxx_tx_int_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t late_col : 3; /**< TX Late Collision */ - uint64_t reserved_15_15 : 1; - uint64_t xsdef : 3; /**< TX Excessive deferral (RGMII/halfdup mode only) */ - uint64_t reserved_11_11 : 1; - uint64_t xscol : 3; /**< TX Excessive collisions (RGMII/halfdup mode only) */ - uint64_t reserved_5_7 : 3; - uint64_t undflw : 3; /**< TX Underflow (RGMII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 3; - uint64_t reserved_5_7 : 3; - uint64_t xscol : 3; - uint64_t reserved_11_11 : 1; - uint64_t xsdef : 3; - uint64_t reserved_15_15 : 1; - uint64_t late_col : 3; - uint64_t reserved_19_63 : 45; -#endif - } cn30xx; - struct cvmx_gmxx_tx_int_en_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t xsdef : 3; /**< TX Excessive deferral (RGMII/halfdup mode only) */ - uint64_t reserved_11_11 : 1; - uint64_t xscol : 3; /**< TX Excessive collisions (RGMII/halfdup mode only) */ - uint64_t reserved_5_7 : 3; - uint64_t undflw : 3; /**< TX Underflow (RGMII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 3; - uint64_t reserved_5_7 : 3; - uint64_t xscol : 3; - uint64_t reserved_11_11 : 1; - uint64_t xsdef : 3; - uint64_t reserved_15_63 : 49; -#endif - } cn31xx; - struct cvmx_gmxx_tx_int_en_s cn38xx; - struct cvmx_gmxx_tx_int_en_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t xsdef : 4; /**< TX Excessive deferral (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t xscol : 4; /**< TX Excessive collisions (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow (RGMII mode only) */ - uint64_t ncb_nxa : 1; /**< Port address out-of-range from NCB Interface */ - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t ncb_nxa : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn38xxp2; - struct cvmx_gmxx_tx_int_en_cn30xx cn50xx; - struct cvmx_gmxx_tx_int_en_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t late_col : 4; /**< TX Late Collision - (SGMII/1000Base-X half-duplex only) */ - uint64_t xsdef : 4; /**< TX Excessive deferral - (SGMII/1000Base-X half-duplex only) */ - uint64_t xscol : 4; /**< TX Excessive collisions - (SGMII/1000Base-X half-duplex only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t late_col : 4; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_gmxx_tx_int_en_cn52xx cn52xxp1; - struct cvmx_gmxx_tx_int_en_cn52xx cn56xx; - struct cvmx_gmxx_tx_int_en_cn52xx cn56xxp1; - struct cvmx_gmxx_tx_int_en_s cn58xx; - struct cvmx_gmxx_tx_int_en_s cn58xxp1; -} cvmx_gmxx_tx_int_en_t; - - -/** - * cvmx_gmx#_tx_int_reg - * - * GMX_TX_INT_REG = Interrupt Register - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t late_col : 4; /**< TX Late Collision - (PASS3 only) */ - uint64_t xsdef : 4; /**< TX Excessive deferral (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t xscol : 4; /**< TX Excessive collisions (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow (RGMII mode only) */ - uint64_t ncb_nxa : 1; /**< Port address out-of-range from NCB Interface */ - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t ncb_nxa : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t late_col : 4; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_gmxx_tx_int_reg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t late_col : 3; /**< TX Late Collision */ - uint64_t reserved_15_15 : 1; - uint64_t xsdef : 3; /**< TX Excessive deferral (RGMII/halfdup mode only) */ - uint64_t reserved_11_11 : 1; - uint64_t xscol : 3; /**< TX Excessive collisions (RGMII/halfdup mode only) */ - uint64_t reserved_5_7 : 3; - uint64_t undflw : 3; /**< TX Underflow (RGMII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 3; - uint64_t reserved_5_7 : 3; - uint64_t xscol : 3; - uint64_t reserved_11_11 : 1; - uint64_t xsdef : 3; - uint64_t reserved_15_15 : 1; - uint64_t late_col : 3; - uint64_t reserved_19_63 : 45; -#endif - } cn30xx; - struct cvmx_gmxx_tx_int_reg_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t xsdef : 3; /**< TX Excessive deferral (RGMII/halfdup mode only) */ - uint64_t reserved_11_11 : 1; - uint64_t xscol : 3; /**< TX Excessive collisions (RGMII/halfdup mode only) */ - uint64_t reserved_5_7 : 3; - uint64_t undflw : 3; /**< TX Underflow (RGMII mode only) */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 3; - uint64_t reserved_5_7 : 3; - uint64_t xscol : 3; - uint64_t reserved_11_11 : 1; - uint64_t xsdef : 3; - uint64_t reserved_15_63 : 49; -#endif - } cn31xx; - struct cvmx_gmxx_tx_int_reg_s cn38xx; - struct cvmx_gmxx_tx_int_reg_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t xsdef : 4; /**< TX Excessive deferral (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t xscol : 4; /**< TX Excessive collisions (RGMII/halfdup mode only) - (PASS2 only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow (RGMII mode only) */ - uint64_t ncb_nxa : 1; /**< Port address out-of-range from NCB Interface */ - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t ncb_nxa : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn38xxp2; - struct cvmx_gmxx_tx_int_reg_cn30xx cn50xx; - struct cvmx_gmxx_tx_int_reg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t late_col : 4; /**< TX Late Collision - (SGMII/1000Base-X half-duplex only) */ - uint64_t xsdef : 4; /**< TX Excessive deferral - (SGMII/1000Base-X half-duplex only) */ - uint64_t xscol : 4; /**< TX Excessive collisions - (SGMII/1000Base-X half-duplex only) */ - uint64_t reserved_6_7 : 2; - uint64_t undflw : 4; /**< TX Underflow */ - uint64_t reserved_1_1 : 1; - uint64_t pko_nxa : 1; /**< Port address out-of-range from PKO Interface */ -#else - uint64_t pko_nxa : 1; - uint64_t reserved_1_1 : 1; - uint64_t undflw : 4; - uint64_t reserved_6_7 : 2; - uint64_t xscol : 4; - uint64_t xsdef : 4; - uint64_t late_col : 4; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_gmxx_tx_int_reg_cn52xx cn52xxp1; - struct cvmx_gmxx_tx_int_reg_cn52xx cn56xx; - struct cvmx_gmxx_tx_int_reg_cn52xx cn56xxp1; - struct cvmx_gmxx_tx_int_reg_s cn58xx; - struct cvmx_gmxx_tx_int_reg_s cn58xxp1; -} cvmx_gmxx_tx_int_reg_t; - - -/** - * cvmx_gmx#_tx_jam - * - * GMX_TX_JAM = Packet TX Jam Pattern - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_jam_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t jam : 8; /**< Jam pattern */ -#else - uint64_t jam : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_gmxx_tx_jam_s cn30xx; - struct cvmx_gmxx_tx_jam_s cn31xx; - struct cvmx_gmxx_tx_jam_s cn38xx; - struct cvmx_gmxx_tx_jam_s cn38xxp2; - struct cvmx_gmxx_tx_jam_s cn50xx; - struct cvmx_gmxx_tx_jam_s cn52xx; - struct cvmx_gmxx_tx_jam_s cn52xxp1; - struct cvmx_gmxx_tx_jam_s cn56xx; - struct cvmx_gmxx_tx_jam_s cn56xxp1; - struct cvmx_gmxx_tx_jam_s cn58xx; - struct cvmx_gmxx_tx_jam_s cn58xxp1; -} cvmx_gmxx_tx_jam_t; - - -/** - * cvmx_gmx#_tx_lfsr - * - * GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_lfsr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t lfsr : 16; /**< The current state of the LFSR used to feed random - numbers to compute truncated binary exponential - backoff. */ -#else - uint64_t lfsr : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_lfsr_s cn30xx; - struct cvmx_gmxx_tx_lfsr_s cn31xx; - struct cvmx_gmxx_tx_lfsr_s cn38xx; - struct cvmx_gmxx_tx_lfsr_s cn38xxp2; - struct cvmx_gmxx_tx_lfsr_s cn50xx; - struct cvmx_gmxx_tx_lfsr_s cn52xx; - struct cvmx_gmxx_tx_lfsr_s cn52xxp1; - struct cvmx_gmxx_tx_lfsr_s cn56xx; - struct cvmx_gmxx_tx_lfsr_s cn56xxp1; - struct cvmx_gmxx_tx_lfsr_s cn58xx; - struct cvmx_gmxx_tx_lfsr_s cn58xxp1; -} cvmx_gmxx_tx_lfsr_t; - - -/** - * cvmx_gmx#_tx_ovr_bp - * - * GMX_TX_OVR_BP = Packet Interface TX Override BackPressure - * - * - * Notes: - * In XAUI mode, only the lsb (corresponding to port0) of EN, BP, and IGN_FULL are used. - * - * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero - * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol - * when GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by - * GMX*_TX_XAUI_CTL[HG_EN]=1 and GMX*_RX0_UDD_SKP[LEN]=16.) HW can only auto-generate backpressure - * through HiGig2 messages (optionally, when GMX*_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2 - * protocol. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_ovr_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t tx_prt_bp : 16; /**< Per port BP sent to PKO - 0=Port is available - 1=Port should be back pressured */ - uint64_t reserved_12_31 : 20; - uint64_t en : 4; /**< Per port Enable back pressure override */ - uint64_t bp : 4; /**< Per port BackPressure status to use - 0=Port is available - 1=Port should be back pressured */ - uint64_t ign_full : 4; /**< Ignore the RX FIFO full when computing BP */ -#else - uint64_t ign_full : 4; - uint64_t bp : 4; - uint64_t en : 4; - uint64_t reserved_12_31 : 20; - uint64_t tx_prt_bp : 16; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_tx_ovr_bp_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t en : 3; /**< Per port Enable back pressure override */ - uint64_t reserved_7_7 : 1; - uint64_t bp : 3; /**< Per port BackPressure status to use - 0=Port is available - 1=Port should be back pressured */ - uint64_t reserved_3_3 : 1; - uint64_t ign_full : 3; /**< Ignore the RX FIFO full when computing BP */ -#else - uint64_t ign_full : 3; - uint64_t reserved_3_3 : 1; - uint64_t bp : 3; - uint64_t reserved_7_7 : 1; - uint64_t en : 3; - uint64_t reserved_11_63 : 53; -#endif - } cn30xx; - struct cvmx_gmxx_tx_ovr_bp_cn30xx cn31xx; - struct cvmx_gmxx_tx_ovr_bp_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t en : 4; /**< Per port Enable back pressure override */ - uint64_t bp : 4; /**< Per port BackPressure status to use - 0=Port is available - 1=Port should be back pressured */ - uint64_t ign_full : 4; /**< Ignore the RX FIFO full when computing BP */ -#else - uint64_t ign_full : 4; - uint64_t bp : 4; - uint64_t en : 4; - uint64_t reserved_12_63 : 52; -#endif - } cn38xx; - struct cvmx_gmxx_tx_ovr_bp_cn38xx cn38xxp2; - struct cvmx_gmxx_tx_ovr_bp_cn30xx cn50xx; - struct cvmx_gmxx_tx_ovr_bp_s cn52xx; - struct cvmx_gmxx_tx_ovr_bp_s cn52xxp1; - struct cvmx_gmxx_tx_ovr_bp_s cn56xx; - struct cvmx_gmxx_tx_ovr_bp_s cn56xxp1; - struct cvmx_gmxx_tx_ovr_bp_cn38xx cn58xx; - struct cvmx_gmxx_tx_ovr_bp_cn38xx cn58xxp1; -} cvmx_gmxx_tx_ovr_bp_t; - - -/** - * cvmx_gmx#_tx_pause_pkt_dmac - * - * GMX_TX_PAUSE_PKT_DMAC = Packet TX Pause Packet DMAC field - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_pause_pkt_dmac_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t dmac : 48; /**< The DMAC field placed is outbnd pause pkts */ -#else - uint64_t dmac : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn30xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn31xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xxp2; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn50xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xxp1; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xxp1; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xx; - struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xxp1; -} cvmx_gmxx_tx_pause_pkt_dmac_t; - - -/** - * cvmx_gmx#_tx_pause_pkt_type - * - * GMX_TX_PAUSE_PKT_TYPE = Packet Interface TX Pause Packet TYPE field - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_pause_pkt_type_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t type : 16; /**< The TYPE field placed is outbnd pause pkts */ -#else - uint64_t type : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_pause_pkt_type_s cn30xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn31xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn38xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn38xxp2; - struct cvmx_gmxx_tx_pause_pkt_type_s cn50xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn52xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn52xxp1; - struct cvmx_gmxx_tx_pause_pkt_type_s cn56xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn56xxp1; - struct cvmx_gmxx_tx_pause_pkt_type_s cn58xx; - struct cvmx_gmxx_tx_pause_pkt_type_s cn58xxp1; -} cvmx_gmxx_tx_pause_pkt_type_t; - - -/** - * cvmx_gmx#_tx_prts - * - * Common - * - * - * GMX_TX_PRTS = TX Ports - * - * Notes: - * * The value programmed for PRTS is the number of the highest architected - * port number on the interface, plus 1. For example, if port 2 is the - * highest architected port, then the programmed value should be 3 since - * there are 3 ports in the system - 0, 1, and 2. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_prts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t prts : 5; /**< Number of ports allowed on the interface */ -#else - uint64_t prts : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_gmxx_tx_prts_s cn30xx; - struct cvmx_gmxx_tx_prts_s cn31xx; - struct cvmx_gmxx_tx_prts_s cn38xx; - struct cvmx_gmxx_tx_prts_s cn38xxp2; - struct cvmx_gmxx_tx_prts_s cn50xx; - struct cvmx_gmxx_tx_prts_s cn52xx; - struct cvmx_gmxx_tx_prts_s cn52xxp1; - struct cvmx_gmxx_tx_prts_s cn56xx; - struct cvmx_gmxx_tx_prts_s cn56xxp1; - struct cvmx_gmxx_tx_prts_s cn58xx; - struct cvmx_gmxx_tx_prts_s cn58xxp1; -} cvmx_gmxx_tx_prts_t; - - -/** - * cvmx_gmx#_tx_spi_ctl - * - * GMX_TX_SPI_CTL = Spi4 TX ModesSpi4 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_spi_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t tpa_clr : 1; /**< TPA Clear Mode - Clear credit counter when satisifed status */ - uint64_t cont_pkt : 1; /**< Contiguous Packet Mode - Finish one packet before switching to another - Cannot be set in Spi4 pass-through mode */ -#else - uint64_t cont_pkt : 1; - uint64_t tpa_clr : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_gmxx_tx_spi_ctl_s cn38xx; - struct cvmx_gmxx_tx_spi_ctl_s cn38xxp2; - struct cvmx_gmxx_tx_spi_ctl_s cn58xx; - struct cvmx_gmxx_tx_spi_ctl_s cn58xxp1; -} cvmx_gmxx_tx_spi_ctl_t; - - -/** - * cvmx_gmx#_tx_spi_drain - * - * GMX_TX_SPI_DRAIN = Drain out Spi TX FIFO - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_spi_drain_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t drain : 16; /**< Per port drain control - 0=Normal operation - 1=GMX TX will be popped, but no valid data will - be sent to SPX. Credits are correctly returned - to PKO. STX_IGN_CAL should be set to ignore - TPA and not stall due to back-pressure. - (PASS3 only) */ -#else - uint64_t drain : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_spi_drain_s cn38xx; - struct cvmx_gmxx_tx_spi_drain_s cn58xx; - struct cvmx_gmxx_tx_spi_drain_s cn58xxp1; -} cvmx_gmxx_tx_spi_drain_t; - - -/** - * cvmx_gmx#_tx_spi_max - * - * GMX_TX_SPI_MAX = RGMII TX Spi4 MAX - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_spi_max_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t slice : 7; /**< Number of 16B blocks to transmit in a burst before - switching to the next port. SLICE does not always - limit the burst length transmitted by OCTEON. - Depending on the traffic pattern and - GMX_TX_SPI_ROUND programming, the next port could - be the same as the current port. In this case, - OCTEON may merge multiple sub-SLICE bursts into - one contiguous burst that is longer than SLICE - (as long as the burst does not cross a packet - boundary). - SLICE must be programmed to be >= - GMX_TX_SPI_THRESH[THRESH] - If SLICE==0, then the transmitter will tend to - send the complete packet. The port will only - switch if credits are exhausted or PKO cannot - keep up. - (90nm ONLY) */ - uint64_t max2 : 8; /**< MAX2 (per Spi4.2 spec) */ - uint64_t max1 : 8; /**< MAX1 (per Spi4.2 spec) - MAX1 >= GMX_TX_SPI_THRESH[THRESH] */ -#else - uint64_t max1 : 8; - uint64_t max2 : 8; - uint64_t slice : 7; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_gmxx_tx_spi_max_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t max2 : 8; /**< MAX2 (per Spi4.2 spec) */ - uint64_t max1 : 8; /**< MAX1 (per Spi4.2 spec) - MAX1 >= GMX_TX_SPI_THRESH[THRESH] */ -#else - uint64_t max1 : 8; - uint64_t max2 : 8; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_gmxx_tx_spi_max_cn38xx cn38xxp2; - struct cvmx_gmxx_tx_spi_max_s cn58xx; - struct cvmx_gmxx_tx_spi_max_s cn58xxp1; -} cvmx_gmxx_tx_spi_max_t; - - -/** - * cvmx_gmx#_tx_spi_round# - * - * GMX_TX_SPI_ROUND = Controls SPI4 TX Arbitration - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_spi_roundx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t round : 16; /**< Which Spi ports participate in each arbitration - round. Each bit corresponds to a spi port - - 0: this port will arb in this round - - 1: this port will not arb in this round - (90nm ONLY) */ -#else - uint64_t round : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gmxx_tx_spi_roundx_s cn58xx; - struct cvmx_gmxx_tx_spi_roundx_s cn58xxp1; -} cvmx_gmxx_tx_spi_roundx_t; - - -/** - * cvmx_gmx#_tx_spi_thresh - * - * GMX_TX_SPI_THRESH = RGMII TX Spi4 Transmit Threshold - * - * - * Notes: - * Note: zero will map to 0x20 - * - * This will normally creates Spi4 traffic bursts at least THRESH in length. - * If dclk > eclk, then this rule may not always hold and Octeon may split - * transfers into smaller bursts - some of which could be as short as 16B. - * Octeon will never violate the Spi4.2 spec and send a non-EOP burst that is - * not a multiple of 16B. - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_spi_thresh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t thresh : 6; /**< Transmit threshold in 16B blocks - cannot be zero - THRESH <= TX_FIFO size (in non-passthrough mode) - THRESH <= TX_FIFO size-2 (in passthrough mode) - THRESH <= GMX_TX_SPI_MAX[MAX1] - THRESH <= GMX_TX_SPI_MAX[MAX2], if not then is it - possible for Octeon to send a Spi4 data burst of - MAX2 <= burst <= THRESH 16B ticks - GMX_TX_SPI_MAX[SLICE] must be programmed to be >= - THRESH */ -#else - uint64_t thresh : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_gmxx_tx_spi_thresh_s cn38xx; - struct cvmx_gmxx_tx_spi_thresh_s cn38xxp2; - struct cvmx_gmxx_tx_spi_thresh_s cn58xx; - struct cvmx_gmxx_tx_spi_thresh_s cn58xxp1; -} cvmx_gmxx_tx_spi_thresh_t; - - -/** - * cvmx_gmx#_tx_xaui_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_tx_xaui_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t hg_pause_hgi : 2; /**< HGI Field for HW generated HiGig pause packets - (XAUI mode only) */ - uint64_t hg_en : 1; /**< Enable HiGig Mode - When HG_EN is set, the following must be set: - GMX_RX_FRM_CTL[PRE_CHK] == 0 - GMX_RX_UDD_SKP[FCSSEL] == 0 - GMX_RX_UDD_SKP[SKIP] == 12 or 16 - GMX_TX_APPEND[PREAMBLE] == 0 - (depending on the HiGig header size) - (XAUI mode only) */ - uint64_t reserved_7_7 : 1; - uint64_t ls_byp : 1; /**< Bypass the link status as determined by the XGMII - receiver and set the link status of the - transmitter to LS. - (XAUI mode only) */ - uint64_t ls : 2; /**< Link Status - 0 = Link Ok - Link runs normally. RS passes MAC data to PCS - 1 = Local Fault - RS layer sends continuous remote fault - sequences. - 2 = Remote Fault - RS layer sends continuous idles sequences - (XAUI mode only) */ - uint64_t reserved_2_3 : 2; - uint64_t uni_en : 1; /**< Enable Unidirectional Mode (IEEE Clause 66) - (XAUI mode only) */ - uint64_t dic_en : 1; /**< Enable the deficit idle counter for IFG averaging - (XAUI mode only) */ -#else - uint64_t dic_en : 1; - uint64_t uni_en : 1; - uint64_t reserved_2_3 : 2; - uint64_t ls : 2; - uint64_t ls_byp : 1; - uint64_t reserved_7_7 : 1; - uint64_t hg_en : 1; - uint64_t hg_pause_hgi : 2; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_gmxx_tx_xaui_ctl_s cn52xx; - struct cvmx_gmxx_tx_xaui_ctl_s cn52xxp1; - struct cvmx_gmxx_tx_xaui_ctl_s cn56xx; - struct cvmx_gmxx_tx_xaui_ctl_s cn56xxp1; -} cvmx_gmxx_tx_xaui_ctl_t; - - -/** - * cvmx_gmx#_xaui_ext_loopback - */ -typedef union -{ - uint64_t u64; - struct cvmx_gmxx_xaui_ext_loopback_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t en : 1; /**< Loopback enable - Puts the packet interface in external loopback - mode on the XAUI bus in which the RX lines are - reflected on the TX lines. - (XAUI mode only) */ - uint64_t thresh : 4; /**< Threshhold on the TX FIFO - SW must only write the typical value. Any other - value will cause loopback mode not to function - correctly. - (XAUI mode only) */ -#else - uint64_t thresh : 4; - uint64_t en : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_gmxx_xaui_ext_loopback_s cn52xx; - struct cvmx_gmxx_xaui_ext_loopback_s cn52xxp1; - struct cvmx_gmxx_xaui_ext_loopback_s cn56xx; - struct cvmx_gmxx_xaui_ext_loopback_s cn56xxp1; -} cvmx_gmxx_xaui_ext_loopback_t; - - -/** - * cvmx_gpio_bit_cfg# - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_bit_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t clk_gen : 1; /**< When TX_OE is set, GPIO pin becomes a clock */ - uint64_t clk_sel : 2; /**< Selects which of the 4 GPIO clock generators */ - uint64_t fil_sel : 4; /**< Global counter bit-select (controls sample rate) */ - uint64_t fil_cnt : 4; /**< Number of consecutive samples to change state */ - uint64_t int_type : 1; /**< Type of interrupt - 0 = level (default) - 1 = rising edge */ - uint64_t int_en : 1; /**< Bit mask to indicate which bits to raise interrupt */ - uint64_t rx_xor : 1; /**< Invert the GPIO pin */ - uint64_t tx_oe : 1; /**< Drive the GPIO pin as an output pin */ -#else - uint64_t tx_oe : 1; - uint64_t rx_xor : 1; - uint64_t int_en : 1; - uint64_t int_type : 1; - uint64_t fil_cnt : 4; - uint64_t fil_sel : 4; - uint64_t clk_sel : 2; - uint64_t clk_gen : 1; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_gpio_bit_cfgx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t fil_sel : 4; /**< Global counter bit-select (controls sample rate) */ - uint64_t fil_cnt : 4; /**< Number of consecutive samples to change state */ - uint64_t int_type : 1; /**< Type of interrupt - 0 = level (default) - 1 = rising edge */ - uint64_t int_en : 1; /**< Bit mask to indicate which bits to raise interrupt */ - uint64_t rx_xor : 1; /**< Invert the GPIO pin */ - uint64_t tx_oe : 1; /**< Drive the GPIO pin as an output pin */ -#else - uint64_t tx_oe : 1; - uint64_t rx_xor : 1; - uint64_t int_en : 1; - uint64_t int_type : 1; - uint64_t fil_cnt : 4; - uint64_t fil_sel : 4; - uint64_t reserved_12_63 : 52; -#endif - } cn30xx; - struct cvmx_gpio_bit_cfgx_cn30xx cn31xx; - struct cvmx_gpio_bit_cfgx_cn30xx cn38xx; - struct cvmx_gpio_bit_cfgx_cn30xx cn38xxp2; - struct cvmx_gpio_bit_cfgx_cn30xx cn50xx; - struct cvmx_gpio_bit_cfgx_s cn52xx; - struct cvmx_gpio_bit_cfgx_s cn52xxp1; - struct cvmx_gpio_bit_cfgx_s cn56xx; - struct cvmx_gpio_bit_cfgx_s cn56xxp1; - struct cvmx_gpio_bit_cfgx_cn30xx cn58xx; - struct cvmx_gpio_bit_cfgx_cn30xx cn58xxp1; -} cvmx_gpio_bit_cfgx_t; - - -/** - * cvmx_gpio_boot_ena - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_boot_ena_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t boot_ena : 4; /**< Drive boot bus chip enables [7:4] on gpio [11:8] */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t boot_ena : 4; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_gpio_boot_ena_s cn30xx; - struct cvmx_gpio_boot_ena_s cn31xx; - struct cvmx_gpio_boot_ena_s cn50xx; -} cvmx_gpio_boot_ena_t; - - -/** - * cvmx_gpio_clk_gen# - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_clk_genx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t n : 32; /**< Determines the frequency of the GPIO clk generator - NOTE: Fgpio_clk = Feclk * N / 2^32 - N = (Fgpio_clk / Feclk) * 2^32 - NOTE: writing N == 0 stops the clock generator - N should be <= 2^31-1. */ -#else - uint64_t n : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_gpio_clk_genx_s cn52xx; - struct cvmx_gpio_clk_genx_s cn52xxp1; - struct cvmx_gpio_clk_genx_s cn56xx; - struct cvmx_gpio_clk_genx_s cn56xxp1; -} cvmx_gpio_clk_genx_t; - - -/** - * cvmx_gpio_dbg_ena - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_dbg_ena_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t dbg_ena : 21; /**< Enable the debug port to be driven on the gpio */ -#else - uint64_t dbg_ena : 21; - uint64_t reserved_21_63 : 43; -#endif - } s; - struct cvmx_gpio_dbg_ena_s cn30xx; - struct cvmx_gpio_dbg_ena_s cn31xx; - struct cvmx_gpio_dbg_ena_s cn50xx; -} cvmx_gpio_dbg_ena_t; - - -/** - * cvmx_gpio_int_clr - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_int_clr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t type : 16; /**< Clear the interrupt rising edge detector */ -#else - uint64_t type : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_gpio_int_clr_s cn30xx; - struct cvmx_gpio_int_clr_s cn31xx; - struct cvmx_gpio_int_clr_s cn38xx; - struct cvmx_gpio_int_clr_s cn38xxp2; - struct cvmx_gpio_int_clr_s cn50xx; - struct cvmx_gpio_int_clr_s cn52xx; - struct cvmx_gpio_int_clr_s cn52xxp1; - struct cvmx_gpio_int_clr_s cn56xx; - struct cvmx_gpio_int_clr_s cn56xxp1; - struct cvmx_gpio_int_clr_s cn58xx; - struct cvmx_gpio_int_clr_s cn58xxp1; -} cvmx_gpio_int_clr_t; - - -/** - * cvmx_gpio_rx_dat - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_rx_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t dat : 24; /**< GPIO Read Data */ -#else - uint64_t dat : 24; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_gpio_rx_dat_s cn30xx; - struct cvmx_gpio_rx_dat_s cn31xx; - struct cvmx_gpio_rx_dat_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dat : 16; /**< GPIO Read Data */ -#else - uint64_t dat : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_gpio_rx_dat_cn38xx cn38xxp2; - struct cvmx_gpio_rx_dat_s cn50xx; - struct cvmx_gpio_rx_dat_cn38xx cn52xx; - struct cvmx_gpio_rx_dat_cn38xx cn52xxp1; - struct cvmx_gpio_rx_dat_cn38xx cn56xx; - struct cvmx_gpio_rx_dat_cn38xx cn56xxp1; - struct cvmx_gpio_rx_dat_cn38xx cn58xx; - struct cvmx_gpio_rx_dat_cn38xx cn58xxp1; -} cvmx_gpio_rx_dat_t; - - -/** - * cvmx_gpio_tx_clr - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_tx_clr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t clr : 24; /**< Bit mask to indicate which bits to drive to '0'. */ -#else - uint64_t clr : 24; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_gpio_tx_clr_s cn30xx; - struct cvmx_gpio_tx_clr_s cn31xx; - struct cvmx_gpio_tx_clr_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t clr : 16; /**< Bit mask to indicate which bits to drive to '0'. */ -#else - uint64_t clr : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_gpio_tx_clr_cn38xx cn38xxp2; - struct cvmx_gpio_tx_clr_s cn50xx; - struct cvmx_gpio_tx_clr_cn38xx cn52xx; - struct cvmx_gpio_tx_clr_cn38xx cn52xxp1; - struct cvmx_gpio_tx_clr_cn38xx cn56xx; - struct cvmx_gpio_tx_clr_cn38xx cn56xxp1; - struct cvmx_gpio_tx_clr_cn38xx cn58xx; - struct cvmx_gpio_tx_clr_cn38xx cn58xxp1; -} cvmx_gpio_tx_clr_t; - - -/** - * cvmx_gpio_tx_set - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_tx_set_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t set : 24; /**< Bit mask to indicate which bits to drive to '1'. */ -#else - uint64_t set : 24; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_gpio_tx_set_s cn30xx; - struct cvmx_gpio_tx_set_s cn31xx; - struct cvmx_gpio_tx_set_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t set : 16; /**< Bit mask to indicate which bits to drive to '1'. */ -#else - uint64_t set : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_gpio_tx_set_cn38xx cn38xxp2; - struct cvmx_gpio_tx_set_s cn50xx; - struct cvmx_gpio_tx_set_cn38xx cn52xx; - struct cvmx_gpio_tx_set_cn38xx cn52xxp1; - struct cvmx_gpio_tx_set_cn38xx cn56xx; - struct cvmx_gpio_tx_set_cn38xx cn56xxp1; - struct cvmx_gpio_tx_set_cn38xx cn58xx; - struct cvmx_gpio_tx_set_cn38xx cn58xxp1; -} cvmx_gpio_tx_set_t; - - -/** - * cvmx_gpio_xbit_cfg# - */ -typedef union -{ - uint64_t u64; - struct cvmx_gpio_xbit_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t fil_sel : 4; /**< Global counter bit-select (controls sample rate) */ - uint64_t fil_cnt : 4; /**< Number of consecutive samples to change state */ - uint64_t reserved_2_3 : 2; - uint64_t rx_xor : 1; /**< Invert the GPIO pin */ - uint64_t tx_oe : 1; /**< Drive the GPIO pin as an output pin */ -#else - uint64_t tx_oe : 1; - uint64_t rx_xor : 1; - uint64_t reserved_2_3 : 2; - uint64_t fil_cnt : 4; - uint64_t fil_sel : 4; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_gpio_xbit_cfgx_s cn30xx; - struct cvmx_gpio_xbit_cfgx_s cn31xx; - struct cvmx_gpio_xbit_cfgx_s cn50xx; -} cvmx_gpio_xbit_cfgx_t; - - -/** - * cvmx_iob_bist_status - * - * IOB_BIST_STATUS = BIST Status of IOB Memories - * - * The result of the BIST run on the IOB memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t icnrcb : 1; /**< icnr_cb_reg_fifo_bist_status */ - uint64_t icr0 : 1; /**< icr_bist_req_fifo0_status */ - uint64_t icr1 : 1; /**< icr_bist_req_fifo1_status */ - uint64_t icnr1 : 1; /**< icnr_reg_mem1_bist_status */ - uint64_t icnr0 : 1; /**< icnr_reg_mem0_bist_status */ - uint64_t ibdr0 : 1; /**< ibdr_bist_req_fifo0_status */ - uint64_t ibdr1 : 1; /**< ibdr_bist_req_fifo1_status */ - uint64_t ibr0 : 1; /**< ibr_bist_rsp_fifo0_status */ - uint64_t ibr1 : 1; /**< ibr_bist_rsp_fifo1_status */ - uint64_t icnrt : 1; /**< icnr_tag_cb_reg_fifo_bist_status */ - uint64_t ibrq0 : 1; /**< ibrq_bist_req_fifo0_status */ - uint64_t ibrq1 : 1; /**< ibrq_bist_req_fifo1_status */ - uint64_t icrn0 : 1; /**< icr_ncb_bist_mem0_status */ - uint64_t icrn1 : 1; /**< icr_ncb_bist_mem1_status */ - uint64_t icrp0 : 1; /**< icr_pko_bist_mem0_status */ - uint64_t icrp1 : 1; /**< icr_pko_bist_mem1_status */ - uint64_t ibd : 1; /**< ibd_bist_mem0_status */ - uint64_t icd : 1; /**< icd_ncb_fifo_bist_status */ -#else - uint64_t icd : 1; - uint64_t ibd : 1; - uint64_t icrp1 : 1; - uint64_t icrp0 : 1; - uint64_t icrn1 : 1; - uint64_t icrn0 : 1; - uint64_t ibrq1 : 1; - uint64_t ibrq0 : 1; - uint64_t icnrt : 1; - uint64_t ibr1 : 1; - uint64_t ibr0 : 1; - uint64_t ibdr1 : 1; - uint64_t ibdr0 : 1; - uint64_t icnr0 : 1; - uint64_t icnr1 : 1; - uint64_t icr1 : 1; - uint64_t icr0 : 1; - uint64_t icnrcb : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_iob_bist_status_s cn30xx; - struct cvmx_iob_bist_status_s cn31xx; - struct cvmx_iob_bist_status_s cn38xx; - struct cvmx_iob_bist_status_s cn38xxp2; - struct cvmx_iob_bist_status_s cn50xx; - struct cvmx_iob_bist_status_s cn52xx; - struct cvmx_iob_bist_status_s cn52xxp1; - struct cvmx_iob_bist_status_s cn56xx; - struct cvmx_iob_bist_status_s cn56xxp1; - struct cvmx_iob_bist_status_s cn58xx; - struct cvmx_iob_bist_status_s cn58xxp1; -} cvmx_iob_bist_status_t; - - -/** - * cvmx_iob_ctl_status - * - * IOB Control Status = IOB Control and Status Register - * - * Provides control for IOB functions. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t rr_mode : 1; /**< When set to '1' will enable Round-Robin mode of next - transaction that could arbitrate for the XMB. */ - uint64_t outb_mat : 1; /**< Was a match on the outbound bus to the inb pattern - matchers. PASS2 FIELD. */ - uint64_t inb_mat : 1; /**< Was a match on the inbound bus to the inb pattern - matchers. PASS2 FIELD. */ - uint64_t pko_enb : 1; /**< Toggles the endian style of the FAU for the PKO. - '0' is for big-endian and '1' is for little-endian. */ - uint64_t dwb_enb : 1; /**< Enables the DWB function of the IOB. */ - uint64_t fau_end : 1; /**< Toggles the endian style of the FAU. '0' is for - big-endian and '1' is for little-endian. */ -#else - uint64_t fau_end : 1; - uint64_t dwb_enb : 1; - uint64_t pko_enb : 1; - uint64_t inb_mat : 1; - uint64_t outb_mat : 1; - uint64_t rr_mode : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_iob_ctl_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t outb_mat : 1; /**< Was a match on the outbound bus to the inb pattern - matchers. */ - uint64_t inb_mat : 1; /**< Was a match on the inbound bus to the inb pattern - matchers. */ - uint64_t pko_enb : 1; /**< Toggles the endian style of the FAU for the PKO. - '0' is for big-endian and '1' is for little-endian. */ - uint64_t dwb_enb : 1; /**< Enables the DWB function of the IOB. */ - uint64_t fau_end : 1; /**< Toggles the endian style of the FAU. '0' is for - big-endian and '1' is for little-endian. */ -#else - uint64_t fau_end : 1; - uint64_t dwb_enb : 1; - uint64_t pko_enb : 1; - uint64_t inb_mat : 1; - uint64_t outb_mat : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn30xx; - struct cvmx_iob_ctl_status_cn30xx cn31xx; - struct cvmx_iob_ctl_status_cn30xx cn38xx; - struct cvmx_iob_ctl_status_cn30xx cn38xxp2; - struct cvmx_iob_ctl_status_cn30xx cn50xx; - struct cvmx_iob_ctl_status_s cn52xx; - struct cvmx_iob_ctl_status_cn30xx cn52xxp1; - struct cvmx_iob_ctl_status_cn30xx cn56xx; - struct cvmx_iob_ctl_status_cn30xx cn56xxp1; - struct cvmx_iob_ctl_status_cn30xx cn58xx; - struct cvmx_iob_ctl_status_cn30xx cn58xxp1; -} cvmx_iob_ctl_status_t; - - -/** - * cvmx_iob_dwb_pri_cnt - * - * DWB To CMB Priority Counter = Don't Write Back to CMB Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of Don't Write Back request to the L2C. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_dwb_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of CMB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to CMB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_dwb_pri_cnt_s cn38xx; - struct cvmx_iob_dwb_pri_cnt_s cn38xxp2; - struct cvmx_iob_dwb_pri_cnt_s cn52xx; - struct cvmx_iob_dwb_pri_cnt_s cn52xxp1; - struct cvmx_iob_dwb_pri_cnt_s cn56xx; - struct cvmx_iob_dwb_pri_cnt_s cn56xxp1; - struct cvmx_iob_dwb_pri_cnt_s cn58xx; - struct cvmx_iob_dwb_pri_cnt_s cn58xxp1; -} cvmx_iob_dwb_pri_cnt_t; - - -/** - * cvmx_iob_fau_timeout - * - * FAU Timeout = Fetch and Add Unit Tag-Switch Timeout - * - * How many clokc ticks the FAU unit will wait for a tag-switch before timeing out. - * for Queue 0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_fau_timeout_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t tout_enb : 1; /**< The enable for the FAU timeout feature. - '1' will enable the timeout, '0' will disable. */ - uint64_t tout_val : 12; /**< When a tag request arrives from the PP a timer is - started associate with that PP. The timer which - increments every 256 eclks is compared to TOUT_VAL. - When the two are equal the IOB will flag the tag - request to complete as a time-out tag operation. - The 256 count timer used to increment the PP - associated timer is always running so the first - increment of the PP associated timer may occur any - where within the first 256 eclks. Note that '0' - is an illegal value. */ -#else - uint64_t tout_val : 12; - uint64_t tout_enb : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_iob_fau_timeout_s cn30xx; - struct cvmx_iob_fau_timeout_s cn31xx; - struct cvmx_iob_fau_timeout_s cn38xx; - struct cvmx_iob_fau_timeout_s cn38xxp2; - struct cvmx_iob_fau_timeout_s cn50xx; - struct cvmx_iob_fau_timeout_s cn52xx; - struct cvmx_iob_fau_timeout_s cn52xxp1; - struct cvmx_iob_fau_timeout_s cn56xx; - struct cvmx_iob_fau_timeout_s cn56xxp1; - struct cvmx_iob_fau_timeout_s cn58xx; - struct cvmx_iob_fau_timeout_s cn58xxp1; -} cvmx_iob_fau_timeout_t; - - -/** - * cvmx_iob_i2c_pri_cnt - * - * IPD To CMB Store Priority Counter = IPD to CMB Store Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of IPD Store access to the CMB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_i2c_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of CMB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to CMB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_i2c_pri_cnt_s cn38xx; - struct cvmx_iob_i2c_pri_cnt_s cn38xxp2; - struct cvmx_iob_i2c_pri_cnt_s cn52xx; - struct cvmx_iob_i2c_pri_cnt_s cn52xxp1; - struct cvmx_iob_i2c_pri_cnt_s cn56xx; - struct cvmx_iob_i2c_pri_cnt_s cn56xxp1; - struct cvmx_iob_i2c_pri_cnt_s cn58xx; - struct cvmx_iob_i2c_pri_cnt_s cn58xxp1; -} cvmx_iob_i2c_pri_cnt_t; - - -/** - * cvmx_iob_inb_control_match - * - * IOB_INB_CONTROL_MATCH = IOB Inbound Control Match - * - * Match pattern for the inbound control to set the INB_MATCH_BIT. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_inb_control_match_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t mask : 8; /**< Pattern to match on the inbound NCB. */ - uint64_t opc : 4; /**< Pattern to match on the inbound NCB. */ - uint64_t dst : 9; /**< Pattern to match on the inbound NCB. */ - uint64_t src : 8; /**< Pattern to match on the inbound NCB. */ -#else - uint64_t src : 8; - uint64_t dst : 9; - uint64_t opc : 4; - uint64_t mask : 8; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_iob_inb_control_match_s cn30xx; - struct cvmx_iob_inb_control_match_s cn31xx; - struct cvmx_iob_inb_control_match_s cn38xx; - struct cvmx_iob_inb_control_match_s cn38xxp2; - struct cvmx_iob_inb_control_match_s cn50xx; - struct cvmx_iob_inb_control_match_s cn52xx; - struct cvmx_iob_inb_control_match_s cn52xxp1; - struct cvmx_iob_inb_control_match_s cn56xx; - struct cvmx_iob_inb_control_match_s cn56xxp1; - struct cvmx_iob_inb_control_match_s cn58xx; - struct cvmx_iob_inb_control_match_s cn58xxp1; -} cvmx_iob_inb_control_match_t; - - -/** - * cvmx_iob_inb_control_match_enb - * - * IOB_INB_CONTROL_MATCH_ENB = IOB Inbound Control Match Enable - * - * Enables the match of the corresponding bit in the IOB_INB_CONTROL_MATCH reister. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_inb_control_match_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t mask : 8; /**< Pattern to match on the inbound NCB. */ - uint64_t opc : 4; /**< Pattern to match on the inbound NCB. */ - uint64_t dst : 9; /**< Pattern to match on the inbound NCB. */ - uint64_t src : 8; /**< Pattern to match on the inbound NCB. */ -#else - uint64_t src : 8; - uint64_t dst : 9; - uint64_t opc : 4; - uint64_t mask : 8; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_iob_inb_control_match_enb_s cn30xx; - struct cvmx_iob_inb_control_match_enb_s cn31xx; - struct cvmx_iob_inb_control_match_enb_s cn38xx; - struct cvmx_iob_inb_control_match_enb_s cn38xxp2; - struct cvmx_iob_inb_control_match_enb_s cn50xx; - struct cvmx_iob_inb_control_match_enb_s cn52xx; - struct cvmx_iob_inb_control_match_enb_s cn52xxp1; - struct cvmx_iob_inb_control_match_enb_s cn56xx; - struct cvmx_iob_inb_control_match_enb_s cn56xxp1; - struct cvmx_iob_inb_control_match_enb_s cn58xx; - struct cvmx_iob_inb_control_match_enb_s cn58xxp1; -} cvmx_iob_inb_control_match_enb_t; - - -/** - * cvmx_iob_inb_data_match - * - * IOB_INB_DATA_MATCH = IOB Inbound Data Match - * - * Match pattern for the inbound data to set the INB_MATCH_BIT. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_inb_data_match_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Pattern to match on the inbound NCB. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_iob_inb_data_match_s cn30xx; - struct cvmx_iob_inb_data_match_s cn31xx; - struct cvmx_iob_inb_data_match_s cn38xx; - struct cvmx_iob_inb_data_match_s cn38xxp2; - struct cvmx_iob_inb_data_match_s cn50xx; - struct cvmx_iob_inb_data_match_s cn52xx; - struct cvmx_iob_inb_data_match_s cn52xxp1; - struct cvmx_iob_inb_data_match_s cn56xx; - struct cvmx_iob_inb_data_match_s cn56xxp1; - struct cvmx_iob_inb_data_match_s cn58xx; - struct cvmx_iob_inb_data_match_s cn58xxp1; -} cvmx_iob_inb_data_match_t; - - -/** - * cvmx_iob_inb_data_match_enb - * - * IOB_INB_DATA_MATCH_ENB = IOB Inbound Data Match Enable - * - * Enables the match of the corresponding bit in the IOB_INB_DATA_MATCH reister. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_inb_data_match_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Bit to enable match of. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_iob_inb_data_match_enb_s cn30xx; - struct cvmx_iob_inb_data_match_enb_s cn31xx; - struct cvmx_iob_inb_data_match_enb_s cn38xx; - struct cvmx_iob_inb_data_match_enb_s cn38xxp2; - struct cvmx_iob_inb_data_match_enb_s cn50xx; - struct cvmx_iob_inb_data_match_enb_s cn52xx; - struct cvmx_iob_inb_data_match_enb_s cn52xxp1; - struct cvmx_iob_inb_data_match_enb_s cn56xx; - struct cvmx_iob_inb_data_match_enb_s cn56xxp1; - struct cvmx_iob_inb_data_match_enb_s cn58xx; - struct cvmx_iob_inb_data_match_enb_s cn58xxp1; -} cvmx_iob_inb_data_match_enb_t; - - -/** - * cvmx_iob_int_enb - * - * IOB_INT_ENB = IOB's Interrupt Enable - * - * The IOB's interrupt enable register. This is a PASS-2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t p_dat : 1; /**< When set (1) and bit 5 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t np_dat : 1; /**< When set (1) and bit 4 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t p_eop : 1; /**< When set (1) and bit 3 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t p_sop : 1; /**< When set (1) and bit 2 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t np_eop : 1; /**< When set (1) and bit 1 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t np_sop : 1; /**< When set (1) and bit 0 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ -#else - uint64_t np_sop : 1; - uint64_t np_eop : 1; - uint64_t p_sop : 1; - uint64_t p_eop : 1; - uint64_t np_dat : 1; - uint64_t p_dat : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_iob_int_enb_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t p_eop : 1; /**< When set (1) and bit 3 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t p_sop : 1; /**< When set (1) and bit 2 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t np_eop : 1; /**< When set (1) and bit 1 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ - uint64_t np_sop : 1; /**< When set (1) and bit 0 of the IOB_INT_SUM - register is asserted the IOB will assert an - interrupt. */ -#else - uint64_t np_sop : 1; - uint64_t np_eop : 1; - uint64_t p_sop : 1; - uint64_t p_eop : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_iob_int_enb_cn30xx cn31xx; - struct cvmx_iob_int_enb_cn30xx cn38xx; - struct cvmx_iob_int_enb_cn30xx cn38xxp2; - struct cvmx_iob_int_enb_s cn50xx; - struct cvmx_iob_int_enb_s cn52xx; - struct cvmx_iob_int_enb_s cn52xxp1; - struct cvmx_iob_int_enb_s cn56xx; - struct cvmx_iob_int_enb_s cn56xxp1; - struct cvmx_iob_int_enb_s cn58xx; - struct cvmx_iob_int_enb_s cn58xxp1; -} cvmx_iob_int_enb_t; - - -/** - * cvmx_iob_int_sum - * - * IOB_INT_SUM = IOB's Interrupt Summary Register - * - * Contains the diffrent interrupt summary bits of the IOB. This is a PASS-2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t p_dat : 1; /**< Set when a data arrives before a SOP for the same - port for a passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t np_dat : 1; /**< Set when a data arrives before a SOP for the same - port for a non-passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t p_eop : 1; /**< Set when a EOP is followed by an EOP for the same - port for a passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t p_sop : 1; /**< Set when a SOP is followed by an SOP for the same - port for a passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t np_eop : 1; /**< Set when a EOP is followed by an EOP for the same - port for a non-passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t np_sop : 1; /**< Set when a SOP is followed by an SOP for the same - port for a non-passthrough packet. - The first detected error associated with bits [5:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ -#else - uint64_t np_sop : 1; - uint64_t np_eop : 1; - uint64_t p_sop : 1; - uint64_t p_eop : 1; - uint64_t np_dat : 1; - uint64_t p_dat : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_iob_int_sum_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t p_eop : 1; /**< Set when a EOP is followed by an EOP for the same - port for a passthrough packet. - The first detected error associated with bits [3:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t p_sop : 1; /**< Set when a SOP is followed by an SOP for the same - port for a passthrough packet. - The first detected error associated with bits [3:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t np_eop : 1; /**< Set when a EOP is followed by an EOP for the same - port for a non-passthrough packet. - The first detected error associated with bits [3:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ - uint64_t np_sop : 1; /**< Set when a SOP is followed by an SOP for the same - port for a non-passthrough packet. - The first detected error associated with bits [3:0] - of this register will only be set here. A new bit - can be set when the previous reported bit is cleared. */ -#else - uint64_t np_sop : 1; - uint64_t np_eop : 1; - uint64_t p_sop : 1; - uint64_t p_eop : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_iob_int_sum_cn30xx cn31xx; - struct cvmx_iob_int_sum_cn30xx cn38xx; - struct cvmx_iob_int_sum_cn30xx cn38xxp2; - struct cvmx_iob_int_sum_s cn50xx; - struct cvmx_iob_int_sum_s cn52xx; - struct cvmx_iob_int_sum_s cn52xxp1; - struct cvmx_iob_int_sum_s cn56xx; - struct cvmx_iob_int_sum_s cn56xxp1; - struct cvmx_iob_int_sum_s cn58xx; - struct cvmx_iob_int_sum_s cn58xxp1; -} cvmx_iob_int_sum_t; - - -/** - * cvmx_iob_n2c_l2c_pri_cnt - * - * NCB To CMB L2C Priority Counter = NCB to CMB L2C Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of NCB Store/Load access to the CMB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_n2c_l2c_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of CMB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to CMB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn38xx; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn38xxp2; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn52xx; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn52xxp1; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn56xx; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn56xxp1; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn58xx; - struct cvmx_iob_n2c_l2c_pri_cnt_s cn58xxp1; -} cvmx_iob_n2c_l2c_pri_cnt_t; - - -/** - * cvmx_iob_n2c_rsp_pri_cnt - * - * NCB To CMB Response Priority Counter = NCB to CMB Response Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of NCB Responses access to the CMB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_n2c_rsp_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of CMB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to CMB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn38xx; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn38xxp2; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn52xx; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn52xxp1; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn56xx; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn56xxp1; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn58xx; - struct cvmx_iob_n2c_rsp_pri_cnt_s cn58xxp1; -} cvmx_iob_n2c_rsp_pri_cnt_t; - - -/** - * cvmx_iob_outb_com_pri_cnt - * - * Commit To NCB Priority Counter = Commit to NCB Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of Commit request to the Outbound NCB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_com_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of NCB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to NCB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_outb_com_pri_cnt_s cn38xx; - struct cvmx_iob_outb_com_pri_cnt_s cn38xxp2; - struct cvmx_iob_outb_com_pri_cnt_s cn52xx; - struct cvmx_iob_outb_com_pri_cnt_s cn52xxp1; - struct cvmx_iob_outb_com_pri_cnt_s cn56xx; - struct cvmx_iob_outb_com_pri_cnt_s cn56xxp1; - struct cvmx_iob_outb_com_pri_cnt_s cn58xx; - struct cvmx_iob_outb_com_pri_cnt_s cn58xxp1; -} cvmx_iob_outb_com_pri_cnt_t; - - -/** - * cvmx_iob_outb_control_match - * - * IOB_OUTB_CONTROL_MATCH = IOB Outbound Control Match - * - * Match pattern for the outbound control to set the OUTB_MATCH_BIT. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_control_match_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_26_63 : 38; - uint64_t mask : 8; /**< Pattern to match on the outbound NCB. */ - uint64_t eot : 1; /**< Pattern to match on the outbound NCB. */ - uint64_t dst : 8; /**< Pattern to match on the outbound NCB. */ - uint64_t src : 9; /**< Pattern to match on the outbound NCB. */ -#else - uint64_t src : 9; - uint64_t dst : 8; - uint64_t eot : 1; - uint64_t mask : 8; - uint64_t reserved_26_63 : 38; -#endif - } s; - struct cvmx_iob_outb_control_match_s cn30xx; - struct cvmx_iob_outb_control_match_s cn31xx; - struct cvmx_iob_outb_control_match_s cn38xx; - struct cvmx_iob_outb_control_match_s cn38xxp2; - struct cvmx_iob_outb_control_match_s cn50xx; - struct cvmx_iob_outb_control_match_s cn52xx; - struct cvmx_iob_outb_control_match_s cn52xxp1; - struct cvmx_iob_outb_control_match_s cn56xx; - struct cvmx_iob_outb_control_match_s cn56xxp1; - struct cvmx_iob_outb_control_match_s cn58xx; - struct cvmx_iob_outb_control_match_s cn58xxp1; -} cvmx_iob_outb_control_match_t; - - -/** - * cvmx_iob_outb_control_match_enb - * - * IOB_OUTB_CONTROL_MATCH_ENB = IOB Outbound Control Match Enable - * - * Enables the match of the corresponding bit in the IOB_OUTB_CONTROL_MATCH reister. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_control_match_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_26_63 : 38; - uint64_t mask : 8; /**< Pattern to match on the outbound NCB. */ - uint64_t eot : 1; /**< Pattern to match on the outbound NCB. */ - uint64_t dst : 8; /**< Pattern to match on the outbound NCB. */ - uint64_t src : 9; /**< Pattern to match on the outbound NCB. */ -#else - uint64_t src : 9; - uint64_t dst : 8; - uint64_t eot : 1; - uint64_t mask : 8; - uint64_t reserved_26_63 : 38; -#endif - } s; - struct cvmx_iob_outb_control_match_enb_s cn30xx; - struct cvmx_iob_outb_control_match_enb_s cn31xx; - struct cvmx_iob_outb_control_match_enb_s cn38xx; - struct cvmx_iob_outb_control_match_enb_s cn38xxp2; - struct cvmx_iob_outb_control_match_enb_s cn50xx; - struct cvmx_iob_outb_control_match_enb_s cn52xx; - struct cvmx_iob_outb_control_match_enb_s cn52xxp1; - struct cvmx_iob_outb_control_match_enb_s cn56xx; - struct cvmx_iob_outb_control_match_enb_s cn56xxp1; - struct cvmx_iob_outb_control_match_enb_s cn58xx; - struct cvmx_iob_outb_control_match_enb_s cn58xxp1; -} cvmx_iob_outb_control_match_enb_t; - - -/** - * cvmx_iob_outb_data_match - * - * IOB_OUTB_DATA_MATCH = IOB Outbound Data Match - * - * Match pattern for the outbound data to set the OUTB_MATCH_BIT. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_data_match_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Pattern to match on the outbound NCB. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_iob_outb_data_match_s cn30xx; - struct cvmx_iob_outb_data_match_s cn31xx; - struct cvmx_iob_outb_data_match_s cn38xx; - struct cvmx_iob_outb_data_match_s cn38xxp2; - struct cvmx_iob_outb_data_match_s cn50xx; - struct cvmx_iob_outb_data_match_s cn52xx; - struct cvmx_iob_outb_data_match_s cn52xxp1; - struct cvmx_iob_outb_data_match_s cn56xx; - struct cvmx_iob_outb_data_match_s cn56xxp1; - struct cvmx_iob_outb_data_match_s cn58xx; - struct cvmx_iob_outb_data_match_s cn58xxp1; -} cvmx_iob_outb_data_match_t; - - -/** - * cvmx_iob_outb_data_match_enb - * - * IOB_OUTB_DATA_MATCH_ENB = IOB Outbound Data Match Enable - * - * Enables the match of the corresponding bit in the IOB_OUTB_DATA_MATCH reister. PASS-2 Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_data_match_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Bit to enable match of. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_iob_outb_data_match_enb_s cn30xx; - struct cvmx_iob_outb_data_match_enb_s cn31xx; - struct cvmx_iob_outb_data_match_enb_s cn38xx; - struct cvmx_iob_outb_data_match_enb_s cn38xxp2; - struct cvmx_iob_outb_data_match_enb_s cn50xx; - struct cvmx_iob_outb_data_match_enb_s cn52xx; - struct cvmx_iob_outb_data_match_enb_s cn52xxp1; - struct cvmx_iob_outb_data_match_enb_s cn56xx; - struct cvmx_iob_outb_data_match_enb_s cn56xxp1; - struct cvmx_iob_outb_data_match_enb_s cn58xx; - struct cvmx_iob_outb_data_match_enb_s cn58xxp1; -} cvmx_iob_outb_data_match_enb_t; - - -/** - * cvmx_iob_outb_fpa_pri_cnt - * - * FPA To NCB Priority Counter = FPA Returns to NCB Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of FPA Rreturn Page request to the Outbound NCB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_fpa_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of NCB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to NCB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_outb_fpa_pri_cnt_s cn38xx; - struct cvmx_iob_outb_fpa_pri_cnt_s cn38xxp2; - struct cvmx_iob_outb_fpa_pri_cnt_s cn52xx; - struct cvmx_iob_outb_fpa_pri_cnt_s cn52xxp1; - struct cvmx_iob_outb_fpa_pri_cnt_s cn56xx; - struct cvmx_iob_outb_fpa_pri_cnt_s cn56xxp1; - struct cvmx_iob_outb_fpa_pri_cnt_s cn58xx; - struct cvmx_iob_outb_fpa_pri_cnt_s cn58xxp1; -} cvmx_iob_outb_fpa_pri_cnt_t; - - -/** - * cvmx_iob_outb_req_pri_cnt - * - * Request To NCB Priority Counter = Request to NCB Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of Request transfers to the Outbound NCB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_outb_req_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of NCB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to NCB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_outb_req_pri_cnt_s cn38xx; - struct cvmx_iob_outb_req_pri_cnt_s cn38xxp2; - struct cvmx_iob_outb_req_pri_cnt_s cn52xx; - struct cvmx_iob_outb_req_pri_cnt_s cn52xxp1; - struct cvmx_iob_outb_req_pri_cnt_s cn56xx; - struct cvmx_iob_outb_req_pri_cnt_s cn56xxp1; - struct cvmx_iob_outb_req_pri_cnt_s cn58xx; - struct cvmx_iob_outb_req_pri_cnt_s cn58xxp1; -} cvmx_iob_outb_req_pri_cnt_t; - - -/** - * cvmx_iob_p2c_req_pri_cnt - * - * PKO To CMB Response Priority Counter = PKO to CMB Response Priority Counter Enable and Timer Value - * - * Enables and supplies the timeout count for raising the priority of PKO Load access to the CMB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_p2c_req_pri_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt_enb : 1; /**< Enables the raising of CMB access priority - when CNT_VAL is reached. */ - uint64_t cnt_val : 15; /**< Number of core clocks to wait before raising - the priority for access to CMB. */ -#else - uint64_t cnt_val : 15; - uint64_t cnt_enb : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_iob_p2c_req_pri_cnt_s cn38xx; - struct cvmx_iob_p2c_req_pri_cnt_s cn38xxp2; - struct cvmx_iob_p2c_req_pri_cnt_s cn52xx; - struct cvmx_iob_p2c_req_pri_cnt_s cn52xxp1; - struct cvmx_iob_p2c_req_pri_cnt_s cn56xx; - struct cvmx_iob_p2c_req_pri_cnt_s cn56xxp1; - struct cvmx_iob_p2c_req_pri_cnt_s cn58xx; - struct cvmx_iob_p2c_req_pri_cnt_s cn58xxp1; -} cvmx_iob_p2c_req_pri_cnt_t; - - -/** - * cvmx_iob_pkt_err - * - * IOB_PKT_ERR = IOB Packet Error Register - * - * Provides status about the failing packet recevie error. This is a PASS-2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_pkt_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t port : 6; /**< When IOB_INT_SUM[3:0] bit is set, this field - latches the failing port associate with the - IOB_INT_SUM[3:0] bit set. */ -#else - uint64_t port : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_iob_pkt_err_s cn30xx; - struct cvmx_iob_pkt_err_s cn31xx; - struct cvmx_iob_pkt_err_s cn38xx; - struct cvmx_iob_pkt_err_s cn38xxp2; - struct cvmx_iob_pkt_err_s cn50xx; - struct cvmx_iob_pkt_err_s cn52xx; - struct cvmx_iob_pkt_err_s cn52xxp1; - struct cvmx_iob_pkt_err_s cn56xx; - struct cvmx_iob_pkt_err_s cn56xxp1; - struct cvmx_iob_pkt_err_s cn58xx; - struct cvmx_iob_pkt_err_s cn58xxp1; -} cvmx_iob_pkt_err_t; - - -/** - * cvmx_iob_to_cmb_credits - * - * IOB_TO_CMB_CREDITS = IOB To CMB Credits - * - * Controls the number of reads and writes that may be outstanding to the L2C (via the CMB). - */ -typedef union -{ - uint64_t u64; - struct cvmx_iob_to_cmb_credits_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t pko_rd : 3; /**< Number of PKO reads that can be out to L2C where - 0 == 8-credits. */ - uint64_t ncb_rd : 3; /**< Number of NCB reads that can be out to L2C where - 0 == 8-credits. */ - uint64_t ncb_wr : 3; /**< Number of NCB/PKI writes that can be out to L2C - where 0 == 8-credits. */ -#else - uint64_t ncb_wr : 3; - uint64_t ncb_rd : 3; - uint64_t pko_rd : 3; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_iob_to_cmb_credits_s cn52xx; -} cvmx_iob_to_cmb_credits_t; - - -/** - * cvmx_ipd_1st_mbuff_skip - * - * IPD_1ST_MBUFF_SKIP = IPD First MBUFF Word Skip Size - * - * The number of words that the IPD will skip when writing the first MBUFF. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_1st_mbuff_skip_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t skip_sz : 6; /**< The number of 8-byte words from the top of the - 1st MBUFF that the IPD will store the next-pointer. - Legal values are 0 to 32, where the MAX value - is also limited to: - IPD_PACKET_MBUFF_SIZE[MB_SIZE] - 18. */ -#else - uint64_t skip_sz : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_ipd_1st_mbuff_skip_s cn30xx; - struct cvmx_ipd_1st_mbuff_skip_s cn31xx; - struct cvmx_ipd_1st_mbuff_skip_s cn38xx; - struct cvmx_ipd_1st_mbuff_skip_s cn38xxp2; - struct cvmx_ipd_1st_mbuff_skip_s cn50xx; - struct cvmx_ipd_1st_mbuff_skip_s cn52xx; - struct cvmx_ipd_1st_mbuff_skip_s cn52xxp1; - struct cvmx_ipd_1st_mbuff_skip_s cn56xx; - struct cvmx_ipd_1st_mbuff_skip_s cn56xxp1; - struct cvmx_ipd_1st_mbuff_skip_s cn58xx; - struct cvmx_ipd_1st_mbuff_skip_s cn58xxp1; -} cvmx_ipd_1st_mbuff_skip_t; - - -/** - * cvmx_ipd_1st_next_ptr_back - * - * IPD_1st_NEXT_PTR_BACK = IPD First Next Pointer Back Values - * - * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_1st_next_ptr_back_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t back : 4; /**< Used to find head of buffer from the nxt-hdr-ptr. */ -#else - uint64_t back : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_ipd_1st_next_ptr_back_s cn30xx; - struct cvmx_ipd_1st_next_ptr_back_s cn31xx; - struct cvmx_ipd_1st_next_ptr_back_s cn38xx; - struct cvmx_ipd_1st_next_ptr_back_s cn38xxp2; - struct cvmx_ipd_1st_next_ptr_back_s cn50xx; - struct cvmx_ipd_1st_next_ptr_back_s cn52xx; - struct cvmx_ipd_1st_next_ptr_back_s cn52xxp1; - struct cvmx_ipd_1st_next_ptr_back_s cn56xx; - struct cvmx_ipd_1st_next_ptr_back_s cn56xxp1; - struct cvmx_ipd_1st_next_ptr_back_s cn58xx; - struct cvmx_ipd_1st_next_ptr_back_s cn58xxp1; -} cvmx_ipd_1st_next_ptr_back_t; - - -/** - * cvmx_ipd_2nd_next_ptr_back - * - * IPD_2nd_NEXT_PTR_BACK = IPD Second Next Pointer Back Value - * - * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_2nd_next_ptr_back_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t back : 4; /**< Used to find head of buffer from the nxt-hdr-ptr. */ -#else - uint64_t back : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_ipd_2nd_next_ptr_back_s cn30xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn31xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn38xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn38xxp2; - struct cvmx_ipd_2nd_next_ptr_back_s cn50xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn52xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn52xxp1; - struct cvmx_ipd_2nd_next_ptr_back_s cn56xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn56xxp1; - struct cvmx_ipd_2nd_next_ptr_back_s cn58xx; - struct cvmx_ipd_2nd_next_ptr_back_s cn58xxp1; -} cvmx_ipd_2nd_next_ptr_back_t; - - -/** - * cvmx_ipd_bist_status - * - * IPD_BIST_STATUS = IPD BIST STATUS - * - * BIST Status for IPD's Memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t csr_mem : 1; /**< CSR Register Memory Bist Status. */ - uint64_t csr_ncmd : 1; /**< CSR NCB Commands Memory Bist Status. */ - uint64_t pwq_wqed : 1; /**< PWQ PIP WQE DONE Memory Bist Status. */ - uint64_t pwq_wp1 : 1; /**< PWQ WQE PAGE1 PTR Memory Bist Status. */ - uint64_t pwq_pow : 1; /**< PWQ POW MEM Memory Bist Status. */ - uint64_t ipq_pbe1 : 1; /**< IPQ PBE1 Memory Bist Status. */ - uint64_t ipq_pbe0 : 1; /**< IPQ PBE0 Memory Bist Status. */ - uint64_t pbm3 : 1; /**< PBM3 Memory Bist Status. */ - uint64_t pbm2 : 1; /**< PBM2 Memory Bist Status. */ - uint64_t pbm1 : 1; /**< PBM1 Memory Bist Status. */ - uint64_t pbm0 : 1; /**< PBM0 Memory Bist Status. */ - uint64_t pbm_word : 1; /**< PBM_WORD Memory Bist Status. */ - uint64_t pwq1 : 1; /**< PWQ1 Memory Bist Status. */ - uint64_t pwq0 : 1; /**< PWQ0 Memory Bist Status. */ - uint64_t prc_off : 1; /**< PRC_OFF Memory Bist Status. */ - uint64_t ipd_old : 1; /**< IPD_OLD Memory Bist Status. */ - uint64_t ipd_new : 1; /**< IPD_NEW Memory Bist Status. */ - uint64_t pwp : 1; /**< PWP Memory Bist Status. */ -#else - uint64_t pwp : 1; - uint64_t ipd_new : 1; - uint64_t ipd_old : 1; - uint64_t prc_off : 1; - uint64_t pwq0 : 1; - uint64_t pwq1 : 1; - uint64_t pbm_word : 1; - uint64_t pbm0 : 1; - uint64_t pbm1 : 1; - uint64_t pbm2 : 1; - uint64_t pbm3 : 1; - uint64_t ipq_pbe0 : 1; - uint64_t ipq_pbe1 : 1; - uint64_t pwq_pow : 1; - uint64_t pwq_wp1 : 1; - uint64_t pwq_wqed : 1; - uint64_t csr_ncmd : 1; - uint64_t csr_mem : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_ipd_bist_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t pwq_wqed : 1; /**< PWQ PIP WQE DONE Memory Bist Status. */ - uint64_t pwq_wp1 : 1; /**< PWQ WQE PAGE1 PTR Memory Bist Status. */ - uint64_t pwq_pow : 1; /**< PWQ POW MEM Memory Bist Status. */ - uint64_t ipq_pbe1 : 1; /**< IPQ PBE1 Memory Bist Status. */ - uint64_t ipq_pbe0 : 1; /**< IPQ PBE0 Memory Bist Status. */ - uint64_t pbm3 : 1; /**< PBM3 Memory Bist Status. */ - uint64_t pbm2 : 1; /**< PBM2 Memory Bist Status. */ - uint64_t pbm1 : 1; /**< PBM1 Memory Bist Status. */ - uint64_t pbm0 : 1; /**< PBM0 Memory Bist Status. */ - uint64_t pbm_word : 1; /**< PBM_WORD Memory Bist Status. */ - uint64_t pwq1 : 1; /**< PWQ1 Memory Bist Status. */ - uint64_t pwq0 : 1; /**< PWQ0 Memory Bist Status. */ - uint64_t prc_off : 1; /**< PRC_OFF Memory Bist Status. */ - uint64_t ipd_old : 1; /**< IPD_OLD Memory Bist Status. */ - uint64_t ipd_new : 1; /**< IPD_NEW Memory Bist Status. */ - uint64_t pwp : 1; /**< PWP Memory Bist Status. */ -#else - uint64_t pwp : 1; - uint64_t ipd_new : 1; - uint64_t ipd_old : 1; - uint64_t prc_off : 1; - uint64_t pwq0 : 1; - uint64_t pwq1 : 1; - uint64_t pbm_word : 1; - uint64_t pbm0 : 1; - uint64_t pbm1 : 1; - uint64_t pbm2 : 1; - uint64_t pbm3 : 1; - uint64_t ipq_pbe0 : 1; - uint64_t ipq_pbe1 : 1; - uint64_t pwq_pow : 1; - uint64_t pwq_wp1 : 1; - uint64_t pwq_wqed : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn30xx; - struct cvmx_ipd_bist_status_cn30xx cn31xx; - struct cvmx_ipd_bist_status_cn30xx cn38xx; - struct cvmx_ipd_bist_status_cn30xx cn38xxp2; - struct cvmx_ipd_bist_status_cn30xx cn50xx; - struct cvmx_ipd_bist_status_s cn52xx; - struct cvmx_ipd_bist_status_s cn52xxp1; - struct cvmx_ipd_bist_status_s cn56xx; - struct cvmx_ipd_bist_status_s cn56xxp1; - struct cvmx_ipd_bist_status_cn30xx cn58xx; - struct cvmx_ipd_bist_status_cn30xx cn58xxp1; -} cvmx_ipd_bist_status_t; - - -/** - * cvmx_ipd_bp_prt_red_end - * - * IPD_BP_PRT_RED_END = IPD Backpressure Port RED Enable - * - * When IPD applies backpressure to a PORT and the corresponding bit in this register is set, - * the RED Unit will drop packets for that port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_bp_prt_red_end_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t prt_enb : 40; /**< The port corresponding to the bit position in this - field, will allow RED to drop back when port level - backpressure is applied to the port. The applying - of port-level backpressure for this RED dropping - does not take into consideration the value of - IPD_PORTX_BP_PAGE_CNT[BP_ENB]. */ -#else - uint64_t prt_enb : 40; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_ipd_bp_prt_red_end_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t prt_enb : 36; /**< The port corresponding to the bit position in this - field, will allow RED to drop back when port level - backpressure is applied to the port. The applying - of port-level backpressure for this RED dropping - does not take into consideration the value of - IPD_PORTX_BP_PAGE_CNT[BP_ENB]. */ -#else - uint64_t prt_enb : 36; - uint64_t reserved_36_63 : 28; -#endif - } cn30xx; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn31xx; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xx; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xxp2; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn50xx; - struct cvmx_ipd_bp_prt_red_end_s cn52xx; - struct cvmx_ipd_bp_prt_red_end_s cn52xxp1; - struct cvmx_ipd_bp_prt_red_end_s cn56xx; - struct cvmx_ipd_bp_prt_red_end_s cn56xxp1; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xx; - struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xxp1; -} cvmx_ipd_bp_prt_red_end_t; - - -/** - * cvmx_ipd_clk_count - * - * IPD_CLK_COUNT = IPD Clock Count - * - * Counts the number of core clocks periods since the de-asserition of reset. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_clk_count_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t clk_cnt : 64; /**< This counter will be zeroed when reset is applied - and will increment every rising edgge of the - core-clock. PASS2 FIELD. */ -#else - uint64_t clk_cnt : 64; -#endif - } s; - struct cvmx_ipd_clk_count_s cn30xx; - struct cvmx_ipd_clk_count_s cn31xx; - struct cvmx_ipd_clk_count_s cn38xx; - struct cvmx_ipd_clk_count_s cn38xxp2; - struct cvmx_ipd_clk_count_s cn50xx; - struct cvmx_ipd_clk_count_s cn52xx; - struct cvmx_ipd_clk_count_s cn52xxp1; - struct cvmx_ipd_clk_count_s cn56xx; - struct cvmx_ipd_clk_count_s cn56xxp1; - struct cvmx_ipd_clk_count_s cn58xx; - struct cvmx_ipd_clk_count_s cn58xxp1; -} cvmx_ipd_clk_count_t; - - -/** - * cvmx_ipd_ctl_status - * - * IPD_CTL_STATUS = IPS'd Control Status Register - * - * The number of words in a MBUFF used for packet data store. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t no_wptr : 1; /**< When set '1' the WQE pointers will not be used and - the WQE will be located at the front of the packet. */ - uint64_t pq_apkt : 1; /**< When set IPD_PORT_QOS_X_CNT WILL be incremented - by one for every work queue entry that is sent to - POW. */ - uint64_t pq_nabuf : 1; /**< When set IPD_PORT_QOS_X_CNT WILL NOT be - incremented when IPD allocates a buffer for a - packet. */ - uint64_t ipd_full : 1; /**< When clear '0' the IPD acts normaly. - When set '1' the IPD drive the IPD_BUFF_FULL line to - the IOB-arbiter, telling it to not give grants to - NCB devices sending packet data. */ - uint64_t pkt_off : 1; /**< When clear '0' the IPD working normaly, - buffering the received packet data. When set '1' - the IPD will not buffer the received packet data. */ - uint64_t len_m8 : 1; /**< Setting of this bit will subtract 8 from the - data-length field in the header written wo the - POW and the top of a MBUFF. - OCTEAN PASS2 generates a length that includes the - length of the data + 8 for the header-field. By - setting this bit the 8 for the instr-field will - not be included in the length field of the header. - NOTE: IPD is compliant with the spec when this - field is '1'. */ - uint64_t reset : 1; /**< When set '1' causes a reset of the IPD, except - RSL. */ - uint64_t addpkt : 1; /**< When IPD_CTL_STATUS[ADDPKT] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL be incremented by one for every work - queue entry that is sent to POW. - PASS-2 Field. */ - uint64_t naddbuf : 1; /**< When IPD_CTL_STATUS[NADDBUF] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL NOT be incremented when IPD allocates a - buffer for a packet on the port. - PASS-2 Field. */ - uint64_t pkt_lend : 1; /**< Changes PKT to little endian writes to L2C */ - uint64_t wqe_lend : 1; /**< Changes WQE to little endian writes to L2C */ - uint64_t pbp_en : 1; /**< Port back pressure enable. When set '1' enables - the sending of port level backpressure to the - Octane input-ports. Once enabled the sending of - port-level-backpressure can not be disabled by - changing the value of this bit. */ - cvmx_ipd_mode_t opc_mode : 2; /**< 0 ==> All packet data (and next buffer pointers) - is written through to memory. - 1 ==> All packet data (and next buffer pointers) is - written into the cache. - 2 ==> The first aligned cache block holding the - packet data (and initial next buffer pointer) is - written to the L2 cache, all remaining cache blocks - are not written to the L2 cache. - 3 ==> The first two aligned cache blocks holding - the packet data (and initial next buffer pointer) - are written to the L2 cache, all remaining cache - blocks are not written to the L2 cache. */ - uint64_t ipd_en : 1; /**< When set '1' enable the operation of the IPD. - When clear '0', the IPD will appear to the - IOB-arbiter to be applying backpressure, this - causes the IOB-Arbiter to not send grants to NCB - devices requesting to send packet data to the IPD. */ -#else - uint64_t ipd_en : 1; - cvmx_ipd_mode_t opc_mode : 2; - uint64_t pbp_en : 1; - uint64_t wqe_lend : 1; - uint64_t pkt_lend : 1; - uint64_t naddbuf : 1; - uint64_t addpkt : 1; - uint64_t reset : 1; - uint64_t len_m8 : 1; - uint64_t pkt_off : 1; - uint64_t ipd_full : 1; - uint64_t pq_nabuf : 1; - uint64_t pq_apkt : 1; - uint64_t no_wptr : 1; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_ipd_ctl_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t len_m8 : 1; /**< Setting of this bit will subtract 8 from the - data-length field in the header written wo the - POW and the top of a MBUFF. - OCTEAN generates a length that includes the - length of the data + 8 for the header-field. By - setting this bit the 8 for the instr-field will - not be included in the length field of the header. - NOTE: IPD is compliant with the spec when this - field is '1'. */ - uint64_t reset : 1; /**< When set '1' causes a reset of the IPD, except - RSL. */ - uint64_t addpkt : 1; /**< When IPD_CTL_STATUS[ADDPKT] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL be incremented by one for every work - queue entry that is sent to POW. */ - uint64_t naddbuf : 1; /**< When IPD_CTL_STATUS[NADDBUF] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL NOT be incremented when IPD allocates a - buffer for a packet on the port. */ - uint64_t pkt_lend : 1; /**< Changes PKT to little endian writes to L2C */ - uint64_t wqe_lend : 1; /**< Changes WQE to little endian writes to L2C */ - uint64_t pbp_en : 1; /**< Port back pressure enable. When set '1' enables - the sending of port level backpressure to the - Octane input-ports. Once enabled the sending of - port-level-backpressure can not be disabled by - changing the value of this bit. - GMXX_INF_MODE[EN] must be set to '1' for each - packet interface which requires port back pressure - prior to setting PBP_EN to '1'. */ - cvmx_ipd_mode_t opc_mode : 2; /**< 0 ==> All packet data (and next buffer pointers) - is written through to memory. - 1 ==> All packet data (and next buffer pointers) is - written into the cache. - 2 ==> The first aligned cache block holding the - packet data (and initial next buffer pointer) is - written to the L2 cache, all remaining cache blocks - are not written to the L2 cache. - 3 ==> The first two aligned cache blocks holding - the packet data (and initial next buffer pointer) - are written to the L2 cache, all remaining cache - blocks are not written to the L2 cache. */ - uint64_t ipd_en : 1; /**< When set '1' enable the operation of the IPD. */ -#else - uint64_t ipd_en : 1; - cvmx_ipd_mode_t opc_mode : 2; - uint64_t pbp_en : 1; - uint64_t wqe_lend : 1; - uint64_t pkt_lend : 1; - uint64_t naddbuf : 1; - uint64_t addpkt : 1; - uint64_t reset : 1; - uint64_t len_m8 : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn30xx; - struct cvmx_ipd_ctl_status_cn30xx cn31xx; - struct cvmx_ipd_ctl_status_cn30xx cn38xx; - struct cvmx_ipd_ctl_status_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t reset : 1; /**< When set '1' causes a reset of the IPD, except - RSL. */ - uint64_t addpkt : 1; /**< When IPD_CTL_STATUS[ADDPKT] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL be incremented by one for every work - queue entry that is sent to POW. - PASS-2 Field. */ - uint64_t naddbuf : 1; /**< When IPD_CTL_STATUS[NADDBUF] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL NOT be incremented when IPD allocates a - buffer for a packet on the port. - PASS-2 Field. */ - uint64_t pkt_lend : 1; /**< Changes PKT to little endian writes to L2C */ - uint64_t wqe_lend : 1; /**< Changes WQE to little endian writes to L2C */ - uint64_t pbp_en : 1; /**< Port back pressure enable. When set '1' enables - the sending of port level backpressure to the - Octane input-ports. Once enabled the sending of - port-level-backpressure can not be disabled by - changing the value of this bit. */ - cvmx_ipd_mode_t opc_mode : 2; /**< 0 ==> All packet data (and next buffer pointers) - is written through to memory. - 1 ==> All packet data (and next buffer pointers) is - written into the cache. - 2 ==> The first aligned cache block holding the - packet data (and initial next buffer pointer) is - written to the L2 cache, all remaining cache blocks - are not written to the L2 cache. - 3 ==> The first two aligned cache blocks holding - the packet data (and initial next buffer pointer) - are written to the L2 cache, all remaining cache - blocks are not written to the L2 cache. */ - uint64_t ipd_en : 1; /**< When set '1' enable the operation of the IPD. */ -#else - uint64_t ipd_en : 1; - cvmx_ipd_mode_t opc_mode : 2; - uint64_t pbp_en : 1; - uint64_t wqe_lend : 1; - uint64_t pkt_lend : 1; - uint64_t naddbuf : 1; - uint64_t addpkt : 1; - uint64_t reset : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn38xxp2; - struct cvmx_ipd_ctl_status_s cn50xx; - struct cvmx_ipd_ctl_status_s cn52xx; - struct cvmx_ipd_ctl_status_s cn52xxp1; - struct cvmx_ipd_ctl_status_s cn56xx; - struct cvmx_ipd_ctl_status_s cn56xxp1; - struct cvmx_ipd_ctl_status_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t ipd_full : 1; /**< When clear '0' the IPD acts normaly. - When set '1' the IPD drive the IPD_BUFF_FULL line to - the IOB-arbiter, telling it to not give grants to - NCB devices sending packet data. */ - uint64_t pkt_off : 1; /**< When clear '0' the IPD working normaly, - buffering the received packet data. When set '1' - the IPD will not buffer the received packet data. */ - uint64_t len_m8 : 1; /**< Setting of this bit will subtract 8 from the - data-length field in the header written wo the - POW and the top of a MBUFF. - OCTEAN PASS2 generates a length that includes the - length of the data + 8 for the header-field. By - setting this bit the 8 for the instr-field will - not be included in the length field of the header. - NOTE: IPD is compliant with the spec when this - field is '1'. */ - uint64_t reset : 1; /**< When set '1' causes a reset of the IPD, except - RSL. */ - uint64_t addpkt : 1; /**< When IPD_CTL_STATUS[ADDPKT] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL be incremented by one for every work - queue entry that is sent to POW. - PASS-2 Field. */ - uint64_t naddbuf : 1; /**< When IPD_CTL_STATUS[NADDBUF] is set, - IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL] - WILL NOT be incremented when IPD allocates a - buffer for a packet on the port. - PASS-2 Field. */ - uint64_t pkt_lend : 1; /**< Changes PKT to little endian writes to L2C */ - uint64_t wqe_lend : 1; /**< Changes WQE to little endian writes to L2C */ - uint64_t pbp_en : 1; /**< Port back pressure enable. When set '1' enables - the sending of port level backpressure to the - Octane input-ports. Once enabled the sending of - port-level-backpressure can not be disabled by - changing the value of this bit. */ - cvmx_ipd_mode_t opc_mode : 2; /**< 0 ==> All packet data (and next buffer pointers) - is written through to memory. - 1 ==> All packet data (and next buffer pointers) is - written into the cache. - 2 ==> The first aligned cache block holding the - packet data (and initial next buffer pointer) is - written to the L2 cache, all remaining cache blocks - are not written to the L2 cache. - 3 ==> The first two aligned cache blocks holding - the packet data (and initial next buffer pointer) - are written to the L2 cache, all remaining cache - blocks are not written to the L2 cache. */ - uint64_t ipd_en : 1; /**< When set '1' enable the operation of the IPD. - When clear '0', the IPD will appear to the - IOB-arbiter to be applying backpressure, this - causes the IOB-Arbiter to not send grants to NCB - devices requesting to send packet data to the IPD. */ -#else - uint64_t ipd_en : 1; - cvmx_ipd_mode_t opc_mode : 2; - uint64_t pbp_en : 1; - uint64_t wqe_lend : 1; - uint64_t pkt_lend : 1; - uint64_t naddbuf : 1; - uint64_t addpkt : 1; - uint64_t reset : 1; - uint64_t len_m8 : 1; - uint64_t pkt_off : 1; - uint64_t ipd_full : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn58xx; - struct cvmx_ipd_ctl_status_cn58xx cn58xxp1; -} cvmx_ipd_ctl_status_t; - - -/** - * cvmx_ipd_int_enb - * - * IPD_INTERRUPT_ENB = IPD Interrupt Enable Register - * - * Used to enable the various interrupting conditions of IPD - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t pq_sub : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. */ - uint64_t pq_add : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. */ - uint64_t bc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t d_coll : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t c_coll : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t cc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t dc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t bp_sub : 1; /**< Enables interrupts when a backpressure subtract - has an illegal value. */ - uint64_t prc_par3 : 1; /**< Enable parity error interrupts for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Enable parity error interrupts for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Enable parity error interrupts for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Enable parity error interrupts for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t dc_ovr : 1; - uint64_t cc_ovr : 1; - uint64_t c_coll : 1; - uint64_t d_coll : 1; - uint64_t bc_ovr : 1; - uint64_t pq_add : 1; - uint64_t pq_sub : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_ipd_int_enb_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t bp_sub : 1; /**< Enables interrupts when a backpressure subtract - has an illegal value. */ - uint64_t prc_par3 : 1; /**< Enable parity error interrupts for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Enable parity error interrupts for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Enable parity error interrupts for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Enable parity error interrupts for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn30xx; - struct cvmx_ipd_int_enb_cn30xx cn31xx; - struct cvmx_ipd_int_enb_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t bc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t d_coll : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t c_coll : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t cc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t dc_ovr : 1; /**< Allows an interrupt to be sent when the - corresponding bit in the IPD_INT_SUM is set. - This is a PASS-3 Field. */ - uint64_t bp_sub : 1; /**< Enables interrupts when a backpressure subtract - has an illegal value. */ - uint64_t prc_par3 : 1; /**< Enable parity error interrupts for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Enable parity error interrupts for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Enable parity error interrupts for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Enable parity error interrupts for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t dc_ovr : 1; - uint64_t cc_ovr : 1; - uint64_t c_coll : 1; - uint64_t d_coll : 1; - uint64_t bc_ovr : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn38xx; - struct cvmx_ipd_int_enb_cn30xx cn38xxp2; - struct cvmx_ipd_int_enb_cn38xx cn50xx; - struct cvmx_ipd_int_enb_s cn52xx; - struct cvmx_ipd_int_enb_s cn52xxp1; - struct cvmx_ipd_int_enb_s cn56xx; - struct cvmx_ipd_int_enb_s cn56xxp1; - struct cvmx_ipd_int_enb_cn38xx cn58xx; - struct cvmx_ipd_int_enb_cn38xx cn58xxp1; -} cvmx_ipd_int_enb_t; - - -/** - * cvmx_ipd_int_sum - * - * IPD_INTERRUPT_SUM = IPD Interrupt Summary Register - * - * Set when an interrupt condition occurs, write '1' to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t pq_sub : 1; /**< Set when a port-qos does an sub to the count - that causes the counter to wrap. */ - uint64_t pq_add : 1; /**< Set when a port-qos does an add to the count - that causes the counter to wrap. */ - uint64_t bc_ovr : 1; /**< Set when the byte-count to send to IOB overflows. - This is a PASS-3 Field. */ - uint64_t d_coll : 1; /**< Set when the packet/WQE data to be sent to IOB - collides. - This is a PASS-3 Field. */ - uint64_t c_coll : 1; /**< Set when the packet/WQE commands to be sent to IOB - collides. - This is a PASS-3 Field. */ - uint64_t cc_ovr : 1; /**< Set when the command credits to the IOB overflow. - This is a PASS-3 Field. */ - uint64_t dc_ovr : 1; /**< Set when the data credits to the IOB overflow. - This is a PASS-3 Field. */ - uint64_t bp_sub : 1; /**< Set when a backpressure subtract is done with a - supplied illegal value. */ - uint64_t prc_par3 : 1; /**< Set when a parity error is dected for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Set when a parity error is dected for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Set when a parity error is dected for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Set when a parity error is dected for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t dc_ovr : 1; - uint64_t cc_ovr : 1; - uint64_t c_coll : 1; - uint64_t d_coll : 1; - uint64_t bc_ovr : 1; - uint64_t pq_add : 1; - uint64_t pq_sub : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_ipd_int_sum_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t bp_sub : 1; /**< Set when a backpressure subtract is done with a - supplied illegal value. */ - uint64_t prc_par3 : 1; /**< Set when a parity error is dected for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Set when a parity error is dected for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Set when a parity error is dected for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Set when a parity error is dected for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn30xx; - struct cvmx_ipd_int_sum_cn30xx cn31xx; - struct cvmx_ipd_int_sum_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t bc_ovr : 1; /**< Set when the byte-count to send to IOB overflows. - This is a PASS-3 Field. */ - uint64_t d_coll : 1; /**< Set when the packet/WQE data to be sent to IOB - collides. - This is a PASS-3 Field. */ - uint64_t c_coll : 1; /**< Set when the packet/WQE commands to be sent to IOB - collides. - This is a PASS-3 Field. */ - uint64_t cc_ovr : 1; /**< Set when the command credits to the IOB overflow. - This is a PASS-3 Field. */ - uint64_t dc_ovr : 1; /**< Set when the data credits to the IOB overflow. - This is a PASS-3 Field. */ - uint64_t bp_sub : 1; /**< Set when a backpressure subtract is done with a - supplied illegal value. */ - uint64_t prc_par3 : 1; /**< Set when a parity error is dected for bits - [127:96] of the PBM memory. */ - uint64_t prc_par2 : 1; /**< Set when a parity error is dected for bits - [95:64] of the PBM memory. */ - uint64_t prc_par1 : 1; /**< Set when a parity error is dected for bits - [63:32] of the PBM memory. */ - uint64_t prc_par0 : 1; /**< Set when a parity error is dected for bits - [31:0] of the PBM memory. */ -#else - uint64_t prc_par0 : 1; - uint64_t prc_par1 : 1; - uint64_t prc_par2 : 1; - uint64_t prc_par3 : 1; - uint64_t bp_sub : 1; - uint64_t dc_ovr : 1; - uint64_t cc_ovr : 1; - uint64_t c_coll : 1; - uint64_t d_coll : 1; - uint64_t bc_ovr : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn38xx; - struct cvmx_ipd_int_sum_cn30xx cn38xxp2; - struct cvmx_ipd_int_sum_cn38xx cn50xx; - struct cvmx_ipd_int_sum_s cn52xx; - struct cvmx_ipd_int_sum_s cn52xxp1; - struct cvmx_ipd_int_sum_s cn56xx; - struct cvmx_ipd_int_sum_s cn56xxp1; - struct cvmx_ipd_int_sum_cn38xx cn58xx; - struct cvmx_ipd_int_sum_cn38xx cn58xxp1; -} cvmx_ipd_int_sum_t; - - -/** - * cvmx_ipd_not_1st_mbuff_skip - * - * IPD_NOT_1ST_MBUFF_SKIP = IPD Not First MBUFF Word Skip Size - * - * The number of words that the IPD will skip when writing any MBUFF that is not the first. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_not_1st_mbuff_skip_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t skip_sz : 6; /**< The number of 8-byte words from the top of any - MBUFF, that is not the 1st MBUFF, that the IPD - will write the next-pointer. - Legal values are 0 to 32, where the MAX value - is also limited to: - IPD_PACKET_MBUFF_SIZE[MB_SIZE] - 16. */ -#else - uint64_t skip_sz : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_ipd_not_1st_mbuff_skip_s cn30xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn31xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn38xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn38xxp2; - struct cvmx_ipd_not_1st_mbuff_skip_s cn50xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn52xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn52xxp1; - struct cvmx_ipd_not_1st_mbuff_skip_s cn56xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn56xxp1; - struct cvmx_ipd_not_1st_mbuff_skip_s cn58xx; - struct cvmx_ipd_not_1st_mbuff_skip_s cn58xxp1; -} cvmx_ipd_not_1st_mbuff_skip_t; - - -/** - * cvmx_ipd_packet_mbuff_size - * - * IPD_PACKET_MBUFF_SIZE = IPD's PACKET MUBUF Size In Words - * - * The number of words in a MBUFF used for packet data store. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_packet_mbuff_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t mb_size : 12; /**< The number of 8-byte words in a MBUF. - This must be a number in the range of 32 to - 2048. - This is also the size of the FPA's - Queue-0 Free-Page. */ -#else - uint64_t mb_size : 12; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_ipd_packet_mbuff_size_s cn30xx; - struct cvmx_ipd_packet_mbuff_size_s cn31xx; - struct cvmx_ipd_packet_mbuff_size_s cn38xx; - struct cvmx_ipd_packet_mbuff_size_s cn38xxp2; - struct cvmx_ipd_packet_mbuff_size_s cn50xx; - struct cvmx_ipd_packet_mbuff_size_s cn52xx; - struct cvmx_ipd_packet_mbuff_size_s cn52xxp1; - struct cvmx_ipd_packet_mbuff_size_s cn56xx; - struct cvmx_ipd_packet_mbuff_size_s cn56xxp1; - struct cvmx_ipd_packet_mbuff_size_s cn58xx; - struct cvmx_ipd_packet_mbuff_size_s cn58xxp1; -} cvmx_ipd_packet_mbuff_size_t; - - -/** - * cvmx_ipd_pkt_ptr_valid - * - * IPD_PKT_PTR_VALID = IPD's Packet Pointer Valid - * - * The value of the packet-pointer fetched and in the valid register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_pkt_ptr_valid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t ptr : 29; /**< Pointer value. */ -#else - uint64_t ptr : 29; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_ipd_pkt_ptr_valid_s cn30xx; - struct cvmx_ipd_pkt_ptr_valid_s cn31xx; - struct cvmx_ipd_pkt_ptr_valid_s cn38xx; - struct cvmx_ipd_pkt_ptr_valid_s cn50xx; - struct cvmx_ipd_pkt_ptr_valid_s cn52xx; - struct cvmx_ipd_pkt_ptr_valid_s cn52xxp1; - struct cvmx_ipd_pkt_ptr_valid_s cn56xx; - struct cvmx_ipd_pkt_ptr_valid_s cn56xxp1; - struct cvmx_ipd_pkt_ptr_valid_s cn58xx; - struct cvmx_ipd_pkt_ptr_valid_s cn58xxp1; -} cvmx_ipd_pkt_ptr_valid_t; - - -/** - * cvmx_ipd_port#_bp_page_cnt - * - * IPD_PORTX_BP_PAGE_CNT = IPD Port Backpressure Page Count - * - * The number of pages in use by the port that when exceeded, backpressure will be applied to the port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_portx_bp_page_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t bp_enb : 1; /**< When set '1' BP will be applied, if '0' BP will - not be applied to port. */ - uint64_t page_cnt : 17; /**< The number of page pointers assigned to - the port, that when exceeded will cause - back-pressure to be applied to the port. - This value is in 256 page-pointer increments, - (i.e. 0 = 0-page-ptrs, 1 = 256-page-ptrs,..) */ -#else - uint64_t page_cnt : 17; - uint64_t bp_enb : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_ipd_portx_bp_page_cnt_s cn30xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn31xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn38xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn38xxp2; - struct cvmx_ipd_portx_bp_page_cnt_s cn50xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn52xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn52xxp1; - struct cvmx_ipd_portx_bp_page_cnt_s cn56xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn56xxp1; - struct cvmx_ipd_portx_bp_page_cnt_s cn58xx; - struct cvmx_ipd_portx_bp_page_cnt_s cn58xxp1; -} cvmx_ipd_portx_bp_page_cnt_t; - - -/** - * cvmx_ipd_port#_bp_page_cnt2 - * - * IPD_PORTX_BP_PAGE_CNT2 = IPD Port Backpressure Page Count - * - * The number of pages in use by the port that when exceeded, backpressure will be applied to the port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_portx_bp_page_cnt2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t bp_enb : 1; /**< When set '1' BP will be applied, if '0' BP will - not be applied to port. */ - uint64_t page_cnt : 17; /**< The number of page pointers assigned to - the port, that when exceeded will cause - back-pressure to be applied to the port. - This value is in 256 page-pointer increments, - (i.e. 0 = 0-page-ptrs, 1 = 256-page-ptrs,..) */ -#else - uint64_t page_cnt : 17; - uint64_t bp_enb : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_ipd_portx_bp_page_cnt2_s cn52xx; - struct cvmx_ipd_portx_bp_page_cnt2_s cn52xxp1; - struct cvmx_ipd_portx_bp_page_cnt2_s cn56xx; - struct cvmx_ipd_portx_bp_page_cnt2_s cn56xxp1; -} cvmx_ipd_portx_bp_page_cnt2_t; - - -/** - * cvmx_ipd_port_bp_counters2_pair# - * - * IPD_PORT_BP_COUNTERS2_PAIRX = MBUF Counters port Ports used to generate Back Pressure Per Port. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_port_bp_counters2_pairx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_25_63 : 39; - uint64_t cnt_val : 25; /**< Number of MBUFs being used by data on this port. */ -#else - uint64_t cnt_val : 25; - uint64_t reserved_25_63 : 39; -#endif - } s; - struct cvmx_ipd_port_bp_counters2_pairx_s cn52xx; - struct cvmx_ipd_port_bp_counters2_pairx_s cn52xxp1; - struct cvmx_ipd_port_bp_counters2_pairx_s cn56xx; - struct cvmx_ipd_port_bp_counters2_pairx_s cn56xxp1; -} cvmx_ipd_port_bp_counters2_pairx_t; - - -/** - * cvmx_ipd_port_bp_counters_pair# - * - * IPD_PORT_BP_COUNTERS_PAIRX = MBUF Counters port Ports used to generate Back Pressure Per Port. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_port_bp_counters_pairx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_25_63 : 39; - uint64_t cnt_val : 25; /**< Number of MBUFs being used by data on this port. */ -#else - uint64_t cnt_val : 25; - uint64_t reserved_25_63 : 39; -#endif - } s; - struct cvmx_ipd_port_bp_counters_pairx_s cn30xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn31xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn38xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn38xxp2; - struct cvmx_ipd_port_bp_counters_pairx_s cn50xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn52xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn52xxp1; - struct cvmx_ipd_port_bp_counters_pairx_s cn56xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn56xxp1; - struct cvmx_ipd_port_bp_counters_pairx_s cn58xx; - struct cvmx_ipd_port_bp_counters_pairx_s cn58xxp1; -} cvmx_ipd_port_bp_counters_pairx_t; - - -/** - * cvmx_ipd_port_qos_#_cnt - * - * IPD_PORT_QOS_X_CNT = IPD PortX QOS-0 Count - * - * A counter per port/qos. Counter are originzed in sequence where the first 8 counter (0-7) belong to Port-0 - * QOS 0-7 respectively followed by port 1 at (8-15), etc - * Ports 0-3, 36-39 - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_port_qos_x_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t wmark : 32; /**< When the field CNT after being modified is equal to - or crosses this value (i.e. value was greater than - then becomes less then, or value was less than and - becomes greater than) the cooresponding bit in - IPD_PORT_QOS_INTX is set. */ - uint64_t cnt : 32; /**< The packet related count that is incremented as - specified by IPD_SUB_PORT_QOS_CNT. */ -#else - uint64_t cnt : 32; - uint64_t wmark : 32; -#endif - } s; - struct cvmx_ipd_port_qos_x_cnt_s cn52xx; - struct cvmx_ipd_port_qos_x_cnt_s cn52xxp1; - struct cvmx_ipd_port_qos_x_cnt_s cn56xx; - struct cvmx_ipd_port_qos_x_cnt_s cn56xxp1; -} cvmx_ipd_port_qos_x_cnt_t; - - -/** - * cvmx_ipd_port_qos_int# - * - * IPD_PORT_QOS_INTX = IPD PORT-QOS Interrupt - * - * See the description for IPD_PORT_QOS_X_CNT - * - * 0=P0-7; 1=P8-15; 2=P16-23; 3=P24-31; 4=P32-39; 5=P40-47; 6=P48-55; 7=P56-63 - * Only ports used are: P0-3, and P32-39. Therefore only IPD_PORT_QOS_INT0[31:0] and IPD_PORT_QOS_INT4[63:0] exist. - * Unused registers and register fields are reserved. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_port_qos_intx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t intr : 64; /**< Interrupt bits. */ -#else - uint64_t intr : 64; -#endif - } s; - struct cvmx_ipd_port_qos_intx_s cn52xx; - struct cvmx_ipd_port_qos_intx_s cn52xxp1; - struct cvmx_ipd_port_qos_intx_s cn56xx; - struct cvmx_ipd_port_qos_intx_s cn56xxp1; -} cvmx_ipd_port_qos_intx_t; - - -/** - * cvmx_ipd_port_qos_int_enb# - * - * IPD_PORT_QOS_INT_ENBX = IPD PORT-QOS Interrupt Enable - * - * When the IPD_PORT_QOS_INTX[\#] is '1' and IPD_PORT_QOS_INT_ENBX[\#] is '1' a interrupt will be generated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_port_qos_int_enbx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t enb : 64; /**< Enable bits. */ -#else - uint64_t enb : 64; -#endif - } s; - struct cvmx_ipd_port_qos_int_enbx_s cn52xx; - struct cvmx_ipd_port_qos_int_enbx_s cn52xxp1; - struct cvmx_ipd_port_qos_int_enbx_s cn56xx; - struct cvmx_ipd_port_qos_int_enbx_s cn56xxp1; -} cvmx_ipd_port_qos_int_enbx_t; - - -/** - * cvmx_ipd_prc_hold_ptr_fifo_ctl - * - * IPD_PRC_HOLD_PTR_FIFO_CTL = IPD's PRC Holding Pointer FIFO Control - * - * Allows reading of the Page-Pointers stored in the IPD's PRC Holding Fifo. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t max_pkt : 3; /**< Maximum number of Packet-Pointers that COULD be - in the FIFO. */ - uint64_t praddr : 3; /**< Present Packet-Pointer read address. */ - uint64_t ptr : 29; /**< The output of the prc-holding-fifo. */ - uint64_t cena : 1; /**< Active low Chip Enable that controls the - MUX-select that steers [RADDR] to the fifo. - *WARNING - Setting this field to '0' will allow - reading of the memories thorugh the PTR field, - but will cause unpredictable operation of the IPD - under normal operation. */ - uint64_t raddr : 3; /**< Sets the address to read from in the holding. - fifo in the PRC. This FIFO holds Packet-Pointers - to be used for packet data storage. */ -#else - uint64_t raddr : 3; - uint64_t cena : 1; - uint64_t ptr : 29; - uint64_t praddr : 3; - uint64_t max_pkt : 3; - uint64_t reserved_39_63 : 25; -#endif - } s; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn30xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn31xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn38xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn50xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xxp1; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xxp1; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xx; - struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xxp1; -} cvmx_ipd_prc_hold_ptr_fifo_ctl_t; - - -/** - * cvmx_ipd_prc_port_ptr_fifo_ctl - * - * IPD_PRC_PORT_PTR_FIFO_CTL = IPD's PRC PORT Pointer FIFO Control - * - * Allows reading of the Page-Pointers stored in the IPD's PRC PORT Fifo. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t max_pkt : 7; /**< Maximum number of Packet-Pointers that are in - in the FIFO. */ - uint64_t ptr : 29; /**< The output of the prc-port-ptr-fifo. */ - uint64_t cena : 1; /**< Active low Chip Enable to the read port of the - pwp_fifo. This bit also controls the MUX-select - that steers [RADDR] to the pwp_fifo. - *WARNING - Setting this field to '0' will allow - reading of the memories thorugh the PTR field, - but will cause unpredictable operation of the IPD - under normal operation. */ - uint64_t raddr : 7; /**< Sets the address to read from in the port - fifo in the PRC. This FIFO holds Packet-Pointers - to be used for packet data storage. */ -#else - uint64_t raddr : 7; - uint64_t cena : 1; - uint64_t ptr : 29; - uint64_t max_pkt : 7; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn30xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn31xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn38xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn50xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xxp1; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xxp1; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xx; - struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xxp1; -} cvmx_ipd_prc_port_ptr_fifo_ctl_t; - - -/** - * cvmx_ipd_ptr_count - * - * IPD_PTR_COUNT = IPD Page Pointer Count - * - * Shows the number of WQE and Packet Page Pointers stored in the IPD. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_ptr_count_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t pktv_cnt : 1; /**< PKT Ptr Valid. PASS2 Field */ - uint64_t wqev_cnt : 1; /**< WQE Ptr Valid. This value is '1' when a WQE - is being for use by the IPD. The value of this - field shoould be added to tha value of the - WQE_PCNT field, of this register, for a total - count of the WQE Page Pointers being held by IPD. - PASS2 Field. */ - uint64_t pfif_cnt : 3; /**< See PKT_PCNT. */ - uint64_t pkt_pcnt : 7; /**< This value plus PFIF_CNT plus 36 is the number - of PKT Page Pointers in IPD. */ - uint64_t wqe_pcnt : 7; /**< Number of page pointers for WQE storage that are - buffered in the IPD. The total count is the value - of this buffer plus the field [WQEV_CNT]. For - PASS-1 (which does not have the WQEV_CNT field) - when the value of this register is '0' there still - may be 1 pointer being help by IPD. */ -#else - uint64_t wqe_pcnt : 7; - uint64_t pkt_pcnt : 7; - uint64_t pfif_cnt : 3; - uint64_t wqev_cnt : 1; - uint64_t pktv_cnt : 1; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_ipd_ptr_count_s cn30xx; - struct cvmx_ipd_ptr_count_s cn31xx; - struct cvmx_ipd_ptr_count_s cn38xx; - struct cvmx_ipd_ptr_count_s cn38xxp2; - struct cvmx_ipd_ptr_count_s cn50xx; - struct cvmx_ipd_ptr_count_s cn52xx; - struct cvmx_ipd_ptr_count_s cn52xxp1; - struct cvmx_ipd_ptr_count_s cn56xx; - struct cvmx_ipd_ptr_count_s cn56xxp1; - struct cvmx_ipd_ptr_count_s cn58xx; - struct cvmx_ipd_ptr_count_s cn58xxp1; -} cvmx_ipd_ptr_count_t; - - -/** - * cvmx_ipd_pwp_ptr_fifo_ctl - * - * IPD_PWP_PTR_FIFO_CTL = IPD's PWP Pointer FIFO Control - * - * Allows reading of the Page-Pointers stored in the IPD's PWP Fifo. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_61_63 : 3; - uint64_t max_cnts : 7; /**< Maximum number of Packet-Pointers or WQE-Pointers - that COULD be in the FIFO. */ - uint64_t wraddr : 8; /**< Present FIFO WQE Read address. */ - uint64_t praddr : 8; /**< Present FIFO Packet Read address. */ - uint64_t ptr : 29; /**< The output of the pwp_fifo. */ - uint64_t cena : 1; /**< Active low Chip Enable to the read port of the - pwp_fifo. This bit also controls the MUX-select - that steers [RADDR] to the pwp_fifo. - *WARNING - Setting this field to '0' will allow - reading of the memories thorugh the PTR field, - but will cause unpredictable operation of the IPD - under normal operation. */ - uint64_t raddr : 8; /**< Sets the address to read from in the pwp_fifo. - Addresses 0 through 7 contain Packet-Pointers and - addresses 8 through 15 contain WQE-Pointers. */ -#else - uint64_t raddr : 8; - uint64_t cena : 1; - uint64_t ptr : 29; - uint64_t praddr : 8; - uint64_t wraddr : 8; - uint64_t max_cnts : 7; - uint64_t reserved_61_63 : 3; -#endif - } s; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn30xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn31xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn38xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn50xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn52xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn52xxp1; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn56xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn56xxp1; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn58xx; - struct cvmx_ipd_pwp_ptr_fifo_ctl_s cn58xxp1; -} cvmx_ipd_pwp_ptr_fifo_ctl_t; - - -/** - * cvmx_ipd_qos#_red_marks - * - * IPD_QOS0_RED_MARKS = IPD QOS 0 Marks Red High Low - * - * Set the pass-drop marks for qos level. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_qosx_red_marks_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t drop : 32; /**< Packets will be dropped when the average value of - IPD_QUE0_FREE_PAGE_CNT is equal to or less than - this value. */ - uint64_t pass : 32; /**< Packets will be passed when the average value of - IPD_QUE0_FREE_PAGE_CNT is larger than this value. */ -#else - uint64_t pass : 32; - uint64_t drop : 32; -#endif - } s; - struct cvmx_ipd_qosx_red_marks_s cn30xx; - struct cvmx_ipd_qosx_red_marks_s cn31xx; - struct cvmx_ipd_qosx_red_marks_s cn38xx; - struct cvmx_ipd_qosx_red_marks_s cn38xxp2; - struct cvmx_ipd_qosx_red_marks_s cn50xx; - struct cvmx_ipd_qosx_red_marks_s cn52xx; - struct cvmx_ipd_qosx_red_marks_s cn52xxp1; - struct cvmx_ipd_qosx_red_marks_s cn56xx; - struct cvmx_ipd_qosx_red_marks_s cn56xxp1; - struct cvmx_ipd_qosx_red_marks_s cn58xx; - struct cvmx_ipd_qosx_red_marks_s cn58xxp1; -} cvmx_ipd_qosx_red_marks_t; - - -/** - * cvmx_ipd_que0_free_page_cnt - * - * IPD_QUE0_FREE_PAGE_CNT = IPD Queue0 Free Page Count - * - * Number of Free-Page Pointer that are available for use in the FPA for Queue-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_que0_free_page_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t q0_pcnt : 32; /**< Number of Queue-0 Page Pointers Available. */ -#else - uint64_t q0_pcnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_ipd_que0_free_page_cnt_s cn30xx; - struct cvmx_ipd_que0_free_page_cnt_s cn31xx; - struct cvmx_ipd_que0_free_page_cnt_s cn38xx; - struct cvmx_ipd_que0_free_page_cnt_s cn38xxp2; - struct cvmx_ipd_que0_free_page_cnt_s cn50xx; - struct cvmx_ipd_que0_free_page_cnt_s cn52xx; - struct cvmx_ipd_que0_free_page_cnt_s cn52xxp1; - struct cvmx_ipd_que0_free_page_cnt_s cn56xx; - struct cvmx_ipd_que0_free_page_cnt_s cn56xxp1; - struct cvmx_ipd_que0_free_page_cnt_s cn58xx; - struct cvmx_ipd_que0_free_page_cnt_s cn58xxp1; -} cvmx_ipd_que0_free_page_cnt_t; - - -/** - * cvmx_ipd_red_port_enable - * - * IPD_RED_PORT_ENABLE = IPD RED Port Enable - * - * Set the pass-drop marks for qos level. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_red_port_enable_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t prb_dly : 14; /**< Number (core clocks periods + 68) * 8 to wait - before caluclating the new packet drop - probability for each QOS level. */ - uint64_t avg_dly : 14; /**< Number (core clocks periods + 10) * 8 to wait - before caluclating the moving average for wach - QOS level. - Larger AVG_DLY values cause the moving averages - of ALL QOS levels to track changes in the actual - free space more slowly. Smaller NEW_CON (and - larger AVG_CON) values can have a similar effect, - but only affect an individual QOS level, rather - than all. */ - uint64_t prt_enb : 36; /**< The bit position will enable the corresponding - Ports ability to have packets dropped by RED - probability. */ -#else - uint64_t prt_enb : 36; - uint64_t avg_dly : 14; - uint64_t prb_dly : 14; -#endif - } s; - struct cvmx_ipd_red_port_enable_s cn30xx; - struct cvmx_ipd_red_port_enable_s cn31xx; - struct cvmx_ipd_red_port_enable_s cn38xx; - struct cvmx_ipd_red_port_enable_s cn38xxp2; - struct cvmx_ipd_red_port_enable_s cn50xx; - struct cvmx_ipd_red_port_enable_s cn52xx; - struct cvmx_ipd_red_port_enable_s cn52xxp1; - struct cvmx_ipd_red_port_enable_s cn56xx; - struct cvmx_ipd_red_port_enable_s cn56xxp1; - struct cvmx_ipd_red_port_enable_s cn58xx; - struct cvmx_ipd_red_port_enable_s cn58xxp1; -} cvmx_ipd_red_port_enable_t; - - -/** - * cvmx_ipd_red_port_enable2 - * - * IPD_RED_PORT_ENABLE2 = IPD RED Port Enable2 - * - * Set the pass-drop marks for qos level. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_red_port_enable2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t prt_enb : 4; /**< Bits 3-0 cooresponds to ports 39-36. These bits - have the same meaning as the PRT_ENB field of - IPD_RED_PORT_ENABLE. */ -#else - uint64_t prt_enb : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_ipd_red_port_enable2_s cn52xx; - struct cvmx_ipd_red_port_enable2_s cn52xxp1; - struct cvmx_ipd_red_port_enable2_s cn56xx; - struct cvmx_ipd_red_port_enable2_s cn56xxp1; -} cvmx_ipd_red_port_enable2_t; - - -/** - * cvmx_ipd_red_que#_param - * - * IPD_RED_QUE0_PARAM = IPD RED Queue-0 Parameters - * - * Value control the Passing and Dropping of packets by the red engine for QOS Level-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_red_quex_param_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t use_pcnt : 1; /**< When set '1' red will use the actual Packet-Page - Count in place of the Average for RED calculations. */ - uint64_t new_con : 8; /**< This value is used control how much of the present - Actual Queue Size is used to calculate the new - Average Queue Size. The value is a number from 0 - 256, which represents NEW_CON/256 of the Actual - Queue Size that will be used in the calculation. - The number in this field plus the value of - AVG_CON must be equal to 256. - Larger AVG_DLY values cause the moving averages - of ALL QOS levels to track changes in the actual - free space more slowly. Smaller NEW_CON (and - larger AVG_CON) values can have a similar effect, - but only affect an individual QOS level, rather - than all. */ - uint64_t avg_con : 8; /**< This value is used control how much of the present - Average Queue Size is used to calculate the new - Average Queue Size. The value is a number from 0 - 256, which represents AVG_CON/256 of the Average - Queue Size that will be used in the calculation. - The number in this field plus the value of - NEW_CON must be equal to 256. - Larger AVG_DLY values cause the moving averages - of ALL QOS levels to track changes in the actual - free space more slowly. Smaller NEW_CON (and - larger AVG_CON) values can have a similar effect, - but only affect an individual QOS level, rather - than all. */ - uint64_t prb_con : 32; /**< Used in computing the probability of a packet being - passed or drop by the WRED engine. The field is - calculated to be (255 * 2^24)/(PASS-DROP). Where - PASS and DROP are the field from the - IPD_QOS0_RED_MARKS CSR. */ -#else - uint64_t prb_con : 32; - uint64_t avg_con : 8; - uint64_t new_con : 8; - uint64_t use_pcnt : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_ipd_red_quex_param_s cn30xx; - struct cvmx_ipd_red_quex_param_s cn31xx; - struct cvmx_ipd_red_quex_param_s cn38xx; - struct cvmx_ipd_red_quex_param_s cn38xxp2; - struct cvmx_ipd_red_quex_param_s cn50xx; - struct cvmx_ipd_red_quex_param_s cn52xx; - struct cvmx_ipd_red_quex_param_s cn52xxp1; - struct cvmx_ipd_red_quex_param_s cn56xx; - struct cvmx_ipd_red_quex_param_s cn56xxp1; - struct cvmx_ipd_red_quex_param_s cn58xx; - struct cvmx_ipd_red_quex_param_s cn58xxp1; -} cvmx_ipd_red_quex_param_t; - - -/** - * cvmx_ipd_sub_port_bp_page_cnt - * - * IPD_SUB_PORT_BP_PAGE_CNT = IPD Subtract Port Backpressure Page Count - * - * Will add the value to the indicated port count register, the number of pages supplied. The value added should - * be the 2's complement of the vallue that needs to be subtracted. Users would add 2's compliment values to the - * port-mbuf-count register to return (lower the count) mbufs to the counter in order to avoid port-level - * backpressure being applied to the port. Backpressure is applied when the MBUF used count of a port exceeds the - * value in the IPD_PORTX_BP_PAGE_CNT. - * - * This register can't be written from the PCI via a window write. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_sub_port_bp_page_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t port : 6; /**< The port to add the PAGE_CNT field to. */ - uint64_t page_cnt : 25; /**< The number of page pointers to add to - the port counter pointed to by the - PORT Field. */ -#else - uint64_t page_cnt : 25; - uint64_t port : 6; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn30xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn31xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xxp2; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn50xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xxp1; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xxp1; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xx; - struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xxp1; -} cvmx_ipd_sub_port_bp_page_cnt_t; - - -/** - * cvmx_ipd_sub_port_fcs - * - * IPD_SUB_PORT_FCS = IPD Subtract Ports FCS Register - * - * When set '1' the port corresponding to the but set will subtract 4 bytes from the end of - * the packet. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_sub_port_fcs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t port_bit2 : 4; /**< When set '1', the port corresponding to the bit - position set, will subtract the FCS for packets - on that port. */ - uint64_t reserved_32_35 : 4; - uint64_t port_bit : 32; /**< When set '1', the port corresponding to the bit - position set, will subtract the FCS for packets - on that port. */ -#else - uint64_t port_bit : 32; - uint64_t reserved_32_35 : 4; - uint64_t port_bit2 : 4; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_ipd_sub_port_fcs_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t port_bit : 3; /**< When set '1', the port corresponding to the bit - position set, will subtract the FCS for packets - on that port. */ -#else - uint64_t port_bit : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_ipd_sub_port_fcs_cn30xx cn31xx; - struct cvmx_ipd_sub_port_fcs_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t port_bit : 32; /**< When set '1', the port corresponding to the bit - position set, will subtract the FCS for packets - on that port. */ -#else - uint64_t port_bit : 32; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_ipd_sub_port_fcs_cn38xx cn38xxp2; - struct cvmx_ipd_sub_port_fcs_cn30xx cn50xx; - struct cvmx_ipd_sub_port_fcs_s cn52xx; - struct cvmx_ipd_sub_port_fcs_s cn52xxp1; - struct cvmx_ipd_sub_port_fcs_s cn56xx; - struct cvmx_ipd_sub_port_fcs_s cn56xxp1; - struct cvmx_ipd_sub_port_fcs_cn38xx cn58xx; - struct cvmx_ipd_sub_port_fcs_cn38xx cn58xxp1; -} cvmx_ipd_sub_port_fcs_t; - - -/** - * cvmx_ipd_sub_port_qos_cnt - * - * IPD_SUB_PORT_QOS_CNT = IPD Subtract Port QOS Count - * - * Will add the value (CNT) to the indicated Port-QOS register (PORT_QOS). The value added must be - * be the 2's complement of the value that needs to be subtracted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_sub_port_qos_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_41_63 : 23; - uint64_t port_qos : 9; /**< The port to add the CNT field to. */ - uint64_t cnt : 32; /**< The value to be added to the register selected - in the PORT_QOS field. */ -#else - uint64_t cnt : 32; - uint64_t port_qos : 9; - uint64_t reserved_41_63 : 23; -#endif - } s; - struct cvmx_ipd_sub_port_qos_cnt_s cn52xx; - struct cvmx_ipd_sub_port_qos_cnt_s cn52xxp1; - struct cvmx_ipd_sub_port_qos_cnt_s cn56xx; - struct cvmx_ipd_sub_port_qos_cnt_s cn56xxp1; -} cvmx_ipd_sub_port_qos_cnt_t; - - -/** - * cvmx_ipd_wqe_fpa_queue - * - * IPD_WQE_FPA_QUEUE = IPD Work-Queue-Entry FPA Page Size - * - * Which FPA Queue (0-7) to fetch page-pointers from for WQE's - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_wqe_fpa_queue_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t wqe_pool : 3; /**< Which FPA Queue to fetch page-pointers - from for WQE's. */ -#else - uint64_t wqe_pool : 3; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_ipd_wqe_fpa_queue_s cn30xx; - struct cvmx_ipd_wqe_fpa_queue_s cn31xx; - struct cvmx_ipd_wqe_fpa_queue_s cn38xx; - struct cvmx_ipd_wqe_fpa_queue_s cn38xxp2; - struct cvmx_ipd_wqe_fpa_queue_s cn50xx; - struct cvmx_ipd_wqe_fpa_queue_s cn52xx; - struct cvmx_ipd_wqe_fpa_queue_s cn52xxp1; - struct cvmx_ipd_wqe_fpa_queue_s cn56xx; - struct cvmx_ipd_wqe_fpa_queue_s cn56xxp1; - struct cvmx_ipd_wqe_fpa_queue_s cn58xx; - struct cvmx_ipd_wqe_fpa_queue_s cn58xxp1; -} cvmx_ipd_wqe_fpa_queue_t; - - -/** - * cvmx_ipd_wqe_ptr_valid - * - * IPD_WQE_PTR_VALID = IPD's WQE Pointer Valid - * - * The value of the WQE-pointer fetched and in the valid register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_ipd_wqe_ptr_valid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t ptr : 29; /**< Pointer value. */ -#else - uint64_t ptr : 29; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_ipd_wqe_ptr_valid_s cn30xx; - struct cvmx_ipd_wqe_ptr_valid_s cn31xx; - struct cvmx_ipd_wqe_ptr_valid_s cn38xx; - struct cvmx_ipd_wqe_ptr_valid_s cn50xx; - struct cvmx_ipd_wqe_ptr_valid_s cn52xx; - struct cvmx_ipd_wqe_ptr_valid_s cn52xxp1; - struct cvmx_ipd_wqe_ptr_valid_s cn56xx; - struct cvmx_ipd_wqe_ptr_valid_s cn56xxp1; - struct cvmx_ipd_wqe_ptr_valid_s cn58xx; - struct cvmx_ipd_wqe_ptr_valid_s cn58xxp1; -} cvmx_ipd_wqe_ptr_valid_t; - - -/** - * cvmx_key_bist_reg - * - * KEY_BIST_REG = KEY's BIST Status Register - * - * The KEY's BIST status for memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_key_bist_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t rrc : 1; /**< RRC bist status. */ - uint64_t mem1 : 1; /**< MEM - 1 bist status. */ - uint64_t mem0 : 1; /**< MEM - 0 bist status. */ -#else - uint64_t mem0 : 1; - uint64_t mem1 : 1; - uint64_t rrc : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_key_bist_reg_s cn38xx; - struct cvmx_key_bist_reg_s cn38xxp2; - struct cvmx_key_bist_reg_s cn56xx; - struct cvmx_key_bist_reg_s cn56xxp1; - struct cvmx_key_bist_reg_s cn58xx; - struct cvmx_key_bist_reg_s cn58xxp1; -} cvmx_key_bist_reg_t; - - -/** - * cvmx_key_ctl_status - * - * KEY_CTL_STATUS = KEY's Control/Status Register - * - * The KEY's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_key_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t mem1_err : 7; /**< Causes a flip of the ECC bit associated 38:32 - respective to bit 13:7 of this field, for FPF - FIFO 1. */ - uint64_t mem0_err : 7; /**< Causes a flip of the ECC bit associated 38:32 - respective to bit 6:0 of this field, for FPF - FIFO 0. */ -#else - uint64_t mem0_err : 7; - uint64_t mem1_err : 7; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_key_ctl_status_s cn38xx; - struct cvmx_key_ctl_status_s cn38xxp2; - struct cvmx_key_ctl_status_s cn56xx; - struct cvmx_key_ctl_status_s cn56xxp1; - struct cvmx_key_ctl_status_s cn58xx; - struct cvmx_key_ctl_status_s cn58xxp1; -} cvmx_key_ctl_status_t; - - -/** - * cvmx_key_int_enb - * - * KEY_INT_ENB = KEY's Interrupt Enable - * - * The KEY's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_key_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ked1_dbe : 1; /**< When set (1) and bit 3 of the KEY_INT_SUM - register is asserted the KEY will assert an - interrupt. */ - uint64_t ked1_sbe : 1; /**< When set (1) and bit 2 of the KEY_INT_SUM - register is asserted the KEY will assert an - interrupt. */ - uint64_t ked0_dbe : 1; /**< When set (1) and bit 1 of the KEY_INT_SUM - register is asserted the KEY will assert an - interrupt. */ - uint64_t ked0_sbe : 1; /**< When set (1) and bit 0 of the KEY_INT_SUM - register is asserted the KEY will assert an - interrupt. */ -#else - uint64_t ked0_sbe : 1; - uint64_t ked0_dbe : 1; - uint64_t ked1_sbe : 1; - uint64_t ked1_dbe : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_key_int_enb_s cn38xx; - struct cvmx_key_int_enb_s cn38xxp2; - struct cvmx_key_int_enb_s cn56xx; - struct cvmx_key_int_enb_s cn56xxp1; - struct cvmx_key_int_enb_s cn58xx; - struct cvmx_key_int_enb_s cn58xxp1; -} cvmx_key_int_enb_t; - - -/** - * cvmx_key_int_sum - * - * KEY_INT_SUM = KEY's Interrupt Summary Register - * - * Contains the diffrent interrupt summary bits of the KEY. - */ -typedef union -{ - uint64_t u64; - struct cvmx_key_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ked1_dbe : 1; - uint64_t ked1_sbe : 1; - uint64_t ked0_dbe : 1; - uint64_t ked0_sbe : 1; -#else - uint64_t ked0_sbe : 1; - uint64_t ked0_dbe : 1; - uint64_t ked1_sbe : 1; - uint64_t ked1_dbe : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_key_int_sum_s cn38xx; - struct cvmx_key_int_sum_s cn38xxp2; - struct cvmx_key_int_sum_s cn56xx; - struct cvmx_key_int_sum_s cn56xxp1; - struct cvmx_key_int_sum_s cn58xx; - struct cvmx_key_int_sum_s cn58xxp1; -} cvmx_key_int_sum_t; - - -/** - * cvmx_l2c_bst0 - * - * L2C_BST0 = L2C BIST 0 CTL/STAT - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_bst0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t dtbnk : 1; /**< DuTag Bank# - When DT=1(BAD), this field provides additional information - about which DuTag Bank (0/1) failed. - *** NOTE: O9N PASS1 Addition */ - uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t dtcnt : 13; /**< DuTag BiST Counter (used to help isolate the failure) - [12]: i (0=FORWARD/1=REVERSE pass) - [11:10]: j (Pattern# 1 of 4) - [9:4]: k (DT Index 1 of 64) - [3:0]: l (DT# 1 of 16 DTs) */ - uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t wlb_dat : 4; - uint64_t stin_msk : 1; - uint64_t dt : 1; - uint64_t dtcnt : 13; - uint64_t wlb_msk : 4; - uint64_t dtbnk : 1; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_l2c_bst0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_15_18 : 4; - uint64_t dtcnt : 9; /**< DuTag BiST Counter (used to help isolate the failure) - [8]: i (0=FORWARD/1=REVERSE pass) - [7:6]: j (Pattern# 1 of 4) - [5:0]: k (DT Index 1 of 64) */ - uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_4_4 : 1; - uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t wlb_dat : 4; - uint64_t reserved_4_4 : 1; - uint64_t dt : 1; - uint64_t dtcnt : 9; - uint64_t reserved_15_18 : 4; - uint64_t wlb_msk : 4; - uint64_t reserved_23_63 : 41; -#endif - } cn30xx; - struct cvmx_l2c_bst0_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_16_18 : 3; - uint64_t dtcnt : 10; /**< DuTag BiST Counter (used to help isolate the failure) - [9]: i (0=FORWARD/1=REVERSE pass) - [8:7]: j (Pattern# 1 of 4) - [6:1]: k (DT Index 1 of 64) - [0]: l (DT# 1 of 2 DTs) */ - uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t wlb_dat : 4; - uint64_t stin_msk : 1; - uint64_t dt : 1; - uint64_t dtcnt : 10; - uint64_t reserved_16_18 : 3; - uint64_t wlb_msk : 4; - uint64_t reserved_23_63 : 41; -#endif - } cn31xx; - struct cvmx_l2c_bst0_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t dtcnt : 13; /**< DuTag BiST Counter (used to help isolate the failure) - [12]: i (0=FORWARD/1=REVERSE pass) - [11:10]: j (Pattern# 1 of 4) - [9:4]: k (DT Index 1 of 64) - [3:0]: l (DT# 1 of 16 DTs) */ - uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t wlb_dat : 4; - uint64_t stin_msk : 1; - uint64_t dt : 1; - uint64_t dtcnt : 13; - uint64_t reserved_19_63 : 45; -#endif - } cn38xx; - struct cvmx_l2c_bst0_cn38xx cn38xxp2; - struct cvmx_l2c_bst0_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t dtbnk : 1; /**< DuTag Bank# - When DT=1(BAD), this field provides additional information - about which DuTag Bank (0/1) failed. */ - uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_16_18 : 3; - uint64_t dtcnt : 10; /**< DuTag BiST Counter (used to help isolate the failure) - [9]: i (0=FORWARD/1=REVERSE pass) - [8:7]: j (Pattern# 1 of 4) - [6:1]: k (DT Index 1 of 64) - [0]: l (DT# 1 of 2 DTs) */ - uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3] - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t wlb_dat : 4; - uint64_t stin_msk : 1; - uint64_t dt : 1; - uint64_t dtcnt : 10; - uint64_t reserved_16_18 : 3; - uint64_t wlb_msk : 4; - uint64_t dtbnk : 1; - uint64_t reserved_24_63 : 40; -#endif - } cn50xx; - struct cvmx_l2c_bst0_cn50xx cn52xx; - struct cvmx_l2c_bst0_cn50xx cn52xxp1; - struct cvmx_l2c_bst0_s cn56xx; - struct cvmx_l2c_bst0_s cn56xxp1; - struct cvmx_l2c_bst0_s cn58xx; - struct cvmx_l2c_bst0_s cn58xxp1; -} cvmx_l2c_bst0_t; - - -/** - * cvmx_l2c_bst1 - * - * L2C_BST1 = L2C BIST 1 CTL/STAT - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_bst1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t l2t : 9; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_l2c_bst1_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t lrf : 2; /**< Bist Results for LRF RAMs (PLC+ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_5_8 : 4; - uint64_t l2t : 5; /**< Bist Results for L2T (USE+4SET RAMs) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t l2t : 5; - uint64_t reserved_5_8 : 4; - uint64_t vab_vwcf : 1; - uint64_t lrf : 2; - uint64_t vwdf : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn30xx; - struct cvmx_l2c_bst1_cn30xx cn31xx; - struct cvmx_l2c_bst1_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t lrf : 2; /**< Bist Results for LRF RAMs (PLC+ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t l2t : 9; - uint64_t vab_vwcf : 1; - uint64_t lrf : 2; - uint64_t vwdf : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_l2c_bst1_cn38xx cn38xxp2; - struct cvmx_l2c_bst1_cn38xx cn50xx; - struct cvmx_l2c_bst1_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t plc2 : 1; /**< Bist Results for PLC2 RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t plc1 : 1; /**< Bist Results for PLC1 RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t plc0 : 1; /**< Bist Results for PLC0 RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_11_11 : 1; - uint64_t ilc : 1; /**< Bist Results for ILC RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t l2t : 9; - uint64_t vab_vwcf : 1; - uint64_t ilc : 1; - uint64_t reserved_11_11 : 1; - uint64_t vwdf : 4; - uint64_t plc0 : 1; - uint64_t plc1 : 1; - uint64_t plc2 : 1; - uint64_t reserved_19_63 : 45; -#endif - } cn52xx; - struct cvmx_l2c_bst1_cn52xx cn52xxp1; - struct cvmx_l2c_bst1_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t plc2 : 1; /**< Bist Results for LRF RAMs (ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t plc1 : 1; /**< Bist Results for LRF RAMs (ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t plc0 : 1; /**< Bist Results for LRF RAMs (ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ilc : 1; /**< Bist Results for LRF RAMs (ILC) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vwdf1 : 4; /**< Bist Results for VWDF1 RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vwdf0 : 4; /**< Bist Results for VWDF0 RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t vab_vwcf1 : 1; /**< Bist Results for VAB VWCF1_MEM */ - uint64_t reserved_10_10 : 1; - uint64_t vab_vwcf0 : 1; /**< Bist Results for VAB VWCF0_MEM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs) - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t l2t : 9; - uint64_t vab_vwcf0 : 1; - uint64_t reserved_10_10 : 1; - uint64_t vab_vwcf1 : 1; - uint64_t vwdf0 : 4; - uint64_t vwdf1 : 4; - uint64_t ilc : 1; - uint64_t plc0 : 1; - uint64_t plc1 : 1; - uint64_t plc2 : 1; - uint64_t reserved_24_63 : 40; -#endif - } cn56xx; - struct cvmx_l2c_bst1_cn56xx cn56xxp1; - struct cvmx_l2c_bst1_cn38xx cn58xx; - struct cvmx_l2c_bst1_cn38xx cn58xxp1; -} cvmx_l2c_bst1_t; - - -/** - * cvmx_l2c_bst2 - * - * L2C_BST2 = L2C BIST 2 CTL/STAT - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_bst2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mrb : 4; /**< Bist Results for MRB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_4_11 : 8; - uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM - - 1: BAD */ - uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM - - 1: BAD */ - uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t xrddat : 1; - uint64_t xrdmsk : 1; - uint64_t picbst : 1; - uint64_t ipcbst : 1; - uint64_t reserved_4_11 : 8; - uint64_t mrb : 4; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_l2c_bst2_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mrb : 4; /**< Bist Results for MRB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t rmdf : 4; /**< Bist Results for RMDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_4_7 : 4; - uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t reserved_2_2 : 1; - uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t xrddat : 1; - uint64_t xrdmsk : 1; - uint64_t reserved_2_2 : 1; - uint64_t ipcbst : 1; - uint64_t reserved_4_7 : 4; - uint64_t rmdf : 4; - uint64_t mrb : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn30xx; - struct cvmx_l2c_bst2_cn30xx cn31xx; - struct cvmx_l2c_bst2_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mrb : 4; /**< Bist Results for MRB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t rmdf : 4; /**< Bist Results for RMDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t rhdf : 4; /**< Bist Results for RHDF RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM - - 1: BAD */ - uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM - - 1: BAD */ - uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t xrddat : 1; - uint64_t xrdmsk : 1; - uint64_t picbst : 1; - uint64_t ipcbst : 1; - uint64_t rhdf : 4; - uint64_t rmdf : 4; - uint64_t mrb : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_l2c_bst2_cn38xx cn38xxp2; - struct cvmx_l2c_bst2_cn30xx cn50xx; - struct cvmx_l2c_bst2_cn30xx cn52xx; - struct cvmx_l2c_bst2_cn30xx cn52xxp1; - struct cvmx_l2c_bst2_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mrb : 4; /**< Bist Results for MRB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t rmdb : 4; /**< Bist Results for RMDB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t rhdb : 4; /**< Bist Results for RHDB RAMs - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM - - 1: BAD */ - uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM - - 1: BAD */ - uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t xrddat : 1; - uint64_t xrdmsk : 1; - uint64_t picbst : 1; - uint64_t ipcbst : 1; - uint64_t rhdb : 4; - uint64_t rmdb : 4; - uint64_t mrb : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn56xx; - struct cvmx_l2c_bst2_cn56xx cn56xxp1; - struct cvmx_l2c_bst2_cn56xx cn58xx; - struct cvmx_l2c_bst2_cn56xx cn58xxp1; -} cvmx_l2c_bst2_t; - - -/** - * cvmx_l2c_cfg - * - * Specify the RSL base addresses for the block - * - * L2C_CFG = L2C Configuration - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t bstrun : 1; /**< L2 Data Store Bist Running - Indicates when the L2C HW Bist sequence(short or long) is - running. [L2C ECC Bist FSM is not in the RESET/DONE state] - *** NOTE: O9N PASS2 Addition */ - uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence - When the previous state was '0' and SW writes a '1', - the long bist sequence (enhanced 13N March) is performed. - SW can then read the L2C_CFG[BSTRUN] which will indicate - that the long bist sequence is running. When BSTRUN-=0, - the state of the L2D_BST[0-3] registers contain information - which reflects the status of the recent long bist sequence. - NOTE: SW must never write LBIST=0 while Long Bist is running - (ie: when BSTRUN=1 never write LBIST=0). - NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS - Fuse is blown. - *** NOTE: O9N PASS2 Addition */ - uint64_t xor_bank : 1; /**< L2C XOR Bank Bit - When both LMC's are enabled(DPRES1=1/DPRES0=1), this - bit determines how addresses are assigned to - LMC port(s). - XOR_BANK| LMC# - ----------+--------------------------------- - 0 | byte address[7] - 1 | byte address[7] XOR byte address[12] - Example: If both LMC ports are enabled (DPRES1=1/DPRES0=1) - and XOR_BANK=1, then addr[7] XOR addr[12] is used to determine - which LMC Port# a reference is directed to. - *** NOTE: O56 PASS1 Addition */ - uint64_t dpres1 : 1; /**< DDR1 Present/LMC1 Enable - When DPRES1 is set, LMC#1 is enabled(DDR1 pins at - the BOTTOM of the chip are active). - NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1), - see XOR_BANK bit to determine how a reference is - assigned to a DDR/LMC port. (Also, in dual-LMC configuration, - the address sent to the targeted LMC port is the - address shifted right by one). - NOTE: For power-savings, the DPRES1 is also used to - disable DDR1/LMC1 clocks. - SW Constraint: When dual LMC is enabled - (L2C_CFG[DPRES0/1]=1), the LMCx_DDR2_CTL[DDR_EOF] - must be increased by +1 to account for an additional - cycle of uncertainty. - *** NOTE: O56 PASS1 Addition */ - uint64_t dpres0 : 1; /**< DDR0 Present/LMC0 Enable - When DPRES0 is set, LMC#0 is enabled(DDR0 pins at - the BOTTOM of the chip are active). - NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1), - see XOR_BANK bit to determine how a reference is - assigned to a DDR/LMC port. (Also, in dual-LMC configuration, - the address sent to the targeted LMC port is the - address shifted right by one). - NOTE: For power-savings, the DPRES0 is also used to - disable DDR0/LMC0 clocks. - SW Constraint: When dual LMC is enabled - (L2C_CFG[DPRES0/1]=1), the LMCx_DDR2_CTL[DDR_EOF] - must be increased by +1 to account for an additional - cycle of uncertainty. - *** NOTE: O56 PASS1 Addition */ - uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable - When set, the L2C dual-fill performance feature is - disabled. - NOTE: This bit is only intended to evaluate the - effectiveness of the dual-fill feature. For OPTIMAL - performance, this bit should ALWAYS be zero. - *** NOTE: O9N PASS1 Addition */ - uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When FPEN is enabled and the LFB is empty, the - forward progress counter (FPCNT) is initialized to: - FPCNT[24:0] = 2^(9+FPEXP) - When the LFB is non-empty the FPCNT is decremented - (every eclk interval). If the FPCNT reaches zero, - the LFB no longer accepts new requests until either - a) all of the current LFB entries have completed - (to ensure forward progress). - b) FPEMPTY=0 and another forward progress count - interval timeout expires. - EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks. - (For eclk=500MHz(2ns), this would be ~4us). */ - uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL all current LFB - entries have completed. - When clear, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL either - a) all current LFB entries have completed. - b) another forward progress interval expires - NOTE: We may want to FREEZE/HANG the system when - we encounter an LFB entry cannot complete, and there - may be times when we want to allow further LFB-NQs - to be permitted to help in further analyzing the - source */ - uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, enables the Forward Progress Counter to - prevent new LFB entries from enqueueing until ALL - current LFB entries have completed. */ - uint64_t idxalias : 1; /**< L2C Index Alias Enable - When set, the L2 Tag/Data Store will alias the 11-bit - index with the low order 11-bits of the tag. - index[17:7] = (tag[28:18] ^ index[17:7]) - NOTE: This bit must only be modified at boot time, - when it can be guaranteed that no blocks have been - loaded into the L2 Cache. - The index aliasing is a performance enhancement feature - which reduces the L2 cache thrashing experienced for - regular stride references. - NOTE: The index alias is stored in the LFB and VAB, and - its effects are reversed for memory references (Victims, - STT-Misses and Read-Misses) */ - uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits - become less than or equal to the MWF_CRD, the L2C will - assert l2c__lmi_mwd_hiwater_a to signal the LMC to give - writes (victims) higher priority. */ - uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode: - - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC] - - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss), - RHCF(RdHit), STRSP(ST RSP w/ invalidate), - STRSC(ST RSP no invalidate)] */ - uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode: - - 0: Fixed Priority - - IOB->PP requests are higher priority than - PP->IOB requests - - 1: Round Robin - - I/O requests from PP and IOB are serviced in - round robin */ - uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode: - - 0: Fixed Priority - - IOB memory requests are higher priority than PP - memory requests. - - 1: Round Robin - - Memory requests from PP and IOB are serviced in - round robin. */ -#else - uint64_t lrf_arb_mode : 1; - uint64_t rfb_arb_mode : 1; - uint64_t rsp_arb_mode : 1; - uint64_t mwf_crd : 4; - uint64_t idxalias : 1; - uint64_t fpen : 1; - uint64_t fpempty : 1; - uint64_t fpexp : 4; - uint64_t dfill_dis : 1; - uint64_t dpres0 : 1; - uint64_t dpres1 : 1; - uint64_t xor_bank : 1; - uint64_t lbist : 1; - uint64_t bstrun : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_l2c_cfg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When FPEN is enabled and the LFB is empty, the - forward progress counter (FPCNT) is initialized to: - FPCNT[24:0] = 2^(9+FPEXP) - When the LFB is non-empty the FPCNT is decremented - (every eclk interval). If the FPCNT reaches zero, - the LFB no longer accepts new requests until either - a) all of the current LFB entries have completed - (to ensure forward progress). - b) FPEMPTY=0 and another forward progress count - interval timeout expires. - EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks. - (For eclk=500MHz(2ns), this would be ~4us). */ - uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL all current LFB - entries have completed. - When clear, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL either - a) all current LFB entries have completed. - b) another forward progress interval expires - NOTE: We may want to FREEZE/HANG the system when - we encounter an LFB entry cannot complete, and there - may be times when we want to allow further LFB-NQs - to be permitted to help in further analyzing the - source */ - uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, enables the Forward Progress Counter to - prevent new LFB entries from enqueueing until ALL - current LFB entries have completed. */ - uint64_t idxalias : 1; /**< L2C Index Alias Enable - When set, the L2 Tag/Data Store will alias the 8-bit - index with the low order 8-bits of the tag. - index[14:7] = (tag[22:15] ^ index[14:7]) - NOTE: This bit must only be modified at boot time, - when it can be guaranteed that no blocks have been - loaded into the L2 Cache. - The index aliasing is a performance enhancement feature - which reduces the L2 cache thrashing experienced for - regular stride references. - NOTE: The index alias is stored in the LFB and VAB, and - its effects are reversed for memory references (Victims, - STT-Misses and Read-Misses) */ - uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits - become less than or equal to the MWF_CRD, the L2C will - assert l2c__lmi_mwd_hiwater_a to signal the LMC to give - writes (victims) higher priority. */ - uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode: - - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC] - - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss), - RHCF(RdHit), STRSP(ST RSP w/ invalidate), - STRSC(ST RSP no invalidate)] */ - uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode: - - 0: Fixed Priority - - IOB->PP requests are higher priority than - PP->IOB requests - - 1: Round Robin - - I/O requests from PP and IOB are serviced in - round robin */ - uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode: - - 0: Fixed Priority - - IOB memory requests are higher priority than PP - memory requests. - - 1: Round Robin - - Memory requests from PP and IOB are serviced in - round robin. */ -#else - uint64_t lrf_arb_mode : 1; - uint64_t rfb_arb_mode : 1; - uint64_t rsp_arb_mode : 1; - uint64_t mwf_crd : 4; - uint64_t idxalias : 1; - uint64_t fpen : 1; - uint64_t fpempty : 1; - uint64_t fpexp : 4; - uint64_t reserved_14_63 : 50; -#endif - } cn30xx; - struct cvmx_l2c_cfg_cn30xx cn31xx; - struct cvmx_l2c_cfg_cn30xx cn38xx; - struct cvmx_l2c_cfg_cn30xx cn38xxp2; - struct cvmx_l2c_cfg_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t bstrun : 1; /**< L2 Data Store Bist Running - Indicates when the L2C HW Bist sequence(short or long) is - running. [L2C ECC Bist FSM is not in the RESET/DONE state] - *** NOTE: O56 PASS1 Addition */ - uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence - When the previous state was '0' and SW writes a '1', - the long bist sequence (enhanced 13N March) is performed. - SW can then read the L2C_CFG[BSTRUN] which will indicate - that the long bist sequence is running. When BSTRUN-=0, - the state of the L2D_BST[0-3] registers contain information - which reflects the status of the recent long bist sequence. - NOTE: SW must never write LBIST=0 while Long Bist is running - (ie: when BSTRUN=1 never write LBIST=0). */ - uint64_t reserved_14_17 : 4; - uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When FPEN is enabled and the LFB is empty, the - forward progress counter (FPCNT) is initialized to: - FPCNT[24:0] = 2^(9+FPEXP) - When the LFB is non-empty the FPCNT is decremented - (every eclk interval). If the FPCNT reaches zero, - the LFB no longer accepts new requests until either - a) all of the current LFB entries have completed - (to ensure forward progress). - b) FPEMPTY=0 and another forward progress count - interval timeout expires. - EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks. - (For eclk=500MHz(2ns), this would be ~4us). */ - uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL all current LFB - entries have completed. - When clear, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL either - a) all current LFB entries have completed. - b) another forward progress interval expires - NOTE: We may want to FREEZE/HANG the system when - we encounter an LFB entry cannot complete, and there - may be times when we want to allow further LFB-NQs - to be permitted to help in further analyzing the - source */ - uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, enables the Forward Progress Counter to - prevent new LFB entries from enqueueing until ALL - current LFB entries have completed. */ - uint64_t idxalias : 1; /**< L2C Index Alias Enable - When set, the L2 Tag/Data Store will alias the 7-bit - index with the low order 7-bits of the tag. - index[13:7] = (tag[20:14] ^ index[13:7]) - NOTE: This bit must only be modified at boot time, - when it can be guaranteed that no blocks have been - loaded into the L2 Cache. - The index aliasing is a performance enhancement feature - which reduces the L2 cache thrashing experienced for - regular stride references. - NOTE: The index alias is stored in the LFB and VAB, and - its effects are reversed for memory references (Victims, - STT-Misses and Read-Misses) */ - uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits - become less than or equal to the MWF_CRD, the L2C will - assert l2c__lmi_mwd_hiwater_a to signal the LMC to give - writes (victims) higher priority. */ - uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode: - - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC] - - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss), - RHCF(RdHit), STRSP(ST RSP w/ invalidate), - STRSC(ST RSP no invalidate)] */ - uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode: - - 0: Fixed Priority - - IOB->PP requests are higher priority than - PP->IOB requests - - 1: Round Robin - - I/O requests from PP and IOB are serviced in - round robin */ - uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode: - - 0: Fixed Priority - - IOB memory requests are higher priority than PP - memory requests. - - 1: Round Robin - - Memory requests from PP and IOB are serviced in - round robin. */ -#else - uint64_t lrf_arb_mode : 1; - uint64_t rfb_arb_mode : 1; - uint64_t rsp_arb_mode : 1; - uint64_t mwf_crd : 4; - uint64_t idxalias : 1; - uint64_t fpen : 1; - uint64_t fpempty : 1; - uint64_t fpexp : 4; - uint64_t reserved_14_17 : 4; - uint64_t lbist : 1; - uint64_t bstrun : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn50xx; - struct cvmx_l2c_cfg_cn50xx cn52xx; - struct cvmx_l2c_cfg_cn50xx cn52xxp1; - struct cvmx_l2c_cfg_s cn56xx; - struct cvmx_l2c_cfg_s cn56xxp1; - struct cvmx_l2c_cfg_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t bstrun : 1; /**< L2 Data Store Bist Running - Indicates when the L2C HW Bist sequence(short or long) is - running. [L2C ECC Bist FSM is not in the RESET/DONE state] - *** NOTE: O9N PASS2 Addition */ - uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence - When the previous state was '0' and SW writes a '1', - the long bist sequence (enhanced 13N March) is performed. - SW can then read the L2C_CFG[BSTRUN] which will indicate - that the long bist sequence is running. When BSTRUN-=0, - the state of the L2D_BST[0-3] registers contain information - which reflects the status of the recent long bist sequence. - NOTE: SW must never write LBIST=0 while Long Bist is running - (ie: when BSTRUN=1 never write LBIST=0). - NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS - Fuse is blown. - *** NOTE: O9N PASS2 Addition */ - uint64_t reserved_15_17 : 3; - uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable - When set, the L2C dual-fill performance feature is - disabled. - NOTE: This bit is only intended to evaluate the - effectiveness of the dual-fill feature. For OPTIMAL - performance, this bit should ALWAYS be zero. - *** NOTE: O9N PASS1 Addition */ - uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When FPEN is enabled and the LFB is empty, the - forward progress counter (FPCNT) is initialized to: - FPCNT[24:0] = 2^(9+FPEXP) - When the LFB is non-empty the FPCNT is decremented - (every eclk interval). If the FPCNT reaches zero, - the LFB no longer accepts new requests until either - a) all of the current LFB entries have completed - (to ensure forward progress). - b) FPEMPTY=0 and another forward progress count - interval timeout expires. - EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks. - (For eclk=500MHz(2ns), this would be ~4us). */ - uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL all current LFB - entries have completed. - When clear, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL either - a) all current LFB entries have completed. - b) another forward progress interval expires - NOTE: We may want to FREEZE/HANG the system when - we encounter an LFB entry cannot complete, and there - may be times when we want to allow further LFB-NQs - to be permitted to help in further analyzing the - source */ - uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, enables the Forward Progress Counter to - prevent new LFB entries from enqueueing until ALL - current LFB entries have completed. */ - uint64_t idxalias : 1; /**< L2C Index Alias Enable - When set, the L2 Tag/Data Store will alias the 11-bit - index with the low order 11-bits of the tag. - index[17:7] = (tag[28:18] ^ index[17:7]) - NOTE: This bit must only be modified at boot time, - when it can be guaranteed that no blocks have been - loaded into the L2 Cache. - The index aliasing is a performance enhancement feature - which reduces the L2 cache thrashing experienced for - regular stride references. - NOTE: The index alias is stored in the LFB and VAB, and - its effects are reversed for memory references (Victims, - STT-Misses and Read-Misses) */ - uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits - become less than or equal to the MWF_CRD, the L2C will - assert l2c__lmi_mwd_hiwater_a to signal the LMC to give - writes (victims) higher priority. */ - uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode: - - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC] - - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss), - RHCF(RdHit), STRSP(ST RSP w/ invalidate), - STRSC(ST RSP no invalidate)] */ - uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode: - - 0: Fixed Priority - - IOB->PP requests are higher priority than - PP->IOB requests - - 1: Round Robin - - I/O requests from PP and IOB are serviced in - round robin */ - uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode: - - 0: Fixed Priority - - IOB memory requests are higher priority than PP - memory requests. - - 1: Round Robin - - Memory requests from PP and IOB are serviced in - round robin. */ -#else - uint64_t lrf_arb_mode : 1; - uint64_t rfb_arb_mode : 1; - uint64_t rsp_arb_mode : 1; - uint64_t mwf_crd : 4; - uint64_t idxalias : 1; - uint64_t fpen : 1; - uint64_t fpempty : 1; - uint64_t fpexp : 4; - uint64_t dfill_dis : 1; - uint64_t reserved_15_17 : 3; - uint64_t lbist : 1; - uint64_t bstrun : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn58xx; - struct cvmx_l2c_cfg_cn58xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable - When set, the L2C dual-fill performance feature is - disabled. - NOTE: This bit is only intended to evaluate the - effectiveness of the dual-fill feature. For OPTIMAL - performance, this bit should ALWAYS be zero. - *** NOTE: O9N PASS1 Addition */ - uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When FPEN is enabled and the LFB is empty, the - forward progress counter (FPCNT) is initialized to: - FPCNT[24:0] = 2^(9+FPEXP) - When the LFB is non-empty the FPCNT is decremented - (every eclk interval). If the FPCNT reaches zero, - the LFB no longer accepts new requests until either - a) all of the current LFB entries have completed - (to ensure forward progress). - b) FPEMPTY=0 and another forward progress count - interval timeout expires. - EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks. - (For eclk=500MHz(2ns), this would be ~4us). */ - uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL all current LFB - entries have completed. - When clear, if the forward progress counter expires, - all new LFB-NQs are stopped UNTIL either - a) all current LFB entries have completed. - b) another forward progress interval expires - NOTE: We may want to FREEZE/HANG the system when - we encounter an LFB entry cannot complete, and there - may be times when we want to allow further LFB-NQs - to be permitted to help in further analyzing the - source */ - uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable - NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY] - When set, enables the Forward Progress Counter to - prevent new LFB entries from enqueueing until ALL - current LFB entries have completed. */ - uint64_t idxalias : 1; /**< L2C Index Alias Enable - When set, the L2 Tag/Data Store will alias the 11-bit - index with the low order 11-bits of the tag. - index[17:7] = (tag[28:18] ^ index[17:7]) - NOTE: This bit must only be modified at boot time, - when it can be guaranteed that no blocks have been - loaded into the L2 Cache. - The index aliasing is a performance enhancement feature - which reduces the L2 cache thrashing experienced for - regular stride references. - NOTE: The index alias is stored in the LFB and VAB, and - its effects are reversed for memory references (Victims, - STT-Misses and Read-Misses) */ - uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits - become less than or equal to the MWF_CRD, the L2C will - assert l2c__lmi_mwd_hiwater_a to signal the LMC to give - writes (victims) higher priority. */ - uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode: - - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC] - - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss), - RHCF(RdHit), STRSP(ST RSP w/ invalidate), - STRSC(ST RSP no invalidate)] */ - uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode: - - 0: Fixed Priority - - IOB->PP requests are higher priority than - PP->IOB requests - - 1: Round Robin - - I/O requests from PP and IOB are serviced in - round robin */ - uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode: - - 0: Fixed Priority - - IOB memory requests are higher priority than PP - memory requests. - - 1: Round Robin - - Memory requests from PP and IOB are serviced in - round robin. */ -#else - uint64_t lrf_arb_mode : 1; - uint64_t rfb_arb_mode : 1; - uint64_t rsp_arb_mode : 1; - uint64_t mwf_crd : 4; - uint64_t idxalias : 1; - uint64_t fpen : 1; - uint64_t fpempty : 1; - uint64_t fpexp : 4; - uint64_t dfill_dis : 1; - uint64_t reserved_15_63 : 49; -#endif - } cn58xxp1; -} cvmx_l2c_cfg_t; - - -/** - * cvmx_l2c_dbg - * - * L2C_DBG = L2C DEBUG Register - * - * Description: L2C Tag/Data Store Debug Register - * - * Notes: - * (1) When using the L2T, L2D or FINV Debug probe feature, the LDD command WILL NOT update the DuTags. - * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one set) - * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back - * dirty data to memory to maintain coherency. - * (4) L2 Cache Lock Down feature MUST BE disabled (L2C_LCKBASE[LCK_ENA]=0) if ANY of the L2C debug - * features (L2T, L2D, FINV) are enabled. - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t lfb_enum : 4; /**< Specifies the LFB Entry# which is to be captured. */ - uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of - the LFB specified by LFB_ENUM[3:0] are captured - into the L2C_LFB(0/1/2) registers. - NOTE: Some fields of the LFB entry are unpredictable - and dependent on usage. This is only intended to be - used for HW debug. */ - uint64_t ppnum : 4; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines which one-of-16 - PPs is selected as the diagnostic PP. */ - uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines 1-of-n targeted - sets to act upon. - NOTE: L2C_DBG[SET] must never equal a crippled or - unusable set (see UMSK* registers and Cripple mode - fuses). */ - uint64_t finv : 1; /**< Flush-Invalidate. - When flush-invalidate is enable (FINV=1), all STF - (L1 store-miss) commands generated from the diagnostic PP - (L2C_DBG[PPNUM]) will invalidate the specified set - (L2C_DBG[SET]) at the index specified in the STF - address[17:7]. If a dirty block is detected (D=1), it is - written back to memory. The contents of the invalid - L2 Cache line is also 'scrubbed' with the STF write data. - NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in - STF address[17:7] refers to the 'aliased' address. - NOTE: An STF command with write data=ZEROES can be - generated by SW using the Prefetch instruction with - Hint=30d "prepare for Store", followed by a SYNCW. - What is seen at the L2C as an STF w/wrdcnt=0 with all - of its mask bits clear (indicates zero-fill data). - A flush-invalidate will 'force-hit' the L2 cache at - [index,set] and invalidate the entry (V=0/D=0/L=0/U=0). - If the cache block is dirty, it is also written back - to memory. The DuTag state is probed/updated as normal - for an STF request. - TYPICAL APPLICATIONS: - 1) L2 Tag/Data ECC SW Recovery - 2) Cache Unlocking - NOTE: If the cacheline had been previously LOCKED(L=1), - a flush-invalidate operation will explicitly UNLOCK - (L=0) the set/index specified. - NOTE: The diagnostic PP cores can generate STF - commands to the L2 Cache whenever all 128 bytes in a - block are written. SW must take this into consideration - to avoid 'errant' Flush-Invalidates. */ - uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is - returned directly from the L2 Data Store - (regardless of hit/miss) when an LDD(L1 load-miss) command - is issued from a PP determined by the L2C_DBG[PPNUM] - field. The selected set# is determined by the - L2C_DBG[SET] field, and the index is determined - from the address[17:7] associated with the LDD - command. - This 'force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. */ - uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:18]] - is returned on the data bus starting at +32(and +96) bytes - offset from the beginning of cacheline when an LDD - (L1 load-miss) command is issued from a PP determined by - the L2C_DBG[PPNUM] field. - The selected L2 set# is determined by the L2C_DBG[SET] - field, and the L2 index is determined from the - phys_addr[17:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: The diagnostic PP should issue a d-stream load - to an aligned cacheline+0x20(+0x60) in order to have the - return VDLUTAG information (in OW2/OW6) written directly - into the proper PP register. The diagnostic PP should also - flush it's local L1 cache after use(to ensure data - coherency). - NOTE: The position of the VDLUTAG data in the destination - register is dependent on the endian mode(big/little). - NOTE: N3K-Pass2 modification. (This bit's functionality - has changed since Pass1-in the following way). - NOTE: (For L2C BitMap testing of L2 Data Store OW ECC): - If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected - half cacheline (see: L2D_ERR[BMHCLSEL] is also - conditionally latched into the L2D_FSYN0/1 CSRs if an - LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */ -#else - uint64_t l2t : 1; - uint64_t l2d : 1; - uint64_t finv : 1; - uint64_t set : 3; - uint64_t ppnum : 4; - uint64_t lfb_dmp : 1; - uint64_t lfb_enum : 4; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_l2c_dbg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t lfb_enum : 2; /**< Specifies the LFB Entry# which is to be captured. */ - uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of - the LFB specified by LFB_ENUM are captured - into the L2C_LFB(0/1/2) registers. - NOTE: Some fields of the LFB entry are unpredictable - and dependent on usage. This is only intended to be - used for HW debug. */ - uint64_t reserved_7_9 : 3; - uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines which - PP is selected as the diagnostic PP. - NOTE: For O1P single core PPNUM=0 (MBZ) */ - uint64_t reserved_5_5 : 1; - uint64_t set : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines 1-of-n targeted - sets to act upon. - NOTE: L2C_DBG[SET] must never equal a crippled or - unusable set (see UMSK* registers and Cripple mode - fuses). */ - uint64_t finv : 1; /**< Flush-Invalidate. - When flush-invalidate is enable (FINV=1), all STF - (L1 store-miss) commands generated from the PP will invalidate - the specified set(L2C_DBG[SET]) at the index specified - in the STF address[14:7]. If a dirty block is detected(D=1), - it is written back to memory. The contents of the invalid - L2 Cache line is also 'scrubbed' with the STF write data. - NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in - STF address[14:7] refers to the 'aliased' address. - NOTE: An STF command with write data=ZEROES can be - generated by SW using the Prefetch instruction with - Hint=30d "prepare for Store", followed by a SYNCW. - What is seen at the L2C as an STF w/wrdcnt=0 with all - of its mask bits clear (indicates zero-fill data). - A flush-invalidate will 'force-hit' the L2 cache at - [index,set] and invalidate the entry (V=0/D=0/L=0/U=0). - If the cache block is dirty, it is also written back - to memory. The DuTag state is probed/updated as normal - for an STF request. - TYPICAL APPLICATIONS: - 1) L2 Tag/Data ECC SW Recovery - 2) Cache Unlocking - NOTE: If the cacheline had been previously LOCKED(L=1), - a flush-invalidate operation will explicitly UNLOCK - (L=0) the set/index specified. - NOTE: The PP can generate STF(L1 store-miss) - commands to the L2 Cache whenever all 128 bytes in a - block are written. SW must take this into consideration - to avoid 'errant' Flush-Invalidates. */ - uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is - returned directly from the L2 Data Store - (regardless of hit/miss) when an LDD(L1 load-miss) - command is issued from the PP. - The selected set# is determined by the - L2C_DBG[SET] field, and the index is determined - from the address[14:7] associated with the LDD - command. - This 'force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. */ - uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:15]] - is returned on the data bus starting at +32(and +96) bytes - offset from the beginning of cacheline when an LDD - (L1 load-miss) command is issued from the PP. - The selected L2 set# is determined by the L2C_DBG[SET] - field, and the L2 index is determined from the - phys_addr[14:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: The diagnostic PP should issue a d-stream load - to an aligned cacheline+0x20(+0x60) in order to have the - return VDLUTAG information (in OW2/OW6) written directly - into the proper PP register. The diagnostic PP should also - flush it's local L1 cache after use(to ensure data - coherency). - NOTE: The position of the VDLUTAG data in the destination - register is dependent on the endian mode(big/little). - NOTE: (For L2C BitMap testing of L2 Data Store OW ECC): - If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected - half cacheline (see: L2D_ERR[BMHCLSEL] is also - conditionally latched into the L2D_FSYN0/1 CSRs if an - LDD(L1 load-miss) is detected. */ -#else - uint64_t l2t : 1; - uint64_t l2d : 1; - uint64_t finv : 1; - uint64_t set : 2; - uint64_t reserved_5_5 : 1; - uint64_t ppnum : 1; - uint64_t reserved_7_9 : 3; - uint64_t lfb_dmp : 1; - uint64_t lfb_enum : 2; - uint64_t reserved_13_63 : 51; -#endif - } cn30xx; - struct cvmx_l2c_dbg_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */ - uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of - the LFB specified by LFB_ENUM are captured - into the L2C_LFB(0/1/2) registers. - NOTE: Some fields of the LFB entry are unpredictable - and dependent on usage. This is only intended to be - used for HW debug. */ - uint64_t reserved_7_9 : 3; - uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines which - PP is selected as the diagnostic PP. */ - uint64_t reserved_5_5 : 1; - uint64_t set : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines 1-of-n targeted - sets to act upon. - NOTE: L2C_DBG[SET] must never equal a crippled or - unusable set (see UMSK* registers and Cripple mode - fuses). */ - uint64_t finv : 1; /**< Flush-Invalidate. - When flush-invalidate is enable (FINV=1), all STF - (L1 store-miss) commands generated from the diagnostic PP - (L2C_DBG[PPNUM]) will invalidate the specified set - (L2C_DBG[SET]) at the index specified in the STF - address[15:7]. If a dirty block is detected (D=1), it is - written back to memory. The contents of the invalid - L2 Cache line is also 'scrubbed' with the STF write data. - NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in - STF address[15:7] refers to the 'aliased' address. - NOTE: An STF command with write data=ZEROES can be - generated by SW using the Prefetch instruction with - Hint=30d "prepare for Store", followed by a SYNCW. - What is seen at the L2C as an STF w/wrdcnt=0 with all - of its mask bits clear (indicates zero-fill data). - A flush-invalidate will 'force-hit' the L2 cache at - [index,set] and invalidate the entry (V=0/D=0/L=0/U=0). - If the cache block is dirty, it is also written back - to memory. The DuTag state is probed/updated as normal - for an STF request. - TYPICAL APPLICATIONS: - 1) L2 Tag/Data ECC SW Recovery - 2) Cache Unlocking - NOTE: If the cacheline had been previously LOCKED(L=1), - a flush-invalidate operation will explicitly UNLOCK - (L=0) the set/index specified. - NOTE: The diagnostic PP cores can generate STF(L1 store-miss) - commands to the L2 Cache whenever all 128 bytes in a - block are written. SW must take this into consideration - to avoid 'errant' Flush-Invalidates. */ - uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is - returned directly from the L2 Data Store - (regardless of hit/miss) when an LDD(L1 load-miss) - command is issued from a PP determined by the - L2C_DBG[PPNUM] field. The selected set# is determined - by the L2C_DBG[SET] field, and the index is determined - from the address[15:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. */ - uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]] - is returned on the data bus starting at +32(and +96) bytes - offset from the beginning of cacheline when an LDD - (L1 load-miss) command is issued from a PP determined by - the L2C_DBG[PPNUM] field. - The selected L2 set# is determined by the L2C_DBG[SET] - field, and the L2 index is determined from the - phys_addr[15:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: The diagnostic PP should issue a d-stream load - to an aligned cacheline+0x20(+0x60) in order to have the - return VDLUTAG information (in OW2/OW6) written directly - into the proper PP register. The diagnostic PP should also - flush it's local L1 cache after use(to ensure data - coherency). - NOTE: The position of the VDLUTAG data in the destination - register is dependent on the endian mode(big/little). - NOTE: (For L2C BitMap testing of L2 Data Store OW ECC): - If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected - half cacheline (see: L2D_ERR[BMHCLSEL] is also - conditionally latched into the L2D_FSYN0/1 CSRs if an - LDD(L1 load-miss) is detected from the diagnostic PP - (L2C_DBG[PPNUM]). */ -#else - uint64_t l2t : 1; - uint64_t l2d : 1; - uint64_t finv : 1; - uint64_t set : 2; - uint64_t reserved_5_5 : 1; - uint64_t ppnum : 1; - uint64_t reserved_7_9 : 3; - uint64_t lfb_dmp : 1; - uint64_t lfb_enum : 3; - uint64_t reserved_14_63 : 50; -#endif - } cn31xx; - struct cvmx_l2c_dbg_s cn38xx; - struct cvmx_l2c_dbg_s cn38xxp2; - struct cvmx_l2c_dbg_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */ - uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of - the LFB specified by LFB_ENUM[2:0] are captured - into the L2C_LFB(0/1/2) registers. - NOTE: Some fields of the LFB entry are unpredictable - and dependent on usage. This is only intended to be - used for HW debug. */ - uint64_t reserved_7_9 : 3; - uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines which 1-of-2 - PPs is selected as the diagnostic PP. */ - uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines 1-of-n targeted - sets to act upon. - NOTE: L2C_DBG[SET] must never equal a crippled or - unusable set (see UMSK* registers and Cripple mode - fuses). */ - uint64_t finv : 1; /**< Flush-Invalidate. - When flush-invalidate is enable (FINV=1), all STF - (L1 store-miss) commands generated from the diagnostic PP - (L2C_DBG[PPNUM]) will invalidate the specified set - (L2C_DBG[SET]) at the index specified in the STF - address[13:7]. If a dirty block is detected (D=1), it is - written back to memory. The contents of the invalid - L2 Cache line is also 'scrubbed' with the STF write data. - NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in - STF address[13:7] refers to the 'aliased' address. - NOTE: An STF command with write data=ZEROES can be - generated by SW using the Prefetch instruction with - Hint=30d "prepare for Store", followed by a SYNCW. - What is seen at the L2C as an STF w/wrdcnt=0 with all - of its mask bits clear (indicates zero-fill data). - A flush-invalidate will 'force-hit' the L2 cache at - [index,set] and invalidate the entry (V=0/D=0/L=0/U=0). - If the cache block is dirty, it is also written back - to memory. The DuTag state is probed/updated as normal - for an STF request. - TYPICAL APPLICATIONS: - 1) L2 Tag/Data ECC SW Recovery - 2) Cache Unlocking - NOTE: If the cacheline had been previously LOCKED(L=1), - a flush-invalidate operation will explicitly UNLOCK - (L=0) the set/index specified. - NOTE: The diagnostic PP cores can generate STF - commands to the L2 Cache whenever all 128 bytes in a - block are written. SW must take this into consideration - to avoid 'errant' Flush-Invalidates. */ - uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is - returned directly from the L2 Data Store - (regardless of hit/miss) when an LDD(L1 load-miss) command - is issued from a PP determined by the L2C_DBG[PPNUM] - field. The selected set# is determined by the - L2C_DBG[SET] field, and the index is determined - from the address[13:7] associated with the LDD - command. - This 'force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. */ - uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:14]] - is returned on the data bus starting at +32(and +96) bytes - offset from the beginning of cacheline when an LDD - (L1 load-miss) command is issued from a PP determined by - the L2C_DBG[PPNUM] field. - The selected L2 set# is determined by the L2C_DBG[SET] - field, and the L2 index is determined from the - phys_addr[13:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: The diagnostic PP should issue a d-stream load - to an aligned cacheline+0x20(+0x60) in order to have the - return VDLUTAG information (in OW2/OW6) written directly - into the proper PP register. The diagnostic PP should also - flush it's local L1 cache after use(to ensure data - coherency). - NOTE: The position of the VDLUTAG data in the destination - register is dependent on the endian mode(big/little). - NOTE: (For L2C BitMap testing of L2 Data Store OW ECC): - If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected - half cacheline (see: L2D_ERR[BMHCLSEL] is also - conditionally latched into the L2D_FSYN0/1 CSRs if an - LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */ -#else - uint64_t l2t : 1; - uint64_t l2d : 1; - uint64_t finv : 1; - uint64_t set : 3; - uint64_t ppnum : 1; - uint64_t reserved_7_9 : 3; - uint64_t lfb_dmp : 1; - uint64_t lfb_enum : 3; - uint64_t reserved_14_63 : 50; -#endif - } cn50xx; - struct cvmx_l2c_dbg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */ - uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of - the LFB specified by LFB_ENUM[2:0] are captured - into the L2C_LFB(0/1/2) registers. - NOTE: Some fields of the LFB entry are unpredictable - and dependent on usage. This is only intended to be - used for HW debug. */ - uint64_t reserved_8_9 : 2; - uint64_t ppnum : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines which 1-of-4 - PPs is selected as the diagnostic PP. */ - uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV] - is enabled, this field determines 1-of-n targeted - sets to act upon. - NOTE: L2C_DBG[SET] must never equal a crippled or - unusable set (see UMSK* registers and Cripple mode - fuses). */ - uint64_t finv : 1; /**< Flush-Invalidate. - When flush-invalidate is enable (FINV=1), all STF - (L1 store-miss) commands generated from the diagnostic PP - (L2C_DBG[PPNUM]) will invalidate the specified set - (L2C_DBG[SET]) at the index specified in the STF - address[15:7]. If a dirty block is detected (D=1), it is - written back to memory. The contents of the invalid - L2 Cache line is also 'scrubbed' with the STF write data. - NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in - STF address[15:7] refers to the 'aliased' address. - NOTE: An STF command with write data=ZEROES can be - generated by SW using the Prefetch instruction with - Hint=30d "prepare for Store", followed by a SYNCW. - What is seen at the L2C as an STF w/wrdcnt=0 with all - of its mask bits clear (indicates zero-fill data). - A flush-invalidate will 'force-hit' the L2 cache at - [index,set] and invalidate the entry (V=0/D=0/L=0/U=0). - If the cache block is dirty, it is also written back - to memory. The DuTag state is probed/updated as normal - for an STF request. - TYPICAL APPLICATIONS: - 1) L2 Tag/Data ECC SW Recovery - 2) Cache Unlocking - NOTE: If the cacheline had been previously LOCKED(L=1), - a flush-invalidate operation will explicitly UNLOCK - (L=0) the set/index specified. - NOTE: The diagnostic PP cores can generate STF - commands to the L2 Cache whenever all 128 bytes in a - block are written. SW must take this into consideration - to avoid 'errant' Flush-Invalidates. */ - uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is - returned directly from the L2 Data Store - (regardless of hit/miss) when an LDD(L1 load-miss) command - is issued from a PP determined by the L2C_DBG[PPNUM] - field. The selected set# is determined by the - L2C_DBG[SET] field, and the index is determined - from the address[15:7] associated with the LDD - command. - This 'force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. */ - uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]] - is returned on the data bus starting at +32(and +96) bytes - offset from the beginning of cacheline when an LDD - (L1 load-miss) command is issued from a PP determined by - the L2C_DBG[PPNUM] field. - The selected L2 set# is determined by the L2C_DBG[SET] - field, and the L2 index is determined from the - phys_addr[15:7] associated with the LDD command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: The diagnostic PP should issue a d-stream load - to an aligned cacheline+0x20(+0x60) in order to have the - return VDLUTAG information (in OW2/OW6) written directly - into the proper PP register. The diagnostic PP should also - flush it's local L1 cache after use(to ensure data - coherency). - NOTE: The position of the VDLUTAG data in the destination - register is dependent on the endian mode(big/little). - NOTE: (For L2C BitMap testing of L2 Data Store OW ECC): - If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected - half cacheline (see: L2D_ERR[BMHCLSEL] is also - conditionally latched into the L2D_FSYN0/1 CSRs if an - LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */ -#else - uint64_t l2t : 1; - uint64_t l2d : 1; - uint64_t finv : 1; - uint64_t set : 3; - uint64_t ppnum : 2; - uint64_t reserved_8_9 : 2; - uint64_t lfb_dmp : 1; - uint64_t lfb_enum : 3; - uint64_t reserved_14_63 : 50; -#endif - } cn52xx; - struct cvmx_l2c_dbg_cn52xx cn52xxp1; - struct cvmx_l2c_dbg_s cn56xx; - struct cvmx_l2c_dbg_s cn56xxp1; - struct cvmx_l2c_dbg_s cn58xx; - struct cvmx_l2c_dbg_s cn58xxp1; -} cvmx_l2c_dbg_t; - - -/** - * cvmx_l2c_dut - * - * L2C_DUT = L2C DUTAG Register - * - * Description: L2C Duplicate Tag State Register - * - * Notes: - * (1) When using the L2T, L2D or FINV Debug probe feature, an LDD command issued by the diagnostic PP - * WILL NOT update the DuTags. - * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one enabled at a time). - * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back - * dirty data to memory to maintain coherency. (A side effect of FINV is that an LDD L2 fill is - * launched which fills data into the L2 DS). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_dut_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dtena : 1; /**< DuTag Diagnostic read enable. - When L2C_DUT[DTENA]=1, all LDD(L1 load-miss) - commands issued from the diagnostic PP - (L2C_DBG[PPNUM]) will capture the DuTag state (V|L1TAG) - of the PP#(specified in the LDD address[29:26] into - the L2C_DUT CSR register. This allows the diagPP to - read ALL DuTags (from any PP). - The DuTag Set# to capture is extracted from the LDD - address[25:20]. The diagnostic PP would issue the - LDD then read the L2C_DUT register (one at a time). - This LDD 'L2 force-hit' will NOT alter the current L2 - Tag State OR the DuTag state. - NOTE: For O9N the DuTag SIZE has doubled (to 16KB) - where each DuTag is organized as 2x 64-way entries. - The LDD address[7] determines which 1(of-2) internal - 64-ways to select. - The fill data is returned directly from the L2 Data - Store(regardless of hit/miss) when an LDD command - is issued from a PP determined by the L2C_DBG[PPNUM] - field. The selected L2 Set# is determined by the - L2C_DBG[SET] field, and the index is determined - from the address[17:7] associated with the LDD - command. - This 'L2 force-hit' will NOT alter the current L2 Tag - state OR the DuTag state. - NOTE: In order for the DiagPP to generate an LDD command - to the L2C, it must first force an L1 Dcache flush. */ - uint64_t reserved_30_30 : 1; - uint64_t dt_vld : 1; /**< Duplicate L1 Tag Valid bit latched in for previous - LDD(L1 load-miss) command sourced by diagnostic PP. */ - uint64_t dt_tag : 29; /**< Duplicate L1 Tag[35:7] latched in for previous - LDD(L1 load-miss) command sourced by diagnostic PP. */ -#else - uint64_t dt_tag : 29; - uint64_t dt_vld : 1; - uint64_t reserved_30_30 : 1; - uint64_t dtena : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_dut_s cn30xx; - struct cvmx_l2c_dut_s cn31xx; - struct cvmx_l2c_dut_s cn38xx; - struct cvmx_l2c_dut_s cn38xxp2; - struct cvmx_l2c_dut_s cn50xx; - struct cvmx_l2c_dut_s cn52xx; - struct cvmx_l2c_dut_s cn52xxp1; - struct cvmx_l2c_dut_s cn56xx; - struct cvmx_l2c_dut_s cn56xxp1; - struct cvmx_l2c_dut_s cn58xx; - struct cvmx_l2c_dut_s cn58xxp1; -} cvmx_l2c_dut_t; - - -/** - * cvmx_l2c_grpwrr0 - * - * L2C_GRPWRR0 = L2C PP Weighted Round \#0 Register - * - * Description: Defines Weighted rounds(32) for Group PLC0,PLC1 - * - * Notes: - * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP - * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_grpwrr0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t plc1rmsk : 32; /**< PLC1 Group#1 Weighted Round Mask - Each bit represents 1 of 32 rounds - for Group \#1's participation. When a 'round' bit is - set, Group#1 is 'masked' and DOES NOT participate. - When a 'round' bit is clear, Group#1 WILL - participate in the arbitration for this round. */ - uint64_t plc0rmsk : 32; /**< PLC Group#0 Weighted Round Mask - Each bit represents 1 of 32 rounds - for Group \#0's participation. When a 'round' bit is - set, Group#0 is 'masked' and DOES NOT participate. - When a 'round' bit is clear, Group#0 WILL - participate in the arbitration for this round. */ -#else - uint64_t plc0rmsk : 32; - uint64_t plc1rmsk : 32; -#endif - } s; - struct cvmx_l2c_grpwrr0_s cn52xx; - struct cvmx_l2c_grpwrr0_s cn52xxp1; - struct cvmx_l2c_grpwrr0_s cn56xx; - struct cvmx_l2c_grpwrr0_s cn56xxp1; -} cvmx_l2c_grpwrr0_t; - - -/** - * cvmx_l2c_grpwrr1 - * - * L2C_GRPWRR1 = L2C PP Weighted Round \#1 Register - * - * Description: Defines Weighted Rounds(32) for Group PLC2,ILC - * - * Notes: - * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP - * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_grpwrr1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t ilcrmsk : 32; /**< ILC (IOB) Weighted Round Mask - Each bit represents 1 of 32 rounds - for IOB participation. When a 'round' bit is - set, IOB is 'masked' and DOES NOT participate. - When a 'round' bit is clear, IOB WILL - participate in the arbitration for this round. */ - uint64_t plc2rmsk : 32; /**< PLC Group#2 Weighted Round Mask - Each bit represents 1 of 32 rounds - for Group \#2's participation. When a 'round' bit is - set, Group#2 is 'masked' and DOES NOT participate. - When a 'round' bit is clear, Group#2 WILL - participate in the arbitration for this round. */ -#else - uint64_t plc2rmsk : 32; - uint64_t ilcrmsk : 32; -#endif - } s; - struct cvmx_l2c_grpwrr1_s cn52xx; - struct cvmx_l2c_grpwrr1_s cn52xxp1; - struct cvmx_l2c_grpwrr1_s cn56xx; - struct cvmx_l2c_grpwrr1_s cn56xxp1; -} cvmx_l2c_grpwrr1_t; - - -/** - * cvmx_l2c_int_en - * - * L2C_INT_EN = L2C Global Interrupt Enable Register - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t lck2ena : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit - NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA2] */ - uint64_t lckena : 1; /**< L2 Tag Lock Error Interrupt Enable bit - NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA] */ - uint64_t l2ddeden : 1; /**< L2 Data ECC Double Error Detect(DED) Interrupt Enable bit - When set, allows interrupts to be reported on double bit - (uncorrectable) errors from the L2 Data Arrays. - NOTE: This is the 'same' bit as L2D_ERR[DED_INTENA] */ - uint64_t l2dsecen : 1; /**< L2 Data ECC Single Error Correct(SEC) Interrupt Enable bit - When set, allows interrupts to be reported on single bit - (correctable) errors from the L2 Data Arrays. - NOTE: This is the 'same' bit as L2D_ERR[SEC_INTENA] */ - uint64_t l2tdeden : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - NOTE: This is the 'same' bit as L2T_ERR[DED_INTENA] */ - uint64_t l2tsecen : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. - NOTE: This is the 'same' bit as L2T_ERR[SEC_INTENA] */ - uint64_t oob3en : 1; /**< DMA Out of Bounds Interrupt Enable Range#3 */ - uint64_t oob2en : 1; /**< DMA Out of Bounds Interrupt Enable Range#2 */ - uint64_t oob1en : 1; /**< DMA Out of Bounds Interrupt Enable Range#1 */ -#else - uint64_t oob1en : 1; - uint64_t oob2en : 1; - uint64_t oob3en : 1; - uint64_t l2tsecen : 1; - uint64_t l2tdeden : 1; - uint64_t l2dsecen : 1; - uint64_t l2ddeden : 1; - uint64_t lckena : 1; - uint64_t lck2ena : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_l2c_int_en_s cn52xx; - struct cvmx_l2c_int_en_s cn52xxp1; - struct cvmx_l2c_int_en_s cn56xx; - struct cvmx_l2c_int_en_s cn56xxp1; -} cvmx_l2c_int_en_t; - - -/** - * cvmx_l2c_int_stat - * - * L2C_INT_STAT = L2C Global Interrupt Status Register - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_int_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t lck2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. - NOTE: This is the 'same' bit as L2T_ERR[LCKERR2] */ - uint64_t lck : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). - NOTE: This is the 'same' bit as L2T_ERR[LCKERR] */ - uint64_t l2dded : 1; /**< L2D Double Error detected (DED) - NOTE: This is the 'same' bit as L2D_ERR[DED_ERR] */ - uint64_t l2dsec : 1; /**< L2D Single Error corrected (SEC) - NOTE: This is the 'same' bit as L2D_ERR[SEC_ERR] */ - uint64_t l2tded : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). - NOTE: This is the 'same' bit as L2T_ERR[DED_ERR] */ - uint64_t l2tsec : 1; /**< L2T Single Bit Error corrected (SEC) status - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). - NOTE: This is the 'same' bit as L2T_ERR[SEC_ERR] */ - uint64_t oob3 : 1; /**< DMA Out of Bounds Interrupt Status Range#3 */ - uint64_t oob2 : 1; /**< DMA Out of Bounds Interrupt Status Range#2 */ - uint64_t oob1 : 1; /**< DMA Out of Bounds Interrupt Status Range#1 */ -#else - uint64_t oob1 : 1; - uint64_t oob2 : 1; - uint64_t oob3 : 1; - uint64_t l2tsec : 1; - uint64_t l2tded : 1; - uint64_t l2dsec : 1; - uint64_t l2dded : 1; - uint64_t lck : 1; - uint64_t lck2 : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_l2c_int_stat_s cn52xx; - struct cvmx_l2c_int_stat_s cn52xxp1; - struct cvmx_l2c_int_stat_s cn56xx; - struct cvmx_l2c_int_stat_s cn56xxp1; -} cvmx_l2c_int_stat_t; - - -/** - * cvmx_l2c_lckbase - * - * L2C_LCKBASE = L2C LockDown Base Register - * - * Description: L2C LockDown Base Register - * - * Notes: - * (1) SW RESTRICTION \#1: SW must manage the L2 Data Store lockdown space such that at least 1 - * set per cache line remains in the 'unlocked' (normal) state to allow general caching operations. - * If SW violates this restriction, a status bit is set (LCK_ERR) and an interrupt is posted. - * [this limits the total lockdown space to 7/8ths of the total L2 data store = 896KB] - * (2) IOB initiated LDI commands are ignored (only PP initiated LDI/LDD commands are considered - * for lockdown). - * (3) To 'unlock' a locked cache line, SW can use the FLUSH-INVAL CSR mechanism (see L2C_DBG[FINV]). - * (4) LCK_ENA MUST only be activated when debug modes are disabled (L2C_DBG[L2T], L2C_DBG[L2D], L2C_DBG[FINV]). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lckbase_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t lck_base : 27; /**< Base Memory block address[33:7]. Specifies the - starting address of the lockdown region. */ - uint64_t reserved_1_3 : 3; - uint64_t lck_ena : 1; /**< L2 Cache Lock Enable - When the LCK_ENA=1, all LDI(I-stream Load) or - LDD(L1 load-miss) commands issued from the - diagnostic PP (specified by the L2C_DBG[PPNUM]), - which fall within a predefined lockdown address - range (specified by: [lck_base:lck_base+lck_offset]) - are LOCKED in the L2 cache. The LOCKED state is - denoted using an explicit L2 Tag bit (L=1). - If the LOCK request L2-Hits (on ANY SET), then data is - returned from the L2 and the hit set is updated to the - LOCKED state. NOTE: If the Hit Set# is outside the - available sets for a given PP (see UMSK'x'), the - the LOCK bit is still SET. If the programmer's intent - is to explicitly LOCK addresses into 'available' sets, - care must be taken to flush-invalidate the cache first - (to avoid such situations). Not following this procedure - can lead to LCKERR2 interrupts. - If the LOCK request L2-Misses, a replacment set is - chosen(from the available sets (UMSK'x'). - If the replacement set contains a dirty-victim it is - written back to memory. Memory read data is then written - into the replacement set, and the replacment SET is - updated to the LOCKED state(L=1). - NOTE: SETs that contain LOCKED addresses are - excluded from the replacement set selection algorithm. - NOTE: The LDD command will allocate the DuTag as normal. - NOTE: If L2C_CFG[IDXALIAS]=1, the address is 'aliased' first - before being checked against the lockdown address - range. To ensure an 'aliased' address is properly locked, - it is recommmended that SW preload the 'aliased' locked adddress - into the L2C_LCKBASE[LCK_BASE] register (while keeping - L2C_LCKOFF[LCK_OFFSET]=0). - NOTE: The OCTEON(N3) implementation only supports 16GB(MAX) of - physical memory. Therefore, only byte address[33:0] are used - (ie: address[35:34] are ignored). */ -#else - uint64_t lck_ena : 1; - uint64_t reserved_1_3 : 3; - uint64_t lck_base : 27; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_l2c_lckbase_s cn30xx; - struct cvmx_l2c_lckbase_s cn31xx; - struct cvmx_l2c_lckbase_s cn38xx; - struct cvmx_l2c_lckbase_s cn38xxp2; - struct cvmx_l2c_lckbase_s cn50xx; - struct cvmx_l2c_lckbase_s cn52xx; - struct cvmx_l2c_lckbase_s cn52xxp1; - struct cvmx_l2c_lckbase_s cn56xx; - struct cvmx_l2c_lckbase_s cn56xxp1; - struct cvmx_l2c_lckbase_s cn58xx; - struct cvmx_l2c_lckbase_s cn58xxp1; -} cvmx_l2c_lckbase_t; - - -/** - * cvmx_l2c_lckoff - * - * L2C_LCKOFF = L2C LockDown OFFSET Register - * - * Description: L2C LockDown OFFSET Register - * - * Notes: - * (1) The generation of the end lockdown block address will 'wrap'. - * (2) The minimum granularity for lockdown is 1 cache line (= 128B block) - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lckoff_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t lck_offset : 10; /**< LockDown block Offset. Used in determining - the ending block address of the lockdown - region: - End Lockdown block Address[33:7] = - LCK_BASE[33:7]+LCK_OFFSET[9:0] */ -#else - uint64_t lck_offset : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_l2c_lckoff_s cn30xx; - struct cvmx_l2c_lckoff_s cn31xx; - struct cvmx_l2c_lckoff_s cn38xx; - struct cvmx_l2c_lckoff_s cn38xxp2; - struct cvmx_l2c_lckoff_s cn50xx; - struct cvmx_l2c_lckoff_s cn52xx; - struct cvmx_l2c_lckoff_s cn52xxp1; - struct cvmx_l2c_lckoff_s cn56xx; - struct cvmx_l2c_lckoff_s cn56xxp1; - struct cvmx_l2c_lckoff_s cn58xx; - struct cvmx_l2c_lckoff_s cn58xxp1; -} cvmx_l2c_lckoff_t; - - -/** - * cvmx_l2c_lfb0 - * - * L2C_LFB0 = L2C LFB DEBUG 0 Register - * - * Description: L2C LFB Contents (Status Bits) - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lfb0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t stcpnd : 1; /**< LFB STC Pending Status */ - uint64_t stpnd : 1; /**< LFB ST* Pending Status */ - uint64_t stinv : 1; /**< LFB ST* Invalidate Status */ - uint64_t stcfl : 1; /**< LFB STC=FAIL Status */ - uint64_t vam : 1; /**< Valid Full Address Match Status */ - uint64_t inxt : 4; /**< Next LFB Pointer(invalid if ITL=1) */ - uint64_t itl : 1; /**< LFB Tail of List Indicator */ - uint64_t ihd : 1; /**< LFB Head of List Indicator */ - uint64_t set : 3; /**< SET# used for DS-OP (hit=hset/miss=rset) */ - uint64_t vabnum : 4; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */ - uint64_t sid : 9; /**< LFB Source ID */ - uint64_t cmd : 4; /**< LFB Command */ - uint64_t vld : 1; /**< LFB Valid */ -#else - uint64_t vld : 1; - uint64_t cmd : 4; - uint64_t sid : 9; - uint64_t vabnum : 4; - uint64_t set : 3; - uint64_t ihd : 1; - uint64_t itl : 1; - uint64_t inxt : 4; - uint64_t vam : 1; - uint64_t stcfl : 1; - uint64_t stinv : 1; - uint64_t stpnd : 1; - uint64_t stcpnd : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_lfb0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t stcpnd : 1; /**< LFB STC Pending Status */ - uint64_t stpnd : 1; /**< LFB ST* Pending Status */ - uint64_t stinv : 1; /**< LFB ST* Invalidate Status */ - uint64_t stcfl : 1; /**< LFB STC=FAIL Status */ - uint64_t vam : 1; /**< Valid Full Address Match Status */ - uint64_t reserved_25_26 : 2; - uint64_t inxt : 2; /**< Next LFB Pointer(invalid if ITL=1) */ - uint64_t itl : 1; /**< LFB Tail of List Indicator */ - uint64_t ihd : 1; /**< LFB Head of List Indicator */ - uint64_t reserved_20_20 : 1; - uint64_t set : 2; /**< SET# used for DS-OP (hit=hset/miss=rset) */ - uint64_t reserved_16_17 : 2; - uint64_t vabnum : 2; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */ - uint64_t sid : 9; /**< LFB Source ID */ - uint64_t cmd : 4; /**< LFB Command */ - uint64_t vld : 1; /**< LFB Valid */ -#else - uint64_t vld : 1; - uint64_t cmd : 4; - uint64_t sid : 9; - uint64_t vabnum : 2; - uint64_t reserved_16_17 : 2; - uint64_t set : 2; - uint64_t reserved_20_20 : 1; - uint64_t ihd : 1; - uint64_t itl : 1; - uint64_t inxt : 2; - uint64_t reserved_25_26 : 2; - uint64_t vam : 1; - uint64_t stcfl : 1; - uint64_t stinv : 1; - uint64_t stpnd : 1; - uint64_t stcpnd : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_l2c_lfb0_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t stcpnd : 1; /**< LFB STC Pending Status */ - uint64_t stpnd : 1; /**< LFB ST* Pending Status */ - uint64_t stinv : 1; /**< LFB ST* Invalidate Status */ - uint64_t stcfl : 1; /**< LFB STC=FAIL Status */ - uint64_t vam : 1; /**< Valid Full Address Match Status */ - uint64_t reserved_26_26 : 1; - uint64_t inxt : 3; /**< Next LFB Pointer(invalid if ITL=1) */ - uint64_t itl : 1; /**< LFB Tail of List Indicator */ - uint64_t ihd : 1; /**< LFB Head of List Indicator */ - uint64_t reserved_20_20 : 1; - uint64_t set : 2; /**< SET# used for DS-OP (hit=hset/miss=rset) */ - uint64_t reserved_17_17 : 1; - uint64_t vabnum : 3; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */ - uint64_t sid : 9; /**< LFB Source ID */ - uint64_t cmd : 4; /**< LFB Command */ - uint64_t vld : 1; /**< LFB Valid */ -#else - uint64_t vld : 1; - uint64_t cmd : 4; - uint64_t sid : 9; - uint64_t vabnum : 3; - uint64_t reserved_17_17 : 1; - uint64_t set : 2; - uint64_t reserved_20_20 : 1; - uint64_t ihd : 1; - uint64_t itl : 1; - uint64_t inxt : 3; - uint64_t reserved_26_26 : 1; - uint64_t vam : 1; - uint64_t stcfl : 1; - uint64_t stinv : 1; - uint64_t stpnd : 1; - uint64_t stcpnd : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn31xx; - struct cvmx_l2c_lfb0_s cn38xx; - struct cvmx_l2c_lfb0_s cn38xxp2; - struct cvmx_l2c_lfb0_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t stcpnd : 1; /**< LFB STC Pending Status */ - uint64_t stpnd : 1; /**< LFB ST* Pending Status */ - uint64_t stinv : 1; /**< LFB ST* Invalidate Status */ - uint64_t stcfl : 1; /**< LFB STC=FAIL Status */ - uint64_t vam : 1; /**< Valid Full Address Match Status */ - uint64_t reserved_26_26 : 1; - uint64_t inxt : 3; /**< Next LFB Pointer(invalid if ITL=1) */ - uint64_t itl : 1; /**< LFB Tail of List Indicator */ - uint64_t ihd : 1; /**< LFB Head of List Indicator */ - uint64_t set : 3; /**< SET# used for DS-OP (hit=hset/miss=rset) */ - uint64_t reserved_17_17 : 1; - uint64_t vabnum : 3; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */ - uint64_t sid : 9; /**< LFB Source ID */ - uint64_t cmd : 4; /**< LFB Command */ - uint64_t vld : 1; /**< LFB Valid */ -#else - uint64_t vld : 1; - uint64_t cmd : 4; - uint64_t sid : 9; - uint64_t vabnum : 3; - uint64_t reserved_17_17 : 1; - uint64_t set : 3; - uint64_t ihd : 1; - uint64_t itl : 1; - uint64_t inxt : 3; - uint64_t reserved_26_26 : 1; - uint64_t vam : 1; - uint64_t stcfl : 1; - uint64_t stinv : 1; - uint64_t stpnd : 1; - uint64_t stcpnd : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn50xx; - struct cvmx_l2c_lfb0_cn50xx cn52xx; - struct cvmx_l2c_lfb0_cn50xx cn52xxp1; - struct cvmx_l2c_lfb0_s cn56xx; - struct cvmx_l2c_lfb0_s cn56xxp1; - struct cvmx_l2c_lfb0_s cn58xx; - struct cvmx_l2c_lfb0_s cn58xxp1; -} cvmx_l2c_lfb0_t; - - -/** - * cvmx_l2c_lfb1 - * - * L2C_LFB1 = L2C LFB DEBUG 1 Register - * - * Description: L2C LFB Contents (Wait Bits) - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lfb1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t dsgoing : 1; /**< LFB DS Going (in flight) */ - uint64_t bid : 2; /**< LFB DS Bid# */ - uint64_t wtrsp : 1; /**< LFB Waiting for RSC Response [FILL,STRSP] completion */ - uint64_t wtdw : 1; /**< LFB Waiting for DS-WR completion */ - uint64_t wtdq : 1; /**< LFB Waiting for LFB-DQ */ - uint64_t wtwhp : 1; /**< LFB Waiting for Write-Hit Partial L2 DS-WR completion */ - uint64_t wtwhf : 1; /**< LFB Waiting for Write-Hit Full L2 DS-WR completion */ - uint64_t wtwrm : 1; /**< LFB Waiting for Write-Miss L2 DS-WR completion */ - uint64_t wtstm : 1; /**< LFB Waiting for Write-Miss L2 DS-WR completion */ - uint64_t wtrda : 1; /**< LFB Waiting for Read-Miss L2 DS-WR completion */ - uint64_t wtstdt : 1; /**< LFB Waiting for all ST write Data to arrive on XMD bus */ - uint64_t wtstrsp : 1; /**< LFB Waiting for ST RSC/RSD to be issued on RSP - (with invalidates) */ - uint64_t wtstrsc : 1; /**< LFB Waiting for ST RSC-Only to be issued on RSP - (no-invalidates) */ - uint64_t wtvtm : 1; /**< LFB Waiting for Victim Read L2 DS-RD completion */ - uint64_t wtmfl : 1; /**< LFB Waiting for Memory Fill completion to MRB */ - uint64_t prbrty : 1; /**< Probe-Retry Detected - waiting for probe completion */ - uint64_t wtprb : 1; /**< LFB Waiting for Probe */ - uint64_t vld : 1; /**< LFB Valid */ -#else - uint64_t vld : 1; - uint64_t wtprb : 1; - uint64_t prbrty : 1; - uint64_t wtmfl : 1; - uint64_t wtvtm : 1; - uint64_t wtstrsc : 1; - uint64_t wtstrsp : 1; - uint64_t wtstdt : 1; - uint64_t wtrda : 1; - uint64_t wtstm : 1; - uint64_t wtwrm : 1; - uint64_t wtwhf : 1; - uint64_t wtwhp : 1; - uint64_t wtdq : 1; - uint64_t wtdw : 1; - uint64_t wtrsp : 1; - uint64_t bid : 2; - uint64_t dsgoing : 1; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_l2c_lfb1_s cn30xx; - struct cvmx_l2c_lfb1_s cn31xx; - struct cvmx_l2c_lfb1_s cn38xx; - struct cvmx_l2c_lfb1_s cn38xxp2; - struct cvmx_l2c_lfb1_s cn50xx; - struct cvmx_l2c_lfb1_s cn52xx; - struct cvmx_l2c_lfb1_s cn52xxp1; - struct cvmx_l2c_lfb1_s cn56xx; - struct cvmx_l2c_lfb1_s cn56xxp1; - struct cvmx_l2c_lfb1_s cn58xx; - struct cvmx_l2c_lfb1_s cn58xxp1; -} cvmx_l2c_lfb1_t; - - -/** - * cvmx_l2c_lfb2 - * - * L2C_LFB2 = L2C LFB DEBUG 2 Register - * - * Description: L2C LFB Contents Tag/Index - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lfb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_l2c_lfb2_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t lfb_tag : 19; /**< LFB TAG[33:15] */ - uint64_t lfb_idx : 8; /**< LFB IDX[14:7] */ -#else - uint64_t lfb_idx : 8; - uint64_t lfb_tag : 19; - uint64_t reserved_27_63 : 37; -#endif - } cn30xx; - struct cvmx_l2c_lfb2_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t lfb_tag : 17; /**< LFB TAG[33:16] */ - uint64_t lfb_idx : 10; /**< LFB IDX[15:7] */ -#else - uint64_t lfb_idx : 10; - uint64_t lfb_tag : 17; - uint64_t reserved_27_63 : 37; -#endif - } cn31xx; - struct cvmx_l2c_lfb2_cn31xx cn38xx; - struct cvmx_l2c_lfb2_cn31xx cn38xxp2; - struct cvmx_l2c_lfb2_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t lfb_tag : 20; /**< LFB TAG[33:14] */ - uint64_t lfb_idx : 7; /**< LFB IDX[13:7] */ -#else - uint64_t lfb_idx : 7; - uint64_t lfb_tag : 20; - uint64_t reserved_27_63 : 37; -#endif - } cn50xx; - struct cvmx_l2c_lfb2_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t lfb_tag : 18; /**< LFB TAG[33:16] */ - uint64_t lfb_idx : 9; /**< LFB IDX[15:7] */ -#else - uint64_t lfb_idx : 9; - uint64_t lfb_tag : 18; - uint64_t reserved_27_63 : 37; -#endif - } cn52xx; - struct cvmx_l2c_lfb2_cn52xx cn52xxp1; - struct cvmx_l2c_lfb2_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t lfb_tag : 16; /**< LFB TAG[33:18] */ - uint64_t lfb_idx : 11; /**< LFB IDX[17:7] */ -#else - uint64_t lfb_idx : 11; - uint64_t lfb_tag : 16; - uint64_t reserved_27_63 : 37; -#endif - } cn56xx; - struct cvmx_l2c_lfb2_cn56xx cn56xxp1; - struct cvmx_l2c_lfb2_cn56xx cn58xx; - struct cvmx_l2c_lfb2_cn56xx cn58xxp1; -} cvmx_l2c_lfb2_t; - - -/** - * cvmx_l2c_lfb3 - * - * L2C_LFB3 = L2C LFB DEBUG 3 Register - * - * Description: LFB High Water Mark Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_lfb3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable - When clear, all STP/C(store partials) will take 2 cycles - to complete (power-on default). - When set, all STP/C(store partials) will take 4 cycles - to complete. - NOTE: It is recommended to keep this bit ALWAYS ZERO. - *** NOTE: PASS2 Addition */ - uint64_t lfb_hwm : 4; /**< LFB High Water Mark - Determines \#of LFB Entries in use before backpressure - is asserted. - HWM=0: 1 LFB Entry available - - ... - HWM=15: 16 LFB Entries available - *** NOTE: PASS2 Addition */ -#else - uint64_t lfb_hwm : 4; - uint64_t stpartdis : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_l2c_lfb3_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable - When clear, all STP/C(store partials) will take 2 cycles - to complete (power-on default). - When set, all STP/C(store partials) will take 4 cycles - to complete. - NOTE: It is recommended to keep this bit ALWAYS ZERO. */ - uint64_t reserved_2_3 : 2; - uint64_t lfb_hwm : 2; /**< LFB High Water Mark - Determines \#of LFB Entries in use before backpressure - is asserted. - HWM=0: 1 LFB Entry available - - ... - HWM=3: 4 LFB Entries available */ -#else - uint64_t lfb_hwm : 2; - uint64_t reserved_2_3 : 2; - uint64_t stpartdis : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn30xx; - struct cvmx_l2c_lfb3_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable - When clear, all STP/C(store partials) will take 2 cycles - to complete (power-on default). - When set, all STP/C(store partials) will take 4 cycles - to complete. - NOTE: It is recommended to keep this bit ALWAYS ZERO. */ - uint64_t reserved_3_3 : 1; - uint64_t lfb_hwm : 3; /**< LFB High Water Mark - Determines \#of LFB Entries in use before backpressure - is asserted. - HWM=0: 1 LFB Entry available - - ... - HWM=7: 8 LFB Entries available */ -#else - uint64_t lfb_hwm : 3; - uint64_t reserved_3_3 : 1; - uint64_t stpartdis : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn31xx; - struct cvmx_l2c_lfb3_s cn38xx; - struct cvmx_l2c_lfb3_s cn38xxp2; - struct cvmx_l2c_lfb3_cn31xx cn50xx; - struct cvmx_l2c_lfb3_cn31xx cn52xx; - struct cvmx_l2c_lfb3_cn31xx cn52xxp1; - struct cvmx_l2c_lfb3_s cn56xx; - struct cvmx_l2c_lfb3_s cn56xxp1; - struct cvmx_l2c_lfb3_s cn58xx; - struct cvmx_l2c_lfb3_s cn58xxp1; -} cvmx_l2c_lfb3_t; - - -/** - * cvmx_l2c_oob - * - * L2C_OOB = L2C Out of Bounds Global Enables - * - * Description: Defines DMA "Out of Bounds" global enables. - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_oob_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dwbena : 1; /**< DMA Out of Bounds Range Checker for DMA DWB - commands (Don't WriteBack). - When enabled, any DMA DWB commands which hit 1-of-3 - out of bounds regions will be logged into - L2C_INT_STAT[OOB*] CSRs and the DMA store WILL - NOT occur. If the corresponding L2C_INT_EN[OOB*] - is enabled, an interrupt will also be reported. */ - uint64_t stena : 1; /**< DMA Out of Bounds Range Checker for DMA store - commands (STF/P/T). - When enabled, any DMA store commands (STF/P/T) which - hit 1-of-3 out of bounds regions will be logged into - L2C_INT_STAT[OOB*] CSRs and the DMA store WILL - NOT occur. If the corresponding L2C_INT_EN[OOB*] - is enabled, an interrupt will also be reported. */ -#else - uint64_t stena : 1; - uint64_t dwbena : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_l2c_oob_s cn52xx; - struct cvmx_l2c_oob_s cn52xxp1; - struct cvmx_l2c_oob_s cn56xx; - struct cvmx_l2c_oob_s cn56xxp1; -} cvmx_l2c_oob_t; - - -/** - * cvmx_l2c_oob1 - * - * L2C_OOB1 = L2C Out of Bounds Range Checker - * - * Description: Defines DMA "Out of Bounds" region \#1. If a DMA initiated write transaction generates an address - * within the specified region, the write is 'ignored' and an interrupt is generated to alert software. - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_oob1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address - When L2C_INT_STAT[OOB1]=1, this field indicates the - DMA cacheline address. - (addr[33:7] = full cacheline address captured) - NOTE: FADR is locked down until L2C_INT_STAT[OOB1] - is cleared. */ - uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command - When L2C_INT_STAT[OOB1]=1, this field indicates the - type of DMA command. - - 0: ST* (STF/P/T) - - 1: DWB (Don't WriteBack) - NOTE: FSRC is locked down until L2C_INT_STAT[OOB1] - is cleared. */ - uint64_t reserved_34_35 : 2; - uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address - (1MB granularity) */ - uint64_t reserved_14_19 : 6; - uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size - (1MB granularity) - Example: 0: 0MB / 1: 1MB - The range check is for: - (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20) - SW NOTE: SADR+SIZE could be setup to potentially wrap - the 34bit ending bounds address. */ -#else - uint64_t size : 14; - uint64_t reserved_14_19 : 6; - uint64_t sadr : 14; - uint64_t reserved_34_35 : 2; - uint64_t fsrc : 1; - uint64_t fadr : 27; -#endif - } s; - struct cvmx_l2c_oob1_s cn52xx; - struct cvmx_l2c_oob1_s cn52xxp1; - struct cvmx_l2c_oob1_s cn56xx; - struct cvmx_l2c_oob1_s cn56xxp1; -} cvmx_l2c_oob1_t; - - -/** - * cvmx_l2c_oob2 - * - * L2C_OOB2 = L2C Out of Bounds Range Checker - * - * Description: Defines DMA "Out of Bounds" region \#2. If a DMA initiated write transaction generates an address - * within the specified region, the write is 'ignored' and an interrupt is generated to alert software. - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_oob2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address - When L2C_INT_STAT[OOB2]=1, this field indicates the - DMA cacheline address. - (addr[33:7] = full cacheline address captured) - NOTE: FADR is locked down until L2C_INT_STAT[OOB2] - is cleared. */ - uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command - When L2C_INT_STAT[OOB2]=1, this field indicates the - type of DMA command. - - 0: ST* (STF/P/T) - - 1: DWB (Don't WriteBack) - NOTE: FSRC is locked down until L2C_INT_STAT[OOB2] - is cleared. */ - uint64_t reserved_34_35 : 2; - uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address - (1MB granularity) */ - uint64_t reserved_14_19 : 6; - uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size - (1MB granularity) - Example: 0: 0MB / 1: 1MB - The range check is for: - (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20) - SW NOTE: SADR+SIZE could be setup to potentially wrap - the 34bit ending bounds address. */ -#else - uint64_t size : 14; - uint64_t reserved_14_19 : 6; - uint64_t sadr : 14; - uint64_t reserved_34_35 : 2; - uint64_t fsrc : 1; - uint64_t fadr : 27; -#endif - } s; - struct cvmx_l2c_oob2_s cn52xx; - struct cvmx_l2c_oob2_s cn52xxp1; - struct cvmx_l2c_oob2_s cn56xx; - struct cvmx_l2c_oob2_s cn56xxp1; -} cvmx_l2c_oob2_t; - - -/** - * cvmx_l2c_oob3 - * - * L2C_OOB3 = L2C Out of Bounds Range Checker - * - * Description: Defines DMA "Out of Bounds" region \#3. If a DMA initiated write transaction generates an address - * within the specified region, the write is 'ignored' and an interrupt is generated to alert software. - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_oob3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address - When L2C_INT_STAT[OOB3]=1, this field indicates the - DMA cacheline address. - (addr[33:7] = full cacheline address captured) - NOTE: FADR is locked down until L2C_INT_STAT[00B3] - is cleared. */ - uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command - When L2C_INT_STAT[OOB3]=1, this field indicates the - type of DMA command. - - 0: ST* (STF/P/T) - - 1: DWB (Don't WriteBack) - NOTE: FSRC is locked down until L2C_INT_STAT[00B3] - is cleared. */ - uint64_t reserved_34_35 : 2; - uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address - (1MB granularity) */ - uint64_t reserved_14_19 : 6; - uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size - (1MB granularity) - Example: 0: 0MB / 1: 1MB - The range check is for: - (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20) - SW NOTE: SADR+SIZE could be setup to potentially wrap - the 34bit ending bounds address. */ -#else - uint64_t size : 14; - uint64_t reserved_14_19 : 6; - uint64_t sadr : 14; - uint64_t reserved_34_35 : 2; - uint64_t fsrc : 1; - uint64_t fadr : 27; -#endif - } s; - struct cvmx_l2c_oob3_s cn52xx; - struct cvmx_l2c_oob3_s cn52xxp1; - struct cvmx_l2c_oob3_s cn56xx; - struct cvmx_l2c_oob3_s cn56xxp1; -} cvmx_l2c_oob3_t; - - -/** - * cvmx_l2c_pfc# - * - * L2C_PFC0 = L2 Performance Counter \#0 - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_pfcx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t pfcnt0 : 36; /**< Performance Counter \#0 */ -#else - uint64_t pfcnt0 : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_l2c_pfcx_s cn30xx; - struct cvmx_l2c_pfcx_s cn31xx; - struct cvmx_l2c_pfcx_s cn38xx; - struct cvmx_l2c_pfcx_s cn38xxp2; - struct cvmx_l2c_pfcx_s cn50xx; - struct cvmx_l2c_pfcx_s cn52xx; - struct cvmx_l2c_pfcx_s cn52xxp1; - struct cvmx_l2c_pfcx_s cn56xx; - struct cvmx_l2c_pfcx_s cn56xxp1; - struct cvmx_l2c_pfcx_s cn58xx; - struct cvmx_l2c_pfcx_s cn58xxp1; -} cvmx_l2c_pfcx_t; - - -/** - * cvmx_l2c_pfctl - * - * L2C_PFCTL = L2 Performance Counter Control Register - * - * Description: Controls the actions of the 4 Performance Counters - * - * Notes: - * - There are four 36b performance counter registers which can simultaneously count events. - * Each Counter's event is programmably selected via the corresponding CNTxSEL field: - * CNTxSEL[5:0] Event - * -----------------+----------------------- - * 0 | Cycles - * 1 | L2 Instruction Miss - * 2 | L2 Instruction Hit - * 3 | L2 Data Miss - * 4 | L2 Data Hit - * 5 | L2 Miss (I/D) - * 6 | L2 Hit (I/D) - * 7 | L2 Victim Buffer Hit (Retry Probe) - * 8 | LFB-NQ Index Conflict - * 9 | L2 Tag Probe (issued - could be VB-Retried) - * 10 | L2 Tag Update (completed - note: some CMD types do not update) - * 11 | L2 Tag Probe Completed (beyond VB-RTY window) - * 12 | L2 Tag Dirty Victim - * 13 | L2 Data Store NOP - * 14 | L2 Data Store READ - * 15 | L2 Data Store WRITE - * 16 | Memory Fill Data valid (1 strobe/32B) - * 17 | Memory Write Request - * 18 | Memory Read Request - * 19 | Memory Write Data valid (1 strobe/32B) - * 20 | XMC NOP (XMC Bus Idle) - * 21 | XMC LDT (Load-Through Request) - * 22 | XMC LDI (L2 Load I-Stream Request) - * 23 | XMC LDD (L2 Load D-stream Request) - * 24 | XMC STF (L2 Store Full cacheline Request) - * 25 | XMC STT (L2 Store Through Request) - * 26 | XMC STP (L2 Store Partial Request) - * 27 | XMC STC (L2 Store Conditional Request) - * 28 | XMC DWB (L2 Don't WriteBack Request) - * 29 | XMC PL2 (L2 Prefetch Request) - * 30 | XMC PSL1 (L1 Prefetch Request) - * 31 | XMC IOBLD - * 32 | XMC IOBST - * 33 | XMC IOBDMA - * 34 | XMC IOBRSP - * 35 | XMD Bus valid (all) - * 36 | XMD Bus valid (DST=L2C) Memory Data - * 37 | XMD Bus valid (DST=IOB) REFL Data - * 38 | XMD Bus valid (DST=PP) IOBRSP Data - * 39 | RSC NOP - * 40 | RSC STDN - * 41 | RSC FILL - * 42 | RSC REFL - * 43 | RSC STIN - * 44 | RSC SCIN - * 45 | RSC SCFL - * 46 | RSC SCDN - * 47 | RSD Data Valid - * 48 | RSD Data Valid (FILL) - * 49 | RSD Data Valid (STRSP) - * 50 | RSD Data Valid (REFL) - * 51 | LRF-REQ (LFB-NQ) - * 52 | DT RD-ALLOC (LDD/PSL1 Commands) - * 53 | DT WR-INVAL (ST* Commands) - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_pfctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t cnt3rdclr : 1; /**< Performance Counter 3 Read Clear - When set, all CSR reads of the L2C_PFC3 - register will auto-clear the counter. This allows - SW to maintain 'cumulative' counters in SW. - NOTE: If the CSR read occurs in the same cycle as - the 'event' to be counted, the counter will - properly reflect the event. - *** NOTE: PASS2 Addition */ - uint64_t cnt2rdclr : 1; /**< Performance Counter 2 Read Clear - When set, all CSR reads of the L2C_PFC2 - register will auto-clear the counter. This allows - SW to maintain 'cumulative' counters in SW. - NOTE: If the CSR read occurs in the same cycle as - the 'event' to be counted, the counter will - properly reflect the event. - *** NOTE: PASS2 Addition */ - uint64_t cnt1rdclr : 1; /**< Performance Counter 1 Read Clear - When set, all CSR reads of the L2C_PFC1 - register will auto-clear the counter. This allows - SW to maintain 'cumulative' counters in SW. - NOTE: If the CSR read occurs in the same cycle as - the 'event' to be counted, the counter will - properly reflect the event. - *** NOTE: PASS2 Addition */ - uint64_t cnt0rdclr : 1; /**< Performance Counter 0 Read Clear - When set, all CSR reads of the L2C_PFC0 - register will 'auto-clear' the counter. This allows - SW to maintain accurate 'cumulative' counters. - NOTE: If the CSR read occurs in the same cycle as - the 'event' to be counted, the counter will - properly reflect the event. - *** NOTE: PASS2 Addition */ - uint64_t cnt3ena : 1; /**< Performance Counter 3 Enable - When this bit is set, the performance counter - is enabled. */ - uint64_t cnt3clr : 1; /**< Performance Counter 3 Clear - When the CSR write occurs, if this bit is set, - the performance counter is cleared. Otherwise, - it will resume counting from its current value. */ - uint64_t cnt3sel : 6; /**< Performance Counter 3 Event Selector - (see list of selectable events to count in NOTES) */ - uint64_t cnt2ena : 1; /**< Performance Counter 2 Enable - When this bit is set, the performance counter - is enabled. */ - uint64_t cnt2clr : 1; /**< Performance Counter 2 Clear - When the CSR write occurs, if this bit is set, - the performance counter is cleared. Otherwise, - it will resume counting from its current value. */ - uint64_t cnt2sel : 6; /**< Performance Counter 2 Event Selector - (see list of selectable events to count in NOTES) */ - uint64_t cnt1ena : 1; /**< Performance Counter 1 Enable - When this bit is set, the performance counter - is enabled. */ - uint64_t cnt1clr : 1; /**< Performance Counter 1 Clear - When the CSR write occurs, if this bit is set, - the performance counter is cleared. Otherwise, - it will resume counting from its current value. */ - uint64_t cnt1sel : 6; /**< Performance Counter 1 Event Selector - (see list of selectable events to count in NOTES) */ - uint64_t cnt0ena : 1; /**< Performance Counter 0 Enable - When this bit is set, the performance counter - is enabled. */ - uint64_t cnt0clr : 1; /**< Performance Counter 0 Clear - When the CSR write occurs, if this bit is set, - the performance counter is cleared. Otherwise, - it will resume counting from its current value. */ - uint64_t cnt0sel : 6; /**< Performance Counter 0 Event Selector - (see list of selectable events to count in NOTES) */ -#else - uint64_t cnt0sel : 6; - uint64_t cnt0clr : 1; - uint64_t cnt0ena : 1; - uint64_t cnt1sel : 6; - uint64_t cnt1clr : 1; - uint64_t cnt1ena : 1; - uint64_t cnt2sel : 6; - uint64_t cnt2clr : 1; - uint64_t cnt2ena : 1; - uint64_t cnt3sel : 6; - uint64_t cnt3clr : 1; - uint64_t cnt3ena : 1; - uint64_t cnt0rdclr : 1; - uint64_t cnt1rdclr : 1; - uint64_t cnt2rdclr : 1; - uint64_t cnt3rdclr : 1; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_l2c_pfctl_s cn30xx; - struct cvmx_l2c_pfctl_s cn31xx; - struct cvmx_l2c_pfctl_s cn38xx; - struct cvmx_l2c_pfctl_s cn38xxp2; - struct cvmx_l2c_pfctl_s cn50xx; - struct cvmx_l2c_pfctl_s cn52xx; - struct cvmx_l2c_pfctl_s cn52xxp1; - struct cvmx_l2c_pfctl_s cn56xx; - struct cvmx_l2c_pfctl_s cn56xxp1; - struct cvmx_l2c_pfctl_s cn58xx; - struct cvmx_l2c_pfctl_s cn58xxp1; -} cvmx_l2c_pfctl_t; - - -/** - * cvmx_l2c_ppgrp - * - * L2C_PPGRP = L2C PP Group Number - * - * Description: Defines the PP(Packet Processor) PLC Group \# (0,1,2) - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_ppgrp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t pp11grp : 2; /**< PP11 PLC Group# (0,1,2) */ - uint64_t pp10grp : 2; /**< PP10 PLC Group# (0,1,2) */ - uint64_t pp9grp : 2; /**< PP9 PLC Group# (0,1,2) */ - uint64_t pp8grp : 2; /**< PP8 PLC Group# (0,1,2) */ - uint64_t pp7grp : 2; /**< PP7 PLC Group# (0,1,2) */ - uint64_t pp6grp : 2; /**< PP6 PLC Group# (0,1,2) */ - uint64_t pp5grp : 2; /**< PP5 PLC Group# (0,1,2) */ - uint64_t pp4grp : 2; /**< PP4 PLC Group# (0,1,2) */ - uint64_t pp3grp : 2; /**< PP3 PLC Group# (0,1,2) */ - uint64_t pp2grp : 2; /**< PP2 PLC Group# (0,1,2) */ - uint64_t pp1grp : 2; /**< PP1 PLC Group# (0,1,2) */ - uint64_t pp0grp : 2; /**< PP0 PLC Group# (0,1,2) */ -#else - uint64_t pp0grp : 2; - uint64_t pp1grp : 2; - uint64_t pp2grp : 2; - uint64_t pp3grp : 2; - uint64_t pp4grp : 2; - uint64_t pp5grp : 2; - uint64_t pp6grp : 2; - uint64_t pp7grp : 2; - uint64_t pp8grp : 2; - uint64_t pp9grp : 2; - uint64_t pp10grp : 2; - uint64_t pp11grp : 2; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_l2c_ppgrp_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t pp3grp : 2; /**< PP3 PLC Group# (0,1,2) */ - uint64_t pp2grp : 2; /**< PP2 PLC Group# (0,1,2) */ - uint64_t pp1grp : 2; /**< PP1 PLC Group# (0,1,2) */ - uint64_t pp0grp : 2; /**< PP0 PLC Group# (0,1,2) */ -#else - uint64_t pp0grp : 2; - uint64_t pp1grp : 2; - uint64_t pp2grp : 2; - uint64_t pp3grp : 2; - uint64_t reserved_8_63 : 56; -#endif - } cn52xx; - struct cvmx_l2c_ppgrp_cn52xx cn52xxp1; - struct cvmx_l2c_ppgrp_s cn56xx; - struct cvmx_l2c_ppgrp_s cn56xxp1; -} cvmx_l2c_ppgrp_t; - - -/** - * cvmx_l2c_spar0 - * - * L2C_SPAR0 = L2 Set Partitioning Register (PP0-3) - * - * Description: L2 Set Partitioning Register - * - * Notes: - * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that - * set for replacement. - * - There MUST ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation - * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers - * When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_spar0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t umsk3 : 8; /**< PP[3] L2 'DO NOT USE' set partition mask */ - uint64_t umsk2 : 8; /**< PP[2] L2 'DO NOT USE' set partition mask */ - uint64_t umsk1 : 8; /**< PP[1] L2 'DO NOT USE' set partition mask */ - uint64_t umsk0 : 8; /**< PP[0] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk0 : 8; - uint64_t umsk1 : 8; - uint64_t umsk2 : 8; - uint64_t umsk3 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_spar0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t umsk0 : 4; /**< PP[0] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk0 : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_l2c_spar0_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t umsk1 : 4; /**< PP[1] L2 'DO NOT USE' set partition mask */ - uint64_t reserved_4_7 : 4; - uint64_t umsk0 : 4; /**< PP[0] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk0 : 4; - uint64_t reserved_4_7 : 4; - uint64_t umsk1 : 4; - uint64_t reserved_12_63 : 52; -#endif - } cn31xx; - struct cvmx_l2c_spar0_s cn38xx; - struct cvmx_l2c_spar0_s cn38xxp2; - struct cvmx_l2c_spar0_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t umsk1 : 8; /**< PP[1] L2 'DO NOT USE' set partition mask */ - uint64_t umsk0 : 8; /**< PP[0] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk0 : 8; - uint64_t umsk1 : 8; - uint64_t reserved_16_63 : 48; -#endif - } cn50xx; - struct cvmx_l2c_spar0_s cn52xx; - struct cvmx_l2c_spar0_s cn52xxp1; - struct cvmx_l2c_spar0_s cn56xx; - struct cvmx_l2c_spar0_s cn56xxp1; - struct cvmx_l2c_spar0_s cn58xx; - struct cvmx_l2c_spar0_s cn58xxp1; -} cvmx_l2c_spar0_t; - - -/** - * cvmx_l2c_spar1 - * - * L2C_SPAR1 = L2 Set Partitioning Register (PP4-7) - * - * Description: L2 Set Partitioning Register - * - * Notes: - * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that - * set for replacement. - * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation - * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers - * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_spar1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t umsk7 : 8; /**< PP[7] L2 'DO NOT USE' set partition mask */ - uint64_t umsk6 : 8; /**< PP[6] L2 'DO NOT USE' set partition mask */ - uint64_t umsk5 : 8; /**< PP[5] L2 'DO NOT USE' set partition mask */ - uint64_t umsk4 : 8; /**< PP[4] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk4 : 8; - uint64_t umsk5 : 8; - uint64_t umsk6 : 8; - uint64_t umsk7 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_spar1_s cn38xx; - struct cvmx_l2c_spar1_s cn38xxp2; - struct cvmx_l2c_spar1_s cn56xx; - struct cvmx_l2c_spar1_s cn56xxp1; - struct cvmx_l2c_spar1_s cn58xx; - struct cvmx_l2c_spar1_s cn58xxp1; -} cvmx_l2c_spar1_t; - - -/** - * cvmx_l2c_spar2 - * - * L2C_SPAR2 = L2 Set Partitioning Register (PP8-11) - * - * Description: L2 Set Partitioning Register - * - * Notes: - * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that - * set for replacement. - * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation - * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers - * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_spar2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t umsk11 : 8; /**< PP[11] L2 'DO NOT USE' set partition mask */ - uint64_t umsk10 : 8; /**< PP[10] L2 'DO NOT USE' set partition mask */ - uint64_t umsk9 : 8; /**< PP[9] L2 'DO NOT USE' set partition mask */ - uint64_t umsk8 : 8; /**< PP[8] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk8 : 8; - uint64_t umsk9 : 8; - uint64_t umsk10 : 8; - uint64_t umsk11 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_spar2_s cn38xx; - struct cvmx_l2c_spar2_s cn38xxp2; - struct cvmx_l2c_spar2_s cn56xx; - struct cvmx_l2c_spar2_s cn56xxp1; - struct cvmx_l2c_spar2_s cn58xx; - struct cvmx_l2c_spar2_s cn58xxp1; -} cvmx_l2c_spar2_t; - - -/** - * cvmx_l2c_spar3 - * - * L2C_SPAR3 = L2 Set Partitioning Register (PP12-15) - * - * Description: L2 Set Partitioning Register - * - * Notes: - * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that - * set for replacement. - * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation - * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers - * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_spar3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t umsk15 : 8; /**< PP[15] L2 'DO NOT USE' set partition mask */ - uint64_t umsk14 : 8; /**< PP[14] L2 'DO NOT USE' set partition mask */ - uint64_t umsk13 : 8; /**< PP[13] L2 'DO NOT USE' set partition mask */ - uint64_t umsk12 : 8; /**< PP[12] L2 'DO NOT USE' set partition mask */ -#else - uint64_t umsk12 : 8; - uint64_t umsk13 : 8; - uint64_t umsk14 : 8; - uint64_t umsk15 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_l2c_spar3_s cn38xx; - struct cvmx_l2c_spar3_s cn38xxp2; - struct cvmx_l2c_spar3_s cn58xx; - struct cvmx_l2c_spar3_s cn58xxp1; -} cvmx_l2c_spar3_t; - - -/** - * cvmx_l2c_spar4 - * - * L2C_SPAR4 = L2 Set Partitioning Register (IOB) - * - * Description: L2 Set Partitioning Register - * - * Notes: - * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that - * set for replacement. - * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation - * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers - * When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2c_spar4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t umskiob : 8; /**< IOB L2 'DO NOT USE' set partition mask */ -#else - uint64_t umskiob : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_l2c_spar4_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t umskiob : 4; /**< IOB L2 'DO NOT USE' set partition mask */ -#else - uint64_t umskiob : 4; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_l2c_spar4_cn30xx cn31xx; - struct cvmx_l2c_spar4_s cn38xx; - struct cvmx_l2c_spar4_s cn38xxp2; - struct cvmx_l2c_spar4_s cn50xx; - struct cvmx_l2c_spar4_s cn52xx; - struct cvmx_l2c_spar4_s cn52xxp1; - struct cvmx_l2c_spar4_s cn56xx; - struct cvmx_l2c_spar4_s cn56xxp1; - struct cvmx_l2c_spar4_s cn58xx; - struct cvmx_l2c_spar4_s cn58xxp1; -} cvmx_l2c_spar4_t; - - -/** - * cvmx_l2d_bst0 - * - * L2D_BST0 = L2C Data Store QUAD0 BIST Status Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_bst0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_35_63 : 29; - uint64_t ftl : 1; /**< L2C Data Store Fatal Defect(across all QUADs) - 2 or more columns were detected bad across all - QUADs[0-3]. Please refer to individual quad failures - for bad column = 0x7e to determine which QUAD was in - error. */ - uint64_t q0stat : 34; /**< Bist Results for QUAD0 - Failure \#1 Status - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Status - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column - NOTES: For bad high/low column reporting: - 0x7f: No failure - 0x7e: Fatal Defect: 2 or more bad columns - 0-0x45: Bad column - NOTE: If there are less than 2 failures then the - bad bank will be 0x7. */ -#else - uint64_t q0stat : 34; - uint64_t ftl : 1; - uint64_t reserved_35_63 : 29; -#endif - } s; - struct cvmx_l2d_bst0_s cn30xx; - struct cvmx_l2d_bst0_s cn31xx; - struct cvmx_l2d_bst0_s cn38xx; - struct cvmx_l2d_bst0_s cn38xxp2; - struct cvmx_l2d_bst0_s cn50xx; - struct cvmx_l2d_bst0_s cn52xx; - struct cvmx_l2d_bst0_s cn52xxp1; - struct cvmx_l2d_bst0_s cn56xx; - struct cvmx_l2d_bst0_s cn56xxp1; - struct cvmx_l2d_bst0_s cn58xx; - struct cvmx_l2d_bst0_s cn58xxp1; -} cvmx_l2d_bst0_t; - - -/** - * cvmx_l2d_bst1 - * - * L2D_BST1 = L2C Data Store QUAD1 BIST Status Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_bst1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q1stat : 34; /**< Bist Results for QUAD1 - Failure \#1 Status - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Status - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column - NOTES: For bad high/low column reporting: - 0x7f: No failure - 0x7e: Fatal Defect: 2 or more bad columns - 0-0x45: Bad column - NOTE: If there are less than 2 failures then the - bad bank will be 0x7. */ -#else - uint64_t q1stat : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_bst1_s cn30xx; - struct cvmx_l2d_bst1_s cn31xx; - struct cvmx_l2d_bst1_s cn38xx; - struct cvmx_l2d_bst1_s cn38xxp2; - struct cvmx_l2d_bst1_s cn50xx; - struct cvmx_l2d_bst1_s cn52xx; - struct cvmx_l2d_bst1_s cn52xxp1; - struct cvmx_l2d_bst1_s cn56xx; - struct cvmx_l2d_bst1_s cn56xxp1; - struct cvmx_l2d_bst1_s cn58xx; - struct cvmx_l2d_bst1_s cn58xxp1; -} cvmx_l2d_bst1_t; - - -/** - * cvmx_l2d_bst2 - * - * L2D_BST2 = L2C Data Store QUAD2 BIST Status Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_bst2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q2stat : 34; /**< Bist Results for QUAD2 - Failure \#1 Status - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Status - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column - NOTES: For bad high/low column reporting: - 0x7f: No failure - 0x7e: Fatal Defect: 2 or more bad columns - 0-0x45: Bad column - NOTE: If there are less than 2 failures then the - bad bank will be 0x7. */ -#else - uint64_t q2stat : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_bst2_s cn30xx; - struct cvmx_l2d_bst2_s cn31xx; - struct cvmx_l2d_bst2_s cn38xx; - struct cvmx_l2d_bst2_s cn38xxp2; - struct cvmx_l2d_bst2_s cn50xx; - struct cvmx_l2d_bst2_s cn52xx; - struct cvmx_l2d_bst2_s cn52xxp1; - struct cvmx_l2d_bst2_s cn56xx; - struct cvmx_l2d_bst2_s cn56xxp1; - struct cvmx_l2d_bst2_s cn58xx; - struct cvmx_l2d_bst2_s cn58xxp1; -} cvmx_l2d_bst2_t; - - -/** - * cvmx_l2d_bst3 - * - * L2D_BST3 = L2C Data Store QUAD3 BIST Status Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_bst3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q3stat : 34; /**< Bist Results for QUAD3 - Failure \#1 Status - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Status - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column - NOTES: For bad high/low column reporting: - 0x7f: No failure - 0x7e: Fatal Defect: 2 or more bad columns - 0-0x45: Bad column - NOTE: If there are less than 2 failures then the - bad bank will be 0x7. */ -#else - uint64_t q3stat : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_bst3_s cn30xx; - struct cvmx_l2d_bst3_s cn31xx; - struct cvmx_l2d_bst3_s cn38xx; - struct cvmx_l2d_bst3_s cn38xxp2; - struct cvmx_l2d_bst3_s cn50xx; - struct cvmx_l2d_bst3_s cn52xx; - struct cvmx_l2d_bst3_s cn52xxp1; - struct cvmx_l2d_bst3_s cn56xx; - struct cvmx_l2d_bst3_s cn56xxp1; - struct cvmx_l2d_bst3_s cn58xx; - struct cvmx_l2d_bst3_s cn58xxp1; -} cvmx_l2d_bst3_t; - - -/** - * cvmx_l2d_err - * - * L2D_ERR = L2 Data Errors - * - * Description: L2 Data ECC SEC/DED Errors and Interrupt Enable - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t bmhclsel : 1; /**< L2 Bit Map Half CacheLine ECC Selector - *** NOTE: PASS2 Addition - When L2C_DBG[L2T]=1/L2D_ERR[ECC_ENA]=0, the BMHCLSEL selects - which half cacheline to conditionally latch into - the L2D_FSYN0/L2D_FSYN1 registers when an LDD command - is detected from the diagnostic PP (see L2C_DBG[PPNUM]). - - 0: OW[0-3] ECC (from first 1/2 cacheline) is selected to - be conditionally latched into the L2D_FSYN0/1 CSRs. - - 1: OW[4-7] ECC (from last 1/2 cacheline) is selected to - be conditionally latched into - the L2D_FSYN0/1 CSRs. */ - uint64_t ded_err : 1; /**< L2D Double Error detected (DED) */ - uint64_t sec_err : 1; /**< L2D Single Error corrected (SEC) */ - uint64_t ded_intena : 1; /**< L2 Data ECC Double Error Detect(DED) Interrupt Enable bit - When set, allows interrupts to be reported on double bit - (uncorrectable) errors from the L2 Data Arrays. */ - uint64_t sec_intena : 1; /**< L2 Data ECC Single Error Correct(SEC) Interrupt Enable bit - When set, allows interrupts to be reported on single bit - (correctable) errors from the L2 Data Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Data ECC Enable - When set, enables 10-bit SEC/DED codeword for 128bit L2 - Data Arrays. */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t bmhclsel : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_l2d_err_s cn30xx; - struct cvmx_l2d_err_s cn31xx; - struct cvmx_l2d_err_s cn38xx; - struct cvmx_l2d_err_s cn38xxp2; - struct cvmx_l2d_err_s cn50xx; - struct cvmx_l2d_err_s cn52xx; - struct cvmx_l2d_err_s cn52xxp1; - struct cvmx_l2d_err_s cn56xx; - struct cvmx_l2d_err_s cn56xxp1; - struct cvmx_l2d_err_s cn58xx; - struct cvmx_l2d_err_s cn58xxp1; -} cvmx_l2d_err_t; - - -/** - * cvmx_l2d_fadr - * - * L2D_FADR = L2 Failing Address - * - * Description: L2 Data ECC SEC/DED Failing Address - * - * Notes: - * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data store index. - * (A DED Error will always overwrite a SEC Error SYNDROME and FADR). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fadr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t fadru : 1; /**< Failing L2 Data Store Upper Index bit(MSB) */ - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t fset : 3; /**< Failing SET# */ - uint64_t fadr : 11; /**< Failing L2 Data Store Lower Index bits - (NOTE: L2 Data Store Index is for each 1/2 cacheline) - [FADRU, FADR[10:1]]: cacheline index[17:7] - FADR[0]: 1/2 cacheline index - NOTE: FADR[1] is used to select between upper/lower 1MB - physical L2 Data Store banks. */ -#else - uint64_t fadr : 11; - uint64_t fset : 3; - uint64_t fowmsk : 4; - uint64_t fadru : 1; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_l2d_fadr_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t reserved_13_13 : 1; - uint64_t fset : 2; /**< Failing SET# */ - uint64_t reserved_9_10 : 2; - uint64_t fadr : 9; /**< Failing L2 Data Store Index(1of512 = 1/2 CL address) */ -#else - uint64_t fadr : 9; - uint64_t reserved_9_10 : 2; - uint64_t fset : 2; - uint64_t reserved_13_13 : 1; - uint64_t fowmsk : 4; - uint64_t reserved_18_63 : 46; -#endif - } cn30xx; - struct cvmx_l2d_fadr_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t reserved_13_13 : 1; - uint64_t fset : 2; /**< Failing SET# */ - uint64_t reserved_10_10 : 1; - uint64_t fadr : 10; /**< Failing L2 Data Store Index - (1 of 1024 = half cacheline indices) */ -#else - uint64_t fadr : 10; - uint64_t reserved_10_10 : 1; - uint64_t fset : 2; - uint64_t reserved_13_13 : 1; - uint64_t fowmsk : 4; - uint64_t reserved_18_63 : 46; -#endif - } cn31xx; - struct cvmx_l2d_fadr_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t fset : 3; /**< Failing SET# */ - uint64_t fadr : 11; /**< Failing L2 Data Store Index (1of2K = 1/2 CL address) */ -#else - uint64_t fadr : 11; - uint64_t fset : 3; - uint64_t fowmsk : 4; - uint64_t reserved_18_63 : 46; -#endif - } cn38xx; - struct cvmx_l2d_fadr_cn38xx cn38xxp2; - struct cvmx_l2d_fadr_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t fset : 3; /**< Failing SET# */ - uint64_t reserved_8_10 : 3; - uint64_t fadr : 8; /**< Failing L2 Data Store Lower Index bits - (NOTE: L2 Data Store Index is for each 1/2 cacheline) - FADR[7:1]: cacheline index[13:7] - FADR[0]: 1/2 cacheline index */ -#else - uint64_t fadr : 8; - uint64_t reserved_8_10 : 3; - uint64_t fset : 3; - uint64_t fowmsk : 4; - uint64_t reserved_18_63 : 46; -#endif - } cn50xx; - struct cvmx_l2d_fadr_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t fowmsk : 4; /**< Failing OW Mask (which one of 4 OWs contained SEC/DED - error) */ - uint64_t fset : 3; /**< Failing SET# */ - uint64_t reserved_10_10 : 1; - uint64_t fadr : 10; /**< Failing L2 Data Store Lower Index bits - (NOTE: L2 Data Store Index is for each 1/2 cacheline) - FADR[9:1]: cacheline index[15:7] - FADR[0]: 1/2 cacheline index */ -#else - uint64_t fadr : 10; - uint64_t reserved_10_10 : 1; - uint64_t fset : 3; - uint64_t fowmsk : 4; - uint64_t reserved_18_63 : 46; -#endif - } cn52xx; - struct cvmx_l2d_fadr_cn52xx cn52xxp1; - struct cvmx_l2d_fadr_s cn56xx; - struct cvmx_l2d_fadr_s cn56xxp1; - struct cvmx_l2d_fadr_s cn58xx; - struct cvmx_l2d_fadr_s cn58xxp1; -} cvmx_l2d_fadr_t; - - -/** - * cvmx_l2d_fsyn0 - * - * L2D_FSYN0 = L2 Failing Syndrome [OW0,4 / OW1,5] - * - * Description: L2 Data ECC SEC/DED Failing Syndrome for lower cache line - * - * Notes: - * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data ECC 10b syndrome. - * (A DED Error will always overwrite a SEC Error SYNDROME and FADR). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fsyn0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t fsyn_ow1 : 10; /**< Failing L2 Data Store SYNDROME OW[1,5] - When L2D_ERR[ECC_ENA]=1 and either L2D_ERR[SEC_ERR] - or L2D_ERR[DED_ERR] are set, this field represents - the failing OWECC syndrome for the half cacheline - indexed by L2D_FADR[FADR]. - NOTE: The L2D_FADR[FOWMSK] further qualifies which - OW lane(1of4) detected the error. - When L2C_DBG[L2T]=1 and L2D_ERR[ECC_ENA]=0, an LDD - command from the diagnostic PP will conditionally latch - the raw OWECC for the selected half cacheline. - (see: L2D_ERR[BMHCLSEL] */ - uint64_t fsyn_ow0 : 10; /**< Failing L2 Data Store SYNDROME OW[0,4] - When L2D_ERR[ECC_ENA]=1 and either L2D_ERR[SEC_ERR] - or L2D_ERR[DED_ERR] are set, this field represents - the failing OWECC syndrome for the half cacheline - indexed by L2D_FADR[FADR]. - NOTE: The L2D_FADR[FOWMSK] further qualifies which - OW lane(1of4) detected the error. - When L2C_DBG[L2T]=1 and L2D_ERR[ECC_ENA]=0, an LDD - (L1 load-miss) from the diagnostic PP will conditionally - latch the raw OWECC for the selected half cacheline. - (see: L2D_ERR[BMHCLSEL] */ -#else - uint64_t fsyn_ow0 : 10; - uint64_t fsyn_ow1 : 10; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_l2d_fsyn0_s cn30xx; - struct cvmx_l2d_fsyn0_s cn31xx; - struct cvmx_l2d_fsyn0_s cn38xx; - struct cvmx_l2d_fsyn0_s cn38xxp2; - struct cvmx_l2d_fsyn0_s cn50xx; - struct cvmx_l2d_fsyn0_s cn52xx; - struct cvmx_l2d_fsyn0_s cn52xxp1; - struct cvmx_l2d_fsyn0_s cn56xx; - struct cvmx_l2d_fsyn0_s cn56xxp1; - struct cvmx_l2d_fsyn0_s cn58xx; - struct cvmx_l2d_fsyn0_s cn58xxp1; -} cvmx_l2d_fsyn0_t; - - -/** - * cvmx_l2d_fsyn1 - * - * L2D_FSYN1 = L2 Failing Syndrome [OW2,6 / OW3,7] - * - * Description: L2 Data ECC SEC/DED Failing Syndrome for upper cache line - * - * Notes: - * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data ECC 10b syndrome. - * (A DED Error will always overwrite a SEC Error SYNDROME and FADR). - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fsyn1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t fsyn_ow3 : 10; /**< Failing L2 Data Store SYNDROME OW[3,7] */ - uint64_t fsyn_ow2 : 10; /**< Failing L2 Data Store SYNDROME OW[2,5] */ -#else - uint64_t fsyn_ow2 : 10; - uint64_t fsyn_ow3 : 10; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_l2d_fsyn1_s cn30xx; - struct cvmx_l2d_fsyn1_s cn31xx; - struct cvmx_l2d_fsyn1_s cn38xx; - struct cvmx_l2d_fsyn1_s cn38xxp2; - struct cvmx_l2d_fsyn1_s cn50xx; - struct cvmx_l2d_fsyn1_s cn52xx; - struct cvmx_l2d_fsyn1_s cn52xxp1; - struct cvmx_l2d_fsyn1_s cn56xx; - struct cvmx_l2d_fsyn1_s cn56xxp1; - struct cvmx_l2d_fsyn1_s cn58xx; - struct cvmx_l2d_fsyn1_s cn58xxp1; -} cvmx_l2d_fsyn1_t; - - -/** - * cvmx_l2d_fus0 - * - * L2D_FUS0 = L2C Data Store QUAD0 Fuse Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fus0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q0fus : 34; /**< Fuse Register for QUAD0 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuse are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q0fus : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_fus0_s cn30xx; - struct cvmx_l2d_fus0_s cn31xx; - struct cvmx_l2d_fus0_s cn38xx; - struct cvmx_l2d_fus0_s cn38xxp2; - struct cvmx_l2d_fus0_s cn50xx; - struct cvmx_l2d_fus0_s cn52xx; - struct cvmx_l2d_fus0_s cn52xxp1; - struct cvmx_l2d_fus0_s cn56xx; - struct cvmx_l2d_fus0_s cn56xxp1; - struct cvmx_l2d_fus0_s cn58xx; - struct cvmx_l2d_fus0_s cn58xxp1; -} cvmx_l2d_fus0_t; - - -/** - * cvmx_l2d_fus1 - * - * L2D_FUS1 = L2C Data Store QUAD1 Fuse Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fus1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q1fus : 34; /**< Fuse Register for QUAD1 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuse are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q1fus : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_fus1_s cn30xx; - struct cvmx_l2d_fus1_s cn31xx; - struct cvmx_l2d_fus1_s cn38xx; - struct cvmx_l2d_fus1_s cn38xxp2; - struct cvmx_l2d_fus1_s cn50xx; - struct cvmx_l2d_fus1_s cn52xx; - struct cvmx_l2d_fus1_s cn52xxp1; - struct cvmx_l2d_fus1_s cn56xx; - struct cvmx_l2d_fus1_s cn56xxp1; - struct cvmx_l2d_fus1_s cn58xx; - struct cvmx_l2d_fus1_s cn58xxp1; -} cvmx_l2d_fus1_t; - - -/** - * cvmx_l2d_fus2 - * - * L2D_FUS2 = L2C Data Store QUAD2 Fuse Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fus2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t q2fus : 34; /**< Fuse Register for QUAD2 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuse are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q2fus : 34; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_l2d_fus2_s cn30xx; - struct cvmx_l2d_fus2_s cn31xx; - struct cvmx_l2d_fus2_s cn38xx; - struct cvmx_l2d_fus2_s cn38xxp2; - struct cvmx_l2d_fus2_s cn50xx; - struct cvmx_l2d_fus2_s cn52xx; - struct cvmx_l2d_fus2_s cn52xxp1; - struct cvmx_l2d_fus2_s cn56xx; - struct cvmx_l2d_fus2_s cn56xxp1; - struct cvmx_l2d_fus2_s cn58xx; - struct cvmx_l2d_fus2_s cn58xxp1; -} cvmx_l2d_fus2_t; - - -/** - * cvmx_l2d_fus3 - * - * L2D_FUS3 = L2C Data Store QUAD3 Fuse Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2d_fus3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ema_ctl : 3; /**< L2 Data Store EMA Control - These bits are used to 'observe' the EMA[1:0] inputs - for the L2 Data Store RAMs which are controlled by - either FUSES[141:140] or by MIO_FUSE_EMA[EMA] CSR. - From poweron (dc_ok), the EMA_CTL are driven from - FUSE[141:140]. However after the 1st CSR write to the - MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source - from the MIO_FUSE_EMA[EMA] register permanently - (until dc_ok). - NOTE: O9N Addition */ - uint64_t reserved_34_36 : 3; - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t reserved_34_36 : 3; - uint64_t ema_ctl : 3; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_l2d_fus3_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_35_63 : 29; - uint64_t crip_64k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:15] UNUSED - [14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:32] UNUSED - [31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_64k : 1; - uint64_t reserved_35_63 : 29; -#endif - } cn30xx; - struct cvmx_l2d_fus3_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_35_63 : 29; - uint64_t crip_128k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:15] UNUSED - [14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:32] UNUSED - [31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_128k : 1; - uint64_t reserved_35_63 : 29; -#endif - } cn31xx; - struct cvmx_l2d_fus3_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t crip_256k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t crip_512k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_512k : 1; - uint64_t crip_256k : 1; - uint64_t reserved_36_63 : 28; -#endif - } cn38xx; - struct cvmx_l2d_fus3_cn38xx cn38xxp2; - struct cvmx_l2d_fus3_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ema_ctl : 3; /**< L2 Data Store EMA Control - These bits are used to 'observe' the EMA[2:0] inputs - for the L2 Data Store RAMs which are controlled by - either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR. - From poweron (dc_ok), the EMA_CTL are driven from - FUSE[141:140]. However after the 1st CSR write to the - MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source - from the MIO_FUSE_EMA[EMA] register permanently - (until dc_ok). */ - uint64_t reserved_36_36 : 1; - uint64_t crip_32k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t crip_64k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] UNUSED (5020 uses single physical bank per quad) - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] UNUSED (5020 uses single physical bank per quad) - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_64k : 1; - uint64_t crip_32k : 1; - uint64_t reserved_36_36 : 1; - uint64_t ema_ctl : 3; - uint64_t reserved_40_63 : 24; -#endif - } cn50xx; - struct cvmx_l2d_fus3_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ema_ctl : 3; /**< L2 Data Store EMA Control - These bits are used to 'observe' the EMA[2:0] inputs - for the L2 Data Store RAMs which are controlled by - either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR. - From poweron (dc_ok), the EMA_CTL are driven from - FUSE[141:140]. However after the 1st CSR write to the - MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source - from the MIO_FUSE_EMA[EMA] register permanently - (until dc_ok). */ - uint64_t reserved_36_36 : 1; - uint64_t crip_128k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t crip_256k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] UNUSED (5020 uses single physical bank per quad) - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] UNUSED (5020 uses single physical bank per quad) - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_256k : 1; - uint64_t crip_128k : 1; - uint64_t reserved_36_36 : 1; - uint64_t ema_ctl : 3; - uint64_t reserved_40_63 : 24; -#endif - } cn52xx; - struct cvmx_l2d_fus3_cn52xx cn52xxp1; - struct cvmx_l2d_fus3_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ema_ctl : 3; /**< L2 Data Store EMA Control - These bits are used to 'observe' the EMA[2:0] inputs - for the L2 Data Store RAMs which are controlled by - either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR. - From poweron (dc_ok), the EMA_CTL are driven from - FUSE[141:140]. However after the 1st CSR write to the - MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source - from the MIO_FUSE_EMA[EMA] register permanently - (until dc_ok). - NOTE: O9N Addition */ - uint64_t reserved_36_36 : 1; - uint64_t crip_512k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t crip_1024k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_1024k : 1; - uint64_t crip_512k : 1; - uint64_t reserved_36_36 : 1; - uint64_t ema_ctl : 3; - uint64_t reserved_40_63 : 24; -#endif - } cn56xx; - struct cvmx_l2d_fus3_cn56xx cn56xxp1; - struct cvmx_l2d_fus3_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t ema_ctl : 2; /**< L2 Data Store EMA Control - These bits are used to 'observe' the EMA[1:0] inputs - for the L2 Data Store RAMs which are controlled by - either FUSES[141:140] or by MIO_FUSE_EMA[EMA] CSR. - From poweron (dc_ok), the EMA_CTL are driven from - FUSE[141:140]. However after the 1st CSR write to the - MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source - from the MIO_FUSE_EMA[EMA] register permanently - (until dc_ok). - NOTE: O9N Addition */ - uint64_t reserved_36_36 : 1; - uint64_t crip_512k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t crip_1024k : 1; /**< This is purely for debug and not needed in the general - manufacturing flow. - If the FUSE is not-blown, then this bit should read - as 0. If the FUSE is blown, then this bit should read - as 1. - *** NOTE: Pass2 Addition */ - uint64_t q3fus : 34; /**< Fuse Register for QUAD3 - This is purely for debug and not needed in the general - manufacturing flow. - Note that the fuses are complementary (Assigning a - fuse to 1 will read as a zero). This means the case - where no fuses are blown result in these csr's showing - all ones. - Failure \#1 Fuse Mapping - [16:14] bad bank - [13:7] bad high column - [6:0] bad low column - Failure \#2 Fuse Mapping - [33:31] bad bank - [30:24] bad high column - [23:17] bad low column */ -#else - uint64_t q3fus : 34; - uint64_t crip_1024k : 1; - uint64_t crip_512k : 1; - uint64_t reserved_36_36 : 1; - uint64_t ema_ctl : 2; - uint64_t reserved_39_63 : 25; -#endif - } cn58xx; - struct cvmx_l2d_fus3_cn58xx cn58xxp1; -} cvmx_l2d_fus3_t; - - -/** - * cvmx_l2t_err - * - * L2T_ERR = L2 Tag Errors - * - * Description: L2 Tag ECC SEC/DED Errors and Interrupt Enable - */ -typedef union -{ - uint64_t u64; - struct cvmx_l2t_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t fadru : 1; /**< Failing L2 Tag Upper Address Bit (Index[10]) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADRU contains the upper(MSB bit) cacheline index - into the L2 Tag Store. */ - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit - *** NOTE: PASS2 Addition */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. - *** NOTE: PASS2 Addition */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t fset : 3; /**< Failing L2 Tag Hit Set# (1-of-8) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t fadr : 10; /**< Failing L2 Tag Address (10-bit Index) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the lower 10bit cacheline index - into the L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 19-bit - L2 Tag Arrays [V,D,L,TAG[33:18]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 10; - uint64_t fset : 3; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t fadru : 1; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_l2t_err_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is - completed successfully, however the address is NOT - locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t reserved_23_23 : 1; - uint64_t fset : 2; /**< Failing L2 Tag Hit Set# (1-of-4) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t reserved_19_20 : 2; - uint64_t fadr : 8; /**< Failing L2 Tag Store Index (8-bit) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the 8bit cacheline index into the - L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 22-bit - L2 Tag Arrays [V,D,L,TAG[33:15]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 8; - uint64_t reserved_19_20 : 2; - uint64_t fset : 2; - uint64_t reserved_23_23 : 1; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn30xx; - struct cvmx_l2t_err_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t reserved_23_23 : 1; - uint64_t fset : 2; /**< Failing L2 Tag Hit Set# (1-of-4) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t reserved_20_20 : 1; - uint64_t fadr : 9; /**< Failing L2 Tag Address (9-bit Index) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the 9-bit cacheline index into the - L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 21-bit - L2 Tag Arrays [V,D,L,TAG[33:16]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 9; - uint64_t reserved_20_20 : 1; - uint64_t fset : 2; - uint64_t reserved_23_23 : 1; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn31xx; - struct cvmx_l2t_err_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit - *** NOTE: PASS2 Addition */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. - *** NOTE: PASS2 Addition */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t fset : 3; /**< Failing L2 Tag Hit Set# (1-of-8) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t fadr : 10; /**< Failing L2 Tag Address (10-bit Index) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the 10bit cacheline index into the - L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 20-bit - L2 Tag Arrays [V,D,L,TAG[33:17]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 10; - uint64_t fset : 3; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn38xx; - struct cvmx_l2t_err_cn38xx cn38xxp2; - struct cvmx_l2t_err_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t fset : 3; /**< Failing L2 Tag Hit Set# (1-of-8) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t reserved_18_20 : 3; - uint64_t fadr : 7; /**< Failing L2 Tag Address (7-bit Index) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the lower 7bit cacheline index - into the L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 23-bit - L2 Tag Arrays [V,D,L,TAG[33:14]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 7; - uint64_t reserved_18_20 : 3; - uint64_t fset : 3; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn50xx; - struct cvmx_l2t_err_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t lck_intena2 : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit */ - uint64_t lckerr2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n - could not find an available/unlocked set (for - replacement). - Most likely, this is a result of SW mixing SET - PARTITIONING with ADDRESS LOCKING. If SW allows - another PP to LOCKDOWN all SETs available to PP#n, - then a Rd/Wr Miss from PP#n will be unable - to determine a 'valid' replacement set (since LOCKED - addresses should NEVER be replaced). - If such an event occurs, the HW will select the smallest - available SET(specified by UMSK'x)' as the replacement - set, and the address is unlocked. */ - uint64_t lck_intena : 1; /**< L2 Tag Lock Error Interrupt Enable bit */ - uint64_t lckerr : 1; /**< SW attempted to LOCK DOWN the last available set of - the INDEX (which is ignored by HW - but reported to SW). - The LDD(L1 load-miss) for the LOCK operation is completed - successfully, however the address is NOT locked. - NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*] - into account. For example, if diagnostic PPx has - UMSKx defined to only use SETs [1:0], and SET1 had - been previously LOCKED, then an attempt to LOCK the - last available SET0 would result in a LCKERR. (This - is to ensure that at least 1 SET at each INDEX is - not LOCKED for general use by other PPs). */ - uint64_t fset : 3; /**< Failing L2 Tag Hit Set# (1-of-8) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and - (FSYN != 0), the FSET specifies the failing hit-set. - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set - is specified by the L2C_DBG[SET]. */ - uint64_t reserved_20_20 : 1; - uint64_t fadr : 9; /**< Failing L2 Tag Address (9-bit Index) - When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the FADR contains the lower 9bit cacheline index - into the L2 Tag Store. */ - uint64_t fsyn : 6; /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set, - the contents of this register contain the 6-bit - syndrome for the hit set only. - If (FSYN = 0), the SBE or DBE reported was for one of - the "non-hit" sets at the failing index(FADR). - NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set - is specified by the L2C_DBG[SET]. - If (FSYN != 0), the SBE or DBE reported was for the - hit set at the failing index(FADR) and failing - set(FSET). - SW NOTE: To determine which "non-hit" set was in error, - SW can use the L2C_DBG[L2T] debug feature to explicitly - read the other sets at the failing index(FADR). When - (FSYN !=0), then the FSET contains the failing hit-set. - NOTE: A DED Error will always overwrite a SEC Error - SYNDROME and FADR). */ - uint64_t ded_err : 1; /**< L2T Double Bit Error detected (DED) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for double bit errors(DBEs). - This bit is set if ANY of the 8 sets contains a DBE. - DBEs also generated an interrupt(if enabled). */ - uint64_t sec_err : 1; /**< L2T Single Bit Error corrected (SEC) - During every L2 Tag Probe, all 8 sets Tag's (at a - given index) are checked for single bit errors(SBEs). - This bit is set if ANY of the 8 sets contains an SBE. - SBEs are auto corrected in HW and generate an - interrupt(if enabled). */ - uint64_t ded_intena : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt - Enable bit. When set, allows interrupts to be - reported on double bit (uncorrectable) errors from - the L2 Tag Arrays. */ - uint64_t sec_intena : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt - Enable bit. When set, allows interrupts to be - reported on single bit (correctable) errors from - the L2 Tag Arrays. */ - uint64_t ecc_ena : 1; /**< L2 Tag ECC Enable - When set, enables 6-bit SEC/DED codeword for 21-bit - L2 Tag Arrays [V,D,L,TAG[33:16]] */ -#else - uint64_t ecc_ena : 1; - uint64_t sec_intena : 1; - uint64_t ded_intena : 1; - uint64_t sec_err : 1; - uint64_t ded_err : 1; - uint64_t fsyn : 6; - uint64_t fadr : 9; - uint64_t reserved_20_20 : 1; - uint64_t fset : 3; - uint64_t lckerr : 1; - uint64_t lck_intena : 1; - uint64_t lckerr2 : 1; - uint64_t lck_intena2 : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn52xx; - struct cvmx_l2t_err_cn52xx cn52xxp1; - struct cvmx_l2t_err_s cn56xx; - struct cvmx_l2t_err_s cn56xxp1; - struct cvmx_l2t_err_s cn58xx; - struct cvmx_l2t_err_s cn58xxp1; -} cvmx_l2t_err_t; - - -/** - * cvmx_led_blink - * - * LED_BLINK = LED Blink Rate (in led_clks) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_blink_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rate : 8; /**< LED Blink rate in led_latch clks - RATE must be > 0 */ -#else - uint64_t rate : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_led_blink_s cn38xx; - struct cvmx_led_blink_s cn38xxp2; - struct cvmx_led_blink_s cn56xx; - struct cvmx_led_blink_s cn56xxp1; - struct cvmx_led_blink_s cn58xx; - struct cvmx_led_blink_s cn58xxp1; -} cvmx_led_blink_t; - - -/** - * cvmx_led_clk_phase - * - * LED_CLK_PHASE = LED Clock Phase (in 64 eclks) - * - * - * Notes: - * Example: - * Given a 2ns eclk, an LED_CLK_PHASE[PHASE] = 1, indicates that each - * led_clk phase is 64 eclks, or 128ns. The led_clk period is 2*phase, - * or 256ns which is 3.9MHz. The default value of 4, yields an led_clk - * period of 64*4*2ns*2 = 1024ns or ~1MHz (977KHz). - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_clk_phase_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t phase : 7; /**< Number of 64 eclks in order to create the led_clk */ -#else - uint64_t phase : 7; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_led_clk_phase_s cn38xx; - struct cvmx_led_clk_phase_s cn38xxp2; - struct cvmx_led_clk_phase_s cn56xx; - struct cvmx_led_clk_phase_s cn56xxp1; - struct cvmx_led_clk_phase_s cn58xx; - struct cvmx_led_clk_phase_s cn58xxp1; -} cvmx_led_clk_phase_t; - - -/** - * cvmx_led_cylon - * - * LED_CYLON = LED CYLON Effect (should remain undocumented) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_cylon_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t rate : 16; /**< LED Cylon Effect when RATE!=0 - Changes at RATE*LATCH period */ -#else - uint64_t rate : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_led_cylon_s cn38xx; - struct cvmx_led_cylon_s cn38xxp2; - struct cvmx_led_cylon_s cn56xx; - struct cvmx_led_cylon_s cn56xxp1; - struct cvmx_led_cylon_s cn58xx; - struct cvmx_led_cylon_s cn58xxp1; -} cvmx_led_cylon_t; - - -/** - * cvmx_led_dbg - * - * LED_DBG = LED Debug Port information - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t dbg_en : 1; /**< Add Debug Port Data to the LED shift chain - Debug Data is shifted out LSB to MSB */ -#else - uint64_t dbg_en : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_led_dbg_s cn38xx; - struct cvmx_led_dbg_s cn38xxp2; - struct cvmx_led_dbg_s cn56xx; - struct cvmx_led_dbg_s cn56xxp1; - struct cvmx_led_dbg_s cn58xx; - struct cvmx_led_dbg_s cn58xxp1; -} cvmx_led_dbg_t; - - -/** - * cvmx_led_en - * - * LED_EN = LED Interface Enable - * - * - * Notes: - * The LED interface is comprised of a shift chain with a parallel latch. LED - * data is shifted out on each fallingg edge of led_clk and then captured by - * led_lat. - * - * The LED shift chain is comprised of the following... - * - * 32 - UDD header - * 6x8 - per port status - * 17 - debug port - * 32 - UDD trailer - * - * for a total of 129 bits. - * - * UDD header is programmable from 0-32 bits (LED_UDD_CNT0) and will shift out - * LSB to MSB (LED_UDD_DAT0[0], LED_UDD_DAT0[1], - * ... LED_UDD_DAT0[LED_UDD_CNT0]. - * - * The per port status is also variable. Systems can control which ports send - * data (LED_PRT) as well as the status content (LED_PRT_FMT and - * LED_PRT_STATUS*). When multiple ports are enabled, they come out in lowest - * port to highest port (prt0, prt1, ...). - * - * The debug port data can also be added to the LED chain (LED_DBG). When - * enabled, the debug data shifts out LSB to MSB. - * - * The UDD trailer data is identical to the header data, but uses LED_UDD_CNT1 - * and LED_UDD_DAT1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t en : 1; /**< Enable the LED interface shift-chain */ -#else - uint64_t en : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_led_en_s cn38xx; - struct cvmx_led_en_s cn38xxp2; - struct cvmx_led_en_s cn56xx; - struct cvmx_led_en_s cn56xxp1; - struct cvmx_led_en_s cn58xx; - struct cvmx_led_en_s cn58xxp1; -} cvmx_led_en_t; - - -/** - * cvmx_led_polarity - * - * LED_POLARITY = LED Polarity - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_polarity_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t polarity : 1; /**< LED active polarity - 0 = active HIGH LED - 1 = active LOW LED (invert led_dat) */ -#else - uint64_t polarity : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_led_polarity_s cn38xx; - struct cvmx_led_polarity_s cn38xxp2; - struct cvmx_led_polarity_s cn56xx; - struct cvmx_led_polarity_s cn56xxp1; - struct cvmx_led_polarity_s cn58xx; - struct cvmx_led_polarity_s cn58xxp1; -} cvmx_led_polarity_t; - - -/** - * cvmx_led_prt - * - * LED_PRT = LED Port status information - * - * - * Notes: - * Note: - * the PRT vector enables information of the 8 RGMII ports connected to - * Octane. It does not reflect the actual programmed PHY addresses. - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_prt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t prt_en : 8; /**< Which ports are enabled to display status - PRT_EN<3:0> coresponds to RGMII ports 3-0 on int0 - PRT_EN<7:4> coresponds to RGMII ports 7-4 on int1 - Only applies when interface is in RGMII mode - The status format is defined by LED_PRT_FMT */ -#else - uint64_t prt_en : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_led_prt_s cn38xx; - struct cvmx_led_prt_s cn38xxp2; - struct cvmx_led_prt_s cn56xx; - struct cvmx_led_prt_s cn56xxp1; - struct cvmx_led_prt_s cn58xx; - struct cvmx_led_prt_s cn58xxp1; -} cvmx_led_prt_t; - - -/** - * cvmx_led_prt_fmt - * - * LED_PRT_FMT = LED Port Status Infomation Format - * - * - * Notes: - * TX: RGMII TX block is sending packet data or extends on the port - * RX: RGMII RX block has received non-idle cycle - * - * For short transfers, LEDs will remain on for at least one blink cycle - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_prt_fmt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t format : 4; /**< Port Status Information for each enabled port in - LED_PRT. The formats are below - 0x0: [ LED_PRT_STATUS[0] ] - 0x1: [ LED_PRT_STATUS[1:0] ] - 0x2: [ LED_PRT_STATUS[3:0] ] - 0x3: [ LED_PRT_STATUS[5:0] ] - 0x4: [ (RX|TX), LED_PRT_STATUS[0] ] - 0x5: [ (RX|TX), LED_PRT_STATUS[1:0] ] - 0x6: [ (RX|TX), LED_PRT_STATUS[3:0] ] - 0x8: [ Tx, Rx, LED_PRT_STATUS[0] ] - 0x9: [ Tx, Rx, LED_PRT_STATUS[1:0] ] - 0xa: [ Tx, Rx, LED_PRT_STATUS[3:0] ] */ -#else - uint64_t format : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_led_prt_fmt_s cn38xx; - struct cvmx_led_prt_fmt_s cn38xxp2; - struct cvmx_led_prt_fmt_s cn56xx; - struct cvmx_led_prt_fmt_s cn56xxp1; - struct cvmx_led_prt_fmt_s cn58xx; - struct cvmx_led_prt_fmt_s cn58xxp1; -} cvmx_led_prt_fmt_t; - - -/** - * cvmx_led_prt_status# - * - * LED_PRT_STATUS = LED Port Status information - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_prt_statusx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t status : 6; /**< Bits that software can set to be added to the - LED shift chain - depending on LED_PRT_FMT - LED_PRT_STATUS(3..0) corespond to RGMII ports 3-0 - on interface0 - LED_PRT_STATUS(7..4) corespond to RGMII ports 7-4 - on interface1 - Only applies when interface is in RGMII mode */ -#else - uint64_t status : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_led_prt_statusx_s cn38xx; - struct cvmx_led_prt_statusx_s cn38xxp2; - struct cvmx_led_prt_statusx_s cn56xx; - struct cvmx_led_prt_statusx_s cn56xxp1; - struct cvmx_led_prt_statusx_s cn58xx; - struct cvmx_led_prt_statusx_s cn58xxp1; -} cvmx_led_prt_statusx_t; - - -/** - * cvmx_led_udd_cnt# - * - * LED_UDD_CNT = LED UDD Counts - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_udd_cntx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t cnt : 6; /**< Number of bits of user-defined data to include in - the LED shift chain. Legal values: 0-32. */ -#else - uint64_t cnt : 6; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_led_udd_cntx_s cn38xx; - struct cvmx_led_udd_cntx_s cn38xxp2; - struct cvmx_led_udd_cntx_s cn56xx; - struct cvmx_led_udd_cntx_s cn56xxp1; - struct cvmx_led_udd_cntx_s cn58xx; - struct cvmx_led_udd_cntx_s cn58xxp1; -} cvmx_led_udd_cntx_t; - - -/** - * cvmx_led_udd_dat# - * - * LED_UDD_DAT = User defined data (header or trailer) - * - * - * Notes: - * Bits come out LSB to MSB on the shift chain. If LED_UDD_CNT is set to 4 - * then the bits comes out LED_UDD_DAT[0], LED_UDD_DAT[1], LED_UDD_DAT[2], - * LED_UDD_DAT[3]. - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_udd_datx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dat : 32; /**< Header or trailer UDD data to be displayed on - the LED shift chain. Number of bits to include - is controled by LED_UDD_CNT */ -#else - uint64_t dat : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_led_udd_datx_s cn38xx; - struct cvmx_led_udd_datx_s cn38xxp2; - struct cvmx_led_udd_datx_s cn56xx; - struct cvmx_led_udd_datx_s cn56xxp1; - struct cvmx_led_udd_datx_s cn58xx; - struct cvmx_led_udd_datx_s cn58xxp1; -} cvmx_led_udd_datx_t; - - -/** - * cvmx_led_udd_dat_clr# - * - * LED_UDD_DAT_CLR = User defined data (header or trailer) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_udd_dat_clrx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t clr : 32; /**< Bitwise clear for the Header or trailer UDD data to - be displayed on the LED shift chain. */ -#else - uint64_t clr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_led_udd_dat_clrx_s cn38xx; - struct cvmx_led_udd_dat_clrx_s cn38xxp2; - struct cvmx_led_udd_dat_clrx_s cn56xx; - struct cvmx_led_udd_dat_clrx_s cn56xxp1; - struct cvmx_led_udd_dat_clrx_s cn58xx; - struct cvmx_led_udd_dat_clrx_s cn58xxp1; -} cvmx_led_udd_dat_clrx_t; - - -/** - * cvmx_led_udd_dat_set# - * - * LED_UDD_DAT_SET = User defined data (header or trailer) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_led_udd_dat_setx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t set : 32; /**< Bitwise set for the Header or trailer UDD data to - be displayed on the LED shift chain. */ -#else - uint64_t set : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_led_udd_dat_setx_s cn38xx; - struct cvmx_led_udd_dat_setx_s cn38xxp2; - struct cvmx_led_udd_dat_setx_s cn56xx; - struct cvmx_led_udd_dat_setx_s cn56xxp1; - struct cvmx_led_udd_dat_setx_s cn58xx; - struct cvmx_led_udd_dat_setx_s cn58xxp1; -} cvmx_led_udd_dat_setx_t; - - -/** - * cvmx_lmc#_bist_ctl - * - * Notes: - * This controls BiST only for the memories that operate on DCLK. The normal, chip-wide BiST flow - * controls BiST for the memories that operate on ECLK. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_bist_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t start : 1; /**< A 0->1 transition causes BiST to run. */ -#else - uint64_t start : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_lmcx_bist_ctl_s cn50xx; - struct cvmx_lmcx_bist_ctl_s cn52xx; - struct cvmx_lmcx_bist_ctl_s cn52xxp1; - struct cvmx_lmcx_bist_ctl_s cn56xx; - struct cvmx_lmcx_bist_ctl_s cn56xxp1; -} cvmx_lmcx_bist_ctl_t; - - -/** - * cvmx_lmc#_bist_result - * - * Notes: - * Access to the internal BiST results - * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_bist_result_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t csrd2e : 1; /**< BiST result of CSRD2E memory (0=pass, !0=fail) */ - uint64_t csre2d : 1; /**< BiST result of CSRE2D memory (0=pass, !0=fail) */ - uint64_t mwf : 1; /**< BiST result of MWF memories (0=pass, !0=fail) */ - uint64_t mwd : 3; /**< BiST result of MWD memories (0=pass, !0=fail) */ - uint64_t mwc : 1; /**< BiST result of MWC memories (0=pass, !0=fail) */ - uint64_t mrf : 1; /**< BiST result of MRF memories (0=pass, !0=fail) */ - uint64_t mrd : 3; /**< BiST result of MRD memories (0=pass, !0=fail) */ -#else - uint64_t mrd : 3; - uint64_t mrf : 1; - uint64_t mwc : 1; - uint64_t mwd : 3; - uint64_t mwf : 1; - uint64_t csre2d : 1; - uint64_t csrd2e : 1; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_lmcx_bist_result_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t mwf : 1; /**< BiST result of MWF memories (0=pass, !0=fail) */ - uint64_t mwd : 3; /**< BiST result of MWD memories (0=pass, !0=fail) */ - uint64_t mwc : 1; /**< BiST result of MWC memories (0=pass, !0=fail) */ - uint64_t mrf : 1; /**< BiST result of MRF memories (0=pass, !0=fail) */ - uint64_t mrd : 3; /**< BiST result of MRD memories (0=pass, !0=fail) */ -#else - uint64_t mrd : 3; - uint64_t mrf : 1; - uint64_t mwc : 1; - uint64_t mwd : 3; - uint64_t mwf : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn50xx; - struct cvmx_lmcx_bist_result_s cn52xx; - struct cvmx_lmcx_bist_result_s cn52xxp1; - struct cvmx_lmcx_bist_result_s cn56xx; - struct cvmx_lmcx_bist_result_s cn56xxp1; -} cvmx_lmcx_bist_result_t; - - -/** - * cvmx_lmc#_comp_ctl - * - * LMC_COMP_CTL = LMC Compensation control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_comp_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nctl_csr : 4; /**< Compensation control bits */ - uint64_t nctl_clk : 4; /**< Compensation control bits */ - uint64_t nctl_cmd : 4; /**< Compensation control bits */ - uint64_t nctl_dat : 4; /**< Compensation control bits */ - uint64_t pctl_csr : 4; /**< Compensation control bits */ - uint64_t pctl_clk : 4; /**< Compensation control bits */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t pctl_clk : 4; - uint64_t pctl_csr : 4; - uint64_t nctl_dat : 4; - uint64_t nctl_cmd : 4; - uint64_t nctl_clk : 4; - uint64_t nctl_csr : 4; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_comp_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nctl_csr : 4; /**< Compensation control bits */ - uint64_t nctl_clk : 4; /**< Compensation control bits */ - uint64_t nctl_cmd : 4; /**< Compensation control bits */ - uint64_t nctl_dat : 4; /**< Compensation control bits */ - uint64_t pctl_csr : 4; /**< Compensation control bits */ - uint64_t pctl_clk : 4; /**< Compensation control bits */ - uint64_t pctl_cmd : 4; /**< Compensation control bits */ - uint64_t pctl_dat : 4; /**< Compensation control bits */ -#else - uint64_t pctl_dat : 4; - uint64_t pctl_cmd : 4; - uint64_t pctl_clk : 4; - uint64_t pctl_csr : 4; - uint64_t nctl_dat : 4; - uint64_t nctl_cmd : 4; - uint64_t nctl_clk : 4; - uint64_t nctl_csr : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_lmcx_comp_ctl_cn30xx cn31xx; - struct cvmx_lmcx_comp_ctl_cn30xx cn38xx; - struct cvmx_lmcx_comp_ctl_cn30xx cn38xxp2; - struct cvmx_lmcx_comp_ctl_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nctl_csr : 4; /**< Compensation control bits */ - uint64_t reserved_20_27 : 8; - uint64_t nctl_dat : 4; /**< Compensation control bits */ - uint64_t pctl_csr : 4; /**< Compensation control bits */ - uint64_t reserved_5_11 : 7; - uint64_t pctl_dat : 5; /**< Compensation control bits */ -#else - uint64_t pctl_dat : 5; - uint64_t reserved_5_11 : 7; - uint64_t pctl_csr : 4; - uint64_t nctl_dat : 4; - uint64_t reserved_20_27 : 8; - uint64_t nctl_csr : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn50xx; - struct cvmx_lmcx_comp_ctl_cn50xx cn52xx; - struct cvmx_lmcx_comp_ctl_cn50xx cn52xxp1; - struct cvmx_lmcx_comp_ctl_cn50xx cn56xx; - struct cvmx_lmcx_comp_ctl_cn50xx cn56xxp1; - struct cvmx_lmcx_comp_ctl_cn50xx cn58xx; - struct cvmx_lmcx_comp_ctl_cn58xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nctl_csr : 4; /**< Compensation control bits */ - uint64_t reserved_20_27 : 8; - uint64_t nctl_dat : 4; /**< Compensation control bits */ - uint64_t pctl_csr : 4; /**< Compensation control bits */ - uint64_t reserved_4_11 : 8; - uint64_t pctl_dat : 4; /**< Compensation control bits */ -#else - uint64_t pctl_dat : 4; - uint64_t reserved_4_11 : 8; - uint64_t pctl_csr : 4; - uint64_t nctl_dat : 4; - uint64_t reserved_20_27 : 8; - uint64_t nctl_csr : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn58xxp1; -} cvmx_lmcx_comp_ctl_t; - - -/** - * cvmx_lmc#_ctl - * - * LMC_CTL = LMC Control - * This register is an assortment of various control fields needed by the memory controller - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< Should be cleared to zero */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t pll_div2 : 1; /**< PLL Div2. */ - uint64_t pll_bypass : 1; /**< PLL Bypass. */ - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< Reads as zero */ - uint64_t inorder_mrf : 1; /**< Always clear to zero */ - uint64_t reserved_10_11 : 2; - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks */ - uint64_t qs_dic : 2; /**< DDR2 Termination Resistor Setting - A non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the 4/8 ODT - pins (64/128b mode) based on what the masks - (LMC_WODT_CTL) are programmed to. - LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins - for READS. LMC_RODT_CTL needs to be programmed based - on the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. - 0 = Normal - 1 = Reduced - DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t reserved_10_11 : 2; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t pll_bypass : 1; - uint64_t pll_div2 : 1; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< 1=SCF has pass1 latency, 0=SCF has 1 cycle lower latency - when compared to pass1 */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t pll_div2 : 1; /**< PLL Div2. */ - uint64_t pll_bypass : 1; /**< PLL Bypass. */ - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< Reads as zero */ - uint64_t inorder_mrf : 1; /**< Always set to zero */ - uint64_t dreset : 1; /**< Dclk domain reset. The reset signal that is used by the - Dclk domain is (DRESET || ECLK_RESET). */ - uint64_t mode32b : 1; /**< 32b data Path Mode - Set to 1 if we use only 32 DQ pins - 0 for 16b DQ mode. */ - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks */ - uint64_t qs_dic : 2; /**< QS Drive Strength Control (DDR1): - & DDR2 Termination Resistor Setting - When in DDR2, a non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the 8 ODT - pins based on what the masks (LMC_WODT_CTL1 & 2) - are programmed to. LMC_DDR2_CTL->ODT_ENA - enables Octeon to drive ODT pins for READS. - LMC_RODT_CTL needs to be programmed based on - the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - For DDR-I/II Mode, DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. (see DDR-I data sheet EMRS - description) - 0 = Normal - 1 = Reduced - For DDR-II Mode, DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t mode32b : 1; - uint64_t dreset : 1; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t pll_bypass : 1; - uint64_t pll_div2 : 1; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_lmcx_ctl_cn30xx cn31xx; - struct cvmx_lmcx_ctl_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< 1=SCF has pass1 latency, 0=SCF has 1 cycle lower latency - when compared to pass1 - NOTE - This bit has NO effect in PASS1 */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t reserved_16_17 : 2; - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< When set, forces LMC_MWF (writes) into strict, in-order - mode. When clear, writes may be serviced out of order - (optimized to keep multiple banks active). - This bit is ONLY to be set at power-on and - should not be set for normal use. - NOTE: For PASS1, set as follows: - DDR-I -> 1 - DDR-II -> 0 - For Pass2, this bit is RA0, write ignore (this feature - is permanently disabled) */ - uint64_t inorder_mrf : 1; /**< When set, forces LMC_MRF (reads) into strict, in-order - mode. When clear, reads may be serviced out of order - (optimized to keep multiple banks active). - This bit is ONLY to be set at power-on and - should not be set for normal use. - NOTE: For PASS1, set as follows: - DDR-I -> 1 - DDR-II -> 0 - For Pass2, this bit should be written ZERO for - DDR I & II */ - uint64_t set_zero : 1; /**< Reserved. Always Set this Bit to Zero */ - uint64_t mode128b : 1; /**< 128b data Path Mode - Set to 1 if we use all 128 DQ pins - 0 for 64b DQ mode. */ - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks */ - uint64_t qs_dic : 2; /**< QS Drive Strength Control (DDR1): - & DDR2 Termination Resistor Setting - When in DDR2, a non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the 4/8 ODT - pins (64/128b mode) based on what the masks - (LMC_WODT_CTL) are programmed to. - LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins - for READS. LMC_RODT_CTL needs to be programmed based - on the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - For DDR-I/II Mode, DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. (see DDR-I data sheet EMRS - description) - 0 = Normal - 1 = Reduced - For DDR-II Mode, DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t mode128b : 1; - uint64_t set_zero : 1; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t reserved_16_17 : 2; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_lmcx_ctl_cn38xx cn38xxp2; - struct cvmx_lmcx_ctl_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< Should be cleared to zero */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t reserved_17_17 : 1; - uint64_t pll_bypass : 1; /**< PLL Bypass. */ - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< Reads as zero */ - uint64_t inorder_mrf : 1; /**< Always clear to zero */ - uint64_t dreset : 1; /**< Dclk domain reset. The reset signal that is used by the - Dclk domain is (DRESET || ECLK_RESET). */ - uint64_t mode32b : 1; /**< 32b data Path Mode - Set to 1 if we use 32 DQ pins - 0 for 16b DQ mode. */ - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks */ - uint64_t qs_dic : 2; /**< DDR2 Termination Resistor Setting - When in DDR2, a non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the ODT - pins based on what the masks - (LMC_WODT_CTL) are programmed to. - LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins - for READS. LMC_RODT_CTL needs to be programmed based - on the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. - 0 = Normal - 1 = Reduced - DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t mode32b : 1; - uint64_t dreset : 1; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t pll_bypass : 1; - uint64_t reserved_17_17 : 1; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn50xx; - struct cvmx_lmcx_ctl_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< Always clear to zero */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t reserved_16_17 : 2; - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< Reads as zero */ - uint64_t inorder_mrf : 1; /**< Always set to zero */ - uint64_t dreset : 1; /**< MBZ - THIS IS OBSOLETE. Use LMC_DLL_CTL[DRESET] instead. */ - uint64_t mode32b : 1; /**< 32b data Path Mode - Set to 1 if we use only 32 DQ pins - 0 for 64b DQ mode. */ - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. - THIS IS OBSOLETE. Use READ_LEVEL_RANK instead. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks - THIS IS OBSOLETE. Use READ_LEVEL_RANK instead. */ - uint64_t qs_dic : 2; /**< DDR2 Termination Resistor Setting - When in DDR2, a non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the 4/8 ODT - pins (64/128b mode) based on what the masks - (LMC_WODT_CTL0 & 1) are programmed to. - LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins - for READS. LMC_RODT_CTL needs to be programmed based - on the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. - 0 = Normal - 1 = Reduced - DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t mode32b : 1; - uint64_t dreset : 1; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t reserved_16_17 : 2; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn52xx; - struct cvmx_lmcx_ctl_cn52xx cn52xxp1; - struct cvmx_lmcx_ctl_cn52xx cn56xx; - struct cvmx_lmcx_ctl_cn52xx cn56xxp1; - struct cvmx_lmcx_ctl_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 4; /**< DDR nctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pulldns. */ - uint64_t ddr__pctl : 4; /**< DDR pctl from compensation circuit - The encoded value on this will adjust the drive strength - of the DDR DQ pullup. */ - uint64_t slow_scf : 1; /**< Should be cleared to zero */ - uint64_t xor_bank : 1; /**< If (XOR_BANK == 1), then - bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5] - else - bank[n:0]=address[n+7:7] - where n=1 for a 4 bank part and n=2 for an 8 bank part */ - uint64_t max_write_batch : 4; /**< Maximum number of consecutive writes to service before - allowing reads to interrupt. */ - uint64_t reserved_16_17 : 2; - uint64_t rdimm_ena : 1; /**< Registered DIMM Enable - When set allows the use - of JEDEC Registered DIMMs which require Write - data to be registered in the controller. */ - uint64_t r2r_slot : 1; /**< R2R Slot Enable: When set, all read-to-read trans - will slot an additional 1 cycle data bus bubble to - avoid DQ/DQS bus contention. This is only a CYA bit, - in case the "built-in" DIMM and RANK crossing logic - which should auto-detect and perfectly slot - read-to-reads to the same DIMM/RANK. */ - uint64_t inorder_mwf : 1; /**< Reads as zero */ - uint64_t inorder_mrf : 1; /**< Always clear to zero */ - uint64_t dreset : 1; /**< Dclk domain reset. The reset signal that is used by the - Dclk domain is (DRESET || ECLK_RESET). */ - uint64_t mode128b : 1; /**< 128b data Path Mode - Set to 1 if we use all 128 DQ pins - 0 for 64b DQ mode. */ - uint64_t fprch2 : 1; /**< Front Porch Enable: When set, the turn-off - time for the DDR_DQ/DQS drivers is 1 dclk earlier. - This bit should typically be set. */ - uint64_t bprch : 1; /**< Back Porch Enable: When set, the turn-on time for - the DDR_DQ/DQS drivers is delayed an additional DCLK - cycle. This should be set to one whenever both SILO_HC - and SILO_QC are set. */ - uint64_t sil_lat : 2; /**< SILO Latency: On reads, determines how many additional - dclks to wait (on top of TCL+1+TSKW) before pulling - data out of the pad silos. - - 00: illegal - - 01: 1 dclks - - 10: 2 dclks - - 11: illegal - This should always be set to 1. */ - uint64_t tskw : 2; /**< This component is a representation of total BOARD - DELAY on DQ (used in the controller to determine the - R->W spacing to avoid DQS/DQ bus conflicts). Enter - the largest of the per byte Board delay - - 00: 0 dclk - - 01: 1 dclks - - 10: 2 dclks - - 11: 3 dclks */ - uint64_t qs_dic : 2; /**< DDR2 Termination Resistor Setting - A non Zero value in this register - enables the On Die Termination (ODT) in DDR parts. - These two bits are loaded into the RTT - portion of the EMRS register bits A6 & A2. If DDR2's - termination (for the memory's DQ/DQS/DM pads) is not - desired, set it to 00. If it is, chose between - 01 for 75 ohm and 10 for 150 ohm termination. - 00 = ODT Disabled - 01 = 75 ohm Termination - 10 = 150 ohm Termination - 11 = 50 ohm Termination - Octeon, on writes, by default, drives the 4/8 ODT - pins (64/128b mode) based on what the masks - (LMC_WODT_CTL) are programmed to. - LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins - for READS. LMC_RODT_CTL needs to be programmed based - on the system's needs for ODT. */ - uint64_t dic : 2; /**< Drive Strength Control: - DIC[0] is - loaded into the Extended Mode Register (EMRS) A1 bit - during initialization. - 0 = Normal - 1 = Reduced - DIC[1] is used to load into EMRS - bit 10 - DQSN Enable/Disable field. By default, we - program the DDR's to drive the DQSN also. Set it to - 1 if DQSN should be Hi-Z. - 0 - DQSN Enable - 1 - DQSN Disable */ -#else - uint64_t dic : 2; - uint64_t qs_dic : 2; - uint64_t tskw : 2; - uint64_t sil_lat : 2; - uint64_t bprch : 1; - uint64_t fprch2 : 1; - uint64_t mode128b : 1; - uint64_t dreset : 1; - uint64_t inorder_mrf : 1; - uint64_t inorder_mwf : 1; - uint64_t r2r_slot : 1; - uint64_t rdimm_ena : 1; - uint64_t reserved_16_17 : 2; - uint64_t max_write_batch : 4; - uint64_t xor_bank : 1; - uint64_t slow_scf : 1; - uint64_t ddr__pctl : 4; - uint64_t ddr__nctl : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn58xx; - struct cvmx_lmcx_ctl_cn58xx cn58xxp1; -} cvmx_lmcx_ctl_t; - - -/** - * cvmx_lmc#_ctl1 - * - * LMC_CTL1 = LMC Control1 - * This register is an assortment of various control fields needed by the memory controller - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ctl1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t ecc_adr : 1; /**< Include memory reference address in the ECC calculation - 0=disabled, 1=enabled */ - uint64_t forcewrite : 4; /**< Force the oldest outstanding write to complete after - having waited for 2^FORCEWRITE cycles. 0=disabled. */ - uint64_t idlepower : 3; /**< Enter power-down mode after the memory controller has - been idle for 2^(2+IDLEPOWER) cycles. 0=disabled. */ - uint64_t sequence : 3; /**< Instruction sequence that is run after a 0->1 transition - on LMC_MEM_CFG0[INIT_START]. - 0=DDR2 power-up/init, 1=read-leveling - 2=self-refresh entry, 3=self-refresh exit, - 4=power-down entry, 5=power-down exit, 6=7=illegal */ - uint64_t sil_mode : 1; /**< Read Silo mode. 0=envelope, 1=self-timed. */ - uint64_t dcc_enable : 1; /**< Duty Cycle Corrector Enable. - 0=disable, 1=enable - If the memory part does not support DCC, then this bit - must be set to 0. */ - uint64_t reserved_2_7 : 6; - uint64_t data_layout : 2; /**< Logical data layout per DQ byte lane: - In 32b mode, this setting has no effect and the data - layout DQ[35:0] is the following: - [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]] - In 16b mode, the DQ[35:0] layouts are the following: - 0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]] - 1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]] - 2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]] - where E means ecc, D means data, and 0 means unused - (ignored on reads and written as 0 on writes) */ -#else - uint64_t data_layout : 2; - uint64_t reserved_2_7 : 6; - uint64_t dcc_enable : 1; - uint64_t sil_mode : 1; - uint64_t sequence : 3; - uint64_t idlepower : 3; - uint64_t forcewrite : 4; - uint64_t ecc_adr : 1; - uint64_t reserved_21_63 : 43; -#endif - } s; - struct cvmx_lmcx_ctl1_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t data_layout : 2; /**< Logical data layout per DQ byte lane: - In 32b mode, this setting has no effect and the data - layout DQ[35:0] is the following: - [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]] - In 16b mode, the DQ[35:0] layouts are the following: - 0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]] - 1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]] - 2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]] - where E means ecc, D means data, and 0 means unused - (ignored on reads and written as 0 on writes) */ -#else - uint64_t data_layout : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn30xx; - struct cvmx_lmcx_ctl1_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t sil_mode : 1; /**< Read Silo mode. 0=envelope, 1=self-timed. */ - uint64_t dcc_enable : 1; /**< Duty Cycle Corrector Enable. - 0=disable, 1=enable - If the memory part does not support DCC, then this bit - must be set to 0. */ - uint64_t reserved_2_7 : 6; - uint64_t data_layout : 2; /**< Logical data layout per DQ byte lane: - In 32b mode, this setting has no effect and the data - layout DQ[35:0] is the following: - [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]] - In 16b mode, the DQ[35:0] layouts are the following: - 0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]] - 1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]] - 2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]] - where E means ecc, D means data, and 0 means unused - (ignored on reads and written as 0 on writes) */ -#else - uint64_t data_layout : 2; - uint64_t reserved_2_7 : 6; - uint64_t dcc_enable : 1; - uint64_t sil_mode : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn50xx; - struct cvmx_lmcx_ctl1_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t ecc_adr : 1; /**< Include memory reference address in the ECC calculation - 0=disabled, 1=enabled */ - uint64_t forcewrite : 4; /**< Force the oldest outstanding write to complete after - having waited for 2^FORCEWRITE cycles. 0=disabled. */ - uint64_t idlepower : 3; /**< Enter power-down mode after the memory controller has - been idle for 2^(2+IDLEPOWER) cycles. 0=disabled. */ - uint64_t sequence : 3; /**< Instruction sequence that is run after a 0->1 transition - on LMC_MEM_CFG0[INIT_START]. - 0=DDR2 power-up/init, 1=read-leveling - 2=self-refresh entry, 3=self-refresh exit, - 4=power-down entry, 5=power-down exit, 6=7=illegal */ - uint64_t sil_mode : 1; /**< Read Silo mode. 0=envelope, 1=self-timed. */ - uint64_t dcc_enable : 1; /**< Duty Cycle Corrector Enable. - 0=disable, 1=enable - If the memory part does not support DCC, then this bit - must be set to 0. */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t dcc_enable : 1; - uint64_t sil_mode : 1; - uint64_t sequence : 3; - uint64_t idlepower : 3; - uint64_t forcewrite : 4; - uint64_t ecc_adr : 1; - uint64_t reserved_21_63 : 43; -#endif - } cn52xx; - struct cvmx_lmcx_ctl1_cn52xx cn52xxp1; - struct cvmx_lmcx_ctl1_cn52xx cn56xx; - struct cvmx_lmcx_ctl1_cn52xx cn56xxp1; - struct cvmx_lmcx_ctl1_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t sil_mode : 1; /**< Read Silo mode. 0=envelope, 1=self-timed. */ - uint64_t dcc_enable : 1; /**< Duty Cycle Corrector Enable. - 0=disable, 1=enable - If the memory part does not support DCC, then this bit - must be set to 0. */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t dcc_enable : 1; - uint64_t sil_mode : 1; - uint64_t reserved_10_63 : 54; -#endif - } cn58xx; - struct cvmx_lmcx_ctl1_cn58xx cn58xxp1; -} cvmx_lmcx_ctl1_t; - - -/** - * cvmx_lmc#_dclk_cnt_hi - * - * LMC_DCLK_CNT_HI = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_dclk_cnt_hi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dclkcnt_hi : 32; /**< Performance Counter that counts dclks - Upper 32-bits of a 64-bit counter. */ -#else - uint64_t dclkcnt_hi : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_dclk_cnt_hi_s cn30xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn31xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn38xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn38xxp2; - struct cvmx_lmcx_dclk_cnt_hi_s cn50xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn52xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn52xxp1; - struct cvmx_lmcx_dclk_cnt_hi_s cn56xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn56xxp1; - struct cvmx_lmcx_dclk_cnt_hi_s cn58xx; - struct cvmx_lmcx_dclk_cnt_hi_s cn58xxp1; -} cvmx_lmcx_dclk_cnt_hi_t; - - -/** - * cvmx_lmc#_dclk_cnt_lo - * - * LMC_DCLK_CNT_LO = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_dclk_cnt_lo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dclkcnt_lo : 32; /**< Performance Counter that counts dclks - Lower 32-bits of a 64-bit counter. */ -#else - uint64_t dclkcnt_lo : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_dclk_cnt_lo_s cn30xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn31xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn38xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn38xxp2; - struct cvmx_lmcx_dclk_cnt_lo_s cn50xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn52xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn52xxp1; - struct cvmx_lmcx_dclk_cnt_lo_s cn56xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn56xxp1; - struct cvmx_lmcx_dclk_cnt_lo_s cn58xx; - struct cvmx_lmcx_dclk_cnt_lo_s cn58xxp1; -} cvmx_lmcx_dclk_cnt_lo_t; - - -/** - * cvmx_lmc#_dclk_ctl - * - * LMC_DCLK_CTL = LMC DCLK generation control - * - * - * Notes: - * This CSR is only relevant for LMC1. LMC0_DCLK_CTL is not used. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_dclk_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t off90_ena : 1; /**< 0=use global DCLK (i.e. the PLL) directly for LMC1 - 1=use the 90 degree DCLK DLL to offset LMC1 DCLK */ - uint64_t dclk90_byp : 1; /**< 0=90 degree DCLK DLL uses sampled delay from LMC0 - 1=90 degree DCLK DLL uses DCLK90_VLU - See DCLK90_VLU. */ - uint64_t dclk90_ld : 1; /**< The 90 degree DCLK DLL samples the delay setting - from LMC0's DLL when this field transitions 0->1 */ - uint64_t dclk90_vlu : 5; /**< Manual open-loop delay setting. - The LMC1 90 degree DCLK DLL uses DCLK90_VLU rather - than the delay setting sampled from LMC0 when - DCLK90_BYP=1. */ -#else - uint64_t dclk90_vlu : 5; - uint64_t dclk90_ld : 1; - uint64_t dclk90_byp : 1; - uint64_t off90_ena : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_lmcx_dclk_ctl_s cn56xx; - struct cvmx_lmcx_dclk_ctl_s cn56xxp1; -} cvmx_lmcx_dclk_ctl_t; - - -/** - * cvmx_lmc#_ddr2_ctl - * - * LMC_DDR2_CTL = LMC DDR2 & DLL Control Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ddr2_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bank8 : 1; /**< For 8 bank DDR2 parts - 1 - DDR2 parts have 8 internal banks (BA is 3 bits - wide). - 0 - DDR2 parts have 4 internal banks (BA is 2 bits - wide). */ - uint64_t burst8 : 1; /**< 8-burst mode. - 1 - DDR data transfer happens in burst of 8 - 0 - DDR data transfer happens in burst of 4 - BURST8 should be set when DDR2T is set - to minimize the command bandwidth loss. */ - uint64_t addlat : 3; /**< Additional Latency for posted CAS - When Posted CAS is on, this configures the additional - latency. This should be set to - 1 .. LMC_MEM_CFG1[TRCD]-2 - (Note the implication that posted CAS should not - be used when tRCD is two.) */ - uint64_t pocas : 1; /**< Enable the Posted CAS feature of DDR2. */ - uint64_t bwcnt : 1; /**< Bus utilization counter Clear. - Clears the LMC_OPS_CNT_*, LMC_IFB_CNT_*, and - LMC_DCLK_CNT_* registers. SW should first write this - field to a one, then write this field to a zero to - clear the CSR's. */ - uint64_t twr : 3; /**< DDR Write Recovery time (tWR). Last Wr Brst to Pre delay - This is not a direct encoding of the value. Its - programmed as below per DDR2 spec. The decimal number - on the right is RNDUP(tWR(ns) / tCYC(ns)) - TYP=15ns - - 000: RESERVED - - 001: 2 - - 010: 3 - - 011: 4 - - 100: 5 - - 101: 6 - - 110: 7 - - 111: 8 */ - uint64_t silo_hc : 1; /**< Delays the read sample window by a Half Cycle. */ - uint64_t ddr_eof : 4; /**< Early Fill Counter Init. - L2 needs to know a few cycle before a fill completes so - it can get its Control pipe started (for better overall - performance). This counter contains an init value which - is a function of Eclk/Dclk ratio to account for the - asynchronous boundary between L2 cache and the DRAM - controller. This init value will - determine when to safely let the L2 know that a fill - termination is coming up. - Set DDR_EOF according to the following rule: - eclkFreq/dclkFreq = dclkPeriod/eclkPeriod = RATIO - RATIO < 6/6 -> illegal - 6/6 <= RATIO < 6/5 -> DDR_EOF=3 - 6/5 <= RATIO < 6/4 -> DDR_EOF=3 - 6/4 <= RATIO < 6/3 -> DDR_EOF=2 - 6/3 <= RATIO < 6/2 -> DDR_EOF=1 - 6/2 <= RATIO < 6/1 -> DDR_EOF=0 - 6/1 <= RATIO -> DDR_EOF=0 */ - uint64_t tfaw : 5; /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1 - Four Access Window time. Relevant only in DDR2 AND in - 8-bank parts. - tFAW = 5'b0 in DDR2-4bank - tFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1 - in DDR2-8bank */ - uint64_t crip_mode : 1; /**< Cripple Mode - When set, the LMC allows only - 1 inflight transaction (.vs. 8 in normal mode). - This bit is ONLY to be set at power-on and - should not be set for normal use. */ - uint64_t ddr2t : 1; /**< Turn on the DDR 2T mode. 2 cycle window for CMD and - address. This mode helps relieve setup time pressure - on the Address and command bus which nominally have - a very large fanout. Please refer to Micron's tech - note tn_47_01 titled "DDR2-533 Memory Design Guide - for Two Dimm Unbuffered Systems" for physical details. - BURST8 should be set when DDR2T is set to minimize - add/cmd loss. */ - uint64_t odt_ena : 1; /**< Enable Obsolete ODT on Reads - Obsolete Read ODT wiggles DDR_ODT_* pins on reads. - Should normally be cleared to zero. - When this is on, the following fields must also be - programmed: - LMC_CTL->QS_DIC - programs the termination value - LMC_RODT_CTL - programs the ODT I/O mask for Reads */ - uint64_t qdll_ena : 1; /**< DDR Quad DLL Enable: A 0->1 transition on this bit after - DCLK init sequence will reset the DDR 90 DLL. Should - happen at startup before any activity in DDR. - DRESET should be asserted before and for 10 usec - following the 0->1 transition on QDLL_ENA. */ - uint64_t dll90_vlu : 5; /**< Contains the open loop setting value for the DDR90 delay - line. */ - uint64_t dll90_byp : 1; /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be - bypassed and the setting is defined by DLL90_VLU */ - uint64_t rdqs : 1; /**< DDR2 RDQS mode. When set, configures memory subsystem to - use unidirectional DQS pins. RDQS/DM - Rcv & DQS - Xmit */ - uint64_t ddr2 : 1; /**< Should be set */ -#else - uint64_t ddr2 : 1; - uint64_t rdqs : 1; - uint64_t dll90_byp : 1; - uint64_t dll90_vlu : 5; - uint64_t qdll_ena : 1; - uint64_t odt_ena : 1; - uint64_t ddr2t : 1; - uint64_t crip_mode : 1; - uint64_t tfaw : 5; - uint64_t ddr_eof : 4; - uint64_t silo_hc : 1; - uint64_t twr : 3; - uint64_t bwcnt : 1; - uint64_t pocas : 1; - uint64_t addlat : 3; - uint64_t burst8 : 1; - uint64_t bank8 : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ddr2_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bank8 : 1; /**< For 8 bank DDR2 parts - 1 - DDR2 parts have 8 internal banks (BA is 3 bits - wide). - 0 - DDR2 parts have 4 internal banks (BA is 2 bits - wide). */ - uint64_t burst8 : 1; /**< 8-burst mode. - 1 - DDR data transfer happens in burst of 8 - 0 - DDR data transfer happens in burst of 4 - BURST8 should be set when DDR2T is set to minimize - add/cmd bandwidth loss. */ - uint64_t addlat : 3; /**< Additional Latency for posted CAS - When Posted CAS is on, this configures the additional - latency. This should be set to - 1 .. LMC_MEM_CFG1[TRCD]-2 - (Note the implication that posted CAS should not - be used when tRCD is two.) */ - uint64_t pocas : 1; /**< Enable the Posted CAS feature of DDR2. */ - uint64_t bwcnt : 1; /**< Bus utilization counter Clear. - Clears the LMC_OPS_CNT_*, LMC_IFB_CNT_*, and - LMC_DCLK_CNT_* registers. SW should first write this - field to a one, then write this field to a zero to - clear the CSR's. */ - uint64_t twr : 3; /**< DDR Write Recovery time (tWR). Last Wr Brst to Pre delay - This is not a direct encoding of the value. Its - programmed as below per DDR2 spec. The decimal number - on the right is RNDUP(tWR(ns) / tCYC(ns)) - TYP=15ns - - 000: RESERVED - - 001: 2 - - 010: 3 - - 011: 4 - - 100: 5 - - 101: 6 - - 110-111: RESERVED */ - uint64_t silo_hc : 1; /**< Delays the read sample window by a Half Cycle. */ - uint64_t ddr_eof : 4; /**< Early Fill Counter Init. - L2 needs to know a few cycle before a fill completes so - it can get its Control pipe started (for better overall - performance). This counter contains an init value which - is a function of Eclk/Dclk ratio to account for the - asynchronous boundary between L2 cache and the DRAM - controller. This init value will - determine when to safely let the L2 know that a fill - termination is coming up. - DDR_EOF = RNDUP (DCLK period/Eclk Period). If the ratio - is above 3, set DDR_EOF to 3. - DCLK/ECLK period DDR_EOF - Less than 1 1 - Less than 2 2 - More than 2 3 */ - uint64_t tfaw : 5; /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1 - Four Access Window time. Relevant only in - 8-bank parts. - TFAW = 5'b0 for DDR2-4bank - TFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1 in DDR2-8bank */ - uint64_t crip_mode : 1; /**< Cripple Mode - When set, the LMC allows only - 1 inflight transaction (.vs. 8 in normal mode). - This bit is ONLY to be set at power-on and - should not be set for normal use. */ - uint64_t ddr2t : 1; /**< Turn on the DDR 2T mode. 2 cycle window for CMD and - address. This mode helps relieve setup time pressure - on the Address and command bus which nominally have - a very large fanout. Please refer to Micron's tech - note tn_47_01 titled "DDR2-533 Memory Design Guide - for Two Dimm Unbuffered Systems" for physical details. - BURST8 should be used when DDR2T is set to minimize - add/cmd bandwidth loss. */ - uint64_t odt_ena : 1; /**< Enable ODT for DDR2 on Reads - When this is on, the following fields must also be - programmed: - LMC_CTL->QS_DIC - programs the termination value - LMC_RODT_CTL - programs the ODT I/O mask for writes - Program as 0 for DDR1 mode and ODT needs to be off - on Octeon Reads */ - uint64_t qdll_ena : 1; /**< DDR Quad DLL Enable: A 0->1 transition on this bit after - erst deassertion will reset the DDR 90 DLL. Should - happen at startup before any activity in DDR. */ - uint64_t dll90_vlu : 5; /**< Contains the open loop setting value for the DDR90 delay - line. */ - uint64_t dll90_byp : 1; /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be - bypassed and the setting is defined by DLL90_VLU */ - uint64_t reserved_1_1 : 1; - uint64_t ddr2 : 1; /**< DDR2 Enable: When set, configures memory subsystem for - DDR-II SDRAMs. */ -#else - uint64_t ddr2 : 1; - uint64_t reserved_1_1 : 1; - uint64_t dll90_byp : 1; - uint64_t dll90_vlu : 5; - uint64_t qdll_ena : 1; - uint64_t odt_ena : 1; - uint64_t ddr2t : 1; - uint64_t crip_mode : 1; - uint64_t tfaw : 5; - uint64_t ddr_eof : 4; - uint64_t silo_hc : 1; - uint64_t twr : 3; - uint64_t bwcnt : 1; - uint64_t pocas : 1; - uint64_t addlat : 3; - uint64_t burst8 : 1; - uint64_t bank8 : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_lmcx_ddr2_ctl_cn30xx cn31xx; - struct cvmx_lmcx_ddr2_ctl_s cn38xx; - struct cvmx_lmcx_ddr2_ctl_s cn38xxp2; - struct cvmx_lmcx_ddr2_ctl_s cn50xx; - struct cvmx_lmcx_ddr2_ctl_s cn52xx; - struct cvmx_lmcx_ddr2_ctl_s cn52xxp1; - struct cvmx_lmcx_ddr2_ctl_s cn56xx; - struct cvmx_lmcx_ddr2_ctl_s cn56xxp1; - struct cvmx_lmcx_ddr2_ctl_s cn58xx; - struct cvmx_lmcx_ddr2_ctl_s cn58xxp1; -} cvmx_lmcx_ddr2_ctl_t; - - -/** - * cvmx_lmc#_delay_cfg - * - * LMC_DELAY_CFG = Open-loop delay line settings - * - * - * Notes: - * The DQ bits add OUTGOING delay only to dq, dqs_[p,n], cb, cbs_[p,n], dqm. Delay is approximately - * 50-80ps per setting depending on process/voltage. There is no need to add incoming delay since by - * default all strobe bits are delayed internally by 90 degrees (as was always the case in previous - * passes and past chips. - * - * The CMD add delay to all command bits DDR_RAS, DDR_CAS, DDR_A<15:0>, DDR_BA<2:0>, DDR_n_CS<1:0>_L, - * DDR_WE, DDR_CKE and DDR_ODT_<7:0>. Again, delay is 50-80ps per tap. - * - * The CLK bits add delay to all clock signals DDR_CK_<5:0>_P and DDR_CK_<5:0>_N. Again, delay is - * 50-80ps per tap. - * - * The usage scenario is the following: There is too much delay on command signals and setup on command - * is not met. The user can then delay the clock until setup is met. - * - * At the same time though, dq/dqs should be delayed because there is also a DDR spec tying dqs with - * clock. If clock is too much delayed with respect to dqs, writes will start to fail. - * - * This scheme should eliminate the board need of adding routing delay to clock signals to make high - * frequencies work. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_delay_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t dq : 5; /**< Setting for DQ delay line */ - uint64_t cmd : 5; /**< Setting for CMD delay line */ - uint64_t clk : 5; /**< Setting for CLK delay line */ -#else - uint64_t clk : 5; - uint64_t cmd : 5; - uint64_t dq : 5; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_lmcx_delay_cfg_s cn30xx; - struct cvmx_lmcx_delay_cfg_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t dq : 4; /**< Setting for DQ delay line */ - uint64_t reserved_9_9 : 1; - uint64_t cmd : 4; /**< Setting for CMD delay line */ - uint64_t reserved_4_4 : 1; - uint64_t clk : 4; /**< Setting for CLK delay line */ -#else - uint64_t clk : 4; - uint64_t reserved_4_4 : 1; - uint64_t cmd : 4; - uint64_t reserved_9_9 : 1; - uint64_t dq : 4; - uint64_t reserved_14_63 : 50; -#endif - } cn38xx; - struct cvmx_lmcx_delay_cfg_cn38xx cn50xx; - struct cvmx_lmcx_delay_cfg_cn38xx cn52xx; - struct cvmx_lmcx_delay_cfg_cn38xx cn52xxp1; - struct cvmx_lmcx_delay_cfg_cn38xx cn56xx; - struct cvmx_lmcx_delay_cfg_cn38xx cn56xxp1; - struct cvmx_lmcx_delay_cfg_cn38xx cn58xx; - struct cvmx_lmcx_delay_cfg_cn38xx cn58xxp1; -} cvmx_lmcx_delay_cfg_t; - - -/** - * cvmx_lmc#_dll_ctl - * - * LMC_DLL_CTL = LMC DLL control and DCLK reset - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_dll_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dreset : 1; /**< Dclk domain reset. The reset signal that is used by the - Dclk domain is (DRESET || ECLK_RESET). */ - uint64_t dll90_byp : 1; /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be - bypassed and the setting is defined by DLL90_VLU */ - uint64_t dll90_ena : 1; /**< DDR Quad DLL Enable: A 0->1 transition on this bit after - DCLK init sequence resets the DDR 90 DLL. Should - happen at startup before any activity in DDR. QDLL_ENA - must not transition 1->0 outside of a DRESET sequence - (i.e. it must remain 1 until the next DRESET). - DRESET should be asserted before and for 10 usec - following the 0->1 transition on QDLL_ENA. */ - uint64_t dll90_vlu : 5; /**< Contains the open loop setting value for the DDR90 delay - line. */ -#else - uint64_t dll90_vlu : 5; - uint64_t dll90_ena : 1; - uint64_t dll90_byp : 1; - uint64_t dreset : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_lmcx_dll_ctl_s cn52xx; - struct cvmx_lmcx_dll_ctl_s cn52xxp1; - struct cvmx_lmcx_dll_ctl_s cn56xx; - struct cvmx_lmcx_dll_ctl_s cn56xxp1; -} cvmx_lmcx_dll_ctl_t; - - -/** - * cvmx_lmc#_dual_memcfg - * - * LMC_DUAL_MEMCFG = LMC Dual Memory Configuration Register - * - * This register controls certain parameters of Dual Memory Configuration - * - * Notes: - * This register enables the design to have two, separate memory configurations, selected dynamically - * by the reference address. Note however, that both configurations share LMC_CTL[MODE128b], - * LMC_CTL[XOR_BANK], LMC_MEM_CFG0[PBANK_LSB], LMC_MEM_CFG0[BUNK_ENA], and all timing parameters. - * In this description, "config0" refers to the normal memory configuration that is defined by the - * LMC_MEM_CFG0[ROW_LSB] andLMC_DDR2_CTL[BANK8] parameters and "config1" refers to the dual (or second) - * memory configuration that is defined by this register. - * - * Memory config0 must be programmed for the part with the most strict timing requirements. If a mix of - * 4 bank and 8 bank parts is used, then config0 must be used for the 8 bank part (because the timing - * requirements of tFAW and tRP are more strict for 8 bank parts than they are for 4 bank parts). - * - * Enable mask to chip select mapping is shown below: - * CS_MASK[7] -> DDR_3_CS_<1> - * CS_MASK[6] -> DDR_3_CS_<0> - * - * CS_MASK[5] -> DDR_2_CS_<1> - * CS_MASK[4] -> DDR_2_CS_<0> - * - * CS_MASK[3] -> DDR_1_CS_<1> - * CS_MASK[2] -> DDR_1_CS_<0> - * - * CS_MASK[1] -> DDR_0_CS_<1> - * CS_MASK[0] -> DDR_0_CS_<0> - * - * the DIMMS are arranged in one of the following arrangements: - * LMC_CTL[MODE128b] == 1 LMC_CTL[MODE128b] == 0 - * - * DIMM3_RANK1 | DIMM1_RANK1 highest address DIMM3_RANK1 highest addres - * DIMM3_RANK0 | DIMM1_RANK0 DIMM3_RANK0 - * - * DIMM2_RANK1 | DIMM0_RANK1 DIMM2_RANK1 - * DIMM2_RANK0 | DIMM0_RANK0 lowest address DIMM2_RANK0 - * - * data[127:64] | data_[63:0] DIMM1_RANK1 - * DIMM1_RANK0 - * - * DIMM0_RANK1 - * DIMM0_RANK0 lowest address - * - * data_[63:0] - * - * DIMM n uses the pair of chip selects DDR_n_CS_<1:0>. When LMC_CTL[BUNK_ENA] == 1, each - * chip select in the pair asserts independently. When LMC_CTL[BUNK_ENA] == 0, both chip - * selects in the pair assert together. - * - * Programming restrictions for CS_MASK: - * when LMC_CTL[BUNK_ENA] == 0, CS_MASK[2n + 1] = CS_MASK[2n], where 0 <= n <= 3 - * when LMC_CTL[MODE128b] == 1, CS_MASK[ n + 4] = CS_MASK[ n], where 0 <= n <= 3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_dual_memcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t bank8 : 1; /**< See LMC_DDR2_CTL[BANK8] */ - uint64_t row_lsb : 3; /**< See LMC_MEM_CFG0[ROW_LSB] */ - uint64_t reserved_8_15 : 8; - uint64_t cs_mask : 8; /**< Chip select mask. - This mask corresponds to the 8 chip selects for a memory - configuration. Each reference address will assert one of - the chip selects. If that chip select has its - corresponding CS_MASK bit set, then the "config1" - parameters are used, otherwise the "config0" parameters - are used. See additional notes below. */ -#else - uint64_t cs_mask : 8; - uint64_t reserved_8_15 : 8; - uint64_t row_lsb : 3; - uint64_t bank8 : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_lmcx_dual_memcfg_s cn50xx; - struct cvmx_lmcx_dual_memcfg_s cn52xx; - struct cvmx_lmcx_dual_memcfg_s cn52xxp1; - struct cvmx_lmcx_dual_memcfg_s cn56xx; - struct cvmx_lmcx_dual_memcfg_s cn56xxp1; - struct cvmx_lmcx_dual_memcfg_s cn58xx; - struct cvmx_lmcx_dual_memcfg_s cn58xxp1; -} cvmx_lmcx_dual_memcfg_t; - - -/** - * cvmx_lmc#_ecc_synd - * - * LMC_ECC_SYND = MRD ECC Syndromes - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ecc_synd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t mrdsyn3 : 8; /**< MRD ECC Syndrome Quad3 - 128b mode - corresponds to DQ[127:64], Phase1 - 64b mode - corresponds to DQ[127:64], Phase1, cycle1 */ - uint64_t mrdsyn2 : 8; /**< MRD ECC Syndrome Quad2 - 128b mode - corresponds to DQ[63:0], Phase1 - 64b mode - corresponds to DQ[63:0], Phase1, cycle0 */ - uint64_t mrdsyn1 : 8; /**< MRD ECC Syndrome Quad1 - 128b mode - corresponds to DQ[127:64], Phase0 - 64b mode - corresponds to DQ[127:64], Phase0, cycle1 */ - uint64_t mrdsyn0 : 8; /**< MRD ECC Syndrome Quad0 - In 128b mode, ecc is calulated on 1 cycle worth of data - SYND0 corresponds to DQ[63:0], Phase0 - In 64b mode, ecc is calculated on 2 cycle worth of data - SYND0 corresponds to DQ[63:0], Phase0, cycle0 */ -#else - uint64_t mrdsyn0 : 8; - uint64_t mrdsyn1 : 8; - uint64_t mrdsyn2 : 8; - uint64_t mrdsyn3 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ecc_synd_s cn30xx; - struct cvmx_lmcx_ecc_synd_s cn31xx; - struct cvmx_lmcx_ecc_synd_s cn38xx; - struct cvmx_lmcx_ecc_synd_s cn38xxp2; - struct cvmx_lmcx_ecc_synd_s cn50xx; - struct cvmx_lmcx_ecc_synd_s cn52xx; - struct cvmx_lmcx_ecc_synd_s cn52xxp1; - struct cvmx_lmcx_ecc_synd_s cn56xx; - struct cvmx_lmcx_ecc_synd_s cn56xxp1; - struct cvmx_lmcx_ecc_synd_s cn58xx; - struct cvmx_lmcx_ecc_synd_s cn58xxp1; -} cvmx_lmcx_ecc_synd_t; - - -/** - * cvmx_lmc#_fadr - * - * LMC_FADR = LMC Failing Address Register (SEC/DED) - * - * This register only captures the first transaction with ecc errors. A DBE error can - * over-write this register with its failing addresses. If you write - * LMC_MEM_CFG0->SEC_ERR/DED_ERR then it will clear the error bits and capture the - * next failing address. - * The phy mapping is a function of the num Col bits & \# row bits - * - * If failing dimm is 2 that means the error is in the higher bits dimm. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_fadr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t fdimm : 2; /**< Failing DIMM# */ - uint64_t fbunk : 1; /**< Failing Rank */ - uint64_t fbank : 3; /**< Failing Bank[2:0] */ - uint64_t frow : 14; /**< Failing Row Address[13:0] */ - uint64_t fcol : 12; /**< Failing Column Start Address[11:0] - Represents the Failing read's starting column address - (and not the exact column address in which the SEC/DED - was detected) */ -#else - uint64_t fcol : 12; - uint64_t frow : 14; - uint64_t fbank : 3; - uint64_t fbunk : 1; - uint64_t fdimm : 2; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_fadr_s cn30xx; - struct cvmx_lmcx_fadr_s cn31xx; - struct cvmx_lmcx_fadr_s cn38xx; - struct cvmx_lmcx_fadr_s cn38xxp2; - struct cvmx_lmcx_fadr_s cn50xx; - struct cvmx_lmcx_fadr_s cn52xx; - struct cvmx_lmcx_fadr_s cn52xxp1; - struct cvmx_lmcx_fadr_s cn56xx; - struct cvmx_lmcx_fadr_s cn56xxp1; - struct cvmx_lmcx_fadr_s cn58xx; - struct cvmx_lmcx_fadr_s cn58xxp1; -} cvmx_lmcx_fadr_t; - - -/** - * cvmx_lmc#_ifb_cnt_hi - * - * LMC_IFB_CNT_HI = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ifb_cnt_hi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ifbcnt_hi : 32; /**< Performance Counter to measure Bus Utilization - Upper 32-bits of 64-bit counter that increments every - cycle there is something in the in-flight buffer. */ -#else - uint64_t ifbcnt_hi : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ifb_cnt_hi_s cn30xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn31xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn38xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn38xxp2; - struct cvmx_lmcx_ifb_cnt_hi_s cn50xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn52xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn52xxp1; - struct cvmx_lmcx_ifb_cnt_hi_s cn56xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn56xxp1; - struct cvmx_lmcx_ifb_cnt_hi_s cn58xx; - struct cvmx_lmcx_ifb_cnt_hi_s cn58xxp1; -} cvmx_lmcx_ifb_cnt_hi_t; - - -/** - * cvmx_lmc#_ifb_cnt_lo - * - * LMC_IFB_CNT_LO = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ifb_cnt_lo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ifbcnt_lo : 32; /**< Performance Counter - Low 32-bits of 64-bit counter that increments every - cycle there is something in the in-flight buffer. */ -#else - uint64_t ifbcnt_lo : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ifb_cnt_lo_s cn30xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn31xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn38xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn38xxp2; - struct cvmx_lmcx_ifb_cnt_lo_s cn50xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn52xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn52xxp1; - struct cvmx_lmcx_ifb_cnt_lo_s cn56xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn56xxp1; - struct cvmx_lmcx_ifb_cnt_lo_s cn58xx; - struct cvmx_lmcx_ifb_cnt_lo_s cn58xxp1; -} cvmx_lmcx_ifb_cnt_lo_t; - - -/** - * cvmx_lmc#_mem_cfg0 - * - * Specify the RSL base addresses for the block - * - * LMC_MEM_CFG0 = LMC Memory Configuration Register0 - * - * This register controls certain parameters of Memory Configuration - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_mem_cfg0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t reset : 1; /**< Reset oneshot pulse for refresh counter, - and LMC_OPS_CNT_*, LMC_IFB_CNT_*, and LMC_DCLK_CNT_* - CSR's. SW should write this to a one, then re-write - it to a zero to cause the reset. */ - uint64_t silo_qc : 1; /**< Adds a Quarter Cycle granularity to generate - dqs pulse generation for silo. - Combination of Silo_HC and Silo_QC gives the - ability to position the read enable with quarter - cycle resolution. This is applied on all the bytes - uniformly. */ - uint64_t bunk_ena : 1; /**< Bunk Enable aka RANK ena (for use with dual-rank DIMMs) - For dual-rank DIMMs, the bunk_ena bit will enable - the drive of the CS_N[1:0] pins based on the - (pbank_lsb-1) address bit. - Write 0 for SINGLE ranked DIMM's. */ - uint64_t ded_err : 4; /**< Double Error detected (DED) of Rd Data - In 128b mode, ecc is calulated on 1 cycle worth of data - [25] corresponds to DQ[63:0], Phase0 - [26] corresponds to DQ[127:64], Phase0 - [27] corresponds to DQ[63:0], Phase1 - [28] corresponds to DQ[127:64], Phase1 - In 64b mode, ecc is calculated on 2 cycle worth of data - [25] corresponds to DQ[63:0], Phase0, cycle0 - [26] corresponds to DQ[63:0], Phase0, cycle1 - [27] corresponds to DQ[63:0], Phase1, cycle0 - [28] corresponds to DQ[63:0], Phase1, cycle1 - Write of 1 will clear the corresponding error bit */ - uint64_t sec_err : 4; /**< Single Error (corrected) of Rd Data - In 128b mode, ecc is calulated on 1 cycle worth of data - [21] corresponds to DQ[63:0], Phase0 - [22] corresponds to DQ[127:64], Phase0 - [23] corresponds to DQ[63:0], Phase1 - [24] corresponds to DQ[127:64], Phase1 - In 64b mode, ecc is calculated on 2 cycle worth of data - [21] corresponds to DQ[63:0], Phase0, cycle0 - [22] corresponds to DQ[63:0], Phase0, cycle1 - [23] corresponds to DQ[63:0], Phase1, cycle0 - [24] corresponds to DQ[63:0], Phase1, cycle1 - Write of 1 will clear the corresponding error bit */ - uint64_t intr_ded_ena : 1; /**< ECC Double Error Detect(DED) Interrupt Enable bit - When set, the memory controller raises a processor - interrupt on detecting an uncorrectable Dbl Bit ECC - error. */ - uint64_t intr_sec_ena : 1; /**< ECC Single Error Correct(SEC) Interrupt Enable bit - When set, the memory controller raises a processor - interrupt on detecting a correctable Single Bit ECC - error. */ - uint64_t tcl : 4; /**< This register is not used */ - uint64_t ref_int : 6; /**< Refresh interval represented in \#of 512 dclk increments. - Program this to RND-DN(tREFI/clkPeriod/512) - - 000000: RESERVED - - 000001: 1 * 512 = 512 dclks - - ... - - 111111: 63 * 512 = 32256 dclks */ - uint64_t pbank_lsb : 4; /**< Physical Bank address select - Reverting to the explanation for ROW_LSB, - PBank_LSB would be Row_LSB bit + \#rowbits - + \#rankbits - In the 512MB DIMM Example, assuming no rank bits: - pbank_lsb=mem_addr[15+13] for 64 b mode - =mem_addr[16+13] for 128b mode - Hence the parameter - 0000:pbank[1:0] = mem_adr[28:27] / rank = mem_adr[26] (if bunk_ena) - 0001:pbank[1:0] = mem_adr[29:28] / rank = mem_adr[27] " - 0010:pbank[1:0] = mem_adr[30:29] / rank = mem_adr[28] " - 0011:pbank[1:0] = mem_adr[31:30] / rank = mem_adr[29] " - 0100:pbank[1:0] = mem_adr[32:31] / rank = mem_adr[30] " - 0101:pbank[1:0] = mem_adr[33:32] / rank = mem_adr[31] " - 0110:pbank[1:0] =[1'b0,mem_adr[33]] / rank = mem_adr[32] " - 0111:pbank[1:0] =[2'b0] / rank = mem_adr[33] " - 1000-1111: RESERVED */ - uint64_t row_lsb : 3; /**< Encoding used to determine which memory address - bit position represents the low order DDR ROW address. - The processor's memory address[33:7] needs to be - translated to DRAM addresses (bnk,row,col,rank and dimm) - and that is a function of the following: - 1. \# Banks (4 or 8) - spec'd by BANK8 - 2. Datapath Width(64 or 128) - MODE128b - 3. \# Ranks in a DIMM - spec'd by BUNK_ENA - 4. \# DIMM's in the system - 5. \# Column Bits of the memory part - spec'd indirectly - by this register. - 6. \# Row Bits of the memory part - spec'd indirectly - by the register below (PBANK_LSB). - Illustration: For Micron's MT18HTF6472A,512MB DDR2 - Unbuffered DIMM which uses 256Mb parts (8M x 8 x 4), - \# Banks = 4 -> 2 bits of BA - \# Columns = 1K -> 10 bits of Col - \# Rows = 8K -> 13 bits of Row - Assuming that the total Data width is 128, this is how - we arrive at row_lsb: - Col Address starts from mem_addr[4] for 128b (16Bytes) - dq width or from mem_addr[3] for 64b (8Bytes) dq width - \# col + \# bank = 12. Hence row_lsb is mem_adr[15] for - 64bmode or mem_adr[16] for 128b mode. Hence row_lsb - parameter should be set to 001 (64b) or 010 (128b). - - 000: row_lsb = mem_adr[14] - - 001: row_lsb = mem_adr[15] - - 010: row_lsb = mem_adr[16] - - 011: row_lsb = mem_adr[17] - - 100: row_lsb = mem_adr[18] - - 101-111:row_lsb = RESERVED */ - uint64_t ecc_ena : 1; /**< ECC Enable: When set will enable the 8b ECC - check/correct logic. Should be 1 when used with DIMMs - with ECC. 0, otherwise. - When this mode is turned on, DQ[71:64] and DQ[143:137] - on writes, will contain the ECC code generated for - the lower 64 and upper 64 bits of data which will - written in the memory and then later on reads, used - to check for Single bit error (which will be auto- - corrected) and Double Bit error (which will be - reported). When not turned on, DQ[71:64] and DQ[143:137] - are driven to 0. Please refer to SEC_ERR, DED_ERR, - LMC_FADR, and LMC_ECC_SYND registers - for diagnostics information when there is an error. */ - uint64_t init_start : 1; /**< A 0->1 transition starts the DDR memory initialization - sequence. */ -#else - uint64_t init_start : 1; - uint64_t ecc_ena : 1; - uint64_t row_lsb : 3; - uint64_t pbank_lsb : 4; - uint64_t ref_int : 6; - uint64_t tcl : 4; - uint64_t intr_sec_ena : 1; - uint64_t intr_ded_ena : 1; - uint64_t sec_err : 4; - uint64_t ded_err : 4; - uint64_t bunk_ena : 1; - uint64_t silo_qc : 1; - uint64_t reset : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_mem_cfg0_s cn30xx; - struct cvmx_lmcx_mem_cfg0_s cn31xx; - struct cvmx_lmcx_mem_cfg0_s cn38xx; - struct cvmx_lmcx_mem_cfg0_s cn38xxp2; - struct cvmx_lmcx_mem_cfg0_s cn50xx; - struct cvmx_lmcx_mem_cfg0_s cn52xx; - struct cvmx_lmcx_mem_cfg0_s cn52xxp1; - struct cvmx_lmcx_mem_cfg0_s cn56xx; - struct cvmx_lmcx_mem_cfg0_s cn56xxp1; - struct cvmx_lmcx_mem_cfg0_s cn58xx; - struct cvmx_lmcx_mem_cfg0_s cn58xxp1; -} cvmx_lmcx_mem_cfg0_t; - - -/** - * cvmx_lmc#_mem_cfg1 - * - * LMC_MEM_CFG1 = LMC Memory Configuration Register1 - * - * This register controls the External Memory Configuration Timing Parameters. Please refer to the - * appropriate DDR part spec from your memory vendor for the various values in this CSR. - * The details of each of these timing parameters can be found in the JEDEC spec or the vendor - * spec of the memory parts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_mem_cfg1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t comp_bypass : 1; /**< Compensation bypass. */ - uint64_t trrd : 3; /**< tRRD cycles: ACT-ACT timing parameter for different - banks. (Represented in tCYC cycles == 1dclks) - TYP=15ns (66MHz=1,167MHz=3,200MHz=3) - For DDR2, TYP=7.5ns - - 000: RESERVED - - 001: 1 tCYC - - 010: 2 tCYC - - 011: 3 tCYC - - 100: 4 tCYC - - 101: 5 tCYC - - 110: 6 tCYC - - 111: 7 tCYC */ - uint64_t caslat : 3; /**< CAS Latency Encoding which is loaded into each DDR - SDRAM device (MRS[6:4]) upon power-up (INIT_START=1). - (Represented in tCYC cycles == 1 dclks) - 000 RESERVED - 001 RESERVED - 010 2.0 tCYC - 011 3.0 tCYC - 100 4.0 tCYC - 101 5.0 tCYC - 110 6.0 tCYC - 111 RESERVED - eg). The parameters TSKW, SILO_HC, and SILO_QC can - account for 1/4 cycle granularity in board/etch delays. */ - uint64_t tmrd : 3; /**< tMRD Cycles - (Represented in dclk tCYC) - For DDR2, its TYP 2*tCYC) - - 000: RESERVED - - 001: 1 - - 010: 2 - - 011: 3 - - 100: 4 - - 101-111: RESERVED */ - uint64_t trfc : 5; /**< 1/4 tRFC Cycles = RNDUP[tRFC(ns)/4*tcyc(ns)] - (Represented in tCYC cycles == 1dclks) - For 2Gb, DDR2-667 parts, typ=195ns - (TRFC = 195/3/4 = 5'd17 = 0x11) - - 00000-00001: RESERVED - - 00010: 8 - - 00011: 12 - - 00100: 16 - - ... - - 11110: 120 - - 11111: 124 */ - uint64_t trp : 4; /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1dclk) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP) - - 0000: RESERVED - - 0001: 1 - - ... - - 1001: 9 - - 1010-1111: RESERVED - When using parts with 8 banks (LMC_DDR2_CTL->BANK8 - is 1), load tRP cycles + 1 into this register. */ - uint64_t twtr : 4; /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)] - Last Wr Data to Rd Command time. - (Represented in tCYC cycles == 1dclks) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6, for TYP) - - 0000: RESERVED - - 0001: 1 - - ... - - 0111: 7 - - 1000-1111: RESERVED */ - uint64_t trcd : 4; /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1dclk) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP) - - 0000: RESERVED - - 0001: 2 (2 is the smallest value allowed) - - 0002: 2 - - ... - - 1001: 9 - - 1010-1111: RESERVED - In 2T mode, make this register TRCD-1, not going - below 2. */ - uint64_t tras : 5; /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1 dclk) - - 00000-0001: RESERVED - - 00010: 2 - - ... - - 11111: 31 */ -#else - uint64_t tras : 5; - uint64_t trcd : 4; - uint64_t twtr : 4; - uint64_t trp : 4; - uint64_t trfc : 5; - uint64_t tmrd : 3; - uint64_t caslat : 3; - uint64_t trrd : 3; - uint64_t comp_bypass : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_mem_cfg1_s cn30xx; - struct cvmx_lmcx_mem_cfg1_s cn31xx; - struct cvmx_lmcx_mem_cfg1_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t trrd : 3; /**< tRRD cycles: ACT-ACT timing parameter for different - banks. (Represented in tCYC cycles == 1dclks) - TYP=15ns (66MHz=1,167MHz=3,200MHz=3) - For DDR2, TYP=7.5ns - - 000: RESERVED - - 001: 1 tCYC - - 010: 2 tCYC - - 011: 3 tCYC - - 100: 4 tCYC - - 101: 5 tCYC - - 110-111: RESERVED */ - uint64_t caslat : 3; /**< CAS Latency Encoding which is loaded into each DDR - SDRAM device (MRS[6:4]) upon power-up (INIT_START=1). - (Represented in tCYC cycles == 1 dclks) - 000 RESERVED - 001 RESERVED - 010 2.0 tCYC - 011 3.0 tCYC - 100 4.0 tCYC - 101 5.0 tCYC - 110 6.0 tCYC (DDR2) - 2.5 tCYC (DDR1) - 111 RESERVED - eg). The parameters TSKW, SILO_HC, and SILO_QC can - account for 1/4 cycle granularity in board/etch delays. */ - uint64_t tmrd : 3; /**< tMRD Cycles - (Represented in dclk tCYC) - For DDR2, its TYP 2*tCYC) - - 000: RESERVED - - 001: 1 - - 010: 2 - - 011: 3 - - 100: 4 - - 101-111: RESERVED */ - uint64_t trfc : 5; /**< 1/4 tRFC Cycles = RNDUP[tRFC(ns)/4*tcyc(ns)] - (Represented in tCYC cycles == 1dclks) - For DDR-I, the following encodings are used - TYP=70ns (133MHz - 3; 333MHz - 6) - For 2Gb, DDR2-667 parts, typ=195ns - (TRFC = 195/3/4 = 5'd17 = 0x11) - - 00000-00001: RESERVED - - 00010: 8 - - 00011: 12 - - 00100: 16 - - ... - - 11110: 120 - - 11111: 124 */ - uint64_t trp : 4; /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1dclk) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP) - - 0000: RESERVED - - 0001: 1 - - ... - - 0111: 7 - - 1000-1111: RESERVED - When using parts with 8 banks (LMC_DDR2_CTL->BANK8 - is 1), load tRP cycles + 1 into this register. */ - uint64_t twtr : 4; /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)] - Last Wr Data to Rd Command time. - (Represented in tCYC cycles == 1dclks) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6, for TYP) - - 0000: RESERVED - - 0001: 1 - - ... - - 0111: 7 - - 1000-1111: RESERVED */ - uint64_t trcd : 4; /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1dclk) - TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP) - - 0000: RESERVED - - 0001: 2 (2 is the smallest value allowed) - - 0002: 2 - - ... - - 0111: 7 - - 1110-1111: RESERVED - In 2T mode, make this register TRCD-1, not going - below 2. */ - uint64_t tras : 5; /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)] - (Represented in tCYC cycles == 1 dclk) - For DDR-I mode: - TYP=45ns (66MHz=3,167MHz=8,400MHz=18 - - 00000-0001: RESERVED - - 00010: 2 - - ... - - 10100: 20 - - 10101-11111: RESERVED */ -#else - uint64_t tras : 5; - uint64_t trcd : 4; - uint64_t twtr : 4; - uint64_t trp : 4; - uint64_t trfc : 5; - uint64_t tmrd : 3; - uint64_t caslat : 3; - uint64_t trrd : 3; - uint64_t reserved_31_63 : 33; -#endif - } cn38xx; - struct cvmx_lmcx_mem_cfg1_cn38xx cn38xxp2; - struct cvmx_lmcx_mem_cfg1_s cn50xx; - struct cvmx_lmcx_mem_cfg1_cn38xx cn52xx; - struct cvmx_lmcx_mem_cfg1_cn38xx cn52xxp1; - struct cvmx_lmcx_mem_cfg1_cn38xx cn56xx; - struct cvmx_lmcx_mem_cfg1_cn38xx cn56xxp1; - struct cvmx_lmcx_mem_cfg1_cn38xx cn58xx; - struct cvmx_lmcx_mem_cfg1_cn38xx cn58xxp1; -} cvmx_lmcx_mem_cfg1_t; - - -/** - * cvmx_lmc#_nxm - * - * LMC_NXM = LMC non-existent memory - * - * - * Notes: - * This CSR was introduced in pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_nxm_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t cs_mask : 8; /**< Chip select mask. - This mask corresponds to the 8 chip selects for a memory - configuration. If LMC_MEM_CFG0[BUNK_ENA]==0 then this - mask must be set in pairs because each reference address - will assert a pair of chip selects. If the chip - select(s) have a corresponding CS_MASK bit set, then the - reference is to non-existent memory. LMC will alias the - reference to use the lowest, legal chip select(s) in - that case. */ -#else - uint64_t cs_mask : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_lmcx_nxm_s cn52xx; - struct cvmx_lmcx_nxm_s cn56xx; - struct cvmx_lmcx_nxm_s cn58xx; -} cvmx_lmcx_nxm_t; - - -/** - * cvmx_lmc#_ops_cnt_hi - * - * LMC_OPS_CNT_HI = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ops_cnt_hi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t opscnt_hi : 32; /**< Performance Counter to measure Bus Utilization - Upper 32-bits of 64-bit counter - DRAM bus utilization = LMC_OPS_CNT_* /LMC_DCLK_CNT_* */ -#else - uint64_t opscnt_hi : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ops_cnt_hi_s cn30xx; - struct cvmx_lmcx_ops_cnt_hi_s cn31xx; - struct cvmx_lmcx_ops_cnt_hi_s cn38xx; - struct cvmx_lmcx_ops_cnt_hi_s cn38xxp2; - struct cvmx_lmcx_ops_cnt_hi_s cn50xx; - struct cvmx_lmcx_ops_cnt_hi_s cn52xx; - struct cvmx_lmcx_ops_cnt_hi_s cn52xxp1; - struct cvmx_lmcx_ops_cnt_hi_s cn56xx; - struct cvmx_lmcx_ops_cnt_hi_s cn56xxp1; - struct cvmx_lmcx_ops_cnt_hi_s cn58xx; - struct cvmx_lmcx_ops_cnt_hi_s cn58xxp1; -} cvmx_lmcx_ops_cnt_hi_t; - - -/** - * cvmx_lmc#_ops_cnt_lo - * - * LMC_OPS_CNT_LO = Performance Counters - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_ops_cnt_lo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t opscnt_lo : 32; /**< Performance Counter - Low 32-bits of 64-bit counter - DRAM bus utilization = LMC_OPS_CNT_* /LMC_DCLK_CNT_* */ -#else - uint64_t opscnt_lo : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_ops_cnt_lo_s cn30xx; - struct cvmx_lmcx_ops_cnt_lo_s cn31xx; - struct cvmx_lmcx_ops_cnt_lo_s cn38xx; - struct cvmx_lmcx_ops_cnt_lo_s cn38xxp2; - struct cvmx_lmcx_ops_cnt_lo_s cn50xx; - struct cvmx_lmcx_ops_cnt_lo_s cn52xx; - struct cvmx_lmcx_ops_cnt_lo_s cn52xxp1; - struct cvmx_lmcx_ops_cnt_lo_s cn56xx; - struct cvmx_lmcx_ops_cnt_lo_s cn56xxp1; - struct cvmx_lmcx_ops_cnt_lo_s cn58xx; - struct cvmx_lmcx_ops_cnt_lo_s cn58xxp1; -} cvmx_lmcx_ops_cnt_lo_t; - - -/** - * cvmx_lmc#_pll_bwctl - * - * LMC_PLL_BWCTL = DDR PLL Bandwidth Control Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_pll_bwctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t bwupd : 1; /**< Load this Bandwidth Register value into the PLL */ - uint64_t bwctl : 4; /**< Bandwidth Control Register for DDR PLL */ -#else - uint64_t bwctl : 4; - uint64_t bwupd : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_lmcx_pll_bwctl_s cn30xx; - struct cvmx_lmcx_pll_bwctl_s cn31xx; - struct cvmx_lmcx_pll_bwctl_s cn38xx; - struct cvmx_lmcx_pll_bwctl_s cn38xxp2; -} cvmx_lmcx_pll_bwctl_t; - - -/** - * cvmx_lmc#_pll_ctl - * - * LMC_PLL_CTL = LMC pll control - * - * - * Notes: - * This CSR is only relevant for LMC0. LMC1_PLL_CTL is not used. - * - * Exactly one of EN2, EN4, EN6, EN8, EN12, EN16 must be set. - * - * The resultant DDR_CK frequency is the DDR2_REF_CLK - * frequency multiplied by: - * - * (CLKF + 1) / ((CLKR + 1) * EN(2,4,6,8,12,16)) - * - * The PLL frequency, which is: - * - * (DDR2_REF_CLK freq) * ((CLKF + 1) / (CLKR + 1)) - * - * must reside between 1.2 and 2.5 GHz. A faster PLL frequency is desirable if there is a choice. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_pll_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_30_63 : 34; - uint64_t bypass : 1; /**< PLL Bypass */ - uint64_t fasten_n : 1; /**< Should be set, especially when CLKF > ~80 */ - uint64_t div_reset : 1; /**< Analog pll divider reset - De-assert at least 500*(CLKR+1) reference clock - cycles following RESET_N de-assertion. */ - uint64_t reset_n : 1; /**< Analog pll reset - De-assert at least 5 usec after CLKF, CLKR, - and EN* are set up. */ - uint64_t clkf : 12; /**< Multiply reference by CLKF + 1 - CLKF must be <= 128 */ - uint64_t clkr : 6; /**< Divide reference by CLKR + 1 */ - uint64_t reserved_6_7 : 2; - uint64_t en16 : 1; /**< Divide output by 16 */ - uint64_t en12 : 1; /**< Divide output by 12 */ - uint64_t en8 : 1; /**< Divide output by 8 */ - uint64_t en6 : 1; /**< Divide output by 6 */ - uint64_t en4 : 1; /**< Divide output by 4 */ - uint64_t en2 : 1; /**< Divide output by 2 */ -#else - uint64_t en2 : 1; - uint64_t en4 : 1; - uint64_t en6 : 1; - uint64_t en8 : 1; - uint64_t en12 : 1; - uint64_t en16 : 1; - uint64_t reserved_6_7 : 2; - uint64_t clkr : 6; - uint64_t clkf : 12; - uint64_t reset_n : 1; - uint64_t div_reset : 1; - uint64_t fasten_n : 1; - uint64_t bypass : 1; - uint64_t reserved_30_63 : 34; -#endif - } s; - struct cvmx_lmcx_pll_ctl_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t fasten_n : 1; /**< Should be set, especially when CLKF > ~80 */ - uint64_t div_reset : 1; /**< Analog pll divider reset - De-assert at least 500*(CLKR+1) reference clock - cycles following RESET_N de-assertion. */ - uint64_t reset_n : 1; /**< Analog pll reset - De-assert at least 5 usec after CLKF, CLKR, - and EN* are set up. */ - uint64_t clkf : 12; /**< Multiply reference by CLKF + 1 - CLKF must be <= 256 */ - uint64_t clkr : 6; /**< Divide reference by CLKR + 1 */ - uint64_t reserved_6_7 : 2; - uint64_t en16 : 1; /**< Divide output by 16 */ - uint64_t en12 : 1; /**< Divide output by 12 */ - uint64_t en8 : 1; /**< Divide output by 8 */ - uint64_t en6 : 1; /**< Divide output by 6 */ - uint64_t en4 : 1; /**< Divide output by 4 */ - uint64_t en2 : 1; /**< Divide output by 2 */ -#else - uint64_t en2 : 1; - uint64_t en4 : 1; - uint64_t en6 : 1; - uint64_t en8 : 1; - uint64_t en12 : 1; - uint64_t en16 : 1; - uint64_t reserved_6_7 : 2; - uint64_t clkr : 6; - uint64_t clkf : 12; - uint64_t reset_n : 1; - uint64_t div_reset : 1; - uint64_t fasten_n : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn50xx; - struct cvmx_lmcx_pll_ctl_s cn52xx; - struct cvmx_lmcx_pll_ctl_s cn52xxp1; - struct cvmx_lmcx_pll_ctl_cn50xx cn56xx; - struct cvmx_lmcx_pll_ctl_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t div_reset : 1; /**< Analog pll divider reset - De-assert at least 500*(CLKR+1) reference clock - cycles following RESET_N de-assertion. */ - uint64_t reset_n : 1; /**< Analog pll reset - De-assert at least 5 usec after CLKF, CLKR, - and EN* are set up. */ - uint64_t clkf : 12; /**< Multiply reference by CLKF + 1 - CLKF must be <= 128 */ - uint64_t clkr : 6; /**< Divide reference by CLKR + 1 */ - uint64_t reserved_6_7 : 2; - uint64_t en16 : 1; /**< Divide output by 16 */ - uint64_t en12 : 1; /**< Divide output by 12 */ - uint64_t en8 : 1; /**< Divide output by 8 */ - uint64_t en6 : 1; /**< Divide output by 6 */ - uint64_t en4 : 1; /**< Divide output by 4 */ - uint64_t en2 : 1; /**< Divide output by 2 */ -#else - uint64_t en2 : 1; - uint64_t en4 : 1; - uint64_t en6 : 1; - uint64_t en8 : 1; - uint64_t en12 : 1; - uint64_t en16 : 1; - uint64_t reserved_6_7 : 2; - uint64_t clkr : 6; - uint64_t clkf : 12; - uint64_t reset_n : 1; - uint64_t div_reset : 1; - uint64_t reserved_28_63 : 36; -#endif - } cn56xxp1; - struct cvmx_lmcx_pll_ctl_cn56xxp1 cn58xx; - struct cvmx_lmcx_pll_ctl_cn56xxp1 cn58xxp1; -} cvmx_lmcx_pll_ctl_t; - - -/** - * cvmx_lmc#_pll_status - * - * LMC_PLL_STATUS = LMC pll status - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_pll_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ddr__nctl : 5; /**< DDR nctl from compensation circuit */ - uint64_t ddr__pctl : 5; /**< DDR pctl from compensation circuit */ - uint64_t reserved_2_21 : 20; - uint64_t rfslip : 1; /**< Reference clock slip */ - uint64_t fbslip : 1; /**< Feedback clock slip */ -#else - uint64_t fbslip : 1; - uint64_t rfslip : 1; - uint64_t reserved_2_21 : 20; - uint64_t ddr__pctl : 5; - uint64_t ddr__nctl : 5; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_pll_status_s cn50xx; - struct cvmx_lmcx_pll_status_s cn52xx; - struct cvmx_lmcx_pll_status_s cn52xxp1; - struct cvmx_lmcx_pll_status_s cn56xx; - struct cvmx_lmcx_pll_status_s cn56xxp1; - struct cvmx_lmcx_pll_status_s cn58xx; - struct cvmx_lmcx_pll_status_cn58xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t rfslip : 1; /**< Reference clock slip */ - uint64_t fbslip : 1; /**< Feedback clock slip */ -#else - uint64_t fbslip : 1; - uint64_t rfslip : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn58xxp1; -} cvmx_lmcx_pll_status_t; - - -/** - * cvmx_lmc#_read_level_ctl - * - * Notes: - * The HW writes and reads the cache block selected by ROW, COL, BNK and the rank as part of a read-leveling sequence for a rank. - * A cache block write is 16 72-bit words. PATTERN selects the write value. For the first 8 - * words, the write value is the bit PATTERN<i> duplicated into a 72-bit vector. The write value of - * the last 8 words is the inverse of the write value of the first 8 words. - * See LMC*_READ_LEVEL_RANK*. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_read_level_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t rankmask : 4; /**< Selects ranks to be leveled - to read-level rank i, set RANKMASK<i> */ - uint64_t pattern : 8; /**< All DQ driven to PATTERN[burst], 0 <= burst <= 7 - All DQ driven to ~PATTERN[burst-8], 8 <= burst <= 15 */ - uint64_t row : 16; /**< Row address used to write/read data pattern */ - uint64_t col : 12; /**< Column address used to write/read data pattern */ - uint64_t reserved_3_3 : 1; - uint64_t bnk : 3; /**< Bank address used to write/read data pattern */ -#else - uint64_t bnk : 3; - uint64_t reserved_3_3 : 1; - uint64_t col : 12; - uint64_t row : 16; - uint64_t pattern : 8; - uint64_t rankmask : 4; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_lmcx_read_level_ctl_s cn52xx; - struct cvmx_lmcx_read_level_ctl_s cn52xxp1; - struct cvmx_lmcx_read_level_ctl_s cn56xx; - struct cvmx_lmcx_read_level_ctl_s cn56xxp1; -} cvmx_lmcx_read_level_ctl_t; - - -/** - * cvmx_lmc#_read_level_dbg - * - * Notes: - * A given read of LMC*_READ_LEVEL_DBG returns the read-leveling pass/fail results for all possible - * delay settings (i.e. the BITMASK) for only one byte in the last rank that the HW read-leveled. - * LMC*_READ_LEVEL_DBG[BYTE] selects the particular byte. - * To get these pass/fail results for another different rank, you must run the hardware read-leveling - * again. For example, it is possible to get the BITMASK results for every byte of every rank - * if you run read-leveling separately for each rank, probing LMC*_READ_LEVEL_DBG between each - * read-leveling. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_read_level_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bitmask : 16; /**< Bitmask generated during deskew settings sweep - BITMASK[n]=0 means deskew setting n failed - BITMASK[n]=1 means deskew setting n passed - for 0 <= n <= 15 */ - uint64_t reserved_4_15 : 12; - uint64_t byte : 4; /**< 0 <= BYTE <= 8 */ -#else - uint64_t byte : 4; - uint64_t reserved_4_15 : 12; - uint64_t bitmask : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_read_level_dbg_s cn52xx; - struct cvmx_lmcx_read_level_dbg_s cn52xxp1; - struct cvmx_lmcx_read_level_dbg_s cn56xx; - struct cvmx_lmcx_read_level_dbg_s cn56xxp1; -} cvmx_lmcx_read_level_dbg_t; - - -/** - * cvmx_lmc#_read_level_rank# - * - * Notes: - * This is four CSRs per LMC, one per each rank. - * Each CSR is written by HW during a read-leveling sequence for the rank. (HW sets STATUS==3 after HW read-leveling completes for the rank.) - * Each CSR may also be written by SW, but not while a read-leveling sequence is in progress. (HW sets STATUS==1 after a CSR write.) - * Deskew setting is measured in units of 1/4 DCLK, so the above BYTE* values can range over 4 DCLKs. - * SW initiates a HW read-leveling sequence by programming LMC*_READ_LEVEL_CTL and writing INIT_START=1 with SEQUENCE=1. - * See LMC*_READ_LEVEL_CTL. - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_read_level_rankx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t status : 2; /**< Indicates status of the read-levelling and where - the BYTE* programmings in <35:0> came from: - 0 = BYTE* values are their reset value - 1 = BYTE* values were set via a CSR write to this register - 2 = read-leveling sequence currently in progress (BYTE* values are unpredictable) - 3 = BYTE* values came from a complete read-leveling sequence */ - uint64_t byte8 : 4; /**< Deskew setting */ - uint64_t byte7 : 4; /**< Deskew setting */ - uint64_t byte6 : 4; /**< Deskew setting */ - uint64_t byte5 : 4; /**< Deskew setting */ - uint64_t byte4 : 4; /**< Deskew setting */ - uint64_t byte3 : 4; /**< Deskew setting */ - uint64_t byte2 : 4; /**< Deskew setting */ - uint64_t byte1 : 4; /**< Deskew setting */ - uint64_t byte0 : 4; /**< Deskew setting */ -#else - uint64_t byte0 : 4; - uint64_t byte1 : 4; - uint64_t byte2 : 4; - uint64_t byte3 : 4; - uint64_t byte4 : 4; - uint64_t byte5 : 4; - uint64_t byte6 : 4; - uint64_t byte7 : 4; - uint64_t byte8 : 4; - uint64_t status : 2; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_lmcx_read_level_rankx_s cn52xx; - struct cvmx_lmcx_read_level_rankx_s cn52xxp1; - struct cvmx_lmcx_read_level_rankx_s cn56xx; - struct cvmx_lmcx_read_level_rankx_s cn56xxp1; -} cvmx_lmcx_read_level_rankx_t; - - -/** - * cvmx_lmc#_rodt_comp_ctl - * - * LMC_RODT_COMP_CTL = LMC Compensation control - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_rodt_comp_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t enable : 1; /**< 0=not enabled, 1=enable */ - uint64_t reserved_12_15 : 4; - uint64_t nctl : 4; /**< Compensation control bits */ - uint64_t reserved_5_7 : 3; - uint64_t pctl : 5; /**< Compensation control bits */ -#else - uint64_t pctl : 5; - uint64_t reserved_5_7 : 3; - uint64_t nctl : 4; - uint64_t reserved_12_15 : 4; - uint64_t enable : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_lmcx_rodt_comp_ctl_s cn50xx; - struct cvmx_lmcx_rodt_comp_ctl_s cn52xx; - struct cvmx_lmcx_rodt_comp_ctl_s cn52xxp1; - struct cvmx_lmcx_rodt_comp_ctl_s cn56xx; - struct cvmx_lmcx_rodt_comp_ctl_s cn56xxp1; - struct cvmx_lmcx_rodt_comp_ctl_s cn58xx; - struct cvmx_lmcx_rodt_comp_ctl_s cn58xxp1; -} cvmx_lmcx_rodt_comp_ctl_t; - - -/** - * cvmx_lmc#_rodt_ctl - * - * LMC_RODT_CTL = Obsolete LMC Read OnDieTermination control - * See the description in LMC_WODT_CTL1. On Reads, Octeon only supports turning on ODT's in - * the lower 2 DIMM's with the masks as below. - * - * Notes: - * When a given RANK in position N is selected, the RODT _HI and _LO masks for that position are used. - * Mask[3:0] is used for RODT control of the RANKs in positions 3, 2, 1, and 0, respectively. - * In 64b mode, DIMMs are assumed to be ordered in the following order: - * position 3: [unused , DIMM1_RANK1_LO] - * position 2: [unused , DIMM1_RANK0_LO] - * position 1: [unused , DIMM0_RANK1_LO] - * position 0: [unused , DIMM0_RANK0_LO] - * In 128b mode, DIMMs are assumed to be ordered in the following order: - * position 3: [DIMM3_RANK1_HI, DIMM1_RANK1_LO] - * position 2: [DIMM3_RANK0_HI, DIMM1_RANK0_LO] - * position 1: [DIMM2_RANK1_HI, DIMM0_RANK1_LO] - * position 0: [DIMM2_RANK0_HI, DIMM0_RANK0_LO] - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_rodt_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rodt_hi3 : 4; /**< Read ODT mask for position 3, data[127:64] */ - uint64_t rodt_hi2 : 4; /**< Read ODT mask for position 2, data[127:64] */ - uint64_t rodt_hi1 : 4; /**< Read ODT mask for position 1, data[127:64] */ - uint64_t rodt_hi0 : 4; /**< Read ODT mask for position 0, data[127:64] */ - uint64_t rodt_lo3 : 4; /**< Read ODT mask for position 3, data[ 63: 0] */ - uint64_t rodt_lo2 : 4; /**< Read ODT mask for position 2, data[ 63: 0] */ - uint64_t rodt_lo1 : 4; /**< Read ODT mask for position 1, data[ 63: 0] */ - uint64_t rodt_lo0 : 4; /**< Read ODT mask for position 0, data[ 63: 0] */ -#else - uint64_t rodt_lo0 : 4; - uint64_t rodt_lo1 : 4; - uint64_t rodt_lo2 : 4; - uint64_t rodt_lo3 : 4; - uint64_t rodt_hi0 : 4; - uint64_t rodt_hi1 : 4; - uint64_t rodt_hi2 : 4; - uint64_t rodt_hi3 : 4; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_rodt_ctl_s cn30xx; - struct cvmx_lmcx_rodt_ctl_s cn31xx; - struct cvmx_lmcx_rodt_ctl_s cn38xx; - struct cvmx_lmcx_rodt_ctl_s cn38xxp2; - struct cvmx_lmcx_rodt_ctl_s cn50xx; - struct cvmx_lmcx_rodt_ctl_s cn52xx; - struct cvmx_lmcx_rodt_ctl_s cn52xxp1; - struct cvmx_lmcx_rodt_ctl_s cn56xx; - struct cvmx_lmcx_rodt_ctl_s cn56xxp1; - struct cvmx_lmcx_rodt_ctl_s cn58xx; - struct cvmx_lmcx_rodt_ctl_s cn58xxp1; -} cvmx_lmcx_rodt_ctl_t; - - -/** - * cvmx_lmc#_wodt_ctl0 - * - * LMC_WODT_CTL0 = LMC Write OnDieTermination control - * See the description in LMC_WODT_CTL1. - * - * Notes: - * Together, the LMC_WODT_CTL1 and LMC_WODT_CTL0 CSRs control the write ODT mask. See LMC_WODT_CTL1. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_wodt_ctl0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_lmcx_wodt_ctl0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wodt_d1_r1 : 8; /**< Write ODT mask DIMM1, RANK1 */ - uint64_t wodt_d1_r0 : 8; /**< Write ODT mask DIMM1, RANK0 */ - uint64_t wodt_d0_r1 : 8; /**< Write ODT mask DIMM0, RANK1 */ - uint64_t wodt_d0_r0 : 8; /**< Write ODT mask DIMM0, RANK0 */ -#else - uint64_t wodt_d0_r0 : 8; - uint64_t wodt_d0_r1 : 8; - uint64_t wodt_d1_r0 : 8; - uint64_t wodt_d1_r1 : 8; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_lmcx_wodt_ctl0_cn30xx cn31xx; - struct cvmx_lmcx_wodt_ctl0_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wodt_hi3 : 4; /**< Write ODT mask for position 3, data[127:64] */ - uint64_t wodt_hi2 : 4; /**< Write ODT mask for position 2, data[127:64] */ - uint64_t wodt_hi1 : 4; /**< Write ODT mask for position 1, data[127:64] */ - uint64_t wodt_hi0 : 4; /**< Write ODT mask for position 0, data[127:64] */ - uint64_t wodt_lo3 : 4; /**< Write ODT mask for position 3, data[ 63: 0] */ - uint64_t wodt_lo2 : 4; /**< Write ODT mask for position 2, data[ 63: 0] */ - uint64_t wodt_lo1 : 4; /**< Write ODT mask for position 1, data[ 63: 0] */ - uint64_t wodt_lo0 : 4; /**< Write ODT mask for position 0, data[ 63: 0] */ -#else - uint64_t wodt_lo0 : 4; - uint64_t wodt_lo1 : 4; - uint64_t wodt_lo2 : 4; - uint64_t wodt_lo3 : 4; - uint64_t wodt_hi0 : 4; - uint64_t wodt_hi1 : 4; - uint64_t wodt_hi2 : 4; - uint64_t wodt_hi3 : 4; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_lmcx_wodt_ctl0_cn38xx cn38xxp2; - struct cvmx_lmcx_wodt_ctl0_cn38xx cn50xx; - struct cvmx_lmcx_wodt_ctl0_cn30xx cn52xx; - struct cvmx_lmcx_wodt_ctl0_cn30xx cn52xxp1; - struct cvmx_lmcx_wodt_ctl0_cn30xx cn56xx; - struct cvmx_lmcx_wodt_ctl0_cn30xx cn56xxp1; - struct cvmx_lmcx_wodt_ctl0_cn38xx cn58xx; - struct cvmx_lmcx_wodt_ctl0_cn38xx cn58xxp1; -} cvmx_lmcx_wodt_ctl0_t; - - -/** - * cvmx_lmc#_wodt_ctl1 - * - * LMC_WODT_CTL1 = LMC Write OnDieTermination control - * System designers may desire to terminate DQ/DQS/DM lines for higher frequency DDR operations - * (667MHz and faster), especially on a multi-rank system. DDR2 DQ/DM/DQS I/O's have built in - * Termination resistor that can be turned on or off by the controller, after meeting tAOND and tAOF - * timing requirements. Each Rank has its own ODT pin that fans out to all the memory parts - * in that DIMM. System designers may prefer different combinations of ODT ON's for read and write - * into different ranks. Octeon supports full programmability by way of the mask register below. - * Each Rank position has its own 8-bit programmable field. - * When the controller does a write to that rank, it sets the 8 ODT pins to the MASK pins below. - * For eg., When doing a write into Rank0, a system designer may desire to terminate the lines - * with the resistor on Dimm0/Rank1. The mask WODT_D0_R0 would then be [00000010]. - * If ODT feature is not desired, the DDR parts can be programmed to not look at these pins by - * writing 0 in QS_DIC. Octeon drives the appropriate mask values on the ODT pins by default. - * If this feature is not required, write 0 in this register. - * - * Notes: - * Together, the LMC_WODT_CTL1 and LMC_WODT_CTL0 CSRs control the write ODT mask. - * When a given RANK is selected, the WODT mask for that RANK is used. The resulting WODT mask is - * driven to the DIMMs in the following manner: - * BUNK_ENA=1 BUNK_ENA=0 - * Mask[7] -> DIMM3, RANK1 DIMM3 - * Mask[6] -> DIMM3, RANK0 - * Mask[5] -> DIMM2, RANK1 DIMM2 - * Mask[4] -> DIMM2, RANK0 - * Mask[3] -> DIMM1, RANK1 DIMM1 - * Mask[2] -> DIMM1, RANK0 - * Mask[1] -> DIMM0, RANK1 DIMM0 - * Mask[0] -> DIMM0, RANK0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_lmcx_wodt_ctl1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wodt_d3_r1 : 8; /**< Write ODT mask DIMM3, RANK1/DIMM3 in SingleRanked */ - uint64_t wodt_d3_r0 : 8; /**< Write ODT mask DIMM3, RANK0 */ - uint64_t wodt_d2_r1 : 8; /**< Write ODT mask DIMM2, RANK1/DIMM2 in SingleRanked */ - uint64_t wodt_d2_r0 : 8; /**< Write ODT mask DIMM2, RANK0 */ -#else - uint64_t wodt_d2_r0 : 8; - uint64_t wodt_d2_r1 : 8; - uint64_t wodt_d3_r0 : 8; - uint64_t wodt_d3_r1 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_lmcx_wodt_ctl1_s cn30xx; - struct cvmx_lmcx_wodt_ctl1_s cn31xx; - struct cvmx_lmcx_wodt_ctl1_s cn52xx; - struct cvmx_lmcx_wodt_ctl1_s cn52xxp1; - struct cvmx_lmcx_wodt_ctl1_s cn56xx; - struct cvmx_lmcx_wodt_ctl1_s cn56xxp1; -} cvmx_lmcx_wodt_ctl1_t; - - -/** - * cvmx_mio_boot_bist_stat - * - * MIO_BOOT_BIST_STAT = MIO Boot BIST Status Register - * - * Contains the BIST status for the MIO boot memories. '0' = pass, '1' = fail. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_bist_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_boot_bist_stat_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ncbo_1 : 1; /**< NCB output FIFO 1 BIST status */ - uint64_t ncbo_0 : 1; /**< NCB output FIFO 0 BIST status */ - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t ncbo_0 : 1; - uint64_t ncbo_1 : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_mio_boot_bist_stat_cn30xx cn31xx; - struct cvmx_mio_boot_bist_stat_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t ncbo_0 : 1; /**< NCB output FIFO BIST status */ - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t ncbo_0 : 1; - uint64_t reserved_3_63 : 61; -#endif - } cn38xx; - struct cvmx_mio_boot_bist_stat_cn38xx cn38xxp2; - struct cvmx_mio_boot_bist_stat_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t pcm_1 : 1; /**< PCM memory 1 BIST status */ - uint64_t pcm_0 : 1; /**< PCM memory 0 BIST status */ - uint64_t ncbo_1 : 1; /**< NCB output FIFO 1 BIST status */ - uint64_t ncbo_0 : 1; /**< NCB output FIFO 0 BIST status */ - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t ncbo_0 : 1; - uint64_t ncbo_1 : 1; - uint64_t pcm_0 : 1; - uint64_t pcm_1 : 1; - uint64_t reserved_6_63 : 58; -#endif - } cn50xx; - struct cvmx_mio_boot_bist_stat_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t ndf : 2; /**< NAND flash BIST status */ - uint64_t ncbo_0 : 1; /**< NCB output FIFO BIST status */ - uint64_t dma : 1; /**< DMA memory BIST status */ - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t dma : 1; - uint64_t ncbo_0 : 1; - uint64_t ndf : 2; - uint64_t reserved_6_63 : 58; -#endif - } cn52xx; - struct cvmx_mio_boot_bist_stat_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t ncbo_0 : 1; /**< NCB output FIFO BIST status */ - uint64_t dma : 1; /**< DMA memory BIST status */ - uint64_t loc : 1; /**< Local memory BIST status */ - uint64_t ncbi : 1; /**< NCB input FIFO BIST status */ -#else - uint64_t ncbi : 1; - uint64_t loc : 1; - uint64_t dma : 1; - uint64_t ncbo_0 : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn52xxp1; - struct cvmx_mio_boot_bist_stat_cn52xxp1 cn56xx; - struct cvmx_mio_boot_bist_stat_cn52xxp1 cn56xxp1; - struct cvmx_mio_boot_bist_stat_cn38xx cn58xx; - struct cvmx_mio_boot_bist_stat_cn38xx cn58xxp1; -} cvmx_mio_boot_bist_stat_t; - - -/** - * cvmx_mio_boot_comp - * - * MIO_BOOT_COMP = MIO Boot Compensation Register - * - * Reset value is as follows: - * - * no pullups, PCTL=0x1f, NCTL=0x1f - * pullup on boot_ad[9], PCTL=0x1b, NCTL=0x1b (20 ohm termination) - * pullup on boot_ad[10], PCTL=0x07, NCTL=0x08 (50 ohm termination) - * pullups on boot_ad[10:9], PCTL=0x06, NCTL=0x04 (60 ohm termination) - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_comp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pctl : 5; /**< Boot bus PCTL */ - uint64_t nctl : 5; /**< Boot bus NCTL */ -#else - uint64_t nctl : 5; - uint64_t pctl : 5; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_mio_boot_comp_s cn50xx; - struct cvmx_mio_boot_comp_s cn52xx; - struct cvmx_mio_boot_comp_s cn52xxp1; - struct cvmx_mio_boot_comp_s cn56xx; - struct cvmx_mio_boot_comp_s cn56xxp1; -} cvmx_mio_boot_comp_t; - - -/** - * cvmx_mio_boot_dma_cfg# - * - * MIO_BOOT_DMA_CFG = MIO Boot DMA Config Register (1 per engine * 2 engines) - * - * SIZE is specified in number of bus transfers, where one transfer is equal to the following number - * of bytes dependent on MIO_BOOT_DMA_TIMn[WIDTH] and MIO_BOOT_DMA_TIMn[DDR]: - * - * WIDTH DDR Transfer Size (bytes) - * ---------------------------------------- - * 0 0 2 - * 0 1 4 - * 1 0 4 - * 1 1 8 - * - * Note: ADR must be aligned to the bus width (i.e. 16 bit aligned if WIDTH=0, 32 bit aligned if WIDTH=1). - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_dma_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t en : 1; /**< DMA Engine X enable */ - uint64_t rw : 1; /**< DMA Engine X R/W bit (0 = read, 1 = write) */ - uint64_t clr : 1; /**< DMA Engine X clear EN on device terminated burst */ - uint64_t reserved_60_60 : 1; - uint64_t swap32 : 1; /**< DMA Engine X 32 bit swap */ - uint64_t swap16 : 1; /**< DMA Engine X 16 bit swap */ - uint64_t swap8 : 1; /**< DMA Engine X 8 bit swap */ - uint64_t endian : 1; /**< DMA Engine X NCB endian mode (0 = big, 1 = little) */ - uint64_t size : 20; /**< DMA Engine X size */ - uint64_t adr : 36; /**< DMA Engine X address */ -#else - uint64_t adr : 36; - uint64_t size : 20; - uint64_t endian : 1; - uint64_t swap8 : 1; - uint64_t swap16 : 1; - uint64_t swap32 : 1; - uint64_t reserved_60_60 : 1; - uint64_t clr : 1; - uint64_t rw : 1; - uint64_t en : 1; -#endif - } s; - struct cvmx_mio_boot_dma_cfgx_s cn52xx; - struct cvmx_mio_boot_dma_cfgx_s cn52xxp1; - struct cvmx_mio_boot_dma_cfgx_s cn56xx; - struct cvmx_mio_boot_dma_cfgx_s cn56xxp1; -} cvmx_mio_boot_dma_cfgx_t; - - -/** - * cvmx_mio_boot_dma_int# - * - * MIO_BOOT_DMA_INT = MIO Boot DMA Interrupt Register (1 per engine * 2 engines) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_dma_intx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dmarq : 1; /**< DMA Engine X DMARQ asserted interrupt */ - uint64_t done : 1; /**< DMA Engine X request completion interrupt */ -#else - uint64_t done : 1; - uint64_t dmarq : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_boot_dma_intx_s cn52xx; - struct cvmx_mio_boot_dma_intx_s cn52xxp1; - struct cvmx_mio_boot_dma_intx_s cn56xx; - struct cvmx_mio_boot_dma_intx_s cn56xxp1; -} cvmx_mio_boot_dma_intx_t; - - -/** - * cvmx_mio_boot_dma_int_en# - * - * MIO_BOOT_DMA_INT_EN = MIO Boot DMA Interrupt Enable Register (1 per engine * 2 engines) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_dma_int_enx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dmarq : 1; /**< DMA Engine X DMARQ asserted interrupt enable */ - uint64_t done : 1; /**< DMA Engine X request completion interrupt enable */ -#else - uint64_t done : 1; - uint64_t dmarq : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_boot_dma_int_enx_s cn52xx; - struct cvmx_mio_boot_dma_int_enx_s cn52xxp1; - struct cvmx_mio_boot_dma_int_enx_s cn56xx; - struct cvmx_mio_boot_dma_int_enx_s cn56xxp1; -} cvmx_mio_boot_dma_int_enx_t; - - -/** - * cvmx_mio_boot_dma_tim# - * - * MIO_BOOT_DMA_TIM = MIO Boot DMA Timing Register (1 per engine * 2 engines) - * - * DMACK_PI inverts the assertion level of boot_dmack[n]. The default polarity of boot_dmack[1:0] is - * selected on the first de-assertion of reset by the values on boot_ad[12:11], where 0 is active high - * and 1 is active low (see MIO_BOOT_PIN_DEFS for a read-only copy of the default polarity). - * boot_ad[12:11] have internal pulldowns, so place a pullup on boot_ad[n+11] for active low default - * polarity on engine n. To interface with CF cards in True IDE Mode, either a pullup should be placed - * on boot_ad[n+11] OR the corresponding DMACK_PI[n] should be set. - * - * DMARQ_PI inverts the assertion level of boot_dmarq[n]. The default polarity of boot_dmarq[1:0] is - * active high, thus setting the polarity inversion bits changes the polarity to active low. To - * interface with CF cards in True IDE Mode, the corresponding DMARQ_PI[n] should be clear. - * - * TIM_MULT specifies the timing multiplier for an engine. The timing multiplier applies to all timing - * parameters, except for DMARQ and RD_DLY, which simply count eclks. TIM_MULT is encoded as follows: - * 0 = 4x, 1 = 1x, 2 = 2x, 3 = 8x. - * - * RD_DLY specifies the read sample delay in eclk cycles for an engine. For reads, the data bus is - * normally sampled on the same eclk edge that drives boot_oe_n high (and also low in DDR mode). - * This parameter can delay that sampling edge by up to 7 eclks. Note: the number of eclk cycles - * counted by the OE_A and DMACK_H + PAUSE timing parameters must be greater than RD_DLY. - * - * If DDR is set, then WE_N must be less than WE_A. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_dma_timx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dmack_pi : 1; /**< DMA Engine X DMA ack polarity inversion */ - uint64_t dmarq_pi : 1; /**< DMA Engine X DMA request polarity inversion */ - uint64_t tim_mult : 2; /**< DMA Engine X timing multiplier */ - uint64_t rd_dly : 3; /**< DMA Engine X read sample delay */ - uint64_t ddr : 1; /**< DMA Engine X DDR mode */ - uint64_t width : 1; /**< DMA Engine X bus width (0 = 16 bits, 1 = 32 bits) */ - uint64_t reserved_48_54 : 7; - uint64_t pause : 6; /**< DMA Engine X pause count */ - uint64_t dmack_h : 6; /**< DMA Engine X DMA ack hold count */ - uint64_t we_n : 6; /**< DMA Engine X write enable negated count */ - uint64_t we_a : 6; /**< DMA Engine X write enable asserted count */ - uint64_t oe_n : 6; /**< DMA Engine X output enable negated count */ - uint64_t oe_a : 6; /**< DMA Engine X output enable asserted count */ - uint64_t dmack_s : 6; /**< DMA Engine X DMA ack setup count */ - uint64_t dmarq : 6; /**< DMA Engine X DMA request count (must be non-zero) */ -#else - uint64_t dmarq : 6; - uint64_t dmack_s : 6; - uint64_t oe_a : 6; - uint64_t oe_n : 6; - uint64_t we_a : 6; - uint64_t we_n : 6; - uint64_t dmack_h : 6; - uint64_t pause : 6; - uint64_t reserved_48_54 : 7; - uint64_t width : 1; - uint64_t ddr : 1; - uint64_t rd_dly : 3; - uint64_t tim_mult : 2; - uint64_t dmarq_pi : 1; - uint64_t dmack_pi : 1; -#endif - } s; - struct cvmx_mio_boot_dma_timx_s cn52xx; - struct cvmx_mio_boot_dma_timx_s cn52xxp1; - struct cvmx_mio_boot_dma_timx_s cn56xx; - struct cvmx_mio_boot_dma_timx_s cn56xxp1; -} cvmx_mio_boot_dma_timx_t; - - -/** - * cvmx_mio_boot_err - * - * MIO_BOOT_ERR = MIO Boot Error Register - * - * Contains the address decode error and wait mode error bits. Address decode error is set when a - * boot bus access does not hit in any of the 8 remote regions or 2 local regions. Wait mode error is - * set when wait mode is enabled and the external wait signal is not de-asserted after 32k eclk cycles. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t wait_err : 1; /**< Wait mode error */ - uint64_t adr_err : 1; /**< Address decode error */ -#else - uint64_t adr_err : 1; - uint64_t wait_err : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_boot_err_s cn30xx; - struct cvmx_mio_boot_err_s cn31xx; - struct cvmx_mio_boot_err_s cn38xx; - struct cvmx_mio_boot_err_s cn38xxp2; - struct cvmx_mio_boot_err_s cn50xx; - struct cvmx_mio_boot_err_s cn52xx; - struct cvmx_mio_boot_err_s cn52xxp1; - struct cvmx_mio_boot_err_s cn56xx; - struct cvmx_mio_boot_err_s cn56xxp1; - struct cvmx_mio_boot_err_s cn58xx; - struct cvmx_mio_boot_err_s cn58xxp1; -} cvmx_mio_boot_err_t; - - -/** - * cvmx_mio_boot_int - * - * MIO_BOOT_INT = MIO Boot Interrupt Register - * - * Contains the interrupt enable bits for address decode error and wait mode error. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t wait_int : 1; /**< Wait mode error interrupt enable */ - uint64_t adr_int : 1; /**< Address decode error interrupt enable */ -#else - uint64_t adr_int : 1; - uint64_t wait_int : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_boot_int_s cn30xx; - struct cvmx_mio_boot_int_s cn31xx; - struct cvmx_mio_boot_int_s cn38xx; - struct cvmx_mio_boot_int_s cn38xxp2; - struct cvmx_mio_boot_int_s cn50xx; - struct cvmx_mio_boot_int_s cn52xx; - struct cvmx_mio_boot_int_s cn52xxp1; - struct cvmx_mio_boot_int_s cn56xx; - struct cvmx_mio_boot_int_s cn56xxp1; - struct cvmx_mio_boot_int_s cn58xx; - struct cvmx_mio_boot_int_s cn58xxp1; -} cvmx_mio_boot_int_t; - - -/** - * cvmx_mio_boot_loc_adr - * - * MIO_BOOT_LOC_ADR = MIO Boot Local Memory Address Register - * - * Specifies the address for reading or writing the local memory. This address will post-increment - * following an access to the MIO Boot Local Memory Data Register (MIO_BOOT_LOC_DAT). - * - * Local memory region 0 exists from addresses 0x00 - 0x78. - * Local memory region 1 exists from addresses 0x80 - 0xf8. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_loc_adr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t adr : 5; /**< Local memory address */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t adr : 5; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_boot_loc_adr_s cn30xx; - struct cvmx_mio_boot_loc_adr_s cn31xx; - struct cvmx_mio_boot_loc_adr_s cn38xx; - struct cvmx_mio_boot_loc_adr_s cn38xxp2; - struct cvmx_mio_boot_loc_adr_s cn50xx; - struct cvmx_mio_boot_loc_adr_s cn52xx; - struct cvmx_mio_boot_loc_adr_s cn52xxp1; - struct cvmx_mio_boot_loc_adr_s cn56xx; - struct cvmx_mio_boot_loc_adr_s cn56xxp1; - struct cvmx_mio_boot_loc_adr_s cn58xx; - struct cvmx_mio_boot_loc_adr_s cn58xxp1; -} cvmx_mio_boot_loc_adr_t; - - -/** - * cvmx_mio_boot_loc_cfg# - * - * MIO_BOOT_LOC_CFG = MIO Boot Local Region Config Register (1 per region * 2 regions) - * - * Contains local region enable and local region base address parameters. Each local region is 128 - * bytes organized as 16 entries x 8 bytes. - * - * Base address specifies address bits [31:7] of the region. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_loc_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t en : 1; /**< Local region X enable */ - uint64_t reserved_28_30 : 3; - uint64_t base : 25; /**< Local region X base address */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t base : 25; - uint64_t reserved_28_30 : 3; - uint64_t en : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_mio_boot_loc_cfgx_s cn30xx; - struct cvmx_mio_boot_loc_cfgx_s cn31xx; - struct cvmx_mio_boot_loc_cfgx_s cn38xx; - struct cvmx_mio_boot_loc_cfgx_s cn38xxp2; - struct cvmx_mio_boot_loc_cfgx_s cn50xx; - struct cvmx_mio_boot_loc_cfgx_s cn52xx; - struct cvmx_mio_boot_loc_cfgx_s cn52xxp1; - struct cvmx_mio_boot_loc_cfgx_s cn56xx; - struct cvmx_mio_boot_loc_cfgx_s cn56xxp1; - struct cvmx_mio_boot_loc_cfgx_s cn58xx; - struct cvmx_mio_boot_loc_cfgx_s cn58xxp1; -} cvmx_mio_boot_loc_cfgx_t; - - -/** - * cvmx_mio_boot_loc_dat - * - * MIO_BOOT_LOC_DAT = MIO Boot Local Memory Data Register - * - * This is a pseudo-register that will read/write the local memory at the address specified by the MIO - * Boot Local Address Register (MIO_BOOT_LOC_ADR) when accessed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_loc_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Local memory data */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_mio_boot_loc_dat_s cn30xx; - struct cvmx_mio_boot_loc_dat_s cn31xx; - struct cvmx_mio_boot_loc_dat_s cn38xx; - struct cvmx_mio_boot_loc_dat_s cn38xxp2; - struct cvmx_mio_boot_loc_dat_s cn50xx; - struct cvmx_mio_boot_loc_dat_s cn52xx; - struct cvmx_mio_boot_loc_dat_s cn52xxp1; - struct cvmx_mio_boot_loc_dat_s cn56xx; - struct cvmx_mio_boot_loc_dat_s cn56xxp1; - struct cvmx_mio_boot_loc_dat_s cn58xx; - struct cvmx_mio_boot_loc_dat_s cn58xxp1; -} cvmx_mio_boot_loc_dat_t; - - -/** - * cvmx_mio_boot_pin_defs - * - * MIO_BOOT_PIN_DEFS = MIO Boot Pin Defaults Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_pin_defs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ale : 1; /**< Region 0 default ALE mode */ - uint64_t width : 1; /**< Region 0 default bus width */ - uint64_t dmack_p2 : 1; /**< boot_dmack[2] default polarity */ - uint64_t dmack_p1 : 1; /**< boot_dmack[1] default polarity */ - uint64_t dmack_p0 : 1; /**< boot_dmack[0] default polarity */ - uint64_t term : 2; /**< Selects default driver termination */ - uint64_t nand : 1; /**< Region 0 is NAND flash */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t nand : 1; - uint64_t term : 2; - uint64_t dmack_p0 : 1; - uint64_t dmack_p1 : 1; - uint64_t dmack_p2 : 1; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_mio_boot_pin_defs_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ale : 1; /**< Region 0 default ALE mode */ - uint64_t width : 1; /**< Region 0 default bus width */ - uint64_t reserved_13_13 : 1; - uint64_t dmack_p1 : 1; /**< boot_dmack[1] default polarity */ - uint64_t dmack_p0 : 1; /**< boot_dmack[0] default polarity */ - uint64_t term : 2; /**< Selects default driver termination */ - uint64_t nand : 1; /**< Region 0 is NAND flash */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t nand : 1; - uint64_t term : 2; - uint64_t dmack_p0 : 1; - uint64_t dmack_p1 : 1; - uint64_t reserved_13_13 : 1; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn52xx; - struct cvmx_mio_boot_pin_defs_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ale : 1; /**< Region 0 default ALE mode */ - uint64_t width : 1; /**< Region 0 default bus width */ - uint64_t dmack_p2 : 1; /**< boot_dmack[2] default polarity */ - uint64_t dmack_p1 : 1; /**< boot_dmack[1] default polarity */ - uint64_t dmack_p0 : 1; /**< boot_dmack[0] default polarity */ - uint64_t term : 2; /**< Selects default driver termination */ - uint64_t reserved_0_8 : 9; -#else - uint64_t reserved_0_8 : 9; - uint64_t term : 2; - uint64_t dmack_p0 : 1; - uint64_t dmack_p1 : 1; - uint64_t dmack_p2 : 1; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn56xx; -} cvmx_mio_boot_pin_defs_t; - - -/** - * cvmx_mio_boot_reg_cfg# - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_reg_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t dmack : 2; /**< Region X DMACK */ - uint64_t tim_mult : 2; /**< Region X timing multiplier */ - uint64_t rd_dly : 3; /**< Region X read sample delay */ - uint64_t sam : 1; /**< Region X SAM mode */ - uint64_t we_ext : 2; /**< Region X write enable count extension */ - uint64_t oe_ext : 2; /**< Region X output enable count extension */ - uint64_t en : 1; /**< Region X enable */ - uint64_t orbit : 1; /**< Region X or bit */ - uint64_t ale : 1; /**< Region X ALE mode */ - uint64_t width : 1; /**< Region X bus width */ - uint64_t size : 12; /**< Region X size */ - uint64_t base : 16; /**< Region X base address */ -#else - uint64_t base : 16; - uint64_t size : 12; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t orbit : 1; - uint64_t en : 1; - uint64_t oe_ext : 2; - uint64_t we_ext : 2; - uint64_t sam : 1; - uint64_t rd_dly : 3; - uint64_t tim_mult : 2; - uint64_t dmack : 2; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_mio_boot_reg_cfgx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t sam : 1; /**< Region X SAM mode */ - uint64_t we_ext : 2; /**< Region X write enable count extension */ - uint64_t oe_ext : 2; /**< Region X output enable count extension */ - uint64_t en : 1; /**< Region X enable */ - uint64_t orbit : 1; /**< Region X or bit */ - uint64_t ale : 1; /**< Region X ALE mode */ - uint64_t width : 1; /**< Region X bus width */ - uint64_t size : 12; /**< Region X size */ - uint64_t base : 16; /**< Region X base address */ -#else - uint64_t base : 16; - uint64_t size : 12; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t orbit : 1; - uint64_t en : 1; - uint64_t oe_ext : 2; - uint64_t we_ext : 2; - uint64_t sam : 1; - uint64_t reserved_37_63 : 27; -#endif - } cn30xx; - struct cvmx_mio_boot_reg_cfgx_cn30xx cn31xx; - struct cvmx_mio_boot_reg_cfgx_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t en : 1; /**< Region X enable */ - uint64_t orbit : 1; /**< Region X or bit */ - uint64_t reserved_28_29 : 2; - uint64_t size : 12; /**< Region X size */ - uint64_t base : 16; /**< Region X base address */ -#else - uint64_t base : 16; - uint64_t size : 12; - uint64_t reserved_28_29 : 2; - uint64_t orbit : 1; - uint64_t en : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_mio_boot_reg_cfgx_cn38xx cn38xxp2; - struct cvmx_mio_boot_reg_cfgx_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_42_63 : 22; - uint64_t tim_mult : 2; /**< Region X timing multiplier */ - uint64_t rd_dly : 3; /**< Region X read sample delay */ - uint64_t sam : 1; /**< Region X SAM mode */ - uint64_t we_ext : 2; /**< Region X write enable count extension */ - uint64_t oe_ext : 2; /**< Region X output enable count extension */ - uint64_t en : 1; /**< Region X enable */ - uint64_t orbit : 1; /**< Region X or bit */ - uint64_t ale : 1; /**< Region X ALE mode */ - uint64_t width : 1; /**< Region X bus width */ - uint64_t size : 12; /**< Region X size */ - uint64_t base : 16; /**< Region X base address */ -#else - uint64_t base : 16; - uint64_t size : 12; - uint64_t width : 1; - uint64_t ale : 1; - uint64_t orbit : 1; - uint64_t en : 1; - uint64_t oe_ext : 2; - uint64_t we_ext : 2; - uint64_t sam : 1; - uint64_t rd_dly : 3; - uint64_t tim_mult : 2; - uint64_t reserved_42_63 : 22; -#endif - } cn50xx; - struct cvmx_mio_boot_reg_cfgx_s cn52xx; - struct cvmx_mio_boot_reg_cfgx_s cn52xxp1; - struct cvmx_mio_boot_reg_cfgx_s cn56xx; - struct cvmx_mio_boot_reg_cfgx_s cn56xxp1; - struct cvmx_mio_boot_reg_cfgx_cn30xx cn58xx; - struct cvmx_mio_boot_reg_cfgx_cn30xx cn58xxp1; -} cvmx_mio_boot_reg_cfgx_t; - - -/** - * cvmx_mio_boot_reg_tim# - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_reg_timx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pagem : 1; /**< Region X page mode */ - uint64_t waitm : 1; /**< Region X wait mode */ - uint64_t pages : 2; /**< Region X page size */ - uint64_t ale : 6; /**< Region X ALE count */ - uint64_t page : 6; /**< Region X page count */ - uint64_t wait : 6; /**< Region X wait count */ - uint64_t pause : 6; /**< Region X pause count */ - uint64_t wr_hld : 6; /**< Region X write hold count */ - uint64_t rd_hld : 6; /**< Region X read hold count */ - uint64_t we : 6; /**< Region X write enable count */ - uint64_t oe : 6; /**< Region X output enable count */ - uint64_t ce : 6; /**< Region X chip enable count */ - uint64_t adr : 6; /**< Region X address count */ -#else - uint64_t adr : 6; - uint64_t ce : 6; - uint64_t oe : 6; - uint64_t we : 6; - uint64_t rd_hld : 6; - uint64_t wr_hld : 6; - uint64_t pause : 6; - uint64_t wait : 6; - uint64_t page : 6; - uint64_t ale : 6; - uint64_t pages : 2; - uint64_t waitm : 1; - uint64_t pagem : 1; -#endif - } s; - struct cvmx_mio_boot_reg_timx_s cn30xx; - struct cvmx_mio_boot_reg_timx_s cn31xx; - struct cvmx_mio_boot_reg_timx_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pagem : 1; /**< Region X page mode */ - uint64_t waitm : 1; /**< Region X wait mode */ - uint64_t pages : 2; /**< Region X page size (NOT IN PASS 1) */ - uint64_t reserved_54_59 : 6; - uint64_t page : 6; /**< Region X page count */ - uint64_t wait : 6; /**< Region X wait count */ - uint64_t pause : 6; /**< Region X pause count */ - uint64_t wr_hld : 6; /**< Region X write hold count */ - uint64_t rd_hld : 6; /**< Region X read hold count */ - uint64_t we : 6; /**< Region X write enable count */ - uint64_t oe : 6; /**< Region X output enable count */ - uint64_t ce : 6; /**< Region X chip enable count */ - uint64_t adr : 6; /**< Region X address count */ -#else - uint64_t adr : 6; - uint64_t ce : 6; - uint64_t oe : 6; - uint64_t we : 6; - uint64_t rd_hld : 6; - uint64_t wr_hld : 6; - uint64_t pause : 6; - uint64_t wait : 6; - uint64_t page : 6; - uint64_t reserved_54_59 : 6; - uint64_t pages : 2; - uint64_t waitm : 1; - uint64_t pagem : 1; -#endif - } cn38xx; - struct cvmx_mio_boot_reg_timx_cn38xx cn38xxp2; - struct cvmx_mio_boot_reg_timx_s cn50xx; - struct cvmx_mio_boot_reg_timx_s cn52xx; - struct cvmx_mio_boot_reg_timx_s cn52xxp1; - struct cvmx_mio_boot_reg_timx_s cn56xx; - struct cvmx_mio_boot_reg_timx_s cn56xxp1; - struct cvmx_mio_boot_reg_timx_s cn58xx; - struct cvmx_mio_boot_reg_timx_s cn58xxp1; -} cvmx_mio_boot_reg_timx_t; - - -/** - * cvmx_mio_boot_thr - * - * MIO_BOOT_THR = MIO Boot Threshold Register - * - * Contains MIO Boot threshold values: - * - * FIF_THR = Assert ncb__busy when the Boot NCB input FIFO reaches this level (not typically for - * customer use). - * - * DMA_THR = When non-DMA accesses are pending, perform a DMA access after this value of non-DMA - * accesses have completed. If set to zero, only perform a DMA access when non-DMA - * accesses are not pending. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_boot_thr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_22_63 : 42; - uint64_t dma_thr : 6; /**< DMA threshold */ - uint64_t reserved_14_15 : 2; - uint64_t fif_cnt : 6; /**< Current NCB FIFO count */ - uint64_t reserved_6_7 : 2; - uint64_t fif_thr : 6; /**< NCB busy threshold */ -#else - uint64_t fif_thr : 6; - uint64_t reserved_6_7 : 2; - uint64_t fif_cnt : 6; - uint64_t reserved_14_15 : 2; - uint64_t dma_thr : 6; - uint64_t reserved_22_63 : 42; -#endif - } s; - struct cvmx_mio_boot_thr_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t fif_cnt : 6; /**< Current NCB FIFO count */ - uint64_t reserved_6_7 : 2; - uint64_t fif_thr : 6; /**< NCB busy threshold */ -#else - uint64_t fif_thr : 6; - uint64_t reserved_6_7 : 2; - uint64_t fif_cnt : 6; - uint64_t reserved_14_63 : 50; -#endif - } cn30xx; - struct cvmx_mio_boot_thr_cn30xx cn31xx; - struct cvmx_mio_boot_thr_cn30xx cn38xx; - struct cvmx_mio_boot_thr_cn30xx cn38xxp2; - struct cvmx_mio_boot_thr_cn30xx cn50xx; - struct cvmx_mio_boot_thr_s cn52xx; - struct cvmx_mio_boot_thr_s cn52xxp1; - struct cvmx_mio_boot_thr_s cn56xx; - struct cvmx_mio_boot_thr_s cn56xxp1; - struct cvmx_mio_boot_thr_cn30xx cn58xx; - struct cvmx_mio_boot_thr_cn30xx cn58xxp1; -} cvmx_mio_boot_thr_t; - - -/** - * cvmx_mio_fus_bnk_dat# - * - * Notes: - * The intial state of MIO_FUS_BNK_DAT* is as if bank1 was just read i.e. DAT* = fus[511:256] - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_bnk_datx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dat : 64; /**< Efuse bank store - For reads, the DAT gets the fus bank last read - For write, the DAT determines which fuses to blow */ -#else - uint64_t dat : 64; -#endif - } s; - struct cvmx_mio_fus_bnk_datx_s cn50xx; - struct cvmx_mio_fus_bnk_datx_s cn52xx; - struct cvmx_mio_fus_bnk_datx_s cn52xxp1; - struct cvmx_mio_fus_bnk_datx_s cn56xx; - struct cvmx_mio_fus_bnk_datx_s cn56xxp1; - struct cvmx_mio_fus_bnk_datx_s cn58xx; - struct cvmx_mio_fus_bnk_datx_s cn58xxp1; -} cvmx_mio_fus_bnk_datx_t; - - -/** - * cvmx_mio_fus_dat0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_dat0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t man_info : 32; /**< Fuse information - manufacturing info [31:0] */ -#else - uint64_t man_info : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_mio_fus_dat0_s cn30xx; - struct cvmx_mio_fus_dat0_s cn31xx; - struct cvmx_mio_fus_dat0_s cn38xx; - struct cvmx_mio_fus_dat0_s cn38xxp2; - struct cvmx_mio_fus_dat0_s cn50xx; - struct cvmx_mio_fus_dat0_s cn52xx; - struct cvmx_mio_fus_dat0_s cn52xxp1; - struct cvmx_mio_fus_dat0_s cn56xx; - struct cvmx_mio_fus_dat0_s cn56xxp1; - struct cvmx_mio_fus_dat0_s cn58xx; - struct cvmx_mio_fus_dat0_s cn58xxp1; -} cvmx_mio_fus_dat0_t; - - -/** - * cvmx_mio_fus_dat1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_dat1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t man_info : 32; /**< Fuse information - manufacturing info [63:32] */ -#else - uint64_t man_info : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_mio_fus_dat1_s cn30xx; - struct cvmx_mio_fus_dat1_s cn31xx; - struct cvmx_mio_fus_dat1_s cn38xx; - struct cvmx_mio_fus_dat1_s cn38xxp2; - struct cvmx_mio_fus_dat1_s cn50xx; - struct cvmx_mio_fus_dat1_s cn52xx; - struct cvmx_mio_fus_dat1_s cn52xxp1; - struct cvmx_mio_fus_dat1_s cn56xx; - struct cvmx_mio_fus_dat1_s cn56xxp1; - struct cvmx_mio_fus_dat1_s cn58xx; - struct cvmx_mio_fus_dat1_s cn58xxp1; -} cvmx_mio_fus_dat1_t; - - -/** - * cvmx_mio_fus_dat2 - * - * Notes: - * CHIP_ID is consumed in several places within Octeon. - * - * * Core COP0 ProcessorIdentification[Revision] - * * Core EJTAG DeviceIdentification[Version] - * * PCI_CFG02[RID] - * * JTAG controller - * - * Note: The JTAG controller gets CHIP_ID[3:0] solely from the laser fuses. - * Modification to the efuses will not change what the JTAG controller reports - * for CHIP_ID. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_dat2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t fus318 : 1; /**< Fuse information - a copy of fuse318 */ - uint64_t raid_en : 1; /**< Fuse information - RAID enabled */ - uint64_t reserved_30_31 : 2; - uint64_t nokasu : 1; /**< Fuse information - Disable Kasumi */ - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t reserved_0_15 : 16; -#else - uint64_t reserved_0_15 : 16; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t nokasu : 1; - uint64_t reserved_30_31 : 2; - uint64_t raid_en : 1; - uint64_t fus318 : 1; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_mio_fus_dat2_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t pll_off : 4; /**< Fuse information - core pll offset - Used to compute the base offset for the core pll. - the offset will be (PLL_OFF ^ 8) - Note, these fuses can only be set from laser fuse */ - uint64_t reserved_1_11 : 11; - uint64_t pp_dis : 1; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 1; - uint64_t reserved_1_11 : 11; - uint64_t pll_off : 4; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn30xx; - struct cvmx_mio_fus_dat2_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t pll_off : 4; /**< Fuse information - core pll offset - Used to compute the base offset for the core pll. - the offset will be (PLL_OFF ^ 8) - Note, these fuses can only be set from laser fuse */ - uint64_t reserved_2_11 : 10; - uint64_t pp_dis : 2; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 2; - uint64_t reserved_2_11 : 10; - uint64_t pll_off : 4; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn31xx; - struct cvmx_mio_fus_dat2_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) - (PASS2 Only) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable - (PASS2 Only) */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable - (PASS2 Only) */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t pp_dis : 16; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 16; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn38xx; - struct cvmx_mio_fus_dat2_cn38xx cn38xxp2; - struct cvmx_mio_fus_dat2_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t fus318 : 1; /**< Fuse information - a copy of fuse318 */ - uint64_t raid_en : 1; /**< Fuse information - RAID enabled - (5020 does not have RAID co-processor) */ - uint64_t reserved_30_31 : 2; - uint64_t nokasu : 1; /**< Fuse information - Disable Kasumi */ - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) - (5020 does not have DFA co-processor) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t reserved_2_15 : 14; - uint64_t pp_dis : 2; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 2; - uint64_t reserved_2_15 : 14; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t nokasu : 1; - uint64_t reserved_30_31 : 2; - uint64_t raid_en : 1; - uint64_t fus318 : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn50xx; - struct cvmx_mio_fus_dat2_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t fus318 : 1; /**< Fuse information - a copy of fuse318 */ - uint64_t raid_en : 1; /**< Fuse information - RAID enabled */ - uint64_t reserved_30_31 : 2; - uint64_t nokasu : 1; /**< Fuse information - Disable Kasumi */ - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t reserved_4_15 : 12; - uint64_t pp_dis : 4; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 4; - uint64_t reserved_4_15 : 12; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t nokasu : 1; - uint64_t reserved_30_31 : 2; - uint64_t raid_en : 1; - uint64_t fus318 : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn52xx; - struct cvmx_mio_fus_dat2_cn52xx cn52xxp1; - struct cvmx_mio_fus_dat2_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t fus318 : 1; /**< Fuse information - a copy of fuse318 */ - uint64_t raid_en : 1; /**< Fuse information - RAID enabled */ - uint64_t reserved_30_31 : 2; - uint64_t nokasu : 1; /**< Fuse information - Disable Kasumi */ - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t reserved_12_15 : 4; - uint64_t pp_dis : 12; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 12; - uint64_t reserved_12_15 : 4; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t nokasu : 1; - uint64_t reserved_30_31 : 2; - uint64_t raid_en : 1; - uint64_t fus318 : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn56xx; - struct cvmx_mio_fus_dat2_cn56xx cn56xxp1; - struct cvmx_mio_fus_dat2_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_30_63 : 34; - uint64_t nokasu : 1; /**< Fuse information - Disable Kasumi */ - uint64_t nodfa_cp2 : 1; /**< Fuse information - DFA Disable (CP2) */ - uint64_t nomul : 1; /**< Fuse information - VMUL disable */ - uint64_t nocrypto : 1; /**< Fuse information - AES/DES/HASH disable */ - uint64_t rst_sht : 1; /**< Fuse information - When set, use short reset count */ - uint64_t bist_dis : 1; /**< Fuse information - BIST Disable */ - uint64_t chip_id : 8; /**< Fuse information - CHIP_ID */ - uint64_t pp_dis : 16; /**< Fuse information - PP_DISABLES */ -#else - uint64_t pp_dis : 16; - uint64_t chip_id : 8; - uint64_t bist_dis : 1; - uint64_t rst_sht : 1; - uint64_t nocrypto : 1; - uint64_t nomul : 1; - uint64_t nodfa_cp2 : 1; - uint64_t nokasu : 1; - uint64_t reserved_30_63 : 34; -#endif - } cn58xx; - struct cvmx_mio_fus_dat2_cn58xx cn58xxp1; -} cvmx_mio_fus_dat2_t; - - -/** - * cvmx_mio_fus_dat3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_dat3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pll_div4 : 1; /**< Fuse information - PLL DIV4 mode - (laser fuse only) */ - uint64_t zip_crip : 2; /**< Fuse information - Zip Cripple */ - uint64_t bar2_en : 1; /**< Fuse information - BAR2 Enable (when blown '1') */ - uint64_t efus_lck : 1; /**< Fuse information - efuse lockdown */ - uint64_t efus_ign : 1; /**< Fuse information - efuse ignore - This bit only has side effects when blown in - the laser fuses. It is ignore if only set in - efuse store. */ - uint64_t nozip : 1; /**< Fuse information - ZIP disable */ - uint64_t nodfa_dte : 1; /**< Fuse information - DFA Disable (DTE) */ - uint64_t icache : 24; /**< Fuse information - ICACHE Hard Repair Data */ -#else - uint64_t icache : 24; - uint64_t nodfa_dte : 1; - uint64_t nozip : 1; - uint64_t efus_ign : 1; - uint64_t efus_lck : 1; - uint64_t bar2_en : 1; - uint64_t zip_crip : 2; - uint64_t pll_div4 : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_mio_fus_dat3_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pll_div4 : 1; /**< Fuse information - PLL DIV4 mode - (laser fuse only) */ - uint64_t reserved_29_30 : 2; - uint64_t bar2_en : 1; /**< Fuse information - BAR2 Enable (when blown '1') */ - uint64_t efus_lck : 1; /**< Fuse information - efuse lockdown */ - uint64_t efus_ign : 1; /**< Fuse information - efuse ignore - This bit only has side effects when blown in - the laser fuses. It is ignore if only set in - efuse store. */ - uint64_t nozip : 1; /**< Fuse information - ZIP disable */ - uint64_t nodfa_dte : 1; /**< Fuse information - DFA Disable (DTE) */ - uint64_t icache : 24; /**< Fuse information - ICACHE Hard Repair Data */ -#else - uint64_t icache : 24; - uint64_t nodfa_dte : 1; - uint64_t nozip : 1; - uint64_t efus_ign : 1; - uint64_t efus_lck : 1; - uint64_t bar2_en : 1; - uint64_t reserved_29_30 : 2; - uint64_t pll_div4 : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_mio_fus_dat3_s cn31xx; - struct cvmx_mio_fus_dat3_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t zip_crip : 2; /**< Fuse information - Zip Cripple - (PASS3 Only) */ - uint64_t bar2_en : 1; /**< Fuse information - BAR2 Enable (when blown '1') - (PASS2 Only) */ - uint64_t efus_lck : 1; /**< Fuse information - efuse lockdown - (PASS2 Only) */ - uint64_t efus_ign : 1; /**< Fuse information - efuse ignore - This bit only has side effects when blown in - the laser fuses. It is ignore if only set in - efuse store. - (PASS2 Only) */ - uint64_t nozip : 1; /**< Fuse information - ZIP disable - (PASS2 Only) */ - uint64_t nodfa_dte : 1; /**< Fuse information - DFA Disable (DTE) - (PASS2 Only) */ - uint64_t icache : 24; /**< Fuse information - ICACHE Hard Repair Data */ -#else - uint64_t icache : 24; - uint64_t nodfa_dte : 1; - uint64_t nozip : 1; - uint64_t efus_ign : 1; - uint64_t efus_lck : 1; - uint64_t bar2_en : 1; - uint64_t zip_crip : 2; - uint64_t reserved_31_63 : 33; -#endif - } cn38xx; - struct cvmx_mio_fus_dat3_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t bar2_en : 1; /**< Fuse information - BAR2 Enable (when blown '1') - (PASS2 Only) */ - uint64_t efus_lck : 1; /**< Fuse information - efuse lockdown - (PASS2 Only) */ - uint64_t efus_ign : 1; /**< Fuse information - efuse ignore - This bit only has side effects when blown in - the laser fuses. It is ignore if only set in - efuse store. - (PASS2 Only) */ - uint64_t nozip : 1; /**< Fuse information - ZIP disable - (PASS2 Only) */ - uint64_t nodfa_dte : 1; /**< Fuse information - DFA Disable (DTE) - (PASS2 Only) */ - uint64_t icache : 24; /**< Fuse information - ICACHE Hard Repair Data */ -#else - uint64_t icache : 24; - uint64_t nodfa_dte : 1; - uint64_t nozip : 1; - uint64_t efus_ign : 1; - uint64_t efus_lck : 1; - uint64_t bar2_en : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn38xxp2; - struct cvmx_mio_fus_dat3_cn38xx cn50xx; - struct cvmx_mio_fus_dat3_cn38xx cn52xx; - struct cvmx_mio_fus_dat3_cn38xx cn52xxp1; - struct cvmx_mio_fus_dat3_cn38xx cn56xx; - struct cvmx_mio_fus_dat3_cn38xx cn56xxp1; - struct cvmx_mio_fus_dat3_cn38xx cn58xx; - struct cvmx_mio_fus_dat3_cn38xx cn58xxp1; -} cvmx_mio_fus_dat3_t; - - -/** - * cvmx_mio_fus_ema - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_ema_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t eff_ema : 3; /**< Effective EMA value */ - uint64_t reserved_3_3 : 1; - uint64_t ema : 3; /**< EMA Settings */ -#else - uint64_t ema : 3; - uint64_t reserved_3_3 : 1; - uint64_t eff_ema : 3; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mio_fus_ema_s cn50xx; - struct cvmx_mio_fus_ema_s cn52xx; - struct cvmx_mio_fus_ema_s cn52xxp1; - struct cvmx_mio_fus_ema_s cn56xx; - struct cvmx_mio_fus_ema_s cn56xxp1; - struct cvmx_mio_fus_ema_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t ema : 2; /**< EMA Settings */ -#else - uint64_t ema : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn58xx; - struct cvmx_mio_fus_ema_cn58xx cn58xxp1; -} cvmx_mio_fus_ema_t; - - -/** - * cvmx_mio_fus_pdf - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_pdf_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pdf : 64; /**< Fuse information - Product Definition Field */ -#else - uint64_t pdf : 64; -#endif - } s; - struct cvmx_mio_fus_pdf_s cn50xx; - struct cvmx_mio_fus_pdf_s cn52xx; - struct cvmx_mio_fus_pdf_s cn52xxp1; - struct cvmx_mio_fus_pdf_s cn56xx; - struct cvmx_mio_fus_pdf_s cn56xxp1; - struct cvmx_mio_fus_pdf_s cn58xx; -} cvmx_mio_fus_pdf_t; - - -/** - * cvmx_mio_fus_pll - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_pll_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t rfslip : 1; /**< PLL reference clock slip */ - uint64_t fbslip : 1; /**< PLL feedback clock slip */ -#else - uint64_t fbslip : 1; - uint64_t rfslip : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_fus_pll_s cn50xx; - struct cvmx_mio_fus_pll_s cn52xx; - struct cvmx_mio_fus_pll_s cn52xxp1; - struct cvmx_mio_fus_pll_s cn56xx; - struct cvmx_mio_fus_pll_s cn56xxp1; - struct cvmx_mio_fus_pll_s cn58xx; - struct cvmx_mio_fus_pll_s cn58xxp1; -} cvmx_mio_fus_pll_t; - - -/** - * cvmx_mio_fus_prog - * - * Notes: - * To write a bank of fuses, SW must set MIO_FUS_WADR[ADDR] to the bank to be - * programmed and then set each bit within MIO_FUS_BNK_DATX to indicate which - * fuses to blow. Once ADDR, and DAT are setup, SW can write to - * MIO_FUS_PROG[PROG] to start the bank write and poll on PROG. Once PROG is - * clear, the bank write is complete. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_prog_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t prog : 1; /**< Blow the fuse bank - SW will set PROG, and then the HW will clear - when the PROG bank is complete */ -#else - uint64_t prog : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_fus_prog_s cn30xx; - struct cvmx_mio_fus_prog_s cn31xx; - struct cvmx_mio_fus_prog_s cn38xx; - struct cvmx_mio_fus_prog_s cn38xxp2; - struct cvmx_mio_fus_prog_s cn50xx; - struct cvmx_mio_fus_prog_s cn52xx; - struct cvmx_mio_fus_prog_s cn52xxp1; - struct cvmx_mio_fus_prog_s cn56xx; - struct cvmx_mio_fus_prog_s cn56xxp1; - struct cvmx_mio_fus_prog_s cn58xx; - struct cvmx_mio_fus_prog_s cn58xxp1; -} cvmx_mio_fus_prog_t; - - -/** - * cvmx_mio_fus_prog_times - * - * Notes: - * All values must be > 0 for correct electrical operation. - * - * The reset values are a conservative version for a 50MHz ref_clk. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_prog_times_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_33_63 : 31; - uint64_t prog_pin : 1; /**< efuse program pin */ - uint64_t out : 8; /**< efuse timing param (ref_clks to delay 10ns) */ - uint64_t sclk_lo : 4; /**< efuse timing param (ref_clks to delay 5ns) */ - uint64_t sclk_hi : 12; /**< efuse timing param (ref_clks to delay 1000ns) */ - uint64_t setup : 8; /**< efuse timing param (ref_clks to delay 10ns) */ -#else - uint64_t setup : 8; - uint64_t sclk_hi : 12; - uint64_t sclk_lo : 4; - uint64_t out : 8; - uint64_t prog_pin : 1; - uint64_t reserved_33_63 : 31; -#endif - } s; - struct cvmx_mio_fus_prog_times_s cn50xx; - struct cvmx_mio_fus_prog_times_s cn52xx; - struct cvmx_mio_fus_prog_times_s cn52xxp1; - struct cvmx_mio_fus_prog_times_s cn56xx; - struct cvmx_mio_fus_prog_times_s cn56xxp1; - struct cvmx_mio_fus_prog_times_s cn58xx; - struct cvmx_mio_fus_prog_times_s cn58xxp1; -} cvmx_mio_fus_prog_times_t; - - -/** - * cvmx_mio_fus_rcmd - * - * Notes: - * To read an efuse, SW writes MIO_FUS_RCMD[ADDR,PEND] with the byte address of - * the fuse in question, then SW can poll MIO_FUS_RCMD[PEND]. When PEND is - * clear, then MIO_FUS_RCMD[DAT] is valid. In addition, if the efuse read went - * to the efuse banks (e.g. ADDR > (320/8) || EFUSE is set) SW can read - * MIO_FUS_BNK_DATX which contains all 256 fuses in the bank associated in - * ADDR. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_rcmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t dat : 8; /**< 8bits of fuse data */ - uint64_t reserved_13_15 : 3; - uint64_t pend : 1; /**< SW sets this bit on a write to start FUSE read - operation. HW clears when read is complete and - the DAT is valid */ - uint64_t reserved_9_11 : 3; - uint64_t efuse : 1; /**< When set, return data from the efuse storage - rather than the local storage for the 320 HW fuses */ - uint64_t addr : 8; /**< The byte address of the fuse to read */ -#else - uint64_t addr : 8; - uint64_t efuse : 1; - uint64_t reserved_9_11 : 3; - uint64_t pend : 1; - uint64_t reserved_13_15 : 3; - uint64_t dat : 8; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_mio_fus_rcmd_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t dat : 8; /**< 8bits of fuse data */ - uint64_t reserved_13_15 : 3; - uint64_t pend : 1; /**< SW sets this bit on a write to start FUSE read - operation. HW clears when read is complete and - the DAT is valid */ - uint64_t reserved_9_11 : 3; - uint64_t efuse : 1; /**< When set, return data from the efuse storage - rather than the local storage for the 320 HW fuses */ - uint64_t reserved_7_7 : 1; - uint64_t addr : 7; /**< The byte address of the fuse to read */ -#else - uint64_t addr : 7; - uint64_t reserved_7_7 : 1; - uint64_t efuse : 1; - uint64_t reserved_9_11 : 3; - uint64_t pend : 1; - uint64_t reserved_13_15 : 3; - uint64_t dat : 8; - uint64_t reserved_24_63 : 40; -#endif - } cn30xx; - struct cvmx_mio_fus_rcmd_cn30xx cn31xx; - struct cvmx_mio_fus_rcmd_cn30xx cn38xx; - struct cvmx_mio_fus_rcmd_cn30xx cn38xxp2; - struct cvmx_mio_fus_rcmd_cn30xx cn50xx; - struct cvmx_mio_fus_rcmd_s cn52xx; - struct cvmx_mio_fus_rcmd_s cn52xxp1; - struct cvmx_mio_fus_rcmd_s cn56xx; - struct cvmx_mio_fus_rcmd_s cn56xxp1; - struct cvmx_mio_fus_rcmd_cn30xx cn58xx; - struct cvmx_mio_fus_rcmd_cn30xx cn58xxp1; -} cvmx_mio_fus_rcmd_t; - - -/** - * cvmx_mio_fus_spr_repair_res - * - * Notes: - * Pass3 Only - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_spr_repair_res_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_42_63 : 22; - uint64_t repair2 : 14; /**< SPR BISR Results */ - uint64_t repair1 : 14; /**< SPR BISR Results */ - uint64_t repair0 : 14; /**< SPR BISR Results */ -#else - uint64_t repair0 : 14; - uint64_t repair1 : 14; - uint64_t repair2 : 14; - uint64_t reserved_42_63 : 22; -#endif - } s; - struct cvmx_mio_fus_spr_repair_res_s cn30xx; - struct cvmx_mio_fus_spr_repair_res_s cn31xx; - struct cvmx_mio_fus_spr_repair_res_s cn38xx; - struct cvmx_mio_fus_spr_repair_res_s cn50xx; - struct cvmx_mio_fus_spr_repair_res_s cn52xx; - struct cvmx_mio_fus_spr_repair_res_s cn52xxp1; - struct cvmx_mio_fus_spr_repair_res_s cn56xx; - struct cvmx_mio_fus_spr_repair_res_s cn56xxp1; - struct cvmx_mio_fus_spr_repair_res_s cn58xx; - struct cvmx_mio_fus_spr_repair_res_s cn58xxp1; -} cvmx_mio_fus_spr_repair_res_t; - - -/** - * cvmx_mio_fus_spr_repair_sum - * - * Notes: - * Pass3 Only - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_spr_repair_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t too_many : 1; /**< Too Many Defects - cannot repair - bad part */ -#else - uint64_t too_many : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_fus_spr_repair_sum_s cn30xx; - struct cvmx_mio_fus_spr_repair_sum_s cn31xx; - struct cvmx_mio_fus_spr_repair_sum_s cn38xx; - struct cvmx_mio_fus_spr_repair_sum_s cn50xx; - struct cvmx_mio_fus_spr_repair_sum_s cn52xx; - struct cvmx_mio_fus_spr_repair_sum_s cn52xxp1; - struct cvmx_mio_fus_spr_repair_sum_s cn56xx; - struct cvmx_mio_fus_spr_repair_sum_s cn56xxp1; - struct cvmx_mio_fus_spr_repair_sum_s cn58xx; - struct cvmx_mio_fus_spr_repair_sum_s cn58xxp1; -} cvmx_mio_fus_spr_repair_sum_t; - - -/** - * cvmx_mio_fus_unlock - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_unlock_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t key : 24; /**< When set to the typical value, allows SW to - program the efuses */ -#else - uint64_t key : 24; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_mio_fus_unlock_s cn30xx; - struct cvmx_mio_fus_unlock_s cn31xx; -} cvmx_mio_fus_unlock_t; - - -/** - * cvmx_mio_fus_wadr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_fus_wadr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t addr : 10; /**< Which of the four banks of 256 fuses to blow */ -#else - uint64_t addr : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_mio_fus_wadr_s cn30xx; - struct cvmx_mio_fus_wadr_s cn31xx; - struct cvmx_mio_fus_wadr_s cn38xx; - struct cvmx_mio_fus_wadr_s cn38xxp2; - struct cvmx_mio_fus_wadr_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t addr : 2; /**< Which of the four banks of 256 fuses to blow */ -#else - uint64_t addr : 2; - uint64_t reserved_2_63 : 62; -#endif - } cn50xx; - struct cvmx_mio_fus_wadr_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t addr : 3; /**< Which of the four banks of 256 fuses to blow */ -#else - uint64_t addr : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn52xx; - struct cvmx_mio_fus_wadr_cn52xx cn52xxp1; - struct cvmx_mio_fus_wadr_cn52xx cn56xx; - struct cvmx_mio_fus_wadr_cn52xx cn56xxp1; - struct cvmx_mio_fus_wadr_cn50xx cn58xx; - struct cvmx_mio_fus_wadr_cn50xx cn58xxp1; -} cvmx_mio_fus_wadr_t; - - -/** - * cvmx_mio_ndf_dma_cfg - * - * MIO_NDF_DMA_CFG = MIO NAND Flash DMA Config Register - * - * SIZE is specified in number of 64 bit transfers (encoded in -1 notation). - * - * ADR must be 64 bit aligned. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_ndf_dma_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t en : 1; /**< DMA Engine enable */ - uint64_t rw : 1; /**< DMA Engine R/W bit (0 = read, 1 = write) */ - uint64_t clr : 1; /**< DMA Engine clear EN on device terminated burst */ - uint64_t reserved_60_60 : 1; - uint64_t swap32 : 1; /**< DMA Engine 32 bit swap */ - uint64_t swap16 : 1; /**< DMA Engine 16 bit swap */ - uint64_t swap8 : 1; /**< DMA Engine 8 bit swap */ - uint64_t endian : 1; /**< DMA Engine NCB endian mode (0 = big, 1 = little) */ - uint64_t size : 20; /**< DMA Engine size */ - uint64_t adr : 36; /**< DMA Engine address */ -#else - uint64_t adr : 36; - uint64_t size : 20; - uint64_t endian : 1; - uint64_t swap8 : 1; - uint64_t swap16 : 1; - uint64_t swap32 : 1; - uint64_t reserved_60_60 : 1; - uint64_t clr : 1; - uint64_t rw : 1; - uint64_t en : 1; -#endif - } s; - struct cvmx_mio_ndf_dma_cfg_s cn52xx; -} cvmx_mio_ndf_dma_cfg_t; - - -/** - * cvmx_mio_ndf_dma_int - * - * MIO_NDF_DMA_INT = MIO NAND Flash DMA Interrupt Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_ndf_dma_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t done : 1; /**< DMA Engine request completion interrupt */ -#else - uint64_t done : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_ndf_dma_int_s cn52xx; -} cvmx_mio_ndf_dma_int_t; - - -/** - * cvmx_mio_ndf_dma_int_en - * - * MIO_NDF_DMA_INT_EN = MIO NAND Flash DMA Interrupt Enable Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_ndf_dma_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t done : 1; /**< DMA Engine request completion interrupt enable */ -#else - uint64_t done : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_ndf_dma_int_en_s cn52xx; -} cvmx_mio_ndf_dma_int_en_t; - - -/** - * cvmx_mio_pll_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_pll_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t bw_ctl : 5; /**< Core PLL bandwidth control */ -#else - uint64_t bw_ctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_mio_pll_ctl_s cn30xx; - struct cvmx_mio_pll_ctl_s cn31xx; -} cvmx_mio_pll_ctl_t; - - -/** - * cvmx_mio_pll_setting - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_pll_setting_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t setting : 17; /**< Core PLL setting */ -#else - uint64_t setting : 17; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_mio_pll_setting_s cn30xx; - struct cvmx_mio_pll_setting_s cn31xx; -} cvmx_mio_pll_setting_t; - - -/** - * cvmx_mio_tws#_int - * - * MIO_TWSX_INT = TWSX Interrupt Register - * - * This register contains the TWSI interrupt enable mask and the interrupt source bits. Note: the - * interrupt source bit for the TWSI core interrupt (CORE_INT) is read-only, the appropriate sequence - * must be written to the TWSI core to clear this interrupt. The other interrupt source bits are write- - * one-to-clear. TS_INT is set on the update of the MIO_TWS_TWSI_SW register (i.e. when it is written - * by a TWSI device). ST_INT is set whenever the valid bit of the MIO_TWS_SW_TWSI is cleared (see above - * for reasons). - * - * Note: When using the high-level controller, CORE_EN should be clear and CORE_INT should be ignored. - * Conversely, when the high-level controller is disabled, ST_EN / TS_EN should be clear and ST_INT / - * TS_INT should be ignored. - * - * This register also contains a read-only copy of the TWSI bus (SCL and SDA) as well as control bits to - * override the current state of the TWSI bus (SCL_OVR and SDA_OVR). Setting an override bit high will - * result in the open drain driver being activated, thus driving the corresponding signal low. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_twsx_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t scl : 1; /**< SCL (NOT IN PASS1 OR PASS2) */ - uint64_t sda : 1; /**< SDA (NOT IN PASS1 OR PASS2) */ - uint64_t scl_ovr : 1; /**< SCL override (NOT IN PASS1 OR PASS2) */ - uint64_t sda_ovr : 1; /**< SDA override (NOT IN PASS1 OR PASS2) */ - uint64_t reserved_7_7 : 1; - uint64_t core_en : 1; /**< TWSI core interrupt enable */ - uint64_t ts_en : 1; /**< MIO_TWS_TWSI_SW register update interrupt enable */ - uint64_t st_en : 1; /**< MIO_TWS_SW_TWSI register update interrupt enable */ - uint64_t reserved_3_3 : 1; - uint64_t core_int : 1; /**< TWSI core interrupt */ - uint64_t ts_int : 1; /**< MIO_TWS_TWSI_SW register update interrupt */ - uint64_t st_int : 1; /**< MIO_TWS_SW_TWSI register update interrupt */ -#else - uint64_t st_int : 1; - uint64_t ts_int : 1; - uint64_t core_int : 1; - uint64_t reserved_3_3 : 1; - uint64_t st_en : 1; - uint64_t ts_en : 1; - uint64_t core_en : 1; - uint64_t reserved_7_7 : 1; - uint64_t sda_ovr : 1; - uint64_t scl_ovr : 1; - uint64_t sda : 1; - uint64_t scl : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_mio_twsx_int_s cn30xx; - struct cvmx_mio_twsx_int_s cn31xx; - struct cvmx_mio_twsx_int_s cn38xx; - struct cvmx_mio_twsx_int_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t core_en : 1; /**< TWSI core interrupt enable */ - uint64_t ts_en : 1; /**< MIO_TWS_TWSI_SW register update interrupt enable */ - uint64_t st_en : 1; /**< MIO_TWS_SW_TWSI register update interrupt enable */ - uint64_t reserved_3_3 : 1; - uint64_t core_int : 1; /**< TWSI core interrupt */ - uint64_t ts_int : 1; /**< MIO_TWS_TWSI_SW register update interrupt */ - uint64_t st_int : 1; /**< MIO_TWS_SW_TWSI register update interrupt */ -#else - uint64_t st_int : 1; - uint64_t ts_int : 1; - uint64_t core_int : 1; - uint64_t reserved_3_3 : 1; - uint64_t st_en : 1; - uint64_t ts_en : 1; - uint64_t core_en : 1; - uint64_t reserved_7_63 : 57; -#endif - } cn38xxp2; - struct cvmx_mio_twsx_int_s cn50xx; - struct cvmx_mio_twsx_int_s cn52xx; - struct cvmx_mio_twsx_int_s cn52xxp1; - struct cvmx_mio_twsx_int_s cn56xx; - struct cvmx_mio_twsx_int_s cn56xxp1; - struct cvmx_mio_twsx_int_s cn58xx; - struct cvmx_mio_twsx_int_s cn58xxp1; -} cvmx_mio_twsx_int_t; - - -/** - * cvmx_mio_tws#_sw_twsi - * - * MIO_TWSX_SW_TWSI = TWSX Software to TWSI Register - * - * This register allows software to - * - initiate TWSI interface master-mode operations with a write and read the result with a read - * - load four bytes for later retrieval (slave mode) with a write and check validity with a read - * - launch a TWSI controller configuration read/write with a write and read the result with a read - * - * This register should be read or written by software, and read by the TWSI device. The TWSI device can - * use either two-byte or five-byte reads to reference this register. - * - * The TWSI device considers this register valid when V==1 and SLONLY==1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_twsx_sw_twsi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t v : 1; /**< Valid bit - - Set on a write (should always be written with - a 1) - - Cleared when a TWSI master mode op completes - - Cleared when a TWSI configuration register - access completes - - Cleared when the TWSI device reads the - register if SLONLY==1 */ - uint64_t slonly : 1; /**< Slave Only Mode - - No operation is initiated with a write when - this bit is set - only D field is updated in - this case - - When clear, a write initiates either a TWSI - master-mode operation or a TWSI configuration - register access */ - uint64_t eia : 1; /**< Extended Internal Address - send additional - internal address byte (MSB of IA is from IA field - of MIO_TWS_SW_TWSI_EXT) (NOT IN PASS 1) */ - uint64_t op : 4; /**< Opcode field - When the register is written with - SLONLY==0, initiate a read or write: - 0000 => 7-bit Byte Master Mode TWSI Op - 0001 => 7-bit Byte Combined Read Master Mode Op - 7-bit Byte Write w/ IA Master Mode Op - 0010 => 10-bit Byte Master Mode TWSI Op - 0011 => 10-bit Byte Combined Read Master Mode Op - 10-bit Byte Write w/ IA Master Mode Op - 0100 => TWSI Master Clock Register - 0110 => See EOP field - 1000 => 7-bit 4-byte Master Mode TWSI Op - 1001 => 7-bit 4-byte Comb. Read Master Mode Op - 7-bit 4-byte Write w/ IA Master Mode Op - 1010 => 10-bit 4-byte Master Mode TWSI Op - 1011 => 10-bit 4-byte Comb. Read Master Mode Op - 10-bit 4-byte Write w/ IA Master Mode Op */ - uint64_t r : 1; /**< Read bit or result - - If set on a write when SLONLY==0, the - operation is a read - - On a read, this bit returns the result - indication for the most recent master mode - operation (1 = success, 0 = fail) */ - uint64_t sovr : 1; /**< Size Override - if set, use the SIZE field to - determine Master Mode Op size rather than what - the Opcode field specifies. For operations - greater than 4 bytes, the additional data will be - contained in the D field of MIO_TWS_SW_TWSI_EXT - (NOT IN PASS 1) */ - uint64_t size : 3; /**< Size in bytes of Master Mode Op if the Size - Override bit is set. Specified in -1 notation - (i.e. 0 = 1 byte, 1 = 2 bytes ... 7 = 8 bytes) - (NOT IN PASS 1) */ - uint64_t scr : 2; /**< Scratch - unused, but retain state */ - uint64_t a : 10; /**< Address field - - the address of the remote device for a master - mode operation - - A<9:7> are only used for 10-bit addressing */ - uint64_t ia : 5; /**< Internal Address - Used when launching a master - mode combined read / write with internal address - (lower 3 bits are contained in the EOP_IA field) */ - uint64_t eop_ia : 3; /**< Extra opcode (when OP<3:0> == 0110 and SLONLY==0): - 000 => TWSI Slave Address Register - 001 => TWSI Data Register - 010 => TWSI Control Register - 011 => TWSI Clock Control Register (when R == 0) - 011 => TWSI Status Register (when R == 1) - 100 => TWSI Extended Slave Register - 111 => TWSI Soft Reset Register - Also the lower 3 bits of Internal Address when - launching a master mode combined read / write - with internal address */ - uint64_t d : 32; /**< Data Field - Used on a write when - - initiating a master-mode write (SLONLY==0) - - writing a TWSI config register (SLONLY==0) - - a slave mode write (SLONLY==1) - The read value is updated by - - a write to this register - - master mode completion (contains result or - error code) - - TWSI config register read (contains result) */ -#else - uint64_t d : 32; - uint64_t eop_ia : 3; - uint64_t ia : 5; - uint64_t a : 10; - uint64_t scr : 2; - uint64_t size : 3; - uint64_t sovr : 1; - uint64_t r : 1; - uint64_t op : 4; - uint64_t eia : 1; - uint64_t slonly : 1; - uint64_t v : 1; -#endif - } s; - struct cvmx_mio_twsx_sw_twsi_s cn30xx; - struct cvmx_mio_twsx_sw_twsi_s cn31xx; - struct cvmx_mio_twsx_sw_twsi_s cn38xx; - struct cvmx_mio_twsx_sw_twsi_s cn38xxp2; - struct cvmx_mio_twsx_sw_twsi_s cn50xx; - struct cvmx_mio_twsx_sw_twsi_s cn52xx; - struct cvmx_mio_twsx_sw_twsi_s cn52xxp1; - struct cvmx_mio_twsx_sw_twsi_s cn56xx; - struct cvmx_mio_twsx_sw_twsi_s cn56xxp1; - struct cvmx_mio_twsx_sw_twsi_s cn58xx; - struct cvmx_mio_twsx_sw_twsi_s cn58xxp1; -} cvmx_mio_twsx_sw_twsi_t; - - -/** - * cvmx_mio_tws#_sw_twsi_ext - * - * MIO_TWSX_SW_TWSI_EXT = TWSX Software to TWSI Extension Register - * - * This register contains an additional byte of internal address and 4 additional bytes of data to be - * used with TWSI master mode operations. IA will be sent as the first byte of internal address when - * performing master mode combined read / write with internal address operations and the EIA bit of - * MIO_TWS_SW_TWSI is set. D extends the data field of MIO_TWS_SW_TWSI for a total of 8 bytes (SOVR - * must be set to perform operations greater than 4 bytes). - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_twsx_sw_twsi_ext_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ia : 8; /**< Extended Internal Address */ - uint64_t d : 32; /**< Extended Data Field */ -#else - uint64_t d : 32; - uint64_t ia : 8; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_mio_twsx_sw_twsi_ext_s cn30xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn31xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn38xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn38xxp2; - struct cvmx_mio_twsx_sw_twsi_ext_s cn50xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn52xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn52xxp1; - struct cvmx_mio_twsx_sw_twsi_ext_s cn56xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn56xxp1; - struct cvmx_mio_twsx_sw_twsi_ext_s cn58xx; - struct cvmx_mio_twsx_sw_twsi_ext_s cn58xxp1; -} cvmx_mio_twsx_sw_twsi_ext_t; - - -/** - * cvmx_mio_tws#_twsi_sw - * - * MIO_TWSX_TWSI_SW = TWSX TWSI to Software Register - * - * This register allows the TWSI device to transfer data to software and later check that software has - * received the information. - * - * This register should be read or written by the TWSI device, and read by software. The TWSI device can - * use one-byte or four-byte payload writes, and two-byte payload reads. - * - * The TWSI device considers this register valid when V==1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_twsx_twsi_sw_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t v : 2; /**< Valid Bits - - Not directly writable - - Set to 1 on any write by the TWSI device - - Cleared on any read by software */ - uint64_t reserved_32_61 : 30; - uint64_t d : 32; /**< Data Field - updated on a write by the TWSI device */ -#else - uint64_t d : 32; - uint64_t reserved_32_61 : 30; - uint64_t v : 2; -#endif - } s; - struct cvmx_mio_twsx_twsi_sw_s cn30xx; - struct cvmx_mio_twsx_twsi_sw_s cn31xx; - struct cvmx_mio_twsx_twsi_sw_s cn38xx; - struct cvmx_mio_twsx_twsi_sw_s cn38xxp2; - struct cvmx_mio_twsx_twsi_sw_s cn50xx; - struct cvmx_mio_twsx_twsi_sw_s cn52xx; - struct cvmx_mio_twsx_twsi_sw_s cn52xxp1; - struct cvmx_mio_twsx_twsi_sw_s cn56xx; - struct cvmx_mio_twsx_twsi_sw_s cn56xxp1; - struct cvmx_mio_twsx_twsi_sw_s cn58xx; - struct cvmx_mio_twsx_twsi_sw_s cn58xxp1; -} cvmx_mio_twsx_twsi_sw_t; - - -/** - * cvmx_mio_uart#_dlh - * - * MIO_UARTX_DLH = MIO UARTX Divisor Latch High Register - * - * The DLH (Divisor Latch High) register in conjunction with DLL (Divisor Latch Low) register form a - * 16-bit, read/write, Divisor Latch register that contains the baud rate divisor for the UART. It is - * accessed by first setting the DLAB bit (bit 7) in the Line Control Register (LCR). The output baud - * rate is equal to eclk frequency divided by sixteen times the value of the baud rate divisor, as - * follows: baud rate = eclk / (16 * divisor). - * - * Note that the BUSY bit (bit 0) of the UART Status Register (USR) must be clear before writing this - * register. BUSY bit is always clear in PASS3. - * - * Note that with the Divisor Latch Registers (DLL and DLH) set to zero, the baud clock is disabled - * and no serial communications will occur. Also, once the DLL or DLH is set, at least 8 clock cycles - * of eclk should be allowed to pass before transmitting or receiving data. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * IER and DLH registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_dlh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dlh : 8; /**< Divisor Latch High Register */ -#else - uint64_t dlh : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_dlh_s cn30xx; - struct cvmx_mio_uartx_dlh_s cn31xx; - struct cvmx_mio_uartx_dlh_s cn38xx; - struct cvmx_mio_uartx_dlh_s cn38xxp2; - struct cvmx_mio_uartx_dlh_s cn50xx; - struct cvmx_mio_uartx_dlh_s cn52xx; - struct cvmx_mio_uartx_dlh_s cn52xxp1; - struct cvmx_mio_uartx_dlh_s cn56xx; - struct cvmx_mio_uartx_dlh_s cn56xxp1; - struct cvmx_mio_uartx_dlh_s cn58xx; - struct cvmx_mio_uartx_dlh_s cn58xxp1; -} cvmx_mio_uartx_dlh_t; -typedef cvmx_mio_uartx_dlh_t cvmx_uart_dlh_t; - - -/** - * cvmx_mio_uart#_dll - * - * MIO_UARTX_DLL = MIO UARTX Divisor Latch Low Register - * - * The DLH (Divisor Latch High) register in conjunction with DLL (Divisor Latch Low) register form a - * 16-bit, read/write, Divisor Latch register that contains the baud rate divisor for the UART. It is - * accessed by first setting the DLAB bit (bit 7) in the Line Control Register (LCR). The output baud - * rate is equal to eclk frequency divided by sixteen times the value of the baud rate divisor, as - * follows: baud rate = eclk / (16 * divisor). - * - * Note that the BUSY bit (bit 0) of the UART Status Register (USR) must be clear before writing this - * register. BUSY bit is always clear in PASS3. - * - * Note that with the Divisor Latch Registers (DLL and DLH) set to zero, the baud clock is disabled - * and no serial communications will occur. Also, once the DLL or DLH is set, at least 8 clock cycles - * of eclk should be allowed to pass before transmitting or receiving data. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * RBR, THR, and DLL registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_dll_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dll : 8; /**< Divisor Latch Low Register */ -#else - uint64_t dll : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_dll_s cn30xx; - struct cvmx_mio_uartx_dll_s cn31xx; - struct cvmx_mio_uartx_dll_s cn38xx; - struct cvmx_mio_uartx_dll_s cn38xxp2; - struct cvmx_mio_uartx_dll_s cn50xx; - struct cvmx_mio_uartx_dll_s cn52xx; - struct cvmx_mio_uartx_dll_s cn52xxp1; - struct cvmx_mio_uartx_dll_s cn56xx; - struct cvmx_mio_uartx_dll_s cn56xxp1; - struct cvmx_mio_uartx_dll_s cn58xx; - struct cvmx_mio_uartx_dll_s cn58xxp1; -} cvmx_mio_uartx_dll_t; -typedef cvmx_mio_uartx_dll_t cvmx_uart_dll_t; - - -/** - * cvmx_mio_uart#_far - * - * MIO_UARTX_FAR = MIO UARTX FIFO Access Register - * - * The FIFO Access Register (FAR) is used to enable a FIFO access mode for testing, so that the receive - * FIFO can be written by software and the transmit FIFO can be read by software when the FIFOs are - * enabled. When FIFOs are not enabled it allows the RBR to be written by software and the THR to be read - * by software. Note, that when the FIFO access mode is enabled/disabled, the control portion of the - * receive FIFO and transmit FIFO is reset and the FIFOs are treated as empty. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_far_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t far : 1; /**< FIFO Access Register */ -#else - uint64_t far : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uartx_far_s cn30xx; - struct cvmx_mio_uartx_far_s cn31xx; - struct cvmx_mio_uartx_far_s cn38xx; - struct cvmx_mio_uartx_far_s cn38xxp2; - struct cvmx_mio_uartx_far_s cn50xx; - struct cvmx_mio_uartx_far_s cn52xx; - struct cvmx_mio_uartx_far_s cn52xxp1; - struct cvmx_mio_uartx_far_s cn56xx; - struct cvmx_mio_uartx_far_s cn56xxp1; - struct cvmx_mio_uartx_far_s cn58xx; - struct cvmx_mio_uartx_far_s cn58xxp1; -} cvmx_mio_uartx_far_t; -typedef cvmx_mio_uartx_far_t cvmx_uart_far_t; - - -/** - * cvmx_mio_uart#_fcr - * - * MIO_UARTX_FCR = MIO UARTX FIFO Control Register - * - * The FIFO Control Register (FCR) is a write-only register that controls the read and write data FIFO - * operation. When FIFOs and Programmable THRE Interrupt mode are enabled, this register also controls - * the THRE Interrupt empty threshold level. - * - * Setting bit 0 of the FCR enables the transmit and receive FIFOs. Whenever the value of this bit is - * changed both the TX and RX FIFOs will be reset. - * - * Writing a '1' to bit 1 of the FCR resets and flushes data in the receive FIFO. Note that this bit is - * self-clearing and it is not necessary to clear this bit. - * - * Writing a '1' to bit 2 of the FCR resets and flushes data in the transmit FIFO. Note that this bit is - * self-clearing and it is not necessary to clear this bit. - * - * If the FIFOs and Programmable THRE Interrupt mode are enabled, bits 4 and 5 control the empty - * threshold level at which THRE Interrupts are generated when the mode is active. See the following - * table for encodings: - * - * TX Trigger - * ---------- - * 00 = empty FIFO - * 01 = 2 chars in FIFO - * 10 = FIFO 1/4 full - * 11 = FIFO 1/2 full - * - * If the FIFO mode is enabled (bit 0 of the FCR is set to '1') bits 6 and 7 are active. Bit 6 and bit 7 - * set the trigger level in the receiver FIFO for the Enable Received Data Available Interrupt (ERBFI). - * In auto flow control mode the trigger is used to determine when the rts_n signal will be deasserted. - * See the following table for encodings: - * - * RX Trigger - * ---------- - * 00 = 1 char in FIFO - * 01 = FIFO 1/4 full - * 10 = FIFO 1/2 full - * 11 = FIFO 2 chars less than full - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * IIR and FCR registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_fcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rxtrig : 2; /**< RX Trigger */ - uint64_t txtrig : 2; /**< TX Trigger */ - uint64_t reserved_3_3 : 1; - uint64_t txfr : 1; /**< TX FIFO reset */ - uint64_t rxfr : 1; /**< RX FIFO reset */ - uint64_t en : 1; /**< FIFO enable */ -#else - uint64_t en : 1; - uint64_t rxfr : 1; - uint64_t txfr : 1; - uint64_t reserved_3_3 : 1; - uint64_t txtrig : 2; - uint64_t rxtrig : 2; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_fcr_s cn30xx; - struct cvmx_mio_uartx_fcr_s cn31xx; - struct cvmx_mio_uartx_fcr_s cn38xx; - struct cvmx_mio_uartx_fcr_s cn38xxp2; - struct cvmx_mio_uartx_fcr_s cn50xx; - struct cvmx_mio_uartx_fcr_s cn52xx; - struct cvmx_mio_uartx_fcr_s cn52xxp1; - struct cvmx_mio_uartx_fcr_s cn56xx; - struct cvmx_mio_uartx_fcr_s cn56xxp1; - struct cvmx_mio_uartx_fcr_s cn58xx; - struct cvmx_mio_uartx_fcr_s cn58xxp1; -} cvmx_mio_uartx_fcr_t; -typedef cvmx_mio_uartx_fcr_t cvmx_uart_fcr_t; - - -/** - * cvmx_mio_uart#_htx - * - * MIO_UARTX_HTX = MIO UARTX Halt TX Register - * - * The Halt TX Register (HTX) is used to halt transmissions for testing, so that the transmit FIFO can be - * filled by software when FIFOs are enabled. If FIFOs are not enabled, setting the HTX register will - * have no effect. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_htx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t htx : 1; /**< Halt TX */ -#else - uint64_t htx : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uartx_htx_s cn30xx; - struct cvmx_mio_uartx_htx_s cn31xx; - struct cvmx_mio_uartx_htx_s cn38xx; - struct cvmx_mio_uartx_htx_s cn38xxp2; - struct cvmx_mio_uartx_htx_s cn50xx; - struct cvmx_mio_uartx_htx_s cn52xx; - struct cvmx_mio_uartx_htx_s cn52xxp1; - struct cvmx_mio_uartx_htx_s cn56xx; - struct cvmx_mio_uartx_htx_s cn56xxp1; - struct cvmx_mio_uartx_htx_s cn58xx; - struct cvmx_mio_uartx_htx_s cn58xxp1; -} cvmx_mio_uartx_htx_t; -typedef cvmx_mio_uartx_htx_t cvmx_uart_htx_t; - - -/** - * cvmx_mio_uart#_ier - * - * MIO_UARTX_IER = MIO UARTX Interrupt Enable Register - * - * Interrupt Enable Register (IER) is a read/write register that contains four bits that enable - * the generation of interrupts. These four bits are the Enable Received Data Available Interrupt - * (ERBFI), the Enable Transmitter Holding Register Empty Interrupt (ETBEI), the Enable Receiver Line - * Status Interrupt (ELSI), and the Enable Modem Status Interrupt (EDSSI). - * - * The IER also contains an enable bit (PTIME) for the Programmable THRE Interrupt mode. - * - * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access - * this register. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * IER and DLH registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_ier_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ptime : 1; /**< Programmable THRE Interrupt mode enable */ - uint64_t reserved_4_6 : 3; - uint64_t edssi : 1; /**< Enable Modem Status Interrupt */ - uint64_t elsi : 1; /**< Enable Receiver Line Status Interrupt */ - uint64_t etbei : 1; /**< Enable Transmitter Holding Register Empty Interrupt */ - uint64_t erbfi : 1; /**< Enable Received Data Available Interrupt */ -#else - uint64_t erbfi : 1; - uint64_t etbei : 1; - uint64_t elsi : 1; - uint64_t edssi : 1; - uint64_t reserved_4_6 : 3; - uint64_t ptime : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_ier_s cn30xx; - struct cvmx_mio_uartx_ier_s cn31xx; - struct cvmx_mio_uartx_ier_s cn38xx; - struct cvmx_mio_uartx_ier_s cn38xxp2; - struct cvmx_mio_uartx_ier_s cn50xx; - struct cvmx_mio_uartx_ier_s cn52xx; - struct cvmx_mio_uartx_ier_s cn52xxp1; - struct cvmx_mio_uartx_ier_s cn56xx; - struct cvmx_mio_uartx_ier_s cn56xxp1; - struct cvmx_mio_uartx_ier_s cn58xx; - struct cvmx_mio_uartx_ier_s cn58xxp1; -} cvmx_mio_uartx_ier_t; -typedef cvmx_mio_uartx_ier_t cvmx_uart_ier_t; - - -/** - * cvmx_mio_uart#_iir - * - * MIO_UARTX_IIR = MIO UARTX Interrupt Identity Register - * - * The Interrupt Identity Register (IIR) is a read-only register that identifies the source of an - * interrupt. The upper two bits of the register are FIFO-enabled bits. These bits are '00' if the FIFOs - * are disabled, and '11' if they are enabled. The lower four bits identify the highest priority pending - * interrupt. The following table defines interrupt source decoding, interrupt priority, and interrupt - * reset control: - * - * Interrupt Priority Interrupt Interrupt Interrupt - * ID Level Type Source Reset By - * --------------------------------------------------------------------------------------------------------------------------------- - * 0001 - None None - - * - * 0110 Highest Receiver Line Overrun, parity, or framing errors or break Reading the Line Status Register - * Status interrupt - * - * 0100 Second Received Data Receiver data available (FIFOs disabled) or Reading the Receiver Buffer Register - * Available RX FIFO trigger level reached (FIFOs (FIFOs disabled) or the FIFO drops below - * enabled) the trigger level (FIFOs enabled) - * - * 1100 Second Character No characters in or out of the RX FIFO Reading the Receiver Buffer Register - * Timeout during the last 4 character times and there - * Indication is at least 1 character in it during this - * time - * - * 0010 Third Transmitter Transmitter Holding Register Empty Reading the Interrupt Identity Register - * Holding (Programmable THRE Mode disabled) or TX (if source of interrupt) or writing into - * Register FIFO at or below threshold (Programmable THR (FIFOs or THRE Mode disabled) or TX - * Empty THRE Mode enabled) FIFO above threshold (FIFOs and THRE - * Mode enabled) - * - * 0000 Fourth Modem Status Clear To Send (CTS) or Data Set Ready (DSR) Reading the Modem Status Register - * Changed or Ring Indicator (RI) or Data Carrier - * Detect (DCD) changed (note: if auto flow - * control mode is enabled, a change in CTS - * will not cause an interrupt) - * - * 0111 Fifth Busy Detect Software has tried to write to the Line Reading the UART Status Register - * Indication Control Register while the BUSY bit of the - * UART Status Register was set - * - * Note: The Busy Detect Indication interrupt has been removed from PASS3 and will never assert. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * IIR and FCR registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_iir_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t fen : 2; /**< FIFO-enabled bits */ - uint64_t reserved_4_5 : 2; - cvmx_uart_iid_t iid : 4; /**< Interrupt ID */ -#else - cvmx_uart_iid_t iid : 4; - uint64_t reserved_4_5 : 2; - uint64_t fen : 2; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_iir_s cn30xx; - struct cvmx_mio_uartx_iir_s cn31xx; - struct cvmx_mio_uartx_iir_s cn38xx; - struct cvmx_mio_uartx_iir_s cn38xxp2; - struct cvmx_mio_uartx_iir_s cn50xx; - struct cvmx_mio_uartx_iir_s cn52xx; - struct cvmx_mio_uartx_iir_s cn52xxp1; - struct cvmx_mio_uartx_iir_s cn56xx; - struct cvmx_mio_uartx_iir_s cn56xxp1; - struct cvmx_mio_uartx_iir_s cn58xx; - struct cvmx_mio_uartx_iir_s cn58xxp1; -} cvmx_mio_uartx_iir_t; -typedef cvmx_mio_uartx_iir_t cvmx_uart_iir_t; - - -/** - * cvmx_mio_uart#_lcr - * - * MIO_UARTX_LCR = MIO UARTX Line Control Register - * - * The Line Control Register (LCR) controls the format of the data that is transmitted and received by - * the UART. - * - * LCR bits 0 and 1 are the Character Length Select field. This field is used to select the number of - * data bits per character that are transmitted and received. See the following table for encodings: - * - * CLS - * --- - * 00 = 5 bits (bits 0-4 sent) - * 01 = 6 bits (bits 0-5 sent) - * 10 = 7 bits (bits 0-6 sent) - * 11 = 8 bits (all bits sent) - * - * LCR bit 2 controls the number of stop bits transmitted. If bit 2 is a '0', one stop bit is transmitted - * in the serial data. If bit 2 is a '1' and the data bits are set to '00', one and a half stop bits are - * generated. Otherwise, two stop bits are generated and transmitted in the serial data out. Note that - * regardless of the number of stop bits selected the receiver will only check the first stop bit. - * - * LCR bit 3 is the Parity Enable bit. This bit is used to enable and disable parity generation and - * detection in transmitted and received serial character respectively. - * - * LCR bit 4 is the Even Parity Select bit. If parity is enabled, bit 4 selects between even and odd - * parity. If bit 4 is a '1', an even number of ones is transmitted or checked. If bit 4 is a '0', an odd - * number of ones is transmitted or checked. - * - * LCR bit 6 is the Break Control bit. Setting the Break bit sends a break signal by holding the sout - * line low (when not in Loopback mode, as determined by Modem Control Register bit 4). When in Loopback - * mode, the break condition is internally looped back to the receiver. - * - * LCR bit 7 is the Divisor Latch Address bit. Setting this bit enables reading and writing of the - * Divisor Latch register (DLL and DLH) to set the baud rate of the UART. This bit must be cleared after - * initial baud rate setup in order to access other registers. - * - * Note: The LCR is writeable only when the UART is not busy (when the BUSY bit (bit 0) of the UART - * Status Register (USR) is clear). The LCR is always readable. In PASS3, the LCR is always writable - * because the BUSY bit is always clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_lcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dlab : 1; /**< Divisor Latch Address bit */ - uint64_t brk : 1; /**< Break Control bit */ - uint64_t reserved_5_5 : 1; - uint64_t eps : 1; /**< Even Parity Select bit */ - uint64_t pen : 1; /**< Parity Enable bit */ - uint64_t stop : 1; /**< Stop Control bit */ - cvmx_uart_bits_t cls : 2; /**< Character Length Select */ -#else - cvmx_uart_bits_t cls : 2; - uint64_t stop : 1; - uint64_t pen : 1; - uint64_t eps : 1; - uint64_t reserved_5_5 : 1; - uint64_t brk : 1; - uint64_t dlab : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_lcr_s cn30xx; - struct cvmx_mio_uartx_lcr_s cn31xx; - struct cvmx_mio_uartx_lcr_s cn38xx; - struct cvmx_mio_uartx_lcr_s cn38xxp2; - struct cvmx_mio_uartx_lcr_s cn50xx; - struct cvmx_mio_uartx_lcr_s cn52xx; - struct cvmx_mio_uartx_lcr_s cn52xxp1; - struct cvmx_mio_uartx_lcr_s cn56xx; - struct cvmx_mio_uartx_lcr_s cn56xxp1; - struct cvmx_mio_uartx_lcr_s cn58xx; - struct cvmx_mio_uartx_lcr_s cn58xxp1; -} cvmx_mio_uartx_lcr_t; -typedef cvmx_mio_uartx_lcr_t cvmx_uart_lcr_t; - - -/** - * cvmx_mio_uart#_lsr - * - * MIO_UARTX_LSR = MIO UARTX Line Status Register - * - * The Line Status Register (LSR) contains status of the receiver and transmitter data transfers. This - * status can be read by the user at anytime. - * - * LSR bit 0 is the Data Ready (DR) bit. When set, this bit indicates the receiver contains at least one - * character in the RBR or the receiver FIFO. This bit is cleared when the RBR is read in the non-FIFO - * mode, or when the receiver FIFO is empty, in FIFO mode. - * - * LSR bit 1 is the Overrun Error (OE) bit. When set, this bit indicates an overrun error has occurred - * because a new data character was received before the previous data was read. In the non-FIFO mode, the - * OE bit is set when a new character arrives in the receiver before the previous character was read from - * the RBR. When this happens, the data in the RBR is overwritten. In the FIFO mode, an overrun error - * occurs when the FIFO is full and a new character arrives at the receiver. The data in the FIFO is - * retained and the data in the receive shift register is lost. - * - * LSR bit 2 is the Parity Error (PE) bit. This bit is set whenever there is a parity error in the - * receiver if the Parity Enable (PEN) bit in the LCR is set. In the FIFO mode, since the parity error is - * associated with a character received, it is revealed when the character with the parity error arrives - * at the top of the FIFO. It should be noted that the Parity Error (PE) bit will be set if a break - * interrupt has occurred, as indicated by the Break Interrupt (BI) bit. - * - * LSR bit 3 is the Framing Error (FE) bit. This bit is set whenever there is a framing error in the - * receiver. A framing error occurs when the receiver does not detect a valid STOP bit in the received - * data. In the FIFO mode, since the framing error is associated with a character received, it is - * revealed when the character with the framing error is at the top of the FIFO. When a framing error - * occurs the UART will try resynchronize. It does this by assuming that the error was due to the start - * bit of the next character and then continues receiving the other bits (i.e. data and/or parity and - * stop). It should be noted that the Framing Error (FE) bit will be set if a break interrupt has - * occurred, as indicated by the Break Interrupt (BI) bit. - * - * Note: The OE, PE, and FE bits are reset when a read of the LSR is performed. - * - * LSR bit 4 is the Break Interrupt (BI) bit. This bit is set whenever the serial input (sin) is held in - * a 0 state for longer than the sum of start time + data bits + parity + stop bits. A break condition on - * sin causes one and only one character, consisting of all zeros, to be received by the UART. In the - * FIFO mode, the character associated with the break condition is carried through the FIFO and is - * revealed when the character is at the top of the FIFO. Reading the LSR clears the BI bit. In the non- - * FIFO mode, the BI indication occurs immediately and persists until the LSR is read. - * - * LSR bit 5 is the Transmitter Holding Register Empty (THRE) bit. When Programmable THRE Interrupt mode - * is disabled, this bit indicates that the UART can accept a new character for transmission. This bit is - * set whenever data is transferred from the THR (or TX FIFO) to the transmitter shift register and no - * new data has been written to the THR (or TX FIFO). This also causes a THRE Interrupt to occur, if the - * THRE Interrupt is enabled. When FIFOs and Programmable THRE Interrupt mode are enabled, LSR bit 5 - * functionality is switched to indicate the transmitter FIFO is full, and no longer controls THRE - * Interrupts, which are then controlled by the FCR[5:4] threshold setting. - * - * LSR bit 6 is the Transmitter Empty (TEMT) bit. In the FIFO mode, this bit is set whenever the - * Transmitter Shift Register and the FIFO are both empty. In the non-FIFO mode, this bit is set whenever - * the Transmitter Holding Register and the Transmitter Shift Register are both empty. This bit is - * typically used to make sure it is safe to change control registers. Changing control registers while - * the transmitter is busy can result in corrupt data being transmitted. - * - * LSR bit 7 is the Error in Receiver FIFO (FERR) bit. This bit is active only when FIFOs are enabled. It - * is set when there is at least one parity error, framing error, or break indication in the FIFO. This - * bit is cleared when the LSR is read and the character with the error is at the top of the receiver - * FIFO and there are no subsequent errors in the FIFO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_lsr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ferr : 1; /**< Error in Receiver FIFO bit */ - uint64_t temt : 1; /**< Transmitter Empty bit */ - uint64_t thre : 1; /**< Transmitter Holding Register Empty bit */ - uint64_t bi : 1; /**< Break Interrupt bit */ - uint64_t fe : 1; /**< Framing Error bit */ - uint64_t pe : 1; /**< Parity Error bit */ - uint64_t oe : 1; /**< Overrun Error bit */ - uint64_t dr : 1; /**< Data Ready bit */ -#else - uint64_t dr : 1; - uint64_t oe : 1; - uint64_t pe : 1; - uint64_t fe : 1; - uint64_t bi : 1; - uint64_t thre : 1; - uint64_t temt : 1; - uint64_t ferr : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_lsr_s cn30xx; - struct cvmx_mio_uartx_lsr_s cn31xx; - struct cvmx_mio_uartx_lsr_s cn38xx; - struct cvmx_mio_uartx_lsr_s cn38xxp2; - struct cvmx_mio_uartx_lsr_s cn50xx; - struct cvmx_mio_uartx_lsr_s cn52xx; - struct cvmx_mio_uartx_lsr_s cn52xxp1; - struct cvmx_mio_uartx_lsr_s cn56xx; - struct cvmx_mio_uartx_lsr_s cn56xxp1; - struct cvmx_mio_uartx_lsr_s cn58xx; - struct cvmx_mio_uartx_lsr_s cn58xxp1; -} cvmx_mio_uartx_lsr_t; -typedef cvmx_mio_uartx_lsr_t cvmx_uart_lsr_t; - - -/** - * cvmx_mio_uart#_mcr - * - * MIO_UARTX_MCR = MIO UARTX Modem Control Register - * - * The lower four bits of the Modem Control Register (MCR) directly manipulate the outputs of the UART. - * The DTR (bit 0), RTS (bit 1), OUT1 (bit 2), and OUT2 (bit 3) bits are inverted and then drive the - * corresponding UART outputs, dtr_n, rts_n, out1_n, and out2_n. In loopback mode, these outputs are - * driven inactive high while the values in these locations are internally looped back to the inputs. - * - * Note: When Auto RTS is enabled, the rts_n output is controlled in the same way, but is also gated - * with the receiver FIFO threshold trigger (rts_n is inactive high when above the threshold). The - * rts_n output will be de-asserted whenever RTS (bit 1) is set low. - * - * Note: The UART0 out1_n and out2_n outputs are not present on the pins of the chip, but the UART0 OUT1 - * and OUT2 bits still function in Loopback mode. The UART1 dtr_n, out1_n, and out2_n outputs are not - * present on the pins of the chip, but the UART1 DTR, OUT1, and OUT2 bits still function in Loopback - * mode. - * - * MCR bit 4 is the Loopback bit. When set, data on the sout line is held high, while serial data output - * is looped back to the sin line, internally. In this mode all the interrupts are fully functional. This - * feature is used for diagnostic purposes. Also, in loopback mode, the modem control inputs (dsr_n, - * cts_n, ri_n, dcd_n) are disconnected and the four modem control outputs (dtr_n, rts_n, out1_n, out1_n) - * are looped back to the inputs, internally. - * - * MCR bit 5 is the Auto Flow Control Enable (AFCE) bit. When FIFOs are enabled and this bit is set, - * 16750-compatible Auto RTS and Auto CTS serial data flow control features are enabled. - * - * Auto RTS becomes active when the following occurs: - * 1. MCR bit 1 is set - * 2. FIFOs are enabled by setting FIFO Control Register (FCR) bit 0 - * 3. MCR bit 5 is set (must be set after FCR bit 0) - * - * When active, the rts_n output is forced inactive-high when the receiver FIFO level reaches the - * threshold set by FCR[7:6]. When rts_n is connected to the cts_n input of another UART device, the - * other UART stops sending serial data until the receiver FIFO has available space. - * - * The selectable receiver FIFO threshold values are: 1, 1/4, 1/2, and 2 less than full. Since one - * additional character may be transmitted to the UART after rts_n has become inactive (due to data - * already having entered the transmitter block in the other UART), setting the threshold to 2 less - * than full allows maximum use of the FIFO with a safety zone of one character. - * - * Once the receiver FIFO becomes completely empty by reading the Receiver Buffer Register (RBR), rts_n - * again becomes active-low, signalling the other UART to continue sending data. It is important to note - * that, even if everything else is set to Enabled and the correct MCR bits are set, if the FIFOs are - * disabled through FCR[0], Auto Flow Control is also disabled. When Auto RTS is disabled or inactive, - * rts_n is controlled solely by MCR[1]. - * - * Auto CTS becomes active when the following occurs: - * 1. FIFOs are enabled by setting FIFO Control Register (FCR) bit 0 - * 2. MCR bit 5 is set (must be set after FCR bit 0) - * - * When active, the UART transmitter is disabled whenever the cts_n input becomes inactive-high. This - * prevents overflowing the FIFO of the receiving UART. - * - * Note that, if the cts_n input is not inactivated before the middle of the last stop bit, another - * character is transmitted before the transmitter is disabled. While the transmitter is disabled, the - * transmitter FIFO can still be written to, and even overflowed. Therefore, when using this mode, either - * the true FIFO depth (64 characters) must be known to software, or the Programmable THRE Interrupt mode - * must be enabled to access the FIFO full status through the Line Status Register. When using the FIFO - * full status, software can poll this before each write to the Transmitter FIFO. - * - * Note: FIFO full status is also available in the UART Status Register (USR) or the actual level of the - * FIFO may be read through the Transmit FIFO Level (TFL) register. - * - * When the cts_n input becomes active-low again, transmission resumes. It is important to note that, - * even if everything else is set to Enabled, Auto Flow Control is also disabled if the FIFOs are - * disabled through FCR[0]. When Auto CTS is disabled or inactive, the transmitter is unaffected by - * cts_n. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_mcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t afce : 1; /**< Auto Flow Control Enable bit */ - uint64_t loop : 1; /**< Loopback bit */ - uint64_t out2 : 1; /**< OUT2 output bit */ - uint64_t out1 : 1; /**< OUT1 output bit */ - uint64_t rts : 1; /**< Request To Send output bit */ - uint64_t dtr : 1; /**< Data Terminal Ready output bit */ -#else - uint64_t dtr : 1; - uint64_t rts : 1; - uint64_t out1 : 1; - uint64_t out2 : 1; - uint64_t loop : 1; - uint64_t afce : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_mio_uartx_mcr_s cn30xx; - struct cvmx_mio_uartx_mcr_s cn31xx; - struct cvmx_mio_uartx_mcr_s cn38xx; - struct cvmx_mio_uartx_mcr_s cn38xxp2; - struct cvmx_mio_uartx_mcr_s cn50xx; - struct cvmx_mio_uartx_mcr_s cn52xx; - struct cvmx_mio_uartx_mcr_s cn52xxp1; - struct cvmx_mio_uartx_mcr_s cn56xx; - struct cvmx_mio_uartx_mcr_s cn56xxp1; - struct cvmx_mio_uartx_mcr_s cn58xx; - struct cvmx_mio_uartx_mcr_s cn58xxp1; -} cvmx_mio_uartx_mcr_t; -typedef cvmx_mio_uartx_mcr_t cvmx_uart_mcr_t; - - -/** - * cvmx_mio_uart#_msr - * - * MIO_UARTX_MSR = MIO UARTX Modem Status Register - * - * The Modem Status Register (MSR) contains the current status of the modem control input lines and if - * they changed. - * - * DCTS (bit 0), DDSR (bit 1), and DDCD (bit 3) bits record whether the modem control lines (cts_n, - * dsr_n, and dcd_n) have changed since the last time the user read the MSR. TERI (bit 2) indicates ri_n - * has changed from an active-low, to an inactive-high state since the last time the MSR was read. In - * Loopback mode, DCTS reflects changes on MCR bit 1 (RTS), DDSR reflects changes on MCR bit 0 (DTR), and - * DDCD reflects changes on MCR bit 3 (Out2), while TERI reflects when MCR bit 2 (Out1) has changed state - * from a high to a low. - * - * Note: if the DCTS bit is not set and the cts_n signal is asserted (low) and a reset occurs (software - * or otherwise), then the DCTS bit will get set when the reset is removed if the cts_n signal remains - * asserted. - * - * The CTS, DSR, RI, and DCD Modem Status bits contain information on the current state of the modem - * control lines. CTS (bit 4) is the compliment of cts_n, DSR (bit 5) is the compliment of dsr_n, RI - * (bit 6) is the compliment of ri_n, and DCD (bit 7) is the compliment of dcd_n. In Loopback mode, CTS - * is the same as MCR bit 1 (RTS), DSR is the same as MCR bit 0 (DTR), RI is the same as MCR bit 2 - * (Out1), and DCD is the same as MCR bit 3 (Out2). - * - * Note: The UART0 dsr_n and ri_n inputs are internally tied to power and not present on the pins of chip. - * Thus the UART0 DSR and RI bits will be '0' when not in Loopback mode. The UART1 dsr_n, ri_n, and dcd_n - * inputs are internally tied to power and not present on the pins of chip. Thus the UART1 DSR, RI, and - * DCD bits will be '0' when not in Loopback mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_msr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dcd : 1; /**< Data Carrier Detect input bit */ - uint64_t ri : 1; /**< Ring Indicator input bit */ - uint64_t dsr : 1; /**< Data Set Ready input bit */ - uint64_t cts : 1; /**< Clear To Send input bit */ - uint64_t ddcd : 1; /**< Delta Data Carrier Detect bit */ - uint64_t teri : 1; /**< Trailing Edge of Ring Indicator bit */ - uint64_t ddsr : 1; /**< Delta Data Set Ready bit */ - uint64_t dcts : 1; /**< Delta Clear To Send bit */ -#else - uint64_t dcts : 1; - uint64_t ddsr : 1; - uint64_t teri : 1; - uint64_t ddcd : 1; - uint64_t cts : 1; - uint64_t dsr : 1; - uint64_t ri : 1; - uint64_t dcd : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_msr_s cn30xx; - struct cvmx_mio_uartx_msr_s cn31xx; - struct cvmx_mio_uartx_msr_s cn38xx; - struct cvmx_mio_uartx_msr_s cn38xxp2; - struct cvmx_mio_uartx_msr_s cn50xx; - struct cvmx_mio_uartx_msr_s cn52xx; - struct cvmx_mio_uartx_msr_s cn52xxp1; - struct cvmx_mio_uartx_msr_s cn56xx; - struct cvmx_mio_uartx_msr_s cn56xxp1; - struct cvmx_mio_uartx_msr_s cn58xx; - struct cvmx_mio_uartx_msr_s cn58xxp1; -} cvmx_mio_uartx_msr_t; -typedef cvmx_mio_uartx_msr_t cvmx_uart_msr_t; - - -/** - * cvmx_mio_uart#_rbr - * - * MIO_UARTX_RBR = MIO UARTX Receive Buffer Register - * - * The Receive Buffer Register (RBR) is a read-only register that contains the data byte received on the - * serial input port (sin). The data in this register is valid only if the Data Ready (DR) bit in the - * Line status Register (LSR) is set. When the FIFOs are programmed OFF, the data in the RBR must be - * read before the next data arrives, otherwise it is overwritten, resulting in an overrun error. When - * the FIFOs are programmed ON, this register accesses the head of the receive FIFO. If the receive FIFO - * is full (64 characters) and this register is not read before the next data character arrives, then the - * data already in the FIFO is preserved, but any incoming data is lost. An overrun error also occurs. - * - * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access - * this register. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * RBR, THR, and DLL registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_rbr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rbr : 8; /**< Receive Buffer Register */ -#else - uint64_t rbr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_rbr_s cn30xx; - struct cvmx_mio_uartx_rbr_s cn31xx; - struct cvmx_mio_uartx_rbr_s cn38xx; - struct cvmx_mio_uartx_rbr_s cn38xxp2; - struct cvmx_mio_uartx_rbr_s cn50xx; - struct cvmx_mio_uartx_rbr_s cn52xx; - struct cvmx_mio_uartx_rbr_s cn52xxp1; - struct cvmx_mio_uartx_rbr_s cn56xx; - struct cvmx_mio_uartx_rbr_s cn56xxp1; - struct cvmx_mio_uartx_rbr_s cn58xx; - struct cvmx_mio_uartx_rbr_s cn58xxp1; -} cvmx_mio_uartx_rbr_t; -typedef cvmx_mio_uartx_rbr_t cvmx_uart_rbr_t; - - -/** - * cvmx_mio_uart#_rfl - * - * MIO_UARTX_RFL = MIO UARTX Receive FIFO Level Register - * - * The Receive FIFO Level Register (RFL) indicates the number of data entries in the receive FIFO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_rfl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t rfl : 7; /**< Receive FIFO Level Register */ -#else - uint64_t rfl : 7; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mio_uartx_rfl_s cn30xx; - struct cvmx_mio_uartx_rfl_s cn31xx; - struct cvmx_mio_uartx_rfl_s cn38xx; - struct cvmx_mio_uartx_rfl_s cn38xxp2; - struct cvmx_mio_uartx_rfl_s cn50xx; - struct cvmx_mio_uartx_rfl_s cn52xx; - struct cvmx_mio_uartx_rfl_s cn52xxp1; - struct cvmx_mio_uartx_rfl_s cn56xx; - struct cvmx_mio_uartx_rfl_s cn56xxp1; - struct cvmx_mio_uartx_rfl_s cn58xx; - struct cvmx_mio_uartx_rfl_s cn58xxp1; -} cvmx_mio_uartx_rfl_t; -typedef cvmx_mio_uartx_rfl_t cvmx_uart_rfl_t; - - -/** - * cvmx_mio_uart#_rfw - * - * MIO_UARTX_RFW = MIO UARTX Receive FIFO Write Register - * - * The Receive FIFO Write Register (RFW) is only valid when FIFO access mode is enabled (FAR bit 0 is - * set). When FIFOs are enabled, this register is used to write data to the receive FIFO. Each - * consecutive write pushes the new data to the next write location in the receive FIFO. When FIFOs are - * not enabled, this register is used to write data to the RBR. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_rfw_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t rffe : 1; /**< Receive FIFO Framing Error */ - uint64_t rfpe : 1; /**< Receive FIFO Parity Error */ - uint64_t rfwd : 8; /**< Receive FIFO Write Data */ -#else - uint64_t rfwd : 8; - uint64_t rfpe : 1; - uint64_t rffe : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_mio_uartx_rfw_s cn30xx; - struct cvmx_mio_uartx_rfw_s cn31xx; - struct cvmx_mio_uartx_rfw_s cn38xx; - struct cvmx_mio_uartx_rfw_s cn38xxp2; - struct cvmx_mio_uartx_rfw_s cn50xx; - struct cvmx_mio_uartx_rfw_s cn52xx; - struct cvmx_mio_uartx_rfw_s cn52xxp1; - struct cvmx_mio_uartx_rfw_s cn56xx; - struct cvmx_mio_uartx_rfw_s cn56xxp1; - struct cvmx_mio_uartx_rfw_s cn58xx; - struct cvmx_mio_uartx_rfw_s cn58xxp1; -} cvmx_mio_uartx_rfw_t; -typedef cvmx_mio_uartx_rfw_t cvmx_uart_rfw_t; - - -/** - * cvmx_mio_uart#_sbcr - * - * MIO_UARTX_SBCR = MIO UARTX Shadow Break Control Register - * - * The Shadow Break Control Register (SBCR) is a shadow register for the BREAK bit (LCR bit 6) that can - * be used to remove the burden of having to perform a read-modify-write on the LCR. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_sbcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t sbcr : 1; /**< Shadow Break Control */ -#else - uint64_t sbcr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uartx_sbcr_s cn30xx; - struct cvmx_mio_uartx_sbcr_s cn31xx; - struct cvmx_mio_uartx_sbcr_s cn38xx; - struct cvmx_mio_uartx_sbcr_s cn38xxp2; - struct cvmx_mio_uartx_sbcr_s cn50xx; - struct cvmx_mio_uartx_sbcr_s cn52xx; - struct cvmx_mio_uartx_sbcr_s cn52xxp1; - struct cvmx_mio_uartx_sbcr_s cn56xx; - struct cvmx_mio_uartx_sbcr_s cn56xxp1; - struct cvmx_mio_uartx_sbcr_s cn58xx; - struct cvmx_mio_uartx_sbcr_s cn58xxp1; -} cvmx_mio_uartx_sbcr_t; -typedef cvmx_mio_uartx_sbcr_t cvmx_uart_sbcr_t; - - -/** - * cvmx_mio_uart#_scr - * - * MIO_UARTX_SCR = MIO UARTX Scratchpad Register - * - * The Scratchpad Register (SCR) is an 8-bit read/write register for programmers to use as a temporary - * storage space. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_scr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t scr : 8; /**< Scratchpad Register */ -#else - uint64_t scr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_scr_s cn30xx; - struct cvmx_mio_uartx_scr_s cn31xx; - struct cvmx_mio_uartx_scr_s cn38xx; - struct cvmx_mio_uartx_scr_s cn38xxp2; - struct cvmx_mio_uartx_scr_s cn50xx; - struct cvmx_mio_uartx_scr_s cn52xx; - struct cvmx_mio_uartx_scr_s cn52xxp1; - struct cvmx_mio_uartx_scr_s cn56xx; - struct cvmx_mio_uartx_scr_s cn56xxp1; - struct cvmx_mio_uartx_scr_s cn58xx; - struct cvmx_mio_uartx_scr_s cn58xxp1; -} cvmx_mio_uartx_scr_t; -typedef cvmx_mio_uartx_scr_t cvmx_uart_scr_t; - - -/** - * cvmx_mio_uart#_sfe - * - * MIO_UARTX_SFE = MIO UARTX Shadow FIFO Enable Register - * - * The Shadow FIFO Enable Register (SFE) is a shadow register for the FIFO enable bit (FCR bit 0) that - * can be used to remove the burden of having to store the previously written value to the FCR in memory - * and having to mask this value so that only the FIFO enable bit gets updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_sfe_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t sfe : 1; /**< Shadow FIFO Enable */ -#else - uint64_t sfe : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uartx_sfe_s cn30xx; - struct cvmx_mio_uartx_sfe_s cn31xx; - struct cvmx_mio_uartx_sfe_s cn38xx; - struct cvmx_mio_uartx_sfe_s cn38xxp2; - struct cvmx_mio_uartx_sfe_s cn50xx; - struct cvmx_mio_uartx_sfe_s cn52xx; - struct cvmx_mio_uartx_sfe_s cn52xxp1; - struct cvmx_mio_uartx_sfe_s cn56xx; - struct cvmx_mio_uartx_sfe_s cn56xxp1; - struct cvmx_mio_uartx_sfe_s cn58xx; - struct cvmx_mio_uartx_sfe_s cn58xxp1; -} cvmx_mio_uartx_sfe_t; -typedef cvmx_mio_uartx_sfe_t cvmx_uart_sfe_t; - - -/** - * cvmx_mio_uart#_srr - * - * MIO_UARTX_SRR = MIO UARTX Software Reset Register - * - * The Software Reset Register (SRR) is a write-only register that resets the UART and/or the receive - * FIFO and/or the transmit FIFO. - * - * Bit 0 of the SRR is the UART Soft Reset (USR) bit. Setting this bit resets the UART. - * - * Bit 1 of the SRR is a shadow copy of the RX FIFO Reset bit (FCR bit 1). This can be used to remove - * the burden on software having to store previously written FCR values (which are pretty static) just - * to reset the receive FIFO. - * - * Bit 2 of the SRR is a shadow copy of the TX FIFO Reset bit (FCR bit 2). This can be used to remove - * the burden on software having to store previously written FCR values (which are pretty static) just - * to reset the transmit FIFO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_srr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t stfr : 1; /**< Shadow TX FIFO Reset */ - uint64_t srfr : 1; /**< Shadow RX FIFO Reset */ - uint64_t usr : 1; /**< UART Soft Reset */ -#else - uint64_t usr : 1; - uint64_t srfr : 1; - uint64_t stfr : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_mio_uartx_srr_s cn30xx; - struct cvmx_mio_uartx_srr_s cn31xx; - struct cvmx_mio_uartx_srr_s cn38xx; - struct cvmx_mio_uartx_srr_s cn38xxp2; - struct cvmx_mio_uartx_srr_s cn50xx; - struct cvmx_mio_uartx_srr_s cn52xx; - struct cvmx_mio_uartx_srr_s cn52xxp1; - struct cvmx_mio_uartx_srr_s cn56xx; - struct cvmx_mio_uartx_srr_s cn56xxp1; - struct cvmx_mio_uartx_srr_s cn58xx; - struct cvmx_mio_uartx_srr_s cn58xxp1; -} cvmx_mio_uartx_srr_t; -typedef cvmx_mio_uartx_srr_t cvmx_uart_srr_t; - - -/** - * cvmx_mio_uart#_srt - * - * MIO_UARTX_SRT = MIO UARTX Shadow RX Trigger Register - * - * The Shadow RX Trigger Register (SRT) is a shadow register for the RX Trigger bits (FCR bits 7:6) that - * can be used to remove the burden of having to store the previously written value to the FCR in memory - * and having to mask this value so that only the RX Trigger bits get updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_srt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t srt : 2; /**< Shadow RX Trigger */ -#else - uint64_t srt : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_uartx_srt_s cn30xx; - struct cvmx_mio_uartx_srt_s cn31xx; - struct cvmx_mio_uartx_srt_s cn38xx; - struct cvmx_mio_uartx_srt_s cn38xxp2; - struct cvmx_mio_uartx_srt_s cn50xx; - struct cvmx_mio_uartx_srt_s cn52xx; - struct cvmx_mio_uartx_srt_s cn52xxp1; - struct cvmx_mio_uartx_srt_s cn56xx; - struct cvmx_mio_uartx_srt_s cn56xxp1; - struct cvmx_mio_uartx_srt_s cn58xx; - struct cvmx_mio_uartx_srt_s cn58xxp1; -} cvmx_mio_uartx_srt_t; -typedef cvmx_mio_uartx_srt_t cvmx_uart_srt_t; - - -/** - * cvmx_mio_uart#_srts - * - * MIO_UARTX_SRTS = MIO UARTX Shadow Request To Send Register - * - * The Shadow Request To Send Register (SRTS) is a shadow register for the RTS bit (MCR bit 1) that can - * be used to remove the burden of having to perform a read-modify-write on the MCR. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_srts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t srts : 1; /**< Shadow Request To Send */ -#else - uint64_t srts : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uartx_srts_s cn30xx; - struct cvmx_mio_uartx_srts_s cn31xx; - struct cvmx_mio_uartx_srts_s cn38xx; - struct cvmx_mio_uartx_srts_s cn38xxp2; - struct cvmx_mio_uartx_srts_s cn50xx; - struct cvmx_mio_uartx_srts_s cn52xx; - struct cvmx_mio_uartx_srts_s cn52xxp1; - struct cvmx_mio_uartx_srts_s cn56xx; - struct cvmx_mio_uartx_srts_s cn56xxp1; - struct cvmx_mio_uartx_srts_s cn58xx; - struct cvmx_mio_uartx_srts_s cn58xxp1; -} cvmx_mio_uartx_srts_t; -typedef cvmx_mio_uartx_srts_t cvmx_uart_srts_t; - - -/** - * cvmx_mio_uart#_stt - * - * MIO_UARTX_STT = MIO UARTX Shadow TX Trigger Register - * - * The Shadow TX Trigger Register (STT) is a shadow register for the TX Trigger bits (FCR bits 5:4) that - * can be used to remove the burden of having to store the previously written value to the FCR in memory - * and having to mask this value so that only the TX Trigger bits get updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_stt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t stt : 2; /**< Shadow TX Trigger */ -#else - uint64_t stt : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_uartx_stt_s cn30xx; - struct cvmx_mio_uartx_stt_s cn31xx; - struct cvmx_mio_uartx_stt_s cn38xx; - struct cvmx_mio_uartx_stt_s cn38xxp2; - struct cvmx_mio_uartx_stt_s cn50xx; - struct cvmx_mio_uartx_stt_s cn52xx; - struct cvmx_mio_uartx_stt_s cn52xxp1; - struct cvmx_mio_uartx_stt_s cn56xx; - struct cvmx_mio_uartx_stt_s cn56xxp1; - struct cvmx_mio_uartx_stt_s cn58xx; - struct cvmx_mio_uartx_stt_s cn58xxp1; -} cvmx_mio_uartx_stt_t; -typedef cvmx_mio_uartx_stt_t cvmx_uart_stt_t; - - -/** - * cvmx_mio_uart#_tfl - * - * MIO_UARTX_TFL = MIO UARTX Transmit FIFO Level Register - * - * The Transmit FIFO Level Register (TFL) indicates the number of data entries in the transmit FIFO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_tfl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t tfl : 7; /**< Transmit FIFO Level Register */ -#else - uint64_t tfl : 7; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mio_uartx_tfl_s cn30xx; - struct cvmx_mio_uartx_tfl_s cn31xx; - struct cvmx_mio_uartx_tfl_s cn38xx; - struct cvmx_mio_uartx_tfl_s cn38xxp2; - struct cvmx_mio_uartx_tfl_s cn50xx; - struct cvmx_mio_uartx_tfl_s cn52xx; - struct cvmx_mio_uartx_tfl_s cn52xxp1; - struct cvmx_mio_uartx_tfl_s cn56xx; - struct cvmx_mio_uartx_tfl_s cn56xxp1; - struct cvmx_mio_uartx_tfl_s cn58xx; - struct cvmx_mio_uartx_tfl_s cn58xxp1; -} cvmx_mio_uartx_tfl_t; -typedef cvmx_mio_uartx_tfl_t cvmx_uart_tfl_t; - - -/** - * cvmx_mio_uart#_tfr - * - * MIO_UARTX_TFR = MIO UARTX Transmit FIFO Read Register - * - * The Transmit FIFO Read Register (TFR) is only valid when FIFO access mode is enabled (FAR bit 0 is - * set). When FIFOs are enabled, reading this register gives the data at the top of the transmit FIFO. - * Each consecutive read pops the transmit FIFO and gives the next data value that is currently at the - * top of the FIFO. When FIFOs are not enabled, reading this register gives the data in the THR. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_tfr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t tfr : 8; /**< Transmit FIFO Read Register */ -#else - uint64_t tfr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_tfr_s cn30xx; - struct cvmx_mio_uartx_tfr_s cn31xx; - struct cvmx_mio_uartx_tfr_s cn38xx; - struct cvmx_mio_uartx_tfr_s cn38xxp2; - struct cvmx_mio_uartx_tfr_s cn50xx; - struct cvmx_mio_uartx_tfr_s cn52xx; - struct cvmx_mio_uartx_tfr_s cn52xxp1; - struct cvmx_mio_uartx_tfr_s cn56xx; - struct cvmx_mio_uartx_tfr_s cn56xxp1; - struct cvmx_mio_uartx_tfr_s cn58xx; - struct cvmx_mio_uartx_tfr_s cn58xxp1; -} cvmx_mio_uartx_tfr_t; -typedef cvmx_mio_uartx_tfr_t cvmx_uart_tfr_t; - - -/** - * cvmx_mio_uart#_thr - * - * MIO_UARTX_THR = MIO UARTX Transmit Holding Register - * - * Transmit Holding Register (THR) is a write-only register that contains data to be transmitted on the - * serial output port (sout). Data can be written to the THR any time that the THR Empty (THRE) bit of - * the Line Status Register (LSR) is set. - * - * If FIFOs are not enabled and THRE is set, writing a single character to the THR clears the THRE. Any - * additional writes to the THR before the THRE is set again causes the THR data to be overwritten. - * - * If FIFOs are enabled and THRE is set (and Programmable THRE mode disabled), 64 characters of data may - * be written to the THR before the FIFO is full. Any attempt to write data when the FIFO is full results - * in the write data being lost. - * - * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access - * this register. - * - * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the - * RBR, THR, and DLL registers are the same. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_thr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t thr : 8; /**< Transmit Holding Register */ -#else - uint64_t thr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uartx_thr_s cn30xx; - struct cvmx_mio_uartx_thr_s cn31xx; - struct cvmx_mio_uartx_thr_s cn38xx; - struct cvmx_mio_uartx_thr_s cn38xxp2; - struct cvmx_mio_uartx_thr_s cn50xx; - struct cvmx_mio_uartx_thr_s cn52xx; - struct cvmx_mio_uartx_thr_s cn52xxp1; - struct cvmx_mio_uartx_thr_s cn56xx; - struct cvmx_mio_uartx_thr_s cn56xxp1; - struct cvmx_mio_uartx_thr_s cn58xx; - struct cvmx_mio_uartx_thr_s cn58xxp1; -} cvmx_mio_uartx_thr_t; -typedef cvmx_mio_uartx_thr_t cvmx_uart_thr_t; - - -/** - * cvmx_mio_uart#_usr - * - * MIO_UARTX_USR = MIO UARTX UART Status Register - * - * The UART Status Register (USR) contains UART status information. - * - * USR bit 0 is the BUSY bit. When set this bit indicates that a serial transfer is in progress, when - * clear it indicates that the UART is idle or inactive. - * - * Note: In PASS3, the BUSY bit will always be clear. - * - * USR bits 1-4 indicate the following FIFO status: TX FIFO Not Full (TFNF), TX FIFO Empty (TFE), RX - * FIFO Not Empty (RFNE), and RX FIFO Full (RFF). - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uartx_usr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t rff : 1; /**< RX FIFO Full */ - uint64_t rfne : 1; /**< RX FIFO Not Empty */ - uint64_t tfe : 1; /**< TX FIFO Empty */ - uint64_t tfnf : 1; /**< TX FIFO Not Full */ - uint64_t busy : 1; /**< Busy bit (always 0 in PASS3) */ -#else - uint64_t busy : 1; - uint64_t tfnf : 1; - uint64_t tfe : 1; - uint64_t rfne : 1; - uint64_t rff : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_mio_uartx_usr_s cn30xx; - struct cvmx_mio_uartx_usr_s cn31xx; - struct cvmx_mio_uartx_usr_s cn38xx; - struct cvmx_mio_uartx_usr_s cn38xxp2; - struct cvmx_mio_uartx_usr_s cn50xx; - struct cvmx_mio_uartx_usr_s cn52xx; - struct cvmx_mio_uartx_usr_s cn52xxp1; - struct cvmx_mio_uartx_usr_s cn56xx; - struct cvmx_mio_uartx_usr_s cn56xxp1; - struct cvmx_mio_uartx_usr_s cn58xx; - struct cvmx_mio_uartx_usr_s cn58xxp1; -} cvmx_mio_uartx_usr_t; -typedef cvmx_mio_uartx_usr_t cvmx_uart_usr_t; - - -/** - * cvmx_mio_uart2_dlh - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_dlh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dlh : 8; /**< Divisor Latch High Register */ -#else - uint64_t dlh : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_dlh_s cn52xx; - struct cvmx_mio_uart2_dlh_s cn52xxp1; -} cvmx_mio_uart2_dlh_t; - - -/** - * cvmx_mio_uart2_dll - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_dll_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dll : 8; /**< Divisor Latch Low Register */ -#else - uint64_t dll : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_dll_s cn52xx; - struct cvmx_mio_uart2_dll_s cn52xxp1; -} cvmx_mio_uart2_dll_t; - - -/** - * cvmx_mio_uart2_far - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_far_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t far : 1; /**< FIFO Access Register */ -#else - uint64_t far : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uart2_far_s cn52xx; - struct cvmx_mio_uart2_far_s cn52xxp1; -} cvmx_mio_uart2_far_t; - - -/** - * cvmx_mio_uart2_fcr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_fcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rxtrig : 2; /**< RX Trigger */ - uint64_t txtrig : 2; /**< TX Trigger */ - uint64_t reserved_3_3 : 1; - uint64_t txfr : 1; /**< TX FIFO reset */ - uint64_t rxfr : 1; /**< RX FIFO reset */ - uint64_t en : 1; /**< FIFO enable */ -#else - uint64_t en : 1; - uint64_t rxfr : 1; - uint64_t txfr : 1; - uint64_t reserved_3_3 : 1; - uint64_t txtrig : 2; - uint64_t rxtrig : 2; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_fcr_s cn52xx; - struct cvmx_mio_uart2_fcr_s cn52xxp1; -} cvmx_mio_uart2_fcr_t; - - -/** - * cvmx_mio_uart2_htx - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_htx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t htx : 1; /**< Halt TX */ -#else - uint64_t htx : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uart2_htx_s cn52xx; - struct cvmx_mio_uart2_htx_s cn52xxp1; -} cvmx_mio_uart2_htx_t; - - -/** - * cvmx_mio_uart2_ier - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_ier_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ptime : 1; /**< Programmable THRE Interrupt mode enable */ - uint64_t reserved_4_6 : 3; - uint64_t edssi : 1; /**< Enable Modem Status Interrupt */ - uint64_t elsi : 1; /**< Enable Receiver Line Status Interrupt */ - uint64_t etbei : 1; /**< Enable Transmitter Holding Register Empty Interrupt */ - uint64_t erbfi : 1; /**< Enable Received Data Available Interrupt */ -#else - uint64_t erbfi : 1; - uint64_t etbei : 1; - uint64_t elsi : 1; - uint64_t edssi : 1; - uint64_t reserved_4_6 : 3; - uint64_t ptime : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_ier_s cn52xx; - struct cvmx_mio_uart2_ier_s cn52xxp1; -} cvmx_mio_uart2_ier_t; - - -/** - * cvmx_mio_uart2_iir - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_iir_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t fen : 2; /**< FIFO-enabled bits */ - uint64_t reserved_4_5 : 2; - uint64_t iid : 4; /**< Interrupt ID */ -#else - uint64_t iid : 4; - uint64_t reserved_4_5 : 2; - uint64_t fen : 2; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_iir_s cn52xx; - struct cvmx_mio_uart2_iir_s cn52xxp1; -} cvmx_mio_uart2_iir_t; - - -/** - * cvmx_mio_uart2_lcr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_lcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dlab : 1; /**< Divisor Latch Address bit */ - uint64_t brk : 1; /**< Break Control bit */ - uint64_t reserved_5_5 : 1; - uint64_t eps : 1; /**< Even Parity Select bit */ - uint64_t pen : 1; /**< Parity Enable bit */ - uint64_t stop : 1; /**< Stop Control bit */ - uint64_t cls : 2; /**< Character Length Select */ -#else - uint64_t cls : 2; - uint64_t stop : 1; - uint64_t pen : 1; - uint64_t eps : 1; - uint64_t reserved_5_5 : 1; - uint64_t brk : 1; - uint64_t dlab : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_lcr_s cn52xx; - struct cvmx_mio_uart2_lcr_s cn52xxp1; -} cvmx_mio_uart2_lcr_t; - - -/** - * cvmx_mio_uart2_lsr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_lsr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t ferr : 1; /**< Error in Receiver FIFO bit */ - uint64_t temt : 1; /**< Transmitter Empty bit */ - uint64_t thre : 1; /**< Transmitter Holding Register Empty bit */ - uint64_t bi : 1; /**< Break Interrupt bit */ - uint64_t fe : 1; /**< Framing Error bit */ - uint64_t pe : 1; /**< Parity Error bit */ - uint64_t oe : 1; /**< Overrun Error bit */ - uint64_t dr : 1; /**< Data Ready bit */ -#else - uint64_t dr : 1; - uint64_t oe : 1; - uint64_t pe : 1; - uint64_t fe : 1; - uint64_t bi : 1; - uint64_t thre : 1; - uint64_t temt : 1; - uint64_t ferr : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_lsr_s cn52xx; - struct cvmx_mio_uart2_lsr_s cn52xxp1; -} cvmx_mio_uart2_lsr_t; - - -/** - * cvmx_mio_uart2_mcr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_mcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t afce : 1; /**< Auto Flow Control Enable bit */ - uint64_t loop : 1; /**< Loopback bit */ - uint64_t out2 : 1; /**< OUT2 output bit */ - uint64_t out1 : 1; /**< OUT1 output bit */ - uint64_t rts : 1; /**< Request To Send output bit */ - uint64_t dtr : 1; /**< Data Terminal Ready output bit */ -#else - uint64_t dtr : 1; - uint64_t rts : 1; - uint64_t out1 : 1; - uint64_t out2 : 1; - uint64_t loop : 1; - uint64_t afce : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_mio_uart2_mcr_s cn52xx; - struct cvmx_mio_uart2_mcr_s cn52xxp1; -} cvmx_mio_uart2_mcr_t; - - -/** - * cvmx_mio_uart2_msr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_msr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t dcd : 1; /**< Data Carrier Detect input bit */ - uint64_t ri : 1; /**< Ring Indicator input bit */ - uint64_t dsr : 1; /**< Data Set Ready input bit */ - uint64_t cts : 1; /**< Clear To Send input bit */ - uint64_t ddcd : 1; /**< Delta Data Carrier Detect bit */ - uint64_t teri : 1; /**< Trailing Edge of Ring Indicator bit */ - uint64_t ddsr : 1; /**< Delta Data Set Ready bit */ - uint64_t dcts : 1; /**< Delta Clear To Send bit */ -#else - uint64_t dcts : 1; - uint64_t ddsr : 1; - uint64_t teri : 1; - uint64_t ddcd : 1; - uint64_t cts : 1; - uint64_t dsr : 1; - uint64_t ri : 1; - uint64_t dcd : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_msr_s cn52xx; - struct cvmx_mio_uart2_msr_s cn52xxp1; -} cvmx_mio_uart2_msr_t; - - -/** - * cvmx_mio_uart2_rbr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_rbr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rbr : 8; /**< Receive Buffer Register */ -#else - uint64_t rbr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_rbr_s cn52xx; - struct cvmx_mio_uart2_rbr_s cn52xxp1; -} cvmx_mio_uart2_rbr_t; - - -/** - * cvmx_mio_uart2_rfl - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_rfl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t rfl : 7; /**< Receive FIFO Level Register */ -#else - uint64_t rfl : 7; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mio_uart2_rfl_s cn52xx; - struct cvmx_mio_uart2_rfl_s cn52xxp1; -} cvmx_mio_uart2_rfl_t; - - -/** - * cvmx_mio_uart2_rfw - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_rfw_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t rffe : 1; /**< Receive FIFO Framing Error */ - uint64_t rfpe : 1; /**< Receive FIFO Parity Error */ - uint64_t rfwd : 8; /**< Receive FIFO Write Data */ -#else - uint64_t rfwd : 8; - uint64_t rfpe : 1; - uint64_t rffe : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_mio_uart2_rfw_s cn52xx; - struct cvmx_mio_uart2_rfw_s cn52xxp1; -} cvmx_mio_uart2_rfw_t; - - -/** - * cvmx_mio_uart2_sbcr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_sbcr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t sbcr : 1; /**< Shadow Break Control */ -#else - uint64_t sbcr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uart2_sbcr_s cn52xx; - struct cvmx_mio_uart2_sbcr_s cn52xxp1; -} cvmx_mio_uart2_sbcr_t; - - -/** - * cvmx_mio_uart2_scr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_scr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t scr : 8; /**< Scratchpad Register */ -#else - uint64_t scr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_scr_s cn52xx; - struct cvmx_mio_uart2_scr_s cn52xxp1; -} cvmx_mio_uart2_scr_t; - - -/** - * cvmx_mio_uart2_sfe - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_sfe_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t sfe : 1; /**< Shadow FIFO Enable */ -#else - uint64_t sfe : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uart2_sfe_s cn52xx; - struct cvmx_mio_uart2_sfe_s cn52xxp1; -} cvmx_mio_uart2_sfe_t; - - -/** - * cvmx_mio_uart2_srr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_srr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t stfr : 1; /**< Shadow TX FIFO Reset */ - uint64_t srfr : 1; /**< Shadow RX FIFO Reset */ - uint64_t usr : 1; /**< UART Soft Reset */ -#else - uint64_t usr : 1; - uint64_t srfr : 1; - uint64_t stfr : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_mio_uart2_srr_s cn52xx; - struct cvmx_mio_uart2_srr_s cn52xxp1; -} cvmx_mio_uart2_srr_t; - - -/** - * cvmx_mio_uart2_srt - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_srt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t srt : 2; /**< Shadow RX Trigger */ -#else - uint64_t srt : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_uart2_srt_s cn52xx; - struct cvmx_mio_uart2_srt_s cn52xxp1; -} cvmx_mio_uart2_srt_t; - - -/** - * cvmx_mio_uart2_srts - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_srts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t srts : 1; /**< Shadow Request To Send */ -#else - uint64_t srts : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_mio_uart2_srts_s cn52xx; - struct cvmx_mio_uart2_srts_s cn52xxp1; -} cvmx_mio_uart2_srts_t; - - -/** - * cvmx_mio_uart2_stt - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_stt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t stt : 2; /**< Shadow TX Trigger */ -#else - uint64_t stt : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_mio_uart2_stt_s cn52xx; - struct cvmx_mio_uart2_stt_s cn52xxp1; -} cvmx_mio_uart2_stt_t; - - -/** - * cvmx_mio_uart2_tfl - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_tfl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t tfl : 7; /**< Transmit FIFO Level Register */ -#else - uint64_t tfl : 7; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mio_uart2_tfl_s cn52xx; - struct cvmx_mio_uart2_tfl_s cn52xxp1; -} cvmx_mio_uart2_tfl_t; - - -/** - * cvmx_mio_uart2_tfr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_tfr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t tfr : 8; /**< Transmit FIFO Read Register */ -#else - uint64_t tfr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_tfr_s cn52xx; - struct cvmx_mio_uart2_tfr_s cn52xxp1; -} cvmx_mio_uart2_tfr_t; - - -/** - * cvmx_mio_uart2_thr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_thr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t thr : 8; /**< Transmit Holding Register */ -#else - uint64_t thr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mio_uart2_thr_s cn52xx; - struct cvmx_mio_uart2_thr_s cn52xxp1; -} cvmx_mio_uart2_thr_t; - - -/** - * cvmx_mio_uart2_usr - */ -typedef union -{ - uint64_t u64; - struct cvmx_mio_uart2_usr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t rff : 1; /**< RX FIFO Full */ - uint64_t rfne : 1; /**< RX FIFO Not Empty */ - uint64_t tfe : 1; /**< TX FIFO Empty */ - uint64_t tfnf : 1; /**< TX FIFO Not Full */ - uint64_t busy : 1; /**< Busy bit (always 0 in PASS3) */ -#else - uint64_t busy : 1; - uint64_t tfnf : 1; - uint64_t tfe : 1; - uint64_t rfne : 1; - uint64_t rff : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_mio_uart2_usr_s cn52xx; - struct cvmx_mio_uart2_usr_s cn52xxp1; -} cvmx_mio_uart2_usr_t; - - -/** - * cvmx_mix#_bist - * - * MIX_BIST = MIX BIST Register - * - * Description: - * NOTE: To read the MIX_BIST register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_bist_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t mrqdat : 1; /**< Bist Results for NBR CSR RdReq RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t ipfdat : 1; /**< Bist Results for MIX Inbound Packet RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t irfdat : 1; /**< Bist Results for MIX I-Ring Entry RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t orfdat : 1; /**< Bist Results for MIX O-Ring Entry RAM - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t orfdat : 1; - uint64_t irfdat : 1; - uint64_t ipfdat : 1; - uint64_t mrqdat : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_mixx_bist_s cn52xx; - struct cvmx_mixx_bist_s cn52xxp1; - struct cvmx_mixx_bist_s cn56xx; - struct cvmx_mixx_bist_s cn56xxp1; -} cvmx_mixx_bist_t; - - -/** - * cvmx_mix#_ctl - * - * MIX_CTL = MIX Control Register - * - * Description: - * NOTE: To write to the MIX_CTL register, a device would issue an IOBST directed at the MIO. - * To read the MIX_CTL register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t crc_strip : 1; /**< HW CRC Strip Enable - When enabled, the last 4 bytes(CRC) of the ingress packet - are not included in cumulative packet byte length. - In other words, the cumulative LEN field for all - I-Ring Buffer Entries associated with a given ingress - packet will be 4 bytes less (so that the final 4B HW CRC - packet data is not processed by software). */ - uint64_t busy : 1; /**< MIX Busy Status bit - MIX will assert busy status any time there are: - 1) L2/DRAM reads in-flight (NCB-arb to read - response) - 2) L2/DRAM writes in-flight (NCB-arb to write - data is sent. - 3) L2/DRAM write commits in-flight (NCB-arb to write - commit response). - NOTE: After MIX_CTL[EN]=0, the MIX will eventually - complete any "inflight" transactions, at which point the - BUSY will de-assert. */ - uint64_t en : 1; /**< MIX Enable bit - When EN=0, MIX will no longer arbitrate for - any new L2/DRAM read/write requests on the NCB Bus. - MIX will complete any requests that are currently - pended for the NCB Bus. */ - uint64_t reset : 1; /**< MIX Soft Reset - When SW writes a '1' to MIX_CTL[RESET], the - MIX logic will be soft reset. - NOTE: The MIX-AGL RSL-CSR accesses are not effected - by soft reset (to allow RSL accesses during soft reset). - NOTE: The MIX-MIX NCB-direct CSR accesses are not effected - by soft reset (to allow RSL accesses during soft reset). - NOTE: Writing '1' will create a "64 eclk" soft reset - pulse chain used by both MIX/AGL subcomponents to - soft reset the MIX/AGL. SW should avoid sending any MIX/AGL - CSR R/Ws until after this 64 eclk reset window has - expired (unpredictable results). - NOTE: RESET is intentionally 'read as zero'. - The intended "soft reset" sequence is: - 1) Write MIX_CTL[EN]=0 - [To prevent any NEW transactions from being started] - 2) Wait for MIX_CTL[BUSY]=0 - [To indicate that all inflight transactions have - completed] - 3) Write MIX_CTL[RESET]=1, followed by a MIX_CTL CSR read - and wait for the result. - This will generate the soft-reset pulse chain that will - reset MIX/AGL (except logic to gain access to CSRs). - 4) Re-Initialize the MIX/AGL just as would be done - for a hard reset. */ - uint64_t lendian : 1; /**< Packet Little Endian Mode - (0: Big Endian Mode/1: Little Endian Mode) - When the mode is set, MIX will byte-swap packet data - loads/stores at the MIX/NCB boundary. */ - uint64_t nbtarb : 1; /**< MIX CB-Request Arbitration Mode. - When set to zero, the arbiter is fixed priority with - the following priority scheme: - Highest Priority: I-Ring Packet Write Request - O-Ring Packet Read Request - I-Ring Entry Write Request - I-Ring Entry Read Request - O-Ring Entry Read Request - When set to one, the arbiter is round robin. */ - uint64_t mrq_hwm : 2; /**< MIX CB-Request FIFO Programmable High Water Mark. - The MRQ contains 16 CB-Requests which are CSR Rd/Wr - Requests. If the MRQ backs up with "HWM" entries, - then new CB-Requests are 'stalled'. - [0]: HWM = 16 - [1]: HWM = 15 - [2]: HWM = 14 - [3]: HWM = 13 - NOTE: This must only be written at power-on/boot time. */ -#else - uint64_t mrq_hwm : 2; - uint64_t nbtarb : 1; - uint64_t lendian : 1; - uint64_t reset : 1; - uint64_t en : 1; - uint64_t busy : 1; - uint64_t crc_strip : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mixx_ctl_s cn52xx; - struct cvmx_mixx_ctl_s cn52xxp1; - struct cvmx_mixx_ctl_s cn56xx; - struct cvmx_mixx_ctl_s cn56xxp1; -} cvmx_mixx_ctl_t; - - -/** - * cvmx_mix#_intena - * - * MIX_INTENA = MIX Local Interrupt Enable Mask Register - * - * Description: - * NOTE: To write to the MIX_INTENA register, a device would issue an IOBST directed at the MIO. - * To read the MIX_INTENA register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_intena_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t orunena : 1; /**< ORCNT UnderFlow Detected - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an ORCNT underflow condition - MIX_ISR[ORUN]. */ - uint64_t irunena : 1; /**< IRCNT UnderFlow Interrupt Enable - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an IRCNT underflow condition - MIX_ISR[IRUN]. */ - uint64_t data_drpena : 1; /**< Data was dropped due to RX FIFO full Interrupt - enable. If both the global interrupt mask bits - (CIU_INTx_EN*[MII]) and the local interrupt mask - bit(DATA_DRPENA) is set, than an interrupt is - reported for this event. */ - uint64_t ithena : 1; /**< Inbound Ring Threshold Exceeded Interrupt Enable - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an Inbound Ring Threshold - Exceeded event(IRTHRESH). */ - uint64_t othena : 1; /**< Outbound Ring Threshold Exceeded Interrupt Enable - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an Outbound Ring Threshold - Exceeded event(ORTHRESH). */ - uint64_t ivfena : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an Inbound Doorbell Overflow - event(IDBOVF). */ - uint64_t ovfena : 1; /**< Outbound DoorBell(ODBELL) Overflow Interrupt Enable - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and this local interrupt mask bit is set, than an - interrupt is reported for an Outbound Doorbell Overflow - event(ODBOVF). */ -#else - uint64_t ovfena : 1; - uint64_t ivfena : 1; - uint64_t othena : 1; - uint64_t ithena : 1; - uint64_t data_drpena : 1; - uint64_t irunena : 1; - uint64_t orunena : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mixx_intena_s cn52xx; - struct cvmx_mixx_intena_s cn52xxp1; - struct cvmx_mixx_intena_s cn56xx; - struct cvmx_mixx_intena_s cn56xxp1; -} cvmx_mixx_intena_t; - - -/** - * cvmx_mix#_ircnt - * - * MIX_IRCNT = MIX I-Ring Pending Packet Counter - * - * Description: - * NOTE: To write to the MIX_IRCNT register, a device would issue an IOBST directed at the MIO. - * To read the MIX_IRCNT register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_ircnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t ircnt : 20; /**< Pending \# of I-Ring Packets. - Whenever HW writes a completion code of Done, Trunc, - CRCErr or Err, it increments the IRCNT (to indicate - to SW the \# of pending Input packets in system memory). - NOTE: The HW guarantees that the completion code write - is always visible in system memory BEFORE it increments - the IRCNT. - Reads of IRCNT return the current inbound packet count. - Writes of IRCNT decrement the count by the value - written. - This register is used to generate interrupts to alert - SW of pending inbound MIX packets in system memory. - NOTE: In the case of inbound packets that span multiple - I-Ring entries, SW must keep track of the \# of I-Ring Entries - associated with a given inbound packet to reclaim the - proper \# of I-Ring Entries for re-use. */ -#else - uint64_t ircnt : 20; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_mixx_ircnt_s cn52xx; - struct cvmx_mixx_ircnt_s cn52xxp1; - struct cvmx_mixx_ircnt_s cn56xx; - struct cvmx_mixx_ircnt_s cn56xxp1; -} cvmx_mixx_ircnt_t; - - -/** - * cvmx_mix#_irhwm - * - * MIX_IRHWM = MIX I-Ring High-Water Mark Threshold Register - * - * Description: - * NOTE: To write to the MIX_IHWM register, a device would issue an IOBST directed at the MIO. - * To read the MIX_IHWM register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_irhwm_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t ibplwm : 20; /**< I-Ring BackPressure Low Water Mark Threshold. - When the \#of available I-Ring Entries (IDBELL) - is less than IBPLWM, the AGL-MAC will: - a) In full-duplex mode: send periodic PAUSE packets. - b) In half-duplex mode: Force collisions. - This programmable mechanism is provided as a means - to backpressure input traffic 'early' enough (so - that packets are not 'dropped' by OCTEON). */ - uint64_t irhwm : 20; /**< I-Ring Entry High Water Mark Threshold. - Used to determine when the \# of Inbound packets - in system memory(MIX_IRCNT[IRCNT]) exceeds this IRHWM - threshold. - NOTE: The power-on value of the CIU_INTx_EN*[MII] - interrupt enable bits is zero and must be enabled - to allow interrupts to be reported. */ -#else - uint64_t irhwm : 20; - uint64_t ibplwm : 20; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_mixx_irhwm_s cn52xx; - struct cvmx_mixx_irhwm_s cn52xxp1; - struct cvmx_mixx_irhwm_s cn56xx; - struct cvmx_mixx_irhwm_s cn56xxp1; -} cvmx_mixx_irhwm_t; - - -/** - * cvmx_mix#_iring1 - * - * MIX_IRING1 = MIX Inbound Ring Register \#1 - * - * Description: - * NOTE: To write to the MIX_IRING1 register, a device would issue an IOBST directed at the MIO. - * To read the MIX_IRING1 register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_iring1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t isize : 20; /**< Represents the Inbound Ring Buffer's Size(in 8B - words). The ring can be as large as 1M entries. - NOTE: This CSR MUST BE setup written by SW poweron - (when IDBELL/IRCNT=0). */ - uint64_t reserved_36_39 : 4; - uint64_t ibase : 33; /**< Represents the 8B-aligned base address of the first - Inbound Ring entry in system memory. - NOTE: SW MUST ONLY write to this register during - power-on/boot code. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t ibase : 33; - uint64_t reserved_36_39 : 4; - uint64_t isize : 20; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_mixx_iring1_s cn52xx; - struct cvmx_mixx_iring1_s cn52xxp1; - struct cvmx_mixx_iring1_s cn56xx; - struct cvmx_mixx_iring1_s cn56xxp1; -} cvmx_mixx_iring1_t; - - -/** - * cvmx_mix#_iring2 - * - * MIX_IRING2 = MIX Inbound Ring Register \#2 - * - * Description: - * NOTE: To write to the MIX_IRING2 register, a device would issue an IOBST directed at the MIO. - * To read the MIX_IRING2 register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_iring2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_52_63 : 12; - uint64_t itlptr : 20; /**< The Inbound Ring Tail Pointer selects the I-Ring - Entry that the HW will process next. After the HW - completes receiving an inbound packet, it increments - the I-Ring Tail Pointer. [NOTE: The I-Ring Tail - Pointer HW increment is always modulo ISIZE. - NOTE: This field is 'read-only' to SW. */ - uint64_t reserved_20_31 : 12; - uint64_t idbell : 20; /**< Represents the cumulative total of pending - Inbound Ring Buffer Entries. Each I-Ring - Buffer Entry contains 1) an L2/DRAM byte pointer - along with a 2) a Byte Length. - After SW inserts a new entry into the I-Ring Buffer, - it "rings the doorbell for the inbound ring". When - the MIX HW receives the doorbell ring, it advances - the doorbell count for the I-Ring. - SW must never cause the doorbell count for the - I-Ring to exceed the size of the I-ring(ISIZE). - A read of the CSR indicates the current doorbell - count. */ -#else - uint64_t idbell : 20; - uint64_t reserved_20_31 : 12; - uint64_t itlptr : 20; - uint64_t reserved_52_63 : 12; -#endif - } s; - struct cvmx_mixx_iring2_s cn52xx; - struct cvmx_mixx_iring2_s cn52xxp1; - struct cvmx_mixx_iring2_s cn56xx; - struct cvmx_mixx_iring2_s cn56xxp1; -} cvmx_mixx_iring2_t; - - -/** - * cvmx_mix#_isr - * - * MIX_ISR = MIX Interrupt/Status Register - * - * Description: - * NOTE: To write to the MIX_ISR register, a device would issue an IOBST directed at the MIO. - * To read the MIX_ISR register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_isr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t orun : 1; /**< ORCNT UnderFlow Detected - If SW writes a larger value than what is currently - in the MIX_ORCNT[ORCNT], then HW will report the - underflow condition. - NOTE: The MIX_ORCNT[IOCNT] will clamp to to zero. - NOTE: If an ORUN underflow condition is detected, - the integrity of the MIX/AGL HW state has - been compromised. To recover, SW must issue a - software reset sequence (see: MIX_CTL[RESET] */ - uint64_t irun : 1; /**< IRCNT UnderFlow Detected - If SW writes a larger value than what is currently - in the MIX_IRCNT[IRCNT], then HW will report the - underflow condition. - NOTE: The MIX_IRCNT[IRCNT] will clamp to to zero. - NOTE: If an IRUN underflow condition is detected, - the integrity of the MIX/AGL HW state has - been compromised. To recover, SW must issue a - software reset sequence (see: MIX_CTL[RESET] */ - uint64_t data_drp : 1; /**< Data was dropped due to RX FIFO full - If this does occur, the DATA_DRP is set and the - CIU_INTx_SUM0,4[MII] bits are set. - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and the local interrupt mask bit(DATA_DRPENA) is set, than an - interrupt is reported for this event. */ - uint64_t irthresh : 1; /**< Inbound Ring Packet Threshold Exceeded - When the pending \#inbound packets in system - memory(IRCNT) has exceeded a programmable threshold - (IRHWM), then this bit is set. If this does occur, - the IRTHRESH is set and the CIU_INTx_SUM0,4[MII] bits - are set if ((MIX_ISR & MIX_INTENA) != 0)). - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and the local interrupt mask bit(ITHENA) is set, than an - interrupt is reported for this event. */ - uint64_t orthresh : 1; /**< Outbound Ring Packet Threshold Exceeded - When the pending \#outbound packets in system - memory(ORCNT) has exceeded a programmable threshold - (ORHWM), then this bit is set. If this does occur, - the ORTHRESH is set and the CIU_INTx_SUM0,4[MII] bits - are set if ((MIX_ISR & MIX_INTENA) != 0)). - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and the local interrupt mask bit(OTHENA) is set, than an - interrupt is reported for this event. */ - uint64_t idblovf : 1; /**< Inbound DoorBell(IDBELL) Overflow Detected - If SW attempts to write to the MIX_IRING2[IDBELL] - with a value greater than the remaining \#of - I-Ring Buffer Entries (MIX_REMCNT[IREMCNT]), then - the following occurs: - 1) The MIX_IRING2[IDBELL] write is IGNORED - 2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII] - bits are set if ((MIX_ISR & MIX_INTENA) != 0)). - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and the local interrupt mask bit(IVFENA) is set, than an - interrupt is reported for this event. - SW should keep track of the \#I-Ring Entries in use - (ie: cumulative \# of IDBELL writes), and ensure that - future IDBELL writes don't exceed the size of the - I-Ring Buffer (MIX_IRING2[ISIZE]). - SW must reclaim I-Ring Entries by keeping track of the - \#IRing-Entries, and writing to the MIX_IRCNT[IRCNT]. - NOTE: The MIX_IRCNT[IRCNT] register represents the - total \#packets(not IRing Entries) and SW must further - keep track of the \# of I-Ring Entries associated with - each packet as they are processed. - NOTE: There is no recovery from an IDBLOVF Interrupt. - If it occurs, it's an indication that SW has - overwritten the I-Ring buffer, and the only recourse - is a HW reset. */ - uint64_t odblovf : 1; /**< Outbound DoorBell(ODBELL) Overflow Detected - If SW attempts to write to the MIX_ORING2[ODBELL] - with a value greater than the remaining \#of - O-Ring Buffer Entries (MIX_REMCNT[OREMCNT]), then - the following occurs: - 1) The MIX_ORING2[ODBELL] write is IGNORED - 2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII] - bits are set if ((MIX_ISR & MIX_INTENA) != 0)). - If both the global interrupt mask bits (CIU_INTx_EN*[MII]) - and the local interrupt mask bit(OVFENA) is set, than an - interrupt is reported for this event. - SW should keep track of the \#I-Ring Entries in use - (ie: cumulative \# of ODBELL writes), and ensure that - future ODBELL writes don't exceed the size of the - O-Ring Buffer (MIX_ORING2[OSIZE]). - SW must reclaim O-Ring Entries by writing to the - MIX_ORCNT[ORCNT]. . - NOTE: There is no recovery from an ODBLOVF Interrupt. - If it occurs, it's an indication that SW has - overwritten the O-Ring buffer, and the only recourse - is a HW reset. */ -#else - uint64_t odblovf : 1; - uint64_t idblovf : 1; - uint64_t orthresh : 1; - uint64_t irthresh : 1; - uint64_t data_drp : 1; - uint64_t irun : 1; - uint64_t orun : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_mixx_isr_s cn52xx; - struct cvmx_mixx_isr_s cn52xxp1; - struct cvmx_mixx_isr_s cn56xx; - struct cvmx_mixx_isr_s cn56xxp1; -} cvmx_mixx_isr_t; - - -/** - * cvmx_mix#_orcnt - * - * MIX_ORCNT = MIX O-Ring Packets Sent Counter - * - * Description: - * NOTE: To write to the MIX_ORCNT register, a device would issue an IOBST directed at the MIO. - * To read the MIX_ORCNT register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_orcnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t orcnt : 20; /**< Pending \# of O-Ring Packets. - Whenever HW removes a packet from the O-Ring, it - increments the ORCNT (to indicate to SW the \# of - Output packets in system memory that can be reclaimed). - Reads of ORCNT return the current count. - Writes of ORCNT decrement the count by the value - written. - This register is used to generate interrupts to alert - SW of pending outbound MIX packets that have been - removed from system memory. (see MIX_ISR[ORTHRESH] - description for more details). - NOTE: For outbound packets, the \# of O-Ring Packets - is equal to the \# of O-Ring Entries. */ -#else - uint64_t orcnt : 20; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_mixx_orcnt_s cn52xx; - struct cvmx_mixx_orcnt_s cn52xxp1; - struct cvmx_mixx_orcnt_s cn56xx; - struct cvmx_mixx_orcnt_s cn56xxp1; -} cvmx_mixx_orcnt_t; - - -/** - * cvmx_mix#_orhwm - * - * MIX_ORHWM = MIX O-Ring High-Water Mark Threshold Register - * - * Description: - * NOTE: To write to the MIX_ORHWM register, a device would issue an IOBST directed at the MIO. - * To read the MIX_ORHWM register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_orhwm_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t orhwm : 20; /**< O-Ring Entry High Water Mark Threshold. - Used to determine when the \# of Outbound packets - in system memory that can be reclaimed - (MIX_ORCNT[ORCNT]) exceeds this ORHWM threshold. - NOTE: The power-on value of the CIU_INTx_EN*[MII] - interrupt enable bits is zero and must be enabled - to allow interrupts to be reported. */ -#else - uint64_t orhwm : 20; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_mixx_orhwm_s cn52xx; - struct cvmx_mixx_orhwm_s cn52xxp1; - struct cvmx_mixx_orhwm_s cn56xx; - struct cvmx_mixx_orhwm_s cn56xxp1; -} cvmx_mixx_orhwm_t; - - -/** - * cvmx_mix#_oring1 - * - * MIX_ORING1 = MIX Outbound Ring Register \#1 - * - * Description: - * NOTE: To write to the MIX_ORING1 register, a device would issue an IOBST directed at the MIO. - * To read the MIX_ORING1 register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_oring1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t osize : 20; /**< Represents the Outbound Ring Buffer's Size(in 8B - words). The ring can be as large as 1M entries. - NOTE: This CSR MUST BE setup written by SW poweron - (when ODBELL/ORCNT=0). */ - uint64_t reserved_36_39 : 4; - uint64_t obase : 33; /**< Represents the 8B-aligned base address of the first - Outbound Ring(O-Ring) Entry in system memory. - NOTE: SW MUST ONLY write to this register during - power-on/boot code. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t obase : 33; - uint64_t reserved_36_39 : 4; - uint64_t osize : 20; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_mixx_oring1_s cn52xx; - struct cvmx_mixx_oring1_s cn52xxp1; - struct cvmx_mixx_oring1_s cn56xx; - struct cvmx_mixx_oring1_s cn56xxp1; -} cvmx_mixx_oring1_t; - - -/** - * cvmx_mix#_oring2 - * - * MIX_ORING2 = MIX Outbound Ring Register \#2 - * - * Description: - * NOTE: To write to the MIX_ORING2 register, a device would issue an IOBST directed at the MIO. - * To read the MIX_ORING2 register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_oring2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_52_63 : 12; - uint64_t otlptr : 20; /**< The Outbound Ring Tail Pointer selects the O-Ring - Entry that the HW will process next. After the HW - completes sending an outbound packet, it increments - the O-Ring Tail Pointer. [NOTE: The O-Ring Tail - Pointer HW increment is always modulo - MIX_ORING2[OSIZE]. - NOTE: This field is 'read-only' to SW. */ - uint64_t reserved_20_31 : 12; - uint64_t odbell : 20; /**< Represents the cumulative total of pending - Outbound Ring(O-Ring) Buffer Entries. Each O-Ring - Buffer Entry contains 1) an L2/DRAM byte pointer - along with a 2) a Byte Length. - After SW inserts new entries into the O-Ring Buffer, - it "rings the doorbell with the count of the newly - inserted entries". When the MIX HW receives the - doorbell ring, it increments the current doorbell - count by the CSR write value. - SW must never cause the doorbell count for the - O-Ring to exceed the size of the ring(OSIZE). - A read of the CSR indicates the current doorbell - count. */ -#else - uint64_t odbell : 20; - uint64_t reserved_20_31 : 12; - uint64_t otlptr : 20; - uint64_t reserved_52_63 : 12; -#endif - } s; - struct cvmx_mixx_oring2_s cn52xx; - struct cvmx_mixx_oring2_s cn52xxp1; - struct cvmx_mixx_oring2_s cn56xx; - struct cvmx_mixx_oring2_s cn56xxp1; -} cvmx_mixx_oring2_t; - - -/** - * cvmx_mix#_remcnt - * - * MIX_REMCNT = MIX Ring Buffer Remainder Counts (useful for HW debug only) - * - * Description: - * NOTE: To read the MIX_REMCNT register, a device would issue an IOBLD64 directed at the MIO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_mixx_remcnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_52_63 : 12; - uint64_t iremcnt : 20; /**< Remaining I-Ring Buffer Count - Reflects the \# of unused/remaining I-Ring Entries - that HW currently detects in the I-Ring Buffer. - HW uses this value to detect I-Ring Doorbell overflows. - (see: MIX_ISR[IDBLOVF]) - When SW writes the MIX_IRING1[ISIZE], the IREMCNT - is loaded with MIX_IRING2[ISIZE] value. (NOTE: ISIZE should only - be written at power-on, when it's known that there are - no I-Ring Entries currently in use by HW). - When SW writes to the IDBELL register, the IREMCNT - is decremented by the CSR write value. - When HW issues an IRing Write Request(onto NCB Bus), - the IREMCNT is incremented by 1. */ - uint64_t reserved_20_31 : 12; - uint64_t oremcnt : 20; /**< Remaining O-Ring Buffer Count - Reflects the \# of unused/remaining O-Ring Entries - that HW currently detects in the O-Ring Buffer. - HW uses this value to detect O-Ring Doorbell overflows. - (see: MIX_ISR[ODBLOVF]) - When SW writes the MIX_IRING1[OSIZE], the OREMCNT - is loaded with MIX_ORING2[OSIZE] value. (NOTE: OSIZE should only - be written at power-on, when it's known that there are - no O-Ring Entries currently in use by HW). - When SW writes to the ODBELL register, the OREMCNT - is decremented by the CSR write value. - When SW writes to MIX_[OREMCNT], the OREMCNT is decremented - by the CSR write value. */ -#else - uint64_t oremcnt : 20; - uint64_t reserved_20_31 : 12; - uint64_t iremcnt : 20; - uint64_t reserved_52_63 : 12; -#endif - } s; - struct cvmx_mixx_remcnt_s cn52xx; - struct cvmx_mixx_remcnt_s cn52xxp1; - struct cvmx_mixx_remcnt_s cn56xx; - struct cvmx_mixx_remcnt_s cn56xxp1; -} cvmx_mixx_remcnt_t; - - -/** - * cvmx_mpi_cfg - */ -typedef union -{ - uint64_t u64; - struct cvmx_mpi_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t clkdiv : 13; /**< Fsclk = Feclk / (2 * CLKDIV) - CLKDIV = Feclk / (2 * Fsclk) */ - uint64_t reserved_12_15 : 4; - uint64_t cslate : 1; /**< If 0, MPI_CS asserts 1/2 SCLK before transaction - 1, MPI_CS assert coincident with transaction - NOTE: only used if CSENA == 1 */ - uint64_t tritx : 1; /**< If 0, MPI_TX pin is driven when slave is not - expected to be driving - 1, MPI_TX pin is tristated when not transmitting - NOTE: only used when WIREOR==1 */ - uint64_t idleclks : 2; /**< Guarantee IDLECLKS idle sclk cycles between - commands. */ - uint64_t cshi : 1; /**< If 0, CS is low asserted - 1, CS is high asserted */ - uint64_t csena : 1; /**< If 0, the MPI_CS is a GPIO, not used by MPI_TX - 1, CS is driven per MPI_TX intruction */ - uint64_t int_ena : 1; /**< If 0, polling is required - 1, MPI engine interrupts X end of transaction */ - uint64_t lsbfirst : 1; /**< If 0, shift MSB first - 1, shift LSB first */ - uint64_t wireor : 1; /**< If 0, MPI_TX and MPI_RX are separate wires (SPI) - MPI_TX pin is always driven - 1, MPI_TX/RX is all from MPI_TX pin (MPI) - MPI_TX pin is tristated when not transmitting - NOTE: if WIREOR==1, MPI_RX pin is not used by the - MPI engine */ - uint64_t clk_cont : 1; /**< If 0, clock idles to value given by IDLELO after - completion of MPI transaction - 1, clock never idles, requires CS deassertion - assertion between commands */ - uint64_t idlelo : 1; /**< If 0, MPI_CLK idles high, 1st transition is hi->lo - 1, MPI_CLK idles low, 1st transition is lo->hi */ - uint64_t enable : 1; /**< If 0, all MPI pins are GPIOs - 1, MPI_CLK, MPI_CS, and MPI_TX are driven */ -#else - uint64_t enable : 1; - uint64_t idlelo : 1; - uint64_t clk_cont : 1; - uint64_t wireor : 1; - uint64_t lsbfirst : 1; - uint64_t int_ena : 1; - uint64_t csena : 1; - uint64_t cshi : 1; - uint64_t idleclks : 2; - uint64_t tritx : 1; - uint64_t cslate : 1; - uint64_t reserved_12_15 : 4; - uint64_t clkdiv : 13; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_mpi_cfg_s cn30xx; - struct cvmx_mpi_cfg_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t clkdiv : 13; /**< Fsclk = Feclk / (2 * CLKDIV) - CLKDIV = Feclk / (2 * Fsclk) */ - uint64_t reserved_11_15 : 5; - uint64_t tritx : 1; /**< If 0, MPI_TX pin is driven when slave is not - expected to be driving - 1, MPI_TX pin is tristated when not transmitting - NOTE: only used when WIREOR==1 */ - uint64_t idleclks : 2; /**< Guarantee IDLECLKS idle sclk cycles between - commands. */ - uint64_t cshi : 1; /**< If 0, CS is low asserted - 1, CS is high asserted */ - uint64_t csena : 1; /**< If 0, the MPI_CS is a GPIO, not used by MPI_TX - 1, CS is driven per MPI_TX intruction */ - uint64_t int_ena : 1; /**< If 0, polling is required - 1, MPI engine interrupts X end of transaction */ - uint64_t lsbfirst : 1; /**< If 0, shift MSB first - 1, shift LSB first */ - uint64_t wireor : 1; /**< If 0, MPI_TX and MPI_RX are separate wires (SPI) - MPI_TX pin is always driven - 1, MPI_TX/RX is all from MPI_TX pin (MPI) - MPI_TX pin is tristated when not transmitting - NOTE: if WIREOR==1, MPI_RX pin is not used by the - MPI engine */ - uint64_t clk_cont : 1; /**< If 0, clock idles to value given by IDLELO after - completion of MPI transaction - 1, clock never idles, requires CS deassertion - assertion between commands */ - uint64_t idlelo : 1; /**< If 0, MPI_CLK idles high, 1st transition is hi->lo - 1, MPI_CLK idles low, 1st transition is lo->hi */ - uint64_t enable : 1; /**< If 0, all MPI pins are GPIOs - 1, MPI_CLK, MPI_CS, and MPI_TX are driven */ -#else - uint64_t enable : 1; - uint64_t idlelo : 1; - uint64_t clk_cont : 1; - uint64_t wireor : 1; - uint64_t lsbfirst : 1; - uint64_t int_ena : 1; - uint64_t csena : 1; - uint64_t cshi : 1; - uint64_t idleclks : 2; - uint64_t tritx : 1; - uint64_t reserved_11_15 : 5; - uint64_t clkdiv : 13; - uint64_t reserved_29_63 : 35; -#endif - } cn31xx; - struct cvmx_mpi_cfg_s cn50xx; -} cvmx_mpi_cfg_t; - - -/** - * cvmx_mpi_dat# - */ -typedef union -{ - uint64_t u64; - struct cvmx_mpi_datx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t data : 8; /**< Data to transmit/received */ -#else - uint64_t data : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_mpi_datx_s cn30xx; - struct cvmx_mpi_datx_s cn31xx; - struct cvmx_mpi_datx_s cn50xx; -} cvmx_mpi_datx_t; - - -/** - * cvmx_mpi_sts - */ -typedef union -{ - uint64_t u64; - struct cvmx_mpi_sts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t rxnum : 5; /**< Number of bytes written for transaction */ - uint64_t reserved_1_7 : 7; - uint64_t busy : 1; /**< If 0, no MPI transaction in progress - 1, MPI engine is processing a transaction */ -#else - uint64_t busy : 1; - uint64_t reserved_1_7 : 7; - uint64_t rxnum : 5; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_mpi_sts_s cn30xx; - struct cvmx_mpi_sts_s cn31xx; - struct cvmx_mpi_sts_s cn50xx; -} cvmx_mpi_sts_t; - - -/** - * cvmx_mpi_tx - */ -typedef union -{ - uint64_t u64; - struct cvmx_mpi_tx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t leavecs : 1; /**< If 0, deassert CS after transaction is done - 1, leave CS asserted after transactrion is done */ - uint64_t reserved_13_15 : 3; - uint64_t txnum : 5; /**< Number of bytes to transmit */ - uint64_t reserved_5_7 : 3; - uint64_t totnum : 5; /**< Number of bytes to shift (transmit + receive) */ -#else - uint64_t totnum : 5; - uint64_t reserved_5_7 : 3; - uint64_t txnum : 5; - uint64_t reserved_13_15 : 3; - uint64_t leavecs : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_mpi_tx_s cn30xx; - struct cvmx_mpi_tx_s cn31xx; - struct cvmx_mpi_tx_s cn50xx; -} cvmx_mpi_tx_t; - - -/** - * cvmx_ndf_bt_pg_info - * - * Notes: - * NDF_BT_PG_INFO provides page size and number of column plus row address cycles information. SW writes to this CSR - * during boot from Nand Flash. Additionally SW also writes the multiplier value for timing parameters. This value is - * used during boot, in the SET_TM_PARAM command. This information is used only by the boot load state machine and is - * otherwise a don't care, once boot is disabled. Also, boot dma's do not use this value. - * - * Bytes per Nand Flash page = 2 ** (SIZE + 1) times 256 bytes. - * 512, 1k, 2k, 4k, 8k, 16k, 32k and 64k are legal bytes per page values - * - * Legal values for ADR_CYC field are 3 through 8. SW CSR writes with a value less than 3 will write a 3 to this - * field, and a SW CSR write with a value greater than 8, will write an 8 to this field. - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_bt_pg_info_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t t_mult : 4; /**< Boot time TIM_MULT[3:0] field of SET__TM_PAR[63:0] - command */ - uint64_t adr_cyc : 4; /**< # of column address cycles */ - uint64_t size : 3; /**< bytes per page in the nand device */ -#else - uint64_t size : 3; - uint64_t adr_cyc : 4; - uint64_t t_mult : 4; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_ndf_bt_pg_info_s cn52xx; -} cvmx_ndf_bt_pg_info_t; - - -/** - * cvmx_ndf_cmd - * - * Notes: - * When SW reads this csr, RD_VAL bit in NDF_MISC csr is cleared to 0. SW must always write all 8 bytes whenever it writes - * this csr. If there are fewer than 8 bytes left in the command sequence that SW wants the NAND flash controller to execute, it - * must insert Idle (WAIT) commands to make up 8 bytes. SW also must ensure there is enough vacancy in the command fifo to accept these - * 8 bytes, by first reading the FR_BYT field in the NDF_MISC csr. - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t nf_cmd : 64; /**< 8 Command Bytes */ -#else - uint64_t nf_cmd : 64; -#endif - } s; - struct cvmx_ndf_cmd_s cn52xx; -} cvmx_ndf_cmd_t; - - -/** - * cvmx_ndf_drbell - * - * Notes: - * SW csr writes will increment CNT by the signed 8 bit value being written. SW csr reads return the current CNT value. - * HW will also modify the value of the CNT field. Everytime HW executes a BUS_ACQ[15:0] command, to arbitrate and win the - * flash bus, it decrements the CNT field by 1. If the CNT field is already 0 or negative, HW command execution unit will - * stall when it fetches the new BUS_ACQ[15:0] command, from the command fifo. Only when the SW writes to this CSR with a - * non-zero data value, can the execution unit come out of the stalled condition, and resume execution. - * - * The intended use of this doorbell CSR is to control execution of the Nand Flash commands. The NDF execution unit - * has to arbitrate for the flash bus, before it can enable a Nand Flash device connected to the Octeon chip, by - * asserting the device's chip enable. Therefore SW should first load the command fifo, with a full sequence of - * commands to perform a Nand Flash device task. This command sequence will start with a bus acquire command and - * the last command in the sequence will be a bus release command. The execution unit will start execution of - * the sequence only if the [CNT] field is non-zero when it fetches the bus acquire command, which is the first - * command in this sequence. SW can also, load multiple such sequences, each starting with a chip enable command - * and ending with a chip disable command, and then write a non-zero data value to this csr to increment the - * CNT field by the number of the command sequences, loaded to the command fifo. - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_drbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t cnt : 8; /**< Doorbell count register, 2's complement 8 bit value */ -#else - uint64_t cnt : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_ndf_drbell_s cn52xx; -} cvmx_ndf_drbell_t; - - -/** - * cvmx_ndf_ecc_cnt - * - * Notes: - * XOR_ECC[31:8] = [ecc_gen_byt258, ecc_gen_byt257, ecc_gen_byt256] xor [ecc_258, ecc_257, ecc_256] - * ecc_258, ecc_257 and ecc_256 are bytes stored in Nand Flash and read out during boot - * ecc_gen_byt258, ecc_gen_byt257, ecc_gen_byt256 are generated from data read out from Nand Flash - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_ecc_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t xor_ecc : 24; /**< result of XOR of ecc read bytes and ecc genarated - bytes. The value pertains to the last 1 bit ecc err */ - uint64_t ecc_err : 8; /**< Count = \# of 1 bit errors fixed during boot - This count saturates instead of wrapping around. */ -#else - uint64_t ecc_err : 8; - uint64_t xor_ecc : 24; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_ndf_ecc_cnt_s cn52xx; -} cvmx_ndf_ecc_cnt_t; - - -/** - * cvmx_ndf_int - * - * Notes: - * FULL status is updated when the command fifo becomes full as a result of SW writing a new command to it. - * - * EMPTY status is updated when the command fifo becomes empty as a result of command execution unit fetching the - * last instruction out of the command fifo. - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t ovrf : 1; /**< NDF_CMD write when fifo is full. Generally a - fatal error. */ - uint64_t ecc_mult : 1; /**< Multi bit ECC error detected during boot */ - uint64_t ecc_1bit : 1; /**< Single bit ECC error detected and fixed during boot */ - uint64_t sm_bad : 1; /**< One of the state machines in a bad state */ - uint64_t wdog : 1; /**< Watch Dog timer expired during command execution */ - uint64_t full : 1; /**< Command fifo is full */ - uint64_t empty : 1; /**< Command fifo is empty */ -#else - uint64_t empty : 1; - uint64_t full : 1; - uint64_t wdog : 1; - uint64_t sm_bad : 1; - uint64_t ecc_1bit : 1; - uint64_t ecc_mult : 1; - uint64_t ovrf : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_ndf_int_s cn52xx; -} cvmx_ndf_int_t; - - -/** - * cvmx_ndf_int_en - * - * Notes: - * Like all NDF_... registers, 64-bit operations must be used to access this register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t ovrf : 1; /**< Wrote to a full command fifo */ - uint64_t ecc_mult : 1; /**< Multi bit ECC error detected during boot */ - uint64_t ecc_1bit : 1; /**< Single bit ECC error detected and fixed during boot */ - uint64_t sm_bad : 1; /**< One of the state machines in a bad state */ - uint64_t wdog : 1; /**< Watch Dog timer expired during command execution */ - uint64_t full : 1; /**< Command fifo is full */ - uint64_t empty : 1; /**< Command fifo is empty */ -#else - uint64_t empty : 1; - uint64_t full : 1; - uint64_t wdog : 1; - uint64_t sm_bad : 1; - uint64_t ecc_1bit : 1; - uint64_t ecc_mult : 1; - uint64_t ovrf : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_ndf_int_en_s cn52xx; -} cvmx_ndf_int_en_t; - - -/** - * cvmx_ndf_misc - * - * Notes: - * NBR_HWM this field specifies the high water mark for the NCB outbound load/store commands receive fifo. - * the fifo size is 16 entries. - * - * WAIT_CNT this field allows glitch filtering of the WAIT_n input to octeon, from Flash Memory. The count - * represents number of eclk cycles. - * - * FR_BYT this field specifies \# of unfilled bytes in the command fifo. Bytes become unfilled as commands - * complete execution and exit. (fifo is 256 bytes when BT_DIS=0, and 1536 bytes when BT_DIS=1) - * - * RD_DONE this W1C bit is set to 1 by HW when it reads the last 8 bytes out of the command fifo, - * in response to RD_CMD bit being set to 1 by SW. - * - * RD_VAL this read only bit is set to 1 by HW when it reads next 8 bytes from command fifo in response - * to RD_CMD bit being set to 1. A SW read of NDF_CMD csr clears this bit to 0. - * - * RD_CMD this R/W bit starts read out from the command fifo, 8 bytes at a time. SW should first read the - * RD_VAL bit in this csr to see if next 8 bytes from the command fifo are available in the - * NDF_CMD csr. All command fifo reads start and end on an 8 byte boundary. A RD_CMD in the - * middle of command execution will cause the execution to freeze until RD_DONE is set to 1. RD_CMD - * bit will be cleared on any NDF_CMD csr write by SW. - * - * BT_DMA this indicates to the NAND flash boot control state machine that boot dma read can begin. - * SW should set this bit to 1 after SW has loaded the command fifo. HW sets the bit to 0 - * when boot dma command execution is complete. If chip enable 0 is not nand flash, this bit is - * permanently 1'b0 with SW writes ignored. Whenever BT_DIS=1, this bit will be 0. - * - * BT_DIS this R/W bit indicates to NAND flash boot control state machine that boot operation has ended. - * whenever this bit changes from 0 to a 1, the command fifo is emptied as a side effect. This bit must - * never be set when booting from nand flash and region zero is enabled. - * - * EX_DIS When 1, command execution stops after completing execution of all commands currently in the command - * fifo. Once command execution has stopped, and then new commands are loaded into the command fifo, execution - * will not resume as long as this bit is 1. When this bit is 0, command execution will resume if command fifo - * is not empty. EX_DIS should be set to 1, during boot i.e. when BT_DIS = 0. - * - * RST_FF reset command fifo to make it empty, any command inflight is not aborted before reseting - * the fifo. The fifo comes up empty at the end of power on reset. - * - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_misc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t nbr_hwm : 3; /**< Hi Water mark for NBR fifo or load/stores */ - uint64_t wait_cnt : 6; /**< WAIT input filter count */ - uint64_t fr_byt : 11; /**< Number of unfilled Command fifo bytes */ - uint64_t rd_done : 1; /**< This W1C bit is set to 1 by HW when it completes - command fifo read out, in response to RD_CMD */ - uint64_t rd_val : 1; /**< This RO bit is set to 1 by HW when it reads next 8 - bytes from Command fifo into the NDF_CMD csr - SW reads NDF_CMD csr, HW clears this bit to 0 */ - uint64_t rd_cmd : 1; /**< When 1, HW reads out contents of the Command fifo 8 - bytes at a time into the NDF_CMD csr */ - uint64_t bt_dma : 1; /**< When set to 1, boot time dma is enabled */ - uint64_t bt_dis : 1; /**< When boot operation is over SW must set to 1 - causes boot state mchines to sleep */ - uint64_t ex_dis : 1; /**< When set to 1, suspends execution of commands at - next command in the fifo. */ - uint64_t rst_ff : 1; /**< 1=reset command fifo to make it empty, - 0=normal operation */ -#else - uint64_t rst_ff : 1; - uint64_t ex_dis : 1; - uint64_t bt_dis : 1; - uint64_t bt_dma : 1; - uint64_t rd_cmd : 1; - uint64_t rd_val : 1; - uint64_t rd_done : 1; - uint64_t fr_byt : 11; - uint64_t wait_cnt : 6; - uint64_t nbr_hwm : 3; - uint64_t reserved_27_63 : 37; -#endif - } s; - struct cvmx_ndf_misc_s cn52xx; -} cvmx_ndf_misc_t; - - -/** - * cvmx_ndf_st_reg - * - * Notes: - * This CSR aggregates all state machines used in nand flash controller for debug. - * Like all NDF_... registers, 64-bit operations must be used to access this register - */ -typedef union -{ - uint64_t u64; - struct cvmx_ndf_st_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t exe_idle : 1; /**< Command Execution status 1=IDLE, 0=Busy - 1 means execution of command sequence is complete - and command fifo is empty */ - uint64_t exe_sm : 4; /**< Command Execution State machine states */ - uint64_t bt_sm : 4; /**< Boot load and Boot dma State machine states */ - uint64_t rd_ff_bad : 1; /**< CMD fifo read back State machine in bad state */ - uint64_t rd_ff : 2; /**< CMD fifo read back State machine states */ - uint64_t main_bad : 1; /**< Main State machine in bad state */ - uint64_t main_sm : 3; /**< Main State machine states */ -#else - uint64_t main_sm : 3; - uint64_t main_bad : 1; - uint64_t rd_ff : 2; - uint64_t rd_ff_bad : 1; - uint64_t bt_sm : 4; - uint64_t exe_sm : 4; - uint64_t exe_idle : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_ndf_st_reg_s cn52xx; -} cvmx_ndf_st_reg_t; - - -/** - * cvmx_npei_bar1_index# - * - * Total Address is 16Kb; 0x0000 - 0x3fff, 0x000 - 0x7fe(Reg, every other 8B) - * - * General 5kb; 0x0000 - 0x13ff, 0x000 - 0x27e(Reg-General) - * PktMem 10Kb; 0x1400 - 0x3bff, 0x280 - 0x77e(Reg-General-Packet) - * Rsvd 1Kb; 0x3c00 - 0x3fff, 0x780 - 0x7fe(Reg-NCB Only Mode) - * == NPEI_PKT_CNT_INT_ENB[PORT] - * == NPEI_PKT_TIME_INT_ENB[PORT] - * == NPEI_PKT_CNT_INT[PORT] - * == NPEI_PKT_TIME_INT[PORT] - * == NPEI_PKT_PCIE_PORT[PP] - * == NPEI_PKT_SLIST_ROR[ROR] - * == NPEI_PKT_SLIST_ROR[NSR] ? - * == NPEI_PKT_SLIST_ES[ES] - * == NPEI_PKTn_SLIST_BAOFF_DBELL[AOFF] - * == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL] - * == NPEI_PKTn_CNTS[CNT] - * NPEI_CTL_STATUS[OUTn_ENB] == NPEI_PKT_OUT_ENB[ENB] - * NPEI_BASE_ADDRESS_OUTPUTn[BADDR] == NPEI_PKTn_SLIST_BADDR[ADDR] - * NPEI_DESC_OUTPUTn[SIZE] == NPEI_PKTn_SLIST_FIFO_RSIZE[RSIZE] - * NPEI_Pn_DBPAIR_ADDR[NADDR] == NPEI_PKTn_SLIST_BADDR[ADDR] + NPEI_PKTn_SLIST_BAOFF_DBELL[AOFF] - * NPEI_PKT_CREDITSn[PTR_CNT] == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL] - * NPEI_P0_PAIR_CNTS[AVAIL] == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL] - * NPEI_P0_PAIR_CNTS[FCNT] == - * NPEI_PKTS_SENTn[PKT_CNT] == NPEI_PKTn_CNTS[CNT] - * NPEI_OUTPUT_CONTROL[Pn_BMODE] == NPEI_PKT_OUT_BMODE[BMODE] - * NPEI_PKT_CREDITSn[PKT_CNT] == NPEI_PKTn_CNTS[CNT] - * NPEI_BUFF_SIZE_OUTPUTn[BSIZE] == NPEI_PKT_SLIST_ID_SIZE[BSIZE] - * NPEI_BUFF_SIZE_OUTPUTn[ISIZE] == NPEI_PKT_SLIST_ID_SIZE[ISIZE] - * NPEI_OUTPUT_CONTROL[On_CSRM] == NPEI_PKT_DPADDR[DPTR] & NPEI_PKT_OUT_USE_IPTR[PORT] - * NPEI_OUTPUT_CONTROL[On_ES] == NPEI_PKT_DATA_OUT_ES[ES] - * NPEI_OUTPUT_CONTROL[On_NS] == NPEI_PKT_DATA_OUT_NS[NSR] ? - * NPEI_OUTPUT_CONTROL[On_RO] == NPEI_PKT_DATA_OUT_ROR[ROR] - * NPEI_PKTS_SENT_INT_LEVn[PKT_CNT] == NPEI_PKT_INT_LEVELS[CNT] - * NPEI_PKTS_SENT_TIMEn[PKT_TIME] == NPEI_PKT_INT_LEVELS[TIME] - * NPEI_OUTPUT_CONTROL[IPTR_On] == NPEI_PKT_IPTR[IPTR] - * NPEI_PCIE_PORT_OUTPUT[] == NPEI_PKT_PCIE_PORT[PP] - * - * NPEI_BAR1_INDEXX = NPEI BAR1 IndexX Register - * - * Contains address index and control bits for access to memory ranges of BAR-1. Index is build from supplied address [25:22]. - * NPEI_BAR1_INDEX0 through NPEI_BAR1_INDEX15 is used for transactions orginating with PCIE-PORT0 and NPEI_BAR1_INDEX16 - * through NPEI_BAR1_INDEX31 is used for transactions originating with PCIE-PORT1. - */ -typedef union -{ - uint32_t u32; - struct cvmx_npei_bar1_indexx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_18_31 : 14; - uint32_t addr_idx : 14; /**< Address bits [35:22] sent to L2C */ - uint32_t ca : 1; /**< Set '1' when access is not to be cached in L2. */ - uint32_t end_swp : 2; /**< Endian Swap Mode */ - uint32_t addr_v : 1; /**< Set '1' when the selected address range is valid. */ -#else - uint32_t addr_v : 1; - uint32_t end_swp : 2; - uint32_t ca : 1; - uint32_t addr_idx : 14; - uint32_t reserved_18_31 : 14; -#endif - } s; - struct cvmx_npei_bar1_indexx_s cn52xx; - struct cvmx_npei_bar1_indexx_s cn52xxp1; - struct cvmx_npei_bar1_indexx_s cn56xx; - struct cvmx_npei_bar1_indexx_s cn56xxp1; -} cvmx_npei_bar1_indexx_t; - - -/** - * cvmx_npei_bist_status - * - * NPEI_BIST_STATUS = NPI's BIST Status Register - * - * Results from BIST runs of NPEI's memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pkt_rdf : 1; /**< BIST Status for PKT Read FIFO */ - uint64_t reserved_60_62 : 3; - uint64_t pcr_gim : 1; /**< BIST Status for PKT Gather Instr MEM */ - uint64_t pkt_pif : 1; /**< BIST Status for PKT INB FIFO */ - uint64_t pcsr_int : 1; /**< BIST Status for PKT pout_int_bstatus */ - uint64_t pcsr_im : 1; /**< BIST Status for PKT pcsr_instr_mem_bstatus */ - uint64_t pcsr_cnt : 1; /**< BIST Status for PKT pin_cnt_bstatus */ - uint64_t pcsr_id : 1; /**< BIST Status for PKT pcsr_in_done_bstatus */ - uint64_t pcsr_sl : 1; /**< BIST Status for PKT pcsr_slist_bstatus */ - uint64_t reserved_50_52 : 3; - uint64_t pkt_ind : 1; /**< BIST Status for PKT Instruction Done MEM */ - uint64_t pkt_slm : 1; /**< BIST Status for PKT SList MEM */ - uint64_t reserved_36_47 : 12; - uint64_t d0_pst : 1; /**< BIST Status for DMA0 Pcie Store */ - uint64_t d1_pst : 1; /**< BIST Status for DMA1 Pcie Store */ - uint64_t d2_pst : 1; /**< BIST Status for DMA2 Pcie Store */ - uint64_t d3_pst : 1; /**< BIST Status for DMA3 Pcie Store */ - uint64_t reserved_31_31 : 1; - uint64_t n2p0_c : 1; /**< BIST Status for N2P Port0 Cmd */ - uint64_t n2p0_o : 1; /**< BIST Status for N2P Port0 Data */ - uint64_t n2p1_c : 1; /**< BIST Status for N2P Port1 Cmd */ - uint64_t n2p1_o : 1; /**< BIST Status for N2P Port1 Data */ - uint64_t cpl_p0 : 1; /**< BIST Status for CPL Port 0 */ - uint64_t cpl_p1 : 1; /**< BIST Status for CPL Port 1 */ - uint64_t p2n1_po : 1; /**< BIST Status for P2N Port1 P Order */ - uint64_t p2n1_no : 1; /**< BIST Status for P2N Port1 N Order */ - uint64_t p2n1_co : 1; /**< BIST Status for P2N Port1 C Order */ - uint64_t p2n0_po : 1; /**< BIST Status for P2N Port0 P Order */ - uint64_t p2n0_no : 1; /**< BIST Status for P2N Port0 N Order */ - uint64_t p2n0_co : 1; /**< BIST Status for P2N Port0 C Order */ - uint64_t p2n0_c0 : 1; /**< BIST Status for P2N Port0 C0 */ - uint64_t p2n0_c1 : 1; /**< BIST Status for P2N Port0 C1 */ - uint64_t p2n0_n : 1; /**< BIST Status for P2N Port0 N */ - uint64_t p2n0_p0 : 1; /**< BIST Status for P2N Port0 P0 */ - uint64_t p2n0_p1 : 1; /**< BIST Status for P2N Port0 P1 */ - uint64_t p2n1_c0 : 1; /**< BIST Status for P2N Port1 C0 */ - uint64_t p2n1_c1 : 1; /**< BIST Status for P2N Port1 C1 */ - uint64_t p2n1_n : 1; /**< BIST Status for P2N Port1 N */ - uint64_t p2n1_p0 : 1; /**< BIST Status for P2N Port1 P0 */ - uint64_t p2n1_p1 : 1; /**< BIST Status for P2N Port1 P1 */ - uint64_t csm0 : 1; /**< BIST Status for CSM0 */ - uint64_t csm1 : 1; /**< BIST Status for CSM1 */ - uint64_t dif0 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif1 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif2 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif3 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t reserved_2_2 : 1; - uint64_t msi : 1; /**< BIST Status for MSI Memory Map */ - uint64_t ncb_cmd : 1; /**< BIST Status for NCB Outbound Commands */ -#else - uint64_t ncb_cmd : 1; - uint64_t msi : 1; - uint64_t reserved_2_2 : 1; - uint64_t dif3 : 1; - uint64_t dif2 : 1; - uint64_t dif1 : 1; - uint64_t dif0 : 1; - uint64_t csm1 : 1; - uint64_t csm0 : 1; - uint64_t p2n1_p1 : 1; - uint64_t p2n1_p0 : 1; - uint64_t p2n1_n : 1; - uint64_t p2n1_c1 : 1; - uint64_t p2n1_c0 : 1; - uint64_t p2n0_p1 : 1; - uint64_t p2n0_p0 : 1; - uint64_t p2n0_n : 1; - uint64_t p2n0_c1 : 1; - uint64_t p2n0_c0 : 1; - uint64_t p2n0_co : 1; - uint64_t p2n0_no : 1; - uint64_t p2n0_po : 1; - uint64_t p2n1_co : 1; - uint64_t p2n1_no : 1; - uint64_t p2n1_po : 1; - uint64_t cpl_p1 : 1; - uint64_t cpl_p0 : 1; - uint64_t n2p1_o : 1; - uint64_t n2p1_c : 1; - uint64_t n2p0_o : 1; - uint64_t n2p0_c : 1; - uint64_t reserved_31_31 : 1; - uint64_t d3_pst : 1; - uint64_t d2_pst : 1; - uint64_t d1_pst : 1; - uint64_t d0_pst : 1; - uint64_t reserved_36_47 : 12; - uint64_t pkt_slm : 1; - uint64_t pkt_ind : 1; - uint64_t reserved_50_52 : 3; - uint64_t pcsr_sl : 1; - uint64_t pcsr_id : 1; - uint64_t pcsr_cnt : 1; - uint64_t pcsr_im : 1; - uint64_t pcsr_int : 1; - uint64_t pkt_pif : 1; - uint64_t pcr_gim : 1; - uint64_t reserved_60_62 : 3; - uint64_t pkt_rdf : 1; -#endif - } s; - struct cvmx_npei_bist_status_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pkt_rdf : 1; /**< BIST Status for PKT Read FIFO */ - uint64_t reserved_60_62 : 3; - uint64_t pcr_gim : 1; /**< BIST Status for PKT Gather Instr MEM */ - uint64_t pkt_pif : 1; /**< BIST Status for PKT INB FIFO */ - uint64_t pcsr_int : 1; /**< BIST Status for PKT OUTB Interrupt MEM */ - uint64_t pcsr_im : 1; /**< BIST Status for PKT CSR Instr MEM */ - uint64_t pcsr_cnt : 1; /**< BIST Status for PKT INB Count MEM */ - uint64_t pcsr_id : 1; /**< BIST Status for PKT INB Instr Done MEM */ - uint64_t pcsr_sl : 1; /**< BIST Status for PKT OUTB SLIST MEM */ - uint64_t pkt_imem : 1; /**< BIST Status for PKT OUTB IFIFO */ - uint64_t pkt_pfm : 1; /**< BIST Status for PKT Front MEM */ - uint64_t pkt_pof : 1; /**< BIST Status for PKT OUTB FIFO */ - uint64_t reserved_48_49 : 2; - uint64_t pkt_pop0 : 1; /**< BIST Status for PKT OUTB Slist0 */ - uint64_t pkt_pop1 : 1; /**< BIST Status for PKT OUTB Slist1 */ - uint64_t d0_mem : 1; /**< BIST Status for DMA MEM 0 */ - uint64_t d1_mem : 1; /**< BIST Status for DMA MEM 1 */ - uint64_t d2_mem : 1; /**< BIST Status for DMA MEM 2 */ - uint64_t d3_mem : 1; /**< BIST Status for DMA MEM 3 */ - uint64_t d4_mem : 1; /**< BIST Status for DMA MEM 4 */ - uint64_t ds_mem : 1; /**< BIST Status for DMA Memory */ - uint64_t reserved_36_39 : 4; - uint64_t d0_pst : 1; /**< BIST Status for DMA0 Pcie Store */ - uint64_t d1_pst : 1; /**< BIST Status for DMA1 Pcie Store */ - uint64_t d2_pst : 1; /**< BIST Status for DMA2 Pcie Store */ - uint64_t d3_pst : 1; /**< BIST Status for DMA3 Pcie Store */ - uint64_t d4_pst : 1; /**< BIST Status for DMA4 Pcie Store */ - uint64_t n2p0_c : 1; /**< BIST Status for N2P Port0 Cmd */ - uint64_t n2p0_o : 1; /**< BIST Status for N2P Port0 Data */ - uint64_t n2p1_c : 1; /**< BIST Status for N2P Port1 Cmd */ - uint64_t n2p1_o : 1; /**< BIST Status for N2P Port1 Data */ - uint64_t cpl_p0 : 1; /**< BIST Status for CPL Port 0 */ - uint64_t cpl_p1 : 1; /**< BIST Status for CPL Port 1 */ - uint64_t p2n1_po : 1; /**< BIST Status for P2N Port1 P Order */ - uint64_t p2n1_no : 1; /**< BIST Status for P2N Port1 N Order */ - uint64_t p2n1_co : 1; /**< BIST Status for P2N Port1 C Order */ - uint64_t p2n0_po : 1; /**< BIST Status for P2N Port0 P Order */ - uint64_t p2n0_no : 1; /**< BIST Status for P2N Port0 N Order */ - uint64_t p2n0_co : 1; /**< BIST Status for P2N Port0 C Order */ - uint64_t p2n0_c0 : 1; /**< BIST Status for P2N Port0 C0 */ - uint64_t p2n0_c1 : 1; /**< BIST Status for P2N Port0 C1 */ - uint64_t p2n0_n : 1; /**< BIST Status for P2N Port0 N */ - uint64_t p2n0_p0 : 1; /**< BIST Status for P2N Port0 P0 */ - uint64_t p2n0_p1 : 1; /**< BIST Status for P2N Port0 P1 */ - uint64_t p2n1_c0 : 1; /**< BIST Status for P2N Port1 C0 */ - uint64_t p2n1_c1 : 1; /**< BIST Status for P2N Port1 C1 */ - uint64_t p2n1_n : 1; /**< BIST Status for P2N Port1 N */ - uint64_t p2n1_p0 : 1; /**< BIST Status for P2N Port1 P0 */ - uint64_t p2n1_p1 : 1; /**< BIST Status for P2N Port1 P1 */ - uint64_t csm0 : 1; /**< BIST Status for CSM0 */ - uint64_t csm1 : 1; /**< BIST Status for CSM1 */ - uint64_t dif0 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif1 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif2 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif3 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif4 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t msi : 1; /**< BIST Status for MSI Memory Map */ - uint64_t ncb_cmd : 1; /**< BIST Status for NCB Outbound Commands */ -#else - uint64_t ncb_cmd : 1; - uint64_t msi : 1; - uint64_t dif4 : 1; - uint64_t dif3 : 1; - uint64_t dif2 : 1; - uint64_t dif1 : 1; - uint64_t dif0 : 1; - uint64_t csm1 : 1; - uint64_t csm0 : 1; - uint64_t p2n1_p1 : 1; - uint64_t p2n1_p0 : 1; - uint64_t p2n1_n : 1; - uint64_t p2n1_c1 : 1; - uint64_t p2n1_c0 : 1; - uint64_t p2n0_p1 : 1; - uint64_t p2n0_p0 : 1; - uint64_t p2n0_n : 1; - uint64_t p2n0_c1 : 1; - uint64_t p2n0_c0 : 1; - uint64_t p2n0_co : 1; - uint64_t p2n0_no : 1; - uint64_t p2n0_po : 1; - uint64_t p2n1_co : 1; - uint64_t p2n1_no : 1; - uint64_t p2n1_po : 1; - uint64_t cpl_p1 : 1; - uint64_t cpl_p0 : 1; - uint64_t n2p1_o : 1; - uint64_t n2p1_c : 1; - uint64_t n2p0_o : 1; - uint64_t n2p0_c : 1; - uint64_t d4_pst : 1; - uint64_t d3_pst : 1; - uint64_t d2_pst : 1; - uint64_t d1_pst : 1; - uint64_t d0_pst : 1; - uint64_t reserved_36_39 : 4; - uint64_t ds_mem : 1; - uint64_t d4_mem : 1; - uint64_t d3_mem : 1; - uint64_t d2_mem : 1; - uint64_t d1_mem : 1; - uint64_t d0_mem : 1; - uint64_t pkt_pop1 : 1; - uint64_t pkt_pop0 : 1; - uint64_t reserved_48_49 : 2; - uint64_t pkt_pof : 1; - uint64_t pkt_pfm : 1; - uint64_t pkt_imem : 1; - uint64_t pcsr_sl : 1; - uint64_t pcsr_id : 1; - uint64_t pcsr_cnt : 1; - uint64_t pcsr_im : 1; - uint64_t pcsr_int : 1; - uint64_t pkt_pif : 1; - uint64_t pcr_gim : 1; - uint64_t reserved_60_62 : 3; - uint64_t pkt_rdf : 1; -#endif - } cn52xx; - struct cvmx_npei_bist_status_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_46_63 : 18; - uint64_t d0_mem0 : 1; /**< BIST Status for DMA0 Memory */ - uint64_t d1_mem1 : 1; /**< BIST Status for DMA1 Memory */ - uint64_t d2_mem2 : 1; /**< BIST Status for DMA2 Memory */ - uint64_t d3_mem3 : 1; /**< BIST Status for DMA3 Memory */ - uint64_t dr0_mem : 1; /**< BIST Status for DMA0 Store */ - uint64_t d0_mem : 1; /**< BIST Status for DMA0 Memory */ - uint64_t d1_mem : 1; /**< BIST Status for DMA1 Memory */ - uint64_t d2_mem : 1; /**< BIST Status for DMA2 Memory */ - uint64_t d3_mem : 1; /**< BIST Status for DMA3 Memory */ - uint64_t dr1_mem : 1; /**< BIST Status for DMA1 Store */ - uint64_t d0_pst : 1; /**< BIST Status for DMA0 Pcie Store */ - uint64_t d1_pst : 1; /**< BIST Status for DMA1 Pcie Store */ - uint64_t d2_pst : 1; /**< BIST Status for DMA2 Pcie Store */ - uint64_t d3_pst : 1; /**< BIST Status for DMA3 Pcie Store */ - uint64_t dr2_mem : 1; /**< BIST Status for DMA2 Store */ - uint64_t n2p0_c : 1; /**< BIST Status for N2P Port0 Cmd */ - uint64_t n2p0_o : 1; /**< BIST Status for N2P Port0 Data */ - uint64_t n2p1_c : 1; /**< BIST Status for N2P Port1 Cmd */ - uint64_t n2p1_o : 1; /**< BIST Status for N2P Port1 Data */ - uint64_t cpl_p0 : 1; /**< BIST Status for CPL Port 0 */ - uint64_t cpl_p1 : 1; /**< BIST Status for CPL Port 1 */ - uint64_t p2n1_po : 1; /**< BIST Status for P2N Port1 P Order */ - uint64_t p2n1_no : 1; /**< BIST Status for P2N Port1 N Order */ - uint64_t p2n1_co : 1; /**< BIST Status for P2N Port1 C Order */ - uint64_t p2n0_po : 1; /**< BIST Status for P2N Port0 P Order */ - uint64_t p2n0_no : 1; /**< BIST Status for P2N Port0 N Order */ - uint64_t p2n0_co : 1; /**< BIST Status for P2N Port0 C Order */ - uint64_t p2n0_c0 : 1; /**< BIST Status for P2N Port0 C0 */ - uint64_t p2n0_c1 : 1; /**< BIST Status for P2N Port0 C1 */ - uint64_t p2n0_n : 1; /**< BIST Status for P2N Port0 N */ - uint64_t p2n0_p0 : 1; /**< BIST Status for P2N Port0 P0 */ - uint64_t p2n0_p1 : 1; /**< BIST Status for P2N Port0 P1 */ - uint64_t p2n1_c0 : 1; /**< BIST Status for P2N Port1 C0 */ - uint64_t p2n1_c1 : 1; /**< BIST Status for P2N Port1 C1 */ - uint64_t p2n1_n : 1; /**< BIST Status for P2N Port1 N */ - uint64_t p2n1_p0 : 1; /**< BIST Status for P2N Port1 P0 */ - uint64_t p2n1_p1 : 1; /**< BIST Status for P2N Port1 P1 */ - uint64_t csm0 : 1; /**< BIST Status for CSM0 */ - uint64_t csm1 : 1; /**< BIST Status for CSM1 */ - uint64_t dif0 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif1 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif2 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif3 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dr3_mem : 1; /**< BIST Status for DMA3 Store */ - uint64_t msi : 1; /**< BIST Status for MSI Memory Map */ - uint64_t ncb_cmd : 1; /**< BIST Status for NCB Outbound Commands */ -#else - uint64_t ncb_cmd : 1; - uint64_t msi : 1; - uint64_t dr3_mem : 1; - uint64_t dif3 : 1; - uint64_t dif2 : 1; - uint64_t dif1 : 1; - uint64_t dif0 : 1; - uint64_t csm1 : 1; - uint64_t csm0 : 1; - uint64_t p2n1_p1 : 1; - uint64_t p2n1_p0 : 1; - uint64_t p2n1_n : 1; - uint64_t p2n1_c1 : 1; - uint64_t p2n1_c0 : 1; - uint64_t p2n0_p1 : 1; - uint64_t p2n0_p0 : 1; - uint64_t p2n0_n : 1; - uint64_t p2n0_c1 : 1; - uint64_t p2n0_c0 : 1; - uint64_t p2n0_co : 1; - uint64_t p2n0_no : 1; - uint64_t p2n0_po : 1; - uint64_t p2n1_co : 1; - uint64_t p2n1_no : 1; - uint64_t p2n1_po : 1; - uint64_t cpl_p1 : 1; - uint64_t cpl_p0 : 1; - uint64_t n2p1_o : 1; - uint64_t n2p1_c : 1; - uint64_t n2p0_o : 1; - uint64_t n2p0_c : 1; - uint64_t dr2_mem : 1; - uint64_t d3_pst : 1; - uint64_t d2_pst : 1; - uint64_t d1_pst : 1; - uint64_t d0_pst : 1; - uint64_t dr1_mem : 1; - uint64_t d3_mem : 1; - uint64_t d2_mem : 1; - uint64_t d1_mem : 1; - uint64_t d0_mem : 1; - uint64_t dr0_mem : 1; - uint64_t d3_mem3 : 1; - uint64_t d2_mem2 : 1; - uint64_t d1_mem1 : 1; - uint64_t d0_mem0 : 1; - uint64_t reserved_46_63 : 18; -#endif - } cn52xxp1; - struct cvmx_npei_bist_status_cn52xx cn56xx; - struct cvmx_npei_bist_status_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_58_63 : 6; - uint64_t pcsr_int : 1; /**< BIST Status for PKT pout_int_bstatus */ - uint64_t pcsr_im : 1; /**< BIST Status for PKT pcsr_instr_mem_bstatus */ - uint64_t pcsr_cnt : 1; /**< BIST Status for PKT pin_cnt_bstatus */ - uint64_t pcsr_id : 1; /**< BIST Status for PKT pcsr_in_done_bstatus */ - uint64_t pcsr_sl : 1; /**< BIST Status for PKT pcsr_slist_bstatus */ - uint64_t pkt_pout : 1; /**< BIST Status for PKT OUT Count MEM */ - uint64_t pkt_imem : 1; /**< BIST Status for PKT Instruction MEM */ - uint64_t pkt_cntm : 1; /**< BIST Status for PKT Count MEM */ - uint64_t pkt_ind : 1; /**< BIST Status for PKT Instruction Done MEM */ - uint64_t pkt_slm : 1; /**< BIST Status for PKT SList MEM */ - uint64_t pkt_odf : 1; /**< BIST Status for PKT Output Data FIFO */ - uint64_t pkt_oif : 1; /**< BIST Status for PKT Output INFO FIFO */ - uint64_t pkt_out : 1; /**< BIST Status for PKT Output FIFO */ - uint64_t pkt_i0 : 1; /**< BIST Status for PKT Instr0 */ - uint64_t pkt_i1 : 1; /**< BIST Status for PKT Instr1 */ - uint64_t pkt_s0 : 1; /**< BIST Status for PKT Slist0 */ - uint64_t pkt_s1 : 1; /**< BIST Status for PKT Slist1 */ - uint64_t d0_mem : 1; /**< BIST Status for DMA0 Memory */ - uint64_t d1_mem : 1; /**< BIST Status for DMA1 Memory */ - uint64_t d2_mem : 1; /**< BIST Status for DMA2 Memory */ - uint64_t d3_mem : 1; /**< BIST Status for DMA3 Memory */ - uint64_t d4_mem : 1; /**< BIST Status for DMA4 Memory */ - uint64_t d0_pst : 1; /**< BIST Status for DMA0 Pcie Store */ - uint64_t d1_pst : 1; /**< BIST Status for DMA1 Pcie Store */ - uint64_t d2_pst : 1; /**< BIST Status for DMA2 Pcie Store */ - uint64_t d3_pst : 1; /**< BIST Status for DMA3 Pcie Store */ - uint64_t d4_pst : 1; /**< BIST Status for DMA4 Pcie Store */ - uint64_t n2p0_c : 1; /**< BIST Status for N2P Port0 Cmd */ - uint64_t n2p0_o : 1; /**< BIST Status for N2P Port0 Data */ - uint64_t n2p1_c : 1; /**< BIST Status for N2P Port1 Cmd */ - uint64_t n2p1_o : 1; /**< BIST Status for N2P Port1 Data */ - uint64_t cpl_p0 : 1; /**< BIST Status for CPL Port 0 */ - uint64_t cpl_p1 : 1; /**< BIST Status for CPL Port 1 */ - uint64_t p2n1_po : 1; /**< BIST Status for P2N Port1 P Order */ - uint64_t p2n1_no : 1; /**< BIST Status for P2N Port1 N Order */ - uint64_t p2n1_co : 1; /**< BIST Status for P2N Port1 C Order */ - uint64_t p2n0_po : 1; /**< BIST Status for P2N Port0 P Order */ - uint64_t p2n0_no : 1; /**< BIST Status for P2N Port0 N Order */ - uint64_t p2n0_co : 1; /**< BIST Status for P2N Port0 C Order */ - uint64_t p2n0_c0 : 1; /**< BIST Status for P2N Port0 C0 */ - uint64_t p2n0_c1 : 1; /**< BIST Status for P2N Port0 C1 */ - uint64_t p2n0_n : 1; /**< BIST Status for P2N Port0 N */ - uint64_t p2n0_p0 : 1; /**< BIST Status for P2N Port0 P0 */ - uint64_t p2n0_p1 : 1; /**< BIST Status for P2N Port0 P1 */ - uint64_t p2n1_c0 : 1; /**< BIST Status for P2N Port1 C0 */ - uint64_t p2n1_c1 : 1; /**< BIST Status for P2N Port1 C1 */ - uint64_t p2n1_n : 1; /**< BIST Status for P2N Port1 N */ - uint64_t p2n1_p0 : 1; /**< BIST Status for P2N Port1 P0 */ - uint64_t p2n1_p1 : 1; /**< BIST Status for P2N Port1 P1 */ - uint64_t csm0 : 1; /**< BIST Status for CSM0 */ - uint64_t csm1 : 1; /**< BIST Status for CSM1 */ - uint64_t dif0 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif1 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif2 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif3 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t dif4 : 1; /**< BIST Status for DMA Instr0 */ - uint64_t msi : 1; /**< BIST Status for MSI Memory Map */ - uint64_t ncb_cmd : 1; /**< BIST Status for NCB Outbound Commands */ -#else - uint64_t ncb_cmd : 1; - uint64_t msi : 1; - uint64_t dif4 : 1; - uint64_t dif3 : 1; - uint64_t dif2 : 1; - uint64_t dif1 : 1; - uint64_t dif0 : 1; - uint64_t csm1 : 1; - uint64_t csm0 : 1; - uint64_t p2n1_p1 : 1; - uint64_t p2n1_p0 : 1; - uint64_t p2n1_n : 1; - uint64_t p2n1_c1 : 1; - uint64_t p2n1_c0 : 1; - uint64_t p2n0_p1 : 1; - uint64_t p2n0_p0 : 1; - uint64_t p2n0_n : 1; - uint64_t p2n0_c1 : 1; - uint64_t p2n0_c0 : 1; - uint64_t p2n0_co : 1; - uint64_t p2n0_no : 1; - uint64_t p2n0_po : 1; - uint64_t p2n1_co : 1; - uint64_t p2n1_no : 1; - uint64_t p2n1_po : 1; - uint64_t cpl_p1 : 1; - uint64_t cpl_p0 : 1; - uint64_t n2p1_o : 1; - uint64_t n2p1_c : 1; - uint64_t n2p0_o : 1; - uint64_t n2p0_c : 1; - uint64_t d4_pst : 1; - uint64_t d3_pst : 1; - uint64_t d2_pst : 1; - uint64_t d1_pst : 1; - uint64_t d0_pst : 1; - uint64_t d4_mem : 1; - uint64_t d3_mem : 1; - uint64_t d2_mem : 1; - uint64_t d1_mem : 1; - uint64_t d0_mem : 1; - uint64_t pkt_s1 : 1; - uint64_t pkt_s0 : 1; - uint64_t pkt_i1 : 1; - uint64_t pkt_i0 : 1; - uint64_t pkt_out : 1; - uint64_t pkt_oif : 1; - uint64_t pkt_odf : 1; - uint64_t pkt_slm : 1; - uint64_t pkt_ind : 1; - uint64_t pkt_cntm : 1; - uint64_t pkt_imem : 1; - uint64_t pkt_pout : 1; - uint64_t pcsr_sl : 1; - uint64_t pcsr_id : 1; - uint64_t pcsr_cnt : 1; - uint64_t pcsr_im : 1; - uint64_t pcsr_int : 1; - uint64_t reserved_58_63 : 6; -#endif - } cn56xxp1; -} cvmx_npei_bist_status_t; - - -/** - * cvmx_npei_bist_status2 - * - * NPEI_BIST_STATUS2 = NPI's BIST Status Register2 - * - * Results from BIST runs of NPEI's memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_bist_status2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t prd_tag : 1; /**< BIST Status for DMA PCIE RD Tag MEM */ - uint64_t prd_st0 : 1; /**< BIST Status for DMA PCIE RD state MEM 0 */ - uint64_t prd_st1 : 1; /**< BIST Status for DMA PCIE RD state MEM 1 */ - uint64_t prd_err : 1; /**< BIST Status for DMA PCIE RD ERR state MEM */ - uint64_t nrd_st : 1; /**< BIST Status for DMA L2C RD state MEM */ - uint64_t nwe_st : 1; /**< BIST Status for DMA L2C WR state MEM */ - uint64_t nwe_wr0 : 1; /**< BIST Status for DMA L2C WR MEM 0 */ - uint64_t nwe_wr1 : 1; /**< BIST Status for DMA L2C WR MEM 1 */ - uint64_t pkt_rd : 1; /**< BIST Status for Inbound PKT MEM */ - uint64_t psc_p0 : 1; /**< BIST Status for PSC TLP 0 MEM */ - uint64_t psc_p1 : 1; /**< BIST Status for PSC TLP 1 MEM */ - uint64_t pkt_gd : 1; /**< BIST Status for PKT OUTB Gather Data FIFO */ - uint64_t pkt_gl : 1; /**< BIST Status for PKT_OUTB Gather List FIFO */ - uint64_t pkt_blk : 1; /**< BIST Status for PKT OUTB Blocked FIFO */ -#else - uint64_t pkt_blk : 1; - uint64_t pkt_gl : 1; - uint64_t pkt_gd : 1; - uint64_t psc_p1 : 1; - uint64_t psc_p0 : 1; - uint64_t pkt_rd : 1; - uint64_t nwe_wr1 : 1; - uint64_t nwe_wr0 : 1; - uint64_t nwe_st : 1; - uint64_t nrd_st : 1; - uint64_t prd_err : 1; - uint64_t prd_st1 : 1; - uint64_t prd_st0 : 1; - uint64_t prd_tag : 1; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_npei_bist_status2_s cn52xx; - struct cvmx_npei_bist_status2_s cn56xx; -} cvmx_npei_bist_status2_t; - - -/** - * cvmx_npei_ctl_port0 - * - * NPEI_CTL_PORT0 = NPEI's Control Port 0 - * - * Contains control for access for Port0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_ctl_port0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t waitl_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional completions - to the L2C from the PCIe. - Set this for more conservative behavior. Clear - this for more aggressive, higher-performance - behavior */ - uint64_t intd : 1; /**< When '0' Intd wire asserted. Before mapping. */ - uint64_t intc : 1; /**< When '0' Intc wire asserted. Before mapping. */ - uint64_t intb : 1; /**< When '0' Intb wire asserted. Before mapping. */ - uint64_t inta : 1; /**< When '0' Inta wire asserted. Before mapping. */ - uint64_t intd_map : 2; /**< Maps INTD to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t intc_map : 2; /**< Maps INTC to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t intb_map : 2; /**< Maps INTB to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t inta_map : 2; /**< Maps INTA to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t ctlp_ro : 1; /**< Relaxed ordering enable for Completion TLPS. */ - uint64_t reserved_6_6 : 1; - uint64_t ptlp_ro : 1; /**< Relaxed ordering enable for Posted TLPS. */ - uint64_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when - clear '0' BAR2 access will cause UR responses. */ - uint64_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to - determine the endian swap mode. */ - uint64_t bar2_cax : 1; /**< Value will be XORed with pcie-address[38] to - determine the L2 cache attribute. - Not cached in L2 if XOR result is 1 */ - uint64_t wait_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional stores to - the L2C from the PCIe. - Most applications will not notice a difference, so - should not set this bit. Setting the bit is more - conservative on ordering, lower performance */ -#else - uint64_t wait_com : 1; - uint64_t bar2_cax : 1; - uint64_t bar2_esx : 2; - uint64_t bar2_enb : 1; - uint64_t ptlp_ro : 1; - uint64_t reserved_6_6 : 1; - uint64_t ctlp_ro : 1; - uint64_t inta_map : 2; - uint64_t intb_map : 2; - uint64_t intc_map : 2; - uint64_t intd_map : 2; - uint64_t inta : 1; - uint64_t intb : 1; - uint64_t intc : 1; - uint64_t intd : 1; - uint64_t waitl_com : 1; - uint64_t reserved_21_63 : 43; -#endif - } s; - struct cvmx_npei_ctl_port0_s cn52xx; - struct cvmx_npei_ctl_port0_s cn52xxp1; - struct cvmx_npei_ctl_port0_s cn56xx; - struct cvmx_npei_ctl_port0_s cn56xxp1; -} cvmx_npei_ctl_port0_t; - - -/** - * cvmx_npei_ctl_port1 - * - * NPEI_CTL_PORT1 = NPEI's Control Port1 - * - * Contains control for access for Port1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_ctl_port1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t waitl_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional completions - to the L2C from the PCIe. - Set this for more conservative behavior. Clear - this for more aggressive, higher-performance */ - uint64_t intd : 1; /**< When '0' Intd wire asserted. Before mapping. */ - uint64_t intc : 1; /**< When '0' Intc wire asserted. Before mapping. */ - uint64_t intb : 1; /**< When '0' Intv wire asserted. Before mapping. */ - uint64_t inta : 1; /**< When '0' Inta wire asserted. Before mapping. */ - uint64_t intd_map : 2; /**< Maps INTD to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t intc_map : 2; /**< Maps INTC to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t intb_map : 2; /**< Maps INTB to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t inta_map : 2; /**< Maps INTA to INTA(00), INTB(01), INTC(10) or - INTD (11). */ - uint64_t ctlp_ro : 1; /**< Relaxed ordering enable for Completion TLPS. */ - uint64_t reserved_6_6 : 1; - uint64_t ptlp_ro : 1; /**< Relaxed ordering enable for Posted TLPS. */ - uint64_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when - clear '0' BAR2 access will cause UR responses. */ - uint64_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to - determine the endian swap mode. */ - uint64_t bar2_cax : 1; /**< Value will be XORed with pcie-address[38] to - determine the L2 cache attribute. - Not cached in L2 if XOR result is 1 */ - uint64_t wait_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional stores to - the L2C from the PCIe. - Most applications will not notice a difference, so - should not set this bit. Setting the bit is more - conservative on ordering, lower performance */ -#else - uint64_t wait_com : 1; - uint64_t bar2_cax : 1; - uint64_t bar2_esx : 2; - uint64_t bar2_enb : 1; - uint64_t ptlp_ro : 1; - uint64_t reserved_6_6 : 1; - uint64_t ctlp_ro : 1; - uint64_t inta_map : 2; - uint64_t intb_map : 2; - uint64_t intc_map : 2; - uint64_t intd_map : 2; - uint64_t inta : 1; - uint64_t intb : 1; - uint64_t intc : 1; - uint64_t intd : 1; - uint64_t waitl_com : 1; - uint64_t reserved_21_63 : 43; -#endif - } s; - struct cvmx_npei_ctl_port1_s cn52xx; - struct cvmx_npei_ctl_port1_s cn52xxp1; - struct cvmx_npei_ctl_port1_s cn56xx; - struct cvmx_npei_ctl_port1_s cn56xxp1; -} cvmx_npei_ctl_port1_t; - - -/** - * cvmx_npei_ctl_status - * - * NPEI_CTL_STATUS = NPEI Control Status Register - * - * Contains control and status for NPEI. Writes to this register are not oSrdered with writes/reads to the PCIe Memory space. - * To ensure that a write has completed the user must read the register before making an access(i.e. PCIe memory space) - * that requires the value of this register to be updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t p1_ntags : 6; /**< Number of tags avaiable for PCIe Port1. - In RC mode 1 tag is needed for each outbound TLP - that requires a CPL TLP. In Endpoint mode the - number of tags required for a TLP request is - 1 per 64-bytes of CPL data + 1. - This field should only be written as part of - reset sequence, before issuing any reads, CFGs, or - IO transactions from the core(s). */ - uint64_t p0_ntags : 6; /**< Number of tags avaiable for PCIe Port0. - In RC mode 1 tag is needed for each outbound TLP - that requires a CPL TLP. In Endpoint mode the - number of tags required for a TLP request is - 1 per 64-bytes of CPL data + 1. - This field should only be written as part of - reset sequence, before issuing any reads, CFGs, or - IO transactions from the core(s). */ - uint64_t cfg_rtry : 16; /**< The time x 0x10000 in core clocks to wait for a - CPL to a CFG RD that does not carry a Retry Status. - Until such time that the timeout occurs and Retry - Status is received for a CFG RD, the Read CFG Read - will be resent. A value of 0 disables retries and - treats a CPL Retry as a CPL UR. */ - uint64_t ring_en : 1; /**< When '0' forces "relative Q position" received - from PKO to be zero, and replicates the back- - pressure indication for the first ring attached - to a PKO port across all the rings attached to a - PKO port. When '0', only rings 0-3 can be used. */ - uint64_t lnk_rst : 1; /**< Set when PCIe Core 0 request a link reset due to - link down state. This bit is only reset on raw - reset so it can be read for state to determine if - a reset occured. Bit is cleared when a '1' is - written to this field. */ - uint64_t arb : 1; /**< PCIe switch arbitration mode. '0' == fixed priority - NPEI, PCIe0, then PCIe1. '1' == round robin. */ - uint64_t pkt_bp : 4; /**< Unused */ - uint64_t host_mode : 1; /**< Host mode */ - uint64_t chip_rev : 8; /**< The chip revision. */ -#else - uint64_t chip_rev : 8; - uint64_t host_mode : 1; - uint64_t pkt_bp : 4; - uint64_t arb : 1; - uint64_t lnk_rst : 1; - uint64_t ring_en : 1; - uint64_t cfg_rtry : 16; - uint64_t p0_ntags : 6; - uint64_t p1_ntags : 6; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npei_ctl_status_s cn52xx; - struct cvmx_npei_ctl_status_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t p1_ntags : 6; /**< Number of tags avaiable for PCIe Port1. - In RC mode 1 tag is needed for each outbound TLP - that requires a CPL TLP. In Endpoint mode the - number of tags required for a TLP request is - 1 per 64-bytes of CPL data + 1. - This field should only be written as part of - reset sequence, before issuing any reads, CFGs, or - IO transactions from the core(s). */ - uint64_t p0_ntags : 6; /**< Number of tags avaiable for PCIe Port0. - In RC mode 1 tag is needed for each outbound TLP - that requires a CPL TLP. In Endpoint mode the - number of tags required for a TLP request is - 1 per 64-bytes of CPL data + 1. - This field should only be written as part of - reset sequence, before issuing any reads, CFGs, or - IO transactions from the core(s). */ - uint64_t cfg_rtry : 16; /**< The time x 0x10000 in core clocks to wait for a - CPL to a CFG RD that does not carry a Retry Status. - Until such time that the timeout occurs and Retry - Status is received for a CFG RD, the Read CFG Read - will be resent. A value of 0 disables retries and - treats a CPL Retry as a CPL UR. */ - uint64_t reserved_15_15 : 1; - uint64_t lnk_rst : 1; /**< Set when PCIe Core 0 request a link reset due to - link down state. This bit is only reset on raw - reset so it can be read for state to determine if - a reset occured. Bit is cleared when a '1' is - written to this field. */ - uint64_t arb : 1; /**< PCIe switch arbitration mode. '0' == fixed priority - NPEI, PCIe0, then PCIe1. '1' == round robin. */ - uint64_t reserved_9_12 : 4; - uint64_t host_mode : 1; /**< Host mode */ - uint64_t chip_rev : 8; /**< The chip revision. */ -#else - uint64_t chip_rev : 8; - uint64_t host_mode : 1; - uint64_t reserved_9_12 : 4; - uint64_t arb : 1; - uint64_t lnk_rst : 1; - uint64_t reserved_15_15 : 1; - uint64_t cfg_rtry : 16; - uint64_t p0_ntags : 6; - uint64_t p1_ntags : 6; - uint64_t reserved_44_63 : 20; -#endif - } cn52xxp1; - struct cvmx_npei_ctl_status_s cn56xx; - struct cvmx_npei_ctl_status_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t lnk_rst : 1; /**< Set when PCIe Core 0 request a link reset due to - link down state. This bit is only reset on raw - reset so it can be read for state to determine if - a reset occured. Bit is cleared when a '1' is - written to this field. */ - uint64_t arb : 1; /**< PCIe switch arbitration mode. '0' == fixed priority - NPEI, PCIe0, then PCIe1. '1' == round robin. */ - uint64_t pkt_bp : 4; /**< Unused */ - uint64_t host_mode : 1; /**< Host mode */ - uint64_t chip_rev : 8; /**< The chip revision. */ -#else - uint64_t chip_rev : 8; - uint64_t host_mode : 1; - uint64_t pkt_bp : 4; - uint64_t arb : 1; - uint64_t lnk_rst : 1; - uint64_t reserved_15_63 : 49; -#endif - } cn56xxp1; -} cvmx_npei_ctl_status_t; - - -/** - * cvmx_npei_ctl_status2 - * - * NPEI_CTL_STATUS2 = NPEI's Control Status2 Register - * - * Contains control and status for NPEI. - * Writes to this register are not ordered with writes/reads to the PCI Memory space. - * To ensure that a write has completed the user must read the register before - * making an access(i.e. PCI memory space) that requires the value of this register to be updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_ctl_status2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mps : 1; /**< Max Payload Size - 0 = 128B - 1 = 256B - Note: PCIE*_CFG030[MPS] must be set to the same - value for proper function. */ - uint64_t mrrs : 3; /**< Max Read Request Size - 0 = 128B - 1 = 256B - 2 = 512B - 3 = 1024B - 4 = 2048B - 5 = 4096B - Note: This field must not exceed the desired - max read request size. This means this field - should not exceed PCIE*_CFG030[MRRS]. */ - uint64_t c1_w_flt : 1; /**< When '1' enables the window filter for reads and - writes using the window registers. - PCIE-Port1. - Unfilter writes are: - MIO, SubId0 - MIO, SubId7 - NPEI, SubId0 - NPEI, SubId7 - POW, SubId7 - IPD, SubId7 - USBN0, SubId7 - Unfiltered Reads are: - MIO, SubId0 - MIO, SubId7 - NPEI, SubId0 - NPEI, SubId7 - POW, SubId1 - POW, SubId2 - POW, SubId3 - POW, SubId7 - IPD, SubId7 - USBN0, SubId7 */ - uint64_t c0_w_flt : 1; /**< When '1' enables the window filter for reads and - writes using the window registers. - PCIE-Port0. - Unfilter writes are: - MIO, SubId0 - MIO, SubId7 - NPEI, SubId0 - NPEI, SubId7 - POW, SubId7 - IPD, SubId7 - USBN0, SubId7 - Unfiltered Reads are: - MIO, SubId0 - MIO, SubId7 - NPEI, SubId0 - NPEI, SubId7 - POW, SubId1 - POW, SubId2 - POW, SubId3 - POW, SubId7 - IPD, SubId7 - USBN0, SubId7 */ - uint64_t c1_b1_s : 3; /**< Pcie-Port1, Bar1 Size. 1 == 64MB, 2 == 128MB, - 3 == 256MB, 4 == 512MB, 5 == 1024MB, 6 == 2048MB, - 0 and 7 are reserved. */ - uint64_t c0_b1_s : 3; /**< Pcie-Port0, Bar1 Size. 1 == 64MB, 2 == 128MB, - 3 == 256MB, 4 == 512MB, 5 == 1024MB, 6 == 2048MB, - 0 and 7 are reserved. */ - uint64_t c1_wi_d : 1; /**< When set '1' disables access to the Window - Registers from the PCIe-Port1. */ - uint64_t c1_b0_d : 1; /**< When set '1' disables access from PCIe-Port1 to - BAR-0 address offsets: Less Than 0x270, - Greater than 0x270 AND less than 0x0520, 0x3BC0, - 0x3CD0. */ - uint64_t c0_wi_d : 1; /**< When set '1' disables access to the Window - Registers from the PCIe-Port0. */ - uint64_t c0_b0_d : 1; /**< When set '1' disables access from PCIe-Port0 to - BAR-0 address offsets: Less Than 0x270, - Greater than 0x270 AND less than 0x0520, 0x3BC0, - 0x3CD0. */ -#else - uint64_t c0_b0_d : 1; - uint64_t c0_wi_d : 1; - uint64_t c1_b0_d : 1; - uint64_t c1_wi_d : 1; - uint64_t c0_b1_s : 3; - uint64_t c1_b1_s : 3; - uint64_t c0_w_flt : 1; - uint64_t c1_w_flt : 1; - uint64_t mrrs : 3; - uint64_t mps : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npei_ctl_status2_s cn52xx; - struct cvmx_npei_ctl_status2_s cn52xxp1; - struct cvmx_npei_ctl_status2_s cn56xx; - struct cvmx_npei_ctl_status2_s cn56xxp1; -} cvmx_npei_ctl_status2_t; - - -/** - * cvmx_npei_data_out_cnt - * - * NPEI_DATA_OUT_CNT = NPEI DATA OUT COUNT - * - * The EXEC data out fifo-count and the data unload counter. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_data_out_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t p1_ucnt : 16; /**< PCIE-Port1 Fifo Unload Count. This counter is - incremented by '1' every time a word is removed - from the Data Out FIFO, whose count is shown in - P0_FCNT. */ - uint64_t p1_fcnt : 6; /**< PCIE-Port1 Data Out Fifo Count. Number of address - data words to be sent out the PCIe port presently - buffered in the FIFO. */ - uint64_t p0_ucnt : 16; /**< PCIE-Port0 Fifo Unload Count. This counter is - incremented by '1' every time a word is removed - from the Data Out FIFO, whose count is shown in - P0_FCNT. */ - uint64_t p0_fcnt : 6; /**< PCIE-Port0 Data Out Fifo Count. Number of address - data words to be sent out the PCIe port presently - buffered in the FIFO. */ -#else - uint64_t p0_fcnt : 6; - uint64_t p0_ucnt : 16; - uint64_t p1_fcnt : 6; - uint64_t p1_ucnt : 16; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npei_data_out_cnt_s cn52xx; - struct cvmx_npei_data_out_cnt_s cn52xxp1; - struct cvmx_npei_data_out_cnt_s cn56xx; - struct cvmx_npei_data_out_cnt_s cn56xxp1; -} cvmx_npei_data_out_cnt_t; - - -/** - * cvmx_npei_dbg_data - * - * NPEI_DBG_DATA = NPEI Debug Data Register - * - * Value returned on the debug-data lines from the RSLs - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dbg_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t qlm0_rev_lanes : 1; /**< Lane reversal for PCIe port 0 */ - uint64_t reserved_25_26 : 2; - uint64_t qlm1_spd : 2; /**< Sets the QLM1 frequency - 0=1.25 Gbaud - 1=2.5 Gbaud - 2=3.125 Gbaud - 3=3.75 Gbaud */ - uint64_t c_mul : 5; /**< PLL_MUL pins sampled at DCOK assertion - Core frequency = 50MHz*C_MUL */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t qlm1_spd : 2; - uint64_t reserved_25_26 : 2; - uint64_t qlm0_rev_lanes : 1; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_npei_dbg_data_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t qlm0_link_width : 1; /**< Link width of PCIe port 0 - 0 = PCIe port 0 is 2 lanes, - 2 lane PCIe port 1 exists - 1 = PCIe port 0 is 4 lanes, - PCIe port 1 does not exist */ - uint64_t qlm0_rev_lanes : 1; /**< Lane reversal for PCIe port 0 */ - uint64_t qlm1_mode : 2; /**< Sets the QLM1 Mode - 0=Reserved - 1=XAUI - 2=SGMII - 3=PICMG */ - uint64_t qlm1_spd : 2; /**< Sets the QLM1 frequency - 0=1.25 Gbaud - 1=2.5 Gbaud - 2=3.125 Gbaud - 3=3.75 Gbaud */ - uint64_t c_mul : 5; /**< PLL_MUL pins sampled at DCOK assertion - Core frequency = 50MHz*C_MUL */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t qlm1_spd : 2; - uint64_t qlm1_mode : 2; - uint64_t qlm0_rev_lanes : 1; - uint64_t qlm0_link_width : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn52xx; - struct cvmx_npei_dbg_data_cn52xx cn52xxp1; - struct cvmx_npei_dbg_data_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t qlm2_rev_lanes : 1; /**< Lane reversal for PCIe port 1 */ - uint64_t qlm0_rev_lanes : 1; /**< Lane reversal for PCIe port 0 */ - uint64_t qlm3_spd : 2; /**< Sets the QLM3 frequency - 0=1.25 Gbaud - 1=2.5 Gbaud - 2=3.125 Gbaud - 3=3.75 Gbaud */ - uint64_t qlm1_spd : 2; /**< Sets the QLM1 frequency - 0=1.25 Gbaud - 1=2.5 Gbaud - 2=3.125 Gbaud - 3=3.75 Gbaud */ - uint64_t c_mul : 5; /**< PLL_MUL pins sampled at DCOK assertion - Core frequency = 50MHz*C_MUL */ - uint64_t dsel_ext : 1; /**< Allows changes in the external pins to set the - debug select value. */ - uint64_t data : 17; /**< Value on the debug data lines. */ -#else - uint64_t data : 17; - uint64_t dsel_ext : 1; - uint64_t c_mul : 5; - uint64_t qlm1_spd : 2; - uint64_t qlm3_spd : 2; - uint64_t qlm0_rev_lanes : 1; - uint64_t qlm2_rev_lanes : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn56xx; - struct cvmx_npei_dbg_data_cn56xx cn56xxp1; -} cvmx_npei_dbg_data_t; - - -/** - * cvmx_npei_dbg_select - * - * NPEI_DBG_SELECT = Debug Select Register - * - * Contains the debug select value last written to the RSLs. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dbg_select_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dbg_sel : 16; /**< When this register is written its value is sent to - all RSLs. */ -#else - uint64_t dbg_sel : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npei_dbg_select_s cn52xx; - struct cvmx_npei_dbg_select_s cn52xxp1; - struct cvmx_npei_dbg_select_s cn56xx; - struct cvmx_npei_dbg_select_s cn56xxp1; -} cvmx_npei_dbg_select_t; - - -/** - * cvmx_npei_dma#_counts - * - * NPEI_DMA[0..4]_COUNTS = DMA Instruction Counts - * - * Values for determing the number of instructions for DMA[0..4] in the NPEI. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dmax_counts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t fcnt : 7; /**< Number of words in the Instruction FIFO. */ - uint64_t dbell : 32; /**< Number of available words of Instructions to read. */ -#else - uint64_t dbell : 32; - uint64_t fcnt : 7; - uint64_t reserved_39_63 : 25; -#endif - } s; - struct cvmx_npei_dmax_counts_s cn52xx; - struct cvmx_npei_dmax_counts_s cn52xxp1; - struct cvmx_npei_dmax_counts_s cn56xx; - struct cvmx_npei_dmax_counts_s cn56xxp1; -} cvmx_npei_dmax_counts_t; - - -/** - * cvmx_npei_dma#_dbell - * - * NPEI_DMA_DBELL[0..4] = DMA Door Bell - * - * The door bell register for DMA[0..4] queue. - */ -typedef union -{ - uint32_t u32; - struct cvmx_npei_dmax_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t dbell : 16; /**< The value written to this register is added to the - number of 8byte words to be read and processes for - the low priority dma queue. */ -#else - uint32_t dbell : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_npei_dmax_dbell_s cn52xx; - struct cvmx_npei_dmax_dbell_s cn52xxp1; - struct cvmx_npei_dmax_dbell_s cn56xx; - struct cvmx_npei_dmax_dbell_s cn56xxp1; -} cvmx_npei_dmax_dbell_t; - - -/** - * cvmx_npei_dma#_ibuff_saddr - * - * NPEI_DMA[0..4]_IBUFF_SADDR = DMA Instruction Buffer Starting Address - * - * The address to start reading Instructions from for DMA[0..4]. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dmax_ibuff_saddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t idle : 1; /**< DMA Engine IDLE state */ - uint64_t saddr : 29; /**< The 128 byte aligned starting address to read the - first instruction. SADDR is address bit 35:7 of the - first instructions address. */ - uint64_t reserved_0_6 : 7; -#else - uint64_t reserved_0_6 : 7; - uint64_t saddr : 29; - uint64_t idle : 1; - uint64_t reserved_37_63 : 27; -#endif - } s; - struct cvmx_npei_dmax_ibuff_saddr_s cn52xx; - struct cvmx_npei_dmax_ibuff_saddr_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t saddr : 29; /**< The 128 byte aligned starting address to read the - first instruction. SADDR is address bit 35:7 of the - first instructions address. */ - uint64_t reserved_0_6 : 7; -#else - uint64_t reserved_0_6 : 7; - uint64_t saddr : 29; - uint64_t reserved_36_63 : 28; -#endif - } cn52xxp1; - struct cvmx_npei_dmax_ibuff_saddr_s cn56xx; - struct cvmx_npei_dmax_ibuff_saddr_cn52xxp1 cn56xxp1; -} cvmx_npei_dmax_ibuff_saddr_t; - - -/** - * cvmx_npei_dma#_naddr - * - * NPEI_DMA[0..4]_NADDR = DMA Next Ichunk Address - * - * Place NPEI will read the next Ichunk data from. This is valid when state is 0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dmax_naddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< The next L2C address to read DMA# instructions - from. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_npei_dmax_naddr_s cn52xx; - struct cvmx_npei_dmax_naddr_s cn52xxp1; - struct cvmx_npei_dmax_naddr_s cn56xx; - struct cvmx_npei_dmax_naddr_s cn56xxp1; -} cvmx_npei_dmax_naddr_t; - - -/** - * cvmx_npei_dma0_int_level - * - * NPEI_DMA0_INT_LEVEL = NPEI DMA0 Interrupt Level - * - * Thresholds for DMA count and timer interrupts for DMA0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma0_int_level_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t time : 32; /**< Whenever the DMA_CNT0 timer exceeds - this value, NPEI_INT_SUM[DTIME0] is set. - The DMA_CNT0 timer increments every core clock - whenever NPEI_DMA_CNTS[DMA0]!=0, and is cleared - when NPEI_INT_SUM[DTIME0] is written with one. */ - uint64_t cnt : 32; /**< Whenever NPEI_DMA_CNTS[DMA0] exceeds this value, - NPEI_INT_SUM[DCNT0] is set. */ -#else - uint64_t cnt : 32; - uint64_t time : 32; -#endif - } s; - struct cvmx_npei_dma0_int_level_s cn52xx; - struct cvmx_npei_dma0_int_level_s cn52xxp1; - struct cvmx_npei_dma0_int_level_s cn56xx; - struct cvmx_npei_dma0_int_level_s cn56xxp1; -} cvmx_npei_dma0_int_level_t; - - -/** - * cvmx_npei_dma1_int_level - * - * NPEI_DMA1_INT_LEVEL = NPEI DMA1 Interrupt Level - * - * Thresholds for DMA count and timer interrupts for DMA1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma1_int_level_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t time : 32; /**< Whenever the DMA_CNT1 timer exceeds - this value, NPEI_INT_SUM[DTIME1] is set. - The DMA_CNT1 timer increments every core clock - whenever NPEI_DMA_CNTS[DMA1]!=0, and is cleared - when NPEI_INT_SUM[DTIME1] is written with one. */ - uint64_t cnt : 32; /**< Whenever NPEI_DMA_CNTS[DMA1] exceeds this value, - NPEI_INT_SUM[DCNT1] is set. */ -#else - uint64_t cnt : 32; - uint64_t time : 32; -#endif - } s; - struct cvmx_npei_dma1_int_level_s cn52xx; - struct cvmx_npei_dma1_int_level_s cn52xxp1; - struct cvmx_npei_dma1_int_level_s cn56xx; - struct cvmx_npei_dma1_int_level_s cn56xxp1; -} cvmx_npei_dma1_int_level_t; - - -/** - * cvmx_npei_dma_cnts - * - * NPEI_DMA_CNTS = NPEI DMA Count - * - * The DMA Count values for DMA0 and DMA1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_cnts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dma1 : 32; /**< The DMA counter 1. - Writing this field will cause the written value to - be subtracted from DMA1. SW should use a 4-byte - write to access this field so as not to change the - value of other fields in this register. - HW will optionally increment this field after - it completes an OUTBOUND or EXTERNAL-ONLY DMA - instruction. These increments may cause interrupts. - Refer to NPEI_DMA1_INT_LEVEL and - NPEI_INT_SUM[DCNT1,DTIME1]. */ - uint64_t dma0 : 32; /**< The DMA counter 0. - Writing this field will cause the written value to - be subtracted from DMA0. SW should use a 4-byte - write to access this field so as not to change the - value of other fields in this register. - HW will optionally increment this field after - it completes an OUTBOUND or EXTERNAL-ONLY DMA - instruction. These increments may cause interrupts. - Refer to NPEI_DMA0_INT_LEVEL and - NPEI_INT_SUM[DCNT0,DTIME0]. */ -#else - uint64_t dma0 : 32; - uint64_t dma1 : 32; -#endif - } s; - struct cvmx_npei_dma_cnts_s cn52xx; - struct cvmx_npei_dma_cnts_s cn52xxp1; - struct cvmx_npei_dma_cnts_s cn56xx; - struct cvmx_npei_dma_cnts_s cn56xxp1; -} cvmx_npei_dma_cnts_t; - - -/** - * cvmx_npei_dma_control - * - * NPEI_DMA_CONTROL = DMA Control Register - * - * Controls operation of the DMA IN/OUT. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t p_32b_m : 1; /**< DMA PCIE 32-bit word read disable bit - When 0, enable the feature */ - uint64_t dma4_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma3_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma2_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma1_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma0_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t b0_lend : 1; /**< When set '1' and the NPEI is in the mode to write - 0 to L2C memory when a DMA is done, the address - to be written to will be treated as a Little - Endian address. */ - uint64_t dwb_denb : 1; /**< When set '1' the NPEI will send a value in the DWB - field for a free page operation for the memory - that contained the data. */ - uint64_t dwb_ichk : 9; /**< When Instruction Chunks for DMA operations are freed - this value is used for the DWB field of the - operation. */ - uint64_t fpa_que : 3; /**< The FPA queue that the instruction-chunk page will - be returned to when used. */ - uint64_t o_add1 : 1; /**< When set '1' 1 will be added to the DMA counters, - if '0' then the number of bytes in the dma transfer - will be added to the count register. */ - uint64_t o_ro : 1; /**< Relaxed Ordering Mode for DMA. */ - uint64_t o_ns : 1; /**< Nosnoop For DMA. */ - uint64_t o_es : 2; /**< Endian Swap Mode for DMA. */ - uint64_t o_mode : 1; /**< Select PCI_POINTER MODE to be used. - '1' use pointer values for address and register - values for RO, ES, and NS, '0' use register - values for address and pointer values for - RO, ES, and NS. */ - uint64_t csize : 14; /**< The size in words of the DMA Instruction Chunk. - This value should only be written once. After - writing this value a new value will not be - recognized until the end of the DMA I-Chunk is - reached. */ -#else - uint64_t csize : 14; - uint64_t o_mode : 1; - uint64_t o_es : 2; - uint64_t o_ns : 1; - uint64_t o_ro : 1; - uint64_t o_add1 : 1; - uint64_t fpa_que : 3; - uint64_t dwb_ichk : 9; - uint64_t dwb_denb : 1; - uint64_t b0_lend : 1; - uint64_t dma0_enb : 1; - uint64_t dma1_enb : 1; - uint64_t dma2_enb : 1; - uint64_t dma3_enb : 1; - uint64_t dma4_enb : 1; - uint64_t p_32b_m : 1; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_npei_dma_control_s cn52xx; - struct cvmx_npei_dma_control_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t dma3_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma2_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma1_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma0_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t b0_lend : 1; /**< When set '1' and the NPEI is in the mode to write - 0 to L2C memory when a DMA is done, the address - to be written to will be treated as a Little - Endian address. */ - uint64_t dwb_denb : 1; /**< When set '1' the NPEI will send a value in the DWB - field for a free page operation for the memory - that contained the data. */ - uint64_t dwb_ichk : 9; /**< When Instruction Chunks for DMA operations are freed - this value is used for the DWB field of the - operation. */ - uint64_t fpa_que : 3; /**< The FPA queue that the instruction-chunk page will - be returned to when used. */ - uint64_t o_add1 : 1; /**< When set '1' 1 will be added to the DMA counters, - if '0' then the number of bytes in the dma transfer - will be added to the count register. */ - uint64_t o_ro : 1; /**< Relaxed Ordering Mode for DMA. */ - uint64_t o_ns : 1; /**< Nosnoop For DMA. */ - uint64_t o_es : 2; /**< Endian Swap Mode for DMA. */ - uint64_t o_mode : 1; /**< Select PCI_POINTER MODE to be used. - '1' use pointer values for address and register - values for RO, ES, and NS, '0' use register - values for address and pointer values for - RO, ES, and NS. */ - uint64_t csize : 14; /**< The size in words of the DMA Instruction Chunk. - This value should only be written once. After - writing this value a new value will not be - recognized until the end of the DMA I-Chunk is - reached. */ -#else - uint64_t csize : 14; - uint64_t o_mode : 1; - uint64_t o_es : 2; - uint64_t o_ns : 1; - uint64_t o_ro : 1; - uint64_t o_add1 : 1; - uint64_t fpa_que : 3; - uint64_t dwb_ichk : 9; - uint64_t dwb_denb : 1; - uint64_t b0_lend : 1; - uint64_t dma0_enb : 1; - uint64_t dma1_enb : 1; - uint64_t dma2_enb : 1; - uint64_t dma3_enb : 1; - uint64_t reserved_38_63 : 26; -#endif - } cn52xxp1; - struct cvmx_npei_dma_control_s cn56xx; - struct cvmx_npei_dma_control_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t dma4_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma3_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma2_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma1_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t dma0_enb : 1; /**< DMA# enable. Enables the operation of the DMA - engine. After being enabled a DMA engine should not - be dis-abled while processing instructions. */ - uint64_t b0_lend : 1; /**< When set '1' and the NPEI is in the mode to write - 0 to L2C memory when a DMA is done, the address - to be written to will be treated as a Little - Endian address. */ - uint64_t dwb_denb : 1; /**< When set '1' the NPEI will send a value in the DWB - field for a free page operation for the memory - that contained the data. */ - uint64_t dwb_ichk : 9; /**< When Instruction Chunks for DMA operations are freed - this value is used for the DWB field of the - operation. */ - uint64_t fpa_que : 3; /**< The FPA queue that the instruction-chunk page will - be returned to when used. */ - uint64_t o_add1 : 1; /**< When set '1' 1 will be added to the DMA counters, - if '0' then the number of bytes in the dma transfer - will be added to the count register. */ - uint64_t o_ro : 1; /**< Relaxed Ordering Mode for DMA. */ - uint64_t o_ns : 1; /**< Nosnoop For DMA. */ - uint64_t o_es : 2; /**< Endian Swap Mode for DMA. */ - uint64_t o_mode : 1; /**< Select PCI_POINTER MODE to be used. - '1' use pointer values for address and register - values for RO, ES, and NS, '0' use register - values for address and pointer values for - RO, ES, and NS. */ - uint64_t csize : 14; /**< The size in words of the DMA Instruction Chunk. - This value should only be written once. After - writing this value a new value will not be - recognized until the end of the DMA I-Chunk is - reached. */ -#else - uint64_t csize : 14; - uint64_t o_mode : 1; - uint64_t o_es : 2; - uint64_t o_ns : 1; - uint64_t o_ro : 1; - uint64_t o_add1 : 1; - uint64_t fpa_que : 3; - uint64_t dwb_ichk : 9; - uint64_t dwb_denb : 1; - uint64_t b0_lend : 1; - uint64_t dma0_enb : 1; - uint64_t dma1_enb : 1; - uint64_t dma2_enb : 1; - uint64_t dma3_enb : 1; - uint64_t dma4_enb : 1; - uint64_t reserved_39_63 : 25; -#endif - } cn56xxp1; -} cvmx_npei_dma_control_t; - - -/** - * cvmx_npei_dma_pcie_req_num - * - * NPEI_DMA_PCIE_REQ_NUM = NPEI DMA PCIE Outstanding Read Request Number - * - * Outstanding PCIE read request number for DMAs and Packet, maximum number is 16 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_pcie_req_num_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dma_arb : 1; /**< DMA_PKT Read Request Arbitration - - 1: DMA0-4 and PKT are round robin. i.e. - DMA0-DMA1-DMA2-DMA3-DMA4-PKT... - - 0: DMA0-4 are round robin, pkt gets selected - half the time. i.e. - DMA0-PKT-DMA1-PKT-DMA2-PKT-DMA3-PKT-DMA4-PKT... */ - uint64_t reserved_53_62 : 10; - uint64_t pkt_cnt : 5; /**< PKT outstanding PCIE Read Request Number for each - PCIe port - When PKT_CNT=x, for each PCIe port, the number - of outstanding PCIe memory space reads by the PCIe - packet input/output will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_45_47 : 3; - uint64_t dma4_cnt : 5; /**< DMA4 outstanding PCIE Read Request Number - When DMA4_CNT=x, the number of outstanding PCIe - memory space reads by the PCIe DMA engine 4 - will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_37_39 : 3; - uint64_t dma3_cnt : 5; /**< DMA3 outstanding PCIE Read Request Number - When DMA3_CNT=x, the number of outstanding PCIe - memory space reads by the PCIe DMA engine 3 - will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_29_31 : 3; - uint64_t dma2_cnt : 5; /**< DMA2 outstanding PCIE Read Request Number - When DMA2_CNT=x, the number of outstanding PCIe - memory space reads by the PCIe DMA engine 2 - will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_21_23 : 3; - uint64_t dma1_cnt : 5; /**< DMA1 outstanding PCIE Read Request Number - When DMA1_CNT=x, the number of outstanding PCIe - memory space reads by the PCIe DMA engine 1 - will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_13_15 : 3; - uint64_t dma0_cnt : 5; /**< DMA0 outstanding PCIE Read Request Number - When DMA0_CNT=x, the number of outstanding PCIe - memory space reads by the PCIe DMA engine 0 - will not exceed x. - Valid Number is between 1 and 16 */ - uint64_t reserved_5_7 : 3; - uint64_t dma_cnt : 5; /**< Total outstanding PCIE Read Request Number for each - PCIe port - When DMA_CNT=x, for each PCIe port, the total - number of outstanding PCIe memory space reads - by the PCIe DMA engines and packet input/output - will not exceed x. - Valid Number is between 1 and 16 */ -#else - uint64_t dma_cnt : 5; - uint64_t reserved_5_7 : 3; - uint64_t dma0_cnt : 5; - uint64_t reserved_13_15 : 3; - uint64_t dma1_cnt : 5; - uint64_t reserved_21_23 : 3; - uint64_t dma2_cnt : 5; - uint64_t reserved_29_31 : 3; - uint64_t dma3_cnt : 5; - uint64_t reserved_37_39 : 3; - uint64_t dma4_cnt : 5; - uint64_t reserved_45_47 : 3; - uint64_t pkt_cnt : 5; - uint64_t reserved_53_62 : 10; - uint64_t dma_arb : 1; -#endif - } s; - struct cvmx_npei_dma_pcie_req_num_s cn52xx; - struct cvmx_npei_dma_pcie_req_num_s cn56xx; -} cvmx_npei_dma_pcie_req_num_t; - - -/** - * cvmx_npei_dma_state1 - * - * NPEI_DMA_STATE1 = NPI's DMA State 1 - * - * Results from DMA state register 1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t d4_dwe : 8; /**< DMA4 PICe Write State */ - uint64_t d3_dwe : 8; /**< DMA3 PICe Write State */ - uint64_t d2_dwe : 8; /**< DMA2 PICe Write State */ - uint64_t d1_dwe : 8; /**< DMA1 PICe Write State */ - uint64_t d0_dwe : 8; /**< DMA0 PICe Write State */ -#else - uint64_t d0_dwe : 8; - uint64_t d1_dwe : 8; - uint64_t d2_dwe : 8; - uint64_t d3_dwe : 8; - uint64_t d4_dwe : 8; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_npei_dma_state1_s cn52xx; -} cvmx_npei_dma_state1_t; - - -/** - * cvmx_npei_dma_state1_p1 - * - * NPEI_DMA_STATE1_P1 = NPEI DMA Request and Instruction State - * - * DMA engine Debug information. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state1_p1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t d0_difst : 7; /**< DMA engine 0 dif instruction read state */ - uint64_t d1_difst : 7; /**< DMA engine 1 dif instruction read state */ - uint64_t d2_difst : 7; /**< DMA engine 2 dif instruction read state */ - uint64_t d3_difst : 7; /**< DMA engine 3 dif instruction read state */ - uint64_t d4_difst : 7; /**< DMA engine 4 dif instruction read state */ - uint64_t d0_reqst : 5; /**< DMA engine 0 request data state */ - uint64_t d1_reqst : 5; /**< DMA engine 1 request data state */ - uint64_t d2_reqst : 5; /**< DMA engine 2 request data state */ - uint64_t d3_reqst : 5; /**< DMA engine 3 request data state */ - uint64_t d4_reqst : 5; /**< DMA engine 4 request data state */ -#else - uint64_t d4_reqst : 5; - uint64_t d3_reqst : 5; - uint64_t d2_reqst : 5; - uint64_t d1_reqst : 5; - uint64_t d0_reqst : 5; - uint64_t d4_difst : 7; - uint64_t d3_difst : 7; - uint64_t d2_difst : 7; - uint64_t d1_difst : 7; - uint64_t d0_difst : 7; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_npei_dma_state1_p1_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t d0_difst : 7; /**< DMA engine 0 dif instruction read state */ - uint64_t d1_difst : 7; /**< DMA engine 1 dif instruction read state */ - uint64_t d2_difst : 7; /**< DMA engine 2 dif instruction read state */ - uint64_t d3_difst : 7; /**< DMA engine 3 dif instruction read state */ - uint64_t reserved_25_31 : 7; - uint64_t d0_reqst : 5; /**< DMA engine 0 request data state */ - uint64_t d1_reqst : 5; /**< DMA engine 1 request data state */ - uint64_t d2_reqst : 5; /**< DMA engine 2 request data state */ - uint64_t d3_reqst : 5; /**< DMA engine 3 request data state */ - uint64_t reserved_0_4 : 5; -#else - uint64_t reserved_0_4 : 5; - uint64_t d3_reqst : 5; - uint64_t d2_reqst : 5; - uint64_t d1_reqst : 5; - uint64_t d0_reqst : 5; - uint64_t reserved_25_31 : 7; - uint64_t d3_difst : 7; - uint64_t d2_difst : 7; - uint64_t d1_difst : 7; - uint64_t d0_difst : 7; - uint64_t reserved_60_63 : 4; -#endif - } cn52xxp1; - struct cvmx_npei_dma_state1_p1_s cn56xxp1; -} cvmx_npei_dma_state1_p1_t; - - -/** - * cvmx_npei_dma_state2 - * - * NPEI_DMA_STATE2 = NPI's DMA State 2 - * - * Results from DMA state register 2 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t ndwe : 4; /**< DMA L2C Write State */ - uint64_t reserved_21_23 : 3; - uint64_t ndre : 5; /**< DMA L2C Read State */ - uint64_t reserved_10_15 : 6; - uint64_t prd : 10; /**< DMA PICe Read State */ -#else - uint64_t prd : 10; - uint64_t reserved_10_15 : 6; - uint64_t ndre : 5; - uint64_t reserved_21_23 : 3; - uint64_t ndwe : 4; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_npei_dma_state2_s cn52xx; -} cvmx_npei_dma_state2_t; - - -/** - * cvmx_npei_dma_state2_p1 - * - * NPEI_DMA_STATE2_P1 = NPEI DMA Instruction Fetch State - * - * DMA engine Debug information. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state2_p1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_45_63 : 19; - uint64_t d0_dffst : 9; /**< DMA engine 0 dif instruction fetch state */ - uint64_t d1_dffst : 9; /**< DMA engine 1 dif instruction fetch state */ - uint64_t d2_dffst : 9; /**< DMA engine 2 dif instruction fetch state */ - uint64_t d3_dffst : 9; /**< DMA engine 3 dif instruction fetch state */ - uint64_t d4_dffst : 9; /**< DMA engine 4 dif instruction fetch state */ -#else - uint64_t d4_dffst : 9; - uint64_t d3_dffst : 9; - uint64_t d2_dffst : 9; - uint64_t d1_dffst : 9; - uint64_t d0_dffst : 9; - uint64_t reserved_45_63 : 19; -#endif - } s; - struct cvmx_npei_dma_state2_p1_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_45_63 : 19; - uint64_t d0_dffst : 9; /**< DMA engine 0 dif instruction fetch state */ - uint64_t d1_dffst : 9; /**< DMA engine 1 dif instruction fetch state */ - uint64_t d2_dffst : 9; /**< DMA engine 2 dif instruction fetch state */ - uint64_t d3_dffst : 9; /**< DMA engine 3 dif instruction fetch state */ - uint64_t reserved_0_8 : 9; -#else - uint64_t reserved_0_8 : 9; - uint64_t d3_dffst : 9; - uint64_t d2_dffst : 9; - uint64_t d1_dffst : 9; - uint64_t d0_dffst : 9; - uint64_t reserved_45_63 : 19; -#endif - } cn52xxp1; - struct cvmx_npei_dma_state2_p1_s cn56xxp1; -} cvmx_npei_dma_state2_p1_t; - - -/** - * cvmx_npei_dma_state3_p1 - * - * NPEI_DMA_STATE3_P1 = NPEI DMA DRE State - * - * DMA engine Debug information. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state3_p1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t d0_drest : 15; /**< DMA engine 0 dre state */ - uint64_t d1_drest : 15; /**< DMA engine 1 dre state */ - uint64_t d2_drest : 15; /**< DMA engine 2 dre state */ - uint64_t d3_drest : 15; /**< DMA engine 3 dre state */ -#else - uint64_t d3_drest : 15; - uint64_t d2_drest : 15; - uint64_t d1_drest : 15; - uint64_t d0_drest : 15; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_npei_dma_state3_p1_s cn52xxp1; - struct cvmx_npei_dma_state3_p1_s cn56xxp1; -} cvmx_npei_dma_state3_p1_t; - - -/** - * cvmx_npei_dma_state4_p1 - * - * NPEI_DMA_STATE4_P1 = NPEI DMA DWE State - * - * DMA engine Debug information. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state4_p1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_52_63 : 12; - uint64_t d0_dwest : 13; /**< DMA engine 0 dwe state */ - uint64_t d1_dwest : 13; /**< DMA engine 1 dwe state */ - uint64_t d2_dwest : 13; /**< DMA engine 2 dwe state */ - uint64_t d3_dwest : 13; /**< DMA engine 3 dwe state */ -#else - uint64_t d3_dwest : 13; - uint64_t d2_dwest : 13; - uint64_t d1_dwest : 13; - uint64_t d0_dwest : 13; - uint64_t reserved_52_63 : 12; -#endif - } s; - struct cvmx_npei_dma_state4_p1_s cn52xxp1; - struct cvmx_npei_dma_state4_p1_s cn56xxp1; -} cvmx_npei_dma_state4_p1_t; - - -/** - * cvmx_npei_dma_state5_p1 - * - * NPEI_DMA_STATE5_P1 = NPEI DMA DWE and DRE State - * - * DMA engine Debug information. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_dma_state5_p1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t d4_drest : 15; /**< DMA engine 4 dre state */ - uint64_t d4_dwest : 13; /**< DMA engine 4 dwe state */ -#else - uint64_t d4_dwest : 13; - uint64_t d4_drest : 15; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_npei_dma_state5_p1_s cn56xxp1; -} cvmx_npei_dma_state5_p1_t; - - -/** - * cvmx_npei_int_a_enb - * - * NPEI_INTERRUPT_A_ENB = NPI's Interrupt A Enable Register - * - * Used to allow the generation of interrupts (MSI/INTA) to the PCIe CoresUsed to enable the various interrupting conditions of NPEI - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_a_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pout_err : 1; /**< Enables NPEI_INT_A_SUM[9] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pin_bp : 1; /**< Enables NPEI_INT_A_SUM[8] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t p1_rdlk : 1; /**< Enables NPEI_INT_A_SUM[7] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t p0_rdlk : 1; /**< Enables NPEI_INT_A_SUM[6] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pgl_err : 1; /**< Enables NPEI_INT_A_SUM[5] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pdi_err : 1; /**< Enables NPEI_INT_A_SUM[4] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pop_err : 1; /**< Enables NPEI_INT_A_SUM[3] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pins_err : 1; /**< Enables NPEI_INT_A_SUM[2] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1_cpl : 1; /**< Enables NPEI_INT_A_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0_cpl : 1; /**< Enables NPEI_INT_A_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t pins_err : 1; - uint64_t pop_err : 1; - uint64_t pdi_err : 1; - uint64_t pgl_err : 1; - uint64_t p0_rdlk : 1; - uint64_t p1_rdlk : 1; - uint64_t pin_bp : 1; - uint64_t pout_err : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_npei_int_a_enb_s cn52xx; - struct cvmx_npei_int_a_enb_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dma1_cpl : 1; /**< Enables NPEI_INT_A_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0_cpl : 1; /**< Enables NPEI_INT_A_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn52xxp1; - struct cvmx_npei_int_a_enb_s cn56xx; -} cvmx_npei_int_a_enb_t; - - -/** - * cvmx_npei_int_a_enb2 - * - * NPEI_INTERRUPT_A_ENB2 = NPEI's Interrupt A Enable2 Register - * - * Used to enable the various interrupting conditions of NPEI - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_a_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pout_err : 1; /**< Enables NPEI_INT_A_SUM[9] to generate an - interrupt on the RSL. */ - uint64_t pin_bp : 1; /**< Enables NPEI_INT_A_SUM[8] to generate an - interrupt on the RSL. */ - uint64_t p1_rdlk : 1; /**< Enables NPEI_INT_A_SUM[7] to generate an - interrupt on the RSL. */ - uint64_t p0_rdlk : 1; /**< Enables NPEI_INT_A_SUM[6] to generate an - interrupt on the RSL. */ - uint64_t pgl_err : 1; /**< Enables NPEI_INT_A_SUM[5] to generate an - interrupt on the RSL. */ - uint64_t pdi_err : 1; /**< Enables NPEI_INT_A_SUM[4] to generate an - interrupt on the RSL. */ - uint64_t pop_err : 1; /**< Enables NPEI_INT_A_SUM[3] to generate an - interrupt on the RSL. */ - uint64_t pins_err : 1; /**< Enables NPEI_INT_A_SUM[2] to generate an - interrupt on the RSL. */ - uint64_t dma1_cpl : 1; /**< Enables NPEI_INT_A_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0_cpl : 1; /**< Enables NPEI_INT_A_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t pins_err : 1; - uint64_t pop_err : 1; - uint64_t pdi_err : 1; - uint64_t pgl_err : 1; - uint64_t p0_rdlk : 1; - uint64_t p1_rdlk : 1; - uint64_t pin_bp : 1; - uint64_t pout_err : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_npei_int_a_enb2_s cn52xx; - struct cvmx_npei_int_a_enb2_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dma1_cpl : 1; /**< Enables NPEI_INT_A_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0_cpl : 1; /**< Enables NPEI_INT_A_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn52xxp1; - struct cvmx_npei_int_a_enb2_s cn56xx; -} cvmx_npei_int_a_enb2_t; - - -/** - * cvmx_npei_int_a_sum - * - * NPEI_INTERRUPT_A_SUM = NPI Interrupt A Summary Register - * - * Set when an interrupt condition occurs, write '1' to clear. When an interrupt bitin this register is set and - * the cooresponding bit in the NPEI_INT_A_ENB register is set, then NPEI_INT_SUM[61] will be set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_a_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pout_err : 1; /**< Set when PKO sends packet data with the error bit - set. */ - uint64_t pin_bp : 1; /**< Packet input count has exceeded the WMARK. - See NPEI_PKT_IN_BP */ - uint64_t p1_rdlk : 1; /**< PCIe port 1 received a read lock. */ - uint64_t p0_rdlk : 1; /**< PCIe port 0 received a read lock. */ - uint64_t pgl_err : 1; /**< When a read error occurs on a packet gather list - read this bit is set. */ - uint64_t pdi_err : 1; /**< When a read error occurs on a packet data read - this bit is set. */ - uint64_t pop_err : 1; /**< When a read error occurs on a packet scatter - pointer pair this bit is set. */ - uint64_t pins_err : 1; /**< When a read error occurs on a packet instruction - this bit is set. */ - uint64_t dma1_cpl : 1; /**< Set each time any PCIe DMA engine recieves a UR/CA - response from PCIe Port 1 */ - uint64_t dma0_cpl : 1; /**< Set each time any PCIe DMA engine recieves a UR/CA - response from PCIe Port 0 */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t pins_err : 1; - uint64_t pop_err : 1; - uint64_t pdi_err : 1; - uint64_t pgl_err : 1; - uint64_t p0_rdlk : 1; - uint64_t p1_rdlk : 1; - uint64_t pin_bp : 1; - uint64_t pout_err : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_npei_int_a_sum_s cn52xx; - struct cvmx_npei_int_a_sum_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t dma1_cpl : 1; /**< Set each time any PCIe DMA engine recieves a UR/CA - response from PCIe Port 1 */ - uint64_t dma0_cpl : 1; /**< Set each time any PCIe DMA engine recieves a UR/CA - response from PCIe Port 0 */ -#else - uint64_t dma0_cpl : 1; - uint64_t dma1_cpl : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn52xxp1; - struct cvmx_npei_int_a_sum_s cn56xx; -} cvmx_npei_int_a_sum_t; - - -/** - * cvmx_npei_int_enb - * - * NPEI_INTERRUPT_ENB = NPI's Interrupt Enable Register - * - * Used to allow the generation of interrupts (MSI/INTA) to the PCIe CoresUsed to enable the various interrupting conditions of NPI - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Enables NPEI_INT_SUM[63] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_62_62 : 1; - uint64_t int_a : 1; /**< Enables NPEI_INT_SUM[61] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM[60] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM[59] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM[58] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM[57] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM[56] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM[55] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM[54] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM[53] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM[52] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM[51] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM[50] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM[49] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM[48] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM[47] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM[46] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM[45] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM[44] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM[43] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM[42] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM[41] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM[40] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM[39] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM[38] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM[37] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM[36] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM[35] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM[34] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM[33] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM[32] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM[31] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM[30] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs1_dr : 1; /**< Enables NPEI_INT_SUM[29] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM[28] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs1_er : 1; /**< Enables NPEI_INT_SUM[27] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM[26] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM[25] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM[24] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM[23] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs0_dr : 1; /**< Enables NPEI_INT_SUM[22] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM[21] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs0_er : 1; /**< Enables NPEI_INT_SUM[20] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM[19] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM[18] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM[17] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM[16] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM[15] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM[14] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM[13] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM[12] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM[11] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM[10] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM[9] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma4dbo : 1; /**< Enables NPEI_INT_SUM[8] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM[7] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM[6] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM[5] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM[4] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM[3] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM[2] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_62 : 1; - uint64_t mio_inta : 1; -#endif - } s; - struct cvmx_npei_int_enb_s cn52xx; - struct cvmx_npei_int_enb_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Enables NPEI_INT_SUM[63] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_62_62 : 1; - uint64_t int_a : 1; /**< Enables NPEI_INT_SUM[61] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM[60] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM[59] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM[58] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM[57] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM[56] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM[55] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM[54] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM[53] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM[52] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM[51] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM[50] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM[49] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM[48] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM[47] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM[46] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM[45] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM[44] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM[43] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM[42] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM[41] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM[40] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM[39] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM[38] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM[37] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM[36] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM[35] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM[34] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM[33] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM[32] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM[31] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM[30] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs1_dr : 1; /**< Enables NPEI_INT_SUM[29] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM[28] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs1_er : 1; /**< Enables NPEI_INT_SUM[27] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM[26] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM[25] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM[24] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM[23] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs0_dr : 1; /**< Enables NPEI_INT_SUM[22] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM[21] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t crs0_er : 1; /**< Enables NPEI_INT_SUM[20] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM[19] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM[18] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM[17] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM[16] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM[15] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM[14] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM[13] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM[12] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM[11] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM[10] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM[9] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_8_8 : 1; - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM[7] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM[6] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM[5] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM[4] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM[3] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM[2] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t reserved_8_8 : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_62 : 1; - uint64_t mio_inta : 1; -#endif - } cn52xxp1; - struct cvmx_npei_int_enb_s cn56xx; - struct cvmx_npei_int_enb_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Enables NPEI_INT_SUM[63] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_61_62 : 2; - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM[60] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM[59] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM[58] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM[57] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM[56] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM[55] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM[54] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM[53] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM[52] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM[51] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM[50] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM[49] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM[48] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM[47] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM[46] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM[45] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM[44] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM[43] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM[42] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM[41] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM[40] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM[39] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM[38] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM[37] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM[36] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM[35] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM[34] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM[33] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM[32] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM[31] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM[30] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_29_29 : 1; - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM[28] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_27_27 : 1; - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM[26] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM[25] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM[24] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM[23] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_22_22 : 1; - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM[21] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t reserved_20_20 : 1; - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM[19] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM[18] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM[17] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM[16] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM[15] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM[14] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM[13] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM[12] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM[11] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM[10] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM[9] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma4dbo : 1; /**< Enables NPEI_INT_SUM[8] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM[7] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM[6] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM[5] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM[4] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM[3] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM[2] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM[1] to generate an - interrupt to the PCIE core for MSI/inta. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_SUM[0] to generate an - interrupt to the PCIE core for MSI/inta. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t reserved_20_20 : 1; - uint64_t c0_se : 1; - uint64_t reserved_22_22 : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t reserved_27_27 : 1; - uint64_t c1_se : 1; - uint64_t reserved_29_29 : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t reserved_61_62 : 2; - uint64_t mio_inta : 1; -#endif - } cn56xxp1; -} cvmx_npei_int_enb_t; - - -/** - * cvmx_npei_int_enb2 - * - * NPEI_INTERRUPT_ENB2 = NPI's Interrupt Enable2 Register - * - * Used to enable the various interrupting conditions of NPI - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t int_a : 1; /**< Enables NPEI_INT_SUM2[61] to generate an - interrupt on the RSL. */ - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM[60] to generate an - interrupt on the RSL. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM[59] to generate an - interrupt on the RSL. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM[58] to generate an - interrupt on the RSL. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM[57] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM[56] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM[55] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM[54] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM[53] to generate an - interrupt on the RSL. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM[52] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM[51] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM[50] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM[49] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM[48] to generate an - interrupt on the RSL. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM[47] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM[46] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM[45] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM[44] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM[43] to generate an - interrupt on the RSL. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM[42] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM[41] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM[40] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM[39] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM[38] to generate an - interrupt on the RSL. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM[37] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM[36] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM[35] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM[34] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM[33] to generate an - interrupt on the RSL. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM[32] to generate an - interrupt on the RSL. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM[31] to generate an - interrupt on the RSL. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM[30] to generate an - interrupt on the RSL. */ - uint64_t crs1_dr : 1; /**< Enables NPEI_INT_SUM2[29] to generate an - interrupt on the RSL. */ - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM[28] to generate an - interrupt on the RSL. */ - uint64_t crs1_er : 1; /**< Enables NPEI_INT_SUM2[27] to generate an - interrupt on the RSL. */ - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM[26] to generate an - interrupt on the RSL. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM[25] to generate an - interrupt on the RSL. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM[24] to generate an - interrupt on the RSL. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM[23] to generate an - interrupt on the RSL. */ - uint64_t crs0_dr : 1; /**< Enables NPEI_INT_SUM2[22] to generate an - interrupt on the RSL. */ - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM[21] to generate an - interrupt on the RSL. */ - uint64_t crs0_er : 1; /**< Enables NPEI_INT_SUM2[20] to generate an - interrupt on the RSL. */ - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM[19] to generate an - interrupt on the RSL. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM[18] to generate an - interrupt on the RSL. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM[17] to generate an - interrupt on the RSL. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM[16] to generate an - interrupt on the RSL. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM[15] to generate an - interrupt on the RSL. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM[14] to generate an - interrupt on the RSL. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM[13] to generate an - interrupt on the RSL. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM[12] to generate an - interrupt on the RSL. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM[11] to generate an - interrupt on the RSL. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM[10] to generate an - interrupt on the RSL. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM[9] to generate an - interrupt on the RSL. */ - uint64_t dma4dbo : 1; /**< Enables NPEI_INT_SUM[8] to generate an - interrupt on the RSL. */ - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM[7] to generate an - interrupt on the RSL. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM[6] to generate an - interrupt on the RSL. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM[5] to generate an - interrupt on the RSL. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM[4] to generate an - interrupt on the RSL. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM[3] to generate an - interrupt on the RSL. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM[2] to generate an - interrupt on the RSL. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM[1] to generate an - interrupt on the RSL. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_UM[0] to generate an - interrupt on the RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_63 : 2; -#endif - } s; - struct cvmx_npei_int_enb2_s cn52xx; - struct cvmx_npei_int_enb2_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t int_a : 1; /**< Enables NPEI_INT_SUM2[61] to generate an - interrupt on the RSL. */ - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM2[60] to generate an - interrupt on the RSL. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM2[59] to generate an - interrupt on the RSL. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM2[58] to generate an - interrupt on the RSL. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM2[57] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM2[56] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM2[55] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM2[54] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM2[53] to generate an - interrupt on the RSL. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM2[52] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM2[51] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM2[50] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM2[49] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM2[48] to generate an - interrupt on the RSL. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM2[47] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM2[46] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM2[45] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM2[44] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM2[43] to generate an - interrupt on the RSL. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM2[42] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM2[41] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM2[40] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM2[39] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM2[38] to generate an - interrupt on the RSL. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM2[37] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM2[36] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM2[35] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM2[34] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM2[33] to generate an - interrupt on the RSL. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM2[32] to generate an - interrupt on the RSL. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM2[31] to generate an - interrupt on the RSL. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM2[30] to generate an - interrupt on the RSL. */ - uint64_t crs1_dr : 1; /**< Enables NPEI_INT_SUM2[29] to generate an - interrupt on the RSL. */ - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM2[28] to generate an - interrupt on the RSL. */ - uint64_t crs1_er : 1; /**< Enables NPEI_INT_SUM2[27] to generate an - interrupt on the RSL. */ - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM2[26] to generate an - interrupt on the RSL. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM2[25] to generate an - interrupt on the RSL. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM2[24] to generate an - interrupt on the RSL. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM2[23] to generate an - interrupt on the RSL. */ - uint64_t crs0_dr : 1; /**< Enables NPEI_INT_SUM2[22] to generate an - interrupt on the RSL. */ - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM2[21] to generate an - interrupt on the RSL. */ - uint64_t crs0_er : 1; /**< Enables NPEI_INT_SUM2[20] to generate an - interrupt on the RSL. */ - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM2[19] to generate an - interrupt on the RSL. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM2[18] to generate an - interrupt on the RSL. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM2[17] to generate an - interrupt on the RSL. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM2[16] to generate an - interrupt on the RSL. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM2[15] to generate an - interrupt on the RSL. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM2[14] to generate an - interrupt on the RSL. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM2[13] to generate an - interrupt on the RSL. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM2[12] to generate an - interrupt on the RSL. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM2[11] to generate an - interrupt on the RSL. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM2[10] to generate an - interrupt on the RSL. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM2[9] to generate an - interrupt on the RSL. */ - uint64_t reserved_8_8 : 1; - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM2[7] to generate an - interrupt on the RSL. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM2[6] to generate an - interrupt on the RSL. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM2[5] to generate an - interrupt on the RSL. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM2[4] to generate an - interrupt on the RSL. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM2[3] to generate an - interrupt on the RSL. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM2[2] to generate an - interrupt on the RSL. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM2[1] to generate an - interrupt on the RSL. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_SUM2[0] to generate an - interrupt on the RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t reserved_8_8 : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_63 : 2; -#endif - } cn52xxp1; - struct cvmx_npei_int_enb2_s cn56xx; - struct cvmx_npei_int_enb2_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_61_63 : 3; - uint64_t c1_ldwn : 1; /**< Enables NPEI_INT_SUM[60] to generate an - interrupt on the RSL. */ - uint64_t c0_ldwn : 1; /**< Enables NPEI_INT_SUM[59] to generate an - interrupt on the RSL. */ - uint64_t c1_exc : 1; /**< Enables NPEI_INT_SUM[58] to generate an - interrupt on the RSL. */ - uint64_t c0_exc : 1; /**< Enables NPEI_INT_SUM[57] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wf : 1; /**< Enables NPEI_INT_SUM[56] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wf : 1; /**< Enables NPEI_INT_SUM[55] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wf : 1; /**< Enables NPEI_INT_SUM[54] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wf : 1; /**< Enables NPEI_INT_SUM[53] to generate an - interrupt on the RSL. */ - uint64_t c1_un_bx : 1; /**< Enables NPEI_INT_SUM[52] to generate an - interrupt on the RSL. */ - uint64_t c1_un_wi : 1; /**< Enables NPEI_INT_SUM[51] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b2 : 1; /**< Enables NPEI_INT_SUM[50] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b1 : 1; /**< Enables NPEI_INT_SUM[49] to generate an - interrupt on the RSL. */ - uint64_t c1_un_b0 : 1; /**< Enables NPEI_INT_SUM[48] to generate an - interrupt on the RSL. */ - uint64_t c1_up_bx : 1; /**< Enables NPEI_INT_SUM[47] to generate an - interrupt on the RSL. */ - uint64_t c1_up_wi : 1; /**< Enables NPEI_INT_SUM[46] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b2 : 1; /**< Enables NPEI_INT_SUM[45] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b1 : 1; /**< Enables NPEI_INT_SUM[44] to generate an - interrupt on the RSL. */ - uint64_t c1_up_b0 : 1; /**< Enables NPEI_INT_SUM[43] to generate an - interrupt on the RSL. */ - uint64_t c0_un_bx : 1; /**< Enables NPEI_INT_SUM[42] to generate an - interrupt on the RSL. */ - uint64_t c0_un_wi : 1; /**< Enables NPEI_INT_SUM[41] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b2 : 1; /**< Enables NPEI_INT_SUM[40] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b1 : 1; /**< Enables NPEI_INT_SUM[39] to generate an - interrupt on the RSL. */ - uint64_t c0_un_b0 : 1; /**< Enables NPEI_INT_SUM[38] to generate an - interrupt on the RSL. */ - uint64_t c0_up_bx : 1; /**< Enables NPEI_INT_SUM[37] to generate an - interrupt on the RSL. */ - uint64_t c0_up_wi : 1; /**< Enables NPEI_INT_SUM[36] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b2 : 1; /**< Enables NPEI_INT_SUM[35] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b1 : 1; /**< Enables NPEI_INT_SUM[34] to generate an - interrupt on the RSL. */ - uint64_t c0_up_b0 : 1; /**< Enables NPEI_INT_SUM[33] to generate an - interrupt on the RSL. */ - uint64_t c1_hpint : 1; /**< Enables NPEI_INT_SUM[32] to generate an - interrupt on the RSL. */ - uint64_t c1_pmei : 1; /**< Enables NPEI_INT_SUM[31] to generate an - interrupt on the RSL. */ - uint64_t c1_wake : 1; /**< Enables NPEI_INT_SUM[30] to generate an - interrupt on the RSL. */ - uint64_t reserved_29_29 : 1; - uint64_t c1_se : 1; /**< Enables NPEI_INT_SUM[28] to generate an - interrupt on the RSL. */ - uint64_t reserved_27_27 : 1; - uint64_t c1_aeri : 1; /**< Enables NPEI_INT_SUM[26] to generate an - interrupt on the RSL. */ - uint64_t c0_hpint : 1; /**< Enables NPEI_INT_SUM[25] to generate an - interrupt on the RSL. */ - uint64_t c0_pmei : 1; /**< Enables NPEI_INT_SUM[24] to generate an - interrupt on the RSL. */ - uint64_t c0_wake : 1; /**< Enables NPEI_INT_SUM[23] to generate an - interrupt on the RSL. */ - uint64_t reserved_22_22 : 1; - uint64_t c0_se : 1; /**< Enables NPEI_INT_SUM[21] to generate an - interrupt on the RSL. */ - uint64_t reserved_20_20 : 1; - uint64_t c0_aeri : 1; /**< Enables NPEI_INT_SUM[19] to generate an - interrupt on the RSL. */ - uint64_t ptime : 1; /**< Enables NPEI_INT_SUM[18] to generate an - interrupt on the RSL. */ - uint64_t pcnt : 1; /**< Enables NPEI_INT_SUM[17] to generate an - interrupt on the RSL. */ - uint64_t pidbof : 1; /**< Enables NPEI_INT_SUM[16] to generate an - interrupt on the RSL. */ - uint64_t psldbof : 1; /**< Enables NPEI_INT_SUM[15] to generate an - interrupt on the RSL. */ - uint64_t dtime1 : 1; /**< Enables NPEI_INT_SUM[14] to generate an - interrupt on the RSL. */ - uint64_t dtime0 : 1; /**< Enables NPEI_INT_SUM[13] to generate an - interrupt on the RSL. */ - uint64_t dcnt1 : 1; /**< Enables NPEI_INT_SUM[12] to generate an - interrupt on the RSL. */ - uint64_t dcnt0 : 1; /**< Enables NPEI_INT_SUM[11] to generate an - interrupt on the RSL. */ - uint64_t dma1fi : 1; /**< Enables NPEI_INT_SUM[10] to generate an - interrupt on the RSL. */ - uint64_t dma0fi : 1; /**< Enables NPEI_INT_SUM[9] to generate an - interrupt on the RSL. */ - uint64_t dma4dbo : 1; /**< Enables NPEI_INT_SUM[8] to generate an - interrupt on the RSL. */ - uint64_t dma3dbo : 1; /**< Enables NPEI_INT_SUM[7] to generate an - interrupt on the RSL. */ - uint64_t dma2dbo : 1; /**< Enables NPEI_INT_SUM[6] to generate an - interrupt on the RSL. */ - uint64_t dma1dbo : 1; /**< Enables NPEI_INT_SUM[5] to generate an - interrupt on the RSL. */ - uint64_t dma0dbo : 1; /**< Enables NPEI_INT_SUM[4] to generate an - interrupt on the RSL. */ - uint64_t iob2big : 1; /**< Enables NPEI_INT_SUM[3] to generate an - interrupt on the RSL. */ - uint64_t bar0_to : 1; /**< Enables NPEI_INT_SUM[2] to generate an - interrupt on the RSL. */ - uint64_t rml_wto : 1; /**< Enables NPEI_INT_SUM[1] to generate an - interrupt on the RSL. */ - uint64_t rml_rto : 1; /**< Enables NPEI_INT_UM[0] to generate an - interrupt on the RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t reserved_20_20 : 1; - uint64_t c0_se : 1; - uint64_t reserved_22_22 : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t reserved_27_27 : 1; - uint64_t c1_se : 1; - uint64_t reserved_29_29 : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t reserved_61_63 : 3; -#endif - } cn56xxp1; -} cvmx_npei_int_enb2_t; - - -/** - * cvmx_npei_int_info - * - * NPEI_INT_INFO = NPI Interrupt Information - * - * Contains information about some of the interrupt condition that can occur in the NPEI_INTERRUPT_SUM register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_info_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t pidbof : 6; /**< Field set when the NPEI_INTERRUPT_SUM[PIDBOF] bit - is set. This field when set will not change again - unitl NPEI_INTERRUPT_SUM[PIDBOF] is cleared. */ - uint64_t psldbof : 6; /**< Field set when the NPEI_INTERRUPT_SUM[PSLDBOF] bit - is set. This field when set will not change again - unitl NPEI_INTERRUPT_SUM[PSLDBOF] is cleared. */ -#else - uint64_t psldbof : 6; - uint64_t pidbof : 6; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_npei_int_info_s cn52xx; - struct cvmx_npei_int_info_s cn56xx; - struct cvmx_npei_int_info_s cn56xxp1; -} cvmx_npei_int_info_t; - - -/** - * cvmx_npei_int_sum - * - * NPEI_INTERRUPT_SUM = NPI Interrupt Summary Register - * - * Set when an interrupt condition occurs, write '1' to clear. - * - * HACK: These used to exist, how are TO handled? - * <3> PO0_2SML R/W1C 0x0 0 The packet being sent out on Port0 is smaller $R NS - * than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. - * <7> I0_RTOUT R/W1C 0x0 0 Port-0 had a read timeout while attempting to $R NS - * read instructions. - * <15> P0_RTOUT R/W1C 0x0 0 Port-0 had a read timeout while attempting to $R NS - * read packet data. - * <23> G0_RTOUT R/W1C 0x0 0 Port-0 had a read timeout while attempting to $R NS - * read a gather list. - * <31> P0_PTOUT R/W1C 0x0 0 Port-0 output had a read timeout on a DATA/INFO $R NS - * pair. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Interrupt from MIO. */ - uint64_t reserved_62_62 : 1; - uint64_t int_a : 1; /**< Set when a bit in the NPEI_INT_A_SUM register and - the cooresponding bit in the NPEI_INT_A_ENB - register is set. */ - uint64_t c1_ldwn : 1; /**< Reset request due to link1 down status. */ - uint64_t c0_ldwn : 1; /**< Reset request due to link0 down status. */ - uint64_t c1_exc : 1; /**< Set when the PESC1_DBG_INFO register has a bit - set and its cooresponding PESC1_DBG_INFO_EN bit - is set. */ - uint64_t c0_exc : 1; /**< Set when the PESC0_DBG_INFO register has a bit - set and its cooresponding PESC0_DBG_INFO_EN bit - is set. */ - uint64_t c1_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core1. */ - uint64_t c0_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core0. */ - uint64_t c1_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core1. */ - uint64_t c0_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core0. */ - uint64_t c1_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 1. */ - uint64_t c1_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 1. */ - uint64_t c1_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 1. */ - uint64_t c1_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 1. */ - uint64_t c1_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 1. */ - uint64_t c1_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 1. */ - uint64_t c1_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 1. */ - uint64_t c1_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 1. */ - uint64_t c1_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 1. */ - uint64_t c1_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 1. */ - uint64_t c0_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 0. */ - uint64_t c0_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 0. */ - uint64_t c0_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 0. */ - uint64_t c0_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 0. */ - uint64_t c0_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 0. */ - uint64_t c0_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 0. */ - uint64_t c0_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 0. */ - uint64_t c0_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 0. */ - uint64_t c0_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 0. */ - uint64_t c0_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 0. */ - uint64_t c1_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 1 (hp_int). - This interrupt will only be generated when - PCIERC1_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c1_pmei : 1; /**< PME Interrupt. - Pcie Core 1. (cfg_pme_int) */ - uint64_t c1_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 1. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t crs1_dr : 1; /**< Had a CRS when Retries were disabled. */ - uint64_t c1_se : 1; /**< System Error, RC Mode Only. - Pcie Core 1. (cfg_sys_err_rc) */ - uint64_t crs1_er : 1; /**< Had a CRS Timeout when Retries were enabled. */ - uint64_t c1_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 1. */ - uint64_t c0_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 0 (hp_int). - This interrupt will only be generated when - PCIERC0_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c0_pmei : 1; /**< PME Interrupt. - Pcie Core 0. (cfg_pme_int) */ - uint64_t c0_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 0. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t crs0_dr : 1; /**< Had a CRS when Retries were disabled. */ - uint64_t c0_se : 1; /**< System Error, RC Mode Only. - Pcie Core 0. (cfg_sys_err_rc) */ - uint64_t crs0_er : 1; /**< Had a CRS Timeout when Retries were enabled. */ - uint64_t c0_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 0 (cfg_aer_rc_err_int). */ - uint64_t ptime : 1; /**< Packet Timer has an interrupt. Which rings can - be found in NPEI_PKT_TIME_INT. */ - uint64_t pcnt : 1; /**< Packet Counter has an interrupt. Which rings can - be found in NPEI_PKT_CNT_INT. */ - uint64_t pidbof : 1; /**< Packet Instruction Doorbell count overflowed. Which - doorbell can be found in NPEI_INT_INFO[PIDBOF] */ - uint64_t psldbof : 1; /**< Packet Scatterlist Doorbell count overflowed. Which - doorbell can be found in NPEI_INT_INFO[PSLDBOF] */ - uint64_t dtime1 : 1; /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the - DMA_CNT1 timer increments every core clock. When - DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT1 timer. */ - uint64_t dtime0 : 1; /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the - DMA_CNT0 timer increments every core clock. When - DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT0 timer. */ - uint64_t dcnt1 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is - greater than NPEI_DMA1_INT_LEVEL[CNT]. */ - uint64_t dcnt0 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is - greater than NPEI_DMA0_INT_LEVEL[CNT]. */ - uint64_t dma1fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t dma0fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t dma4dbo : 1; /**< DMA4 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma3dbo : 1; /**< DMA3 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma2dbo : 1; /**< DMA2 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma1dbo : 1; /**< DMA1 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma0dbo : 1; /**< DMA0 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t iob2big : 1; /**< A requested IOBDMA is to large. */ - uint64_t bar0_to : 1; /**< BAR0 R/W to a NCB device did not receive - read-data/commit in 0xffff core clocks. */ - uint64_t rml_wto : 1; /**< RML write did not get commit in 0xffff core clocks. */ - uint64_t rml_rto : 1; /**< RML read did not return data in 0xffff core clocks. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t psldbof : 1; - uint64_t pidbof : 1; - uint64_t pcnt : 1; - uint64_t ptime : 1; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_62 : 1; - uint64_t mio_inta : 1; -#endif - } s; - struct cvmx_npei_int_sum_s cn52xx; - struct cvmx_npei_int_sum_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Interrupt from MIO. */ - uint64_t reserved_62_62 : 1; - uint64_t int_a : 1; /**< Set when a bit in the NPEI_INT_A_SUM register and - the cooresponding bit in the NPEI_INT_A_ENB - register is set. */ - uint64_t c1_ldwn : 1; /**< Reset request due to link1 down status. */ - uint64_t c0_ldwn : 1; /**< Reset request due to link0 down status. */ - uint64_t c1_exc : 1; /**< Set when the PESC1_DBG_INFO register has a bit - set and its cooresponding PESC1_DBG_INFO_EN bit - is set. */ - uint64_t c0_exc : 1; /**< Set when the PESC0_DBG_INFO register has a bit - set and its cooresponding PESC0_DBG_INFO_EN bit - is set. */ - uint64_t c1_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core1. */ - uint64_t c0_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core0. */ - uint64_t c1_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core1. */ - uint64_t c0_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core0. */ - uint64_t c1_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 1. */ - uint64_t c1_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 1. */ - uint64_t c1_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 1. */ - uint64_t c1_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 1. */ - uint64_t c1_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 1. */ - uint64_t c1_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 1. */ - uint64_t c1_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 1. */ - uint64_t c1_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 1. */ - uint64_t c1_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 1. */ - uint64_t c1_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 1. */ - uint64_t c0_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 0. */ - uint64_t c0_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 0. */ - uint64_t c0_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 0. */ - uint64_t c0_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 0. */ - uint64_t c0_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 0. */ - uint64_t c0_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 0. */ - uint64_t c0_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 0. */ - uint64_t c0_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 0. */ - uint64_t c0_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 0. */ - uint64_t c0_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 0. */ - uint64_t c1_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 1 (hp_int). - This interrupt will only be generated when - PCIERC1_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c1_pmei : 1; /**< PME Interrupt. - Pcie Core 1. (cfg_pme_int) */ - uint64_t c1_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 1. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t crs1_dr : 1; /**< Had a CRS when Retries were disabled. */ - uint64_t c1_se : 1; /**< System Error, RC Mode Only. - Pcie Core 1. (cfg_sys_err_rc) */ - uint64_t crs1_er : 1; /**< Had a CRS Timeout when Retries were enabled. */ - uint64_t c1_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 1. */ - uint64_t c0_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 0 (hp_int). - This interrupt will only be generated when - PCIERC0_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c0_pmei : 1; /**< PME Interrupt. - Pcie Core 0. (cfg_pme_int) */ - uint64_t c0_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 0. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t crs0_dr : 1; /**< Had a CRS when Retries were disabled. */ - uint64_t c0_se : 1; /**< System Error, RC Mode Only. - Pcie Core 0. (cfg_sys_err_rc) */ - uint64_t crs0_er : 1; /**< Had a CRS Timeout when Retries were enabled. */ - uint64_t c0_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 0 (cfg_aer_rc_err_int). */ - uint64_t reserved_15_18 : 4; - uint64_t dtime1 : 1; /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the - DMA_CNT1 timer increments every core clock. When - DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT1 timer. */ - uint64_t dtime0 : 1; /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the - DMA_CNT0 timer increments every core clock. When - DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT0 timer. */ - uint64_t dcnt1 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is - greater than NPEI_DMA1_INT_LEVEL[CNT]. */ - uint64_t dcnt0 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is - greater than NPEI_DMA0_INT_LEVEL[CNT]. */ - uint64_t dma1fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t dma0fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t reserved_8_8 : 1; - uint64_t dma3dbo : 1; /**< DMA3 doorbell count overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma2dbo : 1; /**< DMA2 doorbell count overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma1dbo : 1; /**< DMA1 doorbell count overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma0dbo : 1; /**< DMA0 doorbell count overflow. - Bit[32] of the doorbell count was set. */ - uint64_t iob2big : 1; /**< A requested IOBDMA is to large. */ - uint64_t bar0_to : 1; /**< BAR0 R/W to a NCB device did not receive - read-data/commit in 0xffff core clocks. */ - uint64_t rml_wto : 1; /**< RML write did not get commit in 0xffff core clocks. */ - uint64_t rml_rto : 1; /**< RML read did not return data in 0xffff core clocks. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t reserved_8_8 : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t reserved_15_18 : 4; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_62 : 1; - uint64_t mio_inta : 1; -#endif - } cn52xxp1; - struct cvmx_npei_int_sum_s cn56xx; - struct cvmx_npei_int_sum_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Interrupt from MIO. */ - uint64_t reserved_61_62 : 2; - uint64_t c1_ldwn : 1; /**< Reset request due to link1 down status. */ - uint64_t c0_ldwn : 1; /**< Reset request due to link0 down status. */ - uint64_t c1_exc : 1; /**< Set when the PESC1_DBG_INFO register has a bit - set and its cooresponding PESC1_DBG_INFO_EN bit - is set. */ - uint64_t c0_exc : 1; /**< Set when the PESC0_DBG_INFO register has a bit - set and its cooresponding PESC0_DBG_INFO_EN bit - is set. */ - uint64_t c1_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core1. */ - uint64_t c0_up_wf : 1; /**< Received Unsupported P-TLP for filtered window - register. Core0. */ - uint64_t c1_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core1. */ - uint64_t c0_un_wf : 1; /**< Received Unsupported N-TLP for filtered window - register. Core0. */ - uint64_t c1_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 1. */ - uint64_t c1_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 1. */ - uint64_t c1_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 1. */ - uint64_t c1_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 1. */ - uint64_t c1_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 1. */ - uint64_t c1_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 1. */ - uint64_t c1_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 1. */ - uint64_t c1_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 1. */ - uint64_t c1_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 1. */ - uint64_t c1_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 1. */ - uint64_t c0_un_bx : 1; /**< Received Unsupported N-TLP for unknown Bar. - Core 0. */ - uint64_t c0_un_wi : 1; /**< Received Unsupported N-TLP for Window Register. - Core 0. */ - uint64_t c0_un_b2 : 1; /**< Received Unsupported N-TLP for Bar2. - Core 0. */ - uint64_t c0_un_b1 : 1; /**< Received Unsupported N-TLP for Bar1. - Core 0. */ - uint64_t c0_un_b0 : 1; /**< Received Unsupported N-TLP for Bar0. - Core 0. */ - uint64_t c0_up_bx : 1; /**< Received Unsupported P-TLP for unknown Bar. - Core 0. */ - uint64_t c0_up_wi : 1; /**< Received Unsupported P-TLP for Window Register. - Core 0. */ - uint64_t c0_up_b2 : 1; /**< Received Unsupported P-TLP for Bar2. - Core 0. */ - uint64_t c0_up_b1 : 1; /**< Received Unsupported P-TLP for Bar1. - Core 0. */ - uint64_t c0_up_b0 : 1; /**< Received Unsupported P-TLP for Bar0. - Core 0. */ - uint64_t c1_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 1 (hp_int). - This interrupt will only be generated when - PCIERC1_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c1_pmei : 1; /**< PME Interrupt. - Pcie Core 1. (cfg_pme_int) */ - uint64_t c1_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 1. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t reserved_29_29 : 1; - uint64_t c1_se : 1; /**< System Error, RC Mode Only. - Pcie Core 1. (cfg_sys_err_rc) */ - uint64_t reserved_27_27 : 1; - uint64_t c1_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 1. */ - uint64_t c0_hpint : 1; /**< Hot-Plug Interrupt. - Pcie Core 0 (hp_int). - This interrupt will only be generated when - PCIERC0_CFG034[DLLS_C] is generated. Hot plug is - not supported. */ - uint64_t c0_pmei : 1; /**< PME Interrupt. - Pcie Core 0. (cfg_pme_int) */ - uint64_t c0_wake : 1; /**< Wake up from Power Management Unit. - Pcie Core 0. (wake_n) - Octeon will never generate this interrupt. */ - uint64_t reserved_22_22 : 1; - uint64_t c0_se : 1; /**< System Error, RC Mode Only. - Pcie Core 0. (cfg_sys_err_rc) */ - uint64_t reserved_20_20 : 1; - uint64_t c0_aeri : 1; /**< Advanced Error Reporting Interrupt, RC Mode Only. - Pcie Core 0 (cfg_aer_rc_err_int). */ - uint64_t reserved_15_18 : 4; - uint64_t dtime1 : 1; /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the - DMA_CNT1 timer increments every core clock. When - DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT1 timer. */ - uint64_t dtime0 : 1; /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the - DMA_CNT0 timer increments every core clock. When - DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME], - this bit is set. Writing a '1' to this bit also - clears the DMA_CNT0 timer. */ - uint64_t dcnt1 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is - greater than NPEI_DMA1_INT_LEVEL[CNT]. */ - uint64_t dcnt0 : 1; /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is - greater than NPEI_DMA0_INT_LEVEL[CNT]. */ - uint64_t dma1fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t dma0fi : 1; /**< DMA0 set Forced Interrupt. */ - uint64_t dma4dbo : 1; /**< DMA4 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma3dbo : 1; /**< DMA3 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma2dbo : 1; /**< DMA2 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma1dbo : 1; /**< DMA1 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t dma0dbo : 1; /**< DMA0 doorbell overflow. - Bit[32] of the doorbell count was set. */ - uint64_t iob2big : 1; /**< A requested IOBDMA is to large. */ - uint64_t bar0_to : 1; /**< BAR0 R/W to a NCB device did not receive - read-data/commit in 0xffff core clocks. */ - uint64_t rml_wto : 1; /**< RML write did not get commit in 0xffff core clocks. */ - uint64_t rml_rto : 1; /**< RML read did not return data in 0xffff core clocks. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t dma4dbo : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t reserved_15_18 : 4; - uint64_t c0_aeri : 1; - uint64_t reserved_20_20 : 1; - uint64_t c0_se : 1; - uint64_t reserved_22_22 : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t reserved_27_27 : 1; - uint64_t c1_se : 1; - uint64_t reserved_29_29 : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t reserved_61_62 : 2; - uint64_t mio_inta : 1; -#endif - } cn56xxp1; -} cvmx_npei_int_sum_t; - - -/** - * cvmx_npei_int_sum2 - * - * NPEI_INTERRUPT_SUM2 = NPI Interrupt Summary2 Register - * - * This is a read only copy of the NPEI_INTERRUPT_SUM register with bit variances. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_int_sum2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mio_inta : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t reserved_62_62 : 1; - uint64_t int_a : 1; /**< Set when a bit in the NPEI_INT_A_SUM register and - the cooresponding bit in the NPEI_INT_A_ENB2 - register is set. */ - uint64_t c1_ldwn : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_ldwn : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_exc : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_exc : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_wf : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_wf : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_wf : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_wf : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_bx : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_wi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_b2 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_b1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_un_b0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_bx : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_wi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_b2 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_b1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_up_b0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_bx : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_wi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_b2 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_b1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_un_b0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_bx : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_wi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_b2 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_b1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_up_b0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_hpint : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_pmei : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_wake : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t crs1_dr : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_se : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t crs1_er : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c1_aeri : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_hpint : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_pmei : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_wake : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t crs0_dr : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_se : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t crs0_er : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t c0_aeri : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t reserved_15_18 : 4; - uint64_t dtime1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dtime0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dcnt1 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dcnt0 : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dma1fi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dma0fi : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t reserved_8_8 : 1; - uint64_t dma3dbo : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dma2dbo : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dma1dbo : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t dma0dbo : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t iob2big : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t bar0_to : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t rml_wto : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ - uint64_t rml_rto : 1; /**< Equal to the cooresponding bit if the - NPEI_INT_SUM register. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t bar0_to : 1; - uint64_t iob2big : 1; - uint64_t dma0dbo : 1; - uint64_t dma1dbo : 1; - uint64_t dma2dbo : 1; - uint64_t dma3dbo : 1; - uint64_t reserved_8_8 : 1; - uint64_t dma0fi : 1; - uint64_t dma1fi : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t reserved_15_18 : 4; - uint64_t c0_aeri : 1; - uint64_t crs0_er : 1; - uint64_t c0_se : 1; - uint64_t crs0_dr : 1; - uint64_t c0_wake : 1; - uint64_t c0_pmei : 1; - uint64_t c0_hpint : 1; - uint64_t c1_aeri : 1; - uint64_t crs1_er : 1; - uint64_t c1_se : 1; - uint64_t crs1_dr : 1; - uint64_t c1_wake : 1; - uint64_t c1_pmei : 1; - uint64_t c1_hpint : 1; - uint64_t c0_up_b0 : 1; - uint64_t c0_up_b1 : 1; - uint64_t c0_up_b2 : 1; - uint64_t c0_up_wi : 1; - uint64_t c0_up_bx : 1; - uint64_t c0_un_b0 : 1; - uint64_t c0_un_b1 : 1; - uint64_t c0_un_b2 : 1; - uint64_t c0_un_wi : 1; - uint64_t c0_un_bx : 1; - uint64_t c1_up_b0 : 1; - uint64_t c1_up_b1 : 1; - uint64_t c1_up_b2 : 1; - uint64_t c1_up_wi : 1; - uint64_t c1_up_bx : 1; - uint64_t c1_un_b0 : 1; - uint64_t c1_un_b1 : 1; - uint64_t c1_un_b2 : 1; - uint64_t c1_un_wi : 1; - uint64_t c1_un_bx : 1; - uint64_t c0_un_wf : 1; - uint64_t c1_un_wf : 1; - uint64_t c0_up_wf : 1; - uint64_t c1_up_wf : 1; - uint64_t c0_exc : 1; - uint64_t c1_exc : 1; - uint64_t c0_ldwn : 1; - uint64_t c1_ldwn : 1; - uint64_t int_a : 1; - uint64_t reserved_62_62 : 1; - uint64_t mio_inta : 1; -#endif - } s; - struct cvmx_npei_int_sum2_s cn52xx; - struct cvmx_npei_int_sum2_s cn52xxp1; - struct cvmx_npei_int_sum2_s cn56xx; -} cvmx_npei_int_sum2_t; - - -/** - * cvmx_npei_last_win_rdata0 - * - * NPEI_LAST_WIN_RDATA0 = NPEI Last Window Read Data Port0 - * - * The data from the last initiated window read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_last_win_rdata0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Last window read data. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_npei_last_win_rdata0_s cn52xx; - struct cvmx_npei_last_win_rdata0_s cn52xxp1; - struct cvmx_npei_last_win_rdata0_s cn56xx; - struct cvmx_npei_last_win_rdata0_s cn56xxp1; -} cvmx_npei_last_win_rdata0_t; - - -/** - * cvmx_npei_last_win_rdata1 - * - * NPEI_LAST_WIN_RDATA1 = NPEI Last Window Read Data Port1 - * - * The data from the last initiated window read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_last_win_rdata1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Last window read data. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_npei_last_win_rdata1_s cn52xx; - struct cvmx_npei_last_win_rdata1_s cn52xxp1; - struct cvmx_npei_last_win_rdata1_s cn56xx; - struct cvmx_npei_last_win_rdata1_s cn56xxp1; -} cvmx_npei_last_win_rdata1_t; - - -/** - * cvmx_npei_mem_access_ctl - * - * NPEI_MEM_ACCESS_CTL = NPEI's Memory Access Control - * - * Contains control for access to the PCIe address space. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_mem_access_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t max_word : 4; /**< The maximum number of words to merge into a single - write operation from the PPs to the PCIe. Legal - values are 1 to 16, where a '0' is treated as 16. */ - uint64_t timer : 10; /**< When the NPEI starts a PP to PCIe write it waits - no longer than the value of TIMER in eclks to - merge additional writes from the PPs into 1 - large write. The values for this field is 1 to - 1024 where a value of '0' is treated as 1024. */ -#else - uint64_t timer : 10; - uint64_t max_word : 4; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_npei_mem_access_ctl_s cn52xx; - struct cvmx_npei_mem_access_ctl_s cn52xxp1; - struct cvmx_npei_mem_access_ctl_s cn56xx; - struct cvmx_npei_mem_access_ctl_s cn56xxp1; -} cvmx_npei_mem_access_ctl_t; - - -/** - * cvmx_npei_mem_access_subid# - * - * NPEI_MEM_ACCESS_SUBIDX = NPEI Memory Access SubidX Register - * - * Contains address index and control bits for access to memory from Core PPs. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_mem_access_subidx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_42_63 : 22; - uint64_t zero : 1; /**< Causes all byte reads to be zero length reads. - Returns to the EXEC a zero for all read data. */ - uint64_t port : 2; /**< Port the request is sent to. */ - uint64_t nmerge : 1; /**< No merging is allowed in this window. */ - uint64_t esr : 2; /**< Endian-swap for Reads. */ - uint64_t esw : 2; /**< Endian-swap for Writes. */ - uint64_t nsr : 1; /**< No Snoop for Reads. */ - uint64_t nsw : 1; /**< No Snoop for Writes. */ - uint64_t ror : 1; /**< Relaxed Ordering for Reads. */ - uint64_t row : 1; /**< Relaxed Ordering for Writes. */ - uint64_t ba : 30; /**< PCIe Adddress Bits <63:34>. */ -#else - uint64_t ba : 30; - uint64_t row : 1; - uint64_t ror : 1; - uint64_t nsw : 1; - uint64_t nsr : 1; - uint64_t esw : 2; - uint64_t esr : 2; - uint64_t nmerge : 1; - uint64_t port : 2; - uint64_t zero : 1; - uint64_t reserved_42_63 : 22; -#endif - } s; - struct cvmx_npei_mem_access_subidx_s cn52xx; - struct cvmx_npei_mem_access_subidx_s cn52xxp1; - struct cvmx_npei_mem_access_subidx_s cn56xx; - struct cvmx_npei_mem_access_subidx_s cn56xxp1; -} cvmx_npei_mem_access_subidx_t; - - -/** - * cvmx_npei_msi_enb0 - * - * NPEI_MSI_ENB0 = NPEI MSI Enable0 - * - * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_enb0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t enb : 64; /**< Enables bit [63:0] of NPEI_MSI_RCV0. */ -#else - uint64_t enb : 64; -#endif - } s; - struct cvmx_npei_msi_enb0_s cn52xx; - struct cvmx_npei_msi_enb0_s cn52xxp1; - struct cvmx_npei_msi_enb0_s cn56xx; - struct cvmx_npei_msi_enb0_s cn56xxp1; -} cvmx_npei_msi_enb0_t; - - -/** - * cvmx_npei_msi_enb1 - * - * NPEI_MSI_ENB1 = NPEI MSI Enable1 - * - * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV1. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_enb1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t enb : 64; /**< Enables bit [63:0] of NPEI_MSI_RCV1. */ -#else - uint64_t enb : 64; -#endif - } s; - struct cvmx_npei_msi_enb1_s cn52xx; - struct cvmx_npei_msi_enb1_s cn52xxp1; - struct cvmx_npei_msi_enb1_s cn56xx; - struct cvmx_npei_msi_enb1_s cn56xxp1; -} cvmx_npei_msi_enb1_t; - - -/** - * cvmx_npei_msi_enb2 - * - * NPEI_MSI_ENB2 = NPEI MSI Enable2 - * - * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV2. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t enb : 64; /**< Enables bit [63:0] of NPEI_MSI_RCV2. */ -#else - uint64_t enb : 64; -#endif - } s; - struct cvmx_npei_msi_enb2_s cn52xx; - struct cvmx_npei_msi_enb2_s cn52xxp1; - struct cvmx_npei_msi_enb2_s cn56xx; - struct cvmx_npei_msi_enb2_s cn56xxp1; -} cvmx_npei_msi_enb2_t; - - -/** - * cvmx_npei_msi_enb3 - * - * NPEI_MSI_ENB3 = NPEI MSI Enable3 - * - * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV3. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_enb3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t enb : 64; /**< Enables bit [63:0] of NPEI_MSI_RCV3. */ -#else - uint64_t enb : 64; -#endif - } s; - struct cvmx_npei_msi_enb3_s cn52xx; - struct cvmx_npei_msi_enb3_s cn52xxp1; - struct cvmx_npei_msi_enb3_s cn56xx; - struct cvmx_npei_msi_enb3_s cn56xxp1; -} cvmx_npei_msi_enb3_t; - - -/** - * cvmx_npei_msi_rcv0 - * - * NPEI_MSI_RCV0 = NPEI MSI Receive0 - * - * Contains bits [63:0] of the 256 bits oof MSI interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_rcv0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t intr : 64; /**< Bits 63-0 of the 256 bits of MSI interrupt. */ -#else - uint64_t intr : 64; -#endif - } s; - struct cvmx_npei_msi_rcv0_s cn52xx; - struct cvmx_npei_msi_rcv0_s cn52xxp1; - struct cvmx_npei_msi_rcv0_s cn56xx; - struct cvmx_npei_msi_rcv0_s cn56xxp1; -} cvmx_npei_msi_rcv0_t; - - -/** - * cvmx_npei_msi_rcv1 - * - * NPEI_MSI_RCV1 = NPEI MSI Receive1 - * - * Contains bits [127:64] of the 256 bits oof MSI interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_rcv1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t intr : 64; /**< Bits 127-64 of the 256 bits of MSI interrupt. */ -#else - uint64_t intr : 64; -#endif - } s; - struct cvmx_npei_msi_rcv1_s cn52xx; - struct cvmx_npei_msi_rcv1_s cn52xxp1; - struct cvmx_npei_msi_rcv1_s cn56xx; - struct cvmx_npei_msi_rcv1_s cn56xxp1; -} cvmx_npei_msi_rcv1_t; - - -/** - * cvmx_npei_msi_rcv2 - * - * NPEI_MSI_RCV2 = NPEI MSI Receive2 - * - * Contains bits [191:128] of the 256 bits oof MSI interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_rcv2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t intr : 64; /**< Bits 191-128 of the 256 bits of MSI interrupt. */ -#else - uint64_t intr : 64; -#endif - } s; - struct cvmx_npei_msi_rcv2_s cn52xx; - struct cvmx_npei_msi_rcv2_s cn52xxp1; - struct cvmx_npei_msi_rcv2_s cn56xx; - struct cvmx_npei_msi_rcv2_s cn56xxp1; -} cvmx_npei_msi_rcv2_t; - - -/** - * cvmx_npei_msi_rcv3 - * - * NPEI_MSI_RCV3 = NPEI MSI Receive3 - * - * Contains bits [255:192] of the 256 bits oof MSI interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_rcv3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t intr : 64; /**< Bits 255-192 of the 256 bits of MSI interrupt. */ -#else - uint64_t intr : 64; -#endif - } s; - struct cvmx_npei_msi_rcv3_s cn52xx; - struct cvmx_npei_msi_rcv3_s cn52xxp1; - struct cvmx_npei_msi_rcv3_s cn56xx; - struct cvmx_npei_msi_rcv3_s cn56xxp1; -} cvmx_npei_msi_rcv3_t; - - -/** - * cvmx_npei_msi_rd_map - * - * NPEI_MSI_RD_MAP = NPEI MSI Read MAP - * - * Used to read the mapping function of the NPEI_PCIE_MSI_RCV to NPEI_MSI_RCV registers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_rd_map_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t rd_int : 8; /**< The value of the map at the location PREVIOUSLY - written to the MSI_INT field of this register. */ - uint64_t msi_int : 8; /**< Selects the value that would be received when the - NPEI_PCIE_MSI_RCV register is written. */ -#else - uint64_t msi_int : 8; - uint64_t rd_int : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npei_msi_rd_map_s cn52xx; - struct cvmx_npei_msi_rd_map_s cn52xxp1; - struct cvmx_npei_msi_rd_map_s cn56xx; - struct cvmx_npei_msi_rd_map_s cn56xxp1; -} cvmx_npei_msi_rd_map_t; - - -/** - * cvmx_npei_msi_w1c_enb0 - * - * NPEI_MSI_W1C_ENB0 = NPEI MSI Write 1 To Clear Enable0 - * - * Used to clear bits in NPEI_MSI_ENB0. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1c_enb0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t clr : 64; /**< A write of '1' to a vector will clear the - cooresponding bit in NPEI_MSI_ENB0. - A read to this address will return 0. */ -#else - uint64_t clr : 64; -#endif - } s; - struct cvmx_npei_msi_w1c_enb0_s cn52xx; - struct cvmx_npei_msi_w1c_enb0_s cn56xx; -} cvmx_npei_msi_w1c_enb0_t; - - -/** - * cvmx_npei_msi_w1c_enb1 - * - * NPEI_MSI_W1C_ENB1 = NPEI MSI Write 1 To Clear Enable1 - * - * Used to clear bits in NPEI_MSI_ENB1. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1c_enb1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t clr : 64; /**< A write of '1' to a vector will clear the - cooresponding bit in NPEI_MSI_ENB1. - A read to this address will return 0. */ -#else - uint64_t clr : 64; -#endif - } s; - struct cvmx_npei_msi_w1c_enb1_s cn52xx; - struct cvmx_npei_msi_w1c_enb1_s cn56xx; -} cvmx_npei_msi_w1c_enb1_t; - - -/** - * cvmx_npei_msi_w1c_enb2 - * - * NPEI_MSI_W1C_ENB2 = NPEI MSI Write 1 To Clear Enable2 - * - * Used to clear bits in NPEI_MSI_ENB2. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1c_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t clr : 64; /**< A write of '1' to a vector will clear the - cooresponding bit in NPEI_MSI_ENB2. - A read to this address will return 0. */ -#else - uint64_t clr : 64; -#endif - } s; - struct cvmx_npei_msi_w1c_enb2_s cn52xx; - struct cvmx_npei_msi_w1c_enb2_s cn56xx; -} cvmx_npei_msi_w1c_enb2_t; - - -/** - * cvmx_npei_msi_w1c_enb3 - * - * NPEI_MSI_W1C_ENB3 = NPEI MSI Write 1 To Clear Enable3 - * - * Used to clear bits in NPEI_MSI_ENB3. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1c_enb3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t clr : 64; /**< A write of '1' to a vector will clear the - cooresponding bit in NPEI_MSI_ENB3. - A read to this address will return 0. */ -#else - uint64_t clr : 64; -#endif - } s; - struct cvmx_npei_msi_w1c_enb3_s cn52xx; - struct cvmx_npei_msi_w1c_enb3_s cn56xx; -} cvmx_npei_msi_w1c_enb3_t; - - -/** - * cvmx_npei_msi_w1s_enb0 - * - * NPEI_MSI_W1S_ENB0 = NPEI MSI Write 1 To Set Enable0 - * - * Used to set bits in NPEI_MSI_ENB0. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1s_enb0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t set : 64; /**< A write of '1' to a vector will set the - cooresponding bit in NPEI_MSI_ENB0. - A read to this address will return 0. */ -#else - uint64_t set : 64; -#endif - } s; - struct cvmx_npei_msi_w1s_enb0_s cn52xx; - struct cvmx_npei_msi_w1s_enb0_s cn56xx; -} cvmx_npei_msi_w1s_enb0_t; - - -/** - * cvmx_npei_msi_w1s_enb1 - * - * NPEI_MSI_W1S_ENB0 = NPEI MSI Write 1 To Set Enable1 - * - * Used to set bits in NPEI_MSI_ENB1. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1s_enb1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t set : 64; /**< A write of '1' to a vector will set the - cooresponding bit in NPEI_MSI_ENB1. - A read to this address will return 0. */ -#else - uint64_t set : 64; -#endif - } s; - struct cvmx_npei_msi_w1s_enb1_s cn52xx; - struct cvmx_npei_msi_w1s_enb1_s cn56xx; -} cvmx_npei_msi_w1s_enb1_t; - - -/** - * cvmx_npei_msi_w1s_enb2 - * - * NPEI_MSI_W1S_ENB2 = NPEI MSI Write 1 To Set Enable2 - * - * Used to set bits in NPEI_MSI_ENB2. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1s_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t set : 64; /**< A write of '1' to a vector will set the - cooresponding bit in NPEI_MSI_ENB2. - A read to this address will return 0. */ -#else - uint64_t set : 64; -#endif - } s; - struct cvmx_npei_msi_w1s_enb2_s cn52xx; - struct cvmx_npei_msi_w1s_enb2_s cn56xx; -} cvmx_npei_msi_w1s_enb2_t; - - -/** - * cvmx_npei_msi_w1s_enb3 - * - * NPEI_MSI_W1S_ENB3 = NPEI MSI Write 1 To Set Enable3 - * - * Used to set bits in NPEI_MSI_ENB3. This is a PASS2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_w1s_enb3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t set : 64; /**< A write of '1' to a vector will set the - cooresponding bit in NPEI_MSI_ENB3. - A read to this address will return 0. */ -#else - uint64_t set : 64; -#endif - } s; - struct cvmx_npei_msi_w1s_enb3_s cn52xx; - struct cvmx_npei_msi_w1s_enb3_s cn56xx; -} cvmx_npei_msi_w1s_enb3_t; - - -/** - * cvmx_npei_msi_wr_map - * - * NPEI_MSI_WR_MAP = NPEI MSI Write MAP - * - * Used to write the mapping function of the NPEI_PCIE_MSI_RCV to NPEI_MSI_RCV registers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_msi_wr_map_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ciu_int : 8; /**< Selects which bit in the NPEI_MSI_RCV# (0-255) - will be set when the value specified in the - MSI_INT of this register is recevied during a - write to the NPEI_PCIE_MSI_RCV register. */ - uint64_t msi_int : 8; /**< Selects the value that would be received when the - NPEI_PCIE_MSI_RCV register is written. */ -#else - uint64_t msi_int : 8; - uint64_t ciu_int : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npei_msi_wr_map_s cn52xx; - struct cvmx_npei_msi_wr_map_s cn52xxp1; - struct cvmx_npei_msi_wr_map_s cn56xx; - struct cvmx_npei_msi_wr_map_s cn56xxp1; -} cvmx_npei_msi_wr_map_t; - - -/** - * cvmx_npei_pcie_credit_cnt - * - * NPEI_PCIE_CREDIT_CNT = NPEI PCIE Credit Count - * - * Contains the number of credits for the pcie port FIFOs used by the NPEI. This value needs to be set BEFORE PCIe traffic - * flow from NPEI to PCIE Ports starts. A write to this register will cause the credit counts in the NPEI for the two - * PCIE ports to be reset to the value in this register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pcie_credit_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t p1_ccnt : 8; /**< Port1 C-TLP FIFO Credits. - Legal values are 0x25 to 0x80. */ - uint64_t p1_ncnt : 8; /**< Port1 N-TLP FIFO Credits. - Legal values are 0x5 to 0x10. */ - uint64_t p1_pcnt : 8; /**< Port1 P-TLP FIFO Credits. - Legal values are 0x25 to 0x80. */ - uint64_t p0_ccnt : 8; /**< Port0 C-TLP FIFO Credits. - Legal values are 0x25 to 0x80. */ - uint64_t p0_ncnt : 8; /**< Port0 N-TLP FIFO Credits. - Legal values are 0x5 to 0x10. */ - uint64_t p0_pcnt : 8; /**< Port0 P-TLP FIFO Credits. - Legal values are 0x25 to 0x80. */ -#else - uint64_t p0_pcnt : 8; - uint64_t p0_ncnt : 8; - uint64_t p0_ccnt : 8; - uint64_t p1_pcnt : 8; - uint64_t p1_ncnt : 8; - uint64_t p1_ccnt : 8; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_npei_pcie_credit_cnt_s cn52xx; - struct cvmx_npei_pcie_credit_cnt_s cn56xx; -} cvmx_npei_pcie_credit_cnt_t; - - -/** - * cvmx_npei_pcie_msi_rcv - * - * NPEI_PCIE_MSI_RCV = NPEI PCIe MSI Receive - * - * Register where MSI writes are directed from the PCIe. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pcie_msi_rcv_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t intr : 8; /**< A write to this register will result in a bit in - one of the NPEI_MSI_RCV# registers being set. - Which bit is set is dependent on the previously - written using the NPEI_MSI_WR_MAP register or if - not previously written the reset value of the MAP. */ -#else - uint64_t intr : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_npei_pcie_msi_rcv_s cn52xx; - struct cvmx_npei_pcie_msi_rcv_s cn52xxp1; - struct cvmx_npei_pcie_msi_rcv_s cn56xx; - struct cvmx_npei_pcie_msi_rcv_s cn56xxp1; -} cvmx_npei_pcie_msi_rcv_t; - - -/** - * cvmx_npei_pcie_msi_rcv_b1 - * - * NPEI_PCIE_MSI_RCV_B1 = NPEI PCIe MSI Receive Byte 1 - * - * Register where MSI writes are directed from the PCIe. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pcie_msi_rcv_b1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t intr : 8; /**< A write to this register will result in a bit in - one of the NPEI_MSI_RCV# registers being set. - Which bit is set is dependent on the previously - written using the NPEI_MSI_WR_MAP register or if - not previously written the reset value of the MAP. */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t intr : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npei_pcie_msi_rcv_b1_s cn52xx; - struct cvmx_npei_pcie_msi_rcv_b1_s cn52xxp1; - struct cvmx_npei_pcie_msi_rcv_b1_s cn56xx; - struct cvmx_npei_pcie_msi_rcv_b1_s cn56xxp1; -} cvmx_npei_pcie_msi_rcv_b1_t; - - -/** - * cvmx_npei_pcie_msi_rcv_b2 - * - * NPEI_PCIE_MSI_RCV_B2 = NPEI PCIe MSI Receive Byte 2 - * - * Register where MSI writes are directed from the PCIe. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pcie_msi_rcv_b2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t intr : 8; /**< A write to this register will result in a bit in - one of the NPEI_MSI_RCV# registers being set. - Which bit is set is dependent on the previously - written using the NPEI_MSI_WR_MAP register or if - not previously written the reset value of the MAP. */ - uint64_t reserved_0_15 : 16; -#else - uint64_t reserved_0_15 : 16; - uint64_t intr : 8; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_npei_pcie_msi_rcv_b2_s cn52xx; - struct cvmx_npei_pcie_msi_rcv_b2_s cn52xxp1; - struct cvmx_npei_pcie_msi_rcv_b2_s cn56xx; - struct cvmx_npei_pcie_msi_rcv_b2_s cn56xxp1; -} cvmx_npei_pcie_msi_rcv_b2_t; - - -/** - * cvmx_npei_pcie_msi_rcv_b3 - * - * NPEI_PCIE_MSI_RCV_B3 = NPEI PCIe MSI Receive Byte 3 - * - * Register where MSI writes are directed from the PCIe. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pcie_msi_rcv_b3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t intr : 8; /**< A write to this register will result in a bit in - one of the NPEI_MSI_RCV# registers being set. - Which bit is set is dependent on the previously - written using the NPEI_MSI_WR_MAP register or if - not previously written the reset value of the MAP. */ - uint64_t reserved_0_23 : 24; -#else - uint64_t reserved_0_23 : 24; - uint64_t intr : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pcie_msi_rcv_b3_s cn52xx; - struct cvmx_npei_pcie_msi_rcv_b3_s cn52xxp1; - struct cvmx_npei_pcie_msi_rcv_b3_s cn56xx; - struct cvmx_npei_pcie_msi_rcv_b3_s cn56xxp1; -} cvmx_npei_pcie_msi_rcv_b3_t; - - -/** - * cvmx_npei_pkt#_cnts - * - * NPEI_PKT[0..31]_CNTS = NPEI Packet ring# Counts - * - * The counters for output rings. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_cnts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_54_63 : 10; - uint64_t timer : 22; /**< Timer incremented every 1024 core clocks - when NPEI_PKTS#_CNTS[CNT] is non zero. Field - cleared when NPEI_PKTS#_CNTS[CNT] goes to 0. - Field is also cleared when NPEI_PKT_TIME_INT is - cleared. - The first increment of this count can occur - between 0 to 1023 core clocks. */ - uint64_t cnt : 32; /**< ring counter. This field is incremented as - packets are sent out and decremented in response to - writes to this field. - When NPEI_PKT_OUT_BMODE is '0' a value of 1 is - added to the register for each packet, when '1' - and the info-pointer is NOT used the length of the - packet plus 8 is added, when '1' and info-pointer - mode IS used the packet length is added to this - field. */ -#else - uint64_t cnt : 32; - uint64_t timer : 22; - uint64_t reserved_54_63 : 10; -#endif - } s; - struct cvmx_npei_pktx_cnts_s cn52xx; - struct cvmx_npei_pktx_cnts_s cn56xx; -} cvmx_npei_pktx_cnts_t; - - -/** - * cvmx_npei_pkt#_in_bp - * - * NPEI_PKT[0..31]_IN_BP = NPEI Packet ring# Input Backpressure - * - * The counters and thresholds for input packets to apply backpressure to processing of the packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_in_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t wmark : 32; /**< When CNT is greater than this threshold no more - packets will be processed for this ring. - When writing this field of the NPEI_PKT#_IN_BP - register, use a 4-byte write so as to not write - any other field of this register. */ - uint64_t cnt : 32; /**< ring counter. This field is incremented by one - whenever OCTEON receives, buffers, and creates a - work queue entry for a packet that arrives by the - cooresponding input ring. A write to this field - will be subtracted from the field value. - When writing this field of the NPEI_PKT#_IN_BP - register, use a 4-byte write so as to not write - any other field of this register. */ -#else - uint64_t cnt : 32; - uint64_t wmark : 32; -#endif - } s; - struct cvmx_npei_pktx_in_bp_s cn52xx; - struct cvmx_npei_pktx_in_bp_s cn56xx; -} cvmx_npei_pktx_in_bp_t; - - -/** - * cvmx_npei_pkt#_instr_baddr - * - * NPEI_PKT[0..31]_INSTR_BADDR = NPEI Packet ring# Instruction Base Address - * - * Start of Instruction for input packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_instr_baddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 61; /**< Base address for Instructions. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t addr : 61; -#endif - } s; - struct cvmx_npei_pktx_instr_baddr_s cn52xx; - struct cvmx_npei_pktx_instr_baddr_s cn56xx; -} cvmx_npei_pktx_instr_baddr_t; - - -/** - * cvmx_npei_pkt#_instr_baoff_dbell - * - * NPEI_PKT[0..31]_INSTR_BAOFF_DBELL = NPEI Packet ring# Instruction Base Address Offset and Doorbell - * - * The doorbell and base address offset for next read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_instr_baoff_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t aoff : 32; /**< The offset from the NPEI_PKT[0..31]_INSTR_BADDR - where the next instruction will be read. */ - uint64_t dbell : 32; /**< Instruction doorbell count. Writes to this field - will increment the value here. Reads will return - present value. A write of 0xffffffff will set the - DBELL and AOFF fields to '0'. */ -#else - uint64_t dbell : 32; - uint64_t aoff : 32; -#endif - } s; - struct cvmx_npei_pktx_instr_baoff_dbell_s cn52xx; - struct cvmx_npei_pktx_instr_baoff_dbell_s cn56xx; -} cvmx_npei_pktx_instr_baoff_dbell_t; - - -/** - * cvmx_npei_pkt#_instr_fifo_rsize - * - * NPEI_PKT[0..31]_INSTR_FIFO_RSIZE = NPEI Packet ring# Instruction FIFO and Ring Size. - * - * Fifo field and ring size for Instructions. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_instr_fifo_rsize_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t max : 9; /**< Max Fifo Size. */ - uint64_t rrp : 9; /**< Fifo read pointer. */ - uint64_t wrp : 9; /**< Fifo write pointer. */ - uint64_t fcnt : 5; /**< Fifo count. */ - uint64_t rsize : 32; /**< Instruction ring size. */ -#else - uint64_t rsize : 32; - uint64_t fcnt : 5; - uint64_t wrp : 9; - uint64_t rrp : 9; - uint64_t max : 9; -#endif - } s; - struct cvmx_npei_pktx_instr_fifo_rsize_s cn52xx; - struct cvmx_npei_pktx_instr_fifo_rsize_s cn56xx; -} cvmx_npei_pktx_instr_fifo_rsize_t; - - -/** - * cvmx_npei_pkt#_instr_header - * - * NPEI_PKT[0..31]_INSTR_HEADER = NPEI Packet ring# Instruction Header. - * - * VAlues used to build input packet header. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_instr_header_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t pbp : 1; /**< Enable Packet-by-packet mode. */ - uint64_t reserved_38_42 : 5; - uint64_t rparmode : 2; /**< Parse Mode. Used when packet is raw and PBP==0. */ - uint64_t reserved_35_35 : 1; - uint64_t rskp_len : 7; /**< Skip Length. Used when packet is raw and PBP==0. */ - uint64_t reserved_22_27 : 6; - uint64_t use_ihdr : 1; /**< When set '1' the instruction header will be sent - as part of the packet data, regardless of the - value of bit [63] of the instruction header. - USE_IHDR must be set whenever PBP is set. */ - uint64_t reserved_16_20 : 5; - uint64_t par_mode : 2; /**< Parse Mode. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t reserved_13_13 : 1; - uint64_t skp_len : 7; /**< Skip Length. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t reserved_0_5 : 6; -#else - uint64_t reserved_0_5 : 6; - uint64_t skp_len : 7; - uint64_t reserved_13_13 : 1; - uint64_t par_mode : 2; - uint64_t reserved_16_20 : 5; - uint64_t use_ihdr : 1; - uint64_t reserved_22_27 : 6; - uint64_t rskp_len : 7; - uint64_t reserved_35_35 : 1; - uint64_t rparmode : 2; - uint64_t reserved_38_42 : 5; - uint64_t pbp : 1; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npei_pktx_instr_header_s cn52xx; - struct cvmx_npei_pktx_instr_header_s cn56xx; -} cvmx_npei_pktx_instr_header_t; - - -/** - * cvmx_npei_pkt#_slist_baddr - * - * NPEI_PKT[0..31]_SLIST_BADDR = NPEI Packet ring# Scatter List Base Address - * - * Start of Scatter List for output packet pointers - MUST be 16 byte alligned - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_slist_baddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 60; /**< Base address for scatter list pointers. */ - uint64_t reserved_0_3 : 4; -#else - uint64_t reserved_0_3 : 4; - uint64_t addr : 60; -#endif - } s; - struct cvmx_npei_pktx_slist_baddr_s cn52xx; - struct cvmx_npei_pktx_slist_baddr_s cn56xx; -} cvmx_npei_pktx_slist_baddr_t; - - -/** - * cvmx_npei_pkt#_slist_baoff_dbell - * - * NPEI_PKT[0..31]_SLIST_BAOFF_DBELL = NPEI Packet ring# Scatter List Base Address Offset and Doorbell - * - * The doorbell and base address offset for next read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_slist_baoff_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t aoff : 32; /**< The offset from the NPEI_PKT[0..31]_SLIST_BADDR - where the next SList pointer will be read. - A write of 0xFFFFFFFF to the DBELL field will - clear DBELL and AOFF */ - uint64_t dbell : 32; /**< Scatter list doorbell count. Writes to this field - will increment the value here. Reads will return - present value. The value of this field is - decremented as read operations are ISSUED for - scatter pointers. - A write of 0xFFFFFFFF will clear DBELL and AOFF */ -#else - uint64_t dbell : 32; - uint64_t aoff : 32; -#endif - } s; - struct cvmx_npei_pktx_slist_baoff_dbell_s cn52xx; - struct cvmx_npei_pktx_slist_baoff_dbell_s cn56xx; -} cvmx_npei_pktx_slist_baoff_dbell_t; - - -/** - * cvmx_npei_pkt#_slist_fifo_rsize - * - * NPEI_PKT[0..31]_SLIST_FIFO_RSIZE = NPEI Packet ring# Scatter List FIFO and Ring Size. - * - * The number of scatter pointer pairs in the scatter list. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pktx_slist_fifo_rsize_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rsize : 32; /**< The number of scatter pointer pairs contained in - the scatter list ring. */ -#else - uint64_t rsize : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pktx_slist_fifo_rsize_s cn52xx; - struct cvmx_npei_pktx_slist_fifo_rsize_s cn56xx; -} cvmx_npei_pktx_slist_fifo_rsize_t; - - -/** - * cvmx_npei_pkt_cnt_int - * - * NPEI_PKT_CNT_INT = NPI Packet Counter Interrupt - * - * The packets rings that are interrupting because of Packet Counters. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_cnt_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t port : 32; /**< Bit vector cooresponding to ring number is set when - NPEI_PKT#_CNTS[CNT] is greater - than NPEI_PKT_INT_LEVELS[CNT]. */ -#else - uint64_t port : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_cnt_int_s cn52xx; - struct cvmx_npei_pkt_cnt_int_s cn56xx; -} cvmx_npei_pkt_cnt_int_t; - - -/** - * cvmx_npei_pkt_cnt_int_enb - * - * NPEI_PKT_CNT_INT_ENB = NPI Packet Counter Interrupt Enable - * - * Enable for the packets rings that are interrupting because of Packet Counters. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_cnt_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t port : 32; /**< Bit vector cooresponding to ring number when set - allows NPEI_PKT_CNT_INT to generate an interrupt. */ -#else - uint64_t port : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_cnt_int_enb_s cn52xx; - struct cvmx_npei_pkt_cnt_int_enb_s cn56xx; -} cvmx_npei_pkt_cnt_int_enb_t; - - -/** - * cvmx_npei_pkt_data_out_es - * - * NPEI_PKT_DATA_OUT_ES = NPEI's Packet Data Out Endian Swap - * - * The Endian Swap for writing Data Out. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_data_out_es_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t es : 64; /**< The endian swap mode for Packet rings 0 through 31. - Two bits are used per ring (i.e. ring 0 [1:0], - ring 1 [3:2], ....). */ -#else - uint64_t es : 64; -#endif - } s; - struct cvmx_npei_pkt_data_out_es_s cn52xx; - struct cvmx_npei_pkt_data_out_es_s cn56xx; -} cvmx_npei_pkt_data_out_es_t; - - -/** - * cvmx_npei_pkt_data_out_ns - * - * NPEI_PKT_DATA_OUT_NS = NPEI's Packet Data Out No Snoop - * - * The NS field for the TLP when writing packet data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_data_out_ns_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nsr : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will enable NS in TLP header. */ -#else - uint64_t nsr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_data_out_ns_s cn52xx; - struct cvmx_npei_pkt_data_out_ns_s cn56xx; -} cvmx_npei_pkt_data_out_ns_t; - - -/** - * cvmx_npei_pkt_data_out_ror - * - * NPEI_PKT_DATA_OUT_ROR = NPEI's Packet Data Out Relaxed Ordering - * - * The ROR field for the TLP when writing Packet Data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_data_out_ror_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ror : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will enable ROR in TLP header. */ -#else - uint64_t ror : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_data_out_ror_s cn52xx; - struct cvmx_npei_pkt_data_out_ror_s cn56xx; -} cvmx_npei_pkt_data_out_ror_t; - - -/** - * cvmx_npei_pkt_dpaddr - * - * NPEI_PKT_DPADDR = NPEI's Packet Data Pointer Addr - * - * Used to detemine address and attributes for packet data writes. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_dpaddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dptr : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will use: - the address[63:60] to write packet data - comes from the DPTR[63:60] in the scatter-list - pair and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. */ -#else - uint64_t dptr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_dpaddr_s cn52xx; - struct cvmx_npei_pkt_dpaddr_s cn56xx; -} cvmx_npei_pkt_dpaddr_t; - - -/** - * cvmx_npei_pkt_in_bp - * - * NPEI_PKT_IN_BP = NPEI Packet Input Backpressure - * - * Which input rings have backpressure applied. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_in_bp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bp : 32; /**< A packet input ring that has its count greater - than its WMARK will have backpressure applied. - Each of the 32 bits coorespond to an input ring. - When '1' that ring has backpressure applied an - will fetch no more instructions, but will process - any previously fetched instructions. */ -#else - uint64_t bp : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_in_bp_s cn52xx; - struct cvmx_npei_pkt_in_bp_s cn56xx; -} cvmx_npei_pkt_in_bp_t; - - -/** - * cvmx_npei_pkt_in_done#_cnts - * - * NPEI_PKT_IN_DONE[0..31]_CNTS = NPEI Instruction Done ring# Counts - * - * Counters for instructions completed on Input rings. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_in_donex_cnts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< This field is incrmented by '1' when an instruction - is completed. This field is incremented as the - last of the data is read from the PCIe. */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_in_donex_cnts_s cn52xx; - struct cvmx_npei_pkt_in_donex_cnts_s cn56xx; -} cvmx_npei_pkt_in_donex_cnts_t; - - -/** - * cvmx_npei_pkt_in_instr_counts - * - * NPEI_PKT_IN_INSTR_COUNTS = NPEI Packet Input Instrutction Counts - * - * Keeps track of the number of instructions read into the FIFO and Packets sent to IPD. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_in_instr_counts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t wr_cnt : 32; /**< Shows the number of packets sent to the IPD. */ - uint64_t rd_cnt : 32; /**< Shows the value of instructions that have had reads - issued for them. - to the Packet-ring is in reset. */ -#else - uint64_t rd_cnt : 32; - uint64_t wr_cnt : 32; -#endif - } s; - struct cvmx_npei_pkt_in_instr_counts_s cn52xx; - struct cvmx_npei_pkt_in_instr_counts_s cn56xx; -} cvmx_npei_pkt_in_instr_counts_t; - - -/** - * cvmx_npei_pkt_in_pcie_port - * - * NPEI_PKT_IN_PCIE_PORT = NPEI's Packet In To PCIe Port Assignment - * - * Assigns Packet Input rings to PCIe ports. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_in_pcie_port_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pp : 64; /**< The PCIe port that the Packet ring number is - assigned. Two bits are used per ring (i.e. ring 0 - [1:0], ring 1 [3:2], ....). A value of '0 means - that the Packetring is assign to PCIe Port 0, a '1' - PCIe Port 1, '2' and '3' are reserved. */ -#else - uint64_t pp : 64; -#endif - } s; - struct cvmx_npei_pkt_in_pcie_port_s cn52xx; - struct cvmx_npei_pkt_in_pcie_port_s cn56xx; -} cvmx_npei_pkt_in_pcie_port_t; - - -/** - * cvmx_npei_pkt_input_control - * - * NPEI_PKT_INPUT_CONTROL = NPEI's Packet Input Control - * - * Control for reads for gather list and instructions. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_input_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t pkt_rr : 1; /**< When set '1' the input packet selection will be - made with a Round Robin arbitration. When '0' - the input packet ring is fixed in priority, - where the lower ring number has higher priority. */ - uint64_t pbp_dhi : 13; /**< Field when in [PBP] is set to be used in - calculating a DPTR. */ - uint64_t d_nsr : 1; /**< Enables '1' NoSnoop for reading of - gather data. */ - uint64_t d_esr : 2; /**< The Endian-Swap-Mode for reading of - gather data. */ - uint64_t d_ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather data. */ - uint64_t use_csr : 1; /**< When set '1' the csr value will be used for - ROR, ESR, and NSR. When clear '0' the value in - DPTR will be used. In turn the bits not used for - ROR, ESR, and NSR, will be used for bits [63:60] - of the address used to fetch packet data. */ - uint64_t nsr : 1; /**< Enables '1' NoSnoop for reading of - gather list and gather instruction. */ - uint64_t esr : 2; /**< The Endian-Swap-Mode for reading of - gather list and gather instruction. */ - uint64_t ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather list and gather instruction. */ -#else - uint64_t ror : 1; - uint64_t esr : 2; - uint64_t nsr : 1; - uint64_t use_csr : 1; - uint64_t d_ror : 1; - uint64_t d_esr : 2; - uint64_t d_nsr : 1; - uint64_t pbp_dhi : 13; - uint64_t pkt_rr : 1; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_npei_pkt_input_control_s cn52xx; - struct cvmx_npei_pkt_input_control_s cn56xx; -} cvmx_npei_pkt_input_control_t; - - -/** - * cvmx_npei_pkt_instr_enb - * - * NPEI_PKT_INSTR_ENB = NPEI's Packet Instruction Enable - * - * Enables the instruction fetch for a Packet-ring. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_instr_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t enb : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring is enabled. */ -#else - uint64_t enb : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_instr_enb_s cn52xx; - struct cvmx_npei_pkt_instr_enb_s cn56xx; -} cvmx_npei_pkt_instr_enb_t; - - -/** - * cvmx_npei_pkt_instr_rd_size - * - * NPEI_PKT_INSTR_RD_SIZE = NPEI Instruction Read Size - * - * The number of instruction allowed to be read at one time. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_instr_rd_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t rdsize : 64; /**< Number of instructions to be read in one PCIe read - request for the 4 PKOport - 8 rings. Every two bits - (i.e. 1:0, 3:2, 5:4..) are assign to the port/ring - combinations. - - 15:0 PKOPort0,Ring 7..0 31:16 PKOPort1,Ring 7..0 - - 47:32 PKOPort2,Ring 7..0 63:48 PKOPort3,Ring 7..0 - Two bit value are: - 0 - 1 Instruction - 1 - 2 Instructions - 2 - 3 Instructions - 3 - 4 Instructions */ -#else - uint64_t rdsize : 64; -#endif - } s; - struct cvmx_npei_pkt_instr_rd_size_s cn52xx; - struct cvmx_npei_pkt_instr_rd_size_s cn56xx; -} cvmx_npei_pkt_instr_rd_size_t; - - -/** - * cvmx_npei_pkt_instr_size - * - * NPEI_PKT_INSTR_SIZE = NPEI's Packet Instruction Size - * - * Determines if instructions are 64 or 32 byte in size for a Packet-ring. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_instr_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t is_64b : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring is a 64-byte instruction. */ -#else - uint64_t is_64b : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_instr_size_s cn52xx; - struct cvmx_npei_pkt_instr_size_s cn56xx; -} cvmx_npei_pkt_instr_size_t; - - -/** - * cvmx_npei_pkt_int_levels - * - * 0x90F0 reserved NPEI_PKT_PCIE_PORT2 - * - * - * NPEI_PKT_INT_LEVELS = NPEI's Packet Interrupt Levels - * - * Output packet interrupt levels. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_int_levels_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_54_63 : 10; - uint64_t time : 22; /**< When NPEI_PKT#_CNTS[TIME] is equal to this value - an interrupt is generated. */ - uint64_t cnt : 32; /**< When NPEI_PKT#_CNTS[CNT] becomes - greater than this value an interrupt is generated. */ -#else - uint64_t cnt : 32; - uint64_t time : 22; - uint64_t reserved_54_63 : 10; -#endif - } s; - struct cvmx_npei_pkt_int_levels_s cn52xx; - struct cvmx_npei_pkt_int_levels_s cn56xx; -} cvmx_npei_pkt_int_levels_t; - - -/** - * cvmx_npei_pkt_iptr - * - * NPEI_PKT_IPTR = NPEI's Packet Info Poitner - * - * Controls using the Info-Pointer to store length and data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_iptr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iptr : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will use the Info-Pointer to - store length and data. */ -#else - uint64_t iptr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_iptr_s cn52xx; - struct cvmx_npei_pkt_iptr_s cn56xx; -} cvmx_npei_pkt_iptr_t; - - -/** - * cvmx_npei_pkt_out_bmode - * - * NPEI_PKT_OUT_BMODE = NPEI's Packet Out Byte Mode - * - * Control the updating of the NPEI_PKT#_CNT register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_out_bmode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t bmode : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will have its NPEI_PKT#_CNT - register updated with the number of bytes in the - packet sent, when '0' the register will have a - value of '1' added. */ -#else - uint64_t bmode : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_out_bmode_s cn52xx; - struct cvmx_npei_pkt_out_bmode_s cn56xx; -} cvmx_npei_pkt_out_bmode_t; - - -/** - * cvmx_npei_pkt_out_enb - * - * NPEI_PKT_OUT_ENB = NPEI's Packet Output Enable - * - * Enables the output packet engines. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_out_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t enb : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring is enabled. - If an error occurs on reading pointers for an - output ring, the ring will be disabled by clearing - the bit associated with the ring to '0'. */ -#else - uint64_t enb : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_out_enb_s cn52xx; - struct cvmx_npei_pkt_out_enb_s cn56xx; -} cvmx_npei_pkt_out_enb_t; - - -/** - * cvmx_npei_pkt_output_wmark - * - * NPEI_PKT_OUTPUT_WMARK = NPEI's Packet Output Water Mark - * - * Value that when the NPEI_PKT#_SLIST_BAOFF_DBELL[DBELL] value is less then that backpressure for the rings will be applied. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_output_wmark_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wmark : 32; /**< Value when DBELL count drops below backpressure - for the ring will be applied to the PKO. */ -#else - uint64_t wmark : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_output_wmark_s cn52xx; - struct cvmx_npei_pkt_output_wmark_s cn56xx; -} cvmx_npei_pkt_output_wmark_t; - - -/** - * cvmx_npei_pkt_pcie_port - * - * NPEI_PKT_PCIE_PORT = NPEI's Packet To PCIe Port Assignment - * - * Assigns Packet Ports to PCIe ports. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_pcie_port_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pp : 64; /**< The PCIe port that the Packet ring number is - assigned. Two bits are used per ring (i.e. ring 0 - [1:0], ring 1 [3:2], ....). A value of '0 means - that the Packetring is assign to PCIe Port 0, a '1' - PCIe Port 1, '2' and '3' are reserved. */ -#else - uint64_t pp : 64; -#endif - } s; - struct cvmx_npei_pkt_pcie_port_s cn52xx; - struct cvmx_npei_pkt_pcie_port_s cn56xx; -} cvmx_npei_pkt_pcie_port_t; - - -/** - * cvmx_npei_pkt_port_in_rst - * - * NPEI_PKT_PORT_IN_RST = NPEI Packet Port In Reset - * - * Vector bits related to ring-port for ones that are reset. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_port_in_rst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t in_rst : 32; /**< When asserted '1' the vector bit cooresponding - to the inbound Packet-ring is in reset. */ - uint64_t out_rst : 32; /**< When asserted '1' the vector bit cooresponding - to the outbound Packet-ring is in reset. */ -#else - uint64_t out_rst : 32; - uint64_t in_rst : 32; -#endif - } s; - struct cvmx_npei_pkt_port_in_rst_s cn52xx; - struct cvmx_npei_pkt_port_in_rst_s cn56xx; -} cvmx_npei_pkt_port_in_rst_t; - - -/** - * cvmx_npei_pkt_slist_es - * - * NPEI_PKT_SLIST_ES = NPEI's Packet Scatter List Endian Swap - * - * The Endian Swap for Scatter List Read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_slist_es_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t es : 64; /**< The endian swap mode for Packet rings 0 through 31. - Two bits are used per ring (i.e. ring 0 [1:0], - ring 1 [3:2], ....). */ -#else - uint64_t es : 64; -#endif - } s; - struct cvmx_npei_pkt_slist_es_s cn52xx; - struct cvmx_npei_pkt_slist_es_s cn56xx; -} cvmx_npei_pkt_slist_es_t; - - -/** - * cvmx_npei_pkt_slist_id_size - * - * NPEI_PKT_SLIST_ID_SIZE = NPEI Packet Scatter List Info and Data Size - * - * The Size of the information and data fields pointed to by Scatter List pointers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_slist_id_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t isize : 7; /**< Information size. Legal sizes are 0 to 120. */ - uint64_t bsize : 16; /**< Data size. */ -#else - uint64_t bsize : 16; - uint64_t isize : 7; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_npei_pkt_slist_id_size_s cn52xx; - struct cvmx_npei_pkt_slist_id_size_s cn56xx; -} cvmx_npei_pkt_slist_id_size_t; - - -/** - * cvmx_npei_pkt_slist_ns - * - * NPEI_PKT_SLIST_NS = NPEI's Packet Scatter List No Snoop - * - * The NS field for the TLP when fetching Scatter List. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_slist_ns_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t nsr : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will enable NS in TLP header. */ -#else - uint64_t nsr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_slist_ns_s cn52xx; - struct cvmx_npei_pkt_slist_ns_s cn56xx; -} cvmx_npei_pkt_slist_ns_t; - - -/** - * cvmx_npei_pkt_slist_ror - * - * NPEI_PKT_SLIST_ROR = NPEI's Packet Scatter List Relaxed Ordering - * - * The ROR field for the TLP when fetching Scatter List. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_slist_ror_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ror : 32; /**< When asserted '1' the vector bit cooresponding - to the Packet-ring will enable ROR in TLP header. */ -#else - uint64_t ror : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_slist_ror_s cn52xx; - struct cvmx_npei_pkt_slist_ror_s cn56xx; -} cvmx_npei_pkt_slist_ror_t; - - -/** - * cvmx_npei_pkt_time_int - * - * NPEI_PKT_TIME_INT = NPEI Packet Timer Interrupt - * - * The packets rings that are interrupting because of Packet Timers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_time_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t port : 32; /**< Bit vector cooresponding to ring number is set when - NPEI_PKT#_CNTS[TIMER] is greater than - NPEI_PKT_INT_LEVELS[TIME]. */ -#else - uint64_t port : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_time_int_s cn52xx; - struct cvmx_npei_pkt_time_int_s cn56xx; -} cvmx_npei_pkt_time_int_t; - - -/** - * cvmx_npei_pkt_time_int_enb - * - * NPEI_PKT_TIME_INT_ENB = NPEI Packet Timer Interrupt Enable - * - * The packets rings that are interrupting because of Packet Timers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_pkt_time_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t port : 32; /**< Bit vector cooresponding to ring number when set - allows NPEI_PKT_TIME_INT to generate an interrupt. */ -#else - uint64_t port : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_pkt_time_int_enb_s cn52xx; - struct cvmx_npei_pkt_time_int_enb_s cn56xx; -} cvmx_npei_pkt_time_int_enb_t; - - -/** - * cvmx_npei_rsl_int_blocks - * - * NPEI_RSL_INT_BLOCKS = NPEI RSL Interrupt Blocks Register - * - * Reading this register will return a vector with a bit set '1' for a corresponding RSL block - * that presently has an interrupt pending. The Field Description below supplies the name of the - * register that software should read to find out why that intterupt bit is set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_rsl_int_blocks_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t iob : 1; /**< IOB_INT_SUM */ - uint64_t lmc1 : 1; /**< LMC1_MEM_CFG0 */ - uint64_t agl : 1; /**< AGL_GMX_RX0_INT_REG & AGL_GMX_TX_INT_REG */ - uint64_t reserved_24_27 : 4; - uint64_t asxpcs1 : 1; /**< PCS1_INT*_REG */ - uint64_t asxpcs0 : 1; /**< PCS0_INT*_REG */ - uint64_t reserved_21_21 : 1; - uint64_t pip : 1; /**< PIP_INT_REG. */ - uint64_t spx1 : 1; /**< Always reads as zero */ - uint64_t spx0 : 1; /**< Always reads as zero */ - uint64_t lmc0 : 1; /**< LMC0_MEM_CFG0 */ - uint64_t l2c : 1; /**< L2C_INT_STAT */ - uint64_t usb1 : 1; /**< Always reads as zero */ - uint64_t rad : 1; /**< RAD_REG_ERROR */ - uint64_t usb : 1; /**< USBN0_INT_SUM */ - uint64_t pow : 1; /**< POW_ECC_ERR */ - uint64_t tim : 1; /**< TIM_REG_ERROR */ - uint64_t pko : 1; /**< PKO_REG_ERROR */ - uint64_t ipd : 1; /**< IPD_INT_SUM */ - uint64_t reserved_8_8 : 1; - uint64_t zip : 1; /**< ZIP_ERROR */ - uint64_t dfa : 1; /**< Always reads as zero */ - uint64_t fpa : 1; /**< FPA_INT_SUM */ - uint64_t key : 1; /**< KEY_INT_SUM */ - uint64_t npei : 1; /**< NPEI_INT_SUM */ - uint64_t gmx1 : 1; /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */ - uint64_t gmx0 : 1; /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */ - uint64_t mio : 1; /**< MIO_BOOT_ERR */ -#else - uint64_t mio : 1; - uint64_t gmx0 : 1; - uint64_t gmx1 : 1; - uint64_t npei : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t reserved_8_8 : 1; - uint64_t ipd : 1; - uint64_t pko : 1; - uint64_t tim : 1; - uint64_t pow : 1; - uint64_t usb : 1; - uint64_t rad : 1; - uint64_t usb1 : 1; - uint64_t l2c : 1; - uint64_t lmc0 : 1; - uint64_t spx0 : 1; - uint64_t spx1 : 1; - uint64_t pip : 1; - uint64_t reserved_21_21 : 1; - uint64_t asxpcs0 : 1; - uint64_t asxpcs1 : 1; - uint64_t reserved_24_27 : 4; - uint64_t agl : 1; - uint64_t lmc1 : 1; - uint64_t iob : 1; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_npei_rsl_int_blocks_s cn52xx; - struct cvmx_npei_rsl_int_blocks_s cn52xxp1; - struct cvmx_npei_rsl_int_blocks_s cn56xx; - struct cvmx_npei_rsl_int_blocks_s cn56xxp1; -} cvmx_npei_rsl_int_blocks_t; - - -/** - * cvmx_npei_scratch_1 - * - * NPEI_SCRATCH_1 = NPEI's Scratch 1 - * - * A general purpose 64 bit register for SW use. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_scratch_1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< The value in this register is totaly SW dependent. */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_npei_scratch_1_s cn52xx; - struct cvmx_npei_scratch_1_s cn52xxp1; - struct cvmx_npei_scratch_1_s cn56xx; - struct cvmx_npei_scratch_1_s cn56xxp1; -} cvmx_npei_scratch_1_t; - - -/** - * cvmx_npei_state1 - * - * NPEI_STATE1 = NPEI State 1 - * - * State machines in NPEI. For debug. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_state1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cpl1 : 12; /**< CPL1 State */ - uint64_t cpl0 : 12; /**< CPL0 State */ - uint64_t arb : 1; /**< ARB State */ - uint64_t csr : 39; /**< CSR State */ -#else - uint64_t csr : 39; - uint64_t arb : 1; - uint64_t cpl0 : 12; - uint64_t cpl1 : 12; -#endif - } s; - struct cvmx_npei_state1_s cn52xx; - struct cvmx_npei_state1_s cn52xxp1; - struct cvmx_npei_state1_s cn56xx; - struct cvmx_npei_state1_s cn56xxp1; -} cvmx_npei_state1_t; - - -/** - * cvmx_npei_state2 - * - * NPEI_STATE2 = NPEI State 2 - * - * State machines in NPEI. For debug. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_state2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t npei : 1; /**< NPEI State */ - uint64_t rac : 1; /**< RAC State */ - uint64_t csm1 : 15; /**< CSM1 State */ - uint64_t csm0 : 15; /**< CSM0 State */ - uint64_t nnp0 : 8; /**< NNP0 State */ - uint64_t nnd : 8; /**< NND State */ -#else - uint64_t nnd : 8; - uint64_t nnp0 : 8; - uint64_t csm0 : 15; - uint64_t csm1 : 15; - uint64_t rac : 1; - uint64_t npei : 1; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_npei_state2_s cn52xx; - struct cvmx_npei_state2_s cn52xxp1; - struct cvmx_npei_state2_s cn56xx; - struct cvmx_npei_state2_s cn56xxp1; -} cvmx_npei_state2_t; - - -/** - * cvmx_npei_state3 - * - * NPEI_STATE3 = NPEI State 3 - * - * State machines in NPEI. For debug. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_state3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t psm1 : 15; /**< PSM1 State */ - uint64_t psm0 : 15; /**< PSM0 State */ - uint64_t nsm1 : 13; /**< NSM1 State */ - uint64_t nsm0 : 13; /**< NSM0 State */ -#else - uint64_t nsm0 : 13; - uint64_t nsm1 : 13; - uint64_t psm0 : 15; - uint64_t psm1 : 15; - uint64_t reserved_56_63 : 8; -#endif - } s; - struct cvmx_npei_state3_s cn52xx; - struct cvmx_npei_state3_s cn52xxp1; - struct cvmx_npei_state3_s cn56xx; - struct cvmx_npei_state3_s cn56xxp1; -} cvmx_npei_state3_t; - - -/** - * cvmx_npei_win_rd_addr - * - * NPEI_WIN_RD_ADDR = NPEI Window Read Address Register - * - * The address to be read when the NPEI_WIN_RD_DATA register is read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_win_rd_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_51_63 : 13; - uint64_t ld_cmd : 2; /**< The load command sent wit hthe read. - 0x0 == Load 8-bytes, 0x1 == Load 4-bytes, - 0x2 == Load 2-bytes, 0x3 == Load 1-bytes, */ - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t rd_addr : 48; /**< The address to be read from. Whenever the LSB of - this register is written, the Read Operation will - take place. - [47:40] = NCB_ID - [39:0] = Address - When [47:43] == NPI & [42:0] == 0 bits [39:0] are: - [39:32] == x, Not Used - [31:27] == RSL_ID - [12:0] == RSL Register Offset */ -#else - uint64_t rd_addr : 48; - uint64_t iobit : 1; - uint64_t ld_cmd : 2; - uint64_t reserved_51_63 : 13; -#endif - } s; - struct cvmx_npei_win_rd_addr_s cn52xx; - struct cvmx_npei_win_rd_addr_s cn52xxp1; - struct cvmx_npei_win_rd_addr_s cn56xx; - struct cvmx_npei_win_rd_addr_s cn56xxp1; -} cvmx_npei_win_rd_addr_t; - - -/** - * cvmx_npei_win_rd_data - * - * NPEI_WIN_RD_DATA = NPEI Window Read Data Register - * - * Reading this register causes a window read operation to take place. Address read is taht contained in the NPEI_WIN_RD_ADDR - * register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_win_rd_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t rd_data : 64; /**< The read data. */ -#else - uint64_t rd_data : 64; -#endif - } s; - struct cvmx_npei_win_rd_data_s cn52xx; - struct cvmx_npei_win_rd_data_s cn52xxp1; - struct cvmx_npei_win_rd_data_s cn56xx; - struct cvmx_npei_win_rd_data_s cn56xxp1; -} cvmx_npei_win_rd_data_t; - - -/** - * cvmx_npei_win_wr_addr - * - * NPEI_WIN_WR_ADDR = NPEI Window Write Address Register - * - * Contains the address to be writen to when a write operation is started by writing the - * NPEI_WIN_WR_DATA register (see below). - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_win_wr_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t wr_addr : 46; /**< The address that will be written to when the - NPEI_WIN_WR_DATA register is written. - [47:40] = NCB_ID - [39:3] = Address - When [47:43] == NPI & [42:0] == 0 bits [39:0] are: - [39:32] == x, Not Used - [31:27] == RSL_ID - [12:2] == RSL Register Offset - [1:0] == x, Not Used */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t wr_addr : 46; - uint64_t iobit : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_npei_win_wr_addr_s cn52xx; - struct cvmx_npei_win_wr_addr_s cn52xxp1; - struct cvmx_npei_win_wr_addr_s cn56xx; - struct cvmx_npei_win_wr_addr_s cn56xxp1; -} cvmx_npei_win_wr_addr_t; - - -/** - * cvmx_npei_win_wr_data - * - * NPEI_WIN_WR_DATA = NPEI Window Write Data Register - * - * Contains the data to write to the address located in the NPEI_WIN_WR_ADDR Register. - * Writing the least-significant-byte of this register will cause a write operation to take place. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_win_wr_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t wr_data : 64; /**< The data to be written. Whenever the LSB of this - register is written, the Window Write will take - place. */ -#else - uint64_t wr_data : 64; -#endif - } s; - struct cvmx_npei_win_wr_data_s cn52xx; - struct cvmx_npei_win_wr_data_s cn52xxp1; - struct cvmx_npei_win_wr_data_s cn56xx; - struct cvmx_npei_win_wr_data_s cn56xxp1; -} cvmx_npei_win_wr_data_t; - - -/** - * cvmx_npei_win_wr_mask - * - * NPEI_WIN_WR_MASK = NPEI Window Write Mask Register - * - * Contains the mask for the data in the NPEI_WIN_WR_DATA Register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_win_wr_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t wr_mask : 8; /**< The data to be written. When a bit is '0' - the corresponding byte will be written. */ -#else - uint64_t wr_mask : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_npei_win_wr_mask_s cn52xx; - struct cvmx_npei_win_wr_mask_s cn52xxp1; - struct cvmx_npei_win_wr_mask_s cn56xx; - struct cvmx_npei_win_wr_mask_s cn56xxp1; -} cvmx_npei_win_wr_mask_t; - - -/** - * cvmx_npei_window_ctl - * - * NPEI_WINDOW_CTL = NPEI's Window Control - * - * The name of this register is misleading. The timeout value is used for BAR0 access from PCIE0 and PCIE1. - * Any access to the regigisters on the RML will timeout as 0xFFFF clock cycle. At time of timeout the next - * RML access will start, and interrupt will be set, and in the case of reads no data will be returned. - * - * The value of this register should be set to a minimum of 0x200000 to ensure that a timeout to an RML register - * occurs on the RML 0xFFFF timer before the timeout for a BAR0 access from the PCIE#. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npei_window_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t time : 32; /**< Time to wait in core clocks to wait for a - BAR0 access to completeon the NCB - before timing out. A value of 0 will cause no - timeouts. A minimum value of 0x200000 should be - used when this register is not set to 0x0. */ -#else - uint64_t time : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npei_window_ctl_s cn52xx; - struct cvmx_npei_window_ctl_s cn52xxp1; - struct cvmx_npei_window_ctl_s cn56xx; - struct cvmx_npei_window_ctl_s cn56xxp1; -} cvmx_npei_window_ctl_t; - - -/** - * cvmx_npi_base_addr_input# - * - * NPI_BASE_ADDR_INPUT0 = NPI's Base Address Input 0 Register - * - * The address to start reading Instructions from for Input-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_base_addr_inputx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t baddr : 61; /**< The address to read Instruction from for output 0. - This address is 8-byte aligned, for this reason - address bits [2:0] will always be zero. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t baddr : 61; -#endif - } s; - struct cvmx_npi_base_addr_inputx_s cn30xx; - struct cvmx_npi_base_addr_inputx_s cn31xx; - struct cvmx_npi_base_addr_inputx_s cn38xx; - struct cvmx_npi_base_addr_inputx_s cn38xxp2; - struct cvmx_npi_base_addr_inputx_s cn50xx; - struct cvmx_npi_base_addr_inputx_s cn58xx; - struct cvmx_npi_base_addr_inputx_s cn58xxp1; -} cvmx_npi_base_addr_inputx_t; - - -/** - * cvmx_npi_base_addr_output# - * - * NPI_BASE_ADDR_OUTPUT0 = NPI's Base Address Output 0 Register - * - * The address to start reading Instructions from for Output-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_base_addr_outputx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t baddr : 61; /**< The address to read Instruction from for output 0. - This address is 8-byte aligned, for this reason - address bits [2:0] will always be zero. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t baddr : 61; -#endif - } s; - struct cvmx_npi_base_addr_outputx_s cn30xx; - struct cvmx_npi_base_addr_outputx_s cn31xx; - struct cvmx_npi_base_addr_outputx_s cn38xx; - struct cvmx_npi_base_addr_outputx_s cn38xxp2; - struct cvmx_npi_base_addr_outputx_s cn50xx; - struct cvmx_npi_base_addr_outputx_s cn58xx; - struct cvmx_npi_base_addr_outputx_s cn58xxp1; -} cvmx_npi_base_addr_outputx_t; - - -/** - * cvmx_npi_bist_status - * - * NPI_BIST_STATUS = NPI's BIST Status Register - * - * Results from BIST runs of NPI's memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t csr_bs : 1; /**< BIST Status for the csr_fifo */ - uint64_t dif_bs : 1; /**< BIST Status for the dif_fifo */ - uint64_t rdp_bs : 1; /**< BIST Status for the rdp_fifo */ - uint64_t pcnc_bs : 1; /**< BIST Status for the pcn_cnt_fifo */ - uint64_t pcn_bs : 1; /**< BIST Status for the pcn_fifo */ - uint64_t rdn_bs : 1; /**< BIST Status for the rdn_fifo */ - uint64_t pcac_bs : 1; /**< BIST Status for the pca_cmd_fifo */ - uint64_t pcad_bs : 1; /**< BIST Status for the pca_data_fifo */ - uint64_t rdnl_bs : 1; /**< BIST Status for the rdn_length_fifo */ - uint64_t pgf_bs : 1; /**< BIST Status for the pgf_fifo */ - uint64_t pig_bs : 1; /**< BIST Status for the pig_fifo */ - uint64_t pof0_bs : 1; /**< BIST Status for the pof0_fifo */ - uint64_t pof1_bs : 1; /**< BIST Status for the pof1_fifo */ - uint64_t pof2_bs : 1; /**< BIST Status for the pof2_fifo */ - uint64_t pof3_bs : 1; /**< BIST Status for the pof3_fifo */ - uint64_t pos_bs : 1; /**< BIST Status for the pos_fifo */ - uint64_t nus_bs : 1; /**< BIST Status for the nus_fifo */ - uint64_t dob_bs : 1; /**< BIST Status for the dob_fifo */ - uint64_t pdf_bs : 1; /**< BIST Status for the pdf_fifo */ - uint64_t dpi_bs : 1; /**< BIST Status for the dpi_fifo */ -#else - uint64_t dpi_bs : 1; - uint64_t pdf_bs : 1; - uint64_t dob_bs : 1; - uint64_t nus_bs : 1; - uint64_t pos_bs : 1; - uint64_t pof3_bs : 1; - uint64_t pof2_bs : 1; - uint64_t pof1_bs : 1; - uint64_t pof0_bs : 1; - uint64_t pig_bs : 1; - uint64_t pgf_bs : 1; - uint64_t rdnl_bs : 1; - uint64_t pcad_bs : 1; - uint64_t pcac_bs : 1; - uint64_t rdn_bs : 1; - uint64_t pcn_bs : 1; - uint64_t pcnc_bs : 1; - uint64_t rdp_bs : 1; - uint64_t dif_bs : 1; - uint64_t csr_bs : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_npi_bist_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t csr_bs : 1; /**< BIST Status for the csr_fifo */ - uint64_t dif_bs : 1; /**< BIST Status for the dif_fifo */ - uint64_t rdp_bs : 1; /**< BIST Status for the rdp_fifo */ - uint64_t pcnc_bs : 1; /**< BIST Status for the pcn_cnt_fifo */ - uint64_t pcn_bs : 1; /**< BIST Status for the pcn_fifo */ - uint64_t rdn_bs : 1; /**< BIST Status for the rdn_fifo */ - uint64_t pcac_bs : 1; /**< BIST Status for the pca_cmd_fifo */ - uint64_t pcad_bs : 1; /**< BIST Status for the pca_data_fifo */ - uint64_t rdnl_bs : 1; /**< BIST Status for the rdn_length_fifo */ - uint64_t pgf_bs : 1; /**< BIST Status for the pgf_fifo */ - uint64_t pig_bs : 1; /**< BIST Status for the pig_fifo */ - uint64_t pof0_bs : 1; /**< BIST Status for the pof0_fifo */ - uint64_t reserved_5_7 : 3; - uint64_t pos_bs : 1; /**< BIST Status for the pos_fifo */ - uint64_t nus_bs : 1; /**< BIST Status for the nus_fifo */ - uint64_t dob_bs : 1; /**< BIST Status for the dob_fifo */ - uint64_t pdf_bs : 1; /**< BIST Status for the pdf_fifo */ - uint64_t dpi_bs : 1; /**< BIST Status for the dpi_fifo */ -#else - uint64_t dpi_bs : 1; - uint64_t pdf_bs : 1; - uint64_t dob_bs : 1; - uint64_t nus_bs : 1; - uint64_t pos_bs : 1; - uint64_t reserved_5_7 : 3; - uint64_t pof0_bs : 1; - uint64_t pig_bs : 1; - uint64_t pgf_bs : 1; - uint64_t rdnl_bs : 1; - uint64_t pcad_bs : 1; - uint64_t pcac_bs : 1; - uint64_t rdn_bs : 1; - uint64_t pcn_bs : 1; - uint64_t pcnc_bs : 1; - uint64_t rdp_bs : 1; - uint64_t dif_bs : 1; - uint64_t csr_bs : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn30xx; - struct cvmx_npi_bist_status_s cn31xx; - struct cvmx_npi_bist_status_s cn38xx; - struct cvmx_npi_bist_status_s cn38xxp2; - struct cvmx_npi_bist_status_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t csr_bs : 1; /**< BIST Status for the csr_fifo */ - uint64_t dif_bs : 1; /**< BIST Status for the dif_fifo */ - uint64_t rdp_bs : 1; /**< BIST Status for the rdp_fifo */ - uint64_t pcnc_bs : 1; /**< BIST Status for the pcn_cnt_fifo */ - uint64_t pcn_bs : 1; /**< BIST Status for the pcn_fifo */ - uint64_t rdn_bs : 1; /**< BIST Status for the rdn_fifo */ - uint64_t pcac_bs : 1; /**< BIST Status for the pca_cmd_fifo */ - uint64_t pcad_bs : 1; /**< BIST Status for the pca_data_fifo */ - uint64_t rdnl_bs : 1; /**< BIST Status for the rdn_length_fifo */ - uint64_t pgf_bs : 1; /**< BIST Status for the pgf_fifo */ - uint64_t pig_bs : 1; /**< BIST Status for the pig_fifo */ - uint64_t pof0_bs : 1; /**< BIST Status for the pof0_fifo */ - uint64_t pof1_bs : 1; /**< BIST Status for the pof1_fifo */ - uint64_t reserved_5_6 : 2; - uint64_t pos_bs : 1; /**< BIST Status for the pos_fifo */ - uint64_t nus_bs : 1; /**< BIST Status for the nus_fifo */ - uint64_t dob_bs : 1; /**< BIST Status for the dob_fifo */ - uint64_t pdf_bs : 1; /**< BIST Status for the pdf_fifo */ - uint64_t dpi_bs : 1; /**< BIST Status for the dpi_fifo */ -#else - uint64_t dpi_bs : 1; - uint64_t pdf_bs : 1; - uint64_t dob_bs : 1; - uint64_t nus_bs : 1; - uint64_t pos_bs : 1; - uint64_t reserved_5_6 : 2; - uint64_t pof1_bs : 1; - uint64_t pof0_bs : 1; - uint64_t pig_bs : 1; - uint64_t pgf_bs : 1; - uint64_t rdnl_bs : 1; - uint64_t pcad_bs : 1; - uint64_t pcac_bs : 1; - uint64_t rdn_bs : 1; - uint64_t pcn_bs : 1; - uint64_t pcnc_bs : 1; - uint64_t rdp_bs : 1; - uint64_t dif_bs : 1; - uint64_t csr_bs : 1; - uint64_t reserved_20_63 : 44; -#endif - } cn50xx; - struct cvmx_npi_bist_status_s cn58xx; - struct cvmx_npi_bist_status_s cn58xxp1; -} cvmx_npi_bist_status_t; - - -/** - * cvmx_npi_buff_size_output# - * - * NPI_BUFF_SIZE_OUTPUT0 = NPI's D/I Buffer Sizes For Output 0 - * - * The size in bytes of the Data Bufffer and Information Buffer for output 0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_buff_size_outputx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t isize : 7; /**< The number of bytes to move to the Info-Pointer - from the front of the packet. - Legal values are 0-120. */ - uint64_t bsize : 16; /**< The size in bytes of the area pointed to by - buffer pointer for output packet data. */ -#else - uint64_t bsize : 16; - uint64_t isize : 7; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_npi_buff_size_outputx_s cn30xx; - struct cvmx_npi_buff_size_outputx_s cn31xx; - struct cvmx_npi_buff_size_outputx_s cn38xx; - struct cvmx_npi_buff_size_outputx_s cn38xxp2; - struct cvmx_npi_buff_size_outputx_s cn50xx; - struct cvmx_npi_buff_size_outputx_s cn58xx; - struct cvmx_npi_buff_size_outputx_s cn58xxp1; -} cvmx_npi_buff_size_outputx_t; - - -/** - * cvmx_npi_comp_ctl - * - * NPI_COMP_CTL = PCI Compensation Control - * - * PCI Compensation Control - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_comp_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t pctl : 5; /**< Bypass value for PCTL */ - uint64_t nctl : 5; /**< Bypass value for NCTL */ -#else - uint64_t nctl : 5; - uint64_t pctl : 5; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_npi_comp_ctl_s cn50xx; - struct cvmx_npi_comp_ctl_s cn58xx; - struct cvmx_npi_comp_ctl_s cn58xxp1; -} cvmx_npi_comp_ctl_t; - - -/** - * cvmx_npi_ctl_status - * - * NPI_CTL_STATUS = NPI's Control Status Register - * - * Contains control ans status for NPI. - * Writes to this register are not ordered with writes/reads to the PCI Memory space. - * To ensure that a write has completed the user must read the register before - * making an access(i.e. PCI memory space) that requires the value of this register to be updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_63_63 : 1; - uint64_t chip_rev : 8; /**< The revision of the N3. */ - uint64_t dis_pniw : 1; /**< When asserted '1' access from the PNI Window - Registers are disabled. */ - uint64_t out3_enb : 1; /**< When asserted '1' the output3 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t out2_enb : 1; /**< When asserted '1' the output2 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t out1_enb : 1; /**< When asserted '1' the output1 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t out0_enb : 1; /**< When asserted '1' the output0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins3_enb : 1; /**< When asserted '1' the gather3 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins2_enb : 1; /**< When asserted '1' the gather2 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins1_enb : 1; /**< When asserted '1' the gather1 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins0_enb : 1; /**< When asserted '1' the gather0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins3_64b : 1; /**< When asserted '1' the instructions read by the - gather3 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t ins2_64b : 1; /**< When asserted '1' the instructions read by the - gather2 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t ins1_64b : 1; /**< When asserted '1' the instructions read by the - gather1 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t ins0_64b : 1; /**< When asserted '1' the instructions read by the - gather0 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t pci_wdis : 1; /**< When set '1' disables access to registers in - PNI address range 0x1000 - 0x17FF from the PCI. */ - uint64_t wait_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional access to - the L2C from the PCI. */ - uint64_t reserved_37_39 : 3; - uint64_t max_word : 5; /**< The maximum number of words to merge into a single - write operation from the PPs to the PCI. Legal - values are 1 to 32, where a '0' is treated as 32. */ - uint64_t reserved_10_31 : 22; - uint64_t timer : 10; /**< When the NPI starts a PP to PCI write it will wait - no longer than the value of TIMER in eclks to - merge additional writes from the PPs into 1 - large write. The values for this field is 1 to - 1024 where a value of '0' is treated as 1024. */ -#else - uint64_t timer : 10; - uint64_t reserved_10_31 : 22; - uint64_t max_word : 5; - uint64_t reserved_37_39 : 3; - uint64_t wait_com : 1; - uint64_t pci_wdis : 1; - uint64_t ins0_64b : 1; - uint64_t ins1_64b : 1; - uint64_t ins2_64b : 1; - uint64_t ins3_64b : 1; - uint64_t ins0_enb : 1; - uint64_t ins1_enb : 1; - uint64_t ins2_enb : 1; - uint64_t ins3_enb : 1; - uint64_t out0_enb : 1; - uint64_t out1_enb : 1; - uint64_t out2_enb : 1; - uint64_t out3_enb : 1; - uint64_t dis_pniw : 1; - uint64_t chip_rev : 8; - uint64_t reserved_63_63 : 1; -#endif - } s; - struct cvmx_npi_ctl_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_63_63 : 1; - uint64_t chip_rev : 8; /**< The revision of the N3. */ - uint64_t dis_pniw : 1; /**< When asserted '1' access from the PNI Window - Registers are disabled. */ - uint64_t reserved_51_53 : 3; - uint64_t out0_enb : 1; /**< When asserted '1' the output0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t reserved_47_49 : 3; - uint64_t ins0_enb : 1; /**< When asserted '1' the gather0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t reserved_43_45 : 3; - uint64_t ins0_64b : 1; /**< When asserted '1' the instructions read by the - gather0 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t pci_wdis : 1; /**< When set '1' disables access to registers in - PNI address range 0x1000 - 0x17FF from the PCI. */ - uint64_t wait_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional access to - the L2C from the PCI. */ - uint64_t reserved_37_39 : 3; - uint64_t max_word : 5; /**< The maximum number of words to merge into a single - write operation from the PPs to the PCI. Legal - values are 1 to 32, where a '0' is treated as 32. */ - uint64_t reserved_10_31 : 22; - uint64_t timer : 10; /**< When the NPI starts a PP to PCI write it will wait - no longer than the value of TIMER in eclks to - merge additional writes from the PPs into 1 - large write. The values for this field is 1 to - 1024 where a value of '0' is treated as 1024. */ -#else - uint64_t timer : 10; - uint64_t reserved_10_31 : 22; - uint64_t max_word : 5; - uint64_t reserved_37_39 : 3; - uint64_t wait_com : 1; - uint64_t pci_wdis : 1; - uint64_t ins0_64b : 1; - uint64_t reserved_43_45 : 3; - uint64_t ins0_enb : 1; - uint64_t reserved_47_49 : 3; - uint64_t out0_enb : 1; - uint64_t reserved_51_53 : 3; - uint64_t dis_pniw : 1; - uint64_t chip_rev : 8; - uint64_t reserved_63_63 : 1; -#endif - } cn30xx; - struct cvmx_npi_ctl_status_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_63_63 : 1; - uint64_t chip_rev : 8; /**< The revision of the N3. - 0 => pass1.x, 1 => 2.0 */ - uint64_t dis_pniw : 1; /**< When asserted '1' access from the PNI Window - Registers are disabled. */ - uint64_t reserved_52_53 : 2; - uint64_t out1_enb : 1; /**< When asserted '1' the output1 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t out0_enb : 1; /**< When asserted '1' the output0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t reserved_48_49 : 2; - uint64_t ins1_enb : 1; /**< When asserted '1' the gather1 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t ins0_enb : 1; /**< When asserted '1' the gather0 engine is enabled. - After enabling the values of the associated - Address and Size Register should not be changed. */ - uint64_t reserved_44_45 : 2; - uint64_t ins1_64b : 1; /**< When asserted '1' the instructions read by the - gather1 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t ins0_64b : 1; /**< When asserted '1' the instructions read by the - gather0 engine are 64-Byte instructions, when - de-asserted '0' instructions are 32-byte. */ - uint64_t pci_wdis : 1; /**< When set '1' disables access to registers in - PNI address range 0x1000 - 0x17FF from the PCI. */ - uint64_t wait_com : 1; /**< When set '1' casues the NPI to wait for a commit - from the L2C before sending additional access to - the L2C from the PCI. */ - uint64_t reserved_37_39 : 3; - uint64_t max_word : 5; /**< The maximum number of words to merge into a single - write operation from the PPs to the PCI. Legal - values are 1 to 32, where a '0' is treated as 32. */ - uint64_t reserved_10_31 : 22; - uint64_t timer : 10; /**< When the NPI starts a PP to PCI write it will wait - no longer than the value of TIMER in eclks to - merge additional writes from the PPs into 1 - large write. The values for this field is 1 to - 1024 where a value of '0' is treated as 1024. */ -#else - uint64_t timer : 10; - uint64_t reserved_10_31 : 22; - uint64_t max_word : 5; - uint64_t reserved_37_39 : 3; - uint64_t wait_com : 1; - uint64_t pci_wdis : 1; - uint64_t ins0_64b : 1; - uint64_t ins1_64b : 1; - uint64_t reserved_44_45 : 2; - uint64_t ins0_enb : 1; - uint64_t ins1_enb : 1; - uint64_t reserved_48_49 : 2; - uint64_t out0_enb : 1; - uint64_t out1_enb : 1; - uint64_t reserved_52_53 : 2; - uint64_t dis_pniw : 1; - uint64_t chip_rev : 8; - uint64_t reserved_63_63 : 1; -#endif - } cn31xx; - struct cvmx_npi_ctl_status_s cn38xx; - struct cvmx_npi_ctl_status_s cn38xxp2; - struct cvmx_npi_ctl_status_cn31xx cn50xx; - struct cvmx_npi_ctl_status_s cn58xx; - struct cvmx_npi_ctl_status_s cn58xxp1; -} cvmx_npi_ctl_status_t; - - -/** - * cvmx_npi_dbg_select - * - * NPI_DBG_SELECT = Debug Select Register - * - * Contains the debug select value in last written to the RSLs. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dbg_select_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dbg_sel : 16; /**< When this register is written its value is sent to - all RSLs. */ -#else - uint64_t dbg_sel : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npi_dbg_select_s cn30xx; - struct cvmx_npi_dbg_select_s cn31xx; - struct cvmx_npi_dbg_select_s cn38xx; - struct cvmx_npi_dbg_select_s cn38xxp2; - struct cvmx_npi_dbg_select_s cn50xx; - struct cvmx_npi_dbg_select_s cn58xx; - struct cvmx_npi_dbg_select_s cn58xxp1; -} cvmx_npi_dbg_select_t; - - -/** - * cvmx_npi_dma_control - * - * NPI_DMA_CONTROL = DMA Control Register - * - * Controls operation of the DMA IN/OUT of the NPI. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dma_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t b0_lend : 1; /**< When set '1' and the NPI is in the mode to write - 0 to L2C memory when a DMA is done, the address - to be written to will be treated as a Little - Endian address. This field is new to PASS-2. */ - uint64_t dwb_denb : 1; /**< When set '1' the NPI will send a value in the DWB - field for a free page operation for the memory - that contained the data in N3. */ - uint64_t dwb_ichk : 9; /**< When Instruction Chunks for DMA operations are freed - this value is used for the DWB field of the - operation. */ - uint64_t fpa_que : 3; /**< The FPA queue that the instruction-chunk page will - be returned to when used. */ - uint64_t o_add1 : 1; /**< When set '1' 1 will be added to the DMA counters, - if '0' then the number of bytes in the dma transfer - will be added to the count register. */ - uint64_t o_ro : 1; /**< Relaxed Ordering Mode for DMA. */ - uint64_t o_ns : 1; /**< Nosnoop For DMA. */ - uint64_t o_es : 2; /**< Endian Swap Mode for DMA. */ - uint64_t o_mode : 1; /**< Select PCI_POINTER MODE to be used. - '1' use pointer values for address and register - values for RO, ES, and NS, '0' use register - values for address and pointer values for - RO, ES, and NS. */ - uint64_t hp_enb : 1; /**< Enables the High Priority DMA. - While this bit is disabled '0' then the value - in the NPI_HIGHP_IBUFF_SADDR is re-loaded to the - starting address of the High Priority DMA engine. - CSIZE field will be reloaded, for the High Priority - DMA Engine. */ - uint64_t lp_enb : 1; /**< Enables the Low Priority DMA. - While this bit is disabled '0' then the value - in the NPI_LOWP_IBUFF_SADDR is re-loaded to the - starting address of the Low Priority DMA engine. - PASS-2: When this bit is '0' the value in the - CSIZE field will be reloaded, for the Low Priority - DMA Engine. */ - uint64_t csize : 14; /**< The size in words of the DMA Instruction Chunk. - This value should only be written once. After - writing this value a new value will not be - recognized until the end of the DMA I-Chunk is - reached. */ -#else - uint64_t csize : 14; - uint64_t lp_enb : 1; - uint64_t hp_enb : 1; - uint64_t o_mode : 1; - uint64_t o_es : 2; - uint64_t o_ns : 1; - uint64_t o_ro : 1; - uint64_t o_add1 : 1; - uint64_t fpa_que : 3; - uint64_t dwb_ichk : 9; - uint64_t dwb_denb : 1; - uint64_t b0_lend : 1; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_npi_dma_control_s cn30xx; - struct cvmx_npi_dma_control_s cn31xx; - struct cvmx_npi_dma_control_s cn38xx; - struct cvmx_npi_dma_control_s cn38xxp2; - struct cvmx_npi_dma_control_s cn50xx; - struct cvmx_npi_dma_control_s cn58xx; - struct cvmx_npi_dma_control_s cn58xxp1; -} cvmx_npi_dma_control_t; - - -/** - * cvmx_npi_dma_highp_counts - * - * NPI_DMA_HIGHP_COUNTS = NPI's High Priority DMA Counts - * - * Values for determing the number of instructions for High Priority DMA in the NPI. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dma_highp_counts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t fcnt : 7; /**< Number of words in the Instruction FIFO. */ - uint64_t dbell : 32; /**< Number of available words of Instructions to read. */ -#else - uint64_t dbell : 32; - uint64_t fcnt : 7; - uint64_t reserved_39_63 : 25; -#endif - } s; - struct cvmx_npi_dma_highp_counts_s cn30xx; - struct cvmx_npi_dma_highp_counts_s cn31xx; - struct cvmx_npi_dma_highp_counts_s cn38xx; - struct cvmx_npi_dma_highp_counts_s cn38xxp2; - struct cvmx_npi_dma_highp_counts_s cn50xx; - struct cvmx_npi_dma_highp_counts_s cn58xx; - struct cvmx_npi_dma_highp_counts_s cn58xxp1; -} cvmx_npi_dma_highp_counts_t; - - -/** - * cvmx_npi_dma_highp_naddr - * - * NPI_DMA_HIGHP_NADDR = NPI's High Priority DMA Next Ichunk Address - * - * Place NPI will read the next Ichunk data from. This is valid when state is 0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dma_highp_naddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t state : 4; /**< The DMA instruction engine state vector. - Typical value is 0 (IDLE). */ - uint64_t addr : 36; /**< The next L2C address to read DMA instructions - from for the High Priority DMA engine. */ -#else - uint64_t addr : 36; - uint64_t state : 4; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_npi_dma_highp_naddr_s cn30xx; - struct cvmx_npi_dma_highp_naddr_s cn31xx; - struct cvmx_npi_dma_highp_naddr_s cn38xx; - struct cvmx_npi_dma_highp_naddr_s cn38xxp2; - struct cvmx_npi_dma_highp_naddr_s cn50xx; - struct cvmx_npi_dma_highp_naddr_s cn58xx; - struct cvmx_npi_dma_highp_naddr_s cn58xxp1; -} cvmx_npi_dma_highp_naddr_t; - - -/** - * cvmx_npi_dma_lowp_counts - * - * NPI_DMA_LOWP_COUNTS = NPI's Low Priority DMA Counts - * - * Values for determing the number of instructions for Low Priority DMA in the NPI. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dma_lowp_counts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_39_63 : 25; - uint64_t fcnt : 7; /**< Number of words in the Instruction FIFO. */ - uint64_t dbell : 32; /**< Number of available words of Instructions to read. */ -#else - uint64_t dbell : 32; - uint64_t fcnt : 7; - uint64_t reserved_39_63 : 25; -#endif - } s; - struct cvmx_npi_dma_lowp_counts_s cn30xx; - struct cvmx_npi_dma_lowp_counts_s cn31xx; - struct cvmx_npi_dma_lowp_counts_s cn38xx; - struct cvmx_npi_dma_lowp_counts_s cn38xxp2; - struct cvmx_npi_dma_lowp_counts_s cn50xx; - struct cvmx_npi_dma_lowp_counts_s cn58xx; - struct cvmx_npi_dma_lowp_counts_s cn58xxp1; -} cvmx_npi_dma_lowp_counts_t; - - -/** - * cvmx_npi_dma_lowp_naddr - * - * NPI_DMA_LOWP_NADDR = NPI's Low Priority DMA Next Ichunk Address - * - * Place NPI will read the next Ichunk data from. This is valid when state is 0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_dma_lowp_naddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t state : 4; /**< The DMA instruction engine state vector. - Typical value is 0 (IDLE). */ - uint64_t addr : 36; /**< The next L2C address to read DMA instructions - from for the Low Priority DMA engine. */ -#else - uint64_t addr : 36; - uint64_t state : 4; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_npi_dma_lowp_naddr_s cn30xx; - struct cvmx_npi_dma_lowp_naddr_s cn31xx; - struct cvmx_npi_dma_lowp_naddr_s cn38xx; - struct cvmx_npi_dma_lowp_naddr_s cn38xxp2; - struct cvmx_npi_dma_lowp_naddr_s cn50xx; - struct cvmx_npi_dma_lowp_naddr_s cn58xx; - struct cvmx_npi_dma_lowp_naddr_s cn58xxp1; -} cvmx_npi_dma_lowp_naddr_t; - - -/** - * cvmx_npi_highp_dbell - * - * NPI_HIGHP_DBELL = High Priority Door Bell - * - * The door bell register for the high priority DMA queue. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_highp_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dbell : 16; /**< The value written to this register is added to the - number of 8byte words to be read and processes for - the high priority dma queue. */ -#else - uint64_t dbell : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npi_highp_dbell_s cn30xx; - struct cvmx_npi_highp_dbell_s cn31xx; - struct cvmx_npi_highp_dbell_s cn38xx; - struct cvmx_npi_highp_dbell_s cn38xxp2; - struct cvmx_npi_highp_dbell_s cn50xx; - struct cvmx_npi_highp_dbell_s cn58xx; - struct cvmx_npi_highp_dbell_s cn58xxp1; -} cvmx_npi_highp_dbell_t; - - -/** - * cvmx_npi_highp_ibuff_saddr - * - * NPI_HIGHP_IBUFF_SADDR = DMA High Priority Instruction Buffer Starting Address - * - * The address to start reading Instructions from for HIGHP. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_highp_ibuff_saddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t saddr : 36; /**< The starting address to read the first instruction. */ -#else - uint64_t saddr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_npi_highp_ibuff_saddr_s cn30xx; - struct cvmx_npi_highp_ibuff_saddr_s cn31xx; - struct cvmx_npi_highp_ibuff_saddr_s cn38xx; - struct cvmx_npi_highp_ibuff_saddr_s cn38xxp2; - struct cvmx_npi_highp_ibuff_saddr_s cn50xx; - struct cvmx_npi_highp_ibuff_saddr_s cn58xx; - struct cvmx_npi_highp_ibuff_saddr_s cn58xxp1; -} cvmx_npi_highp_ibuff_saddr_t; - - -/** - * cvmx_npi_input_control - * - * NPI_INPUT_CONTROL = NPI's Input Control Register - * - * Control for reads for gather list and instructions. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_input_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t pkt_rr : 1; /**< When set '1' the input packet selection will be - made with a Round Robin arbitration. When '0' - the input packet port is fixed in priority, - where the lower port number has higher priority. - PASS3 Field */ - uint64_t pbp_dhi : 13; /**< Field when in [PBP] is set to be used in - calculating a DPTR. */ - uint64_t d_nsr : 1; /**< Enables '1' NoSnoop for reading of - gather data. */ - uint64_t d_esr : 2; /**< The Endian-Swap-Mode for reading of - gather data. */ - uint64_t d_ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather data. */ - uint64_t use_csr : 1; /**< When set '1' the csr value will be used for - ROR, ESR, and NSR. When clear '0' the value in - DPTR will be used. In turn the bits not used for - ROR, ESR, and NSR, will be used for bits [63:60] - of the address used to fetch packet data. */ - uint64_t nsr : 1; /**< Enables '1' NoSnoop for reading of - gather list and gather instruction. */ - uint64_t esr : 2; /**< The Endian-Swap-Mode for reading of - gather list and gather instruction. */ - uint64_t ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather list and gather instruction. */ -#else - uint64_t ror : 1; - uint64_t esr : 2; - uint64_t nsr : 1; - uint64_t use_csr : 1; - uint64_t d_ror : 1; - uint64_t d_esr : 2; - uint64_t d_nsr : 1; - uint64_t pbp_dhi : 13; - uint64_t pkt_rr : 1; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_npi_input_control_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_22_63 : 42; - uint64_t pbp_dhi : 13; /**< Field when in [PBP] is set to be used in - calculating a DPTR. */ - uint64_t d_nsr : 1; /**< Enables '1' NoSnoop for reading of - gather data. */ - uint64_t d_esr : 2; /**< The Endian-Swap-Mode for reading of - gather data. */ - uint64_t d_ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather data. */ - uint64_t use_csr : 1; /**< When set '1' the csr value will be used for - ROR, ESR, and NSR. When clear '0' the value in - DPTR will be used. In turn the bits not used for - ROR, ESR, and NSR, will be used for bits [63:60] - of the address used to fetch packet data. */ - uint64_t nsr : 1; /**< Enables '1' NoSnoop for reading of - gather list and gather instruction. */ - uint64_t esr : 2; /**< The Endian-Swap-Mode for reading of - gather list and gather instruction. */ - uint64_t ror : 1; /**< Enables '1' Relaxed Ordering for reading of - gather list and gather instruction. */ -#else - uint64_t ror : 1; - uint64_t esr : 2; - uint64_t nsr : 1; - uint64_t use_csr : 1; - uint64_t d_ror : 1; - uint64_t d_esr : 2; - uint64_t d_nsr : 1; - uint64_t pbp_dhi : 13; - uint64_t reserved_22_63 : 42; -#endif - } cn30xx; - struct cvmx_npi_input_control_cn30xx cn31xx; - struct cvmx_npi_input_control_s cn38xx; - struct cvmx_npi_input_control_cn30xx cn38xxp2; - struct cvmx_npi_input_control_s cn50xx; - struct cvmx_npi_input_control_s cn58xx; - struct cvmx_npi_input_control_s cn58xxp1; -} cvmx_npi_input_control_t; - - -/** - * cvmx_npi_int_enb - * - * NPI_INTERRUPT_ENB = NPI's Interrupt Enable Register - * - * Used to enable the various interrupting conditions of NPI - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Enables NPI_INT_SUM[Q1_A_F] to generate an - interrupt. */ - uint64_t q1_s_e : 1; /**< Enables NPI_INT_SUM[Q1_S_E] to generate an - interrupt. */ - uint64_t pdf_p_f : 1; /**< Enables NPI_INT_SUM[PDF_P_F] to generate an - interrupt. */ - uint64_t pdf_p_e : 1; /**< Enables NPI_INT_SUM[PDF_P_E] to generate an - interrupt. */ - uint64_t pcf_p_f : 1; /**< Enables NPI_INT_SUM[PCF_P_F] to generate an - interrupt. */ - uint64_t pcf_p_e : 1; /**< Enables NPI_INT_SUM[PCF_P_E] to generate an - interrupt. */ - uint64_t rdx_s_e : 1; /**< Enables NPI_INT_SUM[RDX_S_E] to generate an - interrupt. */ - uint64_t rwx_s_e : 1; /**< Enables NPI_INT_SUM[RWX_S_E] to generate an - interrupt. */ - uint64_t pnc_a_f : 1; /**< Enables NPI_INT_SUM[PNC_A_F] to generate an - interrupt. */ - uint64_t pnc_s_e : 1; /**< Enables NPI_INT_SUM[PNC_S_E] to generate an - interrupt. */ - uint64_t com_a_f : 1; /**< Enables NPI_INT_SUM[COM_A_F] to generate an - interrupt. */ - uint64_t com_s_e : 1; /**< Enables NPI_INT_SUM[COM_S_E] to generate an - interrupt. */ - uint64_t q3_a_f : 1; /**< Enables NPI_INT_SUM[Q3_A_F] to generate an - interrupt. */ - uint64_t q3_s_e : 1; /**< Enables NPI_INT_SUM[Q3_S_E] to generate an - interrupt. */ - uint64_t q2_a_f : 1; /**< Enables NPI_INT_SUM[Q2_A_F] to generate an - interrupt. */ - uint64_t q2_s_e : 1; /**< Enables NPI_INT_SUM[Q2_S_E] to generate an - interrupt. */ - uint64_t pcr_a_f : 1; /**< Enables NPI_INT_SUM[PCR_A_F] to generate an - interrupt. */ - uint64_t pcr_s_e : 1; /**< Enables NPI_INT_SUM[PCR_S_E] to generate an - interrupt. */ - uint64_t fcr_a_f : 1; /**< Enables NPI_INT_SUM[FCR_A_F] to generate an - interrupt. */ - uint64_t fcr_s_e : 1; /**< Enables NPI_INT_SUM[FCR_S_E] to generate an - interrupt. */ - uint64_t iobdma : 1; /**< Enables NPI_INT_SUM[IOBDMA] to generate an - interrupt. */ - uint64_t p_dperr : 1; /**< Enables NPI_INT_SUM[P_DPERR] to generate an - interrupt. */ - uint64_t win_rto : 1; /**< Enables NPI_INT_SUM[WIN_RTO] to generate an - interrupt. */ - uint64_t i3_pperr : 1; /**< Enables NPI_INT_SUM[I3_PPERR] to generate an - interrupt. */ - uint64_t i2_pperr : 1; /**< Enables NPI_INT_SUM[I2_PPERR] to generate an - interrupt. */ - uint64_t i1_pperr : 1; /**< Enables NPI_INT_SUM[I1_PPERR] to generate an - interrupt. */ - uint64_t i0_pperr : 1; /**< Enables NPI_INT_SUM[I0_PPERR] to generate an - interrupt. */ - uint64_t p3_ptout : 1; /**< Enables NPI_INT_SUM[P3_PTOUT] to generate an - interrupt. */ - uint64_t p2_ptout : 1; /**< Enables NPI_INT_SUM[P2_PTOUT] to generate an - interrupt. */ - uint64_t p1_ptout : 1; /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an - interrupt. */ - uint64_t p0_ptout : 1; /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an - interrupt. */ - uint64_t p3_pperr : 1; /**< Enables NPI_INT_SUM[P3_PPERR] to generate an - interrupt. */ - uint64_t p2_pperr : 1; /**< Enables NPI_INT_SUM[P2_PPERR] to generate an - interrupt. */ - uint64_t p1_pperr : 1; /**< Enables NPI_INT_SUM[P1_PPERR] to generate an - interrupt. */ - uint64_t p0_pperr : 1; /**< Enables NPI_INT_SUM[P0_PPERR] to generate an - interrupt. */ - uint64_t g3_rtout : 1; /**< Enables NPI_INT_SUM[G3_RTOUT] to generate an - interrupt. */ - uint64_t g2_rtout : 1; /**< Enables NPI_INT_SUM[G2_RTOUT] to generate an - interrupt. */ - uint64_t g1_rtout : 1; /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an - interrupt. */ - uint64_t g0_rtout : 1; /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an - interrupt. */ - uint64_t p3_perr : 1; /**< Enables NPI_INT_SUM[P3_PERR] to generate an - interrupt. */ - uint64_t p2_perr : 1; /**< Enables NPI_INT_SUM[P2_PERR] to generate an - interrupt. */ - uint64_t p1_perr : 1; /**< Enables NPI_INT_SUM[P1_PERR] to generate an - interrupt. */ - uint64_t p0_perr : 1; /**< Enables NPI_INT_SUM[P0_PERR] to generate an - interrupt. */ - uint64_t p3_rtout : 1; /**< Enables NPI_INT_SUM[P3_RTOUT] to generate an - interrupt. */ - uint64_t p2_rtout : 1; /**< Enables NPI_INT_SUM[P2_RTOUT] to generate an - interrupt. */ - uint64_t p1_rtout : 1; /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an - interrupt. */ - uint64_t p0_rtout : 1; /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an - interrupt. */ - uint64_t i3_overf : 1; /**< Enables NPI_INT_SUM[I3_OVERF] to generate an - interrupt. */ - uint64_t i2_overf : 1; /**< Enables NPI_INT_SUM[I2_OVERF] to generate an - interrupt. */ - uint64_t i1_overf : 1; /**< Enables NPI_INT_SUM[I1_OVERF] to generate an - interrupt. */ - uint64_t i0_overf : 1; /**< Enables NPI_INT_SUM[I0_OVERF] to generate an - interrupt. */ - uint64_t i3_rtout : 1; /**< Enables NPI_INT_SUM[I3_RTOUT] to generate an - interrupt. */ - uint64_t i2_rtout : 1; /**< Enables NPI_INT_SUM[I2_RTOUT] to generate an - interrupt. */ - uint64_t i1_rtout : 1; /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an - interrupt. */ - uint64_t i0_rtout : 1; /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an - interrupt. */ - uint64_t po3_2sml : 1; /**< Enables NPI_INT_SUM[PO3_2SML] to generate an - interrupt. */ - uint64_t po2_2sml : 1; /**< Enables NPI_INT_SUM[PO2_2SML] to generate an - interrupt. */ - uint64_t po1_2sml : 1; /**< Enables NPI_INT_SUM[PO1_2SML] to generate an - interrupt. */ - uint64_t po0_2sml : 1; /**< Enables NPI_INT_SUM[PO0_2SML] to generate an - interrupt. */ - uint64_t pci_rsl : 1; /**< Enables NPI_INT_SUM[PCI_RSL] to generate an - interrupt. */ - uint64_t rml_wto : 1; /**< Enables NPI_INT_SUM[RML_WTO] to generate an - interrupt. */ - uint64_t rml_rto : 1; /**< Enables NPI_INT_SUM[RML_RTO] to generate an - interrupt. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t po2_2sml : 1; - uint64_t po3_2sml : 1; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t i2_rtout : 1; - uint64_t i3_rtout : 1; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t i2_overf : 1; - uint64_t i3_overf : 1; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t p2_rtout : 1; - uint64_t p3_rtout : 1; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t p2_perr : 1; - uint64_t p3_perr : 1; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t g2_rtout : 1; - uint64_t g3_rtout : 1; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t p2_pperr : 1; - uint64_t p3_pperr : 1; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t p2_ptout : 1; - uint64_t p3_ptout : 1; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t i2_pperr : 1; - uint64_t i3_pperr : 1; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } s; - struct cvmx_npi_int_enb_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Enables NPI_INT_SUM[Q1_A_F] to generate an - interrupt. */ - uint64_t q1_s_e : 1; /**< Enables NPI_INT_SUM[Q1_S_E] to generate an - interrupt. */ - uint64_t pdf_p_f : 1; /**< Enables NPI_INT_SUM[PDF_P_F] to generate an - interrupt. */ - uint64_t pdf_p_e : 1; /**< Enables NPI_INT_SUM[PDF_P_E] to generate an - interrupt. */ - uint64_t pcf_p_f : 1; /**< Enables NPI_INT_SUM[PCF_P_F] to generate an - interrupt. */ - uint64_t pcf_p_e : 1; /**< Enables NPI_INT_SUM[PCF_P_E] to generate an - interrupt. */ - uint64_t rdx_s_e : 1; /**< Enables NPI_INT_SUM[RDX_S_E] to generate an - interrupt. */ - uint64_t rwx_s_e : 1; /**< Enables NPI_INT_SUM[RWX_S_E] to generate an - interrupt. */ - uint64_t pnc_a_f : 1; /**< Enables NPI_INT_SUM[PNC_A_F] to generate an - interrupt. */ - uint64_t pnc_s_e : 1; /**< Enables NPI_INT_SUM[PNC_S_E] to generate an - interrupt. */ - uint64_t com_a_f : 1; /**< Enables NPI_INT_SUM[COM_A_F] to generate an - interrupt. */ - uint64_t com_s_e : 1; /**< Enables NPI_INT_SUM[COM_S_E] to generate an - interrupt. */ - uint64_t q3_a_f : 1; /**< Enables NPI_INT_SUM[Q3_A_F] to generate an - interrupt. */ - uint64_t q3_s_e : 1; /**< Enables NPI_INT_SUM[Q3_S_E] to generate an - interrupt. */ - uint64_t q2_a_f : 1; /**< Enables NPI_INT_SUM[Q2_A_F] to generate an - interrupt. */ - uint64_t q2_s_e : 1; /**< Enables NPI_INT_SUM[Q2_S_E] to generate an - interrupt. */ - uint64_t pcr_a_f : 1; /**< Enables NPI_INT_SUM[PCR_A_F] to generate an - interrupt. */ - uint64_t pcr_s_e : 1; /**< Enables NPI_INT_SUM[PCR_S_E] to generate an - interrupt. */ - uint64_t fcr_a_f : 1; /**< Enables NPI_INT_SUM[FCR_A_F] to generate an - interrupt. */ - uint64_t fcr_s_e : 1; /**< Enables NPI_INT_SUM[FCR_S_E] to generate an - interrupt. */ - uint64_t iobdma : 1; /**< Enables NPI_INT_SUM[IOBDMA] to generate an - interrupt. */ - uint64_t p_dperr : 1; /**< Enables NPI_INT_SUM[P_DPERR] to generate an - interrupt. */ - uint64_t win_rto : 1; /**< Enables NPI_INT_SUM[WIN_RTO] to generate an - interrupt. */ - uint64_t reserved_36_38 : 3; - uint64_t i0_pperr : 1; /**< Enables NPI_INT_SUM[I0_PPERR] to generate an - interrupt. */ - uint64_t reserved_32_34 : 3; - uint64_t p0_ptout : 1; /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an - interrupt. */ - uint64_t reserved_28_30 : 3; - uint64_t p0_pperr : 1; /**< Enables NPI_INT_SUM[P0_PPERR] to generate an - interrupt. */ - uint64_t reserved_24_26 : 3; - uint64_t g0_rtout : 1; /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_20_22 : 3; - uint64_t p0_perr : 1; /**< Enables NPI_INT_SUM[P0_PERR] to generate an - interrupt. */ - uint64_t reserved_16_18 : 3; - uint64_t p0_rtout : 1; /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_12_14 : 3; - uint64_t i0_overf : 1; /**< Enables NPI_INT_SUM[I0_OVERF] to generate an - interrupt. */ - uint64_t reserved_8_10 : 3; - uint64_t i0_rtout : 1; /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_4_6 : 3; - uint64_t po0_2sml : 1; /**< Enables NPI_INT_SUM[PO0_2SML] to generate an - interrupt. */ - uint64_t pci_rsl : 1; /**< Enables NPI_INT_SUM[PCI_RSL] to generate an - interrupt. */ - uint64_t rml_wto : 1; /**< Enables NPI_INT_SUM[RML_WTO] to generate an - interrupt. */ - uint64_t rml_rto : 1; /**< Enables NPI_INT_SUM[RML_RTO] to generate an - interrupt. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t reserved_4_6 : 3; - uint64_t i0_rtout : 1; - uint64_t reserved_8_10 : 3; - uint64_t i0_overf : 1; - uint64_t reserved_12_14 : 3; - uint64_t p0_rtout : 1; - uint64_t reserved_16_18 : 3; - uint64_t p0_perr : 1; - uint64_t reserved_20_22 : 3; - uint64_t g0_rtout : 1; - uint64_t reserved_24_26 : 3; - uint64_t p0_pperr : 1; - uint64_t reserved_28_30 : 3; - uint64_t p0_ptout : 1; - uint64_t reserved_32_34 : 3; - uint64_t i0_pperr : 1; - uint64_t reserved_36_38 : 3; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } cn30xx; - struct cvmx_npi_int_enb_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Enables NPI_INT_SUM[Q1_A_F] to generate an - interrupt. */ - uint64_t q1_s_e : 1; /**< Enables NPI_INT_SUM[Q1_S_E] to generate an - interrupt. */ - uint64_t pdf_p_f : 1; /**< Enables NPI_INT_SUM[PDF_P_F] to generate an - interrupt. */ - uint64_t pdf_p_e : 1; /**< Enables NPI_INT_SUM[PDF_P_E] to generate an - interrupt. */ - uint64_t pcf_p_f : 1; /**< Enables NPI_INT_SUM[PCF_P_F] to generate an - interrupt. */ - uint64_t pcf_p_e : 1; /**< Enables NPI_INT_SUM[PCF_P_E] to generate an - interrupt. */ - uint64_t rdx_s_e : 1; /**< Enables NPI_INT_SUM[RDX_S_E] to generate an - interrupt. */ - uint64_t rwx_s_e : 1; /**< Enables NPI_INT_SUM[RWX_S_E] to generate an - interrupt. */ - uint64_t pnc_a_f : 1; /**< Enables NPI_INT_SUM[PNC_A_F] to generate an - interrupt. */ - uint64_t pnc_s_e : 1; /**< Enables NPI_INT_SUM[PNC_S_E] to generate an - interrupt. */ - uint64_t com_a_f : 1; /**< Enables NPI_INT_SUM[COM_A_F] to generate an - interrupt. */ - uint64_t com_s_e : 1; /**< Enables NPI_INT_SUM[COM_S_E] to generate an - interrupt. */ - uint64_t q3_a_f : 1; /**< Enables NPI_INT_SUM[Q3_A_F] to generate an - interrupt. */ - uint64_t q3_s_e : 1; /**< Enables NPI_INT_SUM[Q3_S_E] to generate an - interrupt. */ - uint64_t q2_a_f : 1; /**< Enables NPI_INT_SUM[Q2_A_F] to generate an - interrupt. */ - uint64_t q2_s_e : 1; /**< Enables NPI_INT_SUM[Q2_S_E] to generate an - interrupt. */ - uint64_t pcr_a_f : 1; /**< Enables NPI_INT_SUM[PCR_A_F] to generate an - interrupt. */ - uint64_t pcr_s_e : 1; /**< Enables NPI_INT_SUM[PCR_S_E] to generate an - interrupt. */ - uint64_t fcr_a_f : 1; /**< Enables NPI_INT_SUM[FCR_A_F] to generate an - interrupt. */ - uint64_t fcr_s_e : 1; /**< Enables NPI_INT_SUM[FCR_S_E] to generate an - interrupt. */ - uint64_t iobdma : 1; /**< Enables NPI_INT_SUM[IOBDMA] to generate an - interrupt. */ - uint64_t p_dperr : 1; /**< Enables NPI_INT_SUM[P_DPERR] to generate an - interrupt. */ - uint64_t win_rto : 1; /**< Enables NPI_INT_SUM[WIN_RTO] to generate an - interrupt. */ - uint64_t reserved_37_38 : 2; - uint64_t i1_pperr : 1; /**< Enables NPI_INT_SUM[I1_PPERR] to generate an - interrupt. */ - uint64_t i0_pperr : 1; /**< Enables NPI_INT_SUM[I0_PPERR] to generate an - interrupt. */ - uint64_t reserved_33_34 : 2; - uint64_t p1_ptout : 1; /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an - interrupt. */ - uint64_t p0_ptout : 1; /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an - interrupt. */ - uint64_t reserved_29_30 : 2; - uint64_t p1_pperr : 1; /**< Enables NPI_INT_SUM[P1_PPERR] to generate an - interrupt. */ - uint64_t p0_pperr : 1; /**< Enables NPI_INT_SUM[P0_PPERR] to generate an - interrupt. */ - uint64_t reserved_25_26 : 2; - uint64_t g1_rtout : 1; /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an - interrupt. */ - uint64_t g0_rtout : 1; /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_21_22 : 2; - uint64_t p1_perr : 1; /**< Enables NPI_INT_SUM[P1_PERR] to generate an - interrupt. */ - uint64_t p0_perr : 1; /**< Enables NPI_INT_SUM[P0_PERR] to generate an - interrupt. */ - uint64_t reserved_17_18 : 2; - uint64_t p1_rtout : 1; /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an - interrupt. */ - uint64_t p0_rtout : 1; /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_13_14 : 2; - uint64_t i1_overf : 1; /**< Enables NPI_INT_SUM[I1_OVERF] to generate an - interrupt. */ - uint64_t i0_overf : 1; /**< Enables NPI_INT_SUM[I0_OVERF] to generate an - interrupt. */ - uint64_t reserved_9_10 : 2; - uint64_t i1_rtout : 1; /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an - interrupt. */ - uint64_t i0_rtout : 1; /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an - interrupt. */ - uint64_t reserved_5_6 : 2; - uint64_t po1_2sml : 1; /**< Enables NPI_INT_SUM[PO1_2SML] to generate an - interrupt. */ - uint64_t po0_2sml : 1; /**< Enables NPI_INT_SUM[PO0_2SML] to generate an - interrupt. */ - uint64_t pci_rsl : 1; /**< Enables NPI_INT_SUM[PCI_RSL] to generate an - interrupt. */ - uint64_t rml_wto : 1; /**< Enables NPI_INT_SUM[RML_WTO] to generate an - interrupt. */ - uint64_t rml_rto : 1; /**< Enables NPI_INT_SUM[RML_RTO] to generate an - interrupt. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t reserved_5_6 : 2; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t reserved_9_10 : 2; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t reserved_13_14 : 2; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t reserved_17_18 : 2; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t reserved_21_22 : 2; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t reserved_25_26 : 2; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t reserved_29_30 : 2; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t reserved_33_34 : 2; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t reserved_37_38 : 2; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } cn31xx; - struct cvmx_npi_int_enb_s cn38xx; - struct cvmx_npi_int_enb_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_42_63 : 22; - uint64_t iobdma : 1; /**< Enables NPI_INT_SUM[IOBDMA] to generate an - interrupt. */ - uint64_t p_dperr : 1; /**< Enables NPI_INT_SUM[P_DPERR] to generate an - interrupt. */ - uint64_t win_rto : 1; /**< Enables NPI_INT_SUM[WIN_RTO] to generate an - interrupt. */ - uint64_t i3_pperr : 1; /**< Enables NPI_INT_SUM[I3_PPERR] to generate an - interrupt. */ - uint64_t i2_pperr : 1; /**< Enables NPI_INT_SUM[I2_PPERR] to generate an - interrupt. */ - uint64_t i1_pperr : 1; /**< Enables NPI_INT_SUM[I1_PPERR] to generate an - interrupt. */ - uint64_t i0_pperr : 1; /**< Enables NPI_INT_SUM[I0_PPERR] to generate an - interrupt. */ - uint64_t p3_ptout : 1; /**< Enables NPI_INT_SUM[P3_PTOUT] to generate an - interrupt. */ - uint64_t p2_ptout : 1; /**< Enables NPI_INT_SUM[P2_PTOUT] to generate an - interrupt. */ - uint64_t p1_ptout : 1; /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an - interrupt. */ - uint64_t p0_ptout : 1; /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an - interrupt. */ - uint64_t p3_pperr : 1; /**< Enables NPI_INT_SUM[P3_PPERR] to generate an - interrupt. */ - uint64_t p2_pperr : 1; /**< Enables NPI_INT_SUM[P2_PPERR] to generate an - interrupt. */ - uint64_t p1_pperr : 1; /**< Enables NPI_INT_SUM[P1_PPERR] to generate an - interrupt. */ - uint64_t p0_pperr : 1; /**< Enables NPI_INT_SUM[P0_PPERR] to generate an - interrupt. */ - uint64_t g3_rtout : 1; /**< Enables NPI_INT_SUM[G3_RTOUT] to generate an - interrupt. */ - uint64_t g2_rtout : 1; /**< Enables NPI_INT_SUM[G2_RTOUT] to generate an - interrupt. */ - uint64_t g1_rtout : 1; /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an - interrupt. */ - uint64_t g0_rtout : 1; /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an - interrupt. */ - uint64_t p3_perr : 1; /**< Enables NPI_INT_SUM[P3_PERR] to generate an - interrupt. */ - uint64_t p2_perr : 1; /**< Enables NPI_INT_SUM[P2_PERR] to generate an - interrupt. */ - uint64_t p1_perr : 1; /**< Enables NPI_INT_SUM[P1_PERR] to generate an - interrupt. */ - uint64_t p0_perr : 1; /**< Enables NPI_INT_SUM[P0_PERR] to generate an - interrupt. */ - uint64_t p3_rtout : 1; /**< Enables NPI_INT_SUM[P3_RTOUT] to generate an - interrupt. */ - uint64_t p2_rtout : 1; /**< Enables NPI_INT_SUM[P2_RTOUT] to generate an - interrupt. */ - uint64_t p1_rtout : 1; /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an - interrupt. */ - uint64_t p0_rtout : 1; /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an - interrupt. */ - uint64_t i3_overf : 1; /**< Enables NPI_INT_SUM[I3_OVERF] to generate an - interrupt. */ - uint64_t i2_overf : 1; /**< Enables NPI_INT_SUM[I2_OVERF] to generate an - interrupt. */ - uint64_t i1_overf : 1; /**< Enables NPI_INT_SUM[I1_OVERF] to generate an - interrupt. */ - uint64_t i0_overf : 1; /**< Enables NPI_INT_SUM[I0_OVERF] to generate an - interrupt. */ - uint64_t i3_rtout : 1; /**< Enables NPI_INT_SUM[I3_RTOUT] to generate an - interrupt. */ - uint64_t i2_rtout : 1; /**< Enables NPI_INT_SUM[I2_RTOUT] to generate an - interrupt. */ - uint64_t i1_rtout : 1; /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an - interrupt. */ - uint64_t i0_rtout : 1; /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an - interrupt. */ - uint64_t po3_2sml : 1; /**< Enables NPI_INT_SUM[PO3_2SML] to generate an - interrupt. */ - uint64_t po2_2sml : 1; /**< Enables NPI_INT_SUM[PO2_2SML] to generate an - interrupt. */ - uint64_t po1_2sml : 1; /**< Enables NPI_INT_SUM[PO1_2SML] to generate an - interrupt. */ - uint64_t po0_2sml : 1; /**< Enables NPI_INT_SUM[PO0_2SML] to generate an - interrupt. */ - uint64_t pci_rsl : 1; /**< Enables NPI_INT_SUM[PCI_RSL] to generate an - interrupt. */ - uint64_t rml_wto : 1; /**< Enables NPI_INT_SUM[RML_WTO] to generate an - interrupt. */ - uint64_t rml_rto : 1; /**< Enables NPI_INT_SUM[RML_RTO] to generate an - interrupt. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t po2_2sml : 1; - uint64_t po3_2sml : 1; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t i2_rtout : 1; - uint64_t i3_rtout : 1; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t i2_overf : 1; - uint64_t i3_overf : 1; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t p2_rtout : 1; - uint64_t p3_rtout : 1; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t p2_perr : 1; - uint64_t p3_perr : 1; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t g2_rtout : 1; - uint64_t g3_rtout : 1; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t p2_pperr : 1; - uint64_t p3_pperr : 1; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t p2_ptout : 1; - uint64_t p3_ptout : 1; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t i2_pperr : 1; - uint64_t i3_pperr : 1; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t reserved_42_63 : 22; -#endif - } cn38xxp2; - struct cvmx_npi_int_enb_cn31xx cn50xx; - struct cvmx_npi_int_enb_s cn58xx; - struct cvmx_npi_int_enb_s cn58xxp1; -} cvmx_npi_int_enb_t; - - -/** - * cvmx_npi_int_sum - * - * NPI_INTERRUPT_SUM = NPI Interrupt Summary Register - * - * Set when an interrupt condition occurs, write '1' to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Attempted to add when Queue-1 FIFO is full. - PASS3 Field. */ - uint64_t q1_s_e : 1; /**< Attempted to subtract when Queue-1 FIFO is empty. - PASS3 Field. */ - uint64_t pdf_p_f : 1; /**< Attempted to push a full PCN-DATA-FIFO. - PASS3 Field. */ - uint64_t pdf_p_e : 1; /**< Attempted to pop an empty PCN-DATA-FIFO. - PASS3 Field. */ - uint64_t pcf_p_f : 1; /**< Attempted to push a full PCN-CNT-FIFO. - PASS3 Field. */ - uint64_t pcf_p_e : 1; /**< Attempted to pop an empty PCN-CNT-FIFO. - PASS3 Field. */ - uint64_t rdx_s_e : 1; /**< Attempted to subtract when DPI-XFR-Wait count is 0. - PASS3 Field. */ - uint64_t rwx_s_e : 1; /**< Attempted to subtract when RDN-XFR-Wait count is 0. - PASS3 Field. */ - uint64_t pnc_a_f : 1; /**< Attempted to add when PNI-NPI Credits are max. - PASS3 Field. */ - uint64_t pnc_s_e : 1; /**< Attempted to subtract when PNI-NPI Credits are 0. - PASS3 Field. */ - uint64_t com_a_f : 1; /**< Attempted to add when PCN-Commit Counter is max. - PASS3 Field. */ - uint64_t com_s_e : 1; /**< Attempted to subtract when PCN-Commit Counter is 0. - PASS3 Field. */ - uint64_t q3_a_f : 1; /**< Attempted to add when Queue-3 FIFO is full. - PASS3 Field. */ - uint64_t q3_s_e : 1; /**< Attempted to subtract when Queue-3 FIFO is empty. - PASS3 Field. */ - uint64_t q2_a_f : 1; /**< Attempted to add when Queue-2 FIFO is full. - PASS3 Field. */ - uint64_t q2_s_e : 1; /**< Attempted to subtract when Queue-2 FIFO is empty. - PASS3 Field. */ - uint64_t pcr_a_f : 1; /**< Attempted to add when POW Credits is full. - PASS3 Field. */ - uint64_t pcr_s_e : 1; /**< Attempted to subtract when POW Credits is empty. - PASS3 Field. */ - uint64_t fcr_a_f : 1; /**< Attempted to add when FPA Credits is full. - PASS3 Field. */ - uint64_t fcr_s_e : 1; /**< Attempted to subtract when FPA Credits is empty. - PASS3 Field. */ - uint64_t iobdma : 1; /**< Requested IOBDMA read size exceeded 128 words. */ - uint64_t p_dperr : 1; /**< If a parity error occured on data written to L2C - from the PCI this bit may be set. */ - uint64_t win_rto : 1; /**< Windowed Load Timed Out. */ - uint64_t i3_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i2_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i1_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i0_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t p3_ptout : 1; /**< Port-3 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p2_ptout : 1; /**< Port-2 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p1_ptout : 1; /**< Port-1 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p0_ptout : 1; /**< Port-0 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p3_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p2_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p1_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p0_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t g3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read a gather list. */ - uint64_t g2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read a gather list. */ - uint64_t g1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read a gather list. */ - uint64_t g0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read a gather list. */ - uint64_t p3_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p2_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p1_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p0_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read packet data. */ - uint64_t p2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read packet data. */ - uint64_t p1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read packet data. */ - uint64_t p0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read packet data. */ - uint64_t i3_overf : 1; /**< Port-3 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i2_overf : 1; /**< Port-2 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i1_overf : 1; /**< Port-1 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i0_overf : 1; /**< Port-0 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read instructions. */ - uint64_t i2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read instructions. */ - uint64_t i1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read instructions. */ - uint64_t i0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read instructions. */ - uint64_t po3_2sml : 1; /**< The packet being sent out on Port3 is smaller - than the NPI_BUFF_SIZE_OUTPUT3[ISIZE] field. */ - uint64_t po2_2sml : 1; /**< The packet being sent out on Port2 is smaller - than the NPI_BUFF_SIZE_OUTPUT2[ISIZE] field. */ - uint64_t po1_2sml : 1; /**< The packet being sent out on Port1 is smaller - than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */ - uint64_t po0_2sml : 1; /**< The packet being sent out on Port0 is smaller - than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */ - uint64_t pci_rsl : 1; /**< This '1' when a bit in PCI_INT_SUM2 is SET and the - corresponding bit in the PCI_INT_ENB2 is SET. */ - uint64_t rml_wto : 1; /**< Set '1' when the RML does not receive a commit - back from a RSL after sending a write command to - a RSL. */ - uint64_t rml_rto : 1; /**< Set '1' when the RML does not receive read data - back from a RSL after sending a read command to - a RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t po2_2sml : 1; - uint64_t po3_2sml : 1; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t i2_rtout : 1; - uint64_t i3_rtout : 1; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t i2_overf : 1; - uint64_t i3_overf : 1; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t p2_rtout : 1; - uint64_t p3_rtout : 1; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t p2_perr : 1; - uint64_t p3_perr : 1; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t g2_rtout : 1; - uint64_t g3_rtout : 1; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t p2_pperr : 1; - uint64_t p3_pperr : 1; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t p2_ptout : 1; - uint64_t p3_ptout : 1; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t i2_pperr : 1; - uint64_t i3_pperr : 1; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } s; - struct cvmx_npi_int_sum_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Attempted to add when Queue-1 FIFO is full. */ - uint64_t q1_s_e : 1; /**< Attempted to subtract when Queue-1 FIFO is empty. */ - uint64_t pdf_p_f : 1; /**< Attempted to push a full PCN-DATA-FIFO. */ - uint64_t pdf_p_e : 1; /**< Attempted to pop an empty PCN-DATA-FIFO. */ - uint64_t pcf_p_f : 1; /**< Attempted to push a full PCN-CNT-FIFO. */ - uint64_t pcf_p_e : 1; /**< Attempted to pop an empty PCN-CNT-FIFO. */ - uint64_t rdx_s_e : 1; /**< Attempted to subtract when DPI-XFR-Wait count is 0. */ - uint64_t rwx_s_e : 1; /**< Attempted to subtract when RDN-XFR-Wait count is 0. */ - uint64_t pnc_a_f : 1; /**< Attempted to add when PNI-NPI Credits are max. */ - uint64_t pnc_s_e : 1; /**< Attempted to subtract when PNI-NPI Credits are 0. */ - uint64_t com_a_f : 1; /**< Attempted to add when PCN-Commit Counter is max. */ - uint64_t com_s_e : 1; /**< Attempted to subtract when PCN-Commit Counter is 0. */ - uint64_t q3_a_f : 1; /**< Attempted to add when Queue-3 FIFO is full. */ - uint64_t q3_s_e : 1; /**< Attempted to subtract when Queue-3 FIFO is empty. */ - uint64_t q2_a_f : 1; /**< Attempted to add when Queue-2 FIFO is full. */ - uint64_t q2_s_e : 1; /**< Attempted to subtract when Queue-2 FIFO is empty. */ - uint64_t pcr_a_f : 1; /**< Attempted to add when POW Credits is full. */ - uint64_t pcr_s_e : 1; /**< Attempted to subtract when POW Credits is empty. */ - uint64_t fcr_a_f : 1; /**< Attempted to add when FPA Credits is full. */ - uint64_t fcr_s_e : 1; /**< Attempted to subtract when FPA Credits is empty. */ - uint64_t iobdma : 1; /**< Requested IOBDMA read size exceeded 128 words. */ - uint64_t p_dperr : 1; /**< If a parity error occured on data written to L2C - from the PCI this bit may be set. */ - uint64_t win_rto : 1; /**< Windowed Load Timed Out. */ - uint64_t reserved_36_38 : 3; - uint64_t i0_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t reserved_32_34 : 3; - uint64_t p0_ptout : 1; /**< Port-0 output had a read timeout on a DATA/INFO - pair. */ - uint64_t reserved_28_30 : 3; - uint64_t p0_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t reserved_24_26 : 3; - uint64_t g0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read a gather list. */ - uint64_t reserved_20_22 : 3; - uint64_t p0_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t reserved_16_18 : 3; - uint64_t p0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read packet data. */ - uint64_t reserved_12_14 : 3; - uint64_t i0_overf : 1; /**< Port-0 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t reserved_8_10 : 3; - uint64_t i0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read instructions. */ - uint64_t reserved_4_6 : 3; - uint64_t po0_2sml : 1; /**< The packet being sent out on Port0 is smaller - than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */ - uint64_t pci_rsl : 1; /**< This '1' when a bit in PCI_INT_SUM2 is SET and the - corresponding bit in the PCI_INT_ENB2 is SET. */ - uint64_t rml_wto : 1; /**< Set '1' when the RML does not receive a commit - back from a RSL after sending a write command to - a RSL. */ - uint64_t rml_rto : 1; /**< Set '1' when the RML does not receive read data - back from a RSL after sending a read command to - a RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t reserved_4_6 : 3; - uint64_t i0_rtout : 1; - uint64_t reserved_8_10 : 3; - uint64_t i0_overf : 1; - uint64_t reserved_12_14 : 3; - uint64_t p0_rtout : 1; - uint64_t reserved_16_18 : 3; - uint64_t p0_perr : 1; - uint64_t reserved_20_22 : 3; - uint64_t g0_rtout : 1; - uint64_t reserved_24_26 : 3; - uint64_t p0_pperr : 1; - uint64_t reserved_28_30 : 3; - uint64_t p0_ptout : 1; - uint64_t reserved_32_34 : 3; - uint64_t i0_pperr : 1; - uint64_t reserved_36_38 : 3; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } cn30xx; - struct cvmx_npi_int_sum_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t q1_a_f : 1; /**< Attempted to add when Queue-1 FIFO is full. */ - uint64_t q1_s_e : 1; /**< Attempted to subtract when Queue-1 FIFO is empty. */ - uint64_t pdf_p_f : 1; /**< Attempted to push a full PCN-DATA-FIFO. */ - uint64_t pdf_p_e : 1; /**< Attempted to pop an empty PCN-DATA-FIFO. */ - uint64_t pcf_p_f : 1; /**< Attempted to push a full PCN-CNT-FIFO. */ - uint64_t pcf_p_e : 1; /**< Attempted to pop an empty PCN-CNT-FIFO. */ - uint64_t rdx_s_e : 1; /**< Attempted to subtract when DPI-XFR-Wait count is 0. */ - uint64_t rwx_s_e : 1; /**< Attempted to subtract when RDN-XFR-Wait count is 0. */ - uint64_t pnc_a_f : 1; /**< Attempted to add when PNI-NPI Credits are max. */ - uint64_t pnc_s_e : 1; /**< Attempted to subtract when PNI-NPI Credits are 0. */ - uint64_t com_a_f : 1; /**< Attempted to add when PCN-Commit Counter is max. */ - uint64_t com_s_e : 1; /**< Attempted to subtract when PCN-Commit Counter is 0. */ - uint64_t q3_a_f : 1; /**< Attempted to add when Queue-3 FIFO is full. */ - uint64_t q3_s_e : 1; /**< Attempted to subtract when Queue-3 FIFO is empty. */ - uint64_t q2_a_f : 1; /**< Attempted to add when Queue-2 FIFO is full. */ - uint64_t q2_s_e : 1; /**< Attempted to subtract when Queue-2 FIFO is empty. */ - uint64_t pcr_a_f : 1; /**< Attempted to add when POW Credits is full. */ - uint64_t pcr_s_e : 1; /**< Attempted to subtract when POW Credits is empty. */ - uint64_t fcr_a_f : 1; /**< Attempted to add when FPA Credits is full. */ - uint64_t fcr_s_e : 1; /**< Attempted to subtract when FPA Credits is empty. */ - uint64_t iobdma : 1; /**< Requested IOBDMA read size exceeded 128 words. */ - uint64_t p_dperr : 1; /**< If a parity error occured on data written to L2C - from the PCI this bit may be set. */ - uint64_t win_rto : 1; /**< Windowed Load Timed Out. */ - uint64_t reserved_37_38 : 2; - uint64_t i1_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i0_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t reserved_33_34 : 2; - uint64_t p1_ptout : 1; /**< Port-1 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p0_ptout : 1; /**< Port-0 output had a read timeout on a DATA/INFO - pair. */ - uint64_t reserved_29_30 : 2; - uint64_t p1_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p0_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t reserved_25_26 : 2; - uint64_t g1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read a gather list. */ - uint64_t g0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read a gather list. */ - uint64_t reserved_21_22 : 2; - uint64_t p1_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p0_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t reserved_17_18 : 2; - uint64_t p1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read packet data. */ - uint64_t p0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read packet data. */ - uint64_t reserved_13_14 : 2; - uint64_t i1_overf : 1; /**< Port-1 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i0_overf : 1; /**< Port-0 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t reserved_9_10 : 2; - uint64_t i1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read instructions. */ - uint64_t i0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read instructions. */ - uint64_t reserved_5_6 : 2; - uint64_t po1_2sml : 1; /**< The packet being sent out on Port1 is smaller - than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */ - uint64_t po0_2sml : 1; /**< The packet being sent out on Port0 is smaller - than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */ - uint64_t pci_rsl : 1; /**< This '1' when a bit in PCI_INT_SUM2 is SET and the - corresponding bit in the PCI_INT_ENB2 is SET. */ - uint64_t rml_wto : 1; /**< Set '1' when the RML does not receive a commit - back from a RSL after sending a write command to - a RSL. */ - uint64_t rml_rto : 1; /**< Set '1' when the RML does not receive read data - back from a RSL after sending a read command to - a RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t reserved_5_6 : 2; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t reserved_9_10 : 2; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t reserved_13_14 : 2; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t reserved_17_18 : 2; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t reserved_21_22 : 2; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t reserved_25_26 : 2; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t reserved_29_30 : 2; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t reserved_33_34 : 2; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t reserved_37_38 : 2; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t fcr_s_e : 1; - uint64_t fcr_a_f : 1; - uint64_t pcr_s_e : 1; - uint64_t pcr_a_f : 1; - uint64_t q2_s_e : 1; - uint64_t q2_a_f : 1; - uint64_t q3_s_e : 1; - uint64_t q3_a_f : 1; - uint64_t com_s_e : 1; - uint64_t com_a_f : 1; - uint64_t pnc_s_e : 1; - uint64_t pnc_a_f : 1; - uint64_t rwx_s_e : 1; - uint64_t rdx_s_e : 1; - uint64_t pcf_p_e : 1; - uint64_t pcf_p_f : 1; - uint64_t pdf_p_e : 1; - uint64_t pdf_p_f : 1; - uint64_t q1_s_e : 1; - uint64_t q1_a_f : 1; - uint64_t reserved_62_63 : 2; -#endif - } cn31xx; - struct cvmx_npi_int_sum_s cn38xx; - struct cvmx_npi_int_sum_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_42_63 : 22; - uint64_t iobdma : 1; /**< Requested IOBDMA read size exceeded 128 words. */ - uint64_t p_dperr : 1; /**< If a parity error occured on data written to L2C - from the PCI this bit may be set. */ - uint64_t win_rto : 1; /**< Windowed Load Timed Out. */ - uint64_t i3_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i2_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i1_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t i0_pperr : 1; /**< If a parity error occured on the port's instruction - this bit may be set. */ - uint64_t p3_ptout : 1; /**< Port-3 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p2_ptout : 1; /**< Port-2 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p1_ptout : 1; /**< Port-1 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p0_ptout : 1; /**< Port-0 output had a read timeout on a DATA/INFO - pair. */ - uint64_t p3_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p2_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p1_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t p0_pperr : 1; /**< If a parity error occured on the port DATA/INFO - pointer-pair, this bit may be set. */ - uint64_t g3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read a gather list. */ - uint64_t g2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read a gather list. */ - uint64_t g1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read a gather list. */ - uint64_t g0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read a gather list. */ - uint64_t p3_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p2_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p1_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p0_perr : 1; /**< If a parity error occured on the port's packet - data this bit may be set. */ - uint64_t p3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read packet data. */ - uint64_t p2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read packet data. */ - uint64_t p1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read packet data. */ - uint64_t p0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read packet data. */ - uint64_t i3_overf : 1; /**< Port-3 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i2_overf : 1; /**< Port-2 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i1_overf : 1; /**< Port-1 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i0_overf : 1; /**< Port-0 had a doorbell overflow. Bit[31] of the - doorbell count was set. */ - uint64_t i3_rtout : 1; /**< Port-3 had a read timeout while attempting to - read instructions. */ - uint64_t i2_rtout : 1; /**< Port-2 had a read timeout while attempting to - read instructions. */ - uint64_t i1_rtout : 1; /**< Port-1 had a read timeout while attempting to - read instructions. */ - uint64_t i0_rtout : 1; /**< Port-0 had a read timeout while attempting to - read instructions. */ - uint64_t po3_2sml : 1; /**< The packet being sent out on Port3 is smaller - than the NPI_BUFF_SIZE_OUTPUT3[ISIZE] field. */ - uint64_t po2_2sml : 1; /**< The packet being sent out on Port2 is smaller - than the NPI_BUFF_SIZE_OUTPUT2[ISIZE] field. */ - uint64_t po1_2sml : 1; /**< The packet being sent out on Port1 is smaller - than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */ - uint64_t po0_2sml : 1; /**< The packet being sent out on Port0 is smaller - than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */ - uint64_t pci_rsl : 1; /**< This '1' when a bit in PCI_INT_SUM2 is SET and the - corresponding bit in the PCI_INT_ENB2 is SET. */ - uint64_t rml_wto : 1; /**< Set '1' when the RML does not receive a commit - back from a RSL after sending a write command to - a RSL. */ - uint64_t rml_rto : 1; /**< Set '1' when the RML does not receive read data - back from a RSL after sending a read command to - a RSL. */ -#else - uint64_t rml_rto : 1; - uint64_t rml_wto : 1; - uint64_t pci_rsl : 1; - uint64_t po0_2sml : 1; - uint64_t po1_2sml : 1; - uint64_t po2_2sml : 1; - uint64_t po3_2sml : 1; - uint64_t i0_rtout : 1; - uint64_t i1_rtout : 1; - uint64_t i2_rtout : 1; - uint64_t i3_rtout : 1; - uint64_t i0_overf : 1; - uint64_t i1_overf : 1; - uint64_t i2_overf : 1; - uint64_t i3_overf : 1; - uint64_t p0_rtout : 1; - uint64_t p1_rtout : 1; - uint64_t p2_rtout : 1; - uint64_t p3_rtout : 1; - uint64_t p0_perr : 1; - uint64_t p1_perr : 1; - uint64_t p2_perr : 1; - uint64_t p3_perr : 1; - uint64_t g0_rtout : 1; - uint64_t g1_rtout : 1; - uint64_t g2_rtout : 1; - uint64_t g3_rtout : 1; - uint64_t p0_pperr : 1; - uint64_t p1_pperr : 1; - uint64_t p2_pperr : 1; - uint64_t p3_pperr : 1; - uint64_t p0_ptout : 1; - uint64_t p1_ptout : 1; - uint64_t p2_ptout : 1; - uint64_t p3_ptout : 1; - uint64_t i0_pperr : 1; - uint64_t i1_pperr : 1; - uint64_t i2_pperr : 1; - uint64_t i3_pperr : 1; - uint64_t win_rto : 1; - uint64_t p_dperr : 1; - uint64_t iobdma : 1; - uint64_t reserved_42_63 : 22; -#endif - } cn38xxp2; - struct cvmx_npi_int_sum_cn31xx cn50xx; - struct cvmx_npi_int_sum_s cn58xx; - struct cvmx_npi_int_sum_s cn58xxp1; -} cvmx_npi_int_sum_t; - - -/** - * cvmx_npi_lowp_dbell - * - * NPI_LOWP_DBELL = Low Priority Door Bell - * - * The door bell register for the low priority DMA queue. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_lowp_dbell_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dbell : 16; /**< The value written to this register is added to the - number of 8byte words to be read and processes for - the low priority dma queue. */ -#else - uint64_t dbell : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_npi_lowp_dbell_s cn30xx; - struct cvmx_npi_lowp_dbell_s cn31xx; - struct cvmx_npi_lowp_dbell_s cn38xx; - struct cvmx_npi_lowp_dbell_s cn38xxp2; - struct cvmx_npi_lowp_dbell_s cn50xx; - struct cvmx_npi_lowp_dbell_s cn58xx; - struct cvmx_npi_lowp_dbell_s cn58xxp1; -} cvmx_npi_lowp_dbell_t; - - -/** - * cvmx_npi_lowp_ibuff_saddr - * - * NPI_LOWP_IBUFF_SADDR = DMA Low Priority's Instruction Buffer Starting Address - * - * The address to start reading Instructions from for LOWP. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_lowp_ibuff_saddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t saddr : 36; /**< The starting address to read the first instruction. */ -#else - uint64_t saddr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_npi_lowp_ibuff_saddr_s cn30xx; - struct cvmx_npi_lowp_ibuff_saddr_s cn31xx; - struct cvmx_npi_lowp_ibuff_saddr_s cn38xx; - struct cvmx_npi_lowp_ibuff_saddr_s cn38xxp2; - struct cvmx_npi_lowp_ibuff_saddr_s cn50xx; - struct cvmx_npi_lowp_ibuff_saddr_s cn58xx; - struct cvmx_npi_lowp_ibuff_saddr_s cn58xxp1; -} cvmx_npi_lowp_ibuff_saddr_t; - - -/** - * cvmx_npi_mem_access_subid# - * - * NPI_MEM_ACCESS_SUBID3 = Memory Access SubId 3Register - * - * Carries Read/Write parameters for PP access to PCI memory that use NPI SubId3. - * Writes to this register are not ordered with writes/reads to the PCI Memory space. - * To ensure that a write has completed the user must read the register before - * making an access(i.e. PCI memory space) that requires the value of this register to be updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_mem_access_subidx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t shortl : 1; /**< Generate CMD-6 on PCI(x) when '1'. - Loads from the cores to the corresponding subid - that are 32-bits or smaller: - - Will generate the PCI-X "Memory Read DWORD" - command in PCI-X mode. (Note that "Memory - Read DWORD" appears much like an IO read on - the PCI-X bus.) - - Will generate the PCI "Memory Read" command - in PCI-X mode, irrespective of the - NPI_PCI_READ_CMD[CMD_SIZE] value. - NOT IN PASS 1 NOR PASS 2 */ - uint64_t nmerge : 1; /**< No Merge. (NOT IN PASS 1 NOR PASS 2) */ - uint64_t esr : 2; /**< Endian-Swap on read. */ - uint64_t esw : 2; /**< Endian-Swap on write. */ - uint64_t nsr : 1; /**< No-Snoop on read. */ - uint64_t nsw : 1; /**< No-Snoop on write. */ - uint64_t ror : 1; /**< Relax Read on read. */ - uint64_t row : 1; /**< Relax Order on write. */ - uint64_t ba : 28; /**< PCI Address bits [63:36]. */ -#else - uint64_t ba : 28; - uint64_t row : 1; - uint64_t ror : 1; - uint64_t nsw : 1; - uint64_t nsr : 1; - uint64_t esw : 2; - uint64_t esr : 2; - uint64_t nmerge : 1; - uint64_t shortl : 1; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_npi_mem_access_subidx_s cn30xx; - struct cvmx_npi_mem_access_subidx_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t esr : 2; /**< Endian-Swap on read. */ - uint64_t esw : 2; /**< Endian-Swap on write. */ - uint64_t nsr : 1; /**< No-Snoop on read. */ - uint64_t nsw : 1; /**< No-Snoop on write. */ - uint64_t ror : 1; /**< Relax Read on read. */ - uint64_t row : 1; /**< Relax Order on write. */ - uint64_t ba : 28; /**< PCI Address bits [63:36]. */ -#else - uint64_t ba : 28; - uint64_t row : 1; - uint64_t ror : 1; - uint64_t nsw : 1; - uint64_t nsr : 1; - uint64_t esw : 2; - uint64_t esr : 2; - uint64_t reserved_36_63 : 28; -#endif - } cn31xx; - struct cvmx_npi_mem_access_subidx_s cn38xx; - struct cvmx_npi_mem_access_subidx_cn31xx cn38xxp2; - struct cvmx_npi_mem_access_subidx_s cn50xx; - struct cvmx_npi_mem_access_subidx_s cn58xx; - struct cvmx_npi_mem_access_subidx_s cn58xxp1; -} cvmx_npi_mem_access_subidx_t; - - -/** - * cvmx_npi_msi_rcv - * - * NPI_MSI_RCV = NPI MSI Receive Vector Register - * - * A bit is set in this register relative to the vector received during a MSI. And cleared by a W1 to the register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_msi_rcv_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t int_vec : 64; /**< Refer to PCI_MSI_RCV */ -#else - uint64_t int_vec : 64; -#endif - } s; - struct cvmx_npi_msi_rcv_s cn30xx; - struct cvmx_npi_msi_rcv_s cn31xx; - struct cvmx_npi_msi_rcv_s cn38xx; - struct cvmx_npi_msi_rcv_s cn38xxp2; - struct cvmx_npi_msi_rcv_s cn50xx; - struct cvmx_npi_msi_rcv_s cn58xx; - struct cvmx_npi_msi_rcv_s cn58xxp1; -} cvmx_npi_msi_rcv_t; - - -/** - * cvmx_npi_num_desc_output# - * - * NUM_DESC_OUTPUT0 = Number Of Descriptors Available For Output 0 - * - * The size of the Buffer/Info Pointer Pair ring for Output-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_num_desc_outputx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t size : 32; /**< The size of the Buffer/Info Pointer Pair ring. */ -#else - uint64_t size : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npi_num_desc_outputx_s cn30xx; - struct cvmx_npi_num_desc_outputx_s cn31xx; - struct cvmx_npi_num_desc_outputx_s cn38xx; - struct cvmx_npi_num_desc_outputx_s cn38xxp2; - struct cvmx_npi_num_desc_outputx_s cn50xx; - struct cvmx_npi_num_desc_outputx_s cn58xx; - struct cvmx_npi_num_desc_outputx_s cn58xxp1; -} cvmx_npi_num_desc_outputx_t; - - -/** - * cvmx_npi_output_control - * - * NPI_OUTPUT_CONTROL = NPI's Output Control Register - * - * The address to start reading Instructions from for Output-3. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_output_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t pkt_rr : 1; /**< When set '1' the output packet selection will be - made with a Round Robin arbitration. When '0' - the output packet port is fixed in priority, - where the lower port number has higher priority. - PASS3 Field */ - uint64_t p3_bmode : 1; /**< When set '1' PCI_PKTS_SENT3 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p2_bmode : 1; /**< When set '1' PCI_PKTS_SENT2 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p1_bmode : 1; /**< When set '1' PCI_PKTS_SENT1 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p0_bmode : 1; /**< When set '1' PCI_PKTS_SENT0 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t o3_es : 2; /**< Endian Swap for Output3 Data. */ - uint64_t o3_ns : 1; /**< NoSnoop Enable for Output3 Data. */ - uint64_t o3_ro : 1; /**< Relaxed Ordering Enable for Output3 Data. */ - uint64_t o2_es : 2; /**< Endian Swap for Output2 Data. */ - uint64_t o2_ns : 1; /**< NoSnoop Enable for Output2 Data. */ - uint64_t o2_ro : 1; /**< Relaxed Ordering Enable for Output2 Data. */ - uint64_t o1_es : 2; /**< Endian Swap for Output1 Data. */ - uint64_t o1_ns : 1; /**< NoSnoop Enable for Output1 Data. */ - uint64_t o1_ro : 1; /**< Relaxed Ordering Enable for Output1 Data. */ - uint64_t o0_es : 2; /**< Endian Swap for Output0 Data. */ - uint64_t o0_ns : 1; /**< NoSnoop Enable for Output0 Data. */ - uint64_t o0_ro : 1; /**< Relaxed Ordering Enable for Output0 Data. */ - uint64_t o3_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O3_ES, - O3_NS, O3_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O3_ES[1:0], O3_NS, O3_RO. For Output Port-3. */ - uint64_t o2_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O2_ES, - O2_NS, O2_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O2_ES[1:0], O2_NS, O2_RO. For Output Port-2. */ - uint64_t o1_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O1_ES, - O1_NS, O1_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */ - uint64_t o0_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */ - uint64_t reserved_20_23 : 4; - uint64_t iptr_o3 : 1; /**< Uses the Info-Pointer to store length and data - for output-3. */ - uint64_t iptr_o2 : 1; /**< Uses the Info-Pointer to store length and data - for output-2. */ - uint64_t iptr_o1 : 1; /**< Uses the Info-Pointer to store length and data - for output-1. */ - uint64_t iptr_o0 : 1; /**< Uses the Info-Pointer to store length and data - for output-0. */ - uint64_t esr_sl3 : 2; /**< The Endian-Swap-Mode for Slist3 reads. */ - uint64_t nsr_sl3 : 1; /**< Enables '1' NoSnoop for Slist3 reads. */ - uint64_t ror_sl3 : 1; /**< Enables '1' Relaxed Ordering for Slist3 reads. */ - uint64_t esr_sl2 : 2; /**< The Endian-Swap-Mode for Slist2 reads. */ - uint64_t nsr_sl2 : 1; /**< Enables '1' NoSnoop for Slist2 reads. */ - uint64_t ror_sl2 : 1; /**< Enables '1' Relaxed Ordering for Slist2 reads. */ - uint64_t esr_sl1 : 2; /**< The Endian-Swap-Mode for Slist1 reads. */ - uint64_t nsr_sl1 : 1; /**< Enables '1' NoSnoop for Slist1 reads. */ - uint64_t ror_sl1 : 1; /**< Enables '1' Relaxed Ordering for Slist1 reads. */ - uint64_t esr_sl0 : 2; /**< The Endian-Swap-Mode for Slist0 reads. */ - uint64_t nsr_sl0 : 1; /**< Enables '1' NoSnoop for Slist0 reads. */ - uint64_t ror_sl0 : 1; /**< Enables '1' Relaxed Ordering for Slist0 reads. */ -#else - uint64_t ror_sl0 : 1; - uint64_t nsr_sl0 : 1; - uint64_t esr_sl0 : 2; - uint64_t ror_sl1 : 1; - uint64_t nsr_sl1 : 1; - uint64_t esr_sl1 : 2; - uint64_t ror_sl2 : 1; - uint64_t nsr_sl2 : 1; - uint64_t esr_sl2 : 2; - uint64_t ror_sl3 : 1; - uint64_t nsr_sl3 : 1; - uint64_t esr_sl3 : 2; - uint64_t iptr_o0 : 1; - uint64_t iptr_o1 : 1; - uint64_t iptr_o2 : 1; - uint64_t iptr_o3 : 1; - uint64_t reserved_20_23 : 4; - uint64_t o0_csrm : 1; - uint64_t o1_csrm : 1; - uint64_t o2_csrm : 1; - uint64_t o3_csrm : 1; - uint64_t o0_ro : 1; - uint64_t o0_ns : 1; - uint64_t o0_es : 2; - uint64_t o1_ro : 1; - uint64_t o1_ns : 1; - uint64_t o1_es : 2; - uint64_t o2_ro : 1; - uint64_t o2_ns : 1; - uint64_t o2_es : 2; - uint64_t o3_ro : 1; - uint64_t o3_ns : 1; - uint64_t o3_es : 2; - uint64_t p0_bmode : 1; - uint64_t p1_bmode : 1; - uint64_t p2_bmode : 1; - uint64_t p3_bmode : 1; - uint64_t pkt_rr : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_npi_output_control_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_45_63 : 19; - uint64_t p0_bmode : 1; /**< When set '1' PCI_PKTS_SENT0 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t reserved_32_43 : 12; - uint64_t o0_es : 2; /**< Endian Swap for Output0 Data. */ - uint64_t o0_ns : 1; /**< NoSnoop Enable for Output0 Data. */ - uint64_t o0_ro : 1; /**< Relaxed Ordering Enable for Output0 Data. */ - uint64_t reserved_25_27 : 3; - uint64_t o0_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */ - uint64_t reserved_17_23 : 7; - uint64_t iptr_o0 : 1; /**< Uses the Info-Pointer to store length and data - for output-0. */ - uint64_t reserved_4_15 : 12; - uint64_t esr_sl0 : 2; /**< The Endian-Swap-Mode for Slist0 reads. */ - uint64_t nsr_sl0 : 1; /**< Enables '1' NoSnoop for Slist0 reads. */ - uint64_t ror_sl0 : 1; /**< Enables '1' Relaxed Ordering for Slist0 reads. */ -#else - uint64_t ror_sl0 : 1; - uint64_t nsr_sl0 : 1; - uint64_t esr_sl0 : 2; - uint64_t reserved_4_15 : 12; - uint64_t iptr_o0 : 1; - uint64_t reserved_17_23 : 7; - uint64_t o0_csrm : 1; - uint64_t reserved_25_27 : 3; - uint64_t o0_ro : 1; - uint64_t o0_ns : 1; - uint64_t o0_es : 2; - uint64_t reserved_32_43 : 12; - uint64_t p0_bmode : 1; - uint64_t reserved_45_63 : 19; -#endif - } cn30xx; - struct cvmx_npi_output_control_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_46_63 : 18; - uint64_t p1_bmode : 1; /**< When set '1' PCI_PKTS_SENT1 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p0_bmode : 1; /**< When set '1' PCI_PKTS_SENT0 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t reserved_36_43 : 8; - uint64_t o1_es : 2; /**< Endian Swap for Output1 Data. */ - uint64_t o1_ns : 1; /**< NoSnoop Enable for Output1 Data. */ - uint64_t o1_ro : 1; /**< Relaxed Ordering Enable for Output1 Data. */ - uint64_t o0_es : 2; /**< Endian Swap for Output0 Data. */ - uint64_t o0_ns : 1; /**< NoSnoop Enable for Output0 Data. */ - uint64_t o0_ro : 1; /**< Relaxed Ordering Enable for Output0 Data. */ - uint64_t reserved_26_27 : 2; - uint64_t o1_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O1_ES, - O1_NS, O1_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */ - uint64_t o0_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */ - uint64_t reserved_18_23 : 6; - uint64_t iptr_o1 : 1; /**< Uses the Info-Pointer to store length and data - for output-1. */ - uint64_t iptr_o0 : 1; /**< Uses the Info-Pointer to store length and data - for output-0. */ - uint64_t reserved_8_15 : 8; - uint64_t esr_sl1 : 2; /**< The Endian-Swap-Mode for Slist1 reads. */ - uint64_t nsr_sl1 : 1; /**< Enables '1' NoSnoop for Slist1 reads. */ - uint64_t ror_sl1 : 1; /**< Enables '1' Relaxed Ordering for Slist1 reads. */ - uint64_t esr_sl0 : 2; /**< The Endian-Swap-Mode for Slist0 reads. */ - uint64_t nsr_sl0 : 1; /**< Enables '1' NoSnoop for Slist0 reads. */ - uint64_t ror_sl0 : 1; /**< Enables '1' Relaxed Ordering for Slist0 reads. */ -#else - uint64_t ror_sl0 : 1; - uint64_t nsr_sl0 : 1; - uint64_t esr_sl0 : 2; - uint64_t ror_sl1 : 1; - uint64_t nsr_sl1 : 1; - uint64_t esr_sl1 : 2; - uint64_t reserved_8_15 : 8; - uint64_t iptr_o0 : 1; - uint64_t iptr_o1 : 1; - uint64_t reserved_18_23 : 6; - uint64_t o0_csrm : 1; - uint64_t o1_csrm : 1; - uint64_t reserved_26_27 : 2; - uint64_t o0_ro : 1; - uint64_t o0_ns : 1; - uint64_t o0_es : 2; - uint64_t o1_ro : 1; - uint64_t o1_ns : 1; - uint64_t o1_es : 2; - uint64_t reserved_36_43 : 8; - uint64_t p0_bmode : 1; - uint64_t p1_bmode : 1; - uint64_t reserved_46_63 : 18; -#endif - } cn31xx; - struct cvmx_npi_output_control_s cn38xx; - struct cvmx_npi_output_control_cn38xxp2 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t p3_bmode : 1; /**< When set '1' PCI_PKTS_SENT3 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p2_bmode : 1; /**< When set '1' PCI_PKTS_SENT2 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p1_bmode : 1; /**< When set '1' PCI_PKTS_SENT1 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p0_bmode : 1; /**< When set '1' PCI_PKTS_SENT0 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t o3_es : 2; /**< Endian Swap for Output3 Data. */ - uint64_t o3_ns : 1; /**< NoSnoop Enable for Output3 Data. */ - uint64_t o3_ro : 1; /**< Relaxed Ordering Enable for Output3 Data. */ - uint64_t o2_es : 2; /**< Endian Swap for Output2 Data. */ - uint64_t o2_ns : 1; /**< NoSnoop Enable for Output2 Data. */ - uint64_t o2_ro : 1; /**< Relaxed Ordering Enable for Output2 Data. */ - uint64_t o1_es : 2; /**< Endian Swap for Output1 Data. */ - uint64_t o1_ns : 1; /**< NoSnoop Enable for Output1 Data. */ - uint64_t o1_ro : 1; /**< Relaxed Ordering Enable for Output1 Data. */ - uint64_t o0_es : 2; /**< Endian Swap for Output0 Data. */ - uint64_t o0_ns : 1; /**< NoSnoop Enable for Output0 Data. */ - uint64_t o0_ro : 1; /**< Relaxed Ordering Enable for Output0 Data. */ - uint64_t o3_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O3_ES, - O3_NS, O3_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O3_ES[1:0], O3_NS, O3_RO. For Output Port-3. */ - uint64_t o2_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O2_ES, - O2_NS, O2_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O2_ES[1:0], O2_NS, O2_RO. For Output Port-2. */ - uint64_t o1_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O1_ES, - O1_NS, O1_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */ - uint64_t o0_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */ - uint64_t reserved_20_23 : 4; - uint64_t iptr_o3 : 1; /**< Uses the Info-Pointer to store length and data - for output-3. */ - uint64_t iptr_o2 : 1; /**< Uses the Info-Pointer to store length and data - for output-2. */ - uint64_t iptr_o1 : 1; /**< Uses the Info-Pointer to store length and data - for output-1. */ - uint64_t iptr_o0 : 1; /**< Uses the Info-Pointer to store length and data - for output-0. */ - uint64_t esr_sl3 : 2; /**< The Endian-Swap-Mode for Slist3 reads. */ - uint64_t nsr_sl3 : 1; /**< Enables '1' NoSnoop for Slist3 reads. */ - uint64_t ror_sl3 : 1; /**< Enables '1' Relaxed Ordering for Slist3 reads. */ - uint64_t esr_sl2 : 2; /**< The Endian-Swap-Mode for Slist2 reads. */ - uint64_t nsr_sl2 : 1; /**< Enables '1' NoSnoop for Slist2 reads. */ - uint64_t ror_sl2 : 1; /**< Enables '1' Relaxed Ordering for Slist2 reads. */ - uint64_t esr_sl1 : 2; /**< The Endian-Swap-Mode for Slist1 reads. */ - uint64_t nsr_sl1 : 1; /**< Enables '1' NoSnoop for Slist1 reads. */ - uint64_t ror_sl1 : 1; /**< Enables '1' Relaxed Ordering for Slist1 reads. */ - uint64_t esr_sl0 : 2; /**< The Endian-Swap-Mode for Slist0 reads. */ - uint64_t nsr_sl0 : 1; /**< Enables '1' NoSnoop for Slist0 reads. */ - uint64_t ror_sl0 : 1; /**< Enables '1' Relaxed Ordering for Slist0 reads. */ -#else - uint64_t ror_sl0 : 1; - uint64_t nsr_sl0 : 1; - uint64_t esr_sl0 : 2; - uint64_t ror_sl1 : 1; - uint64_t nsr_sl1 : 1; - uint64_t esr_sl1 : 2; - uint64_t ror_sl2 : 1; - uint64_t nsr_sl2 : 1; - uint64_t esr_sl2 : 2; - uint64_t ror_sl3 : 1; - uint64_t nsr_sl3 : 1; - uint64_t esr_sl3 : 2; - uint64_t iptr_o0 : 1; - uint64_t iptr_o1 : 1; - uint64_t iptr_o2 : 1; - uint64_t iptr_o3 : 1; - uint64_t reserved_20_23 : 4; - uint64_t o0_csrm : 1; - uint64_t o1_csrm : 1; - uint64_t o2_csrm : 1; - uint64_t o3_csrm : 1; - uint64_t o0_ro : 1; - uint64_t o0_ns : 1; - uint64_t o0_es : 2; - uint64_t o1_ro : 1; - uint64_t o1_ns : 1; - uint64_t o1_es : 2; - uint64_t o2_ro : 1; - uint64_t o2_ns : 1; - uint64_t o2_es : 2; - uint64_t o3_ro : 1; - uint64_t o3_ns : 1; - uint64_t o3_es : 2; - uint64_t p0_bmode : 1; - uint64_t p1_bmode : 1; - uint64_t p2_bmode : 1; - uint64_t p3_bmode : 1; - uint64_t reserved_48_63 : 16; -#endif - } cn38xxp2; - struct cvmx_npi_output_control_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t pkt_rr : 1; /**< When set '1' the output packet selection will be - made with a Round Robin arbitration. When '0' - the output packet port is fixed in priority, - where the lower port number has higher priority. - PASS2 Field */ - uint64_t reserved_46_47 : 2; - uint64_t p1_bmode : 1; /**< When set '1' PCI_PKTS_SENT1 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t p0_bmode : 1; /**< When set '1' PCI_PKTS_SENT0 register will be - updated with the number of bytes in the packet - sent, when '0' the register will have a value - of '1' added. */ - uint64_t reserved_36_43 : 8; - uint64_t o1_es : 2; /**< Endian Swap for Output1 Data. */ - uint64_t o1_ns : 1; /**< NoSnoop Enable for Output1 Data. */ - uint64_t o1_ro : 1; /**< Relaxed Ordering Enable for Output1 Data. */ - uint64_t o0_es : 2; /**< Endian Swap for Output0 Data. */ - uint64_t o0_ns : 1; /**< NoSnoop Enable for Output0 Data. */ - uint64_t o0_ro : 1; /**< Relaxed Ordering Enable for Output0 Data. */ - uint64_t reserved_26_27 : 2; - uint64_t o1_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O1_ES, - O1_NS, O1_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */ - uint64_t o0_csrm : 1; /**< When '1' the address[63:60] to write packet data, - comes from the DPTR[63:60] in the scatter-list pair, - and the RO, NS, ES values come from the O0_ES, - O0_NS, O0_RO. When '0' the RO == DPTR[60], - NS == DPTR[61], ES == DPTR[63:62], the address the - packet will be written to is ADDR[63:60] == - O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */ - uint64_t reserved_18_23 : 6; - uint64_t iptr_o1 : 1; /**< Uses the Info-Pointer to store length and data - for output-1. */ - uint64_t iptr_o0 : 1; /**< Uses the Info-Pointer to store length and data - for output-0. */ - uint64_t reserved_8_15 : 8; - uint64_t esr_sl1 : 2; /**< The Endian-Swap-Mode for Slist1 reads. */ - uint64_t nsr_sl1 : 1; /**< Enables '1' NoSnoop for Slist1 reads. */ - uint64_t ror_sl1 : 1; /**< Enables '1' Relaxed Ordering for Slist1 reads. */ - uint64_t esr_sl0 : 2; /**< The Endian-Swap-Mode for Slist0 reads. */ - uint64_t nsr_sl0 : 1; /**< Enables '1' NoSnoop for Slist0 reads. */ - uint64_t ror_sl0 : 1; /**< Enables '1' Relaxed Ordering for Slist0 reads. */ -#else - uint64_t ror_sl0 : 1; - uint64_t nsr_sl0 : 1; - uint64_t esr_sl0 : 2; - uint64_t ror_sl1 : 1; - uint64_t nsr_sl1 : 1; - uint64_t esr_sl1 : 2; - uint64_t reserved_8_15 : 8; - uint64_t iptr_o0 : 1; - uint64_t iptr_o1 : 1; - uint64_t reserved_18_23 : 6; - uint64_t o0_csrm : 1; - uint64_t o1_csrm : 1; - uint64_t reserved_26_27 : 2; - uint64_t o0_ro : 1; - uint64_t o0_ns : 1; - uint64_t o0_es : 2; - uint64_t o1_ro : 1; - uint64_t o1_ns : 1; - uint64_t o1_es : 2; - uint64_t reserved_36_43 : 8; - uint64_t p0_bmode : 1; - uint64_t p1_bmode : 1; - uint64_t reserved_46_47 : 2; - uint64_t pkt_rr : 1; - uint64_t reserved_49_63 : 15; -#endif - } cn50xx; - struct cvmx_npi_output_control_s cn58xx; - struct cvmx_npi_output_control_s cn58xxp1; -} cvmx_npi_output_control_t; - - -/** - * cvmx_npi_p#_dbpair_addr - * - * NPI_P0_DBPAIR_ADDR = NPI's Port-0 DATA-BUFFER Pair Next Read Address. - * - * Contains the next address to read for Port's-0 Data/Buffer Pair. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_px_dbpair_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_63_63 : 1; - uint64_t state : 2; /**< POS state machine vector. Used to tell when NADDR - is valid (when STATE == 0). */ - uint64_t naddr : 61; /**< Bits [63:3] of the next Data-Info Pair to read. - Value is only valid when STATE == 0. */ -#else - uint64_t naddr : 61; - uint64_t state : 2; - uint64_t reserved_63_63 : 1; -#endif - } s; - struct cvmx_npi_px_dbpair_addr_s cn30xx; - struct cvmx_npi_px_dbpair_addr_s cn31xx; - struct cvmx_npi_px_dbpair_addr_s cn38xx; - struct cvmx_npi_px_dbpair_addr_s cn38xxp2; - struct cvmx_npi_px_dbpair_addr_s cn50xx; - struct cvmx_npi_px_dbpair_addr_s cn58xx; - struct cvmx_npi_px_dbpair_addr_s cn58xxp1; -} cvmx_npi_px_dbpair_addr_t; - - -/** - * cvmx_npi_p#_instr_addr - * - * NPI_P0_INSTR_ADDR = NPI's Port-0 Instruction Next Read Address. - * - * Contains the next address to read for Port's-0 Instructions. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_px_instr_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t state : 3; /**< Gather engine state vector. Used to tell when - NADDR is valid (when STATE == 0). */ - uint64_t naddr : 61; /**< Bits [63:3] of the next Instruction to read. - Value is only valid when STATE == 0. */ -#else - uint64_t naddr : 61; - uint64_t state : 3; -#endif - } s; - struct cvmx_npi_px_instr_addr_s cn30xx; - struct cvmx_npi_px_instr_addr_s cn31xx; - struct cvmx_npi_px_instr_addr_s cn38xx; - struct cvmx_npi_px_instr_addr_s cn38xxp2; - struct cvmx_npi_px_instr_addr_s cn50xx; - struct cvmx_npi_px_instr_addr_s cn58xx; - struct cvmx_npi_px_instr_addr_s cn58xxp1; -} cvmx_npi_px_instr_addr_t; - - -/** - * cvmx_npi_p#_instr_cnts - * - * NPI_P0_INSTR_CNTS = NPI's Port-0 Instruction Counts For Packets In. - * - * Used to determine the number of instruction in the NPI and to be fetched for Input-Packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_px_instr_cnts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t fcnt : 6; /**< Number entries in the Instruction FIFO. */ - uint64_t avail : 32; /**< Doorbell count to be read. */ -#else - uint64_t avail : 32; - uint64_t fcnt : 6; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_npi_px_instr_cnts_s cn30xx; - struct cvmx_npi_px_instr_cnts_s cn31xx; - struct cvmx_npi_px_instr_cnts_s cn38xx; - struct cvmx_npi_px_instr_cnts_s cn38xxp2; - struct cvmx_npi_px_instr_cnts_s cn50xx; - struct cvmx_npi_px_instr_cnts_s cn58xx; - struct cvmx_npi_px_instr_cnts_s cn58xxp1; -} cvmx_npi_px_instr_cnts_t; - - -/** - * cvmx_npi_p#_pair_cnts - * - * NPI_P0_PAIR_CNTS = NPI's Port-0 Instruction Counts For Packets Out. - * - * Used to determine the number of instruction in the NPI and to be fetched for Output-Packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_px_pair_cnts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t fcnt : 5; /**< 16 - number entries in the D/I Pair FIFO. */ - uint64_t avail : 32; /**< Doorbell count to be read. */ -#else - uint64_t avail : 32; - uint64_t fcnt : 5; - uint64_t reserved_37_63 : 27; -#endif - } s; - struct cvmx_npi_px_pair_cnts_s cn30xx; - struct cvmx_npi_px_pair_cnts_s cn31xx; - struct cvmx_npi_px_pair_cnts_s cn38xx; - struct cvmx_npi_px_pair_cnts_s cn38xxp2; - struct cvmx_npi_px_pair_cnts_s cn50xx; - struct cvmx_npi_px_pair_cnts_s cn58xx; - struct cvmx_npi_px_pair_cnts_s cn58xxp1; -} cvmx_npi_px_pair_cnts_t; - - -/** - * cvmx_npi_pci_burst_size - * - * NPI_PCI_BURST_SIZE = NPI PCI Burst Size Register - * - * Control the number of words the NPI will attempt to read / write to/from the PCI. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_pci_burst_size_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t wr_brst : 7; /**< The number of 8B words to write to PCI in any one - write operation. A zero is equal to 128. This - value is used the packet reads and is clamped at - a max of 112 for dma writes. */ - uint64_t rd_brst : 7; /**< Number of 8B words to read from PCI in any one - read operation. Legal values are 1 to 127, where - a 0 will be treated as a 1. - "For reading of packet data value is limited to 64 - in PASS-2." - This value does not control the size of a read - caused by an IOBDMA from a PP. */ -#else - uint64_t rd_brst : 7; - uint64_t wr_brst : 7; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_npi_pci_burst_size_s cn30xx; - struct cvmx_npi_pci_burst_size_s cn31xx; - struct cvmx_npi_pci_burst_size_s cn38xx; - struct cvmx_npi_pci_burst_size_s cn38xxp2; - struct cvmx_npi_pci_burst_size_s cn50xx; - struct cvmx_npi_pci_burst_size_s cn58xx; - struct cvmx_npi_pci_burst_size_s cn58xxp1; -} cvmx_npi_pci_burst_size_t; - - -/** - * cvmx_npi_pci_int_arb_cfg - * - * NPI_PCI_INT_ARB_CFG = Configuration For PCI Arbiter - * - * Controls operation of the Internal PCI Arbiter. This register should - * only be written when PRST# is asserted. NPI_PCI_INT_ARB_CFG[EN] should - * only be set when Octane is a host. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_pci_int_arb_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t hostmode : 1; /**< PCI Host Mode Pin (sampled for use by software). - This bit reflects the sampled PCI_HOSTMODE pin. - In HOST Mode, OCTEON drives the PCI_CLK_OUT and - PCI initialization pattern during PCI_RST_N deassertion). - *** NOTE: O9N PASS1 Addition */ - uint64_t pci_ovr : 4; /**< PCI Host Mode Bus Speed/Type Override - When in Host Mode(PCI_HOSTMODE pin =1), OCTEON acting - as the PCI Central Agent, samples the PCI_PCI100, - PCI_M66EN and PCI_PCIXCAP pins to determine the - 'sampled' PCI Bus speed and Bus Type (PCI or PCIX). - (see: PCI_CNT_REG[HM_SPEED,HM_PCIX]) - However, in some cases, SW may want to override the - the 'sampled' PCI Bus Type/Speed, and use some - SLOWER Bus frequency. - The PCI_OVR field encoding represents the 'override' - PCI Bus Type/Speed which will be used to generate the - PCI_CLK_OUT and determines the PCI initialization pattern - driven during PCI_RST_N deassertion. - PCI_OVR[3]: OVERRIDE (0:DISABLE/1:ENABLE) - PCI_OVR[2]: BUS TYPE(0:PCI/1:PCIX) - PCI_OVR[1:0]: BUS SPEED(0:33/1:66/2:100/3:133) - OVERRIDE TYPE SPEED | Override Configuration - [3] [2] [1:0] | TYPE SPEED - ------------------+------------------------------- - 0 x xx | No override(uses 'sampled' - | Bus Speed(HM_SPEED) and Bus Type(HM_PCIX) - 1 0 00 | PCI Mode 33MHz - 1 0 01 | PCI Mode 66MHz - 1 0 10 | RESERVED (DO NOT USE) - 1 0 11 | RESERVED (DO NOT USE) - 1 1 00 | RESERVED (DO NOT USE) - 1 1 01 | PCIX Mode 66MHz - 1 1 10 | PCIX Mode 100MHz - 1 1 11 | PCIX Mode 133MHz - NOTES: - - NPI_PCI_INT_ARB_CFG[PCI_OVR] has NO EFFECT on - PCI_CNT_REG[HM_SPEED,HM_PCIX] (ie: the sampled PCI Bus - Type/Speed), but WILL EFFECT PCI_CTL_STATUS_2[AP_PCIX] - which reflects the actual PCI Bus Type(0:PCI/1:PCIX). - - Software should never 'up' configure the recommended values. - In other words, if the 'sampled' Bus Type=PCI(HM_PCIX=0), - then SW should NOT attempt to set TYPE[2]=1 for PCIX Mode. - Likewise, if the sampled Bus Speed=66MHz(HM_SPEED=01), - then SW should NOT attempt to 'speed up' the bus [ie: - SPEED[1:0]=10(100MHz)]. - - If PCI_OVR<3> is set prior to PCI reset de-assertion - in host mode, NPI_PCI_INT_ARB_CFG[PCI_OVR] - indicates the Bus Type/Speed that OCTEON drove on the - DEVSEL/STOP/TRDY pins during reset de-assertion. (user - should then ignore the 'sampled' Bus Type/Speed - contained in the PCI_CNT_REG[HM_PCIX, HM_SPEED]) fields. - - If PCI_OVR<3> is clear prior to PCI reset de-assertion - in host mode, PCI_CNT_REG[HM_PCIX,HM_SPEED]) - indicates the Bus Type/Speed that OCTEON drove on the - DEVSEL/STOP/TRDY pins during reset de-assertion. - *** NOTE: O9N PASS1 Addition */ - uint64_t reserved_5_7 : 3; - uint64_t en : 1; /**< Internal arbiter enable. */ - uint64_t park_mod : 1; /**< Bus park mode. 0=park on last, 1=park on device. */ - uint64_t park_dev : 3; /**< Bus park device. 0-3 External device, 4 = Octane. */ -#else - uint64_t park_dev : 3; - uint64_t park_mod : 1; - uint64_t en : 1; - uint64_t reserved_5_7 : 3; - uint64_t pci_ovr : 4; - uint64_t hostmode : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_npi_pci_int_arb_cfg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t en : 1; /**< Internal arbiter enable. */ - uint64_t park_mod : 1; /**< Bus park mode. 0=park on last, 1=park on device. */ - uint64_t park_dev : 3; /**< Bus park device. 0-3 External device, 4 = Octane. */ -#else - uint64_t park_dev : 3; - uint64_t park_mod : 1; - uint64_t en : 1; - uint64_t reserved_5_63 : 59; -#endif - } cn30xx; - struct cvmx_npi_pci_int_arb_cfg_cn30xx cn31xx; - struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xx; - struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xxp2; - struct cvmx_npi_pci_int_arb_cfg_s cn50xx; - struct cvmx_npi_pci_int_arb_cfg_s cn58xx; - struct cvmx_npi_pci_int_arb_cfg_s cn58xxp1; -} cvmx_npi_pci_int_arb_cfg_t; - - -/** - * cvmx_npi_pci_read_cmd - * - * NPI_PCI_READ_CMD = NPI PCI Read Command Register - * - * Controls the type of read command sent. - * Writes to this register are not ordered with writes/reads to the PCI Memory space. - * To ensure that a write has completed the user must read the register before - * making an access(i.e. PCI memory space) that requires the value of this register to be updated. - * Also any previously issued reads/writes to PCI memory space, still stored in the outbound - * FIFO will use the value of this register after it has been updated. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_pci_read_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t cmd_size : 11; /**< Number bytes to be read is equal to or exceeds this - size will cause the PCI in PCI mode to use a - Memory-Read-Multiple. This register has a value - from 8 to 2048. A value of 0-7 will be treated as - a value of 2048. */ -#else - uint64_t cmd_size : 11; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_npi_pci_read_cmd_s cn30xx; - struct cvmx_npi_pci_read_cmd_s cn31xx; - struct cvmx_npi_pci_read_cmd_s cn38xx; - struct cvmx_npi_pci_read_cmd_s cn38xxp2; - struct cvmx_npi_pci_read_cmd_s cn50xx; - struct cvmx_npi_pci_read_cmd_s cn58xx; - struct cvmx_npi_pci_read_cmd_s cn58xxp1; -} cvmx_npi_pci_read_cmd_t; - - -/** - * cvmx_npi_port32_instr_hdr - * - * NPI_PORT32_INSTR_HDR = NPI Port 32 Instruction Header - * - * Contains bits [62:42] of the Instruction Header for port 32. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_port32_instr_hdr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t pbp : 1; /**< Enable Packet-by-packet mode. */ - uint64_t rsv_f : 5; /**< Reserved */ - uint64_t rparmode : 2; /**< Parse Mode. Used when packet is raw and PBP==0. */ - uint64_t rsv_e : 1; /**< Reserved */ - uint64_t rskp_len : 7; /**< Skip Length. Used when packet is raw and PBP==0. */ - uint64_t rsv_d : 6; /**< Reserved */ - uint64_t use_ihdr : 1; /**< When set '1' the instruction header will be sent - as part of the packet data, regardless of the - value of bit [63] of the instruction header. - USE_IHDR must be set whenever PBP is set. */ - uint64_t rsv_c : 5; /**< Reserved */ - uint64_t par_mode : 2; /**< Parse Mode. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_b : 1; /**< Reserved - instruction header sent to IPD. */ - uint64_t skp_len : 7; /**< Skip Length. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_a : 6; /**< Reserved */ -#else - uint64_t rsv_a : 6; - uint64_t skp_len : 7; - uint64_t rsv_b : 1; - uint64_t par_mode : 2; - uint64_t rsv_c : 5; - uint64_t use_ihdr : 1; - uint64_t rsv_d : 6; - uint64_t rskp_len : 7; - uint64_t rsv_e : 1; - uint64_t rparmode : 2; - uint64_t rsv_f : 5; - uint64_t pbp : 1; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npi_port32_instr_hdr_s cn30xx; - struct cvmx_npi_port32_instr_hdr_s cn31xx; - struct cvmx_npi_port32_instr_hdr_s cn38xx; - struct cvmx_npi_port32_instr_hdr_s cn38xxp2; - struct cvmx_npi_port32_instr_hdr_s cn50xx; - struct cvmx_npi_port32_instr_hdr_s cn58xx; - struct cvmx_npi_port32_instr_hdr_s cn58xxp1; -} cvmx_npi_port32_instr_hdr_t; - - -/** - * cvmx_npi_port33_instr_hdr - * - * NPI_PORT33_INSTR_HDR = NPI Port 33 Instruction Header - * - * Contains bits [62:42] of the Instruction Header for port 33. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_port33_instr_hdr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t pbp : 1; /**< Enable Packet-by-packet mode. */ - uint64_t rsv_f : 5; /**< Reserved */ - uint64_t rparmode : 2; /**< Parse Mode. Used when packet is raw and PBP==0. */ - uint64_t rsv_e : 1; /**< Reserved */ - uint64_t rskp_len : 7; /**< Skip Length. Used when packet is raw and PBP==0. */ - uint64_t rsv_d : 6; /**< Reserved */ - uint64_t use_ihdr : 1; /**< When set '1' the instruction header will be sent - as part of the packet data, regardless of the - value of bit [63] of the instruction header. - USE_IHDR must be set whenever PBP is set. */ - uint64_t rsv_c : 5; /**< Reserved */ - uint64_t par_mode : 2; /**< Parse Mode. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_b : 1; /**< Reserved - instruction header sent to IPD. */ - uint64_t skp_len : 7; /**< Skip Length. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_a : 6; /**< Reserved */ -#else - uint64_t rsv_a : 6; - uint64_t skp_len : 7; - uint64_t rsv_b : 1; - uint64_t par_mode : 2; - uint64_t rsv_c : 5; - uint64_t use_ihdr : 1; - uint64_t rsv_d : 6; - uint64_t rskp_len : 7; - uint64_t rsv_e : 1; - uint64_t rparmode : 2; - uint64_t rsv_f : 5; - uint64_t pbp : 1; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npi_port33_instr_hdr_s cn31xx; - struct cvmx_npi_port33_instr_hdr_s cn38xx; - struct cvmx_npi_port33_instr_hdr_s cn38xxp2; - struct cvmx_npi_port33_instr_hdr_s cn50xx; - struct cvmx_npi_port33_instr_hdr_s cn58xx; - struct cvmx_npi_port33_instr_hdr_s cn58xxp1; -} cvmx_npi_port33_instr_hdr_t; - - -/** - * cvmx_npi_port34_instr_hdr - * - * NPI_PORT34_INSTR_HDR = NPI Port 34 Instruction Header - * - * Contains bits [62:42] of the Instruction Header for port 34. Added for PASS-2. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_port34_instr_hdr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t pbp : 1; /**< Enable Packet-by-packet mode. */ - uint64_t rsv_f : 5; /**< Reserved */ - uint64_t rparmode : 2; /**< Parse Mode. Used when packet is raw and PBP==0. */ - uint64_t rsv_e : 1; /**< Reserved */ - uint64_t rskp_len : 7; /**< Skip Length. Used when packet is raw and PBP==0. */ - uint64_t rsv_d : 6; /**< Reserved */ - uint64_t use_ihdr : 1; /**< When set '1' the instruction header will be sent - as part of the packet data, regardless of the - value of bit [63] of the instruction header. - USE_IHDR must be set whenever PBP is set. */ - uint64_t rsv_c : 5; /**< Reserved */ - uint64_t par_mode : 2; /**< Parse Mode. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_b : 1; /**< Reserved - instruction header sent to IPD. */ - uint64_t skp_len : 7; /**< Skip Length. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_a : 6; /**< Reserved */ -#else - uint64_t rsv_a : 6; - uint64_t skp_len : 7; - uint64_t rsv_b : 1; - uint64_t par_mode : 2; - uint64_t rsv_c : 5; - uint64_t use_ihdr : 1; - uint64_t rsv_d : 6; - uint64_t rskp_len : 7; - uint64_t rsv_e : 1; - uint64_t rparmode : 2; - uint64_t rsv_f : 5; - uint64_t pbp : 1; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npi_port34_instr_hdr_s cn38xx; - struct cvmx_npi_port34_instr_hdr_s cn38xxp2; - struct cvmx_npi_port34_instr_hdr_s cn58xx; - struct cvmx_npi_port34_instr_hdr_s cn58xxp1; -} cvmx_npi_port34_instr_hdr_t; - - -/** - * cvmx_npi_port35_instr_hdr - * - * NPI_PORT35_INSTR_HDR = NPI Port 35 Instruction Header - * - * Contains bits [62:42] of the Instruction Header for port 35. Added for PASS-2. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_port35_instr_hdr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_44_63 : 20; - uint64_t pbp : 1; /**< Enable Packet-by-packet mode. */ - uint64_t rsv_f : 5; /**< Reserved */ - uint64_t rparmode : 2; /**< Parse Mode. Used when packet is raw and PBP==0. */ - uint64_t rsv_e : 1; /**< Reserved */ - uint64_t rskp_len : 7; /**< Skip Length. Used when packet is raw and PBP==0. */ - uint64_t rsv_d : 6; /**< Reserved */ - uint64_t use_ihdr : 1; /**< When set '1' the instruction header will be sent - as part of the packet data, regardless of the - value of bit [63] of the instruction header. - USE_IHDR must be set whenever PBP is set. */ - uint64_t rsv_c : 5; /**< Reserved */ - uint64_t par_mode : 2; /**< Parse Mode. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_b : 1; /**< Reserved - instruction header sent to IPD. */ - uint64_t skp_len : 7; /**< Skip Length. Used when USE_IHDR is set and packet - is not raw and PBP is not set. */ - uint64_t rsv_a : 6; /**< Reserved */ -#else - uint64_t rsv_a : 6; - uint64_t skp_len : 7; - uint64_t rsv_b : 1; - uint64_t par_mode : 2; - uint64_t rsv_c : 5; - uint64_t use_ihdr : 1; - uint64_t rsv_d : 6; - uint64_t rskp_len : 7; - uint64_t rsv_e : 1; - uint64_t rparmode : 2; - uint64_t rsv_f : 5; - uint64_t pbp : 1; - uint64_t reserved_44_63 : 20; -#endif - } s; - struct cvmx_npi_port35_instr_hdr_s cn38xx; - struct cvmx_npi_port35_instr_hdr_s cn38xxp2; - struct cvmx_npi_port35_instr_hdr_s cn58xx; - struct cvmx_npi_port35_instr_hdr_s cn58xxp1; -} cvmx_npi_port35_instr_hdr_t; - - -/** - * cvmx_npi_port_bp_control - * - * NPI_PORT_BP_CONTROL = Port Backpressure Control - * - * Enables Port Level Backpressure - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_port_bp_control_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t bp_on : 4; /**< Port 35-32 port level backpressure applied. */ - uint64_t enb : 4; /**< Enables port level backpressure from the IPD. */ -#else - uint64_t enb : 4; - uint64_t bp_on : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_npi_port_bp_control_s cn30xx; - struct cvmx_npi_port_bp_control_s cn31xx; - struct cvmx_npi_port_bp_control_s cn38xx; - struct cvmx_npi_port_bp_control_s cn38xxp2; - struct cvmx_npi_port_bp_control_s cn50xx; - struct cvmx_npi_port_bp_control_s cn58xx; - struct cvmx_npi_port_bp_control_s cn58xxp1; -} cvmx_npi_port_bp_control_t; - - -/** - * cvmx_npi_rsl_int_blocks - * - * RSL_INT_BLOCKS = RSL Interrupt Blocks Register - * - * Reading this register will return a vector with a bit set '1' for a corresponding RSL block - * that presently has an interrupt pending. The Field Description below supplies the name of the - * register that software should read to find out why that intterupt bit is set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_rsl_int_blocks_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rint_31 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t iob : 1; /**< IOB_INT_SUM */ - uint64_t reserved_28_29 : 2; - uint64_t rint_27 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_26 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_25 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_24 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t asx1 : 1; /**< ASX1_INT_REG */ - uint64_t asx0 : 1; /**< ASX0_INT_REG */ - uint64_t rint_21 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t pip : 1; /**< PIP_INT_REG. */ - uint64_t spx1 : 1; /**< SPX1_INT_REG & STX1_INT_REG */ - uint64_t spx0 : 1; /**< SPX0_INT_REG & STX0_INT_REG */ - uint64_t lmc : 1; /**< LMC_MEM_CFG0 */ - uint64_t l2c : 1; /**< L2T_ERR & L2D_ERR */ - uint64_t rint_15 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t reserved_13_14 : 2; - uint64_t pow : 1; /**< POW_ECC_ERR */ - uint64_t tim : 1; /**< TIM_REG_ERROR */ - uint64_t pko : 1; /**< PKO_REG_ERROR */ - uint64_t ipd : 1; /**< IPD_INT_SUM */ - uint64_t rint_8 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t zip : 1; /**< ZIP_ERROR */ - uint64_t dfa : 1; /**< DFA_ERR */ - uint64_t fpa : 1; /**< FPA_INT_SUM */ - uint64_t key : 1; /**< KEY_INT_SUM */ - uint64_t npi : 1; /**< NPI_INT_SUM */ - uint64_t gmx1 : 1; /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */ - uint64_t gmx0 : 1; /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */ - uint64_t mio : 1; /**< MIO_BOOT_ERR */ -#else - uint64_t mio : 1; - uint64_t gmx0 : 1; - uint64_t gmx1 : 1; - uint64_t npi : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rint_8 : 1; - uint64_t ipd : 1; - uint64_t pko : 1; - uint64_t tim : 1; - uint64_t pow : 1; - uint64_t reserved_13_14 : 2; - uint64_t rint_15 : 1; - uint64_t l2c : 1; - uint64_t lmc : 1; - uint64_t spx0 : 1; - uint64_t spx1 : 1; - uint64_t pip : 1; - uint64_t rint_21 : 1; - uint64_t asx0 : 1; - uint64_t asx1 : 1; - uint64_t rint_24 : 1; - uint64_t rint_25 : 1; - uint64_t rint_26 : 1; - uint64_t rint_27 : 1; - uint64_t reserved_28_29 : 2; - uint64_t iob : 1; - uint64_t rint_31 : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npi_rsl_int_blocks_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rint_31 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t iob : 1; /**< IOB_INT_SUM */ - uint64_t rint_29 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_28 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_27 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_26 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_25 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_24 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t asx1 : 1; /**< ASX1_INT_REG */ - uint64_t asx0 : 1; /**< ASX0_INT_REG */ - uint64_t rint_21 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t pip : 1; /**< PIP_INT_REG. */ - uint64_t spx1 : 1; /**< SPX1_INT_REG & STX1_INT_REG */ - uint64_t spx0 : 1; /**< SPX0_INT_REG & STX0_INT_REG */ - uint64_t lmc : 1; /**< LMC_MEM_CFG0 */ - uint64_t l2c : 1; /**< L2T_ERR & L2D_ERR */ - uint64_t rint_15 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_14 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t usb : 1; /**< USBN_INT_SUM */ - uint64_t pow : 1; /**< POW_ECC_ERR */ - uint64_t tim : 1; /**< TIM_REG_ERROR */ - uint64_t pko : 1; /**< PKO_REG_ERROR */ - uint64_t ipd : 1; /**< IPD_INT_SUM */ - uint64_t rint_8 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t zip : 1; /**< ZIP_ERROR */ - uint64_t dfa : 1; /**< DFA_ERR */ - uint64_t fpa : 1; /**< FPA_INT_SUM */ - uint64_t key : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t npi : 1; /**< NPI_INT_SUM */ - uint64_t gmx1 : 1; /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */ - uint64_t gmx0 : 1; /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */ - uint64_t mio : 1; /**< MIO_BOOT_ERR */ -#else - uint64_t mio : 1; - uint64_t gmx0 : 1; - uint64_t gmx1 : 1; - uint64_t npi : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rint_8 : 1; - uint64_t ipd : 1; - uint64_t pko : 1; - uint64_t tim : 1; - uint64_t pow : 1; - uint64_t usb : 1; - uint64_t rint_14 : 1; - uint64_t rint_15 : 1; - uint64_t l2c : 1; - uint64_t lmc : 1; - uint64_t spx0 : 1; - uint64_t spx1 : 1; - uint64_t pip : 1; - uint64_t rint_21 : 1; - uint64_t asx0 : 1; - uint64_t asx1 : 1; - uint64_t rint_24 : 1; - uint64_t rint_25 : 1; - uint64_t rint_26 : 1; - uint64_t rint_27 : 1; - uint64_t rint_28 : 1; - uint64_t rint_29 : 1; - uint64_t iob : 1; - uint64_t rint_31 : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn30xx; - struct cvmx_npi_rsl_int_blocks_cn30xx cn31xx; - struct cvmx_npi_rsl_int_blocks_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rint_31 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t iob : 1; /**< IOB_INT_SUM */ - uint64_t rint_29 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_28 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_27 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_26 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_25 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_24 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t asx1 : 1; /**< ASX1_INT_REG */ - uint64_t asx0 : 1; /**< ASX0_INT_REG */ - uint64_t rint_21 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t pip : 1; /**< PIP_INT_REG. */ - uint64_t spx1 : 1; /**< SPX1_INT_REG & STX1_INT_REG */ - uint64_t spx0 : 1; /**< SPX0_INT_REG & STX0_INT_REG */ - uint64_t lmc : 1; /**< LMC_MEM_CFG0 */ - uint64_t l2c : 1; /**< L2T_ERR & L2D_ERR */ - uint64_t rint_15 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_14 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t rint_13 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t pow : 1; /**< POW_ECC_ERR */ - uint64_t tim : 1; /**< TIM_REG_ERROR */ - uint64_t pko : 1; /**< PKO_REG_ERROR */ - uint64_t ipd : 1; /**< IPD_INT_SUM */ - uint64_t rint_8 : 1; /**< Set '1' when RSL bLock has an interrupt. */ - uint64_t zip : 1; /**< ZIP_ERROR */ - uint64_t dfa : 1; /**< DFA_ERR */ - uint64_t fpa : 1; /**< FPA_INT_SUM */ - uint64_t key : 1; /**< KEY_INT_SUM */ - uint64_t npi : 1; /**< NPI_INT_SUM */ - uint64_t gmx1 : 1; /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */ - uint64_t gmx0 : 1; /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */ - uint64_t mio : 1; /**< MIO_BOOT_ERR */ -#else - uint64_t mio : 1; - uint64_t gmx0 : 1; - uint64_t gmx1 : 1; - uint64_t npi : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rint_8 : 1; - uint64_t ipd : 1; - uint64_t pko : 1; - uint64_t tim : 1; - uint64_t pow : 1; - uint64_t rint_13 : 1; - uint64_t rint_14 : 1; - uint64_t rint_15 : 1; - uint64_t l2c : 1; - uint64_t lmc : 1; - uint64_t spx0 : 1; - uint64_t spx1 : 1; - uint64_t pip : 1; - uint64_t rint_21 : 1; - uint64_t asx0 : 1; - uint64_t asx1 : 1; - uint64_t rint_24 : 1; - uint64_t rint_25 : 1; - uint64_t rint_26 : 1; - uint64_t rint_27 : 1; - uint64_t rint_28 : 1; - uint64_t rint_29 : 1; - uint64_t iob : 1; - uint64_t rint_31 : 1; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_npi_rsl_int_blocks_cn38xx cn38xxp2; - struct cvmx_npi_rsl_int_blocks_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t iob : 1; /**< IOB_INT_SUM */ - uint64_t lmc1 : 1; /**< Always reads as zero */ - uint64_t agl : 1; /**< Always reads as zero */ - uint64_t reserved_24_27 : 4; - uint64_t asx1 : 1; /**< Always reads as zero */ - uint64_t asx0 : 1; /**< ASX0_INT_REG */ - uint64_t reserved_21_21 : 1; - uint64_t pip : 1; /**< PIP_INT_REG. */ - uint64_t spx1 : 1; /**< Always reads as zero */ - uint64_t spx0 : 1; /**< Always reads as zero */ - uint64_t lmc : 1; /**< LMC_MEM_CFG0 */ - uint64_t l2c : 1; /**< L2T_ERR & L2D_ERR */ - uint64_t reserved_15_15 : 1; - uint64_t rad : 1; /**< Always reads as zero */ - uint64_t usb : 1; /**< USBN_INT_SUM */ - uint64_t pow : 1; /**< POW_ECC_ERR */ - uint64_t tim : 1; /**< TIM_REG_ERROR */ - uint64_t pko : 1; /**< PKO_REG_ERROR */ - uint64_t ipd : 1; /**< IPD_INT_SUM */ - uint64_t reserved_8_8 : 1; - uint64_t zip : 1; /**< Always reads as zero */ - uint64_t dfa : 1; /**< Always reads as zero */ - uint64_t fpa : 1; /**< FPA_INT_SUM */ - uint64_t key : 1; /**< Always reads as zero */ - uint64_t npi : 1; /**< NPI_INT_SUM */ - uint64_t gmx1 : 1; /**< Always reads as zero */ - uint64_t gmx0 : 1; /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */ - uint64_t mio : 1; /**< MIO_BOOT_ERR */ -#else - uint64_t mio : 1; - uint64_t gmx0 : 1; - uint64_t gmx1 : 1; - uint64_t npi : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t reserved_8_8 : 1; - uint64_t ipd : 1; - uint64_t pko : 1; - uint64_t tim : 1; - uint64_t pow : 1; - uint64_t usb : 1; - uint64_t rad : 1; - uint64_t reserved_15_15 : 1; - uint64_t l2c : 1; - uint64_t lmc : 1; - uint64_t spx0 : 1; - uint64_t spx1 : 1; - uint64_t pip : 1; - uint64_t reserved_21_21 : 1; - uint64_t asx0 : 1; - uint64_t asx1 : 1; - uint64_t reserved_24_27 : 4; - uint64_t agl : 1; - uint64_t lmc1 : 1; - uint64_t iob : 1; - uint64_t reserved_31_63 : 33; -#endif - } cn50xx; - struct cvmx_npi_rsl_int_blocks_cn38xx cn58xx; - struct cvmx_npi_rsl_int_blocks_cn38xx cn58xxp1; -} cvmx_npi_rsl_int_blocks_t; - - -/** - * cvmx_npi_size_input# - * - * NPI_SIZE_INPUT0 = NPI's Size for Input 0 Register - * - * The size (in instructions) of Instruction Queue-0. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_size_inputx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t size : 32; /**< The size of the Instruction Queue used by Octane. - The value [SIZE] is in Instructions. - A value of 0 in this field is illegal. */ -#else - uint64_t size : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npi_size_inputx_s cn30xx; - struct cvmx_npi_size_inputx_s cn31xx; - struct cvmx_npi_size_inputx_s cn38xx; - struct cvmx_npi_size_inputx_s cn38xxp2; - struct cvmx_npi_size_inputx_s cn50xx; - struct cvmx_npi_size_inputx_s cn58xx; - struct cvmx_npi_size_inputx_s cn58xxp1; -} cvmx_npi_size_inputx_t; - - -/** - * cvmx_npi_win_read_to - * - * NPI_WIN_READ_TO = NPI WINDOW READ Timeout Register - * - * Number of core clocks to wait before timing out on a WINDOW-READ to the NCB. - */ -typedef union -{ - uint64_t u64; - struct cvmx_npi_win_read_to_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t time : 32; /**< Time to wait in core clocks. A value of 0 will - cause no timeouts. */ -#else - uint64_t time : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_npi_win_read_to_s cn30xx; - struct cvmx_npi_win_read_to_s cn31xx; - struct cvmx_npi_win_read_to_s cn38xx; - struct cvmx_npi_win_read_to_s cn38xxp2; - struct cvmx_npi_win_read_to_s cn50xx; - struct cvmx_npi_win_read_to_s cn58xx; - struct cvmx_npi_win_read_to_s cn58xxp1; -} cvmx_npi_win_read_to_t; - - -/** - * cvmx_pci_bar1_index# - * - * PCI_BAR1_INDEXX = PCI IndexX Register - * - * Contains address index and control bits for access to memory ranges of Bar-1, - * when PCI supplied address-bits [26:22] == X. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_bar1_indexx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_18_31 : 14; - uint32_t addr_idx : 14; /**< Address bits [35:22] sent to L2C */ - uint32_t ca : 1; /**< Set '1' when access is not to be cached in L2. */ - uint32_t end_swp : 2; /**< Endian Swap Mode */ - uint32_t addr_v : 1; /**< Set '1' when the selected address range is valid. */ -#else - uint32_t addr_v : 1; - uint32_t end_swp : 2; - uint32_t ca : 1; - uint32_t addr_idx : 14; - uint32_t reserved_18_31 : 14; -#endif - } s; - struct cvmx_pci_bar1_indexx_s cn30xx; - struct cvmx_pci_bar1_indexx_s cn31xx; - struct cvmx_pci_bar1_indexx_s cn38xx; - struct cvmx_pci_bar1_indexx_s cn38xxp2; - struct cvmx_pci_bar1_indexx_s cn50xx; - struct cvmx_pci_bar1_indexx_s cn58xx; - struct cvmx_pci_bar1_indexx_s cn58xxp1; -} cvmx_pci_bar1_indexx_t; - - -/** - * cvmx_pci_bist_reg - * - * PCI_BIST_REG = PCI PNI BIST Status Register - * - * Contains the bist results for the PNI memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_bist_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t rsp_bs : 1; /**< Bist Status For b12_rsp_fifo_bist - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t dma0_bs : 1; /**< Bist Status For dmao_count - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t cmd0_bs : 1; /**< Bist Status For npi_cmd0_pni_am0 - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t cmd_bs : 1; /**< Bist Status For npi_cmd_pni_am1 - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t csr2p_bs : 1; /**< Bist Status For npi_csr_2_pni_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t csrr_bs : 1; /**< Bist Status For npi_csr_rsp_2_pni_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t rsp2p_bs : 1; /**< Bist Status For npi_rsp_2_pni_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t csr2n_bs : 1; /**< Bist Status For pni_csr_2_npi_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t dat2n_bs : 1; /**< Bist Status For pni_data_2_npi_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ - uint64_t dbg2n_bs : 1; /**< Bist Status For pni_dbg_data_2_npi_am - The value of this register is available 100,000 - core clocks + 21,000 pclks after: - Host Mode - deassertion of pci_rst_n - Non Host Mode - deassertion of pci_rst_n */ -#else - uint64_t dbg2n_bs : 1; - uint64_t dat2n_bs : 1; - uint64_t csr2n_bs : 1; - uint64_t rsp2p_bs : 1; - uint64_t csrr_bs : 1; - uint64_t csr2p_bs : 1; - uint64_t cmd_bs : 1; - uint64_t cmd0_bs : 1; - uint64_t dma0_bs : 1; - uint64_t rsp_bs : 1; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_pci_bist_reg_s cn50xx; -} cvmx_pci_bist_reg_t; - - -/** - * cvmx_pci_cfg00 - * - * Registers at address 0x1000 -> 0x17FF are PNI - * Start at 0x100 into range - * these are shifted by 2 to the left to make address - * Registers at address 0x1800 -> 0x18FF are CFG - * these are shifted by 2 to the left to make address - * - * PCI_CFG00 = First 32-bits of PCI config space (PCI Vendor + Device) - * - * This register contains the first 32-bits of the PCI config space registers - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg00_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t devid : 16; /**< This is the device ID for OCTEON (90nm shhrink) */ - uint32_t vendid : 16; /**< This is the Cavium's vendor ID */ -#else - uint32_t vendid : 16; - uint32_t devid : 16; -#endif - } s; - struct cvmx_pci_cfg00_s cn30xx; - struct cvmx_pci_cfg00_s cn31xx; - struct cvmx_pci_cfg00_s cn38xx; - struct cvmx_pci_cfg00_s cn38xxp2; - struct cvmx_pci_cfg00_s cn50xx; - struct cvmx_pci_cfg00_s cn58xx; - struct cvmx_pci_cfg00_s cn58xxp1; -} cvmx_pci_cfg00_t; - - -/** - * cvmx_pci_cfg01 - * - * PCI_CFG01 = Second 32-bits of PCI config space (Command/Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg01_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dpe : 1; /**< Detected Parity Error */ - uint32_t sse : 1; /**< Signaled System Error */ - uint32_t rma : 1; /**< Received Master Abort */ - uint32_t rta : 1; /**< Received Target Abort */ - uint32_t sta : 1; /**< Signaled Target Abort */ - uint32_t devt : 2; /**< DEVSEL# timing (for PCI only/for PCIX = don't care) */ - uint32_t mdpe : 1; /**< Master Data Parity Error */ - uint32_t fbb : 1; /**< Fast Back-to-Back Transactions Capable - Mode Dependent (1 = PCI Mode / 0 = PCIX Mode) */ - uint32_t reserved_22_22 : 1; - uint32_t m66 : 1; /**< 66MHz Capable */ - uint32_t cle : 1; /**< Capabilities List Enable */ - uint32_t i_stat : 1; /**< When INTx# is asserted by OCTEON this bit will be set. - When deasserted by OCTEON this bit will be cleared. */ - uint32_t reserved_11_18 : 8; - uint32_t i_dis : 1; /**< When asserted '1' disables the generation of INTx# - by OCTEON. When disabled '0' allows assertion of INTx# - by OCTEON. */ - uint32_t fbbe : 1; /**< Fast Back to Back Transaction Enable */ - uint32_t see : 1; /**< System Error Enable */ - uint32_t ads : 1; /**< Address/Data Stepping - NOTE: Octeon does NOT support address/data stepping. */ - uint32_t pee : 1; /**< PERR# Enable */ - uint32_t vps : 1; /**< VGA Palette Snooping */ - uint32_t mwice : 1; /**< Memory Write & Invalidate Command Enable */ - uint32_t scse : 1; /**< Special Cycle Snooping Enable */ - uint32_t me : 1; /**< Master Enable - Must be set for OCTEON to master a PCI/PCI-X - transaction. This should always be set any time - that OCTEON is connected to a PCI/PCI-X bus. */ - uint32_t msae : 1; /**< Memory Space Access Enable - Must be set to recieve a PCI/PCI-X memory space - transaction. This must always be set any time that - OCTEON is connected to a PCI/PCI-X bus. */ - uint32_t isae : 1; /**< I/O Space Access Enable - NOTE: For OCTEON, this bit MUST NEVER be set - (it is read-only and OCTEON does not respond to I/O - Space accesses). */ -#else - uint32_t isae : 1; - uint32_t msae : 1; - uint32_t me : 1; - uint32_t scse : 1; - uint32_t mwice : 1; - uint32_t vps : 1; - uint32_t pee : 1; - uint32_t ads : 1; - uint32_t see : 1; - uint32_t fbbe : 1; - uint32_t i_dis : 1; - uint32_t reserved_11_18 : 8; - uint32_t i_stat : 1; - uint32_t cle : 1; - uint32_t m66 : 1; - uint32_t reserved_22_22 : 1; - uint32_t fbb : 1; - uint32_t mdpe : 1; - uint32_t devt : 2; - uint32_t sta : 1; - uint32_t rta : 1; - uint32_t rma : 1; - uint32_t sse : 1; - uint32_t dpe : 1; -#endif - } s; - struct cvmx_pci_cfg01_s cn30xx; - struct cvmx_pci_cfg01_s cn31xx; - struct cvmx_pci_cfg01_s cn38xx; - struct cvmx_pci_cfg01_s cn38xxp2; - struct cvmx_pci_cfg01_s cn50xx; - struct cvmx_pci_cfg01_s cn58xx; - struct cvmx_pci_cfg01_s cn58xxp1; -} cvmx_pci_cfg01_t; - - -/** - * cvmx_pci_cfg02 - * - * PCI_CFG02 = Third 32-bits of PCI config space (Class Code / Revision ID) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg02_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t cc : 24; /**< Class Code (Processor/MIPS) - (was 0x100000 in pass 1 and pass 2) */ - uint32_t rid : 8; /**< Revision ID - (0 in pass 1, 1 in pass 1.1, 8 in pass 2.0) */ -#else - uint32_t rid : 8; - uint32_t cc : 24; -#endif - } s; - struct cvmx_pci_cfg02_s cn30xx; - struct cvmx_pci_cfg02_s cn31xx; - struct cvmx_pci_cfg02_s cn38xx; - struct cvmx_pci_cfg02_s cn38xxp2; - struct cvmx_pci_cfg02_s cn50xx; - struct cvmx_pci_cfg02_s cn58xx; - struct cvmx_pci_cfg02_s cn58xxp1; -} cvmx_pci_cfg02_t; - - -/** - * cvmx_pci_cfg03 - * - * PCI_CFG03 = Fourth 32-bits of PCI config space (BIST, HEADER Type, Latency timer, line size) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg03_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t bcap : 1; /**< BIST Capable */ - uint32_t brb : 1; /**< BIST Request/busy bit - Note: OCTEON does not support PCI BIST, therefore - this bit should remain zero. */ - uint32_t reserved_28_29 : 2; - uint32_t bcod : 4; /**< BIST Code */ - uint32_t ht : 8; /**< Header Type (Type 0) */ - uint32_t lt : 8; /**< Latency Timer - (0=PCI) (0=PCI) - (0x40=PCIX) (0x40=PCIX) */ - uint32_t cls : 8; /**< Cache Line Size */ -#else - uint32_t cls : 8; - uint32_t lt : 8; - uint32_t ht : 8; - uint32_t bcod : 4; - uint32_t reserved_28_29 : 2; - uint32_t brb : 1; - uint32_t bcap : 1; -#endif - } s; - struct cvmx_pci_cfg03_s cn30xx; - struct cvmx_pci_cfg03_s cn31xx; - struct cvmx_pci_cfg03_s cn38xx; - struct cvmx_pci_cfg03_s cn38xxp2; - struct cvmx_pci_cfg03_s cn50xx; - struct cvmx_pci_cfg03_s cn58xx; - struct cvmx_pci_cfg03_s cn58xxp1; -} cvmx_pci_cfg03_t; - - -/** - * cvmx_pci_cfg04 - * - * PCI_CFG04 = Fifth 32-bits of PCI config space (Base Address Register 0 - Low) - * - * Description: BAR0: 4KB 64-bit Prefetchable Memory Space - * [0]: 0 (Memory Space) - * [2:1]: 2 (64bit memory decoder) - * [3]: 1 (Prefetchable) - * [11:4]: RAZ (to imply 4KB space) - * [31:12]: RW (User may define base address) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg04_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lbase : 20; /**< Base Address[31:12] - Base Address[30:12] read as zero if - PCI_CTL_STATUS_2[BB0] is set (in pass 3+) */ - uint32_t lbasez : 8; /**< Base Address[11:4] (Read as Zero) */ - uint32_t pf : 1; /**< Prefetchable Space */ - uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ - uint32_t mspc : 1; /**< Memory Space Indicator */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t lbasez : 8; - uint32_t lbase : 20; -#endif - } s; - struct cvmx_pci_cfg04_s cn30xx; - struct cvmx_pci_cfg04_s cn31xx; - struct cvmx_pci_cfg04_s cn38xx; - struct cvmx_pci_cfg04_s cn38xxp2; - struct cvmx_pci_cfg04_s cn50xx; - struct cvmx_pci_cfg04_s cn58xx; - struct cvmx_pci_cfg04_s cn58xxp1; -} cvmx_pci_cfg04_t; - - -/** - * cvmx_pci_cfg05 - * - * PCI_CFG05 = Sixth 32-bits of PCI config space (Base Address Register 0 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg05_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t hbase : 32; /**< Base Address[63:32] */ -#else - uint32_t hbase : 32; -#endif - } s; - struct cvmx_pci_cfg05_s cn30xx; - struct cvmx_pci_cfg05_s cn31xx; - struct cvmx_pci_cfg05_s cn38xx; - struct cvmx_pci_cfg05_s cn38xxp2; - struct cvmx_pci_cfg05_s cn50xx; - struct cvmx_pci_cfg05_s cn58xx; - struct cvmx_pci_cfg05_s cn58xxp1; -} cvmx_pci_cfg05_t; - - -/** - * cvmx_pci_cfg06 - * - * PCI_CFG06 = Seventh 32-bits of PCI config space (Base Address Register 1 - Low) - * - * Description: BAR1: 128MB 64-bit Prefetchable Memory Space - * [0]: 0 (Memory Space) - * [2:1]: 2 (64bit memory decoder) - * [3]: 1 (Prefetchable) - * [26:4]: RAZ (to imply 128MB space) - * [31:27]: RW (User may define base address) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg06_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lbase : 5; /**< Base Address[31:27] - In pass 3+: - Base Address[29:27] read as zero if - PCI_CTL_STATUS_2[BB1] is set - Base Address[30] reads as zero if - PCI_CTL_STATUS_2[BB1] is set and - PCI_CTL_STATUS_2[BB1_SIZE] is set */ - uint32_t lbasez : 23; /**< Base Address[26:4] (Read as Zero) */ - uint32_t pf : 1; /**< Prefetchable Space */ - uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ - uint32_t mspc : 1; /**< Memory Space Indicator */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t lbasez : 23; - uint32_t lbase : 5; -#endif - } s; - struct cvmx_pci_cfg06_s cn30xx; - struct cvmx_pci_cfg06_s cn31xx; - struct cvmx_pci_cfg06_s cn38xx; - struct cvmx_pci_cfg06_s cn38xxp2; - struct cvmx_pci_cfg06_s cn50xx; - struct cvmx_pci_cfg06_s cn58xx; - struct cvmx_pci_cfg06_s cn58xxp1; -} cvmx_pci_cfg06_t; - - -/** - * cvmx_pci_cfg07 - * - * PCI_CFG07 = Eighth 32-bits of PCI config space (Base Address Register 1 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg07_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t hbase : 32; /**< Base Address[63:32] */ -#else - uint32_t hbase : 32; -#endif - } s; - struct cvmx_pci_cfg07_s cn30xx; - struct cvmx_pci_cfg07_s cn31xx; - struct cvmx_pci_cfg07_s cn38xx; - struct cvmx_pci_cfg07_s cn38xxp2; - struct cvmx_pci_cfg07_s cn50xx; - struct cvmx_pci_cfg07_s cn58xx; - struct cvmx_pci_cfg07_s cn58xxp1; -} cvmx_pci_cfg07_t; - - -/** - * cvmx_pci_cfg08 - * - * PCI_CFG08 = Ninth 32-bits of PCI config space (Base Address Register 2 - Low) - * - * Description: BAR1: 2^39 (512GB) 64-bit Prefetchable Memory Space - * [0]: 0 (Memory Space) - * [2:1]: 2 (64bit memory decoder) - * [3]: 1 (Prefetchable) - * [31:4]: RAZ - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg08_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lbasez : 28; /**< Base Address[31:4] (Read as Zero) */ - uint32_t pf : 1; /**< Prefetchable Space */ - uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ - uint32_t mspc : 1; /**< Memory Space Indicator */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t lbasez : 28; -#endif - } s; - struct cvmx_pci_cfg08_s cn30xx; - struct cvmx_pci_cfg08_s cn31xx; - struct cvmx_pci_cfg08_s cn38xx; - struct cvmx_pci_cfg08_s cn38xxp2; - struct cvmx_pci_cfg08_s cn50xx; - struct cvmx_pci_cfg08_s cn58xx; - struct cvmx_pci_cfg08_s cn58xxp1; -} cvmx_pci_cfg08_t; - - -/** - * cvmx_pci_cfg09 - * - * PCI_CFG09 = Tenth 32-bits of PCI config space (Base Address Register 2 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg09_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t hbase : 25; /**< Base Address[63:39] */ - uint32_t hbasez : 7; /**< Base Address[38:31] (Read as Zero) */ -#else - uint32_t hbasez : 7; - uint32_t hbase : 25; -#endif - } s; - struct cvmx_pci_cfg09_s cn30xx; - struct cvmx_pci_cfg09_s cn31xx; - struct cvmx_pci_cfg09_s cn38xx; - struct cvmx_pci_cfg09_s cn38xxp2; - struct cvmx_pci_cfg09_s cn50xx; - struct cvmx_pci_cfg09_s cn58xx; - struct cvmx_pci_cfg09_s cn58xxp1; -} cvmx_pci_cfg09_t; - - -/** - * cvmx_pci_cfg10 - * - * PCI_CFG10 = Eleventh 32-bits of PCI config space (Card Bus CIS Pointer) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg10_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t cisp : 32; /**< CardBus CIS Pointer (UNUSED) */ -#else - uint32_t cisp : 32; -#endif - } s; - struct cvmx_pci_cfg10_s cn30xx; - struct cvmx_pci_cfg10_s cn31xx; - struct cvmx_pci_cfg10_s cn38xx; - struct cvmx_pci_cfg10_s cn38xxp2; - struct cvmx_pci_cfg10_s cn50xx; - struct cvmx_pci_cfg10_s cn58xx; - struct cvmx_pci_cfg10_s cn58xxp1; -} cvmx_pci_cfg10_t; - - -/** - * cvmx_pci_cfg11 - * - * PCI_CFG11 = Twelfth 32-bits of PCI config space (SubSystem ID/Subsystem Vendor ID Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg11_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ssid : 16; /**< SubSystem ID */ - uint32_t ssvid : 16; /**< Subsystem Vendor ID */ -#else - uint32_t ssvid : 16; - uint32_t ssid : 16; -#endif - } s; - struct cvmx_pci_cfg11_s cn30xx; - struct cvmx_pci_cfg11_s cn31xx; - struct cvmx_pci_cfg11_s cn38xx; - struct cvmx_pci_cfg11_s cn38xxp2; - struct cvmx_pci_cfg11_s cn50xx; - struct cvmx_pci_cfg11_s cn58xx; - struct cvmx_pci_cfg11_s cn58xxp1; -} cvmx_pci_cfg11_t; - - -/** - * cvmx_pci_cfg12 - * - * PCI_CFG12 = Thirteenth 32-bits of PCI config space (Expansion ROM Base Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg12_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t erbar : 16; /**< Expansion ROM Base Address[31:16] 64KB in size */ - uint32_t erbarz : 5; /**< Expansion ROM Base Base Address (Read as Zero) */ - uint32_t reserved_1_10 : 10; - uint32_t erbar_en : 1; /**< Expansion ROM Address Decode Enable */ -#else - uint32_t erbar_en : 1; - uint32_t reserved_1_10 : 10; - uint32_t erbarz : 5; - uint32_t erbar : 16; -#endif - } s; - struct cvmx_pci_cfg12_s cn30xx; - struct cvmx_pci_cfg12_s cn31xx; - struct cvmx_pci_cfg12_s cn38xx; - struct cvmx_pci_cfg12_s cn38xxp2; - struct cvmx_pci_cfg12_s cn50xx; - struct cvmx_pci_cfg12_s cn58xx; - struct cvmx_pci_cfg12_s cn58xxp1; -} cvmx_pci_cfg12_t; - - -/** - * cvmx_pci_cfg13 - * - * PCI_CFG13 = Fourteenth 32-bits of PCI config space (Capabilities Pointer Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg13_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_8_31 : 24; - uint32_t cp : 8; /**< Capabilities Pointer */ -#else - uint32_t cp : 8; - uint32_t reserved_8_31 : 24; -#endif - } s; - struct cvmx_pci_cfg13_s cn30xx; - struct cvmx_pci_cfg13_s cn31xx; - struct cvmx_pci_cfg13_s cn38xx; - struct cvmx_pci_cfg13_s cn38xxp2; - struct cvmx_pci_cfg13_s cn50xx; - struct cvmx_pci_cfg13_s cn58xx; - struct cvmx_pci_cfg13_s cn58xxp1; -} cvmx_pci_cfg13_t; - - -/** - * cvmx_pci_cfg15 - * - * PCI_CFG15 = Sixteenth 32-bits of PCI config space (INT/ARB/LATENCY Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg15_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ml : 8; /**< Maximum Latency */ - uint32_t mg : 8; /**< Minimum Grant */ - uint32_t inta : 8; /**< Interrupt Pin (INTA#) */ - uint32_t il : 8; /**< Interrupt Line */ -#else - uint32_t il : 8; - uint32_t inta : 8; - uint32_t mg : 8; - uint32_t ml : 8; -#endif - } s; - struct cvmx_pci_cfg15_s cn30xx; - struct cvmx_pci_cfg15_s cn31xx; - struct cvmx_pci_cfg15_s cn38xx; - struct cvmx_pci_cfg15_s cn38xxp2; - struct cvmx_pci_cfg15_s cn50xx; - struct cvmx_pci_cfg15_s cn58xx; - struct cvmx_pci_cfg15_s cn58xxp1; -} cvmx_pci_cfg15_t; - - -/** - * cvmx_pci_cfg16 - * - * PCI_CFG16 = Seventeenth 32-bits of PCI config space (Target Implementation Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg16_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t trdnpr : 1; /**< Target Read Delayed Transaction for I/O and - non-prefetchable regions discarded. */ - uint32_t trdard : 1; /**< Target Read Delayed Transaction for all regions - discarded. */ - uint32_t rdsati : 1; /**< Target(I/O and Memory) Read Delayed/Split at - timeout/immediately (default timeout). - Note: OCTEON requires that this bit MBZ(must be zero). */ - uint32_t trdrs : 1; /**< Target(I/O and Memory) Read Delayed/Split or Retry - select (of the application interface is not ready) - 0 = Delayed Split Transaction - 1 = Retry Transaction (always Immediate Retry, no - AT_REQ to application). */ - uint32_t trtae : 1; /**< Target(I/O and Memory) Read Target Abort Enable - (if application interface is not ready at the - latency timeout). - Note: OCTEON as target will never target-abort, - therefore this bit should never be set. */ - uint32_t twsei : 1; /**< Target(I/O) Write Split Enable (at timeout / - immediately; default timeout) */ - uint32_t twsen : 1; /**< T(I/O) write split Enable (if the application - interface is not ready) */ - uint32_t twtae : 1; /**< Target(I/O and Memory) Write Target Abort Enable - (if the application interface is not ready at the - start of the cycle). - Note: OCTEON as target will never target-abort, - therefore this bit should never be set. */ - uint32_t tmae : 1; /**< Target(Read/Write) Master Abort Enable; check - at the start of each transaction. - Note: This bit can be used to force a Master - Abort when OCTEON is acting as the intended target - device. */ - uint32_t tslte : 3; /**< Target Subsequent(2nd-last) Latency Timeout Enable - Valid range: [1..7] and 0=8. */ - uint32_t tilt : 4; /**< Target Initial(1st data) Latency Timeout in PCI - ModeValid range: [8..15] and 0=16. */ - uint32_t pbe : 12; /**< Programmable Boundary Enable to disconnect/prefetch - for target burst read cycles to prefetchable - region in PCI. A value of 1 indicates end of - boundary (64 KB down to 16 Bytes). */ - uint32_t dppmr : 1; /**< Disconnect/Prefetch to prefetchable memory - regions Enable. Prefetchable memory regions - are always disconnected on a region boundary. - Non-prefetchable regions for PCI are always - disconnected on the first transfer. - Note: OCTEON as target will never target-disconnect, - therefore this bit should never be set. */ - uint32_t reserved_2_2 : 1; - uint32_t tswc : 1; /**< Target Split Write Control - 0 = Blocks all requests except PMW - 1 = Blocks all requests including PMW until - split completion occurs. */ - uint32_t mltd : 1; /**< Master Latency Timer Disable - Note: For OCTEON, it is recommended that this bit - be set(to disable the Master Latency timer). */ -#else - uint32_t mltd : 1; - uint32_t tswc : 1; - uint32_t reserved_2_2 : 1; - uint32_t dppmr : 1; - uint32_t pbe : 12; - uint32_t tilt : 4; - uint32_t tslte : 3; - uint32_t tmae : 1; - uint32_t twtae : 1; - uint32_t twsen : 1; - uint32_t twsei : 1; - uint32_t trtae : 1; - uint32_t trdrs : 1; - uint32_t rdsati : 1; - uint32_t trdard : 1; - uint32_t trdnpr : 1; -#endif - } s; - struct cvmx_pci_cfg16_s cn30xx; - struct cvmx_pci_cfg16_s cn31xx; - struct cvmx_pci_cfg16_s cn38xx; - struct cvmx_pci_cfg16_s cn38xxp2; - struct cvmx_pci_cfg16_s cn50xx; - struct cvmx_pci_cfg16_s cn58xx; - struct cvmx_pci_cfg16_s cn58xxp1; -} cvmx_pci_cfg16_t; - - -/** - * cvmx_pci_cfg17 - * - * PCI_CFG17 = Eighteenth 32-bits of PCI config space (Target Split Completion Message - * Enable Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg17_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t tscme : 32; /**< Target Split Completion Message Enable - [31:30]: 00 - [29]: Split Completion Error Indication - [28]: 0 - [27:20]: Split Completion Message Index - [19:0]: 0x00000 - For OCTEON, this register is intended for debug use - only. (as such, it is recommended NOT to be written - with anything other than ZEROES). */ -#else - uint32_t tscme : 32; -#endif - } s; - struct cvmx_pci_cfg17_s cn30xx; - struct cvmx_pci_cfg17_s cn31xx; - struct cvmx_pci_cfg17_s cn38xx; - struct cvmx_pci_cfg17_s cn38xxp2; - struct cvmx_pci_cfg17_s cn50xx; - struct cvmx_pci_cfg17_s cn58xx; - struct cvmx_pci_cfg17_s cn58xxp1; -} cvmx_pci_cfg17_t; - - -/** - * cvmx_pci_cfg18 - * - * PCI_CFG18 = Nineteenth 32-bits of PCI config space (Target Delayed/Split Request - * Pending Sequences) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg18_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t tdsrps : 32; /**< Target Delayed/Split Request Pending Sequences - The application uses this address to remove a - pending split sequence from the target queue by - clearing the appropriate bit. Example: Clearing [14] - clears the pending sequence \#14. An application - or configuration write to this address can clear this - register. - For OCTEON, this register is intended for debug use - only and MUST NEVER be written with anything other - than ZEROES. */ -#else - uint32_t tdsrps : 32; -#endif - } s; - struct cvmx_pci_cfg18_s cn30xx; - struct cvmx_pci_cfg18_s cn31xx; - struct cvmx_pci_cfg18_s cn38xx; - struct cvmx_pci_cfg18_s cn38xxp2; - struct cvmx_pci_cfg18_s cn50xx; - struct cvmx_pci_cfg18_s cn58xx; - struct cvmx_pci_cfg18_s cn58xxp1; -} cvmx_pci_cfg18_t; - - -/** - * cvmx_pci_cfg19 - * - * PCI_CFG19 = Twentieth 32-bits of PCI config space (Master/Target Implementation Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg19_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t mrbcm : 1; /**< Master Request (Memory Read) Byte Count/Byte - Enable select. - 0 = Byte Enables valid. In PCI mode, a burst - transaction cannot be performed using - Memory Read command=4'h6. - 1 = DWORD Byte Count valid (default). In PCI - Mode, the memory read byte enables are - automatically generated by the core. - NOTE: For OCTEON, this bit must always be one - for proper operation. */ - uint32_t mrbci : 1; /**< Master Request (I/O and CR cycles) byte count/byte - enable select. - 0 = Byte Enables valid (default) - 1 = DWORD byte count valid - NOTE: For OCTEON, this bit must always be zero - for proper operation (in support of - Type0/1 Cfg Space accesses which require byte - enable generation directly from a read mask). */ - uint32_t mdwe : 1; /**< Master (Retry) Deferred Write Enable (allow - read requests to pass). - NOTE: Applicable to PCI Mode I/O and memory - transactions only. - 0 = New read requests are NOT accepted until - the current write cycle completes. [Reads - cannot pass writes] - 1 = New read requests are accepted, even when - there is a write cycle pending [Reads can - pass writes]. - NOTE: For OCTEON, this bit must always be zero - for proper operation. */ - uint32_t mdre : 1; /**< Master (Retry) Deferred Read Enable (Allows - read/write requests to pass). - NOTE: Applicable to PCI mode I/O and memory - transactions only. - 0 = New read/write requests are NOT accepted - until the current read cycle completes. - [Read/write requests CANNOT pass reads] - 1 = New read/write requests are accepted, even - when there is a read cycle pending. - [Read/write requests CAN pass reads] - NOTE: For OCTEON, this bit must always be zero - for proper operation. */ - uint32_t mdrimc : 1; /**< Master I/O Deferred/Split Request Outstanding - Maximum Count - 0 = MDRRMC[26:24] - 1 = 1 */ - uint32_t mdrrmc : 3; /**< Master Deferred Read Request Outstanding Max - Count (PCI only). - CR4C[26:24] Max SAC cycles MAX DAC cycles - 000 8 4 - 001 1 0 - 010 2 1 - 011 3 1 - 100 4 2 - 101 5 2 - 110 6 3 - 111 7 3 - For example, if these bits are programmed to - 100, the core can support 2 DAC cycles, 4 SAC - cycles or a combination of 1 DAC and 2 SAC cycles. - NOTE: For the PCI-X maximum outstanding split - transactions, refer to CRE0[22:20] */ - uint32_t tmes : 8; /**< Target/Master Error Sequence \# */ - uint32_t teci : 1; /**< Target Error Command Indication - 0 = Delayed/Split - 1 = Others */ - uint32_t tmei : 1; /**< Target/Master Error Indication - 0 = Target - 1 = Master */ - uint32_t tmse : 1; /**< Target/Master System Error. This bit is set - whenever ATM_SERR_O is active. */ - uint32_t tmdpes : 1; /**< Target/Master Data PERR# error status. This - bit is set whenever ATM_DATA_PERR_O is active. */ - uint32_t tmapes : 1; /**< Target/Master Address PERR# error status. This - bit is set whenever ATM_ADDR_PERR_O is active. */ - uint32_t reserved_9_10 : 2; - uint32_t tibcd : 1; /**< Target Illegal I/O DWORD byte combinations detected. */ - uint32_t tibde : 1; /**< Target Illegal I/O DWORD byte detection enable */ - uint32_t reserved_6_6 : 1; - uint32_t tidomc : 1; /**< Target I/O Delayed/Split request outstanding - maximum count. - 0 = TDOMC[4:0] - 1 = 1 */ - uint32_t tdomc : 5; /**< Target Delayed/Split request outstanding maximum - count. [1..31] and 0=32. - NOTE: If the user programs these bits beyond the - Designed Maximum outstanding count, then the - designed maximum table depth will be used instead. - No additional Deferred/Split transactions will be - accepted if this outstanding maximum count - is reached. Furthermore, no additional - deferred/split transactions will be accepted if - the I/O delay/ I/O Split Request outstanding - maximum is reached. - NOTE: For OCTEON in PCI Mode, this field MUST BE - programmed to 1. (OCTEON can only handle 1 delayed - read at a time). - For OCTEON in PCIX Mode, this field can range from - 1-4. (The designed maximum table depth is 4 - for PCIX mode splits). */ -#else - uint32_t tdomc : 5; - uint32_t tidomc : 1; - uint32_t reserved_6_6 : 1; - uint32_t tibde : 1; - uint32_t tibcd : 1; - uint32_t reserved_9_10 : 2; - uint32_t tmapes : 1; - uint32_t tmdpes : 1; - uint32_t tmse : 1; - uint32_t tmei : 1; - uint32_t teci : 1; - uint32_t tmes : 8; - uint32_t mdrrmc : 3; - uint32_t mdrimc : 1; - uint32_t mdre : 1; - uint32_t mdwe : 1; - uint32_t mrbci : 1; - uint32_t mrbcm : 1; -#endif - } s; - struct cvmx_pci_cfg19_s cn30xx; - struct cvmx_pci_cfg19_s cn31xx; - struct cvmx_pci_cfg19_s cn38xx; - struct cvmx_pci_cfg19_s cn38xxp2; - struct cvmx_pci_cfg19_s cn50xx; - struct cvmx_pci_cfg19_s cn58xx; - struct cvmx_pci_cfg19_s cn58xxp1; -} cvmx_pci_cfg19_t; - - -/** - * cvmx_pci_cfg20 - * - * PCI_CFG20 = Twenty-first 32-bits of PCI config space (Master Deferred/Split Sequence Pending) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg20_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t mdsp : 32; /**< Master Deferred/Split sequence Pending - For OCTEON, this register is intended for debug use - only and MUST NEVER be written with anything other - than ZEROES. */ -#else - uint32_t mdsp : 32; -#endif - } s; - struct cvmx_pci_cfg20_s cn30xx; - struct cvmx_pci_cfg20_s cn31xx; - struct cvmx_pci_cfg20_s cn38xx; - struct cvmx_pci_cfg20_s cn38xxp2; - struct cvmx_pci_cfg20_s cn50xx; - struct cvmx_pci_cfg20_s cn58xx; - struct cvmx_pci_cfg20_s cn58xxp1; -} cvmx_pci_cfg20_t; - - -/** - * cvmx_pci_cfg21 - * - * PCI_CFG21 = Twenty-second 32-bits of PCI config space (Master Split Completion Message Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg21_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t scmre : 32; /**< Master Split Completion message received with - error message. - For OCTEON, this register is intended for debug use - only and MUST NEVER be written with anything other - than ZEROES. */ -#else - uint32_t scmre : 32; -#endif - } s; - struct cvmx_pci_cfg21_s cn30xx; - struct cvmx_pci_cfg21_s cn31xx; - struct cvmx_pci_cfg21_s cn38xx; - struct cvmx_pci_cfg21_s cn38xxp2; - struct cvmx_pci_cfg21_s cn50xx; - struct cvmx_pci_cfg21_s cn58xx; - struct cvmx_pci_cfg21_s cn58xxp1; -} cvmx_pci_cfg21_t; - - -/** - * cvmx_pci_cfg22 - * - * PCI_CFG22 = Twenty-third 32-bits of PCI config space (Master Arbiter Control Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg22_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t mac : 7; /**< Master Arbiter Control - [31:26]: Used only in Fixed Priority mode - (when [25]=1) - [31:30]: MSI Request - 00 = Highest Priority - 01 = Medium Priority - 10 = Lowest Priority - 11 = RESERVED - [29:28]: Target Split Completion - 00 = Highest Priority - 01 = Medium Priority - 10 = Lowest Priority - 11 = RESERVED - [27:26]: New Request; Deferred Read,Deferred Write - 00 = Highest Priority - 01 = Medium Priority - 10 = Lowest Priority - 11 = RESERVED - [25]: Fixed/Round Robin Priority Selector - 0 = Round Robin - 1 = Fixed - NOTE: When [25]=1(fixed priority), the three levels - [31:26] MUST BE programmed to have mutually exclusive - priority levels for proper operation. (Failure to do - so may result in PCI hangs). */ - uint32_t reserved_19_24 : 6; - uint32_t flush : 1; /**< AM_DO_FLUSH_I control - NOTE: This bit MUST BE ONE for proper OCTEON operation */ - uint32_t mra : 1; /**< Master Retry Aborted */ - uint32_t mtta : 1; /**< Master TRDY timeout aborted */ - uint32_t mrv : 8; /**< Master Retry Value [1..255] and 0=infinite */ - uint32_t mttv : 8; /**< Master TRDY timeout value [1..255] and 0=disabled - NOTE: For OCTEON, this bit must always be zero - for proper operation. (OCTEON does not support - master TRDY timeout - target is expected to be - well behaved). */ -#else - uint32_t mttv : 8; - uint32_t mrv : 8; - uint32_t mtta : 1; - uint32_t mra : 1; - uint32_t flush : 1; - uint32_t reserved_19_24 : 6; - uint32_t mac : 7; -#endif - } s; - struct cvmx_pci_cfg22_s cn30xx; - struct cvmx_pci_cfg22_s cn31xx; - struct cvmx_pci_cfg22_s cn38xx; - struct cvmx_pci_cfg22_s cn38xxp2; - struct cvmx_pci_cfg22_s cn50xx; - struct cvmx_pci_cfg22_s cn58xx; - struct cvmx_pci_cfg22_s cn58xxp1; -} cvmx_pci_cfg22_t; - - -/** - * cvmx_pci_cfg56 - * - * PCI_CFG56 = Fifty-seventh 32-bits of PCI config space (PCIX Capabilities Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg56_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_23_31 : 9; - uint32_t most : 3; /**< Maximum outstanding Split transactions - Encoded Value \#Max outstanding splits - 000 1 - 001 2 - 010 3 - 011 4 - 100 8 - 101 8(clamped) - 110 8(clamped) - 111 8(clamped) - NOTE: OCTEON only supports upto a MAXIMUM of 8 - outstanding master split transactions. */ - uint32_t mmbc : 2; /**< Maximum Memory Byte Count - [0=512B,1=1024B,2=2048B,3=4096B] - NOTE: OCTEON does not support this field and has - no effect on limiting the maximum memory byte count. */ - uint32_t roe : 1; /**< Relaxed Ordering Enable */ - uint32_t dpere : 1; /**< Data Parity Error Recovery Enable */ - uint32_t ncp : 8; /**< Next Capability Pointer */ - uint32_t pxcid : 8; /**< PCI-X Capability ID */ -#else - uint32_t pxcid : 8; - uint32_t ncp : 8; - uint32_t dpere : 1; - uint32_t roe : 1; - uint32_t mmbc : 2; - uint32_t most : 3; - uint32_t reserved_23_31 : 9; -#endif - } s; - struct cvmx_pci_cfg56_s cn30xx; - struct cvmx_pci_cfg56_s cn31xx; - struct cvmx_pci_cfg56_s cn38xx; - struct cvmx_pci_cfg56_s cn38xxp2; - struct cvmx_pci_cfg56_s cn50xx; - struct cvmx_pci_cfg56_s cn58xx; - struct cvmx_pci_cfg56_s cn58xxp1; -} cvmx_pci_cfg56_t; - - -/** - * cvmx_pci_cfg57 - * - * PCI_CFG57 = Fifty-eigth 32-bits of PCI config space (PCIX Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg57_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t scemr : 1; /**< Split Completion Error Message Received */ - uint32_t mcrsd : 3; /**< Maximum Cumulative Read Size designed */ - uint32_t mostd : 3; /**< Maximum Outstanding Split transaction designed */ - uint32_t mmrbcd : 2; /**< Maximum Memory Read byte count designed */ - uint32_t dc : 1; /**< Device Complexity - 0 = Simple Device - 1 = Bridge Device */ - uint32_t usc : 1; /**< Unexpected Split Completion */ - uint32_t scd : 1; /**< Split Completion Discarded */ - uint32_t m133 : 1; /**< 133MHz Capable */ - uint32_t w64 : 1; /**< Indicates a 32b(=0) or 64b(=1) device */ - uint32_t bn : 8; /**< Bus Number. Updated on all configuration write - (0x11=PCI) cycles. Its value is dependent upon the PCI/X - (0xFF=PCIX) mode. */ - uint32_t dn : 5; /**< Device Number. Updated on all configuration - write cycles. */ - uint32_t fn : 3; /**< Function Number */ -#else - uint32_t fn : 3; - uint32_t dn : 5; - uint32_t bn : 8; - uint32_t w64 : 1; - uint32_t m133 : 1; - uint32_t scd : 1; - uint32_t usc : 1; - uint32_t dc : 1; - uint32_t mmrbcd : 2; - uint32_t mostd : 3; - uint32_t mcrsd : 3; - uint32_t scemr : 1; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pci_cfg57_s cn30xx; - struct cvmx_pci_cfg57_s cn31xx; - struct cvmx_pci_cfg57_s cn38xx; - struct cvmx_pci_cfg57_s cn38xxp2; - struct cvmx_pci_cfg57_s cn50xx; - struct cvmx_pci_cfg57_s cn58xx; - struct cvmx_pci_cfg57_s cn58xxp1; -} cvmx_pci_cfg57_t; - - -/** - * cvmx_pci_cfg58 - * - * PCI_CFG58 = Fifty-ninth 32-bits of PCI config space (Power Management Capabilities Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg58_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmes : 5; /**< PME Support (D0 to D3cold) */ - uint32_t d2s : 1; /**< D2_Support */ - uint32_t d1s : 1; /**< D1_Support */ - uint32_t auxc : 3; /**< AUX_Current (0..375mA) */ - uint32_t dsi : 1; /**< Device Specific Initialization */ - uint32_t reserved_20_20 : 1; - uint32_t pmec : 1; /**< PME Clock */ - uint32_t pcimiv : 3; /**< Indicates the version of the PCI - Management - Interface Specification with which the core - complies. - 010b = Complies with PCI Management Interface - Specification Revision 1.1 */ - uint32_t ncp : 8; /**< Next Capability Pointer */ - uint32_t pmcid : 8; /**< Power Management Capability ID */ -#else - uint32_t pmcid : 8; - uint32_t ncp : 8; - uint32_t pcimiv : 3; - uint32_t pmec : 1; - uint32_t reserved_20_20 : 1; - uint32_t dsi : 1; - uint32_t auxc : 3; - uint32_t d1s : 1; - uint32_t d2s : 1; - uint32_t pmes : 5; -#endif - } s; - struct cvmx_pci_cfg58_s cn30xx; - struct cvmx_pci_cfg58_s cn31xx; - struct cvmx_pci_cfg58_s cn38xx; - struct cvmx_pci_cfg58_s cn38xxp2; - struct cvmx_pci_cfg58_s cn50xx; - struct cvmx_pci_cfg58_s cn58xx; - struct cvmx_pci_cfg58_s cn58xxp1; -} cvmx_pci_cfg58_t; - - -/** - * cvmx_pci_cfg59 - * - * PCI_CFG59 = Sixtieth 32-bits of PCI config space (Power Management Data/PMCSR Register(s)) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg59_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmdia : 8; /**< Power Management data input from application - (PME_DATA) */ - uint32_t bpccen : 1; /**< BPCC_En (bus power/clock control) enable */ - uint32_t bd3h : 1; /**< B2_B3\#, B2/B3 Support for D3hot */ - uint32_t reserved_16_21 : 6; - uint32_t pmess : 1; /**< PME_Status sticky bit */ - uint32_t pmedsia : 2; /**< PME_Data_Scale input from application - Device (PME_DATA_SCALE[1:0]) - Specific */ - uint32_t pmds : 4; /**< Power Management Data_select */ - uint32_t pmeens : 1; /**< PME_En sticky bit */ - uint32_t reserved_2_7 : 6; - uint32_t ps : 2; /**< Power State (D0 to D3) - The N2 DOES NOT support D1/D2 Power Management - states, therefore writing to this register has - no effect (please refer to the PCI Power - Management - Specification v1.1 for further details about - it?s R/W nature. This is not a conventional - R/W style register. */ -#else - uint32_t ps : 2; - uint32_t reserved_2_7 : 6; - uint32_t pmeens : 1; - uint32_t pmds : 4; - uint32_t pmedsia : 2; - uint32_t pmess : 1; - uint32_t reserved_16_21 : 6; - uint32_t bd3h : 1; - uint32_t bpccen : 1; - uint32_t pmdia : 8; -#endif - } s; - struct cvmx_pci_cfg59_s cn30xx; - struct cvmx_pci_cfg59_s cn31xx; - struct cvmx_pci_cfg59_s cn38xx; - struct cvmx_pci_cfg59_s cn38xxp2; - struct cvmx_pci_cfg59_s cn50xx; - struct cvmx_pci_cfg59_s cn58xx; - struct cvmx_pci_cfg59_s cn58xxp1; -} cvmx_pci_cfg59_t; - - -/** - * cvmx_pci_cfg60 - * - * PCI_CFG60 = Sixty-first 32-bits of PCI config space (MSI Capabilities Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg60_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t m64 : 1; /**< 32/64 b message */ - uint32_t mme : 3; /**< Multiple Message Enable(1,2,4,8,16,32) */ - uint32_t mmc : 3; /**< Multiple Message Capable(0=1,1=2,2=4,3=8,4=16,5=32) */ - uint32_t msien : 1; /**< MSI Enable */ - uint32_t ncp : 8; /**< Next Capability Pointer */ - uint32_t msicid : 8; /**< MSI Capability ID */ -#else - uint32_t msicid : 8; - uint32_t ncp : 8; - uint32_t msien : 1; - uint32_t mmc : 3; - uint32_t mme : 3; - uint32_t m64 : 1; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pci_cfg60_s cn30xx; - struct cvmx_pci_cfg60_s cn31xx; - struct cvmx_pci_cfg60_s cn38xx; - struct cvmx_pci_cfg60_s cn38xxp2; - struct cvmx_pci_cfg60_s cn50xx; - struct cvmx_pci_cfg60_s cn58xx; - struct cvmx_pci_cfg60_s cn58xxp1; -} cvmx_pci_cfg60_t; - - -/** - * cvmx_pci_cfg61 - * - * PCI_CFG61 = Sixty-second 32-bits of PCI config space (MSI Lower Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg61_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t msi31t2 : 30; /**< App Specific MSI Address [31:2] */ - uint32_t reserved_0_1 : 2; -#else - uint32_t reserved_0_1 : 2; - uint32_t msi31t2 : 30; -#endif - } s; - struct cvmx_pci_cfg61_s cn30xx; - struct cvmx_pci_cfg61_s cn31xx; - struct cvmx_pci_cfg61_s cn38xx; - struct cvmx_pci_cfg61_s cn38xxp2; - struct cvmx_pci_cfg61_s cn50xx; - struct cvmx_pci_cfg61_s cn58xx; - struct cvmx_pci_cfg61_s cn58xxp1; -} cvmx_pci_cfg61_t; - - -/** - * cvmx_pci_cfg62 - * - * PCI_CFG62 = Sixty-third 32-bits of PCI config space (MSI Upper Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg62_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t msi : 32; /**< MSI Address [63:32] */ -#else - uint32_t msi : 32; -#endif - } s; - struct cvmx_pci_cfg62_s cn30xx; - struct cvmx_pci_cfg62_s cn31xx; - struct cvmx_pci_cfg62_s cn38xx; - struct cvmx_pci_cfg62_s cn38xxp2; - struct cvmx_pci_cfg62_s cn50xx; - struct cvmx_pci_cfg62_s cn58xx; - struct cvmx_pci_cfg62_s cn58xxp1; -} cvmx_pci_cfg62_t; - - -/** - * cvmx_pci_cfg63 - * - * PCI_CFG63 = Sixty-fourth 32-bits of PCI config space (MSI Message Data Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_cfg63_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t msimd : 16; /**< MSI Message Data */ -#else - uint32_t msimd : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_pci_cfg63_s cn30xx; - struct cvmx_pci_cfg63_s cn31xx; - struct cvmx_pci_cfg63_s cn38xx; - struct cvmx_pci_cfg63_s cn38xxp2; - struct cvmx_pci_cfg63_s cn50xx; - struct cvmx_pci_cfg63_s cn58xx; - struct cvmx_pci_cfg63_s cn58xxp1; -} cvmx_pci_cfg63_t; - - -/** - * cvmx_pci_cnt_reg - * - * PCI_CNT_REG = PCI Clock Count Register - * - * This register is provided to software as a means to determine PCI Bus Type/Speed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_cnt_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t hm_pcix : 1; /**< PCI Host Mode Sampled Bus Type (0:PCI/1:PCIX) - This field represents what OCTEON(in Host mode) - sampled as the 'intended' PCI Bus Type based on - the PCI_PCIXCAP pin. (see HM_SPEED Bus Type/Speed - encoding table). */ - uint64_t hm_speed : 2; /**< PCI Host Mode Sampled Bus Speed - This field represents what OCTEON(in Host mode) - sampled as the 'intended' PCI Bus Speed based on - the PCI100, PCI_M66EN and PCI_PCIXCAP pins. - NOTE: This DOES NOT reflect what the actual PCI - Bus Type/Speed values are. They only indicate what - OCTEON sampled as the 'intended' values. - PCI Host Mode Sampled Bus Type/Speed Table: - M66EN | PCIXCAP | PCI100 | HM_PCIX | HM_SPEED[1:0] - ---------+---------+---------+----------+------------- - 0 | 0 | 0 | 0=PCI | 00=33 MHz - 0 | 0 | 1 | 0=PCI | 00=33 MHz - 0 | Z | 0 | 0=PCI | 01=66 MHz - 0 | Z | 1 | 0=PCI | 01=66 MHz - 1 | 0 | 0 | 0=PCI | 01=66 MHz - 1 | 0 | 1 | 0=PCI | 01=66 MHz - 1 | Z | 0 | 0=PCI | 01=66 MHz - 1 | Z | 1 | 0=PCI | 01=66 MHz - 0 | 1 | 1 | 1=PCIX | 10=100 MHz - 1 | 1 | 1 | 1=PCIX | 10=100 MHz - 0 | 1 | 0 | 1=PCIX | 11=133 MHz - 1 | 1 | 0 | 1=PCIX | 11=133 MHz - NOTE: PCIXCAP has tri-level value (0,1,Z). See PCI specification - for more details on board level hookup to achieve these - values. - NOTE: Software can use the NPI_PCI_INT_ARB_CFG[PCI_OVR] - to override the 'sampled' PCI Bus Type/Speed. - NOTE: Software can also use the PCI_CNT_REG[PCICNT] to determine - the exact PCI(X) Bus speed. - Example: PCI_REF_CLKIN=133MHz - PCI_HOST_MODE=1 - PCI_M66EN=0 - PCI_PCIXCAP=1 - PCI_PCI100=1 - For this example, OCTEON will generate - PCI_CLK_OUT=100MHz and drive the proper PCI - Initialization sequence (DEVSEL#=Deasserted, - STOP#=Asserted, TRDY#=Asserted) during PCI_RST_N - deassertion. - NOTE: The HM_SPEED field is only valid after - PLL_REF_CLK is active and PLL_DCOK is asserted. - (see HRM description for power-on/reset sequence). - NOTE: PCI_REF_CLKIN input must be 133MHz (and is used - to generate the PCI_CLK_OUT pin in Host Mode). - *** NOTE: O9N PASS1 Addition */ - uint64_t ap_pcix : 1; /**< PCI(X) Bus Type (0:PCI/1:PCIX) - At PCI_RST_N de-assertion, the PCI Initialization - pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is - captured to provide information to software regarding - the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range. */ - uint64_t ap_speed : 2; /**< PCI(X) Bus Speed (0:33/1:66/2:100/3:133) - At PCI_RST_N de-assertion, the PCI Initialization - pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is - captured to provide information to software regarding - the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range. - PCI-X Initialization Pattern(see PCIX Spec): - PCI_DEVSEL_N PCI_STOP_N PCI_TRDY_N Mode MaxClk(ns) MinClk(ns) MinClk(MHz) MaxClk(MHz) - -------------+----------+----------+-------+---------+----------+----------+------------------ - Deasserted Deasserted Deasserted PCI 33 -- 30 0 33 - PCI 66 30 15 33 66 - Deasserted Deasserted Asserted PCI-X 20 15 50 66 - Deasserted Asserted Deasserted PCI-X 15 10 66 100 - Deasserted Asserted Asserted PCI-X 10 7.5 100 133 - Asserted Deasserted Deasserted PCI-X Reserved Reserved Reserved Reserved - Asserted Deasserted Asserted PCI-X Reserved Reserved Reserved Reserved - Asserted Asserted Deasserted PCI-X Reserved Reserved Reserved Reserved - Asserted Asserted Asserted PCI-X Reserved Reserved Reserved Reserved - NOTE: The PCI Bus speed 'assumed' from the initialization - pattern is really intended for an operational range. - For example: If PINIT=100, this indicates PCI-X in the - 100-133MHz range. The PCI_CNT field can be used to further - determine a more exacting PCI Bus frequency value if - required. - *** NOTE: O9N PASS1 Addition */ - uint64_t pcicnt : 32; /**< Free Running PCI Clock counter. - At PCI Reset, the PCICNT=0, and is auto-incremented - on every PCI clock and will auto-wrap back to zero - when saturated. - NOTE: Writes override the auto-increment to allow - software to preload any initial value. - The PCICNT field is provided to software as a means - to determine the PCI Bus Speed. - Assuming software has knowledge of the core frequency - (eclk), this register can be written with a value X, - wait 'n' core clocks(eclk) and then read later(Y) to - determine \#PCI clocks(Y-X) have elapsed within 'n' core - clocks to determine the PCI input Clock frequency. - *** NOTE: O9N PASS1 Addition */ -#else - uint64_t pcicnt : 32; - uint64_t ap_speed : 2; - uint64_t ap_pcix : 1; - uint64_t hm_speed : 2; - uint64_t hm_pcix : 1; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_pci_cnt_reg_s cn50xx; - struct cvmx_pci_cnt_reg_s cn58xx; - struct cvmx_pci_cnt_reg_s cn58xxp1; -} cvmx_pci_cnt_reg_t; - - -/** - * cvmx_pci_ctl_status_2 - * - * PCI_CTL_STATUS_2 = PCI Control Status 2 Register - * - * Control status register accessable from both PCI and NCB. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_ctl_status_2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_29_31 : 3; - uint32_t bb1_hole : 3; /**< Big BAR 1 Hole - NOT IN PASS 1 NOR PASS 2 - When PCI_CTL_STATUS_2[BB1]=1, this field defines - an encoded size of the upper BAR1 region which - OCTEON will mask out (ie: not respond to). - (see definition of BB1_HOLE and BB1_SIZ encodings - in the PCI_CTL_STATUS_2[BB1] definition below). */ - uint32_t bb1_siz : 1; /**< Big BAR 1 Size - NOT IN PASS 1 NOR PASS 2 - When PCI_CTL_STATUS_2[BB1]=1, this field defines - the programmable SIZE of BAR 1. - - 0: 1GB / 1: 2GB */ - uint32_t bb_ca : 1; /**< Set to '1' for Big Bar Mode to do STT/LDT L2C - operations. - NOT IN PASS 1 NOR PASS 2 */ - uint32_t bb_es : 2; /**< Big Bar Node Endian Swap Mode - - 0: No Swizzle - - 1: Byte Swizzle (per-QW) - - 2: Byte Swizzle (per-LW) - - 3: LongWord Swizzle - NOT IN PASS 1 NOR PASS 2 */ - uint32_t bb1 : 1; /**< Big Bar 1 Enable - NOT IN PASS 1 NOR PASS 2 - When PCI_CTL_STATUS_2[BB1] is set, the following differences - occur: - - OCTEON's BAR1 becomes somewhere in the range 512-2048 MB rather - than the default 128MB. - - The following table indicates the effective size of - BAR1 when BB1 is set: - BB1_SIZ BB1_HOLE Effective size Comment - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 0 0 1024 MB Normal 1GB BAR - 0 1 1008 MB 1 GB, 16 MB hole - 0 2 992 MB 1 GB, 32 MB hole - 0 3 960 MB 1 GB, 64 MB hole - 0 4 896 MB 1 GB,128 MB hole - 0 5 768 MB 1 GB,256 MB hole - 0 6 512 MB 1 GB,512 MB hole - 0 7 Illegal - 1 0 2048 MB Normal 2GB BAR - 1 1 2032 MB 2 GB, 16 MB hole - 1 2 2016 MB 2 GB, 32 MB hole - 1 3 1984 MB 2 GB, 64 MB hole - 1 4 1920 MB 2 GB,128 MB hole - 1 5 1792 MB 2 GB,256 MB hole - 1 6 1536 MB 2 GB,512 MB hole - 1 7 Illegal - - When BB1_SIZ is 0: PCI_CFG06[LBASE<2:0>] reads as zero - and are ignored on write. BAR1 is an entirely ordinary - 1 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0. - When BB1_HOLE is not zero, BAR1 addresses are programmed - as if the BAR were 1GB, but, OCTEON does not respond - to addresses in the programmed holes. - - When BB1_SIZ is 1: PCI_CFG06[LBASE<3:0>] reads as zero - and are ignored on write. BAR1 is an entirely ordinary - 2 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0. - When BB1_HOLE is not zero, BAR1 addresses are programmed - as if the BAR were 2GB, but, OCTEON does not respond - to addresses in the programmed holes. - - Note that the BB1_HOLE value has no effect on the - PCI_CFG06[LBASE] behavior. BB1_HOLE only affects whether - OCTEON accepts an address. BB1_SIZ does affect PCI_CFG06[LBASE] - behavior, however. - - The first 128MB, i.e. addresses on the PCI bus in the range - BAR1+0 .. BAR1+0x07FFFFFF - access OCTEON's DRAM addresses with PCI_BAR1_INDEX CSR's - as before - - The remaining address space, i.e. addresses - on the PCI bus in the range - BAR1+0x08000000 .. BAR1+size-1, - where size is the size of BAR1 as selected by the above - table (based on the BB1_SIZ and BB1_HOLE values), are mapped to - OCTEON physical DRAM addresses as follows: - PCI Address Range OCTEON Physical Address Range - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - BAR1+0x08000000 .. BAR1+size-1 | 0x88000000 .. 0x7FFFFFFF+size - and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and - PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit - for these references. - The consequences of any burst that crosses the end of the PCI - Address Range for BAR1 are unpredicable. - - The consequences of any burst access that crosses the boundary - between BAR1+0x07FFFFFF and BAR1+0x08000000 are unpredictable in PCI-X - mode. OCTEON may disconnect PCI references at this boundary. */ - uint32_t bb0 : 1; /**< Big Bar 0 Enable - NOT IN PASS 1 NOR PASS 2 - When PCI_CTL_STATUS_2[BB0] is set, the following - differences occur: - - OCTEON's BAR0 becomes 2GB rather than the default 4KB. - PCI_CFG04[LBASE<18:0>] reads as zero and is ignored on write. - - OCTEON's BAR0 becomes burstable. (When BB0 is clear, OCTEON - single-phase disconnects PCI BAR0 reads and PCI/PCI-X BAR0 - writes, and splits (burstably) PCI-X BAR0 reads.) - - The first 4KB, i.e. addresses on the PCI bus in the range - BAR0+0 .. BAR0+0xFFF - access OCTEON's PCI-type CSR's as when BB0 is clear. - - The remaining address space, i.e. addresses on the PCI bus - in the range - BAR0+0x1000 .. BAR0+0x7FFFFFFF - are mapped to OCTEON physical DRAM addresses as follows: - PCI Address Range OCTEON Physical Address Range - ------------------------------------+------------------------------ - BAR0+0x00001000 .. BAR0+0x0FFFFFFF | 0x000001000 .. 0x00FFFFFFF - BAR0+0x10000000 .. BAR0+0x1FFFFFFF | 0x410000000 .. 0x41FFFFFFF - BAR0+0x20000000 .. BAR0+0x7FFFFFFF | 0x020000000 .. 0x07FFFFFFF - and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and - PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit - for these references. - The consequences of any burst that crosses the end of the PCI - Address Range for BAR0 are unpredicable. - - The consequences of any burst access that crosses the boundary - between BAR0+0xFFF and BAR0+0x1000 are unpredictable in PCI-X - mode. OCTEON may disconnect PCI references at this boundary. - - The results of any burst read that crosses the boundary - between BAR0+0x0FFFFFFF and BAR0+0x10000000 are unpredictable. - The consequences of any burst write that crosses this same - boundary are unpredictable. - - The results of any burst read that crosses the boundary - between BAR0+0x1FFFFFFF and BAR0+0x20000000 are unpredictable. - The consequences of any burst write that crosses this same - boundary are unpredictable. */ - uint32_t erst_n : 1; /**< Reset active Low. PASS-2 */ - uint32_t bar2pres : 1; /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN]) - is NOT blown the value of this field is '0' after - reset and BAR2 is NOT present. When the fuse IS - blown the value of this field is '1' after reset - and BAR2 is present. Note that SW can change this - field after reset. This is a PASS-2 field. */ - uint32_t scmtyp : 1; /**< Split Completion Message CMD Type (0=RD/1=WR) - When SCM=1, SCMTYP specifies the CMD intent (R/W) */ - uint32_t scm : 1; /**< Split Completion Message Detected (Read or Write) */ - uint32_t en_wfilt : 1; /**< When '1' the window-access filter is enabled. - Unfilter writes are: - MIO, SubId0 - MIO, SubId7 - NPI, SubId0 - NPI, SubId7 - POW, SubId7 - DFA, SubId7 - IPD, SubId7 - Unfiltered Reads are: - MIO, SubId0 - MIO, SubId7 - NPI, SubId0 - NPI, SubId7 - POW, SubId1 - POW, SubId2 - POW, SubId3 - POW, SubId7 - DFA, SubId7 - IPD, SubId7 */ - uint32_t reserved_14_14 : 1; - uint32_t ap_pcix : 1; /**< PCX Core Mode status (0=PCI Bus/1=PCIX) - If one or more of PCI_DEVSEL_N, PCI_STOP_N, and - PCI_TRDY_N are asserted at the rising edge of - PCI_RST_N, the device enters PCI-X mode. - Otherwise, the device enters conventional PCI - mode at the rising edge of RST#. */ - uint32_t ap_64ad : 1; /**< PCX Core Bus status (0=32b Bus/1=64b Bus) - When PCI_RST_N pin is de-asserted, the state - of PCI_REQ64_N(driven by central agent) determines - the width of the PCI/X bus. */ - uint32_t b12_bist : 1; /**< Bist Status For Memeory In B12 */ - uint32_t pmo_amod : 1; /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */ - uint32_t pmo_fpc : 3; /**< PMO-ARB Fixed Priority Counter - When PMO_AMOD=0 (FP mode), this field represents - the \# of CMD1 requests that are issued (at higher - priority) before a single lower priority CMD0 - is allowed to issue (to ensure foward progress). - - 0: 1 CMD1 Request issued before CMD0 allowed - - ... - - 7: 8 CMD1 Requests issued before CMD0 allowed */ - uint32_t tsr_hwm : 3; /**< Target Split-Read ADB(allowable disconnect boundary) - High Water Mark. - Specifies the number of ADBs(128 Byte aligned chunks) - that are accumulated(pending) BEFORE the Target Split - completion is attempted on the PCI bus. - - 0: RESERVED/ILLEGAL - - 1: 2 Pending ADBs (129B-256B) - - 2: 3 Pending ADBs (257B-384B) - - 3: 4 Pending ADBs (385B-512B) - - 4: 5 Pending ADBs (513B-640B) - - 5: 6 Pending ADBs (641B-768B) - - 6: 7 Pending ADBs (769B-896B) - - 7: 8 Pending ADBs (897B-1024B) - Example: Suppose a 1KB target memory request with - starting byte offset address[6:0]=0x7F is split by - the OCTEON and the TSR_HWM=1(2 ADBs). - The OCTEON will start the target split completion - on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B - of data have been received from memory (even though - the remaining 895B has not yet been received). The - OCTEON will continue the split completion until it - has consumed all of the pended split data. If the - full transaction length(1KB) of data was NOT entirely - transferred, then OCTEON will terminate the split - completion and again wait for another 2 ADB-aligned data - chunks(256B) of pended split data to be received from - memory before starting another split completion request. - This allows Octeon (as split completer), to send back - multiple split completions for a given large split - transaction without having to wait for the entire - transaction length to be received from memory. - NOTE: For split transaction sizes 'smaller' than the - specified TSR_HWM value, the split completion - is started when the last datum has been received from - memory. - NOTE: It is IMPERATIVE that this field NEVER BE - written to a ZERO value. A value of zero is - reserved/illegal and can result in PCIX bus hangs). */ - uint32_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when - clear '0' BAR2 access will be target-aborted. */ - uint32_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to - determine the endian swap mode. */ - uint32_t bar2_cax : 1; /**< Value will be XORed with pci-address[38] to - determine the L2 cache attribute. - When XOR result is 1, not cached in L2 */ -#else - uint32_t bar2_cax : 1; - uint32_t bar2_esx : 2; - uint32_t bar2_enb : 1; - uint32_t tsr_hwm : 3; - uint32_t pmo_fpc : 3; - uint32_t pmo_amod : 1; - uint32_t b12_bist : 1; - uint32_t ap_64ad : 1; - uint32_t ap_pcix : 1; - uint32_t reserved_14_14 : 1; - uint32_t en_wfilt : 1; - uint32_t scm : 1; - uint32_t scmtyp : 1; - uint32_t bar2pres : 1; - uint32_t erst_n : 1; - uint32_t bb0 : 1; - uint32_t bb1 : 1; - uint32_t bb_es : 2; - uint32_t bb_ca : 1; - uint32_t bb1_siz : 1; - uint32_t bb1_hole : 3; - uint32_t reserved_29_31 : 3; -#endif - } s; - struct cvmx_pci_ctl_status_2_s cn30xx; - struct cvmx_pci_ctl_status_2_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t erst_n : 1; /**< Reset active Low. */ - uint32_t bar2pres : 1; /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN]) - is NOT blown the value of this field is '0' after - reset and BAR2 is NOT present. When the fuse IS - blown the value of this field is '1' after reset - and BAR2 is present. Note that SW can change this - field after reset. */ - uint32_t scmtyp : 1; /**< Split Completion Message CMD Type (0=RD/1=WR) - When SCM=1, SCMTYP specifies the CMD intent (R/W) */ - uint32_t scm : 1; /**< Split Completion Message Detected (Read or Write) */ - uint32_t en_wfilt : 1; /**< When '1' the window-access filter is enabled. - Unfilter writes are: - MIO, SubId0 - MIO, SubId7 - NPI, SubId0 - NPI, SubId7 - POW, SubId7 - DFA, SubId7 - IPD, SubId7 - USBN, SubId7 - Unfiltered Reads are: - MIO, SubId0 - MIO, SubId7 - NPI, SubId0 - NPI, SubId7 - POW, SubId1 - POW, SubId2 - POW, SubId3 - POW, SubId7 - DFA, SubId7 - IPD, SubId7 - USBN, SubId7 */ - uint32_t reserved_14_14 : 1; - uint32_t ap_pcix : 1; /**< PCX Core Mode status (0=PCI Bus/1=PCIX) */ - uint32_t ap_64ad : 1; /**< PCX Core Bus status (0=32b Bus/1=64b Bus) */ - uint32_t b12_bist : 1; /**< Bist Status For Memeory In B12 */ - uint32_t pmo_amod : 1; /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */ - uint32_t pmo_fpc : 3; /**< PMO-ARB Fixed Priority Counter - When PMO_AMOD=0 (FP mode), this field represents - the \# of CMD1 requests that are issued (at higher - priority) before a single lower priority CMD0 - is allowed to issue (to ensure foward progress). - - 0: 1 CMD1 Request issued before CMD0 allowed - - ... - - 7: 8 CMD1 Requests issued before CMD0 allowed */ - uint32_t tsr_hwm : 3; /**< Target Split-Read ADB(allowable disconnect boundary) - High Water Mark. - Specifies the number of ADBs(128 Byte aligned chunks) - that are accumulated(pending) BEFORE the Target Split - completion is attempted on the PCI bus. - - 0: RESERVED/ILLEGAL - - 1: 2 Pending ADBs (129B-256B) - - 2: 3 Pending ADBs (257B-384B) - - 3: 4 Pending ADBs (385B-512B) - - 4: 5 Pending ADBs (513B-640B) - - 5: 6 Pending ADBs (641B-768B) - - 6: 7 Pending ADBs (769B-896B) - - 7: 8 Pending ADBs (897B-1024B) - Example: Suppose a 1KB target memory request with - starting byte offset address[6:0]=0x7F is split by - the OCTEON and the TSR_HWM=1(2 ADBs). - The OCTEON will start the target split completion - on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B - of data have been received from memory (even though - the remaining 895B has not yet been received). The - OCTEON will continue the split completion until it - has consumed all of the pended split data. If the - full transaction length(1KB) of data was NOT entirely - transferred, then OCTEON will terminate the split - completion and again wait for another 2 ADB-aligned data - chunks(256B) of pended split data to be received from - memory before starting another split completion request. - This allows Octeon (as split completer), to send back - multiple split completions for a given large split - transaction without having to wait for the entire - transaction length to be received from memory. - NOTE: For split transaction sizes 'smaller' than the - specified TSR_HWM value, the split completion - is started when the last datum has been received from - memory. - NOTE: It is IMPERATIVE that this field NEVER BE - written to a ZERO value. A value of zero is - reserved/illegal and can result in PCIX bus hangs). */ - uint32_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when - clear '0' BAR2 access will be target-aborted. */ - uint32_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to - determine the endian swap mode. */ - uint32_t bar2_cax : 1; /**< Value will be XORed with pci-address[38] to - determine the L2 cache attribute. - When XOR result is 1, not allocated in L2 cache */ -#else - uint32_t bar2_cax : 1; - uint32_t bar2_esx : 2; - uint32_t bar2_enb : 1; - uint32_t tsr_hwm : 3; - uint32_t pmo_fpc : 3; - uint32_t pmo_amod : 1; - uint32_t b12_bist : 1; - uint32_t ap_64ad : 1; - uint32_t ap_pcix : 1; - uint32_t reserved_14_14 : 1; - uint32_t en_wfilt : 1; - uint32_t scm : 1; - uint32_t scmtyp : 1; - uint32_t bar2pres : 1; - uint32_t erst_n : 1; - uint32_t reserved_20_31 : 12; -#endif - } cn31xx; - struct cvmx_pci_ctl_status_2_s cn38xx; - struct cvmx_pci_ctl_status_2_cn31xx cn38xxp2; - struct cvmx_pci_ctl_status_2_s cn50xx; - struct cvmx_pci_ctl_status_2_s cn58xx; - struct cvmx_pci_ctl_status_2_s cn58xxp1; -} cvmx_pci_ctl_status_2_t; - - -/** - * cvmx_pci_dbell# - * - * PCI_DBELL0 = PCI Doorbell-0 - * - * The value to write to the doorbell 0 register. The value in this register is acted upon when the - * least-significant-byte of this register is written. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_dbellx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t inc_val : 16; /**< Software writes this register with the - number of new Instructions to be processed - on the Instruction Queue. When read this - register contains the last write value. */ -#else - uint32_t inc_val : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_pci_dbellx_s cn30xx; - struct cvmx_pci_dbellx_s cn31xx; - struct cvmx_pci_dbellx_s cn38xx; - struct cvmx_pci_dbellx_s cn38xxp2; - struct cvmx_pci_dbellx_s cn50xx; - struct cvmx_pci_dbellx_s cn58xx; - struct cvmx_pci_dbellx_s cn58xxp1; -} cvmx_pci_dbellx_t; - - -/** - * cvmx_pci_dma_cnt# - * - * PCI_DMA_CNT0 = PCI DMA Count0 - * - * Keeps track of the number of DMAs or bytes sent by DMAs. The value in this register is acted upon when the - * least-significant-byte of this register is written. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_dma_cntx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dma_cnt : 32; /**< Update with the number of DMAs completed or the - number of bytes sent for DMA's associated with - this counter. When this register is written the - value written to [15:0] will be subtracted from - the value in this register. */ -#else - uint32_t dma_cnt : 32; -#endif - } s; - struct cvmx_pci_dma_cntx_s cn30xx; - struct cvmx_pci_dma_cntx_s cn31xx; - struct cvmx_pci_dma_cntx_s cn38xx; - struct cvmx_pci_dma_cntx_s cn38xxp2; - struct cvmx_pci_dma_cntx_s cn50xx; - struct cvmx_pci_dma_cntx_s cn58xx; - struct cvmx_pci_dma_cntx_s cn58xxp1; -} cvmx_pci_dma_cntx_t; - - -/** - * cvmx_pci_dma_int_lev# - * - * PCI_DMA_INT_LEV0 = PCI DMA Sent Interrupt Level For DMA 0 - * - * Interrupt when the value in PCI_DMA_CNT0 is equal to or greater than the register value. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_dma_int_levx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pkt_cnt : 32; /**< When PCI_DMA_CNT0 exceeds the value in this - DCNT0 will be set in PCI_INT_SUM and PCI_INT_SUM2. */ -#else - uint32_t pkt_cnt : 32; -#endif - } s; - struct cvmx_pci_dma_int_levx_s cn30xx; - struct cvmx_pci_dma_int_levx_s cn31xx; - struct cvmx_pci_dma_int_levx_s cn38xx; - struct cvmx_pci_dma_int_levx_s cn38xxp2; - struct cvmx_pci_dma_int_levx_s cn50xx; - struct cvmx_pci_dma_int_levx_s cn58xx; - struct cvmx_pci_dma_int_levx_s cn58xxp1; -} cvmx_pci_dma_int_levx_t; - - -/** - * cvmx_pci_dma_time# - * - * PCI_DMA_TIME0 = PCI DMA Sent Timer For DMA0 - * - * Time to wait from DMA being sent before issuing an interrupt. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_dma_timex_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dma_time : 32; /**< Number of PCI clock cycle to wait before - setting DTIME0 in PCI_INT_SUM and PCI_INT_SUM2. - After PCI_DMA_CNT0 becomes non-zero. - The timer is reset when the - PCI_INT_SUM[27] register is cleared. */ -#else - uint32_t dma_time : 32; -#endif - } s; - struct cvmx_pci_dma_timex_s cn30xx; - struct cvmx_pci_dma_timex_s cn31xx; - struct cvmx_pci_dma_timex_s cn38xx; - struct cvmx_pci_dma_timex_s cn38xxp2; - struct cvmx_pci_dma_timex_s cn50xx; - struct cvmx_pci_dma_timex_s cn58xx; - struct cvmx_pci_dma_timex_s cn58xxp1; -} cvmx_pci_dma_timex_t; - - -/** - * cvmx_pci_instr_count# - * - * PCI_INSTR_COUNT0 = PCI Instructions Outstanding Request Count - * - * The number of instructions to be fetched by the Instruction-0 Engine. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_instr_countx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t icnt : 32; /**< Number of Instructions to be fetched by the - Instruction Engine. - A write of any non zero value to this register - will clear the value of this register. */ -#else - uint32_t icnt : 32; -#endif - } s; - struct cvmx_pci_instr_countx_s cn30xx; - struct cvmx_pci_instr_countx_s cn31xx; - struct cvmx_pci_instr_countx_s cn38xx; - struct cvmx_pci_instr_countx_s cn38xxp2; - struct cvmx_pci_instr_countx_s cn50xx; - struct cvmx_pci_instr_countx_s cn58xx; - struct cvmx_pci_instr_countx_s cn58xxp1; -} cvmx_pci_instr_countx_t; - - -/** - * cvmx_pci_int_enb - * - * PCI_INT_ENB = PCI Interrupt Enable - * - * Enables interrupt bits in the PCI_INT_SUM register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ - uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ - uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ - uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ - uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ - uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ - uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ - uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ - uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ - uint64_t iptime3 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[24] */ - uint64_t iptime2 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[23] */ - uint64_t iptime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */ - uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ - uint64_t ipcnt3 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[20] */ - uint64_t ipcnt2 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[19] */ - uint64_t ipcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */ - uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ - uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ - uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ - uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ - uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ - uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ - uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ - uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ - uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ - uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ - uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ - uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ - uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ - uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ - uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ - uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ - uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ - uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ -#else - uint64_t itr_wabt : 1; - uint64_t imr_wabt : 1; - uint64_t imr_wtto : 1; - uint64_t itr_abt : 1; - uint64_t imr_abt : 1; - uint64_t imr_tto : 1; - uint64_t imsi_per : 1; - uint64_t imsi_tabt : 1; - uint64_t imsi_mabt : 1; - uint64_t imsc_msg : 1; - uint64_t itsr_abt : 1; - uint64_t iserr : 1; - uint64_t iaperr : 1; - uint64_t idperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t irsl_int : 1; - uint64_t ipcnt0 : 1; - uint64_t ipcnt1 : 1; - uint64_t ipcnt2 : 1; - uint64_t ipcnt3 : 1; - uint64_t iptime0 : 1; - uint64_t iptime1 : 1; - uint64_t iptime2 : 1; - uint64_t iptime3 : 1; - uint64_t idcnt0 : 1; - uint64_t idcnt1 : 1; - uint64_t idtime0 : 1; - uint64_t idtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_pci_int_enb_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ - uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ - uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ - uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ - uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ - uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ - uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ - uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ - uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ - uint64_t reserved_22_24 : 3; - uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ - uint64_t reserved_18_20 : 3; - uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ - uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ - uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ - uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ - uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ - uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ - uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ - uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ - uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ - uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ - uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ - uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ - uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ - uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ - uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ - uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ - uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ - uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ -#else - uint64_t itr_wabt : 1; - uint64_t imr_wabt : 1; - uint64_t imr_wtto : 1; - uint64_t itr_abt : 1; - uint64_t imr_abt : 1; - uint64_t imr_tto : 1; - uint64_t imsi_per : 1; - uint64_t imsi_tabt : 1; - uint64_t imsi_mabt : 1; - uint64_t imsc_msg : 1; - uint64_t itsr_abt : 1; - uint64_t iserr : 1; - uint64_t iaperr : 1; - uint64_t idperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t irsl_int : 1; - uint64_t ipcnt0 : 1; - uint64_t reserved_18_20 : 3; - uint64_t iptime0 : 1; - uint64_t reserved_22_24 : 3; - uint64_t idcnt0 : 1; - uint64_t idcnt1 : 1; - uint64_t idtime0 : 1; - uint64_t idtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn30xx; - struct cvmx_pci_int_enb_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ - uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ - uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ - uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ - uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ - uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ - uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ - uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ - uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ - uint64_t reserved_23_24 : 2; - uint64_t iptime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */ - uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ - uint64_t reserved_19_20 : 2; - uint64_t ipcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */ - uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ - uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ - uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ - uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ - uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ - uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ - uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ - uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ - uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ - uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ - uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ - uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ - uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ - uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ - uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ - uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ - uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ - uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ -#else - uint64_t itr_wabt : 1; - uint64_t imr_wabt : 1; - uint64_t imr_wtto : 1; - uint64_t itr_abt : 1; - uint64_t imr_abt : 1; - uint64_t imr_tto : 1; - uint64_t imsi_per : 1; - uint64_t imsi_tabt : 1; - uint64_t imsi_mabt : 1; - uint64_t imsc_msg : 1; - uint64_t itsr_abt : 1; - uint64_t iserr : 1; - uint64_t iaperr : 1; - uint64_t idperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t irsl_int : 1; - uint64_t ipcnt0 : 1; - uint64_t ipcnt1 : 1; - uint64_t reserved_19_20 : 2; - uint64_t iptime0 : 1; - uint64_t iptime1 : 1; - uint64_t reserved_23_24 : 2; - uint64_t idcnt0 : 1; - uint64_t idcnt1 : 1; - uint64_t idtime0 : 1; - uint64_t idtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn31xx; - struct cvmx_pci_int_enb_s cn38xx; - struct cvmx_pci_int_enb_s cn38xxp2; - struct cvmx_pci_int_enb_cn31xx cn50xx; - struct cvmx_pci_int_enb_s cn58xx; - struct cvmx_pci_int_enb_s cn58xxp1; -} cvmx_pci_int_enb_t; - - -/** - * cvmx_pci_int_enb2 - * - * PCI_INT_ENB2 = PCI Interrupt Enable2 Register - * - * Enables interrupt bits in the PCI_INT_SUM2 register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_int_enb2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ - uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ - uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ - uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ - uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ - uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ - uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ - uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ - uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ - uint64_t rptime3 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[24] */ - uint64_t rptime2 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[23] */ - uint64_t rptime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */ - uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ - uint64_t rpcnt3 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[20] */ - uint64_t rpcnt2 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[19] */ - uint64_t rpcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */ - uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ - uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ - uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ - uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ - uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ - uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ - uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ - uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ - uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ - uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ - uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ - uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ - uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ - uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ - uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ - uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ - uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ - uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ -#else - uint64_t rtr_wabt : 1; - uint64_t rmr_wabt : 1; - uint64_t rmr_wtto : 1; - uint64_t rtr_abt : 1; - uint64_t rmr_abt : 1; - uint64_t rmr_tto : 1; - uint64_t rmsi_per : 1; - uint64_t rmsi_tabt : 1; - uint64_t rmsi_mabt : 1; - uint64_t rmsc_msg : 1; - uint64_t rtsr_abt : 1; - uint64_t rserr : 1; - uint64_t raperr : 1; - uint64_t rdperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rrsl_int : 1; - uint64_t rpcnt0 : 1; - uint64_t rpcnt1 : 1; - uint64_t rpcnt2 : 1; - uint64_t rpcnt3 : 1; - uint64_t rptime0 : 1; - uint64_t rptime1 : 1; - uint64_t rptime2 : 1; - uint64_t rptime3 : 1; - uint64_t rdcnt0 : 1; - uint64_t rdcnt1 : 1; - uint64_t rdtime0 : 1; - uint64_t rdtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_pci_int_enb2_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ - uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ - uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ - uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ - uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ - uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ - uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ - uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ - uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ - uint64_t reserved_22_24 : 3; - uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ - uint64_t reserved_18_20 : 3; - uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ - uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ - uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ - uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ - uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ - uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ - uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ - uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ - uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ - uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ - uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ - uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ - uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ - uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ - uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ - uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ - uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ - uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ -#else - uint64_t rtr_wabt : 1; - uint64_t rmr_wabt : 1; - uint64_t rmr_wtto : 1; - uint64_t rtr_abt : 1; - uint64_t rmr_abt : 1; - uint64_t rmr_tto : 1; - uint64_t rmsi_per : 1; - uint64_t rmsi_tabt : 1; - uint64_t rmsi_mabt : 1; - uint64_t rmsc_msg : 1; - uint64_t rtsr_abt : 1; - uint64_t rserr : 1; - uint64_t raperr : 1; - uint64_t rdperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rrsl_int : 1; - uint64_t rpcnt0 : 1; - uint64_t reserved_18_20 : 3; - uint64_t rptime0 : 1; - uint64_t reserved_22_24 : 3; - uint64_t rdcnt0 : 1; - uint64_t rdcnt1 : 1; - uint64_t rdtime0 : 1; - uint64_t rdtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn30xx; - struct cvmx_pci_int_enb2_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ - uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ - uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ - uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ - uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ - uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ - uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ - uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ - uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ - uint64_t reserved_23_24 : 2; - uint64_t rptime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */ - uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ - uint64_t reserved_19_20 : 2; - uint64_t rpcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */ - uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ - uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ - uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ - uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ - uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ - uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ - uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ - uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ - uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ - uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ - uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ - uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ - uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ - uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ - uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ - uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ - uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ - uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ -#else - uint64_t rtr_wabt : 1; - uint64_t rmr_wabt : 1; - uint64_t rmr_wtto : 1; - uint64_t rtr_abt : 1; - uint64_t rmr_abt : 1; - uint64_t rmr_tto : 1; - uint64_t rmsi_per : 1; - uint64_t rmsi_tabt : 1; - uint64_t rmsi_mabt : 1; - uint64_t rmsc_msg : 1; - uint64_t rtsr_abt : 1; - uint64_t rserr : 1; - uint64_t raperr : 1; - uint64_t rdperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rrsl_int : 1; - uint64_t rpcnt0 : 1; - uint64_t rpcnt1 : 1; - uint64_t reserved_19_20 : 2; - uint64_t rptime0 : 1; - uint64_t rptime1 : 1; - uint64_t reserved_23_24 : 2; - uint64_t rdcnt0 : 1; - uint64_t rdcnt1 : 1; - uint64_t rdtime0 : 1; - uint64_t rdtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn31xx; - struct cvmx_pci_int_enb2_s cn38xx; - struct cvmx_pci_int_enb2_s cn38xxp2; - struct cvmx_pci_int_enb2_cn31xx cn50xx; - struct cvmx_pci_int_enb2_s cn58xx; - struct cvmx_pci_int_enb2_s cn58xxp1; -} cvmx_pci_int_enb2_t; - - -/** - * cvmx_pci_int_sum - * - * PCI_INT_SUM = PCI Interrupt Summary - * - * The PCI Interrupt Summary Register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t ptime3 : 1; /**< When the value in the PCI_PKTS_SENT3 - register is not 0 the Sent-3 timer counts. - When the Sent-3 timer has a value greater - than the PCI_PKTS_SENT_TIME3 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime2 : 1; /**< When the value in the PCI_PKTS_SENT2 - register is not 0 the Sent-2 timer counts. - When the Sent-2 timer has a value greater - than the PCI_PKTS_SENT_TIME2 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 - register is not 0 the Sent-1 timer counts. - When the Sent-1 timer has a value greater - than the PCI_PKTS_SENT_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t pcnt3 : 1; /**< This bit indicates that PCI_PKTS_SENT3 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV3 register. */ - uint64_t pcnt2 : 1; /**< This bit indicates that PCI_PKTS_SENT2 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV2 register. */ - uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV1 register. */ - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire - is asserted by the MIO. */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected - O9N (as completer), has encountered an error - which prevents the split transaction from - completing. In this event, the O9N (as completer), - sends a SCM (Split Completion Message) to the - initiator. See: PCIX Spec v1.0a Fig 2-40. - [31:28]: Message Class = 2(completer error) - [27:20]: Message Index = 0x80 - [18:12]: Remaining Lower Address - [11:0]: Remaining Byte Count */ - uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected - for either a Split-Read/Write error case. - Set if: - a) A Split-Write SCM is detected with SCE=1. - b) A Split-Read SCM is detected (regardless - of SCE status). - The Split completion message(SCM) - is also latched into the PCI_SCM_REG[SCM] to - assist SW with error recovery. */ - uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ - uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ - uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t pcnt1 : 1; - uint64_t pcnt2 : 1; - uint64_t pcnt3 : 1; - uint64_t ptime0 : 1; - uint64_t ptime1 : 1; - uint64_t ptime2 : 1; - uint64_t ptime3 : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_pci_int_sum_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t reserved_22_24 : 3; - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t reserved_18_20 : 3; - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire - is asserted by the MIO */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected - N3K (as completer), has encountered an error - which prevents the split transaction from - completing. In this event, the N3K (as completer), - sends a SCM (Split Completion Message) to the - initiator. See: PCIX Spec v1.0a Fig 2-40. - [31:28]: Message Class = 2(completer error) - [27:20]: Message Index = 0x80 - [18:12]: Remaining Lower Address - [11:0]: Remaining Byte Count */ - uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected - for either a Split-Read/Write error case. - Set if: - a) A Split-Write SCM is detected with SCE=1. - b) A Split-Read SCM is detected (regardless - of SCE status). - The Split completion message(SCM) - is also latched into the PCI_SCM_REG[SCM] to - assist SW with error recovery. */ - uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ - uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ - uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t reserved_18_20 : 3; - uint64_t ptime0 : 1; - uint64_t reserved_22_24 : 3; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn30xx; - struct cvmx_pci_int_sum_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t reserved_23_24 : 2; - uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 - register is not 0 the Sent-1 timer counts. - When the Sent-1 timer has a value greater - than the PCI_PKTS_SENT_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t reserved_19_20 : 2; - uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV1 register. */ - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire - is asserted by the MIO */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected - N3K (as completer), has encountered an error - which prevents the split transaction from - completing. In this event, the N3K (as completer), - sends a SCM (Split Completion Message) to the - initiator. See: PCIX Spec v1.0a Fig 2-40. - [31:28]: Message Class = 2(completer error) - [27:20]: Message Index = 0x80 - [18:12]: Remaining Lower Address - [11:0]: Remaining Byte Count */ - uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected - for either a Split-Read/Write error case. - Set if: - a) A Split-Write SCM is detected with SCE=1. - b) A Split-Read SCM is detected (regardless - of SCE status). - The Split completion message(SCM) - is also latched into the PCI_SCM_REG[SCM] to - assist SW with error recovery. */ - uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ - uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ - uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t pcnt1 : 1; - uint64_t reserved_19_20 : 2; - uint64_t ptime0 : 1; - uint64_t ptime1 : 1; - uint64_t reserved_23_24 : 2; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn31xx; - struct cvmx_pci_int_sum_s cn38xx; - struct cvmx_pci_int_sum_s cn38xxp2; - struct cvmx_pci_int_sum_cn31xx cn50xx; - struct cvmx_pci_int_sum_s cn58xx; - struct cvmx_pci_int_sum_s cn58xxp1; -} cvmx_pci_int_sum_t; - - -/** - * cvmx_pci_int_sum2 - * - * PCI_INT_SUM2 = PCI Interrupt Summary2 Register - * - * The PCI Interrupt Summary2 Register copy used for RSL interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_int_sum2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t ptime3 : 1; /**< When the value in the PCI_PKTS_SENT3 - register is not 0 the Sent-3 timer counts. - When the Sent-3 timer has a value greater - than the PCI_PKTS_SENT_TIME3 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime2 : 1; /**< When the value in the PCI_PKTS_SENT2 - register is not 0 the Sent-2 timer counts. - When the Sent-2 timer has a value greater - than the PCI_PKTS_SENT_TIME2 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 - register is not 0 the Sent-1 timer counts. - When the Sent-1 timer has a value greater - than the PCI_PKTS_SENT_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t pcnt3 : 1; /**< This bit indicates that PCI_PKTS_SENT3 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV3 register. */ - uint64_t pcnt2 : 1; /**< This bit indicates that PCI_PKTS_SENT2 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV2 register. */ - uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV1 register. */ - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has - generated an interrupt. */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ - uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ - uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ - uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ - uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t pcnt1 : 1; - uint64_t pcnt2 : 1; - uint64_t pcnt3 : 1; - uint64_t ptime0 : 1; - uint64_t ptime1 : 1; - uint64_t ptime2 : 1; - uint64_t ptime3 : 1; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } s; - struct cvmx_pci_int_sum2_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t reserved_22_24 : 3; - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t reserved_18_20 : 3; - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has - generated an interrupt. */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ - uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ - uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ - uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ - uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t reserved_18_20 : 3; - uint64_t ptime0 : 1; - uint64_t reserved_22_24 : 3; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn30xx; - struct cvmx_pci_int_sum2_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_34_63 : 30; - uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, - when the mem area is disabled. */ - uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or - Read-Address Register took place. */ - uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 1. */ - uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was - required to set the FORCE-INT bit for counter 0. */ - uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 - register is not 0 the DMA_CNT1 timer counts. - When the DMA1_CNT timer has a value greater - than the PCI_DMA_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 - register is not 0 the DMA_CNT0 timer counts. - When the DMA0_CNT timer has a value greater - than the PCI_DMA_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 - value is greater than the value - in the PCI_DMA_INT_LEV1 register. */ - uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 - value is greater than the value - in the PCI_DMA_INT_LEV0 register. */ - uint64_t reserved_23_24 : 2; - uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 - register is not 0 the Sent-1 timer counts. - When the Sent-1 timer has a value greater - than the PCI_PKTS_SENT_TIME1 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 - register is not 0 the Sent-0 timer counts. - When the Sent-0 timer has a value greater - than the PCI_PKTS_SENT_TIME0 register this - bit is set. The timer is reset when bit is - written with a one. */ - uint64_t reserved_19_20 : 2; - uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV1 register. */ - uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 - value is greater than the value - in the PCI_PKTS_SENT_INT_LEV0 register. */ - uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has - generated an interrupt. */ - uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ - uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ - uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ - uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ - uint64_t serr : 1; /**< SERR# detected by PCX Core */ - uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ - uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ - uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ - uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ - uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ - uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ - uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ - uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ - uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ - uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ - uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ -#else - uint64_t tr_wabt : 1; - uint64_t mr_wabt : 1; - uint64_t mr_wtto : 1; - uint64_t tr_abt : 1; - uint64_t mr_abt : 1; - uint64_t mr_tto : 1; - uint64_t msi_per : 1; - uint64_t msi_tabt : 1; - uint64_t msi_mabt : 1; - uint64_t msc_msg : 1; - uint64_t tsr_abt : 1; - uint64_t serr : 1; - uint64_t aperr : 1; - uint64_t dperr : 1; - uint64_t ill_rwr : 1; - uint64_t ill_rrd : 1; - uint64_t rsl_int : 1; - uint64_t pcnt0 : 1; - uint64_t pcnt1 : 1; - uint64_t reserved_19_20 : 2; - uint64_t ptime0 : 1; - uint64_t ptime1 : 1; - uint64_t reserved_23_24 : 2; - uint64_t dcnt0 : 1; - uint64_t dcnt1 : 1; - uint64_t dtime0 : 1; - uint64_t dtime1 : 1; - uint64_t dma0_fi : 1; - uint64_t dma1_fi : 1; - uint64_t win_wr : 1; - uint64_t ill_wr : 1; - uint64_t ill_rd : 1; - uint64_t reserved_34_63 : 30; -#endif - } cn31xx; - struct cvmx_pci_int_sum2_s cn38xx; - struct cvmx_pci_int_sum2_s cn38xxp2; - struct cvmx_pci_int_sum2_cn31xx cn50xx; - struct cvmx_pci_int_sum2_s cn58xx; - struct cvmx_pci_int_sum2_s cn58xxp1; -} cvmx_pci_int_sum2_t; - - -/** - * cvmx_pci_msi_rcv - * - * PCI_MSI_RCV = PCI's MSI Received Vector Register - * - * A bit is set in this register relative to the vector received during a MSI. The value in this - * register is acted upon when the least-significant-byte of this register is written. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_msi_rcv_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_6_31 : 26; - uint32_t intr : 6; /**< When an MSI is received on the PCI the bit selected - by data [5:0] will be set in this register. To - clear this bit a write must take place to the - NPI_MSI_RCV register where any bit set to 1 is - cleared. Reading this address will return an - unpredicatable value. */ -#else - uint32_t intr : 6; - uint32_t reserved_6_31 : 26; -#endif - } s; - struct cvmx_pci_msi_rcv_s cn30xx; - struct cvmx_pci_msi_rcv_s cn31xx; - struct cvmx_pci_msi_rcv_s cn38xx; - struct cvmx_pci_msi_rcv_s cn38xxp2; - struct cvmx_pci_msi_rcv_s cn50xx; - struct cvmx_pci_msi_rcv_s cn58xx; - struct cvmx_pci_msi_rcv_s cn58xxp1; -} cvmx_pci_msi_rcv_t; - - -/** - * cvmx_pci_pkt_credits# - * - * PCI_PKT_CREDITS0 = PCI Packet Credits For Output 0 - * - * Used to decrease the number of packets to be processed by the host from Output-0 and return - * buffer/info pointer pairs to OCTEON Output-0. The value in this register is acted upon when the - * least-significant-byte of this register is written. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_pkt_creditsx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pkt_cnt : 16; /**< The value written to this field will be - subtracted from PCI_PKTS_SENT0[PKT_CNT]. */ - uint32_t ptr_cnt : 16; /**< This field value is added to the - NPI's internal Buffer/Info Pointer Pair count. */ -#else - uint32_t ptr_cnt : 16; - uint32_t pkt_cnt : 16; -#endif - } s; - struct cvmx_pci_pkt_creditsx_s cn30xx; - struct cvmx_pci_pkt_creditsx_s cn31xx; - struct cvmx_pci_pkt_creditsx_s cn38xx; - struct cvmx_pci_pkt_creditsx_s cn38xxp2; - struct cvmx_pci_pkt_creditsx_s cn50xx; - struct cvmx_pci_pkt_creditsx_s cn58xx; - struct cvmx_pci_pkt_creditsx_s cn58xxp1; -} cvmx_pci_pkt_creditsx_t; - - -/** - * cvmx_pci_pkts_sent# - * - * PCI_PKTS_SENT0 = PCI Packets Sent 0 - * - * Number of packets sent to the host memory from PCI Output 0 - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_pkts_sentx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pkt_cnt : 32; /**< Each time a packet is written to the memory via - PCI from PCI Output 0, this counter is - incremented by 1 or the byte count of the packet - as set in NPI_OUTPUT_CONTROL[P0_BMODE]. */ -#else - uint32_t pkt_cnt : 32; -#endif - } s; - struct cvmx_pci_pkts_sentx_s cn30xx; - struct cvmx_pci_pkts_sentx_s cn31xx; - struct cvmx_pci_pkts_sentx_s cn38xx; - struct cvmx_pci_pkts_sentx_s cn38xxp2; - struct cvmx_pci_pkts_sentx_s cn50xx; - struct cvmx_pci_pkts_sentx_s cn58xx; - struct cvmx_pci_pkts_sentx_s cn58xxp1; -} cvmx_pci_pkts_sentx_t; - - -/** - * cvmx_pci_pkts_sent_int_lev# - * - * PCI_PKTS_SENT_INT_LEV0 = PCI Packets Sent Interrupt Level For Output 0 - * - * Interrupt when number of packets sent is equal to or greater than the register value. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_pkts_sent_int_levx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pkt_cnt : 32; /**< When corresponding port's PCI_PKTS_SENT0 value - exceeds the value in this register, PCNT0 of the - PCI_INT_SUM and PCI_INT_SUM2 will be set. */ -#else - uint32_t pkt_cnt : 32; -#endif - } s; - struct cvmx_pci_pkts_sent_int_levx_s cn30xx; - struct cvmx_pci_pkts_sent_int_levx_s cn31xx; - struct cvmx_pci_pkts_sent_int_levx_s cn38xx; - struct cvmx_pci_pkts_sent_int_levx_s cn38xxp2; - struct cvmx_pci_pkts_sent_int_levx_s cn50xx; - struct cvmx_pci_pkts_sent_int_levx_s cn58xx; - struct cvmx_pci_pkts_sent_int_levx_s cn58xxp1; -} cvmx_pci_pkts_sent_int_levx_t; - - -/** - * cvmx_pci_pkts_sent_time# - * - * PCI_PKTS_SENT_TIME0 = PCI Packets Sent Timer For Output-0 - * - * Time to wait from packet being sent to host from Output-0 before issuing an interrupt. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_pkts_sent_timex_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pkt_time : 32; /**< Number of PCI clock cycle to wait before - issuing an interrupt to the host when a - packet from this port has been sent to the - host. The timer is reset when the - PCI_INT_SUM[21] register is cleared. */ -#else - uint32_t pkt_time : 32; -#endif - } s; - struct cvmx_pci_pkts_sent_timex_s cn30xx; - struct cvmx_pci_pkts_sent_timex_s cn31xx; - struct cvmx_pci_pkts_sent_timex_s cn38xx; - struct cvmx_pci_pkts_sent_timex_s cn38xxp2; - struct cvmx_pci_pkts_sent_timex_s cn50xx; - struct cvmx_pci_pkts_sent_timex_s cn58xx; - struct cvmx_pci_pkts_sent_timex_s cn58xxp1; -} cvmx_pci_pkts_sent_timex_t; - - -/** - * cvmx_pci_read_cmd_6 - * - * PCI_READ_CMD_6 = PCI Read Command 6 Register - * - * Contains control inforamtion related to a received PCI Command 6. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_read_cmd_6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t min_data : 6; /**< The number of words to have buffered in the PNI - before informing the PCIX-Core that we have - read data available for the outstanding Delayed - read. 0 is treated as a 64. - For reads to the expansion this value is not used. */ - uint32_t prefetch : 3; /**< Control the amount of data to be preteched when - this type of bhmstREAD command is received. - 0 = 1 32/64 bit word. - 1 = From address to end of 128B block. - 2 = From address to end of 128B block plus 128B. - 3 = From address to end of 128B block plus 256B. - 4 = From address to end of 128B block plus 384B. - For reads to the expansion this value is not used. */ -#else - uint32_t prefetch : 3; - uint32_t min_data : 6; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_pci_read_cmd_6_s cn30xx; - struct cvmx_pci_read_cmd_6_s cn31xx; - struct cvmx_pci_read_cmd_6_s cn38xx; - struct cvmx_pci_read_cmd_6_s cn38xxp2; - struct cvmx_pci_read_cmd_6_s cn50xx; - struct cvmx_pci_read_cmd_6_s cn58xx; - struct cvmx_pci_read_cmd_6_s cn58xxp1; -} cvmx_pci_read_cmd_6_t; - - -/** - * cvmx_pci_read_cmd_c - * - * PCI_READ_CMD_C = PCI Read Command C Register - * - * Contains control inforamtion related to a received PCI Command C. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_read_cmd_c_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t min_data : 6; /**< The number of words to have buffered in the PNI - before informing the PCIX-Core that we have - read data available for the outstanding Delayed - read. 0 is treated as a 64. - For reads to the expansion this value is not used. */ - uint32_t prefetch : 3; /**< Control the amount of data to be preteched when - this type of READ command is received. - 0 = 1 32/64 bit word. - 1 = From address to end of 128B block. - 2 = From address to end of 128B block plus 128B. - 3 = From address to end of 128B block plus 256B. - 4 = From address to end of 128B block plus 384B. - For reads to the expansion this value is not used. */ -#else - uint32_t prefetch : 3; - uint32_t min_data : 6; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_pci_read_cmd_c_s cn30xx; - struct cvmx_pci_read_cmd_c_s cn31xx; - struct cvmx_pci_read_cmd_c_s cn38xx; - struct cvmx_pci_read_cmd_c_s cn38xxp2; - struct cvmx_pci_read_cmd_c_s cn50xx; - struct cvmx_pci_read_cmd_c_s cn58xx; - struct cvmx_pci_read_cmd_c_s cn58xxp1; -} cvmx_pci_read_cmd_c_t; - - -/** - * cvmx_pci_read_cmd_e - * - * PCI_READ_CMD_E = PCI Read Command E Register - * - * Contains control inforamtion related to a received PCI Command 6. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pci_read_cmd_e_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t min_data : 6; /**< The number of words to have buffered in the PNI - before informaing the PCIX-Core that we have - read data available for the outstanding Delayed - read. 0 is treated as a 64. - For reads to the expansion this value is not used. */ - uint32_t prefetch : 3; /**< Control the amount of data to be preteched when - this type of READ command is received. - 0 = 1 32/64 bit word. - 1 = From address to end of 128B block. - 2 = From address to end of 128B block plus 128B. - 3 = From address to end of 128B block plus 256B. - 4 = From address to end of 128B block plus 384B. - For reads to the expansion this value is not used. */ -#else - uint32_t prefetch : 3; - uint32_t min_data : 6; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_pci_read_cmd_e_s cn30xx; - struct cvmx_pci_read_cmd_e_s cn31xx; - struct cvmx_pci_read_cmd_e_s cn38xx; - struct cvmx_pci_read_cmd_e_s cn38xxp2; - struct cvmx_pci_read_cmd_e_s cn50xx; - struct cvmx_pci_read_cmd_e_s cn58xx; - struct cvmx_pci_read_cmd_e_s cn58xxp1; -} cvmx_pci_read_cmd_e_t; - - -/** - * cvmx_pci_read_timeout - * - * PCI_READ_TIMEOUT = PCI Read Timeour Register - * - * The address to start reading Instructions from for Input-3. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_read_timeout_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t enb : 1; /**< Enable the use of the Timeout function. */ - uint64_t cnt : 31; /**< The number of eclk cycles to wait after issuing - a read request to the PNI before setting a - timeout and not expecting the data to return. - This is considered a fatal condition by the NPI. */ -#else - uint64_t cnt : 31; - uint64_t enb : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pci_read_timeout_s cn30xx; - struct cvmx_pci_read_timeout_s cn31xx; - struct cvmx_pci_read_timeout_s cn38xx; - struct cvmx_pci_read_timeout_s cn38xxp2; - struct cvmx_pci_read_timeout_s cn50xx; - struct cvmx_pci_read_timeout_s cn58xx; - struct cvmx_pci_read_timeout_s cn58xxp1; -} cvmx_pci_read_timeout_t; - - -/** - * cvmx_pci_scm_reg - * - * PCI_SCM_REG = PCI Master Split Completion Message Register - * - * This register contains the Master Split Completion Message(SCM) generated when a master split - * transaction is aborted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_scm_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t scm : 32; /**< Contains the Split Completion Message (SCM) - driven when a master-split transaction is aborted. - [31:28]: Message Class - [27:20]: Message Index - [19]: Reserved - [18:12]: Remaining Lower Address - [11:8]: Upper Remaining Byte Count - [7:0]: Lower Remaining Byte Count - Refer to the PCIX1.0a specification, Fig 2-40 - for additional details for the split completion - message format. */ -#else - uint64_t scm : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pci_scm_reg_s cn30xx; - struct cvmx_pci_scm_reg_s cn31xx; - struct cvmx_pci_scm_reg_s cn38xx; - struct cvmx_pci_scm_reg_s cn38xxp2; - struct cvmx_pci_scm_reg_s cn50xx; - struct cvmx_pci_scm_reg_s cn58xx; - struct cvmx_pci_scm_reg_s cn58xxp1; -} cvmx_pci_scm_reg_t; - - -/** - * cvmx_pci_tsr_reg - * - * PCI_TSR_REG = PCI Target Split Attribute Register - * - * This register contains the Attribute field Master Split Completion Message(SCM) generated when a master split - * transaction is aborted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_tsr_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t tsr : 36; /**< Contains the Target Split Attribute field when a - target-split transaction is aborted. - [35:32]: Upper Byte Count - [31]: BCM=Byte Count Modified - [30]: SCE=Split Completion Error - [29]: SCM=Split Completion Message - [28:24]: RESERVED - [23:16]: Completer Bus Number - [15:11]: Completer Device Number - [10:8]: Completer Function Number - [7:0]: Lower Byte Count - Refer to the PCIX1.0a specification, Fig 2-39 - for additional details on the completer attribute - bit assignments. */ -#else - uint64_t tsr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_pci_tsr_reg_s cn30xx; - struct cvmx_pci_tsr_reg_s cn31xx; - struct cvmx_pci_tsr_reg_s cn38xx; - struct cvmx_pci_tsr_reg_s cn38xxp2; - struct cvmx_pci_tsr_reg_s cn50xx; - struct cvmx_pci_tsr_reg_s cn58xx; - struct cvmx_pci_tsr_reg_s cn58xxp1; -} cvmx_pci_tsr_reg_t; - - -/** - * cvmx_pci_win_rd_addr - * - * PCI_WIN_RD_ADDR = PCI Window Read Address Register - * - * Writing the least-significant-byte of this register will cause a read operation to take place, - * UNLESS, a read operation is already taking place. A read is consider to end when the PCI_WIN_RD_DATA - * register is read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_win_rd_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t reserved_0_47 : 48; -#else - uint64_t reserved_0_47 : 48; - uint64_t iobit : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_pci_win_rd_addr_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t rd_addr : 46; /**< The address to be read from. Whenever the LSB of - this register is written, the Read Operation will - take place. - [47:40] = NCB_ID - [39:3] = Address - When [47:43] == NPI & [42:0] == 0 bits [39:0] are: - [39:32] == x, Not Used - [31:27] == RSL_ID - [12:2] == RSL Register Offset - [1:0] == x, Not Used */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t rd_addr : 46; - uint64_t iobit : 1; - uint64_t reserved_49_63 : 15; -#endif - } cn30xx; - struct cvmx_pci_win_rd_addr_cn30xx cn31xx; - struct cvmx_pci_win_rd_addr_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t rd_addr : 45; /**< The address to be read from. Whenever the LSB of - this register is written, the Read Operation will - take place. - [47:40] = NCB_ID - [39:3] = Address - When [47:43] == NPI & [42:0] == 0 bits [39:0] are: - [39:32] == x, Not Used - [31:27] == RSL_ID - [12:3] == RSL Register Offset - [2:0] == x, Not Used */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t rd_addr : 45; - uint64_t iobit : 1; - uint64_t reserved_49_63 : 15; -#endif - } cn38xx; - struct cvmx_pci_win_rd_addr_cn38xx cn38xxp2; - struct cvmx_pci_win_rd_addr_cn30xx cn50xx; - struct cvmx_pci_win_rd_addr_cn38xx cn58xx; - struct cvmx_pci_win_rd_addr_cn38xx cn58xxp1; -} cvmx_pci_win_rd_addr_t; - - -/** - * cvmx_pci_win_rd_data - * - * PCI_WIN_RD_DATA = PCI Window Read Data Register - * - * Contains the result from the read operation that took place when the LSB of the PCI_WIN_RD_ADDR - * register was written. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_win_rd_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t rd_data : 64; /**< The read data. */ -#else - uint64_t rd_data : 64; -#endif - } s; - struct cvmx_pci_win_rd_data_s cn30xx; - struct cvmx_pci_win_rd_data_s cn31xx; - struct cvmx_pci_win_rd_data_s cn38xx; - struct cvmx_pci_win_rd_data_s cn38xxp2; - struct cvmx_pci_win_rd_data_s cn50xx; - struct cvmx_pci_win_rd_data_s cn58xx; - struct cvmx_pci_win_rd_data_s cn58xxp1; -} cvmx_pci_win_rd_data_t; - - -/** - * cvmx_pci_win_wr_addr - * - * PCI_WIN_WR_ADDR = PCI Window Write Address Register - * - * Contains the address to be writen to when a write operation is started by writing the - * PCI_WIN_WR_DATA register (see below). - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_win_wr_addr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always - read as '0'. */ - uint64_t wr_addr : 45; /**< The address that will be written to when the - PCI_WIN_WR_DATA register is written. - [47:40] = NCB_ID - [39:3] = Address - When [47:43] == NPI & [42:0] == 0 bits [39:0] are: - [39:32] == x, Not Used - [31:27] == RSL_ID - [12:3] == RSL Register Offset - [2:0] == x, Not Used */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t wr_addr : 45; - uint64_t iobit : 1; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_pci_win_wr_addr_s cn30xx; - struct cvmx_pci_win_wr_addr_s cn31xx; - struct cvmx_pci_win_wr_addr_s cn38xx; - struct cvmx_pci_win_wr_addr_s cn38xxp2; - struct cvmx_pci_win_wr_addr_s cn50xx; - struct cvmx_pci_win_wr_addr_s cn58xx; - struct cvmx_pci_win_wr_addr_s cn58xxp1; -} cvmx_pci_win_wr_addr_t; - - -/** - * cvmx_pci_win_wr_data - * - * PCI_WIN_WR_DATA = PCI Window Write Data Register - * - * Contains the data to write to the address located in the PCI_WIN_WR_ADDR Register. - * Writing the least-significant-byte of this register will cause a write operation to take place. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_win_wr_data_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t wr_data : 64; /**< The data to be written. Whenever the LSB of this - register is written, the Window Write will take - place. */ -#else - uint64_t wr_data : 64; -#endif - } s; - struct cvmx_pci_win_wr_data_s cn30xx; - struct cvmx_pci_win_wr_data_s cn31xx; - struct cvmx_pci_win_wr_data_s cn38xx; - struct cvmx_pci_win_wr_data_s cn38xxp2; - struct cvmx_pci_win_wr_data_s cn50xx; - struct cvmx_pci_win_wr_data_s cn58xx; - struct cvmx_pci_win_wr_data_s cn58xxp1; -} cvmx_pci_win_wr_data_t; - - -/** - * cvmx_pci_win_wr_mask - * - * PCI_WIN_WR_MASK = PCI Window Write Mask Register - * - * Contains the mask for the data in the PCI_WIN_WR_DATA Register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pci_win_wr_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t wr_mask : 8; /**< The data to be written. When a bit is set '1' - the corresponding byte will not be written. */ -#else - uint64_t wr_mask : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pci_win_wr_mask_s cn30xx; - struct cvmx_pci_win_wr_mask_s cn31xx; - struct cvmx_pci_win_wr_mask_s cn38xx; - struct cvmx_pci_win_wr_mask_s cn38xxp2; - struct cvmx_pci_win_wr_mask_s cn50xx; - struct cvmx_pci_win_wr_mask_s cn58xx; - struct cvmx_pci_win_wr_mask_s cn58xxp1; -} cvmx_pci_win_wr_mask_t; - - -/** - * cvmx_pcieep_cfg000 - * - * PCIE_CFG000 = First 32-bits of PCIE type 0 config space (Device ID and Vendor ID Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg000_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t devid : 16; /**< Device ID, writable through the DBI - However, the application must not change this field. - For EEPROM loads also see VENDID of this register. */ - uint32_t vendid : 16; /**< Vendor ID, writable through the DBI - However, the application must not change this field. - During and EPROM Load is a value of 0xFFFF is loaded to this - field and a value of 0xFFFF is loaded to the DEVID field of - this register, the value will not be loaded, EEPROM load will - stop, and the FastLinkEnable bit will be set in the - PCIE_CFG452 register. */ -#else - uint32_t vendid : 16; - uint32_t devid : 16; -#endif - } s; - struct cvmx_pcieep_cfg000_s cn52xx; - struct cvmx_pcieep_cfg000_s cn52xxp1; - struct cvmx_pcieep_cfg000_s cn56xx; - struct cvmx_pcieep_cfg000_s cn56xxp1; -} cvmx_pcieep_cfg000_t; - - -/** - * cvmx_pcieep_cfg001 - * - * PCIE_CFG001 = Second 32-bits of PCIE type 0 config space (Command/Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg001_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dpe : 1; /**< Detected Parity Error */ - uint32_t sse : 1; /**< Signaled System Error */ - uint32_t rma : 1; /**< Received Master Abort */ - uint32_t rta : 1; /**< Received Target Abort */ - uint32_t sta : 1; /**< Signaled Target Abort */ - uint32_t devt : 2; /**< DEVSEL Timing - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t mdpe : 1; /**< Master Data Parity Error */ - uint32_t fbb : 1; /**< Fast Back-to-Back Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t reserved_22_22 : 1; - uint32_t m66 : 1; /**< 66 MHz Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t cl : 1; /**< Capabilities List - Indicates presence of an extended capability item. - Hardwired to 1. */ - uint32_t i_stat : 1; /**< INTx Status */ - uint32_t reserved_11_18 : 8; - uint32_t i_dis : 1; /**< INTx Assertion Disable */ - uint32_t fbbe : 1; /**< Fast Back-to-Back Enable - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t see : 1; /**< SERR# Enable */ - uint32_t ids_wcc : 1; /**< IDSEL Stepping/Wait Cycle Control - Not applicable for PCI Express. Must be hardwired to 0 */ - uint32_t per : 1; /**< Parity Error Response */ - uint32_t vps : 1; /**< VGA Palette Snoop - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t mwice : 1; /**< Memory Write and Invalidate - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t scse : 1; /**< Special Cycle Enable - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t me : 1; /**< Bus Master Enable */ - uint32_t msae : 1; /**< Memory Space Enable */ - uint32_t isae : 1; /**< I/O Space Enable */ -#else - uint32_t isae : 1; - uint32_t msae : 1; - uint32_t me : 1; - uint32_t scse : 1; - uint32_t mwice : 1; - uint32_t vps : 1; - uint32_t per : 1; - uint32_t ids_wcc : 1; - uint32_t see : 1; - uint32_t fbbe : 1; - uint32_t i_dis : 1; - uint32_t reserved_11_18 : 8; - uint32_t i_stat : 1; - uint32_t cl : 1; - uint32_t m66 : 1; - uint32_t reserved_22_22 : 1; - uint32_t fbb : 1; - uint32_t mdpe : 1; - uint32_t devt : 2; - uint32_t sta : 1; - uint32_t rta : 1; - uint32_t rma : 1; - uint32_t sse : 1; - uint32_t dpe : 1; -#endif - } s; - struct cvmx_pcieep_cfg001_s cn52xx; - struct cvmx_pcieep_cfg001_s cn52xxp1; - struct cvmx_pcieep_cfg001_s cn56xx; - struct cvmx_pcieep_cfg001_s cn56xxp1; -} cvmx_pcieep_cfg001_t; - - -/** - * cvmx_pcieep_cfg002 - * - * PCIE_CFG002 = Third 32-bits of PCIE type 0 config space (Revision ID/Class Code Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg002_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t bcc : 8; /**< Base Class Code, writable through the DBI - However, the application must not change this field. */ - uint32_t sc : 8; /**< Subclass Code, writable through the DBI - However, the application must not change this field. */ - uint32_t pi : 8; /**< Programming Interface, writable through the DBI - However, the application must not change this field. */ - uint32_t rid : 8; /**< Revision ID, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t rid : 8; - uint32_t pi : 8; - uint32_t sc : 8; - uint32_t bcc : 8; -#endif - } s; - struct cvmx_pcieep_cfg002_s cn52xx; - struct cvmx_pcieep_cfg002_s cn52xxp1; - struct cvmx_pcieep_cfg002_s cn56xx; - struct cvmx_pcieep_cfg002_s cn56xxp1; -} cvmx_pcieep_cfg002_t; - - -/** - * cvmx_pcieep_cfg003 - * - * PCIE_CFG003 = Fourth 32-bits of PCIE type 0 config space (Cache Line Size/Master Latency Timer/Header Type Register/BIST Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg003_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t bist : 8; /**< The BIST register functions are not supported. - All 8 bits of the BIST register are hardwired to 0. */ - uint32_t mfd : 1; /**< Multi Function Device - The Multi Function Device bit is writable through the DBI. - However, this is a single function device. Therefore, the - application must not write a 1 to this bit. */ - uint32_t chf : 7; /**< Configuration Header Format - Hardwired to 0 for type 0. */ - uint32_t lt : 8; /**< Master Latency Timer - Not applicable for PCI Express, hardwired to 0. */ - uint32_t cls : 8; /**< Cache Line Size - The Cache Line Size register is RW for legacy compatibility - purposes and is not applicable to PCI Express device - functionality. - Writing to the Cache Line Size register does not impact - functionality. */ -#else - uint32_t cls : 8; - uint32_t lt : 8; - uint32_t chf : 7; - uint32_t mfd : 1; - uint32_t bist : 8; -#endif - } s; - struct cvmx_pcieep_cfg003_s cn52xx; - struct cvmx_pcieep_cfg003_s cn52xxp1; - struct cvmx_pcieep_cfg003_s cn56xx; - struct cvmx_pcieep_cfg003_s cn56xxp1; -} cvmx_pcieep_cfg003_t; - - -/** - * cvmx_pcieep_cfg004 - * - * PCIE_CFG004 = Fifth 32-bits of PCIE type 0 config space (Base Address Register 0 - Low) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg004_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lbab : 18; /**< Lower bits of the BAR 0 base address */ - uint32_t reserved_4_13 : 10; - uint32_t pf : 1; /**< Prefetchable - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t typ : 2; /**< BAR type - o 00 = 32-bit BAR - o 10 = 64-bit BAR - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t mspc : 1; /**< Memory Space Indicator - o 0 = BAR 0 is a memory BAR - o 1 = BAR 0 is an I/O BAR - This field is writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t reserved_4_13 : 10; - uint32_t lbab : 18; -#endif - } s; - struct cvmx_pcieep_cfg004_s cn52xx; - struct cvmx_pcieep_cfg004_s cn52xxp1; - struct cvmx_pcieep_cfg004_s cn56xx; - struct cvmx_pcieep_cfg004_s cn56xxp1; -} cvmx_pcieep_cfg004_t; - - -/** - * cvmx_pcieep_cfg004_mask - * - * PCIE_CFG004_MASK (BAR Mask 0 - Low) - * The BAR 0 Mask register is invisible to host software and not readable from the application. - * The BAR 0 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg004_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmask : 31; /**< Bar Mask Low */ - uint32_t enb : 1; /**< Bar Enable - o 0: BAR 0 is disabled - o 1: BAR 0 is enabled - Bit 0 is interpreted as BAR Enable when writing to the BAR Mask - register rather than as a mask bit because bit 0 of a BAR is - always masked from writing by host software. Bit 0 must be - written prior to writing the other mask bits. */ -#else - uint32_t enb : 1; - uint32_t lmask : 31; -#endif - } s; - struct cvmx_pcieep_cfg004_mask_s cn52xx; - struct cvmx_pcieep_cfg004_mask_s cn52xxp1; - struct cvmx_pcieep_cfg004_mask_s cn56xx; - struct cvmx_pcieep_cfg004_mask_s cn56xxp1; -} cvmx_pcieep_cfg004_mask_t; - - -/** - * cvmx_pcieep_cfg005 - * - * PCIE_CFG005 = Sixth 32-bits of PCIE type 0 config space (Base Address Register 0 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg005_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ubab : 32; /**< Contains the upper 32 bits of the BAR 0 base address. */ -#else - uint32_t ubab : 32; -#endif - } s; - struct cvmx_pcieep_cfg005_s cn52xx; - struct cvmx_pcieep_cfg005_s cn52xxp1; - struct cvmx_pcieep_cfg005_s cn56xx; - struct cvmx_pcieep_cfg005_s cn56xxp1; -} cvmx_pcieep_cfg005_t; - - -/** - * cvmx_pcieep_cfg005_mask - * - * PCIE_CFG005_MASK = (BAR Mask 0 - High) - * The BAR 0 Mask register is invisible to host software and not readable from the application. - * The BAR 0 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg005_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umask : 32; /**< Bar Mask High */ -#else - uint32_t umask : 32; -#endif - } s; - struct cvmx_pcieep_cfg005_mask_s cn52xx; - struct cvmx_pcieep_cfg005_mask_s cn52xxp1; - struct cvmx_pcieep_cfg005_mask_s cn56xx; - struct cvmx_pcieep_cfg005_mask_s cn56xxp1; -} cvmx_pcieep_cfg005_mask_t; - - -/** - * cvmx_pcieep_cfg006 - * - * PCIE_CFG006 = Seventh 32-bits of PCIE type 0 config space (Base Address Register 1 - Low) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg006_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lbab : 6; /**< Lower bits of the BAR 1 base address */ - uint32_t reserved_4_25 : 22; - uint32_t pf : 1; /**< Prefetchable - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t typ : 2; /**< BAR type - o 00 = 32-bit BAR - o 10 = 64-bit BAR - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t mspc : 1; /**< Memory Space Indicator - o 0 = BAR 0 is a memory BAR - o 1 = BAR 0 is an I/O BAR - This field is writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t reserved_4_25 : 22; - uint32_t lbab : 6; -#endif - } s; - struct cvmx_pcieep_cfg006_s cn52xx; - struct cvmx_pcieep_cfg006_s cn52xxp1; - struct cvmx_pcieep_cfg006_s cn56xx; - struct cvmx_pcieep_cfg006_s cn56xxp1; -} cvmx_pcieep_cfg006_t; - - -/** - * cvmx_pcieep_cfg006_mask - * - * PCIE_CFG006_MASK (BAR Mask 1 - Low) - * The BAR 1 Mask register is invisible to host software and not readable from the application. - * The BAR 1 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg006_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmask : 31; /**< Bar Mask Low */ - uint32_t enb : 1; /**< Bar Enable - o 0: BAR 1 is disabled - o 1: BAR 1 is enabled - Bit 0 is interpreted as BAR Enable when writing to the BAR Mask - register rather than as a mask bit because bit 0 of a BAR is - always masked from writing by host software. Bit 0 must be - written prior to writing the other mask bits. */ -#else - uint32_t enb : 1; - uint32_t lmask : 31; -#endif - } s; - struct cvmx_pcieep_cfg006_mask_s cn52xx; - struct cvmx_pcieep_cfg006_mask_s cn52xxp1; - struct cvmx_pcieep_cfg006_mask_s cn56xx; - struct cvmx_pcieep_cfg006_mask_s cn56xxp1; -} cvmx_pcieep_cfg006_mask_t; - - -/** - * cvmx_pcieep_cfg007 - * - * PCIE_CFG007 = Eighth 32-bits of PCIE type 0 config space (Base Address Register 1 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg007_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ubab : 32; /**< Contains the upper 32 bits of the BAR 1 base address. */ -#else - uint32_t ubab : 32; -#endif - } s; - struct cvmx_pcieep_cfg007_s cn52xx; - struct cvmx_pcieep_cfg007_s cn52xxp1; - struct cvmx_pcieep_cfg007_s cn56xx; - struct cvmx_pcieep_cfg007_s cn56xxp1; -} cvmx_pcieep_cfg007_t; - - -/** - * cvmx_pcieep_cfg007_mask - * - * PCIE_CFG007_MASK (BAR Mask 1 - High) - * The BAR 1 Mask register is invisible to host software and not readable from the application. - * The BAR 1 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg007_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umask : 32; /**< Bar Mask High */ -#else - uint32_t umask : 32; -#endif - } s; - struct cvmx_pcieep_cfg007_mask_s cn52xx; - struct cvmx_pcieep_cfg007_mask_s cn52xxp1; - struct cvmx_pcieep_cfg007_mask_s cn56xx; - struct cvmx_pcieep_cfg007_mask_s cn56xxp1; -} cvmx_pcieep_cfg007_mask_t; - - -/** - * cvmx_pcieep_cfg008 - * - * PCIE_CFG008 = Ninth 32-bits of PCIE type 0 config space (Base Address Register 2 - Low) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg008_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_4_31 : 28; - uint32_t pf : 1; /**< Prefetchable - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t typ : 2; /**< BAR type - o 00 = 32-bit BAR - o 10 = 64-bit BAR - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t mspc : 1; /**< Memory Space Indicator - o 0 = BAR 0 is a memory BAR - o 1 = BAR 0 is an I/O BAR - This field is writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t mspc : 1; - uint32_t typ : 2; - uint32_t pf : 1; - uint32_t reserved_4_31 : 28; -#endif - } s; - struct cvmx_pcieep_cfg008_s cn52xx; - struct cvmx_pcieep_cfg008_s cn52xxp1; - struct cvmx_pcieep_cfg008_s cn56xx; - struct cvmx_pcieep_cfg008_s cn56xxp1; -} cvmx_pcieep_cfg008_t; - - -/** - * cvmx_pcieep_cfg008_mask - * - * PCIE_CFG008_MASK (BAR Mask 2 - Low) - * The BAR 2 Mask register is invisible to host software and not readable from the application. - * The BAR 2 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg008_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmask : 31; /**< Bar Mask Low */ - uint32_t enb : 1; /**< Bar Enable - o 0: BAR 2 is disabled - o 1: BAR 2 is enabled - Bit 0 is interpreted as BAR Enable when writing to the BAR Mask - register rather than as a mask bit because bit 0 of a BAR is - always masked from writing by host software. Bit 0 must be - written prior to writing the other mask bits. */ -#else - uint32_t enb : 1; - uint32_t lmask : 31; -#endif - } s; - struct cvmx_pcieep_cfg008_mask_s cn52xx; - struct cvmx_pcieep_cfg008_mask_s cn52xxp1; - struct cvmx_pcieep_cfg008_mask_s cn56xx; - struct cvmx_pcieep_cfg008_mask_s cn56xxp1; -} cvmx_pcieep_cfg008_mask_t; - - -/** - * cvmx_pcieep_cfg009 - * - * PCIE_CFG009 = Tenth 32-bits of PCIE type 0 config space (Base Address Register 2 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg009_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ubab : 25; /**< Contains the upper 32 bits of the BAR 2 base address. */ - uint32_t reserved_0_6 : 7; -#else - uint32_t reserved_0_6 : 7; - uint32_t ubab : 25; -#endif - } s; - struct cvmx_pcieep_cfg009_s cn52xx; - struct cvmx_pcieep_cfg009_s cn52xxp1; - struct cvmx_pcieep_cfg009_s cn56xx; - struct cvmx_pcieep_cfg009_s cn56xxp1; -} cvmx_pcieep_cfg009_t; - - -/** - * cvmx_pcieep_cfg009_mask - * - * PCIE_CFG009_MASK (BAR Mask 2 - High) - * The BAR 2 Mask register is invisible to host software and not readable from the application. - * The BAR 2 Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg009_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umask : 32; /**< Bar Mask High */ -#else - uint32_t umask : 32; -#endif - } s; - struct cvmx_pcieep_cfg009_mask_s cn52xx; - struct cvmx_pcieep_cfg009_mask_s cn52xxp1; - struct cvmx_pcieep_cfg009_mask_s cn56xx; - struct cvmx_pcieep_cfg009_mask_s cn56xxp1; -} cvmx_pcieep_cfg009_mask_t; - - -/** - * cvmx_pcieep_cfg010 - * - * PCIE_CFG010 = Eleventh 32-bits of PCIE type 0 config space (CardBus CIS Pointer Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg010_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t cisp : 32; /**< CardBus CIS Pointer - Optional, writable through the DBI. */ -#else - uint32_t cisp : 32; -#endif - } s; - struct cvmx_pcieep_cfg010_s cn52xx; - struct cvmx_pcieep_cfg010_s cn52xxp1; - struct cvmx_pcieep_cfg010_s cn56xx; - struct cvmx_pcieep_cfg010_s cn56xxp1; -} cvmx_pcieep_cfg010_t; - - -/** - * cvmx_pcieep_cfg011 - * - * PCIE_CFG011 = Twelfth 32-bits of PCIE type 0 config space (Subsystem ID and Subsystem Vendor ID Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg011_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ssid : 16; /**< Subsystem ID - Assigned by PCI-SIG, writable through the DBI. However, the application must not change this field. */ - uint32_t ssvid : 16; /**< Subsystem Vendor ID - Assigned by PCI-SIG, writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t ssvid : 16; - uint32_t ssid : 16; -#endif - } s; - struct cvmx_pcieep_cfg011_s cn52xx; - struct cvmx_pcieep_cfg011_s cn52xxp1; - struct cvmx_pcieep_cfg011_s cn56xx; - struct cvmx_pcieep_cfg011_s cn56xxp1; -} cvmx_pcieep_cfg011_t; - - -/** - * cvmx_pcieep_cfg012 - * - * PCIE_CFG012 = Thirteenth 32-bits of PCIE type 0 config space (Expansion ROM Base Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg012_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t eraddr : 16; /**< Expansion ROM Address */ - uint32_t reserved_1_15 : 15; - uint32_t er_en : 1; /**< Expansion ROM Enable */ -#else - uint32_t er_en : 1; - uint32_t reserved_1_15 : 15; - uint32_t eraddr : 16; -#endif - } s; - struct cvmx_pcieep_cfg012_s cn52xx; - struct cvmx_pcieep_cfg012_s cn52xxp1; - struct cvmx_pcieep_cfg012_s cn56xx; - struct cvmx_pcieep_cfg012_s cn56xxp1; -} cvmx_pcieep_cfg012_t; - - -/** - * cvmx_pcieep_cfg012_mask - * - * PCIE_CFG012_MASK (Exapansion ROM BAR Mask) - * The ROM Mask register is invisible to host software and not readable from the application. - * The ROM Mask register is only writable through the DBI. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg012_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t mask : 31; /**< Bar Mask Low */ - uint32_t enb : 1; /**< Bar Enable - o 0: BAR ROM is disabled - o 1: BAR ROM is enabled - Bit 0 is interpreted as BAR Enable when writing to the BAR Mask - register rather than as a mask bit because bit 0 of a BAR is - always masked from writing by host software. Bit 0 must be - written prior to writing the other mask bits. */ -#else - uint32_t enb : 1; - uint32_t mask : 31; -#endif - } s; - struct cvmx_pcieep_cfg012_mask_s cn52xx; - struct cvmx_pcieep_cfg012_mask_s cn52xxp1; - struct cvmx_pcieep_cfg012_mask_s cn56xx; - struct cvmx_pcieep_cfg012_mask_s cn56xxp1; -} cvmx_pcieep_cfg012_mask_t; - - -/** - * cvmx_pcieep_cfg013 - * - * PCIE_CFG013 = Fourteenth 32-bits of PCIE type 0 config space (Capability Pointer Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg013_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_8_31 : 24; - uint32_t cp : 8; /**< First Capability Pointer. - Points to Power Management Capability structure by - default, writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t cp : 8; - uint32_t reserved_8_31 : 24; -#endif - } s; - struct cvmx_pcieep_cfg013_s cn52xx; - struct cvmx_pcieep_cfg013_s cn52xxp1; - struct cvmx_pcieep_cfg013_s cn56xx; - struct cvmx_pcieep_cfg013_s cn56xxp1; -} cvmx_pcieep_cfg013_t; - - -/** - * cvmx_pcieep_cfg015 - * - * PCIE_CFG015 = Sixteenth 32-bits of PCIE type 0 config space (Interrupt Line Register/Interrupt Pin/Bridge Control Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg015_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ml : 8; /**< Maximum Latency (Hardwired to 0) */ - uint32_t mg : 8; /**< Minimum Grant (Hardwired to 0) */ - uint32_t inta : 8; /**< Interrupt Pin - Identifies the legacy interrupt Message that the device - (or device function) uses. - The Interrupt Pin register is writable through the DBI. - In a single-function configuration, only INTA is used. - Therefore, the application must not change this field. */ - uint32_t il : 8; /**< Interrupt Line */ -#else - uint32_t il : 8; - uint32_t inta : 8; - uint32_t mg : 8; - uint32_t ml : 8; -#endif - } s; - struct cvmx_pcieep_cfg015_s cn52xx; - struct cvmx_pcieep_cfg015_s cn52xxp1; - struct cvmx_pcieep_cfg015_s cn56xx; - struct cvmx_pcieep_cfg015_s cn56xxp1; -} cvmx_pcieep_cfg015_t; - - -/** - * cvmx_pcieep_cfg016 - * - * PCIE_CFG016 = Seventeenth 32-bits of PCIE type 0 config space - * (Power Management Capability ID/ - * Power Management Next Item Pointer/ - * Power Management Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg016_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmes : 5; /**< PME_Support - o Bit 11: If set, PME Messages can be generated from D0 - o Bit 12: If set, PME Messages can be generated from D1 - o Bit 13: If set, PME Messages can be generated from D2 - o Bit 14: If set, PME Messages can be generated from D3hot - o Bit 15: If set, PME Messages can be generated from D3cold - The PME_Support field is writable through the DBI. - However, the application must not change this field. */ - uint32_t d2s : 1; /**< D2 Support, writable through the DBI - However, the application must not change this field. */ - uint32_t d1s : 1; /**< D1 Support, writable through the DBI - However, the application must not change this field. */ - uint32_t auxc : 3; /**< AUX Current, writable through the DBI - However, the application must not change this field. */ - uint32_t dsi : 1; /**< Device Specific Initialization (DSI), writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t pme_clock : 1; /**< PME Clock, hardwired to 0 */ - uint32_t pmsv : 3; /**< Power Management Specification Version, writable through the DBI - However, the application must not change this field. */ - uint32_t ncp : 8; /**< Next Capability Pointer - Points to the MSI capabilities by default, writable - through the DBI. - However, the application must not change this field. */ - uint32_t pmcid : 8; /**< Power Management Capability ID */ -#else - uint32_t pmcid : 8; - uint32_t ncp : 8; - uint32_t pmsv : 3; - uint32_t pme_clock : 1; - uint32_t reserved_20_20 : 1; - uint32_t dsi : 1; - uint32_t auxc : 3; - uint32_t d1s : 1; - uint32_t d2s : 1; - uint32_t pmes : 5; -#endif - } s; - struct cvmx_pcieep_cfg016_s cn52xx; - struct cvmx_pcieep_cfg016_s cn52xxp1; - struct cvmx_pcieep_cfg016_s cn56xx; - struct cvmx_pcieep_cfg016_s cn56xxp1; -} cvmx_pcieep_cfg016_t; - - -/** - * cvmx_pcieep_cfg017 - * - * PCIE_CFG017 = Eighteenth 32-bits of PCIE type 0 config space (Power Management Control and Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg017_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmdia : 8; /**< Data register for additional information (not supported) */ - uint32_t bpccee : 1; /**< Bus Power/Clock Control Enable, hardwired to 0 */ - uint32_t bd3h : 1; /**< B2/B3 Support, hardwired to 0 */ - uint32_t reserved_16_21 : 6; - uint32_t pmess : 1; /**< PME Status - Indicates if a previously enabled PME event occurred or not. */ - uint32_t pmedsia : 2; /**< Data Scale (not supported) */ - uint32_t pmds : 4; /**< Data Select (not supported) */ - uint32_t pmeens : 1; /**< 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; /**< No Soft Reset, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_2_2 : 1; - uint32_t ps : 2; /**< Power State - Controls the device power state: - o 00b: D0 - o 01b: D1 - o 10b: D2 - o 11b: D3 - The written value is ignored if the specific state is - not supported. */ -#else - uint32_t ps : 2; - uint32_t reserved_2_2 : 1; - uint32_t nsr : 1; - uint32_t reserved_4_7 : 4; - uint32_t pmeens : 1; - uint32_t pmds : 4; - uint32_t pmedsia : 2; - uint32_t pmess : 1; - uint32_t reserved_16_21 : 6; - uint32_t bd3h : 1; - uint32_t bpccee : 1; - uint32_t pmdia : 8; -#endif - } s; - struct cvmx_pcieep_cfg017_s cn52xx; - struct cvmx_pcieep_cfg017_s cn52xxp1; - struct cvmx_pcieep_cfg017_s cn56xx; - struct cvmx_pcieep_cfg017_s cn56xxp1; -} cvmx_pcieep_cfg017_t; - - -/** - * cvmx_pcieep_cfg020 - * - * PCIE_CFG020 = Twenty-first 32-bits of PCIE type 0 config space - * (MSI Capability ID/ - * MSI Next Item Pointer/ - * MSI Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg020_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t m64 : 1; /**< 64-bit Address Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t mme : 3; /**< 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 value. */ - uint32_t mmc : 3; /**< Multiple Message Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t msien : 1; /**< MSI Enabled - When set, INTx must be disabled. */ - uint32_t ncp : 8; /**< Next Capability Pointer - Points to PCI Express Capabilities by default, - writable through the DBI. - However, the application must not change this field. */ - uint32_t msicid : 8; /**< MSI Capability ID */ -#else - uint32_t msicid : 8; - uint32_t ncp : 8; - uint32_t msien : 1; - uint32_t mmc : 3; - uint32_t mme : 3; - uint32_t m64 : 1; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pcieep_cfg020_s cn52xx; - struct cvmx_pcieep_cfg020_s cn52xxp1; - struct cvmx_pcieep_cfg020_s cn56xx; - struct cvmx_pcieep_cfg020_s cn56xxp1; -} cvmx_pcieep_cfg020_t; - - -/** - * cvmx_pcieep_cfg021 - * - * PCIE_CFG021 = Twenty-second 32-bits of PCIE type 0 config space (MSI Lower 32 Bits Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg021_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmsi : 30; /**< Lower 32-bit Address */ - uint32_t reserved_0_1 : 2; -#else - uint32_t reserved_0_1 : 2; - uint32_t lmsi : 30; -#endif - } s; - struct cvmx_pcieep_cfg021_s cn52xx; - struct cvmx_pcieep_cfg021_s cn52xxp1; - struct cvmx_pcieep_cfg021_s cn56xx; - struct cvmx_pcieep_cfg021_s cn56xxp1; -} cvmx_pcieep_cfg021_t; - - -/** - * cvmx_pcieep_cfg022 - * - * PCIE_CFG022 = Twenty-third 32-bits of PCIE type 0 config space (MSI Upper 32 bits Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg022_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umsi : 32; /**< Upper 32-bit Address */ -#else - uint32_t umsi : 32; -#endif - } s; - struct cvmx_pcieep_cfg022_s cn52xx; - struct cvmx_pcieep_cfg022_s cn52xxp1; - struct cvmx_pcieep_cfg022_s cn56xx; - struct cvmx_pcieep_cfg022_s cn56xxp1; -} cvmx_pcieep_cfg022_t; - - -/** - * cvmx_pcieep_cfg023 - * - * PCIE_CFG023 = Twenty-fourth 32-bits of PCIE type 0 config space (MSI Data Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg023_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t msimd : 16; /**< MSI Data - Pattern assigned by system software, bits [4:0] are Or-ed with - MSI_VECTOR to generate 32 MSI Messages per function. */ -#else - uint32_t msimd : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_pcieep_cfg023_s cn52xx; - struct cvmx_pcieep_cfg023_s cn52xxp1; - struct cvmx_pcieep_cfg023_s cn56xx; - struct cvmx_pcieep_cfg023_s cn56xxp1; -} cvmx_pcieep_cfg023_t; - - -/** - * cvmx_pcieep_cfg028 - * - * PCIE_CFG028 = Twenty-ninth 32-bits of PCIE type 0 config space - * (PCI Express Capabilities List Register/ - * PCI Express Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg028_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t imn : 5; /**< Interrupt Message Number - Updated by hardware, writable through the DBI. - However, the application must not change this field. */ - uint32_t si : 1; /**< Slot Implemented - This bit is writable through the DBI. However, it must be 0 for - an Endpoint device. Therefore, the application must not write a - 1 to this bit. */ - uint32_t dpt : 4; /**< Device Port Type */ - uint32_t pciecv : 4; /**< PCI Express Capability Version */ - uint32_t ncp : 8; /**< Next Capability Pointer - Writable through the DBI. - However, the application must not change this field. */ - uint32_t pcieid : 8; /**< PCIE Capability ID */ -#else - uint32_t pcieid : 8; - uint32_t ncp : 8; - uint32_t pciecv : 4; - uint32_t dpt : 4; - uint32_t si : 1; - uint32_t imn : 5; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pcieep_cfg028_s cn52xx; - struct cvmx_pcieep_cfg028_s cn52xxp1; - struct cvmx_pcieep_cfg028_s cn56xx; - struct cvmx_pcieep_cfg028_s cn56xxp1; -} cvmx_pcieep_cfg028_t; - - -/** - * cvmx_pcieep_cfg029 - * - * PCIE_CFG029 = Thirtieth 32-bits of PCIE type 0 config space (Device Capabilities Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg029_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_28_31 : 4; - uint32_t cspls : 2; /**< Captured Slot Power Limit Scale - From Message from RC, upstream port only. */ - uint32_t csplv : 8; /**< Captured Slot Power Limit Value - From Message from RC, upstream port only. */ - uint32_t reserved_16_17 : 2; - uint32_t rber : 1; /**< Role-Based Error Reporting, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_12_14 : 3; - uint32_t el1al : 3; /**< Endpoint L1 Acceptable Latency, writable through the DBI - However, the application must not change this field. */ - uint32_t el0al : 3; /**< Endpoint L0s Acceptable Latency, writable through the DBI - However, the application must not change this field. */ - uint32_t etfs : 1; /**< Extended Tag Field Supported - This bit is writable through the DBI. However, the application - must not write a 1 to this bit. */ - uint32_t pfs : 2; /**< Phantom Function Supported - This field is writable through the DBI. However, Phantom - Function is not supported. Therefore, the application must not - write any value other than 0x0 to this field. */ - uint32_t mpss : 3; /**< Max_Payload_Size Supported, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t mpss : 3; - uint32_t pfs : 2; - uint32_t etfs : 1; - uint32_t el0al : 3; - uint32_t el1al : 3; - uint32_t reserved_12_14 : 3; - uint32_t rber : 1; - uint32_t reserved_16_17 : 2; - uint32_t csplv : 8; - uint32_t cspls : 2; - uint32_t reserved_28_31 : 4; -#endif - } s; - struct cvmx_pcieep_cfg029_s cn52xx; - struct cvmx_pcieep_cfg029_s cn52xxp1; - struct cvmx_pcieep_cfg029_s cn56xx; - struct cvmx_pcieep_cfg029_s cn56xxp1; -} cvmx_pcieep_cfg029_t; - - -/** - * cvmx_pcieep_cfg030 - * - * PCIE_CFG030 = Thirty-first 32-bits of PCIE type 0 config space - * (Device Control Register/Device Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg030_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_22_31 : 10; - uint32_t tp : 1; /**< Transaction Pending - Set to 1 when Non-Posted Requests are not yet completed - and clear when they are completed. */ - uint32_t ap_d : 1; /**< Aux Power Detected - Set to 1 if Aux power detected. */ - uint32_t ur_d : 1; /**< Unsupported Request Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - UR_D occurs when we receive something we don't support. - 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; /**< Fatal Error Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - FE_D is set if receive any of the errors in PCIE_CFG066 that - has a severity set to Fatal. Malformed TLP's generally fit - into this category. */ - uint32_t nfe_d : 1; /**< Non-Fatal Error detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - NFE_D is set if we receive any of the errors in PCIE_CFG066 - that has a severity set to Nonfatal and does NOT meet Advisory - Nonfatal criteria (PCIe 1.1 spec, Section 6.2.3.2.4), which - most poisoned TLP's should be. */ - uint32_t ce_d : 1; /**< Correctable Error Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - CE_D is set if we receive any of the errors in PCIE_CFG068 - for example a Replay Timer Timeout. Also, it can be set if - we get any of the errors in PCIE_CFG066 that has a severity - set to Nonfatal and meets the Advisory Nonfatal criteria - (PCIe 1.1 spec, Section 6.2.3.2.4), which most ECRC errors - should be. */ - uint32_t reserved_15_15 : 1; - uint32_t mrrs : 3; /**< Max Read Request Size - 0 = 128B - 1 = 256B - 2 = 512B - 3 = 1024B - 4 = 2048B - 5 = 4096B - Note: NPEI_CTL_STATUS2[MRRS] also must be set properly. - NPEI_CTL_STATUS2[MRRS] must not exceed the - desired max read request size. */ - uint32_t ns_en : 1; /**< Enable No Snoop */ - uint32_t ap_en : 1; /**< AUX Power PM Enable */ - uint32_t pf_en : 1; /**< Phantom Function Enable - This bit should never be set - OCTEON requests never use - phantom functions. */ - uint32_t etf_en : 1; /**< Extended Tag Field Enable - This bit should never be set - OCTEON requests never use - extended tags. */ - uint32_t mps : 3; /**< Max Payload Size - Legal values: - 0 = 128B - 1 = 256B - Larger sizes not supported by OCTEON. - Note: NPEI_CTL_STATUS2[MPS] must be set to the same - value for proper functionality. */ - uint32_t ro_en : 1; /**< Enable Relaxed Ordering */ - uint32_t ur_en : 1; /**< Unsupported Request Reporting Enable */ - uint32_t fe_en : 1; /**< Fatal Error Reporting Enable */ - uint32_t nfe_en : 1; /**< Non-Fatal Error Reporting Enable */ - uint32_t ce_en : 1; /**< Correctable Error Reporting Enable */ -#else - uint32_t ce_en : 1; - uint32_t nfe_en : 1; - uint32_t fe_en : 1; - uint32_t ur_en : 1; - uint32_t ro_en : 1; - uint32_t mps : 3; - uint32_t etf_en : 1; - uint32_t pf_en : 1; - uint32_t ap_en : 1; - uint32_t ns_en : 1; - uint32_t mrrs : 3; - uint32_t reserved_15_15 : 1; - uint32_t ce_d : 1; - uint32_t nfe_d : 1; - uint32_t fe_d : 1; - uint32_t ur_d : 1; - uint32_t ap_d : 1; - uint32_t tp : 1; - uint32_t reserved_22_31 : 10; -#endif - } s; - struct cvmx_pcieep_cfg030_s cn52xx; - struct cvmx_pcieep_cfg030_s cn52xxp1; - struct cvmx_pcieep_cfg030_s cn56xx; - struct cvmx_pcieep_cfg030_s cn56xxp1; -} cvmx_pcieep_cfg030_t; - - -/** - * cvmx_pcieep_cfg031 - * - * PCIE_CFG031 = Thirty-second 32-bits of PCIE type 0 config space - * (Link Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg031_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pnum : 8; /**< Port Number, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_22_23 : 2; - uint32_t lbnc : 1; /**< Link Bandwith Notification Capability */ - uint32_t dllarc : 1; /**< Data Link Layer Active Reporting Capable */ - uint32_t sderc : 1; /**< Surprise Down Error Reporting Capable - Not supported, hardwired to 0x0. */ - uint32_t cpm : 1; /**< Clock Power Management - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t l1el : 3; /**< L1 Exit Latency - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t l0el : 3; /**< L0s Exit Latency - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t aslpms : 2; /**< Active State Link PM Support - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t mlw : 6; /**< Maximum Link Width - The default value is the value you specify during hardware - configuration (x1, x4, x8, or x16), writable through the DBI. */ - uint32_t mls : 4; /**< Maximum Link Speed - Default value is 0x1 for 2.5 Gbps Link. - This field is writable through the DBI. However, 0x1 is the - only supported value. Therefore, the application must not write - any value other than 0x1 to this field. */ -#else - uint32_t mls : 4; - uint32_t mlw : 6; - uint32_t aslpms : 2; - uint32_t l0el : 3; - uint32_t l1el : 3; - uint32_t cpm : 1; - uint32_t sderc : 1; - uint32_t dllarc : 1; - uint32_t lbnc : 1; - uint32_t reserved_22_23 : 2; - uint32_t pnum : 8; -#endif - } s; - struct cvmx_pcieep_cfg031_s cn52xx; - struct cvmx_pcieep_cfg031_s cn52xxp1; - struct cvmx_pcieep_cfg031_s cn56xx; - struct cvmx_pcieep_cfg031_s cn56xxp1; -} cvmx_pcieep_cfg031_t; - - -/** - * cvmx_pcieep_cfg032 - * - * PCIE_CFG032 = Thirty-third 32-bits of PCIE type 0 config space - * (Link Control Register/Link Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg032_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t dlla : 1; /**< Data Link Layer Active - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t scc : 1; /**< Slot Clock Configuration - Indicates that the component uses the same physical reference - clock that the platform provides on the connector. - Writable through the DBI. - However, the application must not change this field. */ - uint32_t lt : 1; /**< Link Training - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t reserved_26_26 : 1; - uint32_t nlw : 6; /**< Negotiated Link Width - Set automatically by hardware after Link initialization. */ - uint32_t ls : 4; /**< Link Speed - The negotiated Link speed: 2.5 Gbps */ - uint32_t reserved_10_15 : 6; - uint32_t hawd : 1; /**< Hardware Autonomous Width Disable - (Not Supported) */ - uint32_t ecpm : 1; /**< Enable Clock Power Management - Hardwired to 0 if Clock Power Management is disabled in - the Link Capabilities register. */ - uint32_t es : 1; /**< Extended Synch */ - uint32_t ccc : 1; /**< Common Clock Configuration */ - uint32_t rl : 1; /**< Retrain Link - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t ld : 1; /**< Link Disable - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t rcb : 1; /**< Read Completion Boundary (RCB) */ - uint32_t reserved_2_2 : 1; - uint32_t aslpc : 2; /**< Active State Link PM Control */ -#else - uint32_t aslpc : 2; - uint32_t reserved_2_2 : 1; - uint32_t rcb : 1; - uint32_t ld : 1; - uint32_t rl : 1; - uint32_t ccc : 1; - uint32_t es : 1; - uint32_t ecpm : 1; - uint32_t hawd : 1; - uint32_t reserved_10_15 : 6; - uint32_t ls : 4; - uint32_t nlw : 6; - uint32_t reserved_26_26 : 1; - uint32_t lt : 1; - uint32_t scc : 1; - uint32_t dlla : 1; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pcieep_cfg032_s cn52xx; - struct cvmx_pcieep_cfg032_s cn52xxp1; - struct cvmx_pcieep_cfg032_s cn56xx; - struct cvmx_pcieep_cfg032_s cn56xxp1; -} cvmx_pcieep_cfg032_t; - - -/** - * cvmx_pcieep_cfg033 - * - * PCIE_CFG033 = Thirty-fourth 32-bits of PCIE type 0 config space - * (Slot Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg033_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ps_num : 13; /**< Physical Slot Number, writable through the DBI - However, the application must not change this field. */ - uint32_t nccs : 1; /**< No Command Complete Support, writable through the DBI - However, the application must not change this field. */ - uint32_t emip : 1; /**< Electromechanical Interlock Present, writable through the DBI - However, the application must not change this field. */ - uint32_t sp_ls : 2; /**< Slot Power Limit Scale, writable through the DBI - However, the application must not change this field. */ - uint32_t sp_lv : 8; /**< Slot Power Limit Value, writable through the DBI - However, the application must not change this field. */ - uint32_t hp_c : 1; /**< Hot-Plug Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t hp_s : 1; /**< Hot-Plug Surprise, writable through the DBI - However, the application must not change this field. */ - uint32_t pip : 1; /**< Power Indicator Present, writable through the DBI - However, the application must not change this field. */ - uint32_t aip : 1; /**< Attention Indicator Present, writable through the DBI - However, the application must not change this field. */ - uint32_t mrlsp : 1; /**< MRL Sensor Present, writable through the DBI - However, the application must not change this field. */ - uint32_t pcp : 1; /**< Power Controller Present, writable through the DBI - However, the application must not change this field. */ - uint32_t abp : 1; /**< Attention Button Present, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t abp : 1; - uint32_t pcp : 1; - uint32_t mrlsp : 1; - uint32_t aip : 1; - uint32_t pip : 1; - uint32_t hp_s : 1; - uint32_t hp_c : 1; - uint32_t sp_lv : 8; - uint32_t sp_ls : 2; - uint32_t emip : 1; - uint32_t nccs : 1; - uint32_t ps_num : 13; -#endif - } s; - struct cvmx_pcieep_cfg033_s cn52xx; - struct cvmx_pcieep_cfg033_s cn52xxp1; - struct cvmx_pcieep_cfg033_s cn56xx; - struct cvmx_pcieep_cfg033_s cn56xxp1; -} cvmx_pcieep_cfg033_t; - - -/** - * cvmx_pcieep_cfg034 - * - * PCIE_CFG034 = Thirty-fifth 32-bits of PCIE type 0 config space - * (Slot Control Register/Slot Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg034_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_25_31 : 7; - uint32_t dlls_c : 1; /**< Data Link Layer State Changed - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t emis : 1; /**< Electromechanical Interlock Status */ - uint32_t pds : 1; /**< Presence Detect State */ - uint32_t mrlss : 1; /**< MRL Sensor State */ - uint32_t ccint_d : 1; /**< Command Completed */ - uint32_t pd_c : 1; /**< Presence Detect Changed */ - uint32_t mrls_c : 1; /**< MRL Sensor Changed */ - uint32_t pf_d : 1; /**< Power Fault Detected */ - uint32_t abp_d : 1; /**< Attention Button Pressed */ - uint32_t reserved_13_15 : 3; - uint32_t dlls_en : 1; /**< Data Link Layer State Changed Enable - Not applicable for an upstream Port or Endpoint device, - hardwired to 0. */ - uint32_t emic : 1; /**< Electromechanical Interlock Control */ - uint32_t pcc : 1; /**< Power Controller Control */ - uint32_t pic : 2; /**< Power Indicator Control */ - uint32_t aic : 2; /**< Attention Indicator Control */ - uint32_t hpint_en : 1; /**< Hot-Plug Interrupt Enable */ - uint32_t ccint_en : 1; /**< Command Completed Interrupt Enable */ - uint32_t pd_en : 1; /**< Presence Detect Changed Enable */ - uint32_t mrls_en : 1; /**< MRL Sensor Changed Enable */ - uint32_t pf_en : 1; /**< Power Fault Detected Enable */ - uint32_t abp_en : 1; /**< Attention Button Pressed Enable */ -#else - uint32_t abp_en : 1; - uint32_t pf_en : 1; - uint32_t mrls_en : 1; - uint32_t pd_en : 1; - uint32_t ccint_en : 1; - uint32_t hpint_en : 1; - uint32_t aic : 2; - uint32_t pic : 2; - uint32_t pcc : 1; - uint32_t emic : 1; - uint32_t dlls_en : 1; - uint32_t reserved_13_15 : 3; - uint32_t abp_d : 1; - uint32_t pf_d : 1; - uint32_t mrls_c : 1; - uint32_t pd_c : 1; - uint32_t ccint_d : 1; - uint32_t mrlss : 1; - uint32_t pds : 1; - uint32_t emis : 1; - uint32_t dlls_c : 1; - uint32_t reserved_25_31 : 7; -#endif - } s; - struct cvmx_pcieep_cfg034_s cn52xx; - struct cvmx_pcieep_cfg034_s cn52xxp1; - struct cvmx_pcieep_cfg034_s cn56xx; - struct cvmx_pcieep_cfg034_s cn56xxp1; -} cvmx_pcieep_cfg034_t; - - -/** - * cvmx_pcieep_cfg037 - * - * PCIE_CFG037 = Thirty-eighth 32-bits of PCIE type 0 config space - * (Device Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg037_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t ctds : 1; /**< Completion Timeout Disable Supported */ - uint32_t ctrs : 4; /**< Completion Timeout Ranges Supported - Value of 0 indicates that Completion Timeout Programming - is not supported - Completion timeout is 16.7ms. */ -#else - uint32_t ctrs : 4; - uint32_t ctds : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_pcieep_cfg037_s cn52xx; - struct cvmx_pcieep_cfg037_s cn52xxp1; - struct cvmx_pcieep_cfg037_s cn56xx; - struct cvmx_pcieep_cfg037_s cn56xxp1; -} cvmx_pcieep_cfg037_t; - - -/** - * cvmx_pcieep_cfg038 - * - * PCIE_CFG038 = Thirty-ninth 32-bits of PCIE type 0 config space - * (Device Control 2 Register/Device Status 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg038_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t ctd : 1; /**< Completion Timeout Disable */ - uint32_t ctv : 4; /**< Completion Timeout Value - Completion Timeout Programming is not supported - Completion timeout is 16.7ms. */ -#else - uint32_t ctv : 4; - uint32_t ctd : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_pcieep_cfg038_s cn52xx; - struct cvmx_pcieep_cfg038_s cn52xxp1; - struct cvmx_pcieep_cfg038_s cn56xx; - struct cvmx_pcieep_cfg038_s cn56xxp1; -} cvmx_pcieep_cfg038_t; - - -/** - * cvmx_pcieep_cfg039 - * - * PCIE_CFG039 = Fourtieth 32-bits of PCIE type 0 config space - * (Link Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg039_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pcieep_cfg039_s cn52xx; - struct cvmx_pcieep_cfg039_s cn52xxp1; - struct cvmx_pcieep_cfg039_s cn56xx; - struct cvmx_pcieep_cfg039_s cn56xxp1; -} cvmx_pcieep_cfg039_t; - - -/** - * cvmx_pcieep_cfg040 - * - * PCIE_CFG040 = Fourty-first 32-bits of PCIE type 0 config space - * (Link Control 2 Register/Link Status 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg040_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pcieep_cfg040_s cn52xx; - struct cvmx_pcieep_cfg040_s cn52xxp1; - struct cvmx_pcieep_cfg040_s cn56xx; - struct cvmx_pcieep_cfg040_s cn56xxp1; -} cvmx_pcieep_cfg040_t; - - -/** - * cvmx_pcieep_cfg041 - * - * PCIE_CFG041 = Fourty-second 32-bits of PCIE type 0 config space - * (Slot Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg041_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pcieep_cfg041_s cn52xx; - struct cvmx_pcieep_cfg041_s cn52xxp1; - struct cvmx_pcieep_cfg041_s cn56xx; - struct cvmx_pcieep_cfg041_s cn56xxp1; -} cvmx_pcieep_cfg041_t; - - -/** - * cvmx_pcieep_cfg042 - * - * PCIE_CFG042 = Fourty-third 32-bits of PCIE type 0 config space - * (Slot Control 2 Register/Slot Status 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg042_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pcieep_cfg042_s cn52xx; - struct cvmx_pcieep_cfg042_s cn52xxp1; - struct cvmx_pcieep_cfg042_s cn56xx; - struct cvmx_pcieep_cfg042_s cn56xxp1; -} cvmx_pcieep_cfg042_t; - - -/** - * cvmx_pcieep_cfg064 - * - * PCIE_CFG064 = Sixty-fifth 32-bits of PCIE type 0 config space - * (PCI Express Enhanced Capability Header) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg064_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t nco : 12; /**< Next Capability Offset */ - uint32_t cv : 4; /**< Capability Version */ - uint32_t pcieec : 16; /**< PCIE Express Extended Capability */ -#else - uint32_t pcieec : 16; - uint32_t cv : 4; - uint32_t nco : 12; -#endif - } s; - struct cvmx_pcieep_cfg064_s cn52xx; - struct cvmx_pcieep_cfg064_s cn52xxp1; - struct cvmx_pcieep_cfg064_s cn56xx; - struct cvmx_pcieep_cfg064_s cn56xxp1; -} cvmx_pcieep_cfg064_t; - - -/** - * cvmx_pcieep_cfg065 - * - * PCIE_CFG065 = Sixty-sixth 32-bits of PCIE type 0 config space - * (Uncorrectable Error Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg065_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t ures : 1; /**< Unsupported Request Error Status */ - uint32_t ecrces : 1; /**< ECRC Error Status */ - uint32_t mtlps : 1; /**< Malformed TLP Status */ - uint32_t ros : 1; /**< Receiver Overflow Status */ - uint32_t ucs : 1; /**< Unexpected Completion Status */ - uint32_t cas : 1; /**< Completer Abort Status */ - uint32_t cts : 1; /**< Completion Timeout Status */ - uint32_t fcpes : 1; /**< Flow Control Protocol Error Status */ - uint32_t ptlps : 1; /**< Poisoned TLP Status */ - uint32_t reserved_6_11 : 6; - uint32_t sdes : 1; /**< Surprise Down Error Status (not supported) */ - uint32_t dlpes : 1; /**< Data Link Protocol Error Status */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpes : 1; - uint32_t sdes : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlps : 1; - uint32_t fcpes : 1; - uint32_t cts : 1; - uint32_t cas : 1; - uint32_t ucs : 1; - uint32_t ros : 1; - uint32_t mtlps : 1; - uint32_t ecrces : 1; - uint32_t ures : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pcieep_cfg065_s cn52xx; - struct cvmx_pcieep_cfg065_s cn52xxp1; - struct cvmx_pcieep_cfg065_s cn56xx; - struct cvmx_pcieep_cfg065_s cn56xxp1; -} cvmx_pcieep_cfg065_t; - - -/** - * cvmx_pcieep_cfg066 - * - * PCIE_CFG066 = Sixty-seventh 32-bits of PCIE type 0 config space - * (Uncorrectable Error Mask Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg066_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t urem : 1; /**< Unsupported Request Error Mask */ - uint32_t ecrcem : 1; /**< ECRC Error Mask */ - uint32_t mtlpm : 1; /**< Malformed TLP Mask */ - uint32_t rom : 1; /**< Receiver Overflow Mask */ - uint32_t ucm : 1; /**< Unexpected Completion Mask */ - uint32_t cam : 1; /**< Completer Abort Mask */ - uint32_t ctm : 1; /**< Completion Timeout Mask */ - uint32_t fcpem : 1; /**< Flow Control Protocol Error Mask */ - uint32_t ptlpm : 1; /**< Poisoned TLP Mask */ - uint32_t reserved_6_11 : 6; - uint32_t sdem : 1; /**< Surprise Down Error Mask (not supported) */ - uint32_t dlpem : 1; /**< Data Link Protocol Error Mask */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpem : 1; - uint32_t sdem : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlpm : 1; - uint32_t fcpem : 1; - uint32_t ctm : 1; - uint32_t cam : 1; - uint32_t ucm : 1; - uint32_t rom : 1; - uint32_t mtlpm : 1; - uint32_t ecrcem : 1; - uint32_t urem : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pcieep_cfg066_s cn52xx; - struct cvmx_pcieep_cfg066_s cn52xxp1; - struct cvmx_pcieep_cfg066_s cn56xx; - struct cvmx_pcieep_cfg066_s cn56xxp1; -} cvmx_pcieep_cfg066_t; - - -/** - * cvmx_pcieep_cfg067 - * - * PCIE_CFG067 = Sixty-eighth 32-bits of PCIE type 0 config space - * (Uncorrectable Error Severity Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg067_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t ures : 1; /**< Unsupported Request Error Severity */ - uint32_t ecrces : 1; /**< ECRC Error Severity */ - uint32_t mtlps : 1; /**< Malformed TLP Severity */ - uint32_t ros : 1; /**< Receiver Overflow Severity */ - uint32_t ucs : 1; /**< Unexpected Completion Severity */ - uint32_t cas : 1; /**< Completer Abort Severity */ - uint32_t cts : 1; /**< Completion Timeout Severity */ - uint32_t fcpes : 1; /**< Flow Control Protocol Error Severity */ - uint32_t ptlps : 1; /**< Poisoned TLP Severity */ - uint32_t reserved_6_11 : 6; - uint32_t sdes : 1; /**< Surprise Down Error Severity (not supported) */ - uint32_t dlpes : 1; /**< Data Link Protocol Error Severity */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpes : 1; - uint32_t sdes : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlps : 1; - uint32_t fcpes : 1; - uint32_t cts : 1; - uint32_t cas : 1; - uint32_t ucs : 1; - uint32_t ros : 1; - uint32_t mtlps : 1; - uint32_t ecrces : 1; - uint32_t ures : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pcieep_cfg067_s cn52xx; - struct cvmx_pcieep_cfg067_s cn52xxp1; - struct cvmx_pcieep_cfg067_s cn56xx; - struct cvmx_pcieep_cfg067_s cn56xxp1; -} cvmx_pcieep_cfg067_t; - - -/** - * cvmx_pcieep_cfg068 - * - * PCIE_CFG068 = Sixty-ninth 32-bits of PCIE type 0 config space - * (Correctable Error Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg068_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_14_31 : 18; - uint32_t anfes : 1; /**< Advisory Non-Fatal Error Status */ - uint32_t rtts : 1; /**< Reply Timer Timeout Status */ - uint32_t reserved_9_11 : 3; - uint32_t rnrs : 1; /**< REPLAY_NUM Rollover Status */ - uint32_t bdllps : 1; /**< Bad DLLP Status */ - uint32_t btlps : 1; /**< Bad TLP Status */ - uint32_t reserved_1_5 : 5; - uint32_t res : 1; /**< Receiver Error Status */ -#else - uint32_t res : 1; - uint32_t reserved_1_5 : 5; - uint32_t btlps : 1; - uint32_t bdllps : 1; - uint32_t rnrs : 1; - uint32_t reserved_9_11 : 3; - uint32_t rtts : 1; - uint32_t anfes : 1; - uint32_t reserved_14_31 : 18; -#endif - } s; - struct cvmx_pcieep_cfg068_s cn52xx; - struct cvmx_pcieep_cfg068_s cn52xxp1; - struct cvmx_pcieep_cfg068_s cn56xx; - struct cvmx_pcieep_cfg068_s cn56xxp1; -} cvmx_pcieep_cfg068_t; - - -/** - * cvmx_pcieep_cfg069 - * - * PCIE_CFG069 = Seventieth 32-bits of PCIE type 0 config space - * (Correctable Error Mask Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg069_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_14_31 : 18; - uint32_t anfem : 1; /**< Advisory Non-Fatal Error Mask */ - uint32_t rttm : 1; /**< Reply Timer Timeout Mask */ - uint32_t reserved_9_11 : 3; - uint32_t rnrm : 1; /**< REPLAY_NUM Rollover Mask */ - uint32_t bdllpm : 1; /**< Bad DLLP Mask */ - uint32_t btlpm : 1; /**< Bad TLP Mask */ - uint32_t reserved_1_5 : 5; - uint32_t rem : 1; /**< Receiver Error Mask */ -#else - uint32_t rem : 1; - uint32_t reserved_1_5 : 5; - uint32_t btlpm : 1; - uint32_t bdllpm : 1; - uint32_t rnrm : 1; - uint32_t reserved_9_11 : 3; - uint32_t rttm : 1; - uint32_t anfem : 1; - uint32_t reserved_14_31 : 18; -#endif - } s; - struct cvmx_pcieep_cfg069_s cn52xx; - struct cvmx_pcieep_cfg069_s cn52xxp1; - struct cvmx_pcieep_cfg069_s cn56xx; - struct cvmx_pcieep_cfg069_s cn56xxp1; -} cvmx_pcieep_cfg069_t; - - -/** - * cvmx_pcieep_cfg070 - * - * PCIE_CFG070 = Seventy-first 32-bits of PCIE type 0 config space - * (Advanced Error Capabilities and Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg070_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t ce : 1; /**< ECRC Check Enable */ - uint32_t cc : 1; /**< ECRC Check Capable */ - uint32_t ge : 1; /**< ECRC Generation Enable */ - uint32_t gc : 1; /**< ECRC Generation Capability */ - uint32_t fep : 5; /**< First Error Pointer */ -#else - uint32_t fep : 5; - uint32_t gc : 1; - uint32_t ge : 1; - uint32_t cc : 1; - uint32_t ce : 1; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_pcieep_cfg070_s cn52xx; - struct cvmx_pcieep_cfg070_s cn52xxp1; - struct cvmx_pcieep_cfg070_s cn56xx; - struct cvmx_pcieep_cfg070_s cn56xxp1; -} cvmx_pcieep_cfg070_t; - - -/** - * cvmx_pcieep_cfg071 - * - * PCIE_CFG071 = Seventy-second 32-bits of PCIE type 0 config space - * (Header Log Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg071_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword1 : 32; /**< Header Log Register (first DWORD) */ -#else - uint32_t dword1 : 32; -#endif - } s; - struct cvmx_pcieep_cfg071_s cn52xx; - struct cvmx_pcieep_cfg071_s cn52xxp1; - struct cvmx_pcieep_cfg071_s cn56xx; - struct cvmx_pcieep_cfg071_s cn56xxp1; -} cvmx_pcieep_cfg071_t; - - -/** - * cvmx_pcieep_cfg072 - * - * PCIE_CFG072 = Seventy-third 32-bits of PCIE type 0 config space - * (Header Log Register 2) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg072_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword2 : 32; /**< Header Log Register (second DWORD) */ -#else - uint32_t dword2 : 32; -#endif - } s; - struct cvmx_pcieep_cfg072_s cn52xx; - struct cvmx_pcieep_cfg072_s cn52xxp1; - struct cvmx_pcieep_cfg072_s cn56xx; - struct cvmx_pcieep_cfg072_s cn56xxp1; -} cvmx_pcieep_cfg072_t; - - -/** - * cvmx_pcieep_cfg073 - * - * PCIE_CFG073 = Seventy-fourth 32-bits of PCIE type 0 config space - * (Header Log Register 3) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg073_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword3 : 32; /**< Header Log Register (third DWORD) */ -#else - uint32_t dword3 : 32; -#endif - } s; - struct cvmx_pcieep_cfg073_s cn52xx; - struct cvmx_pcieep_cfg073_s cn52xxp1; - struct cvmx_pcieep_cfg073_s cn56xx; - struct cvmx_pcieep_cfg073_s cn56xxp1; -} cvmx_pcieep_cfg073_t; - - -/** - * cvmx_pcieep_cfg074 - * - * PCIE_CFG074 = Seventy-fifth 32-bits of PCIE type 0 config space - * (Header Log Register 4) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg074_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword4 : 32; /**< Header Log Register (fourth DWORD) */ -#else - uint32_t dword4 : 32; -#endif - } s; - struct cvmx_pcieep_cfg074_s cn52xx; - struct cvmx_pcieep_cfg074_s cn52xxp1; - struct cvmx_pcieep_cfg074_s cn56xx; - struct cvmx_pcieep_cfg074_s cn56xxp1; -} cvmx_pcieep_cfg074_t; - - -/** - * cvmx_pcieep_cfg448 - * - * PCIE_CFG448 = Four hundred forty-ninth 32-bits of PCIE type 0 config space - * (Ack Latency Timer and Replay Timer Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg448_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t rtl : 16; /**< 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. - The default is then updated based on the Negotiated Link Width - and Max_Payload_Size. */ - uint32_t rtltl : 16; /**< Round Trip Latency Time Limit - The Ack/Nak latency timer expires when it reaches this limit. - The default is then updated based on the Negotiated Link Width - and Max_Payload_Size. */ -#else - uint32_t rtltl : 16; - uint32_t rtl : 16; -#endif - } s; - struct cvmx_pcieep_cfg448_s cn52xx; - struct cvmx_pcieep_cfg448_s cn52xxp1; - struct cvmx_pcieep_cfg448_s cn56xx; - struct cvmx_pcieep_cfg448_s cn56xxp1; -} cvmx_pcieep_cfg448_t; - - -/** - * cvmx_pcieep_cfg449 - * - * PCIE_CFG449 = Four hundred fiftieth 32-bits of PCIE type 0 config space - * (Other Message Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg449_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t omr : 32; /**< Other Message Register - This register can be used for either of the following purposes: - o 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. - o 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 XOR'd with this pattern before inserting - it into the packet. */ -#else - uint32_t omr : 32; -#endif - } s; - struct cvmx_pcieep_cfg449_s cn52xx; - struct cvmx_pcieep_cfg449_s cn52xxp1; - struct cvmx_pcieep_cfg449_s cn56xx; - struct cvmx_pcieep_cfg449_s cn56xxp1; -} cvmx_pcieep_cfg449_t; - - -/** - * cvmx_pcieep_cfg450 - * - * PCIE_CFG450 = Four hundred fifty-first 32-bits of PCIE type 0 config space - * (Port Force Link Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg450_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lpec : 8; /**< Low Power Entrance Count - The Power Management state will wait for this many clock cycles - for the associated completion of a CfgWr to PCIE_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 (PCIE_CFG017) register. */ - uint32_t reserved_22_23 : 2; - uint32_t link_state : 6; /**< Link State - The Link state that the PCI Express Bus will be forced to - when bit 15 (Force Link) is set. - State encoding: - o DETECT_QUIET 00h - o DETECT_ACT 01h - o POLL_ACTIVE 02h - o POLL_COMPLIANCE 03h - o POLL_CONFIG 04h - o PRE_DETECT_QUIET 05h - o DETECT_WAIT 06h - o CFG_LINKWD_START 07h - o CFG_LINKWD_ACEPT 08h - o CFG_LANENUM_WAIT 09h - o CFG_LANENUM_ACEPT 0Ah - o CFG_COMPLETE 0Bh - o CFG_IDLE 0Ch - o RCVRY_LOCK 0Dh - o RCVRY_SPEED 0Eh - o RCVRY_RCVRCFG 0Fh - o RCVRY_IDLE 10h - o L0 11h - o L0S 12h - o L123_SEND_EIDLE 13h - o L1_IDLE 14h - o L2_IDLE 15h - o L2_WAKE 16h - o DISABLED_ENTRY 17h - o DISABLED_IDLE 18h - o DISABLED 19h - o LPBK_ENTRY 1Ah - o LPBK_ACTIVE 1Bh - o LPBK_EXIT 1Ch - o LPBK_EXIT_TIMEOUT 1Dh - o HOT_RESET_ENTRY 1Eh - o HOT_RESET 1Fh */ - uint32_t force_link : 1; /**< Force Link - Forces the Link to the state specified by the Link State field. - The Force Link pulse will trigger Link re-negotiation. - * As the The Force Link is a pulse, writing a 1 to it does - trigger the forced link state event, even thought reading it - always returns a 0. */ - uint32_t reserved_8_14 : 7; - uint32_t link_num : 8; /**< Link Number - Not used for Endpoint */ -#else - uint32_t link_num : 8; - uint32_t reserved_8_14 : 7; - uint32_t force_link : 1; - uint32_t link_state : 6; - uint32_t reserved_22_23 : 2; - uint32_t lpec : 8; -#endif - } s; - struct cvmx_pcieep_cfg450_s cn52xx; - struct cvmx_pcieep_cfg450_s cn52xxp1; - struct cvmx_pcieep_cfg450_s cn56xx; - struct cvmx_pcieep_cfg450_s cn56xxp1; -} cvmx_pcieep_cfg450_t; - - -/** - * cvmx_pcieep_cfg451 - * - * PCIE_CFG451 = Four hundred fifty-second 32-bits of PCIE type 0 config space - * (Ack Frequency Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg451_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t l1el : 3; /**< L1 Entrance Latency - Values correspond to: - o 000: 1 ms - o 001: 2 ms - o 010: 4 ms - o 011: 8 ms - o 100: 16 ms - o 101: 32 ms - o 110 or 111: 64 ms */ - uint32_t l0el : 3; /**< L0s Entrance Latency - Values correspond to: - o 000: 1 ms - o 001: 2 ms - o 010: 3 ms - o 011: 4 ms - o 100: 5 ms - o 101: 6 ms - o 110 or 111: 7 ms */ - uint32_t n_fts_cc : 8; /**< N_FTS when common clock is used. - The number of Fast Training Sequence 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. - Note: 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; /**< N_FTS - The number of Fast Training Sequence 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. - Note: 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; /**< Ack Frequency - The number of pending Ack's specified here (up to 255) before - sending an Ack. */ -#else - uint32_t ack_freq : 8; - uint32_t n_fts : 8; - uint32_t n_fts_cc : 8; - uint32_t l0el : 3; - uint32_t l1el : 3; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pcieep_cfg451_s cn52xx; - struct cvmx_pcieep_cfg451_s cn52xxp1; - struct cvmx_pcieep_cfg451_s cn56xx; - struct cvmx_pcieep_cfg451_s cn56xxp1; -} cvmx_pcieep_cfg451_t; - - -/** - * cvmx_pcieep_cfg452 - * - * PCIE_CFG452 = Four hundred fifty-third 32-bits of PCIE type 0 config space - * (Port Link Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg452_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t eccrc : 1; /**< Enable Corrupted CRC - Causes corrupt LCRC for TLPs when set, - using the pattern contained in the Other Message register. - This is a test feature, not to be used in normal operation. */ - uint32_t reserved_22_24 : 3; - uint32_t lme : 6; /**< Link Mode Enable - o 000001: x1 - o 000011: x2 - o 000111: x4 - o 001111: x8 - o 011111: x16 (not supported) - o 111111: x32 (not supported) - This field indicates the MAXIMUM number of lanes supported - by the PCIe port. It is set to 0xF or 0x7 depending - on the value of the QLM_CFG bits (0xF when QLM_CFG == 0 - otherwise 0x7). The value can be set less than 0xF or 0x7 - to limit the number of lanes the PCIe will attempt to use. - If the value of 0xF or 0x7 set by the HW is not desired, - this field can be programmed to a smaller value (i.e. EEPROM) - See also MLW. - (Note: The value of this field does NOT indicate the number - of lanes in use by the PCIe. LME sets the max number of lanes - in the PCIe core that COULD be used. As per the PCIe specs, - 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_8_15 : 8; - uint32_t flm : 1; /**< Fast Link Mode - Sets all internal timers to fast mode for simulation purposes. - If during an eeprom load, the first word loaded is 0xffffffff, - then the EEPROM load will be terminated and this bit will be set. */ - uint32_t reserved_6_6 : 1; - uint32_t dllle : 1; /**< 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_4 : 1; - uint32_t ra : 1; /**< Reset Assert - Triggers a recovery and forces the LTSSM to the Hot Reset - state (downstream port only). */ - uint32_t le : 1; /**< Loopback Enable - Turns on loopback. */ - uint32_t sd : 1; /**< Scramble Disable - Turns off data scrambling. */ - uint32_t omr : 1; /**< 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 - uint32_t omr : 1; - uint32_t sd : 1; - uint32_t le : 1; - uint32_t ra : 1; - uint32_t reserved_4_4 : 1; - uint32_t dllle : 1; - uint32_t reserved_6_6 : 1; - uint32_t flm : 1; - uint32_t reserved_8_15 : 8; - uint32_t lme : 6; - uint32_t reserved_22_24 : 3; - uint32_t eccrc : 1; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pcieep_cfg452_s cn52xx; - struct cvmx_pcieep_cfg452_s cn52xxp1; - struct cvmx_pcieep_cfg452_s cn56xx; - struct cvmx_pcieep_cfg452_s cn56xxp1; -} cvmx_pcieep_cfg452_t; - - -/** - * cvmx_pcieep_cfg453 - * - * PCIE_CFG453 = Four hundred fifty-fourth 32-bits of PCIE type 0 config space - * (Lane Skew Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg453_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dlld : 1; /**< Disable Lane-to-Lane Deskew - Disables the internal Lane-to-Lane deskew logic. */ - uint32_t reserved_26_30 : 5; - uint32_t ack_nak : 1; /**< Ack/Nak Disable - Prevents the PCI Express bus from sending Ack and Nak DLLPs. */ - uint32_t fcd : 1; /**< Flow Control Disable - Prevents the PCI Express bus from sending FC DLLPs. */ - uint32_t ilst : 24; /**< Insert Lane Skew for Transmit - 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 010b 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 - uint32_t ilst : 24; - uint32_t fcd : 1; - uint32_t ack_nak : 1; - uint32_t reserved_26_30 : 5; - uint32_t dlld : 1; -#endif - } s; - struct cvmx_pcieep_cfg453_s cn52xx; - struct cvmx_pcieep_cfg453_s cn52xxp1; - struct cvmx_pcieep_cfg453_s cn56xx; - struct cvmx_pcieep_cfg453_s cn56xxp1; -} cvmx_pcieep_cfg453_t; - - -/** - * cvmx_pcieep_cfg454 - * - * PCIE_CFG454 = Four hundred fifty-fifth 32-bits of PCIE type 0 config space - * (Symbol Number Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg454_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_29_31 : 3; - uint32_t tmfcwt : 5; /**< Timer Modifier for Flow Control Watchdog Timer - Increases the timer value for the Flow Control watchdog timer, - in increments of 16 clock cycles. */ - uint32_t tmanlt : 5; /**< 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; /**< Timer Modifier for Replay Timer - Increases the timer value for the replay timer, in increments - of 64 clock cycles. */ - uint32_t reserved_11_13 : 3; - uint32_t nskps : 3; /**< Number of SKP Symbols */ - uint32_t reserved_4_7 : 4; - uint32_t ntss : 4; /**< Number of TS Symbols - Sets the number of TS identifier symbols that are sent in TS1 - and TS2 ordered sets. */ -#else - uint32_t ntss : 4; - uint32_t reserved_4_7 : 4; - uint32_t nskps : 3; - uint32_t reserved_11_13 : 3; - uint32_t tmrt : 5; - uint32_t tmanlt : 5; - uint32_t tmfcwt : 5; - uint32_t reserved_29_31 : 3; -#endif - } s; - struct cvmx_pcieep_cfg454_s cn52xx; - struct cvmx_pcieep_cfg454_s cn52xxp1; - struct cvmx_pcieep_cfg454_s cn56xx; - struct cvmx_pcieep_cfg454_s cn56xxp1; -} cvmx_pcieep_cfg454_t; - - -/** - * cvmx_pcieep_cfg455 - * - * PCIE_CFG455 = Four hundred fifty-sixth 32-bits of PCIE type 0 config space - * (Symbol Timer Register/Filter Mask Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg455_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t m_cfg0_filt : 1; /**< Mask filtering of received Configuration Requests (RC mode only) */ - uint32_t m_io_filt : 1; /**< Mask filtering of received I/O Requests (RC mode only) */ - uint32_t msg_ctrl : 1; /**< Message Control - The application must not change this field. */ - uint32_t m_cpl_ecrc_filt : 1; /**< Mask ECRC error filtering for Completions */ - uint32_t m_ecrc_filt : 1; /**< Mask ECRC error filtering */ - uint32_t m_cpl_len_err : 1; /**< Mask Length mismatch error for received Completions */ - uint32_t m_cpl_attr_err : 1; /**< Mask Attributes mismatch error for received Completions */ - uint32_t m_cpl_tc_err : 1; /**< Mask Traffic Class mismatch error for received Completions */ - uint32_t m_cpl_fun_err : 1; /**< Mask function mismatch error for received Completions */ - uint32_t m_cpl_rid_err : 1; /**< Mask Requester ID mismatch error for received Completions */ - uint32_t m_cpl_tag_err : 1; /**< Mask Tag error rules for received Completions */ - uint32_t m_lk_filt : 1; /**< Mask Locked Request filtering */ - uint32_t m_cfg1_filt : 1; /**< Mask Type 1 Configuration Request filtering */ - uint32_t m_bar_match : 1; /**< Mask BAR match filtering */ - uint32_t m_pois_filt : 1; /**< Mask poisoned TLP filtering */ - uint32_t m_fun : 1; /**< Mask function */ - uint32_t dfcwt : 1; /**< Disable FC Watchdog Timer */ - uint32_t reserved_11_14 : 4; - uint32_t skpiv : 11; /**< SKP Interval Value */ -#else - uint32_t skpiv : 11; - uint32_t reserved_11_14 : 4; - uint32_t dfcwt : 1; - uint32_t m_fun : 1; - uint32_t m_pois_filt : 1; - uint32_t m_bar_match : 1; - uint32_t m_cfg1_filt : 1; - uint32_t m_lk_filt : 1; - uint32_t m_cpl_tag_err : 1; - uint32_t m_cpl_rid_err : 1; - uint32_t m_cpl_fun_err : 1; - uint32_t m_cpl_tc_err : 1; - uint32_t m_cpl_attr_err : 1; - uint32_t m_cpl_len_err : 1; - uint32_t m_ecrc_filt : 1; - uint32_t m_cpl_ecrc_filt : 1; - uint32_t msg_ctrl : 1; - uint32_t m_io_filt : 1; - uint32_t m_cfg0_filt : 1; -#endif - } s; - struct cvmx_pcieep_cfg455_s cn52xx; - struct cvmx_pcieep_cfg455_s cn52xxp1; - struct cvmx_pcieep_cfg455_s cn56xx; - struct cvmx_pcieep_cfg455_s cn56xxp1; -} cvmx_pcieep_cfg455_t; - - -/** - * cvmx_pcieep_cfg456 - * - * PCIE_CFG456 = Four hundred fifty-seventh 32-bits of PCIE type 0 config space - * (Filter Mask Register 2) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg456_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_2_31 : 30; - uint32_t m_vend1_drp : 1; /**< Mask Vendor MSG Type 1 dropped silently */ - uint32_t m_vend0_drp : 1; /**< Mask Vendor MSG Type 0 dropped with UR error reporting. */ -#else - uint32_t m_vend0_drp : 1; - uint32_t m_vend1_drp : 1; - uint32_t reserved_2_31 : 30; -#endif - } s; - struct cvmx_pcieep_cfg456_s cn52xx; - struct cvmx_pcieep_cfg456_s cn52xxp1; - struct cvmx_pcieep_cfg456_s cn56xx; - struct cvmx_pcieep_cfg456_s cn56xxp1; -} cvmx_pcieep_cfg456_t; - - -/** - * cvmx_pcieep_cfg458 - * - * PCIE_CFG458 = Four hundred fifty-ninth 32-bits of PCIE type 0 config space - * (Debug Register 0) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg458_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dbg_info_l32 : 32; /**< Debug Info Lower 32 Bits */ -#else - uint32_t dbg_info_l32 : 32; -#endif - } s; - struct cvmx_pcieep_cfg458_s cn52xx; - struct cvmx_pcieep_cfg458_s cn52xxp1; - struct cvmx_pcieep_cfg458_s cn56xx; - struct cvmx_pcieep_cfg458_s cn56xxp1; -} cvmx_pcieep_cfg458_t; - - -/** - * cvmx_pcieep_cfg459 - * - * PCIE_CFG459 = Four hundred sixtieth 32-bits of PCIE type 0 config space - * (Debug Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg459_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dbg_info_u32 : 32; /**< Debug Info Upper 32 Bits */ -#else - uint32_t dbg_info_u32 : 32; -#endif - } s; - struct cvmx_pcieep_cfg459_s cn52xx; - struct cvmx_pcieep_cfg459_s cn52xxp1; - struct cvmx_pcieep_cfg459_s cn56xx; - struct cvmx_pcieep_cfg459_s cn56xxp1; -} cvmx_pcieep_cfg459_t; - - -/** - * cvmx_pcieep_cfg460 - * - * PCIE_CFG460 = Four hundred sixty-first 32-bits of PCIE type 0 config space - * (Transmit Posted FC Credit Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg460_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tphfcc : 8; /**< 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; /**< 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 - uint32_t tpdfcc : 12; - uint32_t tphfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pcieep_cfg460_s cn52xx; - struct cvmx_pcieep_cfg460_s cn52xxp1; - struct cvmx_pcieep_cfg460_s cn56xx; - struct cvmx_pcieep_cfg460_s cn56xxp1; -} cvmx_pcieep_cfg460_t; - - -/** - * cvmx_pcieep_cfg461 - * - * PCIE_CFG461 = Four hundred sixty-second 32-bits of PCIE type 0 config space - * (Transmit Non-Posted FC Credit Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg461_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tchfcc : 8; /**< Transmit Non-Posted Header FC Credits - The Non-Posted Header credits advertised by the receiver at the - other end of the Link, updated with each UpdateFC DLLP. */ - uint32_t tcdfcc : 12; /**< Transmit Non-Posted Data FC Credits - The Non-Posted Data credits advertised by the receiver at the - other end of the Link, updated with each UpdateFC DLLP. */ -#else - uint32_t tcdfcc : 12; - uint32_t tchfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pcieep_cfg461_s cn52xx; - struct cvmx_pcieep_cfg461_s cn52xxp1; - struct cvmx_pcieep_cfg461_s cn56xx; - struct cvmx_pcieep_cfg461_s cn56xxp1; -} cvmx_pcieep_cfg461_t; - - -/** - * cvmx_pcieep_cfg462 - * - * PCIE_CFG462 = Four hundred sixty-third 32-bits of PCIE type 0 config space - * (Transmit Completion FC Credit Status ) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg462_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tchfcc : 8; /**< 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; /**< 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 - uint32_t tcdfcc : 12; - uint32_t tchfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pcieep_cfg462_s cn52xx; - struct cvmx_pcieep_cfg462_s cn52xxp1; - struct cvmx_pcieep_cfg462_s cn56xx; - struct cvmx_pcieep_cfg462_s cn56xxp1; -} cvmx_pcieep_cfg462_t; - - -/** - * cvmx_pcieep_cfg463 - * - * PCIE_CFG463 = Four hundred sixty-fourth 32-bits of PCIE type 0 config space - * (Queue Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg463_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_3_31 : 29; - uint32_t rqne : 1; /**< Received Queue Not Empty - Indicates there is data in one or more of the receive buffers. */ - uint32_t trbne : 1; /**< Transmit Retry Buffer Not Empty - Indicates that there is data in the transmit retry buffer. */ - uint32_t rtlpfccnr : 1; /**< 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 - uint32_t rtlpfccnr : 1; - uint32_t trbne : 1; - uint32_t rqne : 1; - uint32_t reserved_3_31 : 29; -#endif - } s; - struct cvmx_pcieep_cfg463_s cn52xx; - struct cvmx_pcieep_cfg463_s cn52xxp1; - struct cvmx_pcieep_cfg463_s cn56xx; - struct cvmx_pcieep_cfg463_s cn56xxp1; -} cvmx_pcieep_cfg463_t; - - -/** - * cvmx_pcieep_cfg464 - * - * PCIE_CFG464 = Four hundred sixty-fifth 32-bits of PCIE type 0 config space - * (VC Transmit Arbitration Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg464_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wrr_vc3 : 8; /**< WRR Weight for VC3 */ - uint32_t wrr_vc2 : 8; /**< WRR Weight for VC2 */ - uint32_t wrr_vc1 : 8; /**< WRR Weight for VC1 */ - uint32_t wrr_vc0 : 8; /**< WRR Weight for VC0 */ -#else - uint32_t wrr_vc0 : 8; - uint32_t wrr_vc1 : 8; - uint32_t wrr_vc2 : 8; - uint32_t wrr_vc3 : 8; -#endif - } s; - struct cvmx_pcieep_cfg464_s cn52xx; - struct cvmx_pcieep_cfg464_s cn52xxp1; - struct cvmx_pcieep_cfg464_s cn56xx; - struct cvmx_pcieep_cfg464_s cn56xxp1; -} cvmx_pcieep_cfg464_t; - - -/** - * cvmx_pcieep_cfg465 - * - * PCIE_CFG465 = Four hundred sixty-sixth 32-bits of PCIE type 0 config space - * (VC Transmit Arbitration Register 2) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg465_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wrr_vc7 : 8; /**< WRR Weight for VC7 */ - uint32_t wrr_vc6 : 8; /**< WRR Weight for VC6 */ - uint32_t wrr_vc5 : 8; /**< WRR Weight for VC5 */ - uint32_t wrr_vc4 : 8; /**< WRR Weight for VC4 */ -#else - uint32_t wrr_vc4 : 8; - uint32_t wrr_vc5 : 8; - uint32_t wrr_vc6 : 8; - uint32_t wrr_vc7 : 8; -#endif - } s; - struct cvmx_pcieep_cfg465_s cn52xx; - struct cvmx_pcieep_cfg465_s cn52xxp1; - struct cvmx_pcieep_cfg465_s cn56xx; - struct cvmx_pcieep_cfg465_s cn56xxp1; -} cvmx_pcieep_cfg465_t; - - -/** - * cvmx_pcieep_cfg466 - * - * PCIE_CFG466 = Four hundred sixty-seventh 32-bits of PCIE type 0 config space - * (VC0 Posted Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg466_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t rx_queue_order : 1; /**< VC Ordering for Receive Queues - Determines the VC ordering rule for the receive queues, used - only in the segmented-buffer configuration, - writable through the DBI: - o 1: Strict ordering, higher numbered VCs have higher priority - o 0: Round robin - However, the application must not change this field. */ - uint32_t type_ordering : 1; /**< TLP Type Ordering for VC0 - Determines the TLP type ordering rule for VC0 receive queues, - used only in the segmented-buffer configuration, writable - through the DBI: - o 1: Ordering of received TLPs follows the rules in - PCI Express Base Specification, Revision 1.1 - o 0: Strict ordering for received TLPs: Posted, then - Completion, then Non-Posted - However, the application must not change this field. */ - uint32_t reserved_24_29 : 6; - uint32_t queue_mode : 3; /**< VC0 Posted TLP Queue Mode - The operating mode of the Posted receive queue for VC0, used - only in the segmented-buffer configuration, writable through - the DBI. However, the application must not change this field. - Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< 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 the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< 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 the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_29 : 6; - uint32_t type_ordering : 1; - uint32_t rx_queue_order : 1; -#endif - } s; - struct cvmx_pcieep_cfg466_s cn52xx; - struct cvmx_pcieep_cfg466_s cn52xxp1; - struct cvmx_pcieep_cfg466_s cn56xx; - struct cvmx_pcieep_cfg466_s cn56xxp1; -} cvmx_pcieep_cfg466_t; - - -/** - * cvmx_pcieep_cfg467 - * - * PCIE_CFG467 = Four hundred sixty-eighth 32-bits of PCIE type 0 config space - * (VC0 Non-Posted Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg467_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t queue_mode : 3; /**< VC0 Non-Posted TLP Queue Mode - The operating mode of the Non-Posted receive queue for VC0, - used only in the segmented-buffer configuration, writable - through the DBI. Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< VC0 Non-Posted Header Credits - The number of initial Non-Posted header credits for VC0, used - for all receive queue buffer configurations. - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< VC0 Non-Posted Data Credits - The number of initial Non-Posted data credits for VC0, used for - all receive queue buffer configurations. - This field is writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pcieep_cfg467_s cn52xx; - struct cvmx_pcieep_cfg467_s cn52xxp1; - struct cvmx_pcieep_cfg467_s cn56xx; - struct cvmx_pcieep_cfg467_s cn56xxp1; -} cvmx_pcieep_cfg467_t; - - -/** - * cvmx_pcieep_cfg468 - * - * PCIE_CFG468 = Four hundred sixty-ninth 32-bits of PCIE type 0 config space - * (VC0 Completion Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg468_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t queue_mode : 3; /**< VC0 Completion TLP Queue Mode - The operating mode of the Completion receive queue for VC0, - used only in the segmented-buffer configuration, writable - through the DBI. Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< 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 the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< 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 the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pcieep_cfg468_s cn52xx; - struct cvmx_pcieep_cfg468_s cn52xxp1; - struct cvmx_pcieep_cfg468_s cn56xx; - struct cvmx_pcieep_cfg468_s cn56xxp1; -} cvmx_pcieep_cfg468_t; - - -/** - * cvmx_pcieep_cfg490 - * - * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 0 config space - * (VC0 Posted Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg490_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Posted Header Queue Depth - Sets the number of entries in the Posted header queue for VC0 - when using the segmented-buffer configuration, writable through - the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Posted Data Queue Depth - Sets the number of entries in the Posted data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pcieep_cfg490_s cn52xx; - struct cvmx_pcieep_cfg490_s cn52xxp1; - struct cvmx_pcieep_cfg490_s cn56xx; - struct cvmx_pcieep_cfg490_s cn56xxp1; -} cvmx_pcieep_cfg490_t; - - -/** - * cvmx_pcieep_cfg491 - * - * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 0 config space - * (VC0 Non-Posted Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg491_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Non-Posted Header Queue Depth - Sets the number of entries in the Non-Posted header queue for - VC0 when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Non-Posted Data Queue Depth - Sets the number of entries in the Non-Posted data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pcieep_cfg491_s cn52xx; - struct cvmx_pcieep_cfg491_s cn52xxp1; - struct cvmx_pcieep_cfg491_s cn56xx; - struct cvmx_pcieep_cfg491_s cn56xxp1; -} cvmx_pcieep_cfg491_t; - - -/** - * cvmx_pcieep_cfg492 - * - * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 0 config space - * (VC0 Completion Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg492_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Completion Header Queue Depth - Sets the number of entries in the Completion header queue for - VC0 when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Completion Data Queue Depth - Sets the number of entries in the Completion data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pcieep_cfg492_s cn52xx; - struct cvmx_pcieep_cfg492_s cn52xxp1; - struct cvmx_pcieep_cfg492_s cn56xx; - struct cvmx_pcieep_cfg492_s cn56xxp1; -} cvmx_pcieep_cfg492_t; - - -/** - * cvmx_pcieep_cfg516 - * - * PCIE_CFG516 = Five hundred seventeenth 32-bits of PCIE type 0 config space - * (PHY Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg516_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t phy_stat : 32; /**< PHY Status */ -#else - uint32_t phy_stat : 32; -#endif - } s; - struct cvmx_pcieep_cfg516_s cn52xx; - struct cvmx_pcieep_cfg516_s cn52xxp1; - struct cvmx_pcieep_cfg516_s cn56xx; - struct cvmx_pcieep_cfg516_s cn56xxp1; -} cvmx_pcieep_cfg516_t; - - -/** - * cvmx_pcieep_cfg517 - * - * PCIE_CFG517 = Five hundred eighteenth 32-bits of PCIE type 0 config space - * (PHY Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pcieep_cfg517_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t phy_ctrl : 32; /**< PHY Control */ -#else - uint32_t phy_ctrl : 32; -#endif - } s; - struct cvmx_pcieep_cfg517_s cn52xx; - struct cvmx_pcieep_cfg517_s cn52xxp1; - struct cvmx_pcieep_cfg517_s cn56xx; - struct cvmx_pcieep_cfg517_s cn56xxp1; -} cvmx_pcieep_cfg517_t; - - -/** - * cvmx_pcierc#_cfg000 - * - * PCIE_CFG000 = First 32-bits of PCIE type 1 config space (Device ID and Vendor ID Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg000_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t devid : 16; /**< Device ID, writable through the DBI - However, the application must not change this field. */ - uint32_t vendid : 16; /**< Vendor ID, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t vendid : 16; - uint32_t devid : 16; -#endif - } s; - struct cvmx_pciercx_cfg000_s cn52xx; - struct cvmx_pciercx_cfg000_s cn52xxp1; - struct cvmx_pciercx_cfg000_s cn56xx; - struct cvmx_pciercx_cfg000_s cn56xxp1; -} cvmx_pciercx_cfg000_t; - - -/** - * cvmx_pcierc#_cfg001 - * - * PCIE_CFG001 = Second 32-bits of PCIE type 1 config space (Command/Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg001_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dpe : 1; /**< Detected Parity Error */ - uint32_t sse : 1; /**< Signaled System Error */ - uint32_t rma : 1; /**< Received Master Abort */ - uint32_t rta : 1; /**< Received Target Abort */ - uint32_t sta : 1; /**< Signaled Target Abort */ - uint32_t devt : 2; /**< DEVSEL Timing - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t mdpe : 1; /**< Master Data Parity Error */ - uint32_t fbb : 1; /**< Fast Back-to-Back Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t reserved_22_22 : 1; - uint32_t m66 : 1; /**< 66 MHz Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t cl : 1; /**< Capabilities List - Indicates presence of an extended capability item. - Hardwired to 1. */ - uint32_t i_stat : 1; /**< INTx Status */ - uint32_t reserved_11_18 : 8; - uint32_t i_dis : 1; /**< INTx Assertion Disable */ - uint32_t fbbe : 1; /**< Fast Back-to-Back Enable - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t see : 1; /**< SERR# Enable */ - uint32_t ids_wcc : 1; /**< IDSEL Stepping/Wait Cycle Control - Not applicable for PCI Express. Must be hardwired to 0 */ - uint32_t per : 1; /**< Parity Error Response */ - uint32_t vps : 1; /**< VGA Palette Snoop - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t mwice : 1; /**< Memory Write and Invalidate - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t scse : 1; /**< Special Cycle Enable - Not applicable for PCI Express. Must be hardwired to 0. */ - uint32_t me : 1; /**< Bus Master Enable */ - uint32_t msae : 1; /**< Memory Space Enable */ - uint32_t isae : 1; /**< I/O Space Enable */ -#else - uint32_t isae : 1; - uint32_t msae : 1; - uint32_t me : 1; - uint32_t scse : 1; - uint32_t mwice : 1; - uint32_t vps : 1; - uint32_t per : 1; - uint32_t ids_wcc : 1; - uint32_t see : 1; - uint32_t fbbe : 1; - uint32_t i_dis : 1; - uint32_t reserved_11_18 : 8; - uint32_t i_stat : 1; - uint32_t cl : 1; - uint32_t m66 : 1; - uint32_t reserved_22_22 : 1; - uint32_t fbb : 1; - uint32_t mdpe : 1; - uint32_t devt : 2; - uint32_t sta : 1; - uint32_t rta : 1; - uint32_t rma : 1; - uint32_t sse : 1; - uint32_t dpe : 1; -#endif - } s; - struct cvmx_pciercx_cfg001_s cn52xx; - struct cvmx_pciercx_cfg001_s cn52xxp1; - struct cvmx_pciercx_cfg001_s cn56xx; - struct cvmx_pciercx_cfg001_s cn56xxp1; -} cvmx_pciercx_cfg001_t; - - -/** - * cvmx_pcierc#_cfg002 - * - * PCIE_CFG002 = Third 32-bits of PCIE type 1 config space (Revision ID/Class Code Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg002_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t bcc : 8; /**< Base Class Code, writable through the DBI - However, the application must not change this field. */ - uint32_t sc : 8; /**< Subclass Code, writable through the DBI - However, the application must not change this field. */ - uint32_t pi : 8; /**< Programming Interface, writable through the DBI - However, the application must not change this field. */ - uint32_t rid : 8; /**< Revision ID, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t rid : 8; - uint32_t pi : 8; - uint32_t sc : 8; - uint32_t bcc : 8; -#endif - } s; - struct cvmx_pciercx_cfg002_s cn52xx; - struct cvmx_pciercx_cfg002_s cn52xxp1; - struct cvmx_pciercx_cfg002_s cn56xx; - struct cvmx_pciercx_cfg002_s cn56xxp1; -} cvmx_pciercx_cfg002_t; - - -/** - * cvmx_pcierc#_cfg003 - * - * PCIE_CFG003 = Fourth 32-bits of PCIE type 1 config space (Cache Line Size/Master Latency Timer/Header Type Register/BIST Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg003_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t bist : 8; /**< The BIST register functions are not supported. - All 8 bits of the BIST register are hardwired to 0. */ - uint32_t mfd : 1; /**< Multi Function Device - The Multi Function Device bit is writable through the DBI. - However, this is a single function device. Therefore, the - application must not write a 1 to this bit. */ - uint32_t chf : 7; /**< Configuration Header Format - Hardwired to 1. */ - uint32_t lt : 8; /**< Master Latency Timer - Not applicable for PCI Express, hardwired to 0. */ - uint32_t cls : 8; /**< Cache Line Size - The Cache Line Size register is RW for legacy compatibility - purposes and is not applicable to PCI Express device - functionality. */ -#else - uint32_t cls : 8; - uint32_t lt : 8; - uint32_t chf : 7; - uint32_t mfd : 1; - uint32_t bist : 8; -#endif - } s; - struct cvmx_pciercx_cfg003_s cn52xx; - struct cvmx_pciercx_cfg003_s cn52xxp1; - struct cvmx_pciercx_cfg003_s cn56xx; - struct cvmx_pciercx_cfg003_s cn56xxp1; -} cvmx_pciercx_cfg003_t; - - -/** - * cvmx_pcierc#_cfg004 - * - * PCIE_CFG004 = Fifth 32-bits of PCIE type 1 config space (Base Address Register 0 - Low) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg004_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg004_s cn52xx; - struct cvmx_pciercx_cfg004_s cn52xxp1; - struct cvmx_pciercx_cfg004_s cn56xx; - struct cvmx_pciercx_cfg004_s cn56xxp1; -} cvmx_pciercx_cfg004_t; - - -/** - * cvmx_pcierc#_cfg005 - * - * PCIE_CFG005 = Sixth 32-bits of PCIE type 1 config space (Base Address Register 0 - High) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg005_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg005_s cn52xx; - struct cvmx_pciercx_cfg005_s cn52xxp1; - struct cvmx_pciercx_cfg005_s cn56xx; - struct cvmx_pciercx_cfg005_s cn56xxp1; -} cvmx_pciercx_cfg005_t; - - -/** - * cvmx_pcierc#_cfg006 - * - * PCIE_CFG006 = Seventh 32-bits of PCIE type 1 config space (Bus Number Registers) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg006_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t slt : 8; /**< Secondary Latency Timer - Not applicable to PCI Express, hardwired to 0x00. */ - uint32_t subbnum : 8; /**< Subordinate Bus Number */ - uint32_t sbnum : 8; /**< Secondary Bus Number */ - uint32_t pbnum : 8; /**< Primary Bus Number */ -#else - uint32_t pbnum : 8; - uint32_t sbnum : 8; - uint32_t subbnum : 8; - uint32_t slt : 8; -#endif - } s; - struct cvmx_pciercx_cfg006_s cn52xx; - struct cvmx_pciercx_cfg006_s cn52xxp1; - struct cvmx_pciercx_cfg006_s cn56xx; - struct cvmx_pciercx_cfg006_s cn56xxp1; -} cvmx_pciercx_cfg006_t; - - -/** - * cvmx_pcierc#_cfg007 - * - * PCIE_CFG007 = Eighth 32-bits of PCIE type 1 config space (IO Base and IO Limit/Secondary Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg007_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dpe : 1; /**< Detected Parity Error */ - uint32_t sse : 1; /**< Signaled System Error */ - uint32_t rma : 1; /**< Received Master Abort */ - uint32_t rta : 1; /**< Received Target Abort */ - uint32_t sta : 1; /**< Signaled Target Abort */ - uint32_t devt : 2; /**< DEVSEL Timing - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t mdpe : 1; /**< Master Data Parity Error */ - uint32_t fbb : 1; /**< Fast Back-to-Back Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t reserved_22_22 : 1; - uint32_t m66 : 1; /**< 66 MHz Capable - Not applicable for PCI Express. Hardwired to 0. */ - uint32_t reserved_16_20 : 5; - uint32_t lio_limi : 4; /**< I/O Space Limit */ - uint32_t reserved_9_11 : 3; - uint32_t io32b : 1; /**< 32-Bit I/O Space */ - uint32_t lio_base : 4; /**< I/O Space Base */ - uint32_t reserved_1_3 : 3; - uint32_t io32a : 1; /**< 32-Bit I/O Space - o 0 = 16-bit I/O addressing - o 1 = 32-bit I/O addressing - This bit is writable through the DBI. When the application - writes to this bit through the DBI, the same value is written - to bit 8 of this register. */ -#else - uint32_t io32a : 1; - uint32_t reserved_1_3 : 3; - uint32_t lio_base : 4; - uint32_t io32b : 1; - uint32_t reserved_9_11 : 3; - uint32_t lio_limi : 4; - uint32_t reserved_16_20 : 5; - uint32_t m66 : 1; - uint32_t reserved_22_22 : 1; - uint32_t fbb : 1; - uint32_t mdpe : 1; - uint32_t devt : 2; - uint32_t sta : 1; - uint32_t rta : 1; - uint32_t rma : 1; - uint32_t sse : 1; - uint32_t dpe : 1; -#endif - } s; - struct cvmx_pciercx_cfg007_s cn52xx; - struct cvmx_pciercx_cfg007_s cn52xxp1; - struct cvmx_pciercx_cfg007_s cn56xx; - struct cvmx_pciercx_cfg007_s cn56xxp1; -} cvmx_pciercx_cfg007_t; - - -/** - * cvmx_pcierc#_cfg008 - * - * PCIE_CFG008 = Ninth 32-bits of PCIE type 1 config space (Memory Base and Memory Limit Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg008_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ml_addr : 12; /**< Memory Limit Address */ - uint32_t reserved_16_19 : 4; - uint32_t mb_addr : 12; /**< Memory Base Address */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t mb_addr : 12; - uint32_t reserved_16_19 : 4; - uint32_t ml_addr : 12; -#endif - } s; - struct cvmx_pciercx_cfg008_s cn52xx; - struct cvmx_pciercx_cfg008_s cn52xxp1; - struct cvmx_pciercx_cfg008_s cn56xx; - struct cvmx_pciercx_cfg008_s cn56xxp1; -} cvmx_pciercx_cfg008_t; - - -/** - * cvmx_pcierc#_cfg009 - * - * PCIE_CFG009 = Tenth 32-bits of PCIE type 1 config space (Prefetchable Memory Base and Limit Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg009_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmem_limit : 12; /**< Upper 12 bits of 32-bit Prefetchable Memory End Address */ - uint32_t reserved_17_19 : 3; - uint32_t mem64b : 1; /**< 64-Bit Memory Addressing - o 0 = 32-bit memory addressing - o 1 = 64-bit memory addressing */ - uint32_t lmem_base : 12; /**< Upper 12 bits of 32-bit Prefetchable Memory Start Address */ - uint32_t reserved_1_3 : 3; - uint32_t mem64a : 1; /**< 64-Bit Memory Addressing - o 0 = 32-bit memory addressing - o 1 = 64-bit memory addressing - This bit is writable through the DBI. When the application - writes to this bit through the DBI, the same value is written - to bit 16 of this register. */ -#else - uint32_t mem64a : 1; - uint32_t reserved_1_3 : 3; - uint32_t lmem_base : 12; - uint32_t mem64b : 1; - uint32_t reserved_17_19 : 3; - uint32_t lmem_limit : 12; -#endif - } s; - struct cvmx_pciercx_cfg009_s cn52xx; - struct cvmx_pciercx_cfg009_s cn52xxp1; - struct cvmx_pciercx_cfg009_s cn56xx; - struct cvmx_pciercx_cfg009_s cn56xxp1; -} cvmx_pciercx_cfg009_t; - - -/** - * cvmx_pcierc#_cfg010 - * - * PCIE_CFG010 = Eleventh 32-bits of PCIE type 1 config space (Prefetchable Base Upper 32 Bits Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg010_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umem_base : 32; /**< Upper 32 Bits of Base Address of Prefetchable Memory Space - Used only when 64-bit prefetchable memory addressing is - enabled. */ -#else - uint32_t umem_base : 32; -#endif - } s; - struct cvmx_pciercx_cfg010_s cn52xx; - struct cvmx_pciercx_cfg010_s cn52xxp1; - struct cvmx_pciercx_cfg010_s cn56xx; - struct cvmx_pciercx_cfg010_s cn56xxp1; -} cvmx_pciercx_cfg010_t; - - -/** - * cvmx_pcierc#_cfg011 - * - * PCIE_CFG011 = Twelfth 32-bits of PCIE type 1 config space (Prefetchable Limit Upper 32 Bits Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg011_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umem_limit : 32; /**< Upper 32 Bits of Limit Address of Prefetchable Memory Space - Used only when 64-bit prefetchable memory addressing is - enabled. */ -#else - uint32_t umem_limit : 32; -#endif - } s; - struct cvmx_pciercx_cfg011_s cn52xx; - struct cvmx_pciercx_cfg011_s cn52xxp1; - struct cvmx_pciercx_cfg011_s cn56xx; - struct cvmx_pciercx_cfg011_s cn56xxp1; -} cvmx_pciercx_cfg011_t; - - -/** - * cvmx_pcierc#_cfg012 - * - * PCIE_CFG012 = Thirteenth 32-bits of PCIE type 1 config space (IO Base and Limit Upper 16 Bits Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg012_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t uio_limit : 16; /**< 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; /**< Upper 16 Bits of I/O Base (if 32-bit I/O decoding is supported - for devices on the secondary side) */ -#else - uint32_t uio_base : 16; - uint32_t uio_limit : 16; -#endif - } s; - struct cvmx_pciercx_cfg012_s cn52xx; - struct cvmx_pciercx_cfg012_s cn52xxp1; - struct cvmx_pciercx_cfg012_s cn56xx; - struct cvmx_pciercx_cfg012_s cn56xxp1; -} cvmx_pciercx_cfg012_t; - - -/** - * cvmx_pcierc#_cfg013 - * - * PCIE_CFG013 = Fourteenth 32-bits of PCIE type 1 config space (Capability Pointer Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg013_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_8_31 : 24; - uint32_t cp : 8; /**< First Capability Pointer. - Points to Power Management Capability structure by - default, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t cp : 8; - uint32_t reserved_8_31 : 24; -#endif - } s; - struct cvmx_pciercx_cfg013_s cn52xx; - struct cvmx_pciercx_cfg013_s cn52xxp1; - struct cvmx_pciercx_cfg013_s cn56xx; - struct cvmx_pciercx_cfg013_s cn56xxp1; -} cvmx_pciercx_cfg013_t; - - -/** - * cvmx_pcierc#_cfg014 - * - * PCIE_CFG014 = Fifteenth 32-bits of PCIE type 1 config space (Expansion ROM Base Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg014_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg014_s cn52xx; - struct cvmx_pciercx_cfg014_s cn52xxp1; - struct cvmx_pciercx_cfg014_s cn56xx; - struct cvmx_pciercx_cfg014_s cn56xxp1; -} cvmx_pciercx_cfg014_t; - - -/** - * cvmx_pcierc#_cfg015 - * - * PCIE_CFG015 = Sixteenth 32-bits of PCIE type 1 config space (Interrupt Line Register/Interrupt Pin/Bridge Control Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg015_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_28_31 : 4; - uint32_t dtsees : 1; /**< Discard Timer SERR Enable Status - Not applicable to PCI Express, hardwired to 0. */ - uint32_t dts : 1; /**< Discard Timer Status - Not applicable to PCI Express, hardwired to 0. */ - uint32_t sdt : 1; /**< Secondary Discard Timer - Not applicable to PCI Express, hardwired to 0. */ - uint32_t pdt : 1; /**< Primary Discard Timer - Not applicable to PCI Express, hardwired to 0. */ - uint32_t fbbe : 1; /**< Fast Back-to-Back Transactions Enable - Not applicable to PCI Express, hardwired to 0. */ - uint32_t sbrst : 1; /**< Secondary Bus Reset - Hot reset. Causes TS1s with the hot reset bit to be sent to - the link partner. When set, SW should wait 2ms 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; /**< Master Abort Mode - Not applicable to PCI Express, hardwired to 0. */ - uint32_t vga16d : 1; /**< VGA 16-Bit Decode */ - uint32_t vgae : 1; /**< VGA Enable */ - uint32_t isae : 1; /**< ISA Enable */ - uint32_t see : 1; /**< SERR Enable */ - uint32_t pere : 1; /**< Parity Error Response Enable */ - uint32_t inta : 8; /**< Interrupt Pin - Identifies the legacy interrupt Message that the device - (or device function) uses. - The Interrupt Pin register is writable through the DBI. - In a single-function configuration, only INTA is used. - Therefore, the application must not change this field. */ - uint32_t il : 8; /**< Interrupt Line */ -#else - uint32_t il : 8; - uint32_t inta : 8; - uint32_t pere : 1; - uint32_t see : 1; - uint32_t isae : 1; - uint32_t vgae : 1; - uint32_t vga16d : 1; - uint32_t mam : 1; - uint32_t sbrst : 1; - uint32_t fbbe : 1; - uint32_t pdt : 1; - uint32_t sdt : 1; - uint32_t dts : 1; - uint32_t dtsees : 1; - uint32_t reserved_28_31 : 4; -#endif - } s; - struct cvmx_pciercx_cfg015_s cn52xx; - struct cvmx_pciercx_cfg015_s cn52xxp1; - struct cvmx_pciercx_cfg015_s cn56xx; - struct cvmx_pciercx_cfg015_s cn56xxp1; -} cvmx_pciercx_cfg015_t; - - -/** - * cvmx_pcierc#_cfg016 - * - * PCIE_CFG016 = Seventeenth 32-bits of PCIE type 1 config space - * (Power Management Capability ID/ - * Power Management Next Item Pointer/ - * Power Management Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg016_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmes : 5; /**< PME_Support - A value of 0 for any bit indicates that the - device (or function) is not capable of generating PME Messages - while in that power state: - o Bit 11: If set, PME Messages can be generated from D0 - o Bit 12: If set, PME Messages can be generated from D1 - o Bit 13: If set, PME Messages can be generated from D2 - o Bit 14: If set, PME Messages can be generated from D3hot - o Bit 15: If set, PME Messages can be generated from D3cold - The PME_Support field is writable through the DBI. - However, the application must not change this field. */ - uint32_t d2s : 1; /**< D2 Support, writable through the DBI - However, the application must not change this field. */ - uint32_t d1s : 1; /**< D1 Support, writable through the DBI - However, the application must not change this field. */ - uint32_t auxc : 3; /**< AUX Current, writable through the DBI - However, the application must not change this field. */ - uint32_t dsi : 1; /**< Device Specific Initialization (DSI), writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t pme_clock : 1; /**< PME Clock, hardwired to 0 */ - uint32_t pmsv : 3; /**< Power Management Specification Version, writable through the DBI - However, the application must not change this field. */ - uint32_t ncp : 8; /**< Next Capability Pointer - Points to the MSI capabilities by default, writable - through the DBI. */ - uint32_t pmcid : 8; /**< Power Management Capability ID */ -#else - uint32_t pmcid : 8; - uint32_t ncp : 8; - uint32_t pmsv : 3; - uint32_t pme_clock : 1; - uint32_t reserved_20_20 : 1; - uint32_t dsi : 1; - uint32_t auxc : 3; - uint32_t d1s : 1; - uint32_t d2s : 1; - uint32_t pmes : 5; -#endif - } s; - struct cvmx_pciercx_cfg016_s cn52xx; - struct cvmx_pciercx_cfg016_s cn52xxp1; - struct cvmx_pciercx_cfg016_s cn56xx; - struct cvmx_pciercx_cfg016_s cn56xxp1; -} cvmx_pciercx_cfg016_t; - - -/** - * cvmx_pcierc#_cfg017 - * - * PCIE_CFG017 = Eighteenth 32-bits of PCIE type 1 config space (Power Management Control and Status Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg017_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pmdia : 8; /**< Data register for additional information (not supported) */ - uint32_t bpccee : 1; /**< Bus Power/Clock Control Enable, hardwired to 0 */ - uint32_t bd3h : 1; /**< B2/B3 Support, hardwired to 0 */ - uint32_t reserved_16_21 : 6; - uint32_t pmess : 1; /**< PME Status - Indicates if a previously enabled PME event occurred or not. */ - uint32_t pmedsia : 2; /**< Data Scale (not supported) */ - uint32_t pmds : 4; /**< Data Select (not supported) */ - uint32_t pmeens : 1; /**< 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; /**< No Soft Reset, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_2_2 : 1; - uint32_t ps : 2; /**< Power State - Controls the device power state: - o 00b: D0 - o 01b: D1 - o 10b: D2 - o 11b: D3 - The written value is ignored if the specific state is - not supported. */ -#else - uint32_t ps : 2; - uint32_t reserved_2_2 : 1; - uint32_t nsr : 1; - uint32_t reserved_4_7 : 4; - uint32_t pmeens : 1; - uint32_t pmds : 4; - uint32_t pmedsia : 2; - uint32_t pmess : 1; - uint32_t reserved_16_21 : 6; - uint32_t bd3h : 1; - uint32_t bpccee : 1; - uint32_t pmdia : 8; -#endif - } s; - struct cvmx_pciercx_cfg017_s cn52xx; - struct cvmx_pciercx_cfg017_s cn52xxp1; - struct cvmx_pciercx_cfg017_s cn56xx; - struct cvmx_pciercx_cfg017_s cn56xxp1; -} cvmx_pciercx_cfg017_t; - - -/** - * cvmx_pcierc#_cfg020 - * - * PCIE_CFG020 = Twenty-first 32-bits of PCIE type 1 config space - * (MSI Capability ID/ - * MSI Next Item Pointer/ - * MSI Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg020_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t m64 : 1; /**< 64-bit Address Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t mme : 3; /**< 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 value. */ - uint32_t mmc : 3; /**< Multiple Message Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t msien : 1; /**< 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 - will be commonly used in RC mode.) */ - uint32_t ncp : 8; /**< Next Capability Pointer - Points to PCI Express Capabilities by default, - writable through the DBI. - However, the application must not change this field. */ - uint32_t msicid : 8; /**< MSI Capability ID */ -#else - uint32_t msicid : 8; - uint32_t ncp : 8; - uint32_t msien : 1; - uint32_t mmc : 3; - uint32_t mme : 3; - uint32_t m64 : 1; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pciercx_cfg020_s cn52xx; - struct cvmx_pciercx_cfg020_s cn52xxp1; - struct cvmx_pciercx_cfg020_s cn56xx; - struct cvmx_pciercx_cfg020_s cn56xxp1; -} cvmx_pciercx_cfg020_t; - - -/** - * cvmx_pcierc#_cfg021 - * - * PCIE_CFG021 = Twenty-second 32-bits of PCIE type 1 config space (MSI Lower 32 Bits Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg021_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lmsi : 30; /**< Lower 32-bit Address */ - uint32_t reserved_0_1 : 2; -#else - uint32_t reserved_0_1 : 2; - uint32_t lmsi : 30; -#endif - } s; - struct cvmx_pciercx_cfg021_s cn52xx; - struct cvmx_pciercx_cfg021_s cn52xxp1; - struct cvmx_pciercx_cfg021_s cn56xx; - struct cvmx_pciercx_cfg021_s cn56xxp1; -} cvmx_pciercx_cfg021_t; - - -/** - * cvmx_pcierc#_cfg022 - * - * PCIE_CFG022 = Twenty-third 32-bits of PCIE type 1 config space (MSI Upper 32 bits Address Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg022_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t umsi : 32; /**< Upper 32-bit Address */ -#else - uint32_t umsi : 32; -#endif - } s; - struct cvmx_pciercx_cfg022_s cn52xx; - struct cvmx_pciercx_cfg022_s cn52xxp1; - struct cvmx_pciercx_cfg022_s cn56xx; - struct cvmx_pciercx_cfg022_s cn56xxp1; -} cvmx_pciercx_cfg022_t; - - -/** - * cvmx_pcierc#_cfg023 - * - * PCIE_CFG023 = Twenty-fourth 32-bits of PCIE type 1 config space (MSI Data Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg023_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t msimd : 16; /**< MSI Data - Pattern assigned by system software, bits [4:0] are Or-ed with - MSI_VECTOR to generate 32 MSI Messages per function. */ -#else - uint32_t msimd : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_pciercx_cfg023_s cn52xx; - struct cvmx_pciercx_cfg023_s cn52xxp1; - struct cvmx_pciercx_cfg023_s cn56xx; - struct cvmx_pciercx_cfg023_s cn56xxp1; -} cvmx_pciercx_cfg023_t; - - -/** - * cvmx_pcierc#_cfg028 - * - * PCIE_CFG028 = Twenty-ninth 32-bits of PCIE type 1 config space - * (PCI Express Capabilities List Register/ - * PCI Express Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg028_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t imn : 5; /**< Interrupt Message Number - Updated by hardware, writable through the DBI. - However, the application must not change this field. */ - uint32_t si : 1; /**< Slot Implemented - This bit is writable through the DBI. However, it must 0 for an - Endpoint device. Therefore, the application must not write a - 1 to this bit. */ - uint32_t dpt : 4; /**< Device Port Type */ - uint32_t pciecv : 4; /**< PCI Express Capability Version */ - uint32_t ncp : 8; /**< Next Capability Pointer - writable through the DBI. - However, the application must not change this field. */ - uint32_t pcieid : 8; /**< PCIE Capability ID */ -#else - uint32_t pcieid : 8; - uint32_t ncp : 8; - uint32_t pciecv : 4; - uint32_t dpt : 4; - uint32_t si : 1; - uint32_t imn : 5; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pciercx_cfg028_s cn52xx; - struct cvmx_pciercx_cfg028_s cn52xxp1; - struct cvmx_pciercx_cfg028_s cn56xx; - struct cvmx_pciercx_cfg028_s cn56xxp1; -} cvmx_pciercx_cfg028_t; - - -/** - * cvmx_pcierc#_cfg029 - * - * PCIE_CFG029 = Thirtieth 32-bits of PCIE type 1 config space (Device Capabilities Register) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg029_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_28_31 : 4; - uint32_t cspls : 2; /**< Captured Slot Power Limit Scale - Not applicable for RC port, upstream port only. */ - uint32_t csplv : 8; /**< Captured Slot Power Limit Value - Not applicable for RC port, upstream port only. */ - uint32_t reserved_16_17 : 2; - uint32_t rber : 1; /**< Role-Based Error Reporting, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_12_14 : 3; - uint32_t el1al : 3; /**< Endpoint L1 Acceptable Latency, writable through the DBI - Must be 0x0 for non-endpoint devices. */ - uint32_t el0al : 3; /**< Endpoint L0s Acceptable Latency, writable through the DBI - Must be 0x0 for non-endpoint devices. */ - uint32_t etfs : 1; /**< Extended Tag Field Supported - This bit is writable through the DBI. However, the application - must not write a 1 to this bit. */ - uint32_t pfs : 2; /**< Phantom Function Supported - This field is writable through the DBI. However, Phantom - Function is not supported. Therefore, the application must not - write any value other than 0x0 to this field. */ - uint32_t mpss : 3; /**< Max_Payload_Size Supported, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t mpss : 3; - uint32_t pfs : 2; - uint32_t etfs : 1; - uint32_t el0al : 3; - uint32_t el1al : 3; - uint32_t reserved_12_14 : 3; - uint32_t rber : 1; - uint32_t reserved_16_17 : 2; - uint32_t csplv : 8; - uint32_t cspls : 2; - uint32_t reserved_28_31 : 4; -#endif - } s; - struct cvmx_pciercx_cfg029_s cn52xx; - struct cvmx_pciercx_cfg029_s cn52xxp1; - struct cvmx_pciercx_cfg029_s cn56xx; - struct cvmx_pciercx_cfg029_s cn56xxp1; -} cvmx_pciercx_cfg029_t; - - -/** - * cvmx_pcierc#_cfg030 - * - * PCIE_CFG030 = Thirty-first 32-bits of PCIE type 1 config space - * (Device Control Register/Device Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg030_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_22_31 : 10; - uint32_t tp : 1; /**< Transaction Pending - Set to 1 when Non-Posted Requests are not yet completed - and clear when they are completed. */ - uint32_t ap_d : 1; /**< Aux Power Detected - Set to 1 if Aux power detected. */ - uint32_t ur_d : 1; /**< Unsupported Request Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - UR_D occurs when we receive something we don't support. - 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; /**< Fatal Error Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - FE_D is set if receive any of the errors in PCIE_CFG066 that - has a severity set to Fatal. Malformed TLP's generally fit - into this category. */ - uint32_t nfe_d : 1; /**< Non-Fatal Error detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - NFE_D is set if we receive any of the errors in PCIE_CFG066 - that has a severity set to Nonfatal and does NOT meet Advisory - Nonfatal criteria (PCIe 1.1 spec, Section 6.2.3.2.4), which - most poisoned TLP's should be. */ - uint32_t ce_d : 1; /**< Correctable Error Detected - Errors are logged in this register regardless of whether - error reporting is enabled in the Device Control register. - CE_D is set if we receive any of the errors in PCIE_CFG068 - for example a Replay Timer Timeout. Also, it can be set if - we get any of the errors in PCIE_CFG066 that has a severity - set to Nonfatal and meets the Advisory Nonfatal criteria - (PCIe 1.1 spec, Section 6.2.3.2.4), which most ECRC errors - should be. */ - uint32_t reserved_15_15 : 1; - uint32_t mrrs : 3; /**< Max Read Request Size - 0 = 128B - 1 = 256B - 2 = 512B - 3 = 1024B - 4 = 2048B - 5 = 4096B - Note: NPEI_CTL_STATUS2[MRRS] also must be set properly. - NPEI_CTL_STATUS2[MRRS] must not exceed the - desired max read request size. */ - uint32_t ns_en : 1; /**< Enable No Snoop */ - uint32_t ap_en : 1; /**< AUX Power PM Enable */ - uint32_t pf_en : 1; /**< Phantom Function Enable - This bit should never be set - OCTEON requests never use - phantom functions. */ - uint32_t etf_en : 1; /**< Extended Tag Field Enable - This bit should never be set - OCTEON requests never use - extended tags. */ - uint32_t mps : 3; /**< Max Payload Size - Legal values: - 0 = 128B - 1 = 256B - Larger sizes not supported. - Note: Both PCI Express Ports must be set to the same value - for Peer-to-Peer to function properly. - Note: NPEI_CTL_STATUS2[MPS] must also be set to the same - value for proper functionality. */ - uint32_t ro_en : 1; /**< Enable Relaxed Ordering */ - uint32_t ur_en : 1; /**< Unsupported Request Reporting Enable */ - uint32_t fe_en : 1; /**< Fatal Error Reporting Enable */ - uint32_t nfe_en : 1; /**< Non-Fatal Error Reporting Enable */ - uint32_t ce_en : 1; /**< Correctable Error Reporting Enable */ -#else - uint32_t ce_en : 1; - uint32_t nfe_en : 1; - uint32_t fe_en : 1; - uint32_t ur_en : 1; - uint32_t ro_en : 1; - uint32_t mps : 3; - uint32_t etf_en : 1; - uint32_t pf_en : 1; - uint32_t ap_en : 1; - uint32_t ns_en : 1; - uint32_t mrrs : 3; - uint32_t reserved_15_15 : 1; - uint32_t ce_d : 1; - uint32_t nfe_d : 1; - uint32_t fe_d : 1; - uint32_t ur_d : 1; - uint32_t ap_d : 1; - uint32_t tp : 1; - uint32_t reserved_22_31 : 10; -#endif - } s; - struct cvmx_pciercx_cfg030_s cn52xx; - struct cvmx_pciercx_cfg030_s cn52xxp1; - struct cvmx_pciercx_cfg030_s cn56xx; - struct cvmx_pciercx_cfg030_s cn56xxp1; -} cvmx_pciercx_cfg030_t; - - -/** - * cvmx_pcierc#_cfg031 - * - * PCIE_CFG031 = Thirty-second 32-bits of PCIE type 1 config space - * (Link Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg031_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t pnum : 8; /**< Port Number, writable through the DBI - However, the application must not change this field. */ - uint32_t reserved_22_23 : 2; - uint32_t lbnc : 1; /**< Link Bandwith Notification Capability */ - uint32_t dllarc : 1; /**< Data Link Layer Active Reporting Capable - Set to 1 for Root Complex devices and 0 for Endpoint devices. */ - uint32_t sderc : 1; /**< Surprise Down Error Reporting Capable - Not supported, hardwired to 0x0. */ - uint32_t cpm : 1; /**< Clock Power Management - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t l1el : 3; /**< L1 Exit Latency - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t l0el : 3; /**< L0s Exit Latency - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t aslpms : 2; /**< Active State Link PM Support - The default value is the value you specify during hardware - configuration, writable through the DBI. - However, the application must not change this field. */ - uint32_t mlw : 6; /**< Maximum Link Width - The default value is the value you specify during hardware - configuration (x1, x4, x8, or x16), writable through the DBI. - The SW needs to set this to 0x8 or 0x4 depending on the max - number of lanes (QLM_CFG == 0 set to 0x8 else 0x4). */ - uint32_t mls : 4; /**< Maximum Link Speed - Default value is 0x1 for 2.5 Gbps Link. - This field is writable through the DBI. However, 0x1 is the - only supported value. Therefore, the application must not write - any value other than 0x1 to this field. */ -#else - uint32_t mls : 4; - uint32_t mlw : 6; - uint32_t aslpms : 2; - uint32_t l0el : 3; - uint32_t l1el : 3; - uint32_t cpm : 1; - uint32_t sderc : 1; - uint32_t dllarc : 1; - uint32_t lbnc : 1; - uint32_t reserved_22_23 : 2; - uint32_t pnum : 8; -#endif - } s; - struct cvmx_pciercx_cfg031_s cn52xx; - struct cvmx_pciercx_cfg031_s cn52xxp1; - struct cvmx_pciercx_cfg031_s cn56xx; - struct cvmx_pciercx_cfg031_s cn56xxp1; -} cvmx_pciercx_cfg031_t; - - -/** - * cvmx_pcierc#_cfg032 - * - * PCIE_CFG032 = Thirty-third 32-bits of PCIE type 1 config space - * (Link Control Register/Link Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg032_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lab : 1; /**< Link Autonomous Bandwidth Status */ - uint32_t lbm : 1; /**< Link Bandwidth Management Status */ - uint32_t dlla : 1; /**< Data Link Layer Active */ - uint32_t scc : 1; /**< 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 the DBI. - However, the application must not change this field. */ - uint32_t lt : 1; /**< Link Training */ - uint32_t reserved_26_26 : 1; - uint32_t nlw : 6; /**< Negotiated Link Width - Set automatically by hardware after Link initialization. */ - uint32_t ls : 4; /**< Link Speed - The negotiated Link speed: 2.5 Gbps */ - uint32_t reserved_12_15 : 4; - uint32_t lab_int_enb : 1; /**< Link Autonomous Bandwidth Interrupt Enable - This interrupt is for Gen2 and is not supported. This bit should - always be written to zero. */ - uint32_t lbm_int_enb : 1; /**< Link Bandwidth Management Interrupt Enable - This interrupt is for Gen2 and is not supported. This bit should - always be written to zero. */ - uint32_t hawd : 1; /**< Hardware Autonomous Width Disable - (Not Supported) */ - uint32_t ecpm : 1; /**< Enable Clock Power Management - Hardwired to 0 if Clock Power Management is disabled in - the Link Capabilities register. */ - uint32_t es : 1; /**< Extended Synch */ - uint32_t ccc : 1; /**< Common Clock Configuration */ - uint32_t rl : 1; /**< Retrain Link */ - uint32_t ld : 1; /**< Link Disable */ - uint32_t rcb : 1; /**< Read Completion Boundary (RCB), writable through the DBI - However, the application must not change this field - because an RCB of 64 bytes is not supported. */ - uint32_t reserved_2_2 : 1; - uint32_t aslpc : 2; /**< Active State Link PM Control */ -#else - uint32_t aslpc : 2; - uint32_t reserved_2_2 : 1; - uint32_t rcb : 1; - uint32_t ld : 1; - uint32_t rl : 1; - uint32_t ccc : 1; - uint32_t es : 1; - uint32_t ecpm : 1; - uint32_t hawd : 1; - uint32_t lbm_int_enb : 1; - uint32_t lab_int_enb : 1; - uint32_t reserved_12_15 : 4; - uint32_t ls : 4; - uint32_t nlw : 6; - uint32_t reserved_26_26 : 1; - uint32_t lt : 1; - uint32_t scc : 1; - uint32_t dlla : 1; - uint32_t lbm : 1; - uint32_t lab : 1; -#endif - } s; - struct cvmx_pciercx_cfg032_s cn52xx; - struct cvmx_pciercx_cfg032_s cn52xxp1; - struct cvmx_pciercx_cfg032_s cn56xx; - struct cvmx_pciercx_cfg032_s cn56xxp1; -} cvmx_pciercx_cfg032_t; - - -/** - * cvmx_pcierc#_cfg033 - * - * PCIE_CFG033 = Thirty-fourth 32-bits of PCIE type 1 config space - * (Slot Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg033_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ps_num : 13; /**< Physical Slot Number, writable through the DBI - However, the application must not change this field. */ - uint32_t nccs : 1; /**< No Command Complete Support, writable through the DBI - However, the application must not change this field. */ - uint32_t emip : 1; /**< Electromechanical Interlock Present, writable through the DBI - However, the application must not change this field. */ - uint32_t sp_ls : 2; /**< Slot Power Limit Scale, writable through the DBI. */ - uint32_t sp_lv : 8; /**< Slot Power Limit Value, writable through the DBI. */ - uint32_t hp_c : 1; /**< Hot-Plug Capable, writable through the DBI - However, the application must not change this field. */ - uint32_t hp_s : 1; /**< Hot-Plug Surprise, writable through the DBI - However, the application must not change this field. */ - uint32_t pip : 1; /**< Power Indicator Present, writable through the DBI - However, the application must not change this field. */ - uint32_t aip : 1; /**< Attention Indicator Present, writable through the DBI - However, the application must not change this field. */ - uint32_t mrlsp : 1; /**< MRL Sensor Present, writable through the DBI - However, the application must not change this field. */ - uint32_t pcp : 1; /**< Power Controller Present, writable through the DBI - However, the application must not change this field. */ - uint32_t abp : 1; /**< Attention Button Present, writable through the DBI - However, the application must not change this field. */ -#else - uint32_t abp : 1; - uint32_t pcp : 1; - uint32_t mrlsp : 1; - uint32_t aip : 1; - uint32_t pip : 1; - uint32_t hp_s : 1; - uint32_t hp_c : 1; - uint32_t sp_lv : 8; - uint32_t sp_ls : 2; - uint32_t emip : 1; - uint32_t nccs : 1; - uint32_t ps_num : 13; -#endif - } s; - struct cvmx_pciercx_cfg033_s cn52xx; - struct cvmx_pciercx_cfg033_s cn52xxp1; - struct cvmx_pciercx_cfg033_s cn56xx; - struct cvmx_pciercx_cfg033_s cn56xxp1; -} cvmx_pciercx_cfg033_t; - - -/** - * cvmx_pcierc#_cfg034 - * - * PCIE_CFG034 = Thirty-fifth 32-bits of PCIE type 1 config space - * (Slot Control Register/Slot Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg034_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_25_31 : 7; - uint32_t dlls_c : 1; /**< Data Link Layer State Changed */ - uint32_t emis : 1; /**< Electromechanical Interlock Status */ - uint32_t pds : 1; /**< Presence Detect State */ - uint32_t mrlss : 1; /**< MRL Sensor State */ - uint32_t ccint_d : 1; /**< Command Completed */ - uint32_t pd_c : 1; /**< Presence Detect Changed */ - uint32_t mrls_c : 1; /**< MRL Sensor Changed */ - uint32_t pf_d : 1; /**< Power Fault Detected */ - uint32_t abp_d : 1; /**< Attention Button Pressed */ - uint32_t reserved_13_15 : 3; - uint32_t dlls_en : 1; /**< Data Link Layer State Changed Enable */ - uint32_t emic : 1; /**< Electromechanical Interlock Control */ - uint32_t pcc : 1; /**< Power Controller Control */ - uint32_t pic : 2; /**< Power Indicator Control */ - uint32_t aic : 2; /**< Attention Indicator Control */ - uint32_t hpint_en : 1; /**< Hot-Plug Interrupt Enable */ - uint32_t ccint_en : 1; /**< Command Completed Interrupt Enable */ - uint32_t pd_en : 1; /**< Presence Detect Changed Enable */ - uint32_t mrls_en : 1; /**< MRL Sensor Changed Enable */ - uint32_t pf_en : 1; /**< Power Fault Detected Enable */ - uint32_t abp_en : 1; /**< Attention Button Pressed Enable */ -#else - uint32_t abp_en : 1; - uint32_t pf_en : 1; - uint32_t mrls_en : 1; - uint32_t pd_en : 1; - uint32_t ccint_en : 1; - uint32_t hpint_en : 1; - uint32_t aic : 2; - uint32_t pic : 2; - uint32_t pcc : 1; - uint32_t emic : 1; - uint32_t dlls_en : 1; - uint32_t reserved_13_15 : 3; - uint32_t abp_d : 1; - uint32_t pf_d : 1; - uint32_t mrls_c : 1; - uint32_t pd_c : 1; - uint32_t ccint_d : 1; - uint32_t mrlss : 1; - uint32_t pds : 1; - uint32_t emis : 1; - uint32_t dlls_c : 1; - uint32_t reserved_25_31 : 7; -#endif - } s; - struct cvmx_pciercx_cfg034_s cn52xx; - struct cvmx_pciercx_cfg034_s cn52xxp1; - struct cvmx_pciercx_cfg034_s cn56xx; - struct cvmx_pciercx_cfg034_s cn56xxp1; -} cvmx_pciercx_cfg034_t; - - -/** - * cvmx_pcierc#_cfg035 - * - * PCIE_CFG035 = Thirty-sixth 32-bits of PCIE type 1 config space - * (Root Control Register/Root Capabilities Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg035_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_17_31 : 15; - uint32_t crssv : 1; /**< CRS Software Visibility - Not supported, hardwired to 0x0. */ - uint32_t reserved_5_15 : 11; - uint32_t crssve : 1; /**< CRS Software Visibility Enable - Not supported, hardwired to 0x0. */ - uint32_t pmeie : 1; /**< PME Interrupt Enable */ - uint32_t sefee : 1; /**< System Error on Fatal Error Enable */ - uint32_t senfee : 1; /**< System Error on Non-fatal Error Enable */ - uint32_t secee : 1; /**< System Error on Correctable Error Enable */ -#else - uint32_t secee : 1; - uint32_t senfee : 1; - uint32_t sefee : 1; - uint32_t pmeie : 1; - uint32_t crssve : 1; - uint32_t reserved_5_15 : 11; - uint32_t crssv : 1; - uint32_t reserved_17_31 : 15; -#endif - } s; - struct cvmx_pciercx_cfg035_s cn52xx; - struct cvmx_pciercx_cfg035_s cn52xxp1; - struct cvmx_pciercx_cfg035_s cn56xx; - struct cvmx_pciercx_cfg035_s cn56xxp1; -} cvmx_pciercx_cfg035_t; - - -/** - * cvmx_pcierc#_cfg036 - * - * PCIE_CFG036 = Thirty-seventh 32-bits of PCIE type 1 config space - * (Root Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg036_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_18_31 : 14; - uint32_t pme_pend : 1; /**< PME Pending */ - uint32_t pme_stat : 1; /**< PME Status */ - uint32_t pme_rid : 16; /**< PME Requester ID */ -#else - uint32_t pme_rid : 16; - uint32_t pme_stat : 1; - uint32_t pme_pend : 1; - uint32_t reserved_18_31 : 14; -#endif - } s; - struct cvmx_pciercx_cfg036_s cn52xx; - struct cvmx_pciercx_cfg036_s cn52xxp1; - struct cvmx_pciercx_cfg036_s cn56xx; - struct cvmx_pciercx_cfg036_s cn56xxp1; -} cvmx_pciercx_cfg036_t; - - -/** - * cvmx_pcierc#_cfg037 - * - * PCIE_CFG037 = Thirty-eighth 32-bits of PCIE type 1 config space - * (Device Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg037_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t ctds : 1; /**< Completion Timeout Disable Supported */ - uint32_t ctrs : 4; /**< Completion Timeout Ranges Supported - Value of 0 indicates that Completion Timeout Programming - is not supported. - Completion timeout is 16.7ms. */ -#else - uint32_t ctrs : 4; - uint32_t ctds : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_pciercx_cfg037_s cn52xx; - struct cvmx_pciercx_cfg037_s cn52xxp1; - struct cvmx_pciercx_cfg037_s cn56xx; - struct cvmx_pciercx_cfg037_s cn56xxp1; -} cvmx_pciercx_cfg037_t; - - -/** - * cvmx_pcierc#_cfg038 - * - * PCIE_CFG038 = Thirty-ninth 32-bits of PCIE type 1 config space - * (Device Control 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg038_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t ctd : 1; /**< Completion Timeout Disable */ - uint32_t ctv : 4; /**< Completion Timeout Value - Completion Timeout Programming is not supported - Completion timeout is 16.7ms. */ -#else - uint32_t ctv : 4; - uint32_t ctd : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_pciercx_cfg038_s cn52xx; - struct cvmx_pciercx_cfg038_s cn52xxp1; - struct cvmx_pciercx_cfg038_s cn56xx; - struct cvmx_pciercx_cfg038_s cn56xxp1; -} cvmx_pciercx_cfg038_t; - - -/** - * cvmx_pcierc#_cfg039 - * - * PCIE_CFG039 = Fourtieth 32-bits of PCIE type 1 config space - * (Link Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg039_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg039_s cn52xx; - struct cvmx_pciercx_cfg039_s cn52xxp1; - struct cvmx_pciercx_cfg039_s cn56xx; - struct cvmx_pciercx_cfg039_s cn56xxp1; -} cvmx_pciercx_cfg039_t; - - -/** - * cvmx_pcierc#_cfg040 - * - * PCIE_CFG040 = Fourty-first 32-bits of PCIE type 1 config space - * (Link Control 2 Register/Link Status 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg040_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg040_s cn52xx; - struct cvmx_pciercx_cfg040_s cn52xxp1; - struct cvmx_pciercx_cfg040_s cn56xx; - struct cvmx_pciercx_cfg040_s cn56xxp1; -} cvmx_pciercx_cfg040_t; - - -/** - * cvmx_pcierc#_cfg041 - * - * PCIE_CFG041 = Fourty-second 32-bits of PCIE type 1 config space - * (Slot Capabilities 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg041_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg041_s cn52xx; - struct cvmx_pciercx_cfg041_s cn52xxp1; - struct cvmx_pciercx_cfg041_s cn56xx; - struct cvmx_pciercx_cfg041_s cn56xxp1; -} cvmx_pciercx_cfg041_t; - - -/** - * cvmx_pcierc#_cfg042 - * - * PCIE_CFG042 = Fourty-third 32-bits of PCIE type 1 config space - * (Slot Control 2 Register/Slot Status 2 Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg042_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_0_31 : 32; -#else - uint32_t reserved_0_31 : 32; -#endif - } s; - struct cvmx_pciercx_cfg042_s cn52xx; - struct cvmx_pciercx_cfg042_s cn52xxp1; - struct cvmx_pciercx_cfg042_s cn56xx; - struct cvmx_pciercx_cfg042_s cn56xxp1; -} cvmx_pciercx_cfg042_t; - - -/** - * cvmx_pcierc#_cfg064 - * - * PCIE_CFG064 = Sixty-fifth 32-bits of PCIE type 1 config space - * (PCI Express Enhanced Capability Header) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg064_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t nco : 12; /**< Next Capability Offset */ - uint32_t cv : 4; /**< Capability Version */ - uint32_t pcieec : 16; /**< PCIE Express Extended Capability */ -#else - uint32_t pcieec : 16; - uint32_t cv : 4; - uint32_t nco : 12; -#endif - } s; - struct cvmx_pciercx_cfg064_s cn52xx; - struct cvmx_pciercx_cfg064_s cn52xxp1; - struct cvmx_pciercx_cfg064_s cn56xx; - struct cvmx_pciercx_cfg064_s cn56xxp1; -} cvmx_pciercx_cfg064_t; - - -/** - * cvmx_pcierc#_cfg065 - * - * PCIE_CFG065 = Sixty-sixth 32-bits of PCIE type 1 config space - * (Uncorrectable Error Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg065_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t ures : 1; /**< Unsupported Request Error Status */ - uint32_t ecrces : 1; /**< ECRC Error Status */ - uint32_t mtlps : 1; /**< Malformed TLP Status */ - uint32_t ros : 1; /**< Receiver Overflow Status */ - uint32_t ucs : 1; /**< Unexpected Completion Status */ - uint32_t cas : 1; /**< Completer Abort Status */ - uint32_t cts : 1; /**< Completion Timeout Status */ - uint32_t fcpes : 1; /**< Flow Control Protocol Error Status */ - uint32_t ptlps : 1; /**< Poisoned TLP Status */ - uint32_t reserved_6_11 : 6; - uint32_t sdes : 1; /**< Surprise Down Error Status (not supported) */ - uint32_t dlpes : 1; /**< Data Link Protocol Error Status */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpes : 1; - uint32_t sdes : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlps : 1; - uint32_t fcpes : 1; - uint32_t cts : 1; - uint32_t cas : 1; - uint32_t ucs : 1; - uint32_t ros : 1; - uint32_t mtlps : 1; - uint32_t ecrces : 1; - uint32_t ures : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pciercx_cfg065_s cn52xx; - struct cvmx_pciercx_cfg065_s cn52xxp1; - struct cvmx_pciercx_cfg065_s cn56xx; - struct cvmx_pciercx_cfg065_s cn56xxp1; -} cvmx_pciercx_cfg065_t; - - -/** - * cvmx_pcierc#_cfg066 - * - * PCIE_CFG066 = Sixty-seventh 32-bits of PCIE type 1 config space - * (Uncorrectable Error Mask Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg066_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t urem : 1; /**< Unsupported Request Error Mask */ - uint32_t ecrcem : 1; /**< ECRC Error Mask */ - uint32_t mtlpm : 1; /**< Malformed TLP Mask */ - uint32_t rom : 1; /**< Receiver Overflow Mask */ - uint32_t ucm : 1; /**< Unexpected Completion Mask */ - uint32_t cam : 1; /**< Completer Abort Mask */ - uint32_t ctm : 1; /**< Completion Timeout Mask */ - uint32_t fcpem : 1; /**< Flow Control Protocol Error Mask */ - uint32_t ptlpm : 1; /**< Poisoned TLP Mask */ - uint32_t reserved_6_11 : 6; - uint32_t sdem : 1; /**< Surprise Down Error Mask (not supported) */ - uint32_t dlpem : 1; /**< Data Link Protocol Error Mask */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpem : 1; - uint32_t sdem : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlpm : 1; - uint32_t fcpem : 1; - uint32_t ctm : 1; - uint32_t cam : 1; - uint32_t ucm : 1; - uint32_t rom : 1; - uint32_t mtlpm : 1; - uint32_t ecrcem : 1; - uint32_t urem : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pciercx_cfg066_s cn52xx; - struct cvmx_pciercx_cfg066_s cn52xxp1; - struct cvmx_pciercx_cfg066_s cn56xx; - struct cvmx_pciercx_cfg066_s cn56xxp1; -} cvmx_pciercx_cfg066_t; - - -/** - * cvmx_pcierc#_cfg067 - * - * PCIE_CFG067 = Sixty-eighth 32-bits of PCIE type 1 config space - * (Uncorrectable Error Severity Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg067_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t ures : 1; /**< Unsupported Request Error Severity */ - uint32_t ecrces : 1; /**< ECRC Error Severity */ - uint32_t mtlps : 1; /**< Malformed TLP Severity */ - uint32_t ros : 1; /**< Receiver Overflow Severity */ - uint32_t ucs : 1; /**< Unexpected Completion Severity */ - uint32_t cas : 1; /**< Completer Abort Severity */ - uint32_t cts : 1; /**< Completion Timeout Severity */ - uint32_t fcpes : 1; /**< Flow Control Protocol Error Severity */ - uint32_t ptlps : 1; /**< Poisoned TLP Severity */ - uint32_t reserved_6_11 : 6; - uint32_t sdes : 1; /**< Surprise Down Error Severity (not supported) */ - uint32_t dlpes : 1; /**< Data Link Protocol Error Severity */ - uint32_t reserved_0_3 : 4; -#else - uint32_t reserved_0_3 : 4; - uint32_t dlpes : 1; - uint32_t sdes : 1; - uint32_t reserved_6_11 : 6; - uint32_t ptlps : 1; - uint32_t fcpes : 1; - uint32_t cts : 1; - uint32_t cas : 1; - uint32_t ucs : 1; - uint32_t ros : 1; - uint32_t mtlps : 1; - uint32_t ecrces : 1; - uint32_t ures : 1; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_pciercx_cfg067_s cn52xx; - struct cvmx_pciercx_cfg067_s cn52xxp1; - struct cvmx_pciercx_cfg067_s cn56xx; - struct cvmx_pciercx_cfg067_s cn56xxp1; -} cvmx_pciercx_cfg067_t; - - -/** - * cvmx_pcierc#_cfg068 - * - * PCIE_CFG068 = Sixty-ninth 32-bits of PCIE type 1 config space - * (Correctable Error Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg068_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_14_31 : 18; - uint32_t anfes : 1; /**< Advisory Non-Fatal Error Status */ - uint32_t rtts : 1; /**< Replay Timer Timeout Status */ - uint32_t reserved_9_11 : 3; - uint32_t rnrs : 1; /**< REPLAY_NUM Rollover Status */ - uint32_t bdllps : 1; /**< Bad DLLP Status */ - uint32_t btlps : 1; /**< Bad TLP Status */ - uint32_t reserved_1_5 : 5; - uint32_t res : 1; /**< Receiver Error Status */ -#else - uint32_t res : 1; - uint32_t reserved_1_5 : 5; - uint32_t btlps : 1; - uint32_t bdllps : 1; - uint32_t rnrs : 1; - uint32_t reserved_9_11 : 3; - uint32_t rtts : 1; - uint32_t anfes : 1; - uint32_t reserved_14_31 : 18; -#endif - } s; - struct cvmx_pciercx_cfg068_s cn52xx; - struct cvmx_pciercx_cfg068_s cn52xxp1; - struct cvmx_pciercx_cfg068_s cn56xx; - struct cvmx_pciercx_cfg068_s cn56xxp1; -} cvmx_pciercx_cfg068_t; - - -/** - * cvmx_pcierc#_cfg069 - * - * PCIE_CFG069 = Seventieth 32-bits of PCIE type 1 config space - * (Correctable Error Mask Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg069_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_14_31 : 18; - uint32_t anfem : 1; /**< Advisory Non-Fatal Error Mask */ - uint32_t rttm : 1; /**< Replay Timer Timeout Mask */ - uint32_t reserved_9_11 : 3; - uint32_t rnrm : 1; /**< REPLAY_NUM Rollover Mask */ - uint32_t bdllpm : 1; /**< Bad DLLP Mask */ - uint32_t btlpm : 1; /**< Bad TLP Mask */ - uint32_t reserved_1_5 : 5; - uint32_t rem : 1; /**< Receiver Error Mask */ -#else - uint32_t rem : 1; - uint32_t reserved_1_5 : 5; - uint32_t btlpm : 1; - uint32_t bdllpm : 1; - uint32_t rnrm : 1; - uint32_t reserved_9_11 : 3; - uint32_t rttm : 1; - uint32_t anfem : 1; - uint32_t reserved_14_31 : 18; -#endif - } s; - struct cvmx_pciercx_cfg069_s cn52xx; - struct cvmx_pciercx_cfg069_s cn52xxp1; - struct cvmx_pciercx_cfg069_s cn56xx; - struct cvmx_pciercx_cfg069_s cn56xxp1; -} cvmx_pciercx_cfg069_t; - - -/** - * cvmx_pcierc#_cfg070 - * - * PCIE_CFG070 = Seventy-first 32-bits of PCIE type 1 config space - * (Advanced Capabilities and Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg070_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t ce : 1; /**< ECRC Check Enable */ - uint32_t cc : 1; /**< ECRC Check Capable */ - uint32_t ge : 1; /**< ECRC Generation Enable */ - uint32_t gc : 1; /**< ECRC Generation Capability */ - uint32_t fep : 5; /**< First Error Pointer */ -#else - uint32_t fep : 5; - uint32_t gc : 1; - uint32_t ge : 1; - uint32_t cc : 1; - uint32_t ce : 1; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_pciercx_cfg070_s cn52xx; - struct cvmx_pciercx_cfg070_s cn52xxp1; - struct cvmx_pciercx_cfg070_s cn56xx; - struct cvmx_pciercx_cfg070_s cn56xxp1; -} cvmx_pciercx_cfg070_t; - - -/** - * cvmx_pcierc#_cfg071 - * - * PCIE_CFG071 = Seventy-second 32-bits of PCIE type 1 config space - * (Header Log Register 1) - * - * The Header Log registers collect the header for the TLP corresponding to a detected error. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg071_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword1 : 32; /**< Header Log Register (first DWORD) */ -#else - uint32_t dword1 : 32; -#endif - } s; - struct cvmx_pciercx_cfg071_s cn52xx; - struct cvmx_pciercx_cfg071_s cn52xxp1; - struct cvmx_pciercx_cfg071_s cn56xx; - struct cvmx_pciercx_cfg071_s cn56xxp1; -} cvmx_pciercx_cfg071_t; - - -/** - * cvmx_pcierc#_cfg072 - * - * PCIE_CFG072 = Seventy-third 32-bits of PCIE type 1 config space - * (Header Log Register 2) - * - * The Header Log registers collect the header for the TLP corresponding to a detected error. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg072_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword2 : 32; /**< Header Log Register (second DWORD) */ -#else - uint32_t dword2 : 32; -#endif - } s; - struct cvmx_pciercx_cfg072_s cn52xx; - struct cvmx_pciercx_cfg072_s cn52xxp1; - struct cvmx_pciercx_cfg072_s cn56xx; - struct cvmx_pciercx_cfg072_s cn56xxp1; -} cvmx_pciercx_cfg072_t; - - -/** - * cvmx_pcierc#_cfg073 - * - * PCIE_CFG073 = Seventy-fourth 32-bits of PCIE type 1 config space - * (Header Log Register 3) - * - * The Header Log registers collect the header for the TLP corresponding to a detected error. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg073_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword3 : 32; /**< Header Log Register (third DWORD) */ -#else - uint32_t dword3 : 32; -#endif - } s; - struct cvmx_pciercx_cfg073_s cn52xx; - struct cvmx_pciercx_cfg073_s cn52xxp1; - struct cvmx_pciercx_cfg073_s cn56xx; - struct cvmx_pciercx_cfg073_s cn56xxp1; -} cvmx_pciercx_cfg073_t; - - -/** - * cvmx_pcierc#_cfg074 - * - * PCIE_CFG074 = Seventy-fifth 32-bits of PCIE type 1 config space - * (Header Log Register 4) - * - * The Header Log registers collect the header for the TLP corresponding to a detected error. - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg074_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dword4 : 32; /**< Header Log Register (fourth DWORD) */ -#else - uint32_t dword4 : 32; -#endif - } s; - struct cvmx_pciercx_cfg074_s cn52xx; - struct cvmx_pciercx_cfg074_s cn52xxp1; - struct cvmx_pciercx_cfg074_s cn56xx; - struct cvmx_pciercx_cfg074_s cn56xxp1; -} cvmx_pciercx_cfg074_t; - - -/** - * cvmx_pcierc#_cfg075 - * - * PCIE_CFG075 = Seventy-sixth 32-bits of PCIE type 1 config space - * (Root Error Command Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg075_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_3_31 : 29; - uint32_t fere : 1; /**< Fatal Error Reporting Enable */ - uint32_t nfere : 1; /**< Non-Fatal Error Reporting Enable */ - uint32_t cere : 1; /**< Correctable Error Reporting Enable */ -#else - uint32_t cere : 1; - uint32_t nfere : 1; - uint32_t fere : 1; - uint32_t reserved_3_31 : 29; -#endif - } s; - struct cvmx_pciercx_cfg075_s cn52xx; - struct cvmx_pciercx_cfg075_s cn52xxp1; - struct cvmx_pciercx_cfg075_s cn56xx; - struct cvmx_pciercx_cfg075_s cn56xxp1; -} cvmx_pciercx_cfg075_t; - - -/** - * cvmx_pcierc#_cfg076 - * - * PCIE_CFG076 = Seventy-seventh 32-bits of PCIE type 1 config space - * (Root Error Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg076_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t aeimn : 5; /**< Advanced Error Interrupt Message Number, - writable through the DBI */ - uint32_t reserved_7_26 : 20; - uint32_t femr : 1; /**< Fatal Error Messages Received */ - uint32_t nfemr : 1; /**< Non-Fatal Error Messages Received */ - uint32_t fuf : 1; /**< First Uncorrectable Fatal */ - uint32_t multi_efnfr : 1; /**< Multiple ERR_FATAL/NONFATAL Received */ - uint32_t efnfr : 1; /**< ERR_FATAL/NONFATAL Received */ - uint32_t multi_ecr : 1; /**< Multiple ERR_COR Received */ - uint32_t ecr : 1; /**< ERR_COR Received */ -#else - uint32_t ecr : 1; - uint32_t multi_ecr : 1; - uint32_t efnfr : 1; - uint32_t multi_efnfr : 1; - uint32_t fuf : 1; - uint32_t nfemr : 1; - uint32_t femr : 1; - uint32_t reserved_7_26 : 20; - uint32_t aeimn : 5; -#endif - } s; - struct cvmx_pciercx_cfg076_s cn52xx; - struct cvmx_pciercx_cfg076_s cn52xxp1; - struct cvmx_pciercx_cfg076_s cn56xx; - struct cvmx_pciercx_cfg076_s cn56xxp1; -} cvmx_pciercx_cfg076_t; - - -/** - * cvmx_pcierc#_cfg077 - * - * PCIE_CFG077 = Seventy-eighth 32-bits of PCIE type 1 config space - * (Error Source Identification Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg077_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t efnfsi : 16; /**< ERR_FATAL/NONFATAL Source Identification */ - uint32_t ecsi : 16; /**< ERR_COR Source Identification */ -#else - uint32_t ecsi : 16; - uint32_t efnfsi : 16; -#endif - } s; - struct cvmx_pciercx_cfg077_s cn52xx; - struct cvmx_pciercx_cfg077_s cn52xxp1; - struct cvmx_pciercx_cfg077_s cn56xx; - struct cvmx_pciercx_cfg077_s cn56xxp1; -} cvmx_pciercx_cfg077_t; - - -/** - * cvmx_pcierc#_cfg448 - * - * PCIE_CFG448 = Four hundred forty-ninth 32-bits of PCIE type 1 config space - * (Ack Latency Timer and Replay Timer Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg448_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t rtl : 16; /**< 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. - The default is then updated based on the Negotiated Link Width - and Max_Payload_Size. */ - uint32_t rtltl : 16; /**< Round Trip Latency Time Limit - The Ack/Nak latency timer expires when it reaches this limit. - The default is then updated based on the Negotiated Link Width - and Max_Payload_Size. */ -#else - uint32_t rtltl : 16; - uint32_t rtl : 16; -#endif - } s; - struct cvmx_pciercx_cfg448_s cn52xx; - struct cvmx_pciercx_cfg448_s cn52xxp1; - struct cvmx_pciercx_cfg448_s cn56xx; - struct cvmx_pciercx_cfg448_s cn56xxp1; -} cvmx_pciercx_cfg448_t; - - -/** - * cvmx_pcierc#_cfg449 - * - * PCIE_CFG449 = Four hundred fiftieth 32-bits of PCIE type 1 config space - * (Other Message Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg449_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t omr : 32; /**< Other Message Register - This register can be used for either of the following purposes: - o 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. - o 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 XOR'd with this pattern before inserting - it into the packet. */ -#else - uint32_t omr : 32; -#endif - } s; - struct cvmx_pciercx_cfg449_s cn52xx; - struct cvmx_pciercx_cfg449_s cn52xxp1; - struct cvmx_pciercx_cfg449_s cn56xx; - struct cvmx_pciercx_cfg449_s cn56xxp1; -} cvmx_pciercx_cfg449_t; - - -/** - * cvmx_pcierc#_cfg450 - * - * PCIE_CFG450 = Four hundred fifty-first 32-bits of PCIE type 1 config space - * (Port Force Link Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg450_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t lpec : 8; /**< Low Power Entrance Count - The Power Management state will wait for this many clock cycles - for the associated completion of a CfgWr to PCIE_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 (PCIE_CFG017) register. */ - uint32_t reserved_22_23 : 2; - uint32_t link_state : 6; /**< Link State - The Link state that the PCI Express Bus will be forced to - when bit 15 (Force Link) is set. - State encoding: - o DETECT_QUIET 00h - o DETECT_ACT 01h - o POLL_ACTIVE 02h - o POLL_COMPLIANCE 03h - o POLL_CONFIG 04h - o PRE_DETECT_QUIET 05h - o DETECT_WAIT 06h - o CFG_LINKWD_START 07h - o CFG_LINKWD_ACEPT 08h - o CFG_LANENUM_WAIT 09h - o CFG_LANENUM_ACEPT 0Ah - o CFG_COMPLETE 0Bh - o CFG_IDLE 0Ch - o RCVRY_LOCK 0Dh - o RCVRY_SPEED 0Eh - o RCVRY_RCVRCFG 0Fh - o RCVRY_IDLE 10h - o L0 11h - o L0S 12h - o L123_SEND_EIDLE 13h - o L1_IDLE 14h - o L2_IDLE 15h - o L2_WAKE 16h - o DISABLED_ENTRY 17h - o DISABLED_IDLE 18h - o DISABLED 19h - o LPBK_ENTRY 1Ah - o LPBK_ACTIVE 1Bh - o LPBK_EXIT 1Ch - o LPBK_EXIT_TIMEOUT 1Dh - o HOT_RESET_ENTRY 1Eh - o HOT_RESET 1Fh */ - uint32_t force_link : 1; /**< Force Link - Forces the Link to the state specified by the Link State field. - The Force Link pulse will trigger Link re-negotiation. - * As the The Force Link is a pulse, writing a 1 to it does - trigger the forced link state event, even thought reading it - always returns a 0. */ - uint32_t reserved_8_14 : 7; - uint32_t link_num : 8; /**< Link Number */ -#else - uint32_t link_num : 8; - uint32_t reserved_8_14 : 7; - uint32_t force_link : 1; - uint32_t link_state : 6; - uint32_t reserved_22_23 : 2; - uint32_t lpec : 8; -#endif - } s; - struct cvmx_pciercx_cfg450_s cn52xx; - struct cvmx_pciercx_cfg450_s cn52xxp1; - struct cvmx_pciercx_cfg450_s cn56xx; - struct cvmx_pciercx_cfg450_s cn56xxp1; -} cvmx_pciercx_cfg450_t; - - -/** - * cvmx_pcierc#_cfg451 - * - * PCIE_CFG451 = Four hundred fifty-second 32-bits of PCIE type 1 config space - * (Ack Frequency Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg451_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t l1el : 3; /**< L1 Entrance Latency - Values correspond to: - o 000: 1 ms - o 001: 2 ms - o 010: 4 ms - o 011: 8 ms - o 100: 16 ms - o 101: 32 ms - o 110 or 111: 64 ms */ - uint32_t l0el : 3; /**< L0s Entrance Latency - Values correspond to: - o 000: 1 ms - o 001: 2 ms - o 010: 3 ms - o 011: 4 ms - o 100: 5 ms - o 101: 6 ms - o 110 or 111: 7 ms */ - uint32_t n_fts_cc : 8; /**< N_FTS when common clock is used. - The number of Fast Training Sequence 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. - Note: The core does not support a value of zero; a value of - zero can cause the LTSSM to go into the recovery state - when exiting from L0s. */ - uint32_t n_fts : 8; /**< N_FTS - The number of Fast Training Sequence 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. - Note: The core does not support a value of zero; a value of - zero can cause the LTSSM to go into the recovery state - when exiting from L0s. */ - uint32_t ack_freq : 8; /**< Ack Frequency - The number of pending Ack's specified here (up to 255) before - sending an Ack. */ -#else - uint32_t ack_freq : 8; - uint32_t n_fts : 8; - uint32_t n_fts_cc : 8; - uint32_t l0el : 3; - uint32_t l1el : 3; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_pciercx_cfg451_s cn52xx; - struct cvmx_pciercx_cfg451_s cn52xxp1; - struct cvmx_pciercx_cfg451_s cn56xx; - struct cvmx_pciercx_cfg451_s cn56xxp1; -} cvmx_pciercx_cfg451_t; - - -/** - * cvmx_pcierc#_cfg452 - * - * PCIE_CFG452 = Four hundred fifty-third 32-bits of PCIE type 1 config space - * (Port Link Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg452_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t eccrc : 1; /**< Enable Corrupted CRC - Causes corrupt LCRC for TLPs when set, - using the pattern contained in the Other Message register. - This is a test feature, not to be used in normal operation. */ - uint32_t reserved_22_24 : 3; - uint32_t lme : 6; /**< Link Mode Enable - o 000001: x1 - o 000011: x2 - o 000111: x4 - o 001111: x8 - o 011111: x16 (not supported) - o 111111: x32 (not supported) - This field indicates the MAXIMUM number of lanes supported - by the PCIe port. It is normally set to 0xF or 0x7 depending - on the value of the QLM_CFG bits (0xF when QLM_CFG == 0 - otherwise 0x7). The value can be set less than 0xF or 0x7 - to limit the number of lanes the PCIe will attempt to use. - The programming of this field needs to be done by SW BEFORE - enabling the link. See also MLW. - (Note: The value of this field does NOT indicate the number - of lanes in use by the PCIe. LME sets the max number of lanes - in the PCIe core that COULD be used. As per the PCIe specs, - 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_8_15 : 8; - uint32_t flm : 1; /**< Fast Link Mode - Sets all internal timers to fast mode for simulation purposes. */ - uint32_t reserved_6_6 : 1; - uint32_t dllle : 1; /**< 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_4 : 1; - uint32_t ra : 1; /**< Reset Assert - Triggers a recovery and forces the LTSSM to the Hot Reset - state (downstream port only). */ - uint32_t le : 1; /**< Loopback Enable - Turns on loopback. */ - uint32_t sd : 1; /**< Scramble Disable - Turns off data scrambling. */ - uint32_t omr : 1; /**< 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 - uint32_t omr : 1; - uint32_t sd : 1; - uint32_t le : 1; - uint32_t ra : 1; - uint32_t reserved_4_4 : 1; - uint32_t dllle : 1; - uint32_t reserved_6_6 : 1; - uint32_t flm : 1; - uint32_t reserved_8_15 : 8; - uint32_t lme : 6; - uint32_t reserved_22_24 : 3; - uint32_t eccrc : 1; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pciercx_cfg452_s cn52xx; - struct cvmx_pciercx_cfg452_s cn52xxp1; - struct cvmx_pciercx_cfg452_s cn56xx; - struct cvmx_pciercx_cfg452_s cn56xxp1; -} cvmx_pciercx_cfg452_t; - - -/** - * cvmx_pcierc#_cfg453 - * - * PCIE_CFG453 = Four hundred fifty-fourth 32-bits of PCIE type 1 config space - * (Lane Skew Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg453_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dlld : 1; /**< Disable Lane-to-Lane Deskew - Disables the internal Lane-to-Lane deskew logic. */ - uint32_t reserved_26_30 : 5; - uint32_t ack_nak : 1; /**< Ack/Nak Disable - Prevents the PCI Express bus from sending Ack and Nak DLLPs. */ - uint32_t fcd : 1; /**< Flow Control Disable - Prevents the PCI Express bus from sending FC DLLPs. */ - uint32_t ilst : 24; /**< Insert Lane Skew for Transmit (not supported for x16) - 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 010b 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 - uint32_t ilst : 24; - uint32_t fcd : 1; - uint32_t ack_nak : 1; - uint32_t reserved_26_30 : 5; - uint32_t dlld : 1; -#endif - } s; - struct cvmx_pciercx_cfg453_s cn52xx; - struct cvmx_pciercx_cfg453_s cn52xxp1; - struct cvmx_pciercx_cfg453_s cn56xx; - struct cvmx_pciercx_cfg453_s cn56xxp1; -} cvmx_pciercx_cfg453_t; - - -/** - * cvmx_pcierc#_cfg454 - * - * PCIE_CFG454 = Four hundred fifty-fifth 32-bits of PCIE type 1 config space - * (Symbol Number Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg454_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_29_31 : 3; - uint32_t tmfcwt : 5; /**< Timer Modifier for Flow Control Watchdog Timer - Increases the timer value for the Flow Control watchdog timer, - in increments of 16 clock cycles. */ - uint32_t tmanlt : 5; /**< 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; /**< Timer Modifier for Replay Timer - Increases the timer value for the replay timer, in increments - of 64 clock cycles. */ - uint32_t reserved_11_13 : 3; - uint32_t nskps : 3; /**< Number of SKP Symbols */ - uint32_t reserved_4_7 : 4; - uint32_t ntss : 4; /**< Number of TS Symbols - Sets the number of TS identifier symbols that are sent in TS1 - and TS2 ordered sets. */ -#else - uint32_t ntss : 4; - uint32_t reserved_4_7 : 4; - uint32_t nskps : 3; - uint32_t reserved_11_13 : 3; - uint32_t tmrt : 5; - uint32_t tmanlt : 5; - uint32_t tmfcwt : 5; - uint32_t reserved_29_31 : 3; -#endif - } s; - struct cvmx_pciercx_cfg454_s cn52xx; - struct cvmx_pciercx_cfg454_s cn52xxp1; - struct cvmx_pciercx_cfg454_s cn56xx; - struct cvmx_pciercx_cfg454_s cn56xxp1; -} cvmx_pciercx_cfg454_t; - - -/** - * cvmx_pcierc#_cfg455 - * - * PCIE_CFG455 = Four hundred fifty-sixth 32-bits of PCIE type 1 config space - * (Symbol Timer Register/Filter Mask Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg455_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t m_cfg0_filt : 1; /**< Mask filtering of received Configuration Requests (RC mode only) */ - uint32_t m_io_filt : 1; /**< Mask filtering of received I/O Requests (RC mode only) */ - uint32_t msg_ctrl : 1; /**< Message Control - The application must not change this field. */ - uint32_t m_cpl_ecrc_filt : 1; /**< Mask ECRC error filtering for Completions */ - uint32_t m_ecrc_filt : 1; /**< Mask ECRC error filtering */ - uint32_t m_cpl_len_err : 1; /**< Mask Length mismatch error for received Completions */ - uint32_t m_cpl_attr_err : 1; /**< Mask Attributes mismatch error for received Completions */ - uint32_t m_cpl_tc_err : 1; /**< Mask Traffic Class mismatch error for received Completions */ - uint32_t m_cpl_fun_err : 1; /**< Mask function mismatch error for received Completions */ - uint32_t m_cpl_rid_err : 1; /**< Mask Requester ID mismatch error for received Completions */ - uint32_t m_cpl_tag_err : 1; /**< Mask Tag error rules for received Completions */ - uint32_t m_lk_filt : 1; /**< Mask Locked Request filtering */ - uint32_t m_cfg1_filt : 1; /**< Mask Type 1 Configuration Request filtering */ - uint32_t m_bar_match : 1; /**< Mask BAR match filtering */ - uint32_t m_pois_filt : 1; /**< Mask poisoned TLP filtering */ - uint32_t m_fun : 1; /**< Mask function */ - uint32_t dfcwt : 1; /**< Disable FC Watchdog Timer */ - uint32_t reserved_11_14 : 4; - uint32_t skpiv : 11; /**< SKP Interval Value */ -#else - uint32_t skpiv : 11; - uint32_t reserved_11_14 : 4; - uint32_t dfcwt : 1; - uint32_t m_fun : 1; - uint32_t m_pois_filt : 1; - uint32_t m_bar_match : 1; - uint32_t m_cfg1_filt : 1; - uint32_t m_lk_filt : 1; - uint32_t m_cpl_tag_err : 1; - uint32_t m_cpl_rid_err : 1; - uint32_t m_cpl_fun_err : 1; - uint32_t m_cpl_tc_err : 1; - uint32_t m_cpl_attr_err : 1; - uint32_t m_cpl_len_err : 1; - uint32_t m_ecrc_filt : 1; - uint32_t m_cpl_ecrc_filt : 1; - uint32_t msg_ctrl : 1; - uint32_t m_io_filt : 1; - uint32_t m_cfg0_filt : 1; -#endif - } s; - struct cvmx_pciercx_cfg455_s cn52xx; - struct cvmx_pciercx_cfg455_s cn52xxp1; - struct cvmx_pciercx_cfg455_s cn56xx; - struct cvmx_pciercx_cfg455_s cn56xxp1; -} cvmx_pciercx_cfg455_t; - - -/** - * cvmx_pcierc#_cfg456 - * - * PCIE_CFG456 = Four hundred fifty-seventh 32-bits of PCIE type 1 config space - * (Filter Mask Register 2) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg456_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_2_31 : 30; - uint32_t m_vend1_drp : 1; /**< Mask Vendor MSG Type 1 dropped silently */ - uint32_t m_vend0_drp : 1; /**< Mask Vendor MSG Type 0 dropped with UR error reporting. */ -#else - uint32_t m_vend0_drp : 1; - uint32_t m_vend1_drp : 1; - uint32_t reserved_2_31 : 30; -#endif - } s; - struct cvmx_pciercx_cfg456_s cn52xx; - struct cvmx_pciercx_cfg456_s cn52xxp1; - struct cvmx_pciercx_cfg456_s cn56xx; - struct cvmx_pciercx_cfg456_s cn56xxp1; -} cvmx_pciercx_cfg456_t; - - -/** - * cvmx_pcierc#_cfg458 - * - * PCIE_CFG458 = Four hundred fifty-ninth 32-bits of PCIE type 1 config space - * (Debug Register 0) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg458_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dbg_info_l32 : 32; /**< The value on cxpl_debug_info[31:0]. */ -#else - uint32_t dbg_info_l32 : 32; -#endif - } s; - struct cvmx_pciercx_cfg458_s cn52xx; - struct cvmx_pciercx_cfg458_s cn52xxp1; - struct cvmx_pciercx_cfg458_s cn56xx; - struct cvmx_pciercx_cfg458_s cn56xxp1; -} cvmx_pciercx_cfg458_t; - - -/** - * cvmx_pcierc#_cfg459 - * - * PCIE_CFG459 = Four hundred sixtieth 32-bits of PCIE type 1 config space - * (Debug Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg459_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dbg_info_u32 : 32; /**< The value on cxpl_debug_info[63:32]. */ -#else - uint32_t dbg_info_u32 : 32; -#endif - } s; - struct cvmx_pciercx_cfg459_s cn52xx; - struct cvmx_pciercx_cfg459_s cn52xxp1; - struct cvmx_pciercx_cfg459_s cn56xx; - struct cvmx_pciercx_cfg459_s cn56xxp1; -} cvmx_pciercx_cfg459_t; - - -/** - * cvmx_pcierc#_cfg460 - * - * PCIE_CFG460 = Four hundred sixty-first 32-bits of PCIE type 1 config space - * (Transmit Posted FC Credit Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg460_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tphfcc : 8; /**< 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; /**< 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 - uint32_t tpdfcc : 12; - uint32_t tphfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pciercx_cfg460_s cn52xx; - struct cvmx_pciercx_cfg460_s cn52xxp1; - struct cvmx_pciercx_cfg460_s cn56xx; - struct cvmx_pciercx_cfg460_s cn56xxp1; -} cvmx_pciercx_cfg460_t; - - -/** - * cvmx_pcierc#_cfg461 - * - * PCIE_CFG461 = Four hundred sixty-second 32-bits of PCIE type 1 config space - * (Transmit Non-Posted FC Credit Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg461_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tchfcc : 8; /**< Transmit Non-Posted Header FC Credits - The Non-Posted Header credits advertised by the receiver at the - other end of the Link, updated with each UpdateFC DLLP. */ - uint32_t tcdfcc : 12; /**< Transmit Non-Posted Data FC Credits - The Non-Posted Data credits advertised by the receiver at the - other end of the Link, updated with each UpdateFC DLLP. */ -#else - uint32_t tcdfcc : 12; - uint32_t tchfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pciercx_cfg461_s cn52xx; - struct cvmx_pciercx_cfg461_s cn52xxp1; - struct cvmx_pciercx_cfg461_s cn56xx; - struct cvmx_pciercx_cfg461_s cn56xxp1; -} cvmx_pciercx_cfg461_t; - - -/** - * cvmx_pcierc#_cfg462 - * - * PCIE_CFG462 = Four hundred sixty-third 32-bits of PCIE type 1 config space - * (Transmit Completion FC Credit Status ) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg462_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t tchfcc : 8; /**< 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; /**< 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 - uint32_t tcdfcc : 12; - uint32_t tchfcc : 8; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_pciercx_cfg462_s cn52xx; - struct cvmx_pciercx_cfg462_s cn52xxp1; - struct cvmx_pciercx_cfg462_s cn56xx; - struct cvmx_pciercx_cfg462_s cn56xxp1; -} cvmx_pciercx_cfg462_t; - - -/** - * cvmx_pcierc#_cfg463 - * - * PCIE_CFG463 = Four hundred sixty-fourth 32-bits of PCIE type 1 config space - * (Queue Status) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg463_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_3_31 : 29; - uint32_t rqne : 1; /**< Received Queue Not Empty - Indicates there is data in one or more of the receive buffers. */ - uint32_t trbne : 1; /**< Transmit Retry Buffer Not Empty - Indicates that there is data in the transmit retry buffer. */ - uint32_t rtlpfccnr : 1; /**< 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 - uint32_t rtlpfccnr : 1; - uint32_t trbne : 1; - uint32_t rqne : 1; - uint32_t reserved_3_31 : 29; -#endif - } s; - struct cvmx_pciercx_cfg463_s cn52xx; - struct cvmx_pciercx_cfg463_s cn52xxp1; - struct cvmx_pciercx_cfg463_s cn56xx; - struct cvmx_pciercx_cfg463_s cn56xxp1; -} cvmx_pciercx_cfg463_t; - - -/** - * cvmx_pcierc#_cfg464 - * - * PCIE_CFG464 = Four hundred sixty-fifth 32-bits of PCIE type 1 config space - * (VC Transmit Arbitration Register 1) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg464_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wrr_vc3 : 8; /**< WRR Weight for VC3 */ - uint32_t wrr_vc2 : 8; /**< WRR Weight for VC2 */ - uint32_t wrr_vc1 : 8; /**< WRR Weight for VC1 */ - uint32_t wrr_vc0 : 8; /**< WRR Weight for VC0 */ -#else - uint32_t wrr_vc0 : 8; - uint32_t wrr_vc1 : 8; - uint32_t wrr_vc2 : 8; - uint32_t wrr_vc3 : 8; -#endif - } s; - struct cvmx_pciercx_cfg464_s cn52xx; - struct cvmx_pciercx_cfg464_s cn52xxp1; - struct cvmx_pciercx_cfg464_s cn56xx; - struct cvmx_pciercx_cfg464_s cn56xxp1; -} cvmx_pciercx_cfg464_t; - - -/** - * cvmx_pcierc#_cfg465 - * - * PCIE_CFG465 = Four hundred sixty-sixth 32-bits of config space - * (VC Transmit Arbitration Register 2) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg465_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wrr_vc7 : 8; /**< WRR Weight for VC7 */ - uint32_t wrr_vc6 : 8; /**< WRR Weight for VC6 */ - uint32_t wrr_vc5 : 8; /**< WRR Weight for VC5 */ - uint32_t wrr_vc4 : 8; /**< WRR Weight for VC4 */ -#else - uint32_t wrr_vc4 : 8; - uint32_t wrr_vc5 : 8; - uint32_t wrr_vc6 : 8; - uint32_t wrr_vc7 : 8; -#endif - } s; - struct cvmx_pciercx_cfg465_s cn52xx; - struct cvmx_pciercx_cfg465_s cn52xxp1; - struct cvmx_pciercx_cfg465_s cn56xx; - struct cvmx_pciercx_cfg465_s cn56xxp1; -} cvmx_pciercx_cfg465_t; - - -/** - * cvmx_pcierc#_cfg466 - * - * PCIE_CFG466 = Four hundred sixty-seventh 32-bits of PCIE type 1 config space - * (VC0 Posted Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg466_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t rx_queue_order : 1; /**< VC Ordering for Receive Queues - Determines the VC ordering rule for the receive queues, used - only in the segmented-buffer configuration, - writable through the DBI: - o 1: Strict ordering, higher numbered VCs have higher priority - o 0: Round robin - However, the application must not change this field. */ - uint32_t type_ordering : 1; /**< TLP Type Ordering for VC0 - Determines the TLP type ordering rule for VC0 receive queues, - used only in the segmented-buffer configuration, writable - through the DBI: - o 1: Ordering of received TLPs follows the rules in - PCI Express Base Specification, Revision 1.1 - o 0: Strict ordering for received TLPs: Posted, then - Completion, then Non-Posted - However, the application must not change this field. */ - uint32_t reserved_24_29 : 6; - uint32_t queue_mode : 3; /**< VC0 Posted TLP Queue Mode - The operating mode of the Posted receive queue for VC0, used - only in the segmented-buffer configuration, writable through - the DBI. However, the application must not change this field. - Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< 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 the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< 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 the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_29 : 6; - uint32_t type_ordering : 1; - uint32_t rx_queue_order : 1; -#endif - } s; - struct cvmx_pciercx_cfg466_s cn52xx; - struct cvmx_pciercx_cfg466_s cn52xxp1; - struct cvmx_pciercx_cfg466_s cn56xx; - struct cvmx_pciercx_cfg466_s cn56xxp1; -} cvmx_pciercx_cfg466_t; - - -/** - * cvmx_pcierc#_cfg467 - * - * PCIE_CFG467 = Four hundred sixty-eighth 32-bits of PCIE type 1 config space - * (VC0 Non-Posted Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg467_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t queue_mode : 3; /**< VC0 Non-Posted TLP Queue Mode - The operating mode of the Non-Posted receive queue for VC0, - used only in the segmented-buffer configuration, writable - through the DBI. Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< VC0 Non-Posted Header Credits - The number of initial Non-Posted header credits for VC0, used - for all receive queue buffer configurations. - This field is writable through the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< VC0 Non-Posted Data Credits - The number of initial Non-Posted data credits for VC0, used for - all receive queue buffer configurations. - This field is writable through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pciercx_cfg467_s cn52xx; - struct cvmx_pciercx_cfg467_s cn52xxp1; - struct cvmx_pciercx_cfg467_s cn56xx; - struct cvmx_pciercx_cfg467_s cn56xxp1; -} cvmx_pciercx_cfg467_t; - - -/** - * cvmx_pcierc#_cfg468 - * - * PCIE_CFG468 = Four hundred sixty-ninth 32-bits of PCIE type 1 config space - * (VC0 Completion Receive Queue Control) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg468_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_24_31 : 8; - uint32_t queue_mode : 3; /**< VC0 Completion TLP Queue Mode - The operating mode of the Completion receive queue for VC0, - used only in the segmented-buffer configuration, writable - through the DBI. Only one bit can be set at a time: - o Bit 23: Bypass - o Bit 22: Cut-through - o Bit 21: Store-and-forward - However, the application must not change this field. */ - uint32_t reserved_20_20 : 1; - uint32_t header_credits : 8; /**< 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 the DBI. - However, the application must not change this field. */ - uint32_t data_credits : 12; /**< 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 the DBI. - However, the application must not change this field. */ -#else - uint32_t data_credits : 12; - uint32_t header_credits : 8; - uint32_t reserved_20_20 : 1; - uint32_t queue_mode : 3; - uint32_t reserved_24_31 : 8; -#endif - } s; - struct cvmx_pciercx_cfg468_s cn52xx; - struct cvmx_pciercx_cfg468_s cn52xxp1; - struct cvmx_pciercx_cfg468_s cn56xx; - struct cvmx_pciercx_cfg468_s cn56xxp1; -} cvmx_pciercx_cfg468_t; - - -/** - * cvmx_pcierc#_cfg490 - * - * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 1 config space - * (VC0 Posted Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg490_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Posted Header Queue Depth - Sets the number of entries in the Posted header queue for VC0 - when using the segmented-buffer configuration, writable through - the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Posted Data Queue Depth - Sets the number of entries in the Posted data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pciercx_cfg490_s cn52xx; - struct cvmx_pciercx_cfg490_s cn52xxp1; - struct cvmx_pciercx_cfg490_s cn56xx; - struct cvmx_pciercx_cfg490_s cn56xxp1; -} cvmx_pciercx_cfg490_t; - - -/** - * cvmx_pcierc#_cfg491 - * - * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 1 config space - * (VC0 Non-Posted Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg491_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Non-Posted Header Queue Depth - Sets the number of entries in the Non-Posted header queue for - VC0 when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Non-Posted Data Queue Depth - Sets the number of entries in the Non-Posted data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pciercx_cfg491_s cn52xx; - struct cvmx_pciercx_cfg491_s cn52xxp1; - struct cvmx_pciercx_cfg491_s cn56xx; - struct cvmx_pciercx_cfg491_s cn56xxp1; -} cvmx_pciercx_cfg491_t; - - -/** - * cvmx_pcierc#_cfg492 - * - * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 1 config space - * (VC0 Completion Buffer Depth) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg492_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_26_31 : 6; - uint32_t header_depth : 10; /**< VC0 Completion Header Queue Depth - Sets the number of entries in the Completion header queue for - VC0 when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ - uint32_t reserved_14_15 : 2; - uint32_t data_depth : 14; /**< VC0 Completion Data Queue Depth - Sets the number of entries in the Completion data queue for VC0 - when using the segmented-buffer configuration, writable - through the DBI. - However, the application must not change this field. */ -#else - uint32_t data_depth : 14; - uint32_t reserved_14_15 : 2; - uint32_t header_depth : 10; - uint32_t reserved_26_31 : 6; -#endif - } s; - struct cvmx_pciercx_cfg492_s cn52xx; - struct cvmx_pciercx_cfg492_s cn52xxp1; - struct cvmx_pciercx_cfg492_s cn56xx; - struct cvmx_pciercx_cfg492_s cn56xxp1; -} cvmx_pciercx_cfg492_t; - - -/** - * cvmx_pcierc#_cfg516 - * - * PCIE_CFG516 = Five hundred seventeenth 32-bits of PCIE type 1 config space - * (PHY Status Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg516_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t phy_stat : 32; /**< PHY Status */ -#else - uint32_t phy_stat : 32; -#endif - } s; - struct cvmx_pciercx_cfg516_s cn52xx; - struct cvmx_pciercx_cfg516_s cn52xxp1; - struct cvmx_pciercx_cfg516_s cn56xx; - struct cvmx_pciercx_cfg516_s cn56xxp1; -} cvmx_pciercx_cfg516_t; - - -/** - * cvmx_pcierc#_cfg517 - * - * PCIE_CFG517 = Five hundred eighteenth 32-bits of PCIE type 1 config space - * (PHY Control Register) - */ -typedef union -{ - uint32_t u32; - struct cvmx_pciercx_cfg517_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t phy_ctrl : 32; /**< PHY Control */ -#else - uint32_t phy_ctrl : 32; -#endif - } s; - struct cvmx_pciercx_cfg517_s cn52xx; - struct cvmx_pciercx_cfg517_s cn52xxp1; - struct cvmx_pciercx_cfg517_s cn56xx; - struct cvmx_pciercx_cfg517_s cn56xxp1; -} cvmx_pciercx_cfg517_t; - - -/** - * cvmx_pcm#_dma_cfg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_dma_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t rdpend : 1; /**< If 0, no L2C read responses pending - 1, L2C read responses are outstanding - NOTE: When restarting after stopping a running TDM - engine, software must wait for RDPEND to read 0 - before writing PCMn_TDM_CFG[ENABLE] to a 1 */ - uint64_t reserved_54_62 : 9; - uint64_t rxslots : 10; /**< Number of 8-bit slots to receive per frame - (number of slots in a receive superframe) */ - uint64_t reserved_42_43 : 2; - uint64_t txslots : 10; /**< Number of 8-bit slots to transmit per frame - (number of slots in a transmit superframe) */ - uint64_t reserved_30_31 : 2; - uint64_t rxst : 10; /**< Number of frame writes for interrupt */ - uint64_t reserved_19_19 : 1; - uint64_t useldt : 1; /**< If 0, use LDI command to read from L2C - 1, use LDT command to read from L2C */ - uint64_t txrd : 10; /**< Number of frame reads for interrupt */ - uint64_t fetchsiz : 4; /**< FETCHSIZ+1 timeslots are read when threshold is - reached. */ - uint64_t thresh : 4; /**< If number of bytes remaining in the DMA fifo is <= - THRESH, initiate a fetch of timeslot data from the - transmit memory region. - NOTE: there are only 16B of buffer for each engine - so the seetings for FETCHSIZ and THRESH must be - such that the buffer will not be overrun: - - THRESH + min(FETCHSIZ + 1,TXSLOTS) MUST BE <= 16 */ -#else - uint64_t thresh : 4; - uint64_t fetchsiz : 4; - uint64_t txrd : 10; - uint64_t useldt : 1; - uint64_t reserved_19_19 : 1; - uint64_t rxst : 10; - uint64_t reserved_30_31 : 2; - uint64_t txslots : 10; - uint64_t reserved_42_43 : 2; - uint64_t rxslots : 10; - uint64_t reserved_54_62 : 9; - uint64_t rdpend : 1; -#endif - } s; - struct cvmx_pcmx_dma_cfg_s cn30xx; - struct cvmx_pcmx_dma_cfg_s cn31xx; - struct cvmx_pcmx_dma_cfg_s cn50xx; -} cvmx_pcmx_dma_cfg_t; - - -/** - * cvmx_pcm#_int_ena - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_int_ena_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rxovf : 1; /**< Enable interrupt if RX byte overflows */ - uint64_t txempty : 1; /**< Enable interrupt on TX byte empty */ - uint64_t txrd : 1; /**< Enable DMA engine frame read interrupts */ - uint64_t txwrap : 1; /**< Enable TX region wrap interrupts */ - uint64_t rxst : 1; /**< Enable DMA engine frame store interrupts */ - uint64_t rxwrap : 1; /**< Enable RX region wrap interrupts */ - uint64_t fsyncextra : 1; /**< Enable FSYNC extra interrupts - NOTE: FSYNCEXTRA errors are defined as an FSYNC - found in the "wrong" spot of a frame given the - programming of PCMn_CLK_CFG[NUMSLOTS] and - PCMn_CLK_CFG[EXTRABIT]. */ - uint64_t fsyncmissed : 1; /**< Enable FSYNC missed interrupts - NOTE: FSYNCMISSED errors are defined as an FSYNC - missing from the correct spot in a frame given - the programming of PCMn_CLK_CFG[NUMSLOTS] and - PCMn_CLK_CFG[EXTRABIT]. */ -#else - uint64_t fsyncmissed : 1; - uint64_t fsyncextra : 1; - uint64_t rxwrap : 1; - uint64_t rxst : 1; - uint64_t txwrap : 1; - uint64_t txrd : 1; - uint64_t txempty : 1; - uint64_t rxovf : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pcmx_int_ena_s cn30xx; - struct cvmx_pcmx_int_ena_s cn31xx; - struct cvmx_pcmx_int_ena_s cn50xx; -} cvmx_pcmx_int_ena_t; - - -/** - * cvmx_pcm#_int_sum - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rxovf : 1; /**< RX byte overflowed */ - uint64_t txempty : 1; /**< TX byte was empty when sampled */ - uint64_t txrd : 1; /**< DMA engine frame read interrupt occurred */ - uint64_t txwrap : 1; /**< TX region wrap interrupt occurred */ - uint64_t rxst : 1; /**< DMA engine frame store interrupt occurred */ - uint64_t rxwrap : 1; /**< RX region wrap interrupt occurred */ - uint64_t fsyncextra : 1; /**< FSYNC extra interrupt occurred */ - uint64_t fsyncmissed : 1; /**< FSYNC missed interrupt occurred */ -#else - uint64_t fsyncmissed : 1; - uint64_t fsyncextra : 1; - uint64_t rxwrap : 1; - uint64_t rxst : 1; - uint64_t txwrap : 1; - uint64_t txrd : 1; - uint64_t txempty : 1; - uint64_t rxovf : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pcmx_int_sum_s cn30xx; - struct cvmx_pcmx_int_sum_s cn31xx; - struct cvmx_pcmx_int_sum_s cn50xx; -} cvmx_pcmx_int_sum_t; - - -/** - * cvmx_pcm#_rxaddr - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxaddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Address of the next write to the receive memory - region */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_pcmx_rxaddr_s cn30xx; - struct cvmx_pcmx_rxaddr_s cn31xx; - struct cvmx_pcmx_rxaddr_s cn50xx; -} cvmx_pcmx_rxaddr_t; - - -/** - * cvmx_pcm#_rxcnt - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxcnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt : 16; /**< Number of superframes in receive memory region */ -#else - uint64_t cnt : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcmx_rxcnt_s cn30xx; - struct cvmx_pcmx_rxcnt_s cn31xx; - struct cvmx_pcmx_rxcnt_s cn50xx; -} cvmx_pcmx_rxcnt_t; - - -/** - * cvmx_pcm#_rxmsk0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 63 to 0 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk0_s cn30xx; - struct cvmx_pcmx_rxmsk0_s cn31xx; - struct cvmx_pcmx_rxmsk0_s cn50xx; -} cvmx_pcmx_rxmsk0_t; - - -/** - * cvmx_pcm#_rxmsk1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 127 to 64 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk1_s cn30xx; - struct cvmx_pcmx_rxmsk1_s cn31xx; - struct cvmx_pcmx_rxmsk1_s cn50xx; -} cvmx_pcmx_rxmsk1_t; - - -/** - * cvmx_pcm#_rxmsk2 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 191 to 128 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk2_s cn30xx; - struct cvmx_pcmx_rxmsk2_s cn31xx; - struct cvmx_pcmx_rxmsk2_s cn50xx; -} cvmx_pcmx_rxmsk2_t; - - -/** - * cvmx_pcm#_rxmsk3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 255 to 192 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk3_s cn30xx; - struct cvmx_pcmx_rxmsk3_s cn31xx; - struct cvmx_pcmx_rxmsk3_s cn50xx; -} cvmx_pcmx_rxmsk3_t; - - -/** - * cvmx_pcm#_rxmsk4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 319 to 256 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk4_s cn30xx; - struct cvmx_pcmx_rxmsk4_s cn31xx; - struct cvmx_pcmx_rxmsk4_s cn50xx; -} cvmx_pcmx_rxmsk4_t; - - -/** - * cvmx_pcm#_rxmsk5 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 383 to 320 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk5_s cn30xx; - struct cvmx_pcmx_rxmsk5_s cn31xx; - struct cvmx_pcmx_rxmsk5_s cn50xx; -} cvmx_pcmx_rxmsk5_t; - - -/** - * cvmx_pcm#_rxmsk6 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 447 to 384 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk6_s cn30xx; - struct cvmx_pcmx_rxmsk6_s cn31xx; - struct cvmx_pcmx_rxmsk6_s cn50xx; -} cvmx_pcmx_rxmsk6_t; - - -/** - * cvmx_pcm#_rxmsk7 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxmsk7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Receive mask bits for slots 511 to 448 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_rxmsk7_s cn30xx; - struct cvmx_pcmx_rxmsk7_s cn31xx; - struct cvmx_pcmx_rxmsk7_s cn50xx; -} cvmx_pcmx_rxmsk7_t; - - -/** - * cvmx_pcm#_rxstart - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_rxstart_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 33; /**< Starting address for the receive memory region */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t addr : 33; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_pcmx_rxstart_s cn30xx; - struct cvmx_pcmx_rxstart_s cn31xx; - struct cvmx_pcmx_rxstart_s cn50xx; -} cvmx_pcmx_rxstart_t; - - -/** - * cvmx_pcm#_tdm_cfg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_tdm_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t drvtim : 16; /**< Number of ECLKs from start of bit time to stop - driving last bit of timeslot (if not driving next - timeslot) */ - uint64_t samppt : 16; /**< Number of ECLKs from start of bit time to sample - data bit. */ - uint64_t reserved_3_31 : 29; - uint64_t lsbfirst : 1; /**< If 0, shift/receive MSB first - 1, shift/receive LSB first */ - uint64_t useclk1 : 1; /**< If 0, this PCM is based on BCLK/FSYNC0 - 1, this PCM is based on BCLK/FSYNC1 */ - uint64_t enable : 1; /**< If 1, PCM is enabled, otherwise pins are GPIOs - NOTE: when TDM is disabled by detection of an - FSYNC error all transmission and reception is - halted. In addition, PCMn_TX/RXADDR are updated - to point to the position at which the error was - detected. */ -#else - uint64_t enable : 1; - uint64_t useclk1 : 1; - uint64_t lsbfirst : 1; - uint64_t reserved_3_31 : 29; - uint64_t samppt : 16; - uint64_t drvtim : 16; -#endif - } s; - struct cvmx_pcmx_tdm_cfg_s cn30xx; - struct cvmx_pcmx_tdm_cfg_s cn31xx; - struct cvmx_pcmx_tdm_cfg_s cn50xx; -} cvmx_pcmx_tdm_cfg_t; - - -/** - * cvmx_pcm#_tdm_dbg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_tdm_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t debuginfo : 64; /**< Miscellaneous debug information */ -#else - uint64_t debuginfo : 64; -#endif - } s; - struct cvmx_pcmx_tdm_dbg_s cn30xx; - struct cvmx_pcmx_tdm_dbg_s cn31xx; - struct cvmx_pcmx_tdm_dbg_s cn50xx; -} cvmx_pcmx_tdm_dbg_t; - - -/** - * cvmx_pcm#_txaddr - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txaddr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 33; /**< Address of the next read from the transmit memory - region */ - uint64_t fram : 3; /**< Frame offset - NOTE: this is used to extract the correct byte from - each 64b word read from the transmit memory region */ -#else - uint64_t fram : 3; - uint64_t addr : 33; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_pcmx_txaddr_s cn30xx; - struct cvmx_pcmx_txaddr_s cn31xx; - struct cvmx_pcmx_txaddr_s cn50xx; -} cvmx_pcmx_txaddr_t; - - -/** - * cvmx_pcm#_txcnt - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txcnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t cnt : 16; /**< Number of superframes in transmit memory region */ -#else - uint64_t cnt : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcmx_txcnt_s cn30xx; - struct cvmx_pcmx_txcnt_s cn31xx; - struct cvmx_pcmx_txcnt_s cn50xx; -} cvmx_pcmx_txcnt_t; - - -/** - * cvmx_pcm#_txmsk0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 63 to 0 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk0_s cn30xx; - struct cvmx_pcmx_txmsk0_s cn31xx; - struct cvmx_pcmx_txmsk0_s cn50xx; -} cvmx_pcmx_txmsk0_t; - - -/** - * cvmx_pcm#_txmsk1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 127 to 64 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk1_s cn30xx; - struct cvmx_pcmx_txmsk1_s cn31xx; - struct cvmx_pcmx_txmsk1_s cn50xx; -} cvmx_pcmx_txmsk1_t; - - -/** - * cvmx_pcm#_txmsk2 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 191 to 128 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk2_s cn30xx; - struct cvmx_pcmx_txmsk2_s cn31xx; - struct cvmx_pcmx_txmsk2_s cn50xx; -} cvmx_pcmx_txmsk2_t; - - -/** - * cvmx_pcm#_txmsk3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 255 to 192 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk3_s cn30xx; - struct cvmx_pcmx_txmsk3_s cn31xx; - struct cvmx_pcmx_txmsk3_s cn50xx; -} cvmx_pcmx_txmsk3_t; - - -/** - * cvmx_pcm#_txmsk4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 319 to 256 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk4_s cn30xx; - struct cvmx_pcmx_txmsk4_s cn31xx; - struct cvmx_pcmx_txmsk4_s cn50xx; -} cvmx_pcmx_txmsk4_t; - - -/** - * cvmx_pcm#_txmsk5 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 383 to 320 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk5_s cn30xx; - struct cvmx_pcmx_txmsk5_s cn31xx; - struct cvmx_pcmx_txmsk5_s cn50xx; -} cvmx_pcmx_txmsk5_t; - - -/** - * cvmx_pcm#_txmsk6 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 447 to 384 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk6_s cn30xx; - struct cvmx_pcmx_txmsk6_s cn31xx; - struct cvmx_pcmx_txmsk6_s cn50xx; -} cvmx_pcmx_txmsk6_t; - - -/** - * cvmx_pcm#_txmsk7 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txmsk7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t mask : 64; /**< Transmit mask bits for slots 511 to 448 - (1 means transmit, 0 means don't transmit) */ -#else - uint64_t mask : 64; -#endif - } s; - struct cvmx_pcmx_txmsk7_s cn30xx; - struct cvmx_pcmx_txmsk7_s cn31xx; - struct cvmx_pcmx_txmsk7_s cn50xx; -} cvmx_pcmx_txmsk7_t; - - -/** - * cvmx_pcm#_txstart - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcmx_txstart_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 33; /**< Starting address for the transmit memory region */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t addr : 33; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_pcmx_txstart_s cn30xx; - struct cvmx_pcmx_txstart_s cn31xx; - struct cvmx_pcmx_txstart_s cn50xx; -} cvmx_pcmx_txstart_t; - - -/** - * cvmx_pcm_clk#_cfg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcm_clkx_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fsyncgood : 1; /**< FSYNC status - If 1, the last frame had a correctly positioned - fsync pulse - If 0, none/extra fsync pulse seen on most recent - frame - NOTE: this is intended for startup. the FSYNCEXTRA - and FSYNCMISSING interrupts are intended for - detecting loss of sync during normal operation. */ - uint64_t reserved_48_62 : 15; - uint64_t fsyncsamp : 16; /**< Number of ECLKs from internal BCLK edge to - sample FSYNC - NOTE: used to sync to the start of a frame and to - check for FSYNC errors. */ - uint64_t reserved_26_31 : 6; - uint64_t fsynclen : 5; /**< Number of 1/2 BCLKs FSYNC is asserted for - NOTE: only used when GEN==1 */ - uint64_t fsyncloc : 5; /**< FSYNC location, in 1/2 BCLKS before timeslot 0, - bit 0. - NOTE: also used to detect framing errors and - therefore must have a correct value even if GEN==0 */ - uint64_t numslots : 10; /**< Number of 8-bit slots in a frame - NOTE: this, along with EXTRABIT and Fbclk - determines FSYNC frequency when GEN == 1 - NOTE: also used to detect framing errors and - therefore must have a correct value even if GEN==0 */ - uint64_t extrabit : 1; /**< If 0, no frame bit - If 1, add one extra bit time for frame bit - NOTE: if GEN == 1, then FSYNC will be delayed one - extra bit time. - NOTE: also used to detect framing errors and - therefore must have a correct value even if GEN==0 - NOTE: the extra bit comes from the LSB/MSB of the - first byte of the frame in the transmit memory - region. LSB vs MSB is determined from the setting - of PCMn_TDM_CFG[LSBFIRST]. */ - uint64_t bitlen : 2; /**< Number of BCLKs in a bit time. - 0 : 1 BCLK - 1 : 2 BCLKs - 2 : 4 BCLKs - 3 : operation undefined */ - uint64_t bclkpol : 1; /**< If 0, BCLK rise edge is start of bit time - If 1, BCLK fall edge is start of bit time - NOTE: also used to detect framing errors and - therefore must have a correct value even if GEN==0 */ - uint64_t fsyncpol : 1; /**< If 0, FSYNC idles low, asserts high - If 1, FSYNC idles high, asserts low - NOTE: also used to detect framing errors and - therefore must have a correct value even if GEN==0 */ - uint64_t ena : 1; /**< If 0, Clock receiving logic is doing nothing - 1, Clock receiving logic is looking for sync */ -#else - uint64_t ena : 1; - uint64_t fsyncpol : 1; - uint64_t bclkpol : 1; - uint64_t bitlen : 2; - uint64_t extrabit : 1; - uint64_t numslots : 10; - uint64_t fsyncloc : 5; - uint64_t fsynclen : 5; - uint64_t reserved_26_31 : 6; - uint64_t fsyncsamp : 16; - uint64_t reserved_48_62 : 15; - uint64_t fsyncgood : 1; -#endif - } s; - struct cvmx_pcm_clkx_cfg_s cn30xx; - struct cvmx_pcm_clkx_cfg_s cn31xx; - struct cvmx_pcm_clkx_cfg_s cn50xx; -} cvmx_pcm_clkx_cfg_t; - - -/** - * cvmx_pcm_clk#_dbg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcm_clkx_dbg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t debuginfo : 64; /**< Miscellaneous debug information */ -#else - uint64_t debuginfo : 64; -#endif - } s; - struct cvmx_pcm_clkx_dbg_s cn30xx; - struct cvmx_pcm_clkx_dbg_s cn31xx; - struct cvmx_pcm_clkx_dbg_s cn50xx; -} cvmx_pcm_clkx_dbg_t; - - -/** - * cvmx_pcm_clk#_gen - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcm_clkx_gen_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t deltasamp : 16; /**< Signed number of ECLKs to move sampled BCLK edge - NOTE: the complete number of ECLKs to move is: - NUMSAMP + 2 + 1 + DELTASAMP - NUMSAMP to compensate for sampling delay - + 2 to compensate for dual-rank synchronizer - + 1 for uncertainity - + DELTASAMP to CMA/debugging */ - uint64_t numsamp : 16; /**< Number of ECLK samples to detect BCLK change when - receiving clock. */ - uint64_t n : 32; /**< Determines BCLK frequency when generating clock - NOTE: Fbclk = Feclk * N / 2^32 - N = (Fbclk / Feclk) * 2^32 - NOTE: writing N == 0 stops the clock generator, and - causes bclk and fsync to be RECEIVED */ -#else - uint64_t n : 32; - uint64_t numsamp : 16; - uint64_t deltasamp : 16; -#endif - } s; - struct cvmx_pcm_clkx_gen_s cn30xx; - struct cvmx_pcm_clkx_gen_s cn31xx; - struct cvmx_pcm_clkx_gen_s cn50xx; -} cvmx_pcm_clkx_gen_t; - - -/** - * cvmx_pcs#_an#_adv_reg - * - * Bits [15:9] in the Status Register indicate ability to operate as per those signalling specification, - * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0, indicating - * that the chip cannot operate in the corresponding modes. - * - * Bit [4] RM_FLT is a don't care when the selected mode is SGMII. - * - * - * - * PCS_AN_ADV_REG = AN Advertisement Register4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_anx_adv_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t np : 1; /**< Always 0, no next page capability supported */ - uint64_t reserved_14_14 : 1; - uint64_t rem_flt : 2; /**< [<13>,<12>] - 0 0 Link OK XMIT=DATA - 0 1 Link failure (loss of sync, XMIT!= DATA) - 1 0 local device Offline - 1 1 AN Error failure to complete AN - AN Error is set if resolution function - precludes operation with link partner */ - uint64_t reserved_9_11 : 3; - uint64_t pause : 2; /**< [<8>, <7>] Pause frame flow capability across link - Exchanged during Auto Negotiation - 0 0 No Pause - 0 1 Symmetric pause - 1 0 Asymmetric Pause - 1 1 Both symm and asymm pause to local device */ - uint64_t hfd : 1; /**< 1 means local device Half Duplex capable */ - uint64_t fd : 1; /**< 1 means local device Full Duplex capable */ - uint64_t reserved_0_4 : 5; -#else - uint64_t reserved_0_4 : 5; - uint64_t fd : 1; - uint64_t hfd : 1; - uint64_t pause : 2; - uint64_t reserved_9_11 : 3; - uint64_t rem_flt : 2; - uint64_t reserved_14_14 : 1; - uint64_t np : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_anx_adv_reg_s cn52xx; - struct cvmx_pcsx_anx_adv_reg_s cn52xxp1; - struct cvmx_pcsx_anx_adv_reg_s cn56xx; - struct cvmx_pcsx_anx_adv_reg_s cn56xxp1; -} cvmx_pcsx_anx_adv_reg_t; - - -/** - * cvmx_pcs#_an#_ext_st_reg - * - * NOTE: - * an_results_reg is don't care when AN_OVRD is set to 1. If AN_OVRD=0 and AN_CPT=1 - * the an_results_reg is valid. - * - * - * PCS_AN_EXT_ST_REG = AN Extended Status Register15 - * as per IEEE802.3 Clause 22 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_anx_ext_st_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t thou_xfd : 1; /**< 1 means PHY is 1000BASE-X Full Dup capable */ - uint64_t thou_xhd : 1; /**< 1 means PHY is 1000BASE-X Half Dup capable */ - uint64_t thou_tfd : 1; /**< 1 means PHY is 1000BASE-T Full Dup capable */ - uint64_t thou_thd : 1; /**< 1 means PHY is 1000BASE-T Half Dup capable */ - uint64_t reserved_0_11 : 12; -#else - uint64_t reserved_0_11 : 12; - uint64_t thou_thd : 1; - uint64_t thou_tfd : 1; - uint64_t thou_xhd : 1; - uint64_t thou_xfd : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_anx_ext_st_reg_s cn52xx; - struct cvmx_pcsx_anx_ext_st_reg_s cn52xxp1; - struct cvmx_pcsx_anx_ext_st_reg_s cn56xx; - struct cvmx_pcsx_anx_ext_st_reg_s cn56xxp1; -} cvmx_pcsx_anx_ext_st_reg_t; - - -/** - * cvmx_pcs#_an#_lp_abil_reg - * - * PCS_AN_LP_ABIL_REG = AN link Partner Ability Register5 - * as per IEEE802.3 Clause 37 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_anx_lp_abil_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t np : 1; /**< 1=lp next page capable, 0=lp not next page capable */ - uint64_t ack : 1; /**< 1=Acknowledgement received */ - uint64_t rem_flt : 2; /**< [<13>,<12>] Link Partner's link status - 0 0 Link OK - 0 1 Offline - 1 0 Link failure - 1 1 AN Error */ - uint64_t reserved_9_11 : 3; - uint64_t pause : 2; /**< [<8>, <7>] Link Partner Pause setting - 0 0 No Pause - 0 1 Symmetric pause - 1 0 Asymmetric Pause - 1 1 Both symm and asymm pause to local device */ - uint64_t hfd : 1; /**< 1 means link partner Half Duplex capable */ - uint64_t fd : 1; /**< 1 means link partner Full Duplex capable */ - uint64_t reserved_0_4 : 5; -#else - uint64_t reserved_0_4 : 5; - uint64_t fd : 1; - uint64_t hfd : 1; - uint64_t pause : 2; - uint64_t reserved_9_11 : 3; - uint64_t rem_flt : 2; - uint64_t ack : 1; - uint64_t np : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_anx_lp_abil_reg_s cn52xx; - struct cvmx_pcsx_anx_lp_abil_reg_s cn52xxp1; - struct cvmx_pcsx_anx_lp_abil_reg_s cn56xx; - struct cvmx_pcsx_anx_lp_abil_reg_s cn56xxp1; -} cvmx_pcsx_anx_lp_abil_reg_t; - - -/** - * cvmx_pcs#_an#_results_reg - * - * PCS_AN_RESULTS_REG = AN Results Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_anx_results_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t pause : 2; /**< [<6>, <5>] PAUSE Selection (Don't care for SGMII) - 0 0 Disable Pause, TX and RX - 0 1 Enable pause frames RX only - 1 0 Enable Pause frames TX only - 1 1 Enable pause frames TX and RX */ - uint64_t spd : 2; /**< [<4>, <3>] Link Speed Selection - 0 0 10Mb/s - 0 1 100Mb/s - 1 0 1000Mb/s - 1 1 RSVD */ - uint64_t an_cpt : 1; /**< 1=AN Completed, 0=AN not completed or failed */ - uint64_t dup : 1; /**< 1=Full Duplex, 0=Half Duplex */ - uint64_t link_ok : 1; /**< 1=Link up(OK), 0=Link down */ -#else - uint64_t link_ok : 1; - uint64_t dup : 1; - uint64_t an_cpt : 1; - uint64_t spd : 2; - uint64_t pause : 2; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_pcsx_anx_results_reg_s cn52xx; - struct cvmx_pcsx_anx_results_reg_s cn52xxp1; - struct cvmx_pcsx_anx_results_reg_s cn56xx; - struct cvmx_pcsx_anx_results_reg_s cn56xxp1; -} cvmx_pcsx_anx_results_reg_t; - - -/** - * cvmx_pcs#_int#_en_reg - * - * NOTE: RXERR and TXERR conditions to be discussed with Dan before finalising - * - * - * PCS Interrupt Enable Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_intx_en_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t dup : 1; /**< Enable duplex mode changed interrupt */ - uint64_t sync_bad_en : 1; /**< Enable rx sync st machine in bad state interrupt */ - uint64_t an_bad_en : 1; /**< Enable AN state machine bad state interrupt */ - uint64_t rxlock_en : 1; /**< Enable rx code group sync/bit lock failure interrupt */ - uint64_t rxbad_en : 1; /**< Enable rx state machine in bad state interrupt */ - uint64_t rxerr_en : 1; /**< Enable RX error condition interrupt */ - uint64_t txbad_en : 1; /**< Enable tx state machine in bad state interrupt */ - uint64_t txfifo_en : 1; /**< Enable tx fifo overflow condition interrupt */ - uint64_t txfifu_en : 1; /**< Enable tx fifo underflow condition intrrupt */ - uint64_t an_err_en : 1; /**< Enable AN Error condition interrupt */ - uint64_t xmit_en : 1; /**< Enable XMIT variable state change interrupt */ - uint64_t lnkspd_en : 1; /**< Enable Link Speed has changed interrupt */ -#else - uint64_t lnkspd_en : 1; - uint64_t xmit_en : 1; - uint64_t an_err_en : 1; - uint64_t txfifu_en : 1; - uint64_t txfifo_en : 1; - uint64_t txbad_en : 1; - uint64_t rxerr_en : 1; - uint64_t rxbad_en : 1; - uint64_t rxlock_en : 1; - uint64_t an_bad_en : 1; - uint64_t sync_bad_en : 1; - uint64_t dup : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_pcsx_intx_en_reg_s cn52xx; - struct cvmx_pcsx_intx_en_reg_s cn52xxp1; - struct cvmx_pcsx_intx_en_reg_s cn56xx; - struct cvmx_pcsx_intx_en_reg_s cn56xxp1; -} cvmx_pcsx_intx_en_reg_t; - - -/** - * cvmx_pcs#_int#_reg - * - * SGMII bit [12] is really a misnomer, it is a decode of pi_qlm_cfg pins to indicate SGMII or 1000Base-X modes. - * - * Note: MODE bit - * When MODE=1, 1000Base-X mode is selected. Auto negotiation will follow IEEE 802.3 clause 37. - * When MODE=0, SGMII mode is selected and the following note will apply. - * Repeat note from SGM_AN_ADV register - * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the MAC_PHY mode bit in misc_ctl_reg - * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit and [0] is always 1. - * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results. - * - * PCS Interrupt Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_intx_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t dup : 1; /**< Set whenever Duplex mode changes on the link */ - uint64_t sync_bad : 1; /**< Set by HW whenever rx sync st machine reaches a bad - state. Should never be set during normal operation */ - uint64_t an_bad : 1; /**< Set by HW whenever AN st machine reaches a bad - state. Should never be set during normal operation */ - uint64_t rxlock : 1; /**< Set by HW whenever code group Sync or bit lock - failure occurs - Cannot fire in loopback1 mode */ - uint64_t rxbad : 1; /**< Set by HW whenever rx st machine reaches a bad - state. Should never be set during normal operation */ - uint64_t rxerr : 1; /**< Set whenever RX receives a code group error in - 10 bit to 8 bit decode logic - Cannot fire in loopback1 mode */ - uint64_t txbad : 1; /**< Set by HW whenever tx st machine reaches a bad - state. Should never be set during normal operation */ - uint64_t txfifo : 1; /**< Set whenever HW detects a TX fifo overflow - condition */ - uint64_t txfifu : 1; /**< Set whenever HW detects a TX fifo underflowflow - condition */ - uint64_t an_err : 1; /**< AN Error, AN resolution function failed */ - uint64_t xmit : 1; /**< Set whenever HW detects a change in the XMIT - variable. XMIT variable states are IDLE, CONFIG and - DATA */ - uint64_t lnkspd : 1; /**< Set by HW whenever Link Speed has changed */ -#else - uint64_t lnkspd : 1; - uint64_t xmit : 1; - uint64_t an_err : 1; - uint64_t txfifu : 1; - uint64_t txfifo : 1; - uint64_t txbad : 1; - uint64_t rxerr : 1; - uint64_t rxbad : 1; - uint64_t rxlock : 1; - uint64_t an_bad : 1; - uint64_t sync_bad : 1; - uint64_t dup : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_pcsx_intx_reg_s cn52xx; - struct cvmx_pcsx_intx_reg_s cn52xxp1; - struct cvmx_pcsx_intx_reg_s cn56xx; - struct cvmx_pcsx_intx_reg_s cn56xxp1; -} cvmx_pcsx_intx_reg_t; - - -/** - * cvmx_pcs#_link#_timer_count_reg - * - * PCS_LINK_TIMER_COUNT_REG = 1.6ms nominal link timer register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_linkx_timer_count_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t count : 16; /**< (core clock period times 1024) times "COUNT" should - be 1.6ms(SGMII)/10ms(otherwise) which is the link - timer used in auto negotiation. - Reset assums a 700MHz eclk for 1.6ms link timer */ -#else - uint64_t count : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_linkx_timer_count_reg_s cn52xx; - struct cvmx_pcsx_linkx_timer_count_reg_s cn52xxp1; - struct cvmx_pcsx_linkx_timer_count_reg_s cn56xx; - struct cvmx_pcsx_linkx_timer_count_reg_s cn56xxp1; -} cvmx_pcsx_linkx_timer_count_reg_t; - - -/** - * cvmx_pcs#_log_anl#_reg - * - * PCS Logic Analyzer Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_log_anlx_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t lafifovfl : 1; /**< 1=logic analyser fif overflowed during packetization - Write 1 to clear this bit */ - uint64_t la_en : 1; /**< 1= Logic Analyzer enabled, 0=Logic Analyzer disabled */ - uint64_t pkt_sz : 2; /**< [<1>, <0>] Logic Analyzer Packet Size - 0 0 Packet size 1k bytes - 0 1 Packet size 4k bytes - 1 0 Packet size 8k bytes - 1 1 Packet size 16k bytes */ -#else - uint64_t pkt_sz : 2; - uint64_t la_en : 1; - uint64_t lafifovfl : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pcsx_log_anlx_reg_s cn52xx; - struct cvmx_pcsx_log_anlx_reg_s cn52xxp1; - struct cvmx_pcsx_log_anlx_reg_s cn56xx; - struct cvmx_pcsx_log_anlx_reg_s cn56xxp1; -} cvmx_pcsx_log_anlx_reg_t; - - -/** - * cvmx_pcs#_misc#_ctl_reg - * - * SGMII Misc Control Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_miscx_ctl_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t sgmii : 1; /**< 1=SGMII or 1000Base-X mode selected, - 0=XAUI or PCIE mode selected - This bit represents pi_qlm1/3_cfg[1:0] pin status */ - uint64_t gmxeno : 1; /**< GMX Enable override. When set to 1, forces GMX to - appear disabled. The enable/disable status of GMX - is checked only at SOP of every packet. */ - uint64_t loopbck2 : 1; /**< Sets external loopback mode to return rx data back - out via tx data path. 0=no loopback, 1=loopback */ - uint64_t mac_phy : 1; /**< 0=MAC, 1=PHY decides the tx_config_reg value to be - sent during auto negotiation. - See SGMII spec ENG-46158 from CISCO */ - uint64_t mode : 1; /**< 0=SGMII or 1= 1000 Base X */ - uint64_t an_ovrd : 1; /**< 0=disable, 1= enable over ride AN results - Auto negotiation is allowed to happen but the - results are ignored when set. Duplex and Link speed - values are set from the pcs_mr_ctrl reg */ - uint64_t samp_pt : 7; /**< Byte# in elongated frames for 10/100Mb/s operation - for data sampling on RX side in PCS. - Recommended values are 0x5 for 100Mb/s operation - and 0x32 for 10Mb/s operation. - For 10Mb/s operaton this field should be set to a - value less than 99 and greater than 0. If set out - of this range a value of 50 will be used for actual - sampling internally without affecting the CSR field - For 100Mb/s operation this field should be set to a - value less than 9 and greater than 0. If set out of - this range a value of 5 will be used for actual - sampling internally without affecting the CSR field */ -#else - uint64_t samp_pt : 7; - uint64_t an_ovrd : 1; - uint64_t mode : 1; - uint64_t mac_phy : 1; - uint64_t loopbck2 : 1; - uint64_t gmxeno : 1; - uint64_t sgmii : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pcsx_miscx_ctl_reg_s cn52xx; - struct cvmx_pcsx_miscx_ctl_reg_s cn52xxp1; - struct cvmx_pcsx_miscx_ctl_reg_s cn56xx; - struct cvmx_pcsx_miscx_ctl_reg_s cn56xxp1; -} cvmx_pcsx_miscx_ctl_reg_t; - - -/** - * cvmx_pcs#_mr#_control_reg - * - * PCS_MR_CONTROL_REG = Control Register0 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_mrx_control_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t reset : 1; /**< 1=SW Reset, the bit will return to 0 after pcs has - been reset. Takes 32 eclk cycles to reset pcs */ - uint64_t loopbck1 : 1; /**< 0=normal operation, 1=loopback. The loopback mode - will return(loopback) tx data from GMII tx back to - GMII rx interface. The loopback happens in the pcs - module. Auto Negotiation will be disabled even if - the AN_EN bit is set, during loopback */ - uint64_t spdlsb : 1; /**< See bit 6 description */ - uint64_t an_en : 1; /**< 1=AN Enable, 0=AN Disable */ - uint64_t pwr_dn : 1; /**< 1=Power Down(HW reset), 0=Normal operation */ - uint64_t reserved_10_10 : 1; - uint64_t rst_an : 1; /**< If bit 12 is set and bit 3 of status reg is 1 - Auto Negotiation begins. Else,SW writes are ignored - and this bit remians at 0. This bit clears itself - to 0, when AN starts. */ - uint64_t dup : 1; /**< 1=full duplex, 0=half duplex; effective only if AN - disabled. If status register bits [15:9] and and - extended status reg bits [15:12] allow only one - duplex mode|, this bit will correspond to that - value and any attempt to write will be ignored. */ - uint64_t coltst : 1; /**< 1=enable COL signal test, 0=disable test - During COL test, the COL signal will reflect the - GMII TX_EN signal with less than 16BT delay */ - uint64_t spdmsb : 1; /**< [<6>, <13>]Link Speed effective only if AN disabled - 0 0 10Mb/s - 0 1 100Mb/s - 1 0 1000Mb/s - 1 1 RSVD */ - uint64_t uni : 1; /**< Unidirectional (Std 802.3-2005, Clause 66.2) - This bit will override the AN_EN bit and disable - auto-negotiation variable mr_an_enable, when set - Used in both 1000Base-X and SGMII modes */ - uint64_t reserved_0_4 : 5; -#else - uint64_t reserved_0_4 : 5; - uint64_t uni : 1; - uint64_t spdmsb : 1; - uint64_t coltst : 1; - uint64_t dup : 1; - uint64_t rst_an : 1; - uint64_t reserved_10_10 : 1; - uint64_t pwr_dn : 1; - uint64_t an_en : 1; - uint64_t spdlsb : 1; - uint64_t loopbck1 : 1; - uint64_t reset : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_mrx_control_reg_s cn52xx; - struct cvmx_pcsx_mrx_control_reg_s cn52xxp1; - struct cvmx_pcsx_mrx_control_reg_s cn56xx; - struct cvmx_pcsx_mrx_control_reg_s cn56xxp1; -} cvmx_pcsx_mrx_control_reg_t; - - -/** - * cvmx_pcs#_mr#_status_reg - * - * NOTE: - * Whenever AN_EN bit[12] is set, Auto negotiation is allowed to happen. The results - * of the auto negotiation process set the fields in the AN_RESULTS reg. When AN_EN is not set, - * AN_RESULTS reg is don't care. The effective SPD, DUP etc.. get their values - * from the pcs_mr_ctrl reg. - * - * PCS_MR_STATUS_REG = Status Register1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_mrx_status_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t hun_t4 : 1; /**< 1 means 100Base-T4 capable */ - uint64_t hun_xfd : 1; /**< 1 means 100Base-X Full Duplex */ - uint64_t hun_xhd : 1; /**< 1 means 100Base-X Half Duplex */ - uint64_t ten_fd : 1; /**< 1 means 10Mb/s Full Duplex */ - uint64_t ten_hd : 1; /**< 1 means 10Mb/s Half Duplex */ - uint64_t hun_t2fd : 1; /**< 1 means 100Base-T2 Full Duplex */ - uint64_t hun_t2hd : 1; /**< 1 means 100Base-T2 Half Duplex */ - uint64_t ext_st : 1; /**< 1 means extended status info in reg15 */ - uint64_t reserved_7_7 : 1; - uint64_t prb_sup : 1; /**< 1 means able to work without preamble bytes at the - beginning of frames. 0 means not able to accept - frames without preamble bytes preceding them. */ - uint64_t an_cpt : 1; /**< 1 means Auto Negotiation is complete and the - contents of the an_results_reg are valid. */ - uint64_t rm_flt : 1; /**< Set to 1 when remote flt condition occurs. This bit - implements a latching Hi behavior. It is cleared by - SW read of this reg or when reset bit [15] in - Control Reg is asserted. - See an adv reg[13:12] for flt conditions */ - uint64_t an_abil : 1; /**< 1 means Auto Negotiation capable */ - uint64_t lnk_st : 1; /**< 1=link up, 0=link down. Set during AN process - Set whenever XMIT=DATA. Latching Lo behavior when - link goes down. Link down value of the bit stays - low until SW reads the reg. */ - uint64_t reserved_1_1 : 1; - uint64_t extnd : 1; /**< Always 0, no extended capability regs present */ -#else - uint64_t extnd : 1; - uint64_t reserved_1_1 : 1; - uint64_t lnk_st : 1; - uint64_t an_abil : 1; - uint64_t rm_flt : 1; - uint64_t an_cpt : 1; - uint64_t prb_sup : 1; - uint64_t reserved_7_7 : 1; - uint64_t ext_st : 1; - uint64_t hun_t2hd : 1; - uint64_t hun_t2fd : 1; - uint64_t ten_hd : 1; - uint64_t ten_fd : 1; - uint64_t hun_xhd : 1; - uint64_t hun_xfd : 1; - uint64_t hun_t4 : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_mrx_status_reg_s cn52xx; - struct cvmx_pcsx_mrx_status_reg_s cn52xxp1; - struct cvmx_pcsx_mrx_status_reg_s cn56xx; - struct cvmx_pcsx_mrx_status_reg_s cn56xxp1; -} cvmx_pcsx_mrx_status_reg_t; - - -/** - * cvmx_pcs#_rx#_states_reg - * - * PCS_RX_STATES_REG = RX State Machines states register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_rxx_states_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t rx_bad : 1; /**< Receive state machine in an illegal state */ - uint64_t rx_st : 5; /**< Receive state machine state */ - uint64_t sync_bad : 1; /**< Receive synchronization SM in an illegal state */ - uint64_t sync : 4; /**< Receive synchronization SM state */ - uint64_t an_bad : 1; /**< Auto Negotiation state machine in an illegal state */ - uint64_t an_st : 4; /**< Auto Negotiation state machine state */ -#else - uint64_t an_st : 4; - uint64_t an_bad : 1; - uint64_t sync : 4; - uint64_t sync_bad : 1; - uint64_t rx_st : 5; - uint64_t rx_bad : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_rxx_states_reg_s cn52xx; - struct cvmx_pcsx_rxx_states_reg_s cn52xxp1; - struct cvmx_pcsx_rxx_states_reg_s cn56xx; - struct cvmx_pcsx_rxx_states_reg_s cn56xxp1; -} cvmx_pcsx_rxx_states_reg_t; - - -/** - * cvmx_pcs#_rx#_sync_reg - * - * Note: - * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after code grp synchronization is achieved. - * - * - * PCS_RX_SYNC_REG = Code Group synchronization reg - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_rxx_sync_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t sync : 1; /**< 1 means code group synchronization achieved */ - uint64_t bit_lock : 1; /**< 1 means bit lock achieved */ -#else - uint64_t bit_lock : 1; - uint64_t sync : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pcsx_rxx_sync_reg_s cn52xx; - struct cvmx_pcsx_rxx_sync_reg_s cn52xxp1; - struct cvmx_pcsx_rxx_sync_reg_s cn56xx; - struct cvmx_pcsx_rxx_sync_reg_s cn56xxp1; -} cvmx_pcsx_rxx_sync_reg_t; - - -/** - * cvmx_pcs#_sgm#_an_adv_reg - * - * SGMII AN Advertisement Register (sent out as tx_config_reg) - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_sgmx_an_adv_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t link : 1; /**< Link status 1 Link Up, 0 Link Down */ - uint64_t ack : 1; /**< Auto negotiation ack */ - uint64_t reserved_13_13 : 1; - uint64_t dup : 1; /**< Duplex mode 1=full duplex, 0=half duplex */ - uint64_t speed : 2; /**< Link Speed - 0 0 10Mb/s - 0 1 100Mb/s - 1 0 1000Mb/s - 1 1 RSVD */ - uint64_t reserved_1_9 : 9; - uint64_t one : 1; /**< Always set to match tx_config_reg<0> */ -#else - uint64_t one : 1; - uint64_t reserved_1_9 : 9; - uint64_t speed : 2; - uint64_t dup : 1; - uint64_t reserved_13_13 : 1; - uint64_t ack : 1; - uint64_t link : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xx; - struct cvmx_pcsx_sgmx_an_adv_reg_s cn52xxp1; - struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xx; - struct cvmx_pcsx_sgmx_an_adv_reg_s cn56xxp1; -} cvmx_pcsx_sgmx_an_adv_reg_t; - - -/** - * cvmx_pcs#_sgm#_lp_adv_reg - * - * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the MAC_PHY mode bit in misc_ctl_reg - * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit and [0] is always 1. - * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results. - * - * SGMII LP Advertisement Register (received as rx_config_reg) - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_sgmx_lp_adv_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t link : 1; /**< Link status 1 Link Up, 0 Link Down */ - uint64_t reserved_13_14 : 2; - uint64_t dup : 1; /**< Duplex mode 1=full duplex, 0=half duplex */ - uint64_t speed : 2; /**< Link Speed - 0 0 10Mb/s - 0 1 100Mb/s - 1 0 1000Mb/s - 1 1 RSVD */ - uint64_t reserved_1_9 : 9; - uint64_t one : 1; /**< Always set to match tx_config_reg<0> */ -#else - uint64_t one : 1; - uint64_t reserved_1_9 : 9; - uint64_t speed : 2; - uint64_t dup : 1; - uint64_t reserved_13_14 : 2; - uint64_t link : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xx; - struct cvmx_pcsx_sgmx_lp_adv_reg_s cn52xxp1; - struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xx; - struct cvmx_pcsx_sgmx_lp_adv_reg_s cn56xxp1; -} cvmx_pcsx_sgmx_lp_adv_reg_t; - - -/** - * cvmx_pcs#_tx#_states_reg - * - * PCS_TX_STATES_REG = TX State Machines states register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_txx_states_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t xmit : 2; /**< 0=undefined, 1=config, 2=idle, 3=data */ - uint64_t tx_bad : 1; /**< Xmit state machine in a bad state */ - uint64_t ord_st : 4; /**< Xmit ordered set state machine state */ -#else - uint64_t ord_st : 4; - uint64_t tx_bad : 1; - uint64_t xmit : 2; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_pcsx_txx_states_reg_s cn52xx; - struct cvmx_pcsx_txx_states_reg_s cn52xxp1; - struct cvmx_pcsx_txx_states_reg_s cn56xx; - struct cvmx_pcsx_txx_states_reg_s cn56xxp1; -} cvmx_pcsx_txx_states_reg_t; - - -/** - * cvmx_pcs#_tx_rx#_polarity_reg - * - * PCS_POLARITY_REG = TX_RX polarity reg - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsx_tx_rxx_polarity_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t rxovrd : 1; /**< When 0, <2> determines polarity - when 1, <1> determines polarity */ - uint64_t autorxpl : 1; /**< Auto RX polarity detected. 1=inverted, 0=normal - This bit always represents the correct rx polarity - setting needed for successful rx path operartion, - once a successful code group sync is obtained */ - uint64_t rxplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ - uint64_t txplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ -#else - uint64_t txplrt : 1; - uint64_t rxplrt : 1; - uint64_t autorxpl : 1; - uint64_t rxovrd : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xx; - struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xxp1; - struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xx; - struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xxp1; -} cvmx_pcsx_tx_rxx_polarity_reg_t; - - -/** - * cvmx_pcsx#_10gbx_status_reg - * - * PCSX_10GBX_STATUS_REG = 10gbx_status_reg - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_10gbx_status_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t alignd : 1; /**< 1=Lane alignment achieved, 0=Lanes not aligned */ - uint64_t pattst : 1; /**< Always at 0, no pattern testing capability */ - uint64_t reserved_4_10 : 7; - uint64_t l3sync : 1; /**< 1=Rcv lane 3 code grp synchronized, 0=not sync'ed */ - uint64_t l2sync : 1; /**< 1=Rcv lane 2 code grp synchronized, 0=not sync'ed */ - uint64_t l1sync : 1; /**< 1=Rcv lane 1 code grp synchronized, 0=not sync'ed */ - uint64_t l0sync : 1; /**< 1=Rcv lane 0 code grp synchronized, 0=not sync'ed */ -#else - uint64_t l0sync : 1; - uint64_t l1sync : 1; - uint64_t l2sync : 1; - uint64_t l3sync : 1; - uint64_t reserved_4_10 : 7; - uint64_t pattst : 1; - uint64_t alignd : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pcsxx_10gbx_status_reg_s cn52xx; - struct cvmx_pcsxx_10gbx_status_reg_s cn52xxp1; - struct cvmx_pcsxx_10gbx_status_reg_s cn56xx; - struct cvmx_pcsxx_10gbx_status_reg_s cn56xxp1; -} cvmx_pcsxx_10gbx_status_reg_t; - - -/** - * cvmx_pcsx#_bist_status_reg - * - * NOTE: Logic Analyzer is enabled with LA_EN for xaui only. PKT_SZ is effective only when LA_EN=1 - * For normal operation(xaui), this bit must be 0. The dropped lane is used to send rxc[3:0]. - * See pcs.csr for sgmii/1000Base-X logic analyzer mode. - * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt - * - * - * PCSX Bist Status Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_bist_status_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t bist_status : 1; /**< 1=bist failure, 0=bisted memory ok or bist in progress - pcsx.tx_sm.drf8x36m1_async_bist */ -#else - uint64_t bist_status : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_pcsxx_bist_status_reg_s cn52xx; - struct cvmx_pcsxx_bist_status_reg_s cn52xxp1; - struct cvmx_pcsxx_bist_status_reg_s cn56xx; - struct cvmx_pcsxx_bist_status_reg_s cn56xxp1; -} cvmx_pcsxx_bist_status_reg_t; - - -/** - * cvmx_pcsx#_bit_lock_status_reg - * - * LN_SWAP for XAUI is to simplify interconnection layout between devices - * - * - * PCSX Bit Lock Status Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_bit_lock_status_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t bitlck3 : 1; /**< Receive Lane 3 bit lock status */ - uint64_t bitlck2 : 1; /**< Receive Lane 2 bit lock status */ - uint64_t bitlck1 : 1; /**< Receive Lane 1 bit lock status */ - uint64_t bitlck0 : 1; /**< Receive Lane 0 bit lock status */ -#else - uint64_t bitlck0 : 1; - uint64_t bitlck1 : 1; - uint64_t bitlck2 : 1; - uint64_t bitlck3 : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pcsxx_bit_lock_status_reg_s cn52xx; - struct cvmx_pcsxx_bit_lock_status_reg_s cn52xxp1; - struct cvmx_pcsxx_bit_lock_status_reg_s cn56xx; - struct cvmx_pcsxx_bit_lock_status_reg_s cn56xxp1; -} cvmx_pcsxx_bit_lock_status_reg_t; - - -/** - * cvmx_pcsx#_control1_reg - * - * NOTE: Logic Analyzer is enabled with LA_EN for the specified PCS lane only. PKT_SZ is effective only when LA_EN=1 - * For normal operation(sgmii or 1000Base-X), this bit must be 0. - * See pcsx.csr for xaui logic analyzer mode. - * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt - * - * - * PCSX regs follow IEEE Std 802.3-2005, Section: 45.2.3 - * - * - * PCSX_CONTROL1_REG = Control Register1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_control1_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t reset : 1; /**< 1=SW PCSX Reset, the bit will return to 0 after pcs - has been reset. Takes 32 eclk cycles to reset pcs - 0=Normal operation */ - uint64_t loopbck1 : 1; /**< 0=normal operation, 1=internal loopback mode - xgmii tx data received from gmx tx port is returned - back into gmx, xgmii rx port. */ - uint64_t spdsel1 : 1; /**< See bit 6 description */ - uint64_t reserved_12_12 : 1; - uint64_t lo_pwr : 1; /**< The status of this bit has no effect on operation - of the PCS sublayer. */ - uint64_t reserved_7_10 : 4; - uint64_t spdsel0 : 1; /**< SPDSEL1 and SPDSEL0 are always at 1'b1. Write has - no effect. - [<6>, <13>]Link Speed selection - 1 1 Bits 5:2 select speed */ - uint64_t spd : 4; /**< Always select 10Gb/s, writes have no effect */ - uint64_t reserved_0_1 : 2; -#else - uint64_t reserved_0_1 : 2; - uint64_t spd : 4; - uint64_t spdsel0 : 1; - uint64_t reserved_7_10 : 4; - uint64_t lo_pwr : 1; - uint64_t reserved_12_12 : 1; - uint64_t spdsel1 : 1; - uint64_t loopbck1 : 1; - uint64_t reset : 1; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsxx_control1_reg_s cn52xx; - struct cvmx_pcsxx_control1_reg_s cn52xxp1; - struct cvmx_pcsxx_control1_reg_s cn56xx; - struct cvmx_pcsxx_control1_reg_s cn56xxp1; -} cvmx_pcsxx_control1_reg_t; - - -/** - * cvmx_pcsx#_control2_reg - * - * PCSX_CONTROL2_REG = Control Register2 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_control2_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t type : 2; /**< Always 2'b01, 10GBASE-X only supported */ -#else - uint64_t type : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pcsxx_control2_reg_s cn52xx; - struct cvmx_pcsxx_control2_reg_s cn52xxp1; - struct cvmx_pcsxx_control2_reg_s cn56xx; - struct cvmx_pcsxx_control2_reg_s cn56xxp1; -} cvmx_pcsxx_control2_reg_t; - - -/** - * cvmx_pcsx#_int_en_reg - * - * PCSX Interrupt Enable Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_int_en_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t algnlos_en : 1; /**< Enable ALGNLOS interrupt */ - uint64_t synlos_en : 1; /**< Enable SYNLOS interrupt */ - uint64_t bitlckls_en : 1; /**< Enable BITLCKLS interrupt */ - uint64_t rxsynbad_en : 1; /**< Enable RXSYNBAD interrupt */ - uint64_t rxbad_en : 1; /**< Enable RXBAD interrupt */ - uint64_t txflt_en : 1; /**< Enable TXFLT interrupt */ -#else - uint64_t txflt_en : 1; - uint64_t rxbad_en : 1; - uint64_t rxsynbad_en : 1; - uint64_t bitlckls_en : 1; - uint64_t synlos_en : 1; - uint64_t algnlos_en : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_pcsxx_int_en_reg_s cn52xx; - struct cvmx_pcsxx_int_en_reg_s cn52xxp1; - struct cvmx_pcsxx_int_en_reg_s cn56xx; - struct cvmx_pcsxx_int_en_reg_s cn56xxp1; -} cvmx_pcsxx_int_en_reg_t; - - -/** - * cvmx_pcsx#_int_reg - * - * PCSX Interrupt Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t algnlos : 1; /**< Set when XAUI lanes lose alignment */ - uint64_t synlos : 1; /**< Set when Code group sync lost on 1 or more lanes */ - uint64_t bitlckls : 1; /**< Set when Bit lock lost on 1 or more xaui lanes */ - uint64_t rxsynbad : 1; /**< Set when RX code grp sync st machine in bad state - in one of the 4 xaui lanes */ - uint64_t rxbad : 1; /**< Set when RX state machine in bad state */ - uint64_t txflt : 1; /**< None defined at this time, always 0x0 */ -#else - uint64_t txflt : 1; - uint64_t rxbad : 1; - uint64_t rxsynbad : 1; - uint64_t bitlckls : 1; - uint64_t synlos : 1; - uint64_t algnlos : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_pcsxx_int_reg_s cn52xx; - struct cvmx_pcsxx_int_reg_s cn52xxp1; - struct cvmx_pcsxx_int_reg_s cn56xx; - struct cvmx_pcsxx_int_reg_s cn56xxp1; -} cvmx_pcsxx_int_reg_t; - - -/** - * cvmx_pcsx#_log_anl_reg - * - * PCSX Logic Analyzer Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_log_anl_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t enc_mode : 1; /**< 1=send xaui encoded data, 0=send xaui raw data to GMX - See .../rtl/pcs/readme_logic_analyzer.txt for details */ - uint64_t drop_ln : 2; /**< xaui lane# to drop from logic analyzer packets - [<5>, <4>] Drop lane \# - 0 0 Drop lane 0 data - 0 1 Drop lane 1 data - 1 0 Drop lane 2 data - 1 1 Drop lane 3 data */ - uint64_t lafifovfl : 1; /**< 1=logic analyser fif overflowed one or more times - during packetization. - Write 1 to clear this bit */ - uint64_t la_en : 1; /**< 1= Logic Analyzer enabled, 0=Logic Analyzer disabled */ - uint64_t pkt_sz : 2; /**< [<1>, <0>] Logic Analyzer Packet Size - 0 0 Packet size 1k bytes - 0 1 Packet size 4k bytes - 1 0 Packet size 8k bytes - 1 1 Packet size 16k bytes */ -#else - uint64_t pkt_sz : 2; - uint64_t la_en : 1; - uint64_t lafifovfl : 1; - uint64_t drop_ln : 2; - uint64_t enc_mode : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_pcsxx_log_anl_reg_s cn52xx; - struct cvmx_pcsxx_log_anl_reg_s cn52xxp1; - struct cvmx_pcsxx_log_anl_reg_s cn56xx; - struct cvmx_pcsxx_log_anl_reg_s cn56xxp1; -} cvmx_pcsxx_log_anl_reg_t; - - -/** - * cvmx_pcsx#_misc_ctl_reg - * - * RX lane polarity vector [3:0] = XOR_RXPLRT<9:6> ^ [4[RXPLRT<1>]]; - * - * TX lane polarity vector [3:0] = XOR_TXPLRT<5:2> ^ [4[TXPLRT<0>]]; - * - * In short keep <1:0> to 2'b00, and use <5:2> and <9:6> fields to define per lane polarities - * - * - * - * PCSX Misc Control Register - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_misc_ctl_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t tx_swap : 1; /**< 0=do not swap xaui lanes going out to qlm's - 1=swap lanes 3 <-> 0 and 2 <-> 1 */ - uint64_t rx_swap : 1; /**< 0=do not swap xaui lanes coming in from qlm's - 1=swap lanes 3 <-> 0 and 2 <-> 1 */ - uint64_t xaui : 1; /**< 1=XAUI mode selected, 0=not XAUI mode selected - This bit represents pi_qlm1/3_cfg[1:0] pin status */ - uint64_t gmxeno : 1; /**< GMX port enable override, GMX en/dis status is held - during data packet reception. */ -#else - uint64_t gmxeno : 1; - uint64_t xaui : 1; - uint64_t rx_swap : 1; - uint64_t tx_swap : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pcsxx_misc_ctl_reg_s cn52xx; - struct cvmx_pcsxx_misc_ctl_reg_s cn52xxp1; - struct cvmx_pcsxx_misc_ctl_reg_s cn56xx; - struct cvmx_pcsxx_misc_ctl_reg_s cn56xxp1; -} cvmx_pcsxx_misc_ctl_reg_t; - - -/** - * cvmx_pcsx#_rx_sync_states_reg - * - * PCSX_RX_SYNC_STATES_REG = Receive Sync States Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_rx_sync_states_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t sync3st : 4; /**< Receive lane 3 code grp sync state machine state */ - uint64_t sync2st : 4; /**< Receive lane 2 code grp sync state machine state */ - uint64_t sync1st : 4; /**< Receive lane 1 code grp sync state machine state */ - uint64_t sync0st : 4; /**< Receive lane 0 code grp sync state machine state */ -#else - uint64_t sync0st : 4; - uint64_t sync1st : 4; - uint64_t sync2st : 4; - uint64_t sync3st : 4; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsxx_rx_sync_states_reg_s cn52xx; - struct cvmx_pcsxx_rx_sync_states_reg_s cn52xxp1; - struct cvmx_pcsxx_rx_sync_states_reg_s cn56xx; - struct cvmx_pcsxx_rx_sync_states_reg_s cn56xxp1; -} cvmx_pcsxx_rx_sync_states_reg_t; - - -/** - * cvmx_pcsx#_spd_abil_reg - * - * PCSX_SPD_ABIL_REG = Speed ability register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_spd_abil_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t tenpasst : 1; /**< Always 0, no 10PASS-TS/2BASE-TL capability support */ - uint64_t tengb : 1; /**< Always 1, 10Gb/s supported */ -#else - uint64_t tengb : 1; - uint64_t tenpasst : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pcsxx_spd_abil_reg_s cn52xx; - struct cvmx_pcsxx_spd_abil_reg_s cn52xxp1; - struct cvmx_pcsxx_spd_abil_reg_s cn56xx; - struct cvmx_pcsxx_spd_abil_reg_s cn56xxp1; -} cvmx_pcsxx_spd_abil_reg_t; - - -/** - * cvmx_pcsx#_status1_reg - * - * PCSX_STATUS1_REG = Status Register1 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_status1_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t flt : 1; /**< 1=Fault condition detected, 0=No fault condition - This bit is a logical OR of Status2 reg bits 11,10 */ - uint64_t reserved_3_6 : 4; - uint64_t rcv_lnk : 1; /**< 1=Receive Link up, 0=Receive Link down - Latching Low version of r_10gbx_status_reg[12], - Link down status continues until SW read. */ - uint64_t lpable : 1; /**< Always set to 1 for Low Power ablility indication */ - uint64_t reserved_0_0 : 1; -#else - uint64_t reserved_0_0 : 1; - uint64_t lpable : 1; - uint64_t rcv_lnk : 1; - uint64_t reserved_3_6 : 4; - uint64_t flt : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pcsxx_status1_reg_s cn52xx; - struct cvmx_pcsxx_status1_reg_s cn52xxp1; - struct cvmx_pcsxx_status1_reg_s cn56xx; - struct cvmx_pcsxx_status1_reg_s cn56xxp1; -} cvmx_pcsxx_status1_reg_t; - - -/** - * cvmx_pcsx#_status2_reg - * - * PCSX_STATUS2_REG = Status Register2 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_status2_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t dev : 2; /**< Always at 2'b10, means a Device present at the addr */ - uint64_t reserved_12_13 : 2; - uint64_t xmtflt : 1; /**< 0=No xmit fault, 1=xmit fault. Implements latching - High function until SW read. */ - uint64_t rcvflt : 1; /**< 0=No rcv fault, 1=rcv fault. Implements latching - High function until SW read */ - uint64_t reserved_3_9 : 7; - uint64_t tengb_w : 1; /**< Always 0, no 10GBASE-W capability */ - uint64_t tengb_x : 1; /**< Always 1, 10GBASE-X capable */ - uint64_t tengb_r : 1; /**< Always 0, no 10GBASE-R capability */ -#else - uint64_t tengb_r : 1; - uint64_t tengb_x : 1; - uint64_t tengb_w : 1; - uint64_t reserved_3_9 : 7; - uint64_t rcvflt : 1; - uint64_t xmtflt : 1; - uint64_t reserved_12_13 : 2; - uint64_t dev : 2; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pcsxx_status2_reg_s cn52xx; - struct cvmx_pcsxx_status2_reg_s cn52xxp1; - struct cvmx_pcsxx_status2_reg_s cn56xx; - struct cvmx_pcsxx_status2_reg_s cn56xxp1; -} cvmx_pcsxx_status2_reg_t; - - -/** - * cvmx_pcsx#_tx_rx_polarity_reg - * - * PCSX_POLARITY_REG = TX_RX polarity reg - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_tx_rx_polarity_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t xor_rxplrt : 4; /**< Per lane RX polarity control */ - uint64_t xor_txplrt : 4; /**< Per lane TX polarity control */ - uint64_t rxplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ - uint64_t txplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ -#else - uint64_t txplrt : 1; - uint64_t rxplrt : 1; - uint64_t xor_txplrt : 4; - uint64_t xor_rxplrt : 4; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_pcsxx_tx_rx_polarity_reg_s cn52xx; - struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t rxplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ - uint64_t txplrt : 1; /**< 1 is inverted polarity, 0 is normal polarity */ -#else - uint64_t txplrt : 1; - uint64_t rxplrt : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn52xxp1; - struct cvmx_pcsxx_tx_rx_polarity_reg_s cn56xx; - struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1 cn56xxp1; -} cvmx_pcsxx_tx_rx_polarity_reg_t; - - -/** - * cvmx_pcsx#_tx_rx_states_reg - * - * PCSX_TX_RX_STATES_REG = Transmit Receive States Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pcsxx_tx_rx_states_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t term_err : 1; /**< 1=Check end function detected error in packet - terminate ||T|| column or the one after it */ - uint64_t syn3bad : 1; /**< 1=lane 3 code grp sync state machine in bad state */ - uint64_t syn2bad : 1; /**< 1=lane 2 code grp sync state machine in bad state */ - uint64_t syn1bad : 1; /**< 1=lane 1 code grp sync state machine in bad state */ - uint64_t syn0bad : 1; /**< 1=lane 0 code grp sync state machine in bad state */ - uint64_t rxbad : 1; /**< 1=Rcv state machine in a bad state, HW malfunction */ - uint64_t algn_st : 3; /**< Lane alignment state machine state state */ - uint64_t rx_st : 2; /**< Receive state machine state state */ - uint64_t tx_st : 3; /**< Transmit state machine state state */ -#else - uint64_t tx_st : 3; - uint64_t rx_st : 2; - uint64_t algn_st : 3; - uint64_t rxbad : 1; - uint64_t syn0bad : 1; - uint64_t syn1bad : 1; - uint64_t syn2bad : 1; - uint64_t syn3bad : 1; - uint64_t term_err : 1; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_pcsxx_tx_rx_states_reg_s cn52xx; - struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t syn3bad : 1; /**< 1=lane 3 code grp sync state machine in bad state */ - uint64_t syn2bad : 1; /**< 1=lane 2 code grp sync state machine in bad state */ - uint64_t syn1bad : 1; /**< 1=lane 1 code grp sync state machine in bad state */ - uint64_t syn0bad : 1; /**< 1=lane 0 code grp sync state machine in bad state */ - uint64_t rxbad : 1; /**< 1=Rcv state machine in a bad state, HW malfunction */ - uint64_t algn_st : 3; /**< Lane alignment state machine state state */ - uint64_t rx_st : 2; /**< Receive state machine state state */ - uint64_t tx_st : 3; /**< Transmit state machine state state */ -#else - uint64_t tx_st : 3; - uint64_t rx_st : 2; - uint64_t algn_st : 3; - uint64_t rxbad : 1; - uint64_t syn0bad : 1; - uint64_t syn1bad : 1; - uint64_t syn2bad : 1; - uint64_t syn3bad : 1; - uint64_t reserved_13_63 : 51; -#endif - } cn52xxp1; - struct cvmx_pcsxx_tx_rx_states_reg_s cn56xx; - struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1 cn56xxp1; -} cvmx_pcsxx_tx_rx_states_reg_t; - - -/** - * cvmx_pesc#_bist_status - * - * PESC_BIST_STATUS = PESC Bist Status - * - * Contains the diffrent interrupt summary bits of the PESC. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t rqdata5 : 1; /**< Rx Queue Data Memory5. */ - uint64_t ctlp_or : 1; /**< C-TLP Order Fifo. */ - uint64_t ntlp_or : 1; /**< N-TLP Order Fifo. */ - uint64_t ptlp_or : 1; /**< P-TLP Order Fifo. */ - uint64_t retry : 1; /**< Retry Buffer. */ - uint64_t rqdata0 : 1; /**< Rx Queue Data Memory0. */ - uint64_t rqdata1 : 1; /**< Rx Queue Data Memory1. */ - uint64_t rqdata2 : 1; /**< Rx Queue Data Memory2. */ - uint64_t rqdata3 : 1; /**< Rx Queue Data Memory3. */ - uint64_t rqdata4 : 1; /**< Rx Queue Data Memory4. */ - uint64_t rqhdr1 : 1; /**< Rx Queue Header1. */ - uint64_t rqhdr0 : 1; /**< Rx Queue Header0. */ - uint64_t sot : 1; /**< SOT Buffer. */ -#else - uint64_t sot : 1; - uint64_t rqhdr0 : 1; - uint64_t rqhdr1 : 1; - uint64_t rqdata4 : 1; - uint64_t rqdata3 : 1; - uint64_t rqdata2 : 1; - uint64_t rqdata1 : 1; - uint64_t rqdata0 : 1; - uint64_t retry : 1; - uint64_t ptlp_or : 1; - uint64_t ntlp_or : 1; - uint64_t ctlp_or : 1; - uint64_t rqdata5 : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pescx_bist_status_s cn52xx; - struct cvmx_pescx_bist_status_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t ctlp_or : 1; /**< C-TLP Order Fifo. */ - uint64_t ntlp_or : 1; /**< N-TLP Order Fifo. */ - uint64_t ptlp_or : 1; /**< P-TLP Order Fifo. */ - uint64_t retry : 1; /**< Retry Buffer. */ - uint64_t rqdata0 : 1; /**< Rx Queue Data Memory0. */ - uint64_t rqdata1 : 1; /**< Rx Queue Data Memory1. */ - uint64_t rqdata2 : 1; /**< Rx Queue Data Memory2. */ - uint64_t rqdata3 : 1; /**< Rx Queue Data Memory3. */ - uint64_t rqdata4 : 1; /**< Rx Queue Data Memory4. */ - uint64_t rqhdr1 : 1; /**< Rx Queue Header1. */ - uint64_t rqhdr0 : 1; /**< Rx Queue Header0. */ - uint64_t sot : 1; /**< SOT Buffer. */ -#else - uint64_t sot : 1; - uint64_t rqhdr0 : 1; - uint64_t rqhdr1 : 1; - uint64_t rqdata4 : 1; - uint64_t rqdata3 : 1; - uint64_t rqdata2 : 1; - uint64_t rqdata1 : 1; - uint64_t rqdata0 : 1; - uint64_t retry : 1; - uint64_t ptlp_or : 1; - uint64_t ntlp_or : 1; - uint64_t ctlp_or : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn52xxp1; - struct cvmx_pescx_bist_status_s cn56xx; - struct cvmx_pescx_bist_status_cn52xxp1 cn56xxp1; -} cvmx_pescx_bist_status_t; - - -/** - * cvmx_pesc#_bist_status2 - * - * PESC(0..1)_BIST_STATUS2 = PESC BIST Status Register - * - * Results from BIST runs of PESC's memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_bist_status2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t cto_p2e : 1; /**< BIST Status for the cto_p2e_fifo */ - uint64_t e2p_cpl : 1; /**< BIST Status for the e2p_cpl_fifo */ - uint64_t e2p_n : 1; /**< BIST Status for the e2p_n_fifo */ - uint64_t e2p_p : 1; /**< BIST Status for the e2p_p_fifo */ - uint64_t e2p_rsl : 1; /**< BIST Status for the e2p_rsl__fifo */ - uint64_t dbg_p2e : 1; /**< BIST Status for the dbg_p2e_fifo */ - uint64_t peai_p2e : 1; /**< BIST Status for the peai__pesc_fifo */ - uint64_t rsl_p2e : 1; /**< BIST Status for the rsl_p2e_fifo */ - uint64_t pef_tpf1 : 1; /**< BIST Status for the pef_tlp_p_fifo1 */ - uint64_t pef_tpf0 : 1; /**< BIST Status for the pef_tlp_p_fifo0 */ - uint64_t pef_tnf : 1; /**< BIST Status for the pef_tlp_n_fifo */ - uint64_t pef_tcf1 : 1; /**< BIST Status for the pef_tlp_cpl_fifo1 */ - uint64_t pef_tc0 : 1; /**< BIST Status for the pef_tlp_cpl_fifo0 */ - uint64_t ppf : 1; /**< BIST Status for the ppf_fifo */ -#else - uint64_t ppf : 1; - uint64_t pef_tc0 : 1; - uint64_t pef_tcf1 : 1; - uint64_t pef_tnf : 1; - uint64_t pef_tpf0 : 1; - uint64_t pef_tpf1 : 1; - uint64_t rsl_p2e : 1; - uint64_t peai_p2e : 1; - uint64_t dbg_p2e : 1; - uint64_t e2p_rsl : 1; - uint64_t e2p_p : 1; - uint64_t e2p_n : 1; - uint64_t e2p_cpl : 1; - uint64_t cto_p2e : 1; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_pescx_bist_status2_s cn52xx; - struct cvmx_pescx_bist_status2_s cn52xxp1; - struct cvmx_pescx_bist_status2_s cn56xx; - struct cvmx_pescx_bist_status2_s cn56xxp1; -} cvmx_pescx_bist_status2_t; - - -/** - * cvmx_pesc#_cfg_rd - * - * PESC_CFG_RD = PESC Configuration Read - * - * Allows read access to the configuration in the PCIe Core. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_cfg_rd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 32; /**< Data. */ - uint64_t addr : 32; /**< Address to read. A write to this register - starts a read operation. */ -#else - uint64_t addr : 32; - uint64_t data : 32; -#endif - } s; - struct cvmx_pescx_cfg_rd_s cn52xx; - struct cvmx_pescx_cfg_rd_s cn52xxp1; - struct cvmx_pescx_cfg_rd_s cn56xx; - struct cvmx_pescx_cfg_rd_s cn56xxp1; -} cvmx_pescx_cfg_rd_t; - - -/** - * cvmx_pesc#_cfg_wr - * - * PESC_CFG_WR = PESC Configuration Write - * - * Allows write access to the configuration in the PCIe Core. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_cfg_wr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 32; /**< Data to write. A write to this register starts - a write operation. */ - uint64_t addr : 32; /**< Address to write. A write to this register starts - a write operation. */ -#else - uint64_t addr : 32; - uint64_t data : 32; -#endif - } s; - struct cvmx_pescx_cfg_wr_s cn52xx; - struct cvmx_pescx_cfg_wr_s cn52xxp1; - struct cvmx_pescx_cfg_wr_s cn56xx; - struct cvmx_pescx_cfg_wr_s cn56xxp1; -} cvmx_pescx_cfg_wr_t; - - -/** - * cvmx_pesc#_cpl_lut_valid - * - * PESC_CPL_LUT_VALID = PESC Cmpletion Lookup Table Valid - * - * Bit set for outstanding tag read. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_cpl_lut_valid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t tag : 32; /**< Bit vector set cooresponds to an outstanding tag - expecting a completion. */ -#else - uint64_t tag : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pescx_cpl_lut_valid_s cn52xx; - struct cvmx_pescx_cpl_lut_valid_s cn52xxp1; - struct cvmx_pescx_cpl_lut_valid_s cn56xx; - struct cvmx_pescx_cpl_lut_valid_s cn56xxp1; -} cvmx_pescx_cpl_lut_valid_t; - - -/** - * cvmx_pesc#_ctl_status - * - * PESC_CTL_STATUS = PESC Control Status - * - * General control and status of the PESC. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t dnum : 5; /**< Primary bus device number. */ - uint64_t pbus : 8; /**< Primary bus number. */ - uint64_t qlm_cfg : 2; /**< The QLM configuration pad bits. */ - uint64_t lane_swp : 1; /**< Lane Swap. For PEDC1, when 0 NO LANE SWAP when '1' - enables LANE SWAP. THis bit has no effect on PEDC0. - This bit should be set before enabling PEDC1. */ - uint64_t pm_xtoff : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core pm_xmt_turnoff port. RC mode. */ - uint64_t pm_xpme : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core pm_xmt_pme port. EP mode. */ - uint64_t ob_p_cmd : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core outband_pwrup_cmd port. EP mode. */ - uint64_t reserved_7_8 : 2; - uint64_t nf_ecrc : 1; /**< Do not forward peer-to-peer ECRC TLPs. */ - uint64_t dly_one : 1; /**< When set the output client state machines will - wait one cycle before starting a new TLP out. */ - uint64_t lnk_enb : 1; /**< When set '1' the link is enabled when '0' the - link is disabled. This bit only is active when in - RC mode. */ - uint64_t ro_ctlp : 1; /**< When set '1' C-TLPs that have the RO bit set will - not wait for P-TLPs that normaly would be sent - first. */ - uint64_t reserved_2_2 : 1; - uint64_t inv_ecrc : 1; /**< When '1' causes the LSB of the ECRC to be inverted. */ - uint64_t inv_lcrc : 1; /**< When '1' causes the LSB of the LCRC to be inverted. */ -#else - uint64_t inv_lcrc : 1; - uint64_t inv_ecrc : 1; - uint64_t reserved_2_2 : 1; - uint64_t ro_ctlp : 1; - uint64_t lnk_enb : 1; - uint64_t dly_one : 1; - uint64_t nf_ecrc : 1; - uint64_t reserved_7_8 : 2; - uint64_t ob_p_cmd : 1; - uint64_t pm_xpme : 1; - uint64_t pm_xtoff : 1; - uint64_t lane_swp : 1; - uint64_t qlm_cfg : 2; - uint64_t pbus : 8; - uint64_t dnum : 5; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_pescx_ctl_status_s cn52xx; - struct cvmx_pescx_ctl_status_s cn52xxp1; - struct cvmx_pescx_ctl_status_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t dnum : 5; /**< Primary bus device number. */ - uint64_t pbus : 8; /**< Primary bus number. */ - uint64_t qlm_cfg : 2; /**< The QLM configuration pad bits. */ - uint64_t reserved_12_12 : 1; - uint64_t pm_xtoff : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core pm_xmt_turnoff port. RC mode. */ - uint64_t pm_xpme : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core pm_xmt_pme port. EP mode. */ - uint64_t ob_p_cmd : 1; /**< When WRITTEN with a '1' a single cycle pulse is - to the PCIe core outband_pwrup_cmd port. EP mode. */ - uint64_t reserved_7_8 : 2; - uint64_t nf_ecrc : 1; /**< Do not forward peer-to-peer ECRC TLPs. */ - uint64_t dly_one : 1; /**< When set the output client state machines will - wait one cycle before starting a new TLP out. */ - uint64_t lnk_enb : 1; /**< When set '1' the link is enabled when '0' the - link is disabled. This bit only is active when in - RC mode. */ - uint64_t ro_ctlp : 1; /**< When set '1' C-TLPs that have the RO bit set will - not wait for P-TLPs that normaly would be sent - first. */ - uint64_t reserved_2_2 : 1; - uint64_t inv_ecrc : 1; /**< When '1' causes the LSB of the ECRC to be inverted. */ - uint64_t inv_lcrc : 1; /**< When '1' causes the LSB of the LCRC to be inverted. */ -#else - uint64_t inv_lcrc : 1; - uint64_t inv_ecrc : 1; - uint64_t reserved_2_2 : 1; - uint64_t ro_ctlp : 1; - uint64_t lnk_enb : 1; - uint64_t dly_one : 1; - uint64_t nf_ecrc : 1; - uint64_t reserved_7_8 : 2; - uint64_t ob_p_cmd : 1; - uint64_t pm_xpme : 1; - uint64_t pm_xtoff : 1; - uint64_t reserved_12_12 : 1; - uint64_t qlm_cfg : 2; - uint64_t pbus : 8; - uint64_t dnum : 5; - uint64_t reserved_28_63 : 36; -#endif - } cn56xx; - struct cvmx_pescx_ctl_status_cn56xx cn56xxp1; -} cvmx_pescx_ctl_status_t; - - -/** - * cvmx_pesc#_ctl_status2 - * - * Below are in PESC - * - * PESC(0..1)_BIST_STATUS2 = PESC BIST Status Register - * - * Results from BIST runs of PESC's memories. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_ctl_status2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t pclk_run : 1; /**< When the pce_clk is running this bit will be '1'. - Writing a '1' to this location will cause the - bit to be cleared, but if the pce_clk is running - this bit will be re-set. */ - uint64_t pcierst : 1; /**< Set to '1' when PCIe is in reset. */ -#else - uint64_t pcierst : 1; - uint64_t pclk_run : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pescx_ctl_status2_s cn52xx; - struct cvmx_pescx_ctl_status2_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t pcierst : 1; /**< Set to '1' when PCIe is in reset. */ -#else - uint64_t pcierst : 1; - uint64_t reserved_1_63 : 63; -#endif - } cn52xxp1; - struct cvmx_pescx_ctl_status2_s cn56xx; - struct cvmx_pescx_ctl_status2_cn52xxp1 cn56xxp1; -} cvmx_pescx_ctl_status2_t; - - -/** - * cvmx_pesc#_dbg_info - * - * PESC(0..1)_DBG_INFO = PESC Debug Information - * - * General debug info. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_dbg_info_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t ecrc_e : 1; /**< Received a ECRC error. - radm_ecrc_err */ - uint64_t rawwpp : 1; /**< Received a write with poisoned payload - radm_rcvd_wreq_poisoned */ - uint64_t racpp : 1; /**< Received a completion with poisoned payload - radm_rcvd_cpl_poisoned */ - uint64_t ramtlp : 1; /**< Received a malformed TLP - radm_mlf_tlp_err */ - uint64_t rarwdns : 1; /**< Recieved a request which device does not support - radm_rcvd_ur_req */ - uint64_t caar : 1; /**< Completer aborted a request - radm_rcvd_ca_req - This bit will never be set because Octeon does - not generate Completer Aborts. */ - uint64_t racca : 1; /**< Received a completion with CA status - radm_rcvd_cpl_ca */ - uint64_t racur : 1; /**< Received a completion with UR status - radm_rcvd_cpl_ur */ - uint64_t rauc : 1; /**< Received an unexpected completion - radm_unexp_cpl_err */ - uint64_t rqo : 1; /**< Receive queue overflow. Normally happens only when - flow control advertisements are ignored - radm_qoverflow */ - uint64_t fcuv : 1; /**< Flow Control Update Violation (opt. checks) - int_xadm_fc_prot_err */ - uint64_t rpe : 1; /**< When the PHY reports 8B/10B decode error - (RxStatus = 3b100) or disparity error - (RxStatus = 3b111), the signal rmlh_rcvd_err will - be asserted. - rmlh_rcvd_err */ - uint64_t fcpvwt : 1; /**< Flow Control Protocol Violation (Watchdog Timer) - rtlh_fc_prot_err */ - uint64_t dpeoosd : 1; /**< DLLP protocol error (out of sequence DLLP) - rdlh_prot_err */ - uint64_t rtwdle : 1; /**< Received TLP with DataLink Layer Error - rdlh_bad_tlp_err */ - uint64_t rdwdle : 1; /**< Received DLLP with DataLink Layer Error - rdlh_bad_dllp_err */ - uint64_t mre : 1; /**< Max Retries Exceeded - xdlh_replay_num_rlover_err */ - uint64_t rte : 1; /**< Replay Timer Expired - xdlh_replay_timeout_err - This bit is set when the REPLAY_TIMER expires in - the PCIE core. The probability of this bit being - set will increase with the traffic load. */ - uint64_t acto : 1; /**< A Completion Timeout Occured - pedc_radm_cpl_timeout */ - uint64_t rvdm : 1; /**< Received Vendor-Defined Message - pedc_radm_vendor_msg */ - uint64_t rumep : 1; /**< Received Unlock Message (EP Mode Only) - pedc_radm_msg_unlock */ - uint64_t rptamrc : 1; /**< Received PME Turnoff Acknowledge Message - (RC Mode only) - pedc_radm_pm_to_ack */ - uint64_t rpmerc : 1; /**< Received PME Message (RC Mode only) - pedc_radm_pm_pme */ - uint64_t rfemrc : 1; /**< Received Fatal Error Message (RC Mode only) - pedc_radm_fatal_err - Bit set when a message with ERR_FATAL is set. */ - uint64_t rnfemrc : 1; /**< Received Non-Fatal Error Message (RC Mode only) - pedc_radm_nonfatal_err */ - uint64_t rcemrc : 1; /**< Received Correctable Error Message (RC Mode only) - pedc_radm_correctable_err */ - uint64_t rpoison : 1; /**< Received Poisoned TLP - pedc__radm_trgt1_poisoned & pedc__radm_trgt1_hv */ - uint64_t recrce : 1; /**< Received ECRC Error - pedc_radm_trgt1_ecrc_err & pedc__radm_trgt1_eot */ - uint64_t rtlplle : 1; /**< Received TLP has link layer error - pedc_radm_trgt1_dllp_abort & pedc__radm_trgt1_eot */ - uint64_t rtlpmal : 1; /**< Received TLP is malformed or a message. - pedc_radm_trgt1_tlp_abort & pedc__radm_trgt1_eot - If the core receives a MSG (or Vendor Message) - this bit will be set. */ - uint64_t spoison : 1; /**< Poisoned TLP sent - peai__client0_tlp_ep & peai__client0_tlp_hv */ -#else - uint64_t spoison : 1; - uint64_t rtlpmal : 1; - uint64_t rtlplle : 1; - uint64_t recrce : 1; - uint64_t rpoison : 1; - uint64_t rcemrc : 1; - uint64_t rnfemrc : 1; - uint64_t rfemrc : 1; - uint64_t rpmerc : 1; - uint64_t rptamrc : 1; - uint64_t rumep : 1; - uint64_t rvdm : 1; - uint64_t acto : 1; - uint64_t rte : 1; - uint64_t mre : 1; - uint64_t rdwdle : 1; - uint64_t rtwdle : 1; - uint64_t dpeoosd : 1; - uint64_t fcpvwt : 1; - uint64_t rpe : 1; - uint64_t fcuv : 1; - uint64_t rqo : 1; - uint64_t rauc : 1; - uint64_t racur : 1; - uint64_t racca : 1; - uint64_t caar : 1; - uint64_t rarwdns : 1; - uint64_t ramtlp : 1; - uint64_t racpp : 1; - uint64_t rawwpp : 1; - uint64_t ecrc_e : 1; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_pescx_dbg_info_s cn52xx; - struct cvmx_pescx_dbg_info_s cn52xxp1; - struct cvmx_pescx_dbg_info_s cn56xx; - struct cvmx_pescx_dbg_info_s cn56xxp1; -} cvmx_pescx_dbg_info_t; - - -/** - * cvmx_pesc#_dbg_info_en - * - * PESC(0..1)_DBG_INFO_EN = PESC Debug Information Enable - * - * Allows PESC_DBG_INFO to generate interrupts when cooresponding enable bit is set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_dbg_info_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t ecrc_e : 1; /**< Allows PESC_DBG_INFO[30] to generate an interrupt. */ - uint64_t rawwpp : 1; /**< Allows PESC_DBG_INFO[29] to generate an interrupt. */ - uint64_t racpp : 1; /**< Allows PESC_DBG_INFO[28] to generate an interrupt. */ - uint64_t ramtlp : 1; /**< Allows PESC_DBG_INFO[27] to generate an interrupt. */ - uint64_t rarwdns : 1; /**< Allows PESC_DBG_INFO[26] to generate an interrupt. */ - uint64_t caar : 1; /**< Allows PESC_DBG_INFO[25] to generate an interrupt. */ - uint64_t racca : 1; /**< Allows PESC_DBG_INFO[24] to generate an interrupt. */ - uint64_t racur : 1; /**< Allows PESC_DBG_INFO[23] to generate an interrupt. */ - uint64_t rauc : 1; /**< Allows PESC_DBG_INFO[22] to generate an interrupt. */ - uint64_t rqo : 1; /**< Allows PESC_DBG_INFO[21] to generate an interrupt. */ - uint64_t fcuv : 1; /**< Allows PESC_DBG_INFO[20] to generate an interrupt. */ - uint64_t rpe : 1; /**< Allows PESC_DBG_INFO[19] to generate an interrupt. */ - uint64_t fcpvwt : 1; /**< Allows PESC_DBG_INFO[18] to generate an interrupt. */ - uint64_t dpeoosd : 1; /**< Allows PESC_DBG_INFO[17] to generate an interrupt. */ - uint64_t rtwdle : 1; /**< Allows PESC_DBG_INFO[16] to generate an interrupt. */ - uint64_t rdwdle : 1; /**< Allows PESC_DBG_INFO[15] to generate an interrupt. */ - uint64_t mre : 1; /**< Allows PESC_DBG_INFO[14] to generate an interrupt. */ - uint64_t rte : 1; /**< Allows PESC_DBG_INFO[13] to generate an interrupt. */ - uint64_t acto : 1; /**< Allows PESC_DBG_INFO[12] to generate an interrupt. */ - uint64_t rvdm : 1; /**< Allows PESC_DBG_INFO[11] to generate an interrupt. */ - uint64_t rumep : 1; /**< Allows PESC_DBG_INFO[10] to generate an interrupt. */ - uint64_t rptamrc : 1; /**< Allows PESC_DBG_INFO[9] to generate an interrupt. */ - uint64_t rpmerc : 1; /**< Allows PESC_DBG_INFO[8] to generate an interrupt. */ - uint64_t rfemrc : 1; /**< Allows PESC_DBG_INFO[7] to generate an interrupt. */ - uint64_t rnfemrc : 1; /**< Allows PESC_DBG_INFO[6] to generate an interrupt. */ - uint64_t rcemrc : 1; /**< Allows PESC_DBG_INFO[5] to generate an interrupt. */ - uint64_t rpoison : 1; /**< Allows PESC_DBG_INFO[4] to generate an interrupt. */ - uint64_t recrce : 1; /**< Allows PESC_DBG_INFO[3] to generate an interrupt. */ - uint64_t rtlplle : 1; /**< Allows PESC_DBG_INFO[2] to generate an interrupt. */ - uint64_t rtlpmal : 1; /**< Allows PESC_DBG_INFO[1] to generate an interrupt. */ - uint64_t spoison : 1; /**< Allows PESC_DBG_INFO[0] to generate an interrupt. */ -#else - uint64_t spoison : 1; - uint64_t rtlpmal : 1; - uint64_t rtlplle : 1; - uint64_t recrce : 1; - uint64_t rpoison : 1; - uint64_t rcemrc : 1; - uint64_t rnfemrc : 1; - uint64_t rfemrc : 1; - uint64_t rpmerc : 1; - uint64_t rptamrc : 1; - uint64_t rumep : 1; - uint64_t rvdm : 1; - uint64_t acto : 1; - uint64_t rte : 1; - uint64_t mre : 1; - uint64_t rdwdle : 1; - uint64_t rtwdle : 1; - uint64_t dpeoosd : 1; - uint64_t fcpvwt : 1; - uint64_t rpe : 1; - uint64_t fcuv : 1; - uint64_t rqo : 1; - uint64_t rauc : 1; - uint64_t racur : 1; - uint64_t racca : 1; - uint64_t caar : 1; - uint64_t rarwdns : 1; - uint64_t ramtlp : 1; - uint64_t racpp : 1; - uint64_t rawwpp : 1; - uint64_t ecrc_e : 1; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_pescx_dbg_info_en_s cn52xx; - struct cvmx_pescx_dbg_info_en_s cn52xxp1; - struct cvmx_pescx_dbg_info_en_s cn56xx; - struct cvmx_pescx_dbg_info_en_s cn56xxp1; -} cvmx_pescx_dbg_info_en_t; - - -/** - * cvmx_pesc#_diag_status - * - * PESC_DIAG_STATUS = PESC Diagnostic Status - * - * Selection control for the cores diagnostic bus. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_diag_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t pm_dst : 1; /**< Current power management DSTATE. */ - uint64_t pm_stat : 1; /**< Power Management Status. */ - uint64_t pm_en : 1; /**< Power Management Event Enable. */ - uint64_t aux_en : 1; /**< Auxilary Power Enable. */ -#else - uint64_t aux_en : 1; - uint64_t pm_en : 1; - uint64_t pm_stat : 1; - uint64_t pm_dst : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pescx_diag_status_s cn52xx; - struct cvmx_pescx_diag_status_s cn52xxp1; - struct cvmx_pescx_diag_status_s cn56xx; - struct cvmx_pescx_diag_status_s cn56xxp1; -} cvmx_pescx_diag_status_t; - - -/** - * cvmx_pesc#_p2n_bar0_start - * - * PESC_P2N_BAR0_START = PESC PCIe to Npei BAR0 Start - * - * The starting address for addresses to forwarded to the NPEI in RC Mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_p2n_bar0_start_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 50; /**< The starting address of the 16KB address space that - is the BAR0 address space. */ - uint64_t reserved_0_13 : 14; -#else - uint64_t reserved_0_13 : 14; - uint64_t addr : 50; -#endif - } s; - struct cvmx_pescx_p2n_bar0_start_s cn52xx; - struct cvmx_pescx_p2n_bar0_start_s cn52xxp1; - struct cvmx_pescx_p2n_bar0_start_s cn56xx; - struct cvmx_pescx_p2n_bar0_start_s cn56xxp1; -} cvmx_pescx_p2n_bar0_start_t; - - -/** - * cvmx_pesc#_p2n_bar1_start - * - * PESC_P2N_BAR1_START = PESC PCIe to Npei BAR1 Start - * - * The starting address for addresses to forwarded to the NPEI in RC Mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_p2n_bar1_start_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 38; /**< The starting address of the 64KB address space - that is the BAR1 address space. */ - uint64_t reserved_0_25 : 26; -#else - uint64_t reserved_0_25 : 26; - uint64_t addr : 38; -#endif - } s; - struct cvmx_pescx_p2n_bar1_start_s cn52xx; - struct cvmx_pescx_p2n_bar1_start_s cn52xxp1; - struct cvmx_pescx_p2n_bar1_start_s cn56xx; - struct cvmx_pescx_p2n_bar1_start_s cn56xxp1; -} cvmx_pescx_p2n_bar1_start_t; - - -/** - * cvmx_pesc#_p2n_bar2_start - * - * PESC_P2N_BAR2_START = PESC PCIe to Npei BAR2 Start - * - * The starting address for addresses to forwarded to the NPEI in RC Mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_p2n_bar2_start_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 25; /**< The starting address of the 2^39 address space - that is the BAR2 address space. */ - uint64_t reserved_0_38 : 39; -#else - uint64_t reserved_0_38 : 39; - uint64_t addr : 25; -#endif - } s; - struct cvmx_pescx_p2n_bar2_start_s cn52xx; - struct cvmx_pescx_p2n_bar2_start_s cn52xxp1; - struct cvmx_pescx_p2n_bar2_start_s cn56xx; - struct cvmx_pescx_p2n_bar2_start_s cn56xxp1; -} cvmx_pescx_p2n_bar2_start_t; - - -/** - * cvmx_pesc#_p2p_bar#_end - * - * PESC_P2P_BAR#_END = PESC Peer-To-Peer BAR0 End - * - * The ending address for addresses to forwarded to the PCIe peer port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_p2p_barx_end_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 52; /**< The ending address of the address window created - this field and the PESC_P2P_BAR0_START[63:12] - field. The full 64-bits of address are created by: - [ADDR[63:12], 12'b0]. */ - uint64_t reserved_0_11 : 12; -#else - uint64_t reserved_0_11 : 12; - uint64_t addr : 52; -#endif - } s; - struct cvmx_pescx_p2p_barx_end_s cn52xx; - struct cvmx_pescx_p2p_barx_end_s cn52xxp1; - struct cvmx_pescx_p2p_barx_end_s cn56xx; - struct cvmx_pescx_p2p_barx_end_s cn56xxp1; -} cvmx_pescx_p2p_barx_end_t; - - -/** - * cvmx_pesc#_p2p_bar#_start - * - * PESC_P2P_BAR#_START = PESC Peer-To-Peer BAR0 Start - * - * The starting address and enable for addresses to forwarded to the PCIe peer port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_p2p_barx_start_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t addr : 52; /**< The starting address of the address window created - this field and the PESC_P2P_BAR0_END[63:12] field. - The full 64-bits of address are created by: - [ADDR[63:12], 12'b0]. */ - uint64_t reserved_0_11 : 12; -#else - uint64_t reserved_0_11 : 12; - uint64_t addr : 52; -#endif - } s; - struct cvmx_pescx_p2p_barx_start_s cn52xx; - struct cvmx_pescx_p2p_barx_start_s cn52xxp1; - struct cvmx_pescx_p2p_barx_start_s cn56xx; - struct cvmx_pescx_p2p_barx_start_s cn56xxp1; -} cvmx_pescx_p2p_barx_start_t; - - -/** - * cvmx_pesc#_tlp_credits - * - * PESC_TLP_CREDITS = PESC TLP Credits - * - * Specifies the number of credits the PESC for use in moving TLPs. When this register is written the credit values are - * reset to the register value. A write to this register should take place BEFORE traffic flow starts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pescx_tlp_credits_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pescx_tlp_credits_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t peai_ppf : 8; /**< TLP credits for Completion TLPs in the Peer. - Legal values are 0x24 to 0x80. */ - uint64_t pesc_cpl : 8; /**< TLP credits for Completion TLPs in the Peer. - Legal values are 0x24 to 0x80. */ - uint64_t pesc_np : 8; /**< TLP credits for Non-Posted TLPs in the Peer. - Legal values are 0x4 to 0x10. */ - uint64_t pesc_p : 8; /**< TLP credits for Posted TLPs in the Peer. - Legal values are 0x24 to 0x80. */ - uint64_t npei_cpl : 8; /**< TLP credits for Completion TLPs in the NPEI. - Legal values are 0x24 to 0x80. */ - uint64_t npei_np : 8; /**< TLP credits for Non-Posted TLPs in the NPEI. - Legal values are 0x4 to 0x10. */ - uint64_t npei_p : 8; /**< TLP credits for Posted TLPs in the NPEI. - Legal values are 0x24 to 0x80. */ -#else - uint64_t npei_p : 8; - uint64_t npei_np : 8; - uint64_t npei_cpl : 8; - uint64_t pesc_p : 8; - uint64_t pesc_np : 8; - uint64_t pesc_cpl : 8; - uint64_t peai_ppf : 8; - uint64_t reserved_56_63 : 8; -#endif - } cn52xx; - struct cvmx_pescx_tlp_credits_cn52xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t peai_ppf : 8; /**< TLP credits in core clk pre-buffer that holds TLPs - being sent from PCIe Core to NPEI or PEER. */ - uint64_t pesc_cpl : 5; /**< TLP credits for Completion TLPs in the Peer. */ - uint64_t pesc_np : 5; /**< TLP credits for Non-Posted TLPs in the Peer. */ - uint64_t pesc_p : 5; /**< TLP credits for Posted TLPs in the Peer. */ - uint64_t npei_cpl : 5; /**< TLP credits for Completion TLPs in the NPEI. */ - uint64_t npei_np : 5; /**< TLP credits for Non-Posted TLPs in the NPEI. */ - uint64_t npei_p : 5; /**< TLP credits for Posted TLPs in the NPEI. */ -#else - uint64_t npei_p : 5; - uint64_t npei_np : 5; - uint64_t npei_cpl : 5; - uint64_t pesc_p : 5; - uint64_t pesc_np : 5; - uint64_t pesc_cpl : 5; - uint64_t peai_ppf : 8; - uint64_t reserved_38_63 : 26; -#endif - } cn52xxp1; - struct cvmx_pescx_tlp_credits_cn52xx cn56xx; - struct cvmx_pescx_tlp_credits_cn52xxp1 cn56xxp1; -} cvmx_pescx_tlp_credits_t; - - -/** - * cvmx_pip_bck_prs - * - * PIP_BCK_PRS = PIP's Back Pressure Register - * - * When to assert backpressure based on the todo list filling up - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_bck_prs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bckprs : 1; /**< PIP is currently asserting backpressure to IOB - Backpressure from PIP will assert when the - entries to the todo list exceed HIWATER. - Backpressure will be held until the todo entries - is less than or equal to LOWATER. */ - uint64_t reserved_13_62 : 50; - uint64_t hiwater : 5; /**< Water mark in the todo list to assert backpressure - Legal values are 1-26. A 0 value will deadlock - the machine. A value > 26, will trash memory */ - uint64_t reserved_5_7 : 3; - uint64_t lowater : 5; /**< Water mark in the todo list to release backpressure - The LOWATER value should be < HIWATER. */ -#else - uint64_t lowater : 5; - uint64_t reserved_5_7 : 3; - uint64_t hiwater : 5; - uint64_t reserved_13_62 : 50; - uint64_t bckprs : 1; -#endif - } s; - struct cvmx_pip_bck_prs_s cn38xx; - struct cvmx_pip_bck_prs_s cn38xxp2; - struct cvmx_pip_bck_prs_s cn56xx; - struct cvmx_pip_bck_prs_s cn56xxp1; - struct cvmx_pip_bck_prs_s cn58xx; - struct cvmx_pip_bck_prs_s cn58xxp1; -} cvmx_pip_bck_prs_t; - - -/** - * cvmx_pip_bist_status - * - * PIP_BIST_STATUS = PIP's BIST Results - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t bist : 18; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - BIST. */ -#else - uint64_t bist : 18; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_pip_bist_status_s cn30xx; - struct cvmx_pip_bist_status_s cn31xx; - struct cvmx_pip_bist_status_s cn38xx; - struct cvmx_pip_bist_status_s cn38xxp2; - struct cvmx_pip_bist_status_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t bist : 17; /**< BIST Results. - HW sets a bit in BIST for for memory that fails - BIST. */ -#else - uint64_t bist : 17; - uint64_t reserved_17_63 : 47; -#endif - } cn50xx; - struct cvmx_pip_bist_status_s cn52xx; - struct cvmx_pip_bist_status_s cn52xxp1; - struct cvmx_pip_bist_status_s cn56xx; - struct cvmx_pip_bist_status_s cn56xxp1; - struct cvmx_pip_bist_status_s cn58xx; - struct cvmx_pip_bist_status_s cn58xxp1; -} cvmx_pip_bist_status_t; - - -/** - * cvmx_pip_crc_ctl# - * - * PIP_CRC_CTL = PIP CRC Control Register - * - * Controls datapath reflection when calculating CRC - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_crc_ctlx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t invres : 1; /**< Invert the result */ - uint64_t reflect : 1; /**< Reflect the bits in each byte. - Byte order does not change. - - 0: CRC is calculated MSB to LSB - - 1: CRC is calculated LSB to MSB */ -#else - uint64_t reflect : 1; - uint64_t invres : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pip_crc_ctlx_s cn38xx; - struct cvmx_pip_crc_ctlx_s cn38xxp2; - struct cvmx_pip_crc_ctlx_s cn58xx; - struct cvmx_pip_crc_ctlx_s cn58xxp1; -} cvmx_pip_crc_ctlx_t; - - -/** - * cvmx_pip_crc_iv# - * - * PIP_CRC_IV = PIP CRC IV Register - * - * Determines the IV used by the CRC algorithm - * - * Notes: - * * PIP_CRC_IV - * PIP_CRC_IV controls the initial state of the CRC algorithm. Octane can - * support a wide range of CRC algorithms and as such, the IV must be - * carefully constructed to meet the specific algorithm. The code below - * determines the value to program into Octane based on the algorthim's IV - * and width. In the case of Octane, the width should always be 32. - * - * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for - * ports 16-31. - * - * unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w) - * [ - * int i; - * int doit; - * unsigned int current_val = algorithm_iv; - * - * for(i = 0; i < w; i++) [ - * doit = current_val & 0x1; - * - * if(doit) current_val ^= poly; - * assert(!(current_val & 0x1)); - * - * current_val = (current_val >> 1) | (doit << (w-1)); - * ] - * - * return current_val; - * ] - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_crc_ivx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iv : 32; /**< IV used by the CRC algorithm. Default is FCS32. */ -#else - uint64_t iv : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pip_crc_ivx_s cn38xx; - struct cvmx_pip_crc_ivx_s cn38xxp2; - struct cvmx_pip_crc_ivx_s cn58xx; - struct cvmx_pip_crc_ivx_s cn58xxp1; -} cvmx_pip_crc_ivx_t; - - -/** - * cvmx_pip_dec_ipsec# - * - * PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC - * - * PIP sets the dec_ipsec based on TCP or UDP destination port. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_dec_ipsecx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t tcp : 1; /**< This DPRT should be used for TCP packets */ - uint64_t udp : 1; /**< This DPRT should be used for UDP packets */ - uint64_t dprt : 16; /**< UDP or TCP destination port to match on */ -#else - uint64_t dprt : 16; - uint64_t udp : 1; - uint64_t tcp : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_pip_dec_ipsecx_s cn30xx; - struct cvmx_pip_dec_ipsecx_s cn31xx; - struct cvmx_pip_dec_ipsecx_s cn38xx; - struct cvmx_pip_dec_ipsecx_s cn38xxp2; - struct cvmx_pip_dec_ipsecx_s cn50xx; - struct cvmx_pip_dec_ipsecx_s cn52xx; - struct cvmx_pip_dec_ipsecx_s cn52xxp1; - struct cvmx_pip_dec_ipsecx_s cn56xx; - struct cvmx_pip_dec_ipsecx_s cn56xxp1; - struct cvmx_pip_dec_ipsecx_s cn58xx; - struct cvmx_pip_dec_ipsecx_s cn58xxp1; -} cvmx_pip_dec_ipsecx_t; - - -/** - * cvmx_pip_dsa_src_grp - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_dsa_src_grp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t map15 : 4; /**< DSA Group Algorithm */ - uint64_t map14 : 4; /**< DSA Group Algorithm */ - uint64_t map13 : 4; /**< DSA Group Algorithm */ - uint64_t map12 : 4; /**< DSA Group Algorithm */ - uint64_t map11 : 4; /**< DSA Group Algorithm */ - uint64_t map10 : 4; /**< DSA Group Algorithm */ - uint64_t map9 : 4; /**< DSA Group Algorithm */ - uint64_t map8 : 4; /**< DSA Group Algorithm */ - uint64_t map7 : 4; /**< DSA Group Algorithm */ - uint64_t map6 : 4; /**< DSA Group Algorithm */ - uint64_t map5 : 4; /**< DSA Group Algorithm */ - uint64_t map4 : 4; /**< DSA Group Algorithm */ - uint64_t map3 : 4; /**< DSA Group Algorithm */ - uint64_t map2 : 4; /**< DSA Group Algorithm */ - uint64_t map1 : 4; /**< DSA Group Algorithm */ - uint64_t map0 : 4; /**< DSA Group Algorithm - Use the DSA source id to compute GRP - (56xx pass2 only) */ -#else - uint64_t map0 : 4; - uint64_t map1 : 4; - uint64_t map2 : 4; - uint64_t map3 : 4; - uint64_t map4 : 4; - uint64_t map5 : 4; - uint64_t map6 : 4; - uint64_t map7 : 4; - uint64_t map8 : 4; - uint64_t map9 : 4; - uint64_t map10 : 4; - uint64_t map11 : 4; - uint64_t map12 : 4; - uint64_t map13 : 4; - uint64_t map14 : 4; - uint64_t map15 : 4; -#endif - } s; - struct cvmx_pip_dsa_src_grp_s cn52xx; - struct cvmx_pip_dsa_src_grp_s cn52xxp1; - struct cvmx_pip_dsa_src_grp_s cn56xx; -} cvmx_pip_dsa_src_grp_t; - - -/** - * cvmx_pip_dsa_vid_grp - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_dsa_vid_grp_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t map15 : 4; /**< DSA Group Algorithm */ - uint64_t map14 : 4; /**< DSA Group Algorithm */ - uint64_t map13 : 4; /**< DSA Group Algorithm */ - uint64_t map12 : 4; /**< DSA Group Algorithm */ - uint64_t map11 : 4; /**< DSA Group Algorithm */ - uint64_t map10 : 4; /**< DSA Group Algorithm */ - uint64_t map9 : 4; /**< DSA Group Algorithm */ - uint64_t map8 : 4; /**< DSA Group Algorithm */ - uint64_t map7 : 4; /**< DSA Group Algorithm */ - uint64_t map6 : 4; /**< DSA Group Algorithm */ - uint64_t map5 : 4; /**< DSA Group Algorithm */ - uint64_t map4 : 4; /**< DSA Group Algorithm */ - uint64_t map3 : 4; /**< DSA Group Algorithm */ - uint64_t map2 : 4; /**< DSA Group Algorithm */ - uint64_t map1 : 4; /**< DSA Group Algorithm */ - uint64_t map0 : 4; /**< DSA Group Algorithm - Use the DSA source id to compute GRP - (56xx pass2 only) */ -#else - uint64_t map0 : 4; - uint64_t map1 : 4; - uint64_t map2 : 4; - uint64_t map3 : 4; - uint64_t map4 : 4; - uint64_t map5 : 4; - uint64_t map6 : 4; - uint64_t map7 : 4; - uint64_t map8 : 4; - uint64_t map9 : 4; - uint64_t map10 : 4; - uint64_t map11 : 4; - uint64_t map12 : 4; - uint64_t map13 : 4; - uint64_t map14 : 4; - uint64_t map15 : 4; -#endif - } s; - struct cvmx_pip_dsa_vid_grp_s cn52xx; - struct cvmx_pip_dsa_vid_grp_s cn52xxp1; - struct cvmx_pip_dsa_vid_grp_s cn56xx; -} cvmx_pip_dsa_vid_grp_t; - - -/** - * cvmx_pip_frm_len_chk# - * - * Notes: - * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, and PKO loopback ports. - * PIP_FRM_LEN_CHK1 is used for PCI RAW packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_frm_len_chkx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t maxlen : 16; /**< Byte count for Max-sized frame check - Failing packets set the MAXERR interrupt and are - optionally sent with opcode==MAXERR - The effective MAXLEN used by HW is - PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS */ - uint64_t minlen : 16; /**< Byte count for Min-sized frame check - Failing packets set the MINERR interrupt and are - optionally sent with opcode==MINERR */ -#else - uint64_t minlen : 16; - uint64_t maxlen : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pip_frm_len_chkx_s cn50xx; - struct cvmx_pip_frm_len_chkx_s cn52xx; - struct cvmx_pip_frm_len_chkx_s cn52xxp1; - struct cvmx_pip_frm_len_chkx_s cn56xx; - struct cvmx_pip_frm_len_chkx_s cn56xxp1; -} cvmx_pip_frm_len_chkx_t; - - -/** - * cvmx_pip_gbl_cfg - * - * PIP_GBL_CFG = PIP's Global Config Register - * - * Global config information that applies to all ports. - * - * Notes: - * * IP6_UDP - * IPv4 allows optional UDP checksum by sending the all 0's patterns. IPv6 - * outlaws this and the spec says to always check UDP checksum. This mode - * bit allows the user to treat IPv6 as IPv4, meaning that the all 0's - * pattern will cause a UDP checksum pass. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_gbl_cfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_19_63 : 45; - uint64_t tag_syn : 1; /**< Do not include src_crc for TCP/SYN&!ACK packets - 0 = include src_crc - 1 = tag hash is dst_crc for TCP/SYN&!ACK packets */ - uint64_t ip6_udp : 1; /**< IPv6/UDP checksum is not optional - 0 = Allow optional checksum code - 1 = Do not allow optional checksum code */ - uint64_t max_l2 : 1; /**< Config bit to choose the largest L2 frame size - Chooses the value of the L2 Type/Length field - to classify the frame as length. - 0 = 1500 / 0x5dc - 1 = 1535 / 0x5ff */ - uint64_t reserved_11_15 : 5; - uint64_t raw_shf : 3; /**< RAW Packet shift amount - Number of bytes to pad a packet that has been - received on a PCI RAW port. */ - uint64_t reserved_3_7 : 5; - uint64_t nip_shf : 3; /**< Non-IP shift amount - Number of bytes to pad a packet that has been - classified as not IP. */ -#else - uint64_t nip_shf : 3; - uint64_t reserved_3_7 : 5; - uint64_t raw_shf : 3; - uint64_t reserved_11_15 : 5; - uint64_t max_l2 : 1; - uint64_t ip6_udp : 1; - uint64_t tag_syn : 1; - uint64_t reserved_19_63 : 45; -#endif - } s; - struct cvmx_pip_gbl_cfg_s cn30xx; - struct cvmx_pip_gbl_cfg_s cn31xx; - struct cvmx_pip_gbl_cfg_s cn38xx; - struct cvmx_pip_gbl_cfg_s cn38xxp2; - struct cvmx_pip_gbl_cfg_s cn50xx; - struct cvmx_pip_gbl_cfg_s cn52xx; - struct cvmx_pip_gbl_cfg_s cn52xxp1; - struct cvmx_pip_gbl_cfg_s cn56xx; - struct cvmx_pip_gbl_cfg_s cn56xxp1; - struct cvmx_pip_gbl_cfg_s cn58xx; - struct cvmx_pip_gbl_cfg_s cn58xxp1; -} cvmx_pip_gbl_cfg_t; - - -/** - * cvmx_pip_gbl_ctl - * - * PIP_GBL_CTL = PIP's Global Control Register - * - * Global control information. These are the global checker enables for - * IPv4/IPv6 and TCP/UDP parsing. The enables effect all ports. - * - * Notes: - * The following text describes the conditions in which each checker will - * assert and flag an exception. By disabling the checker, the exception will - * not be flagged and the packet will be parsed as best it can. Note, by - * disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and - * L4_MAL could cause bits to be seen in the wrong place. IP_CHK and L4_CHK - * means that the packet was corrupted). - * - * * IP_CHK - * Indicates that an IPv4 packet contained an IPv4 header checksum - * violations. Only applies to packets classified as IPv4. - * - * * IP_MAL - * Indicates that the packet was malformed. Malformed packets are defined as - * packets that are not long enough to cover the IP header or not long enough - * to cover the length in the IP header. - * - * * IP_HOP - * Indicates that the IPv4 TTL field or IPv6 HOP field is zero. - * - * * IP4_OPTS - * Indicates the presence of IPv4 options. It is set when the length != 5. - * This only applies to packets classified as IPv4. - * - * * IP6_EEXT - * Indicate the presence of IPv6 early extension headers. These bits only - * apply to packets classified as IPv6. Bit 0 will flag early extensions - * when next_header is any one of the following... - * - * - hop-by-hop (0) - * - destination (60) - * - routing (43) - * - * Bit 1 will flag early extentions when next_header is NOT any of the - * following... - * - * - TCP (6) - * - UDP (17) - * - fragmentation (44) - * - ICMP (58) - * - IPSEC ESP (50) - * - IPSEC AH (51) - * - IPCOMP - * - * * L4_MAL - * Indicates that a TCP or UDP packet is not long enough to cover the TCP or - * UDP header. - * - * * L4_PRT - * Indicates that a TCP or UDP packet has an illegal port number - either the - * source or destination port is zero. - * - * * L4_CHK - * Indicates that a packet classified as either TCP or UDP contains an L4 - * checksum failure - * - * * L4_LEN - * Indicates that the TCP or UDP length does not match the the IP length. - * - * * TCP_FLAG - * Indicates any of the following conditions... - * - * [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag - * 6'b000001: (FIN only) - * 6'b000000: (0) - * 6'bxxx1x1: (RST+FIN+*) - * 6'b1xxx1x: (URG+SYN+*) - * 6'bxxx11x: (RST+SYN+*) - * 6'bxxxx11: (SYN+FIN+*) - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_gbl_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t dsa_grp_tvid : 1; /**< DSA Group Algorithm - Use the DSA source id to compute GRP - (56xx pass2 only) */ - uint64_t dsa_grp_scmd : 1; /**< DSA Group Algorithm - Use the DSA source id to compute GRP when the - DSA tag command to TO_CPU - (56xx pass2 only) */ - uint64_t dsa_grp_sid : 1; /**< DSA Group Algorithm - Use the DSA VLAN id to compute GRP - (56xx pass2 only) */ - uint64_t reserved_21_23 : 3; - uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */ - uint64_t reserved_17_19 : 3; - uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set - Only applies to the packet interface prts (0-31) - (PASS2 only) */ - uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN - (PASS2 only) */ - uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN - (PASS2 only) */ - uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */ - uint64_t tcp_flag : 1; /**< Enable TCP flags checks */ - uint64_t l4_len : 1; /**< Enable TCP/UDP length check */ - uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */ - uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */ - uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */ - uint64_t reserved_6_7 : 2; - uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */ - uint64_t ip4_opts : 1; /**< Enable IPv4 options check */ - uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */ - uint64_t ip_mal : 1; /**< Enable malformed check */ - uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */ -#else - uint64_t ip_chk : 1; - uint64_t ip_mal : 1; - uint64_t ip_hop : 1; - uint64_t ip4_opts : 1; - uint64_t ip6_eext : 2; - uint64_t reserved_6_7 : 2; - uint64_t l4_mal : 1; - uint64_t l4_prt : 1; - uint64_t l4_chk : 1; - uint64_t l4_len : 1; - uint64_t tcp_flag : 1; - uint64_t l2_mal : 1; - uint64_t vs_qos : 1; - uint64_t vs_wqe : 1; - uint64_t ignrs : 1; - uint64_t reserved_17_19 : 3; - uint64_t ring_en : 1; - uint64_t reserved_21_23 : 3; - uint64_t dsa_grp_sid : 1; - uint64_t dsa_grp_scmd : 1; - uint64_t dsa_grp_tvid : 1; - uint64_t reserved_27_63 : 37; -#endif - } s; - struct cvmx_pip_gbl_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set - Only applies to the packet interface prts (0-31) */ - uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN */ - uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN */ - uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */ - uint64_t tcp_flag : 1; /**< Enable TCP flags checks */ - uint64_t l4_len : 1; /**< Enable TCP/UDP length check */ - uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */ - uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */ - uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */ - uint64_t reserved_6_7 : 2; - uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */ - uint64_t ip4_opts : 1; /**< Enable IPv4 options check */ - uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */ - uint64_t ip_mal : 1; /**< Enable malformed check */ - uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */ -#else - uint64_t ip_chk : 1; - uint64_t ip_mal : 1; - uint64_t ip_hop : 1; - uint64_t ip4_opts : 1; - uint64_t ip6_eext : 2; - uint64_t reserved_6_7 : 2; - uint64_t l4_mal : 1; - uint64_t l4_prt : 1; - uint64_t l4_chk : 1; - uint64_t l4_len : 1; - uint64_t tcp_flag : 1; - uint64_t l2_mal : 1; - uint64_t vs_qos : 1; - uint64_t vs_wqe : 1; - uint64_t ignrs : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn30xx; - struct cvmx_pip_gbl_ctl_cn30xx cn31xx; - struct cvmx_pip_gbl_ctl_cn30xx cn38xx; - struct cvmx_pip_gbl_ctl_cn30xx cn38xxp2; - struct cvmx_pip_gbl_ctl_cn30xx cn50xx; - struct cvmx_pip_gbl_ctl_s cn52xx; - struct cvmx_pip_gbl_ctl_s cn52xxp1; - struct cvmx_pip_gbl_ctl_s cn56xx; - struct cvmx_pip_gbl_ctl_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t ring_en : 1; /**< Enable PCIe ring information in WQE */ - uint64_t reserved_17_19 : 3; - uint64_t ignrs : 1; /**< Ignore the PKT_INST_HDR[RS] bit when set - Only applies to the packet interface prts (0-31) */ - uint64_t vs_wqe : 1; /**< Which VLAN CFI and ID to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN */ - uint64_t vs_qos : 1; /**< Which VLAN priority to use when VLAN Stacking - 0=use the 1st (network order) VLAN - 1=use the 2nd (network order) VLAN */ - uint64_t l2_mal : 1; /**< Enable L2 malformed packet check */ - uint64_t tcp_flag : 1; /**< Enable TCP flags checks */ - uint64_t l4_len : 1; /**< Enable TCP/UDP length check */ - uint64_t l4_chk : 1; /**< Enable TCP/UDP checksum check */ - uint64_t l4_prt : 1; /**< Enable TCP/UDP illegal port check */ - uint64_t l4_mal : 1; /**< Enable TCP/UDP malformed packet check */ - uint64_t reserved_6_7 : 2; - uint64_t ip6_eext : 2; /**< Enable IPv6 early extension headers */ - uint64_t ip4_opts : 1; /**< Enable IPv4 options check */ - uint64_t ip_hop : 1; /**< Enable TTL (IPv4) / hop (IPv6) check */ - uint64_t ip_mal : 1; /**< Enable malformed check */ - uint64_t ip_chk : 1; /**< Enable IPv4 header checksum check */ -#else - uint64_t ip_chk : 1; - uint64_t ip_mal : 1; - uint64_t ip_hop : 1; - uint64_t ip4_opts : 1; - uint64_t ip6_eext : 2; - uint64_t reserved_6_7 : 2; - uint64_t l4_mal : 1; - uint64_t l4_prt : 1; - uint64_t l4_chk : 1; - uint64_t l4_len : 1; - uint64_t tcp_flag : 1; - uint64_t l2_mal : 1; - uint64_t vs_qos : 1; - uint64_t vs_wqe : 1; - uint64_t ignrs : 1; - uint64_t reserved_17_19 : 3; - uint64_t ring_en : 1; - uint64_t reserved_21_63 : 43; -#endif - } cn56xxp1; - struct cvmx_pip_gbl_ctl_cn30xx cn58xx; - struct cvmx_pip_gbl_ctl_cn30xx cn58xxp1; -} cvmx_pip_gbl_ctl_t; - - -/** - * cvmx_pip_hg_pri_qos - * - * Notes: - * This register controls accesses to the HG_QOS_TABLE. To write an entry of - * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level, - * UP_QOS=1. To read an entry of the table, write PIP_HG_PRI_QOS with - * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read - * PIP_HG_PRI_QOS. The table data will be in PIP_HG_PRI_QOS[QOS]. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_hg_pri_qos_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t up_qos : 1; /**< When written to '1', updates the entry in the - HG_QOS_TABLE as specified by PRI to a value of - QOS as follows - HG_QOS_TABLE[PRI] = QOS */ - uint64_t reserved_11_11 : 1; - uint64_t qos : 3; /**< QOS Map level to priority - (56xx pass2 only) */ - uint64_t reserved_6_7 : 2; - uint64_t pri : 6; /**< The priority level from HiGig header - HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]] - HiGig2 PRI = [DP[1:0], TC[3:0]] - (56xx pass2 only) */ -#else - uint64_t pri : 6; - uint64_t reserved_6_7 : 2; - uint64_t qos : 3; - uint64_t reserved_11_11 : 1; - uint64_t up_qos : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pip_hg_pri_qos_s cn52xx; - struct cvmx_pip_hg_pri_qos_s cn52xxp1; - struct cvmx_pip_hg_pri_qos_s cn56xx; -} cvmx_pip_hg_pri_qos_t; - - -/** - * cvmx_pip_int_en - * - * PIP_INT_EN = PIP's Interrupt Enable Register - * - * Determines if hardward should raise an interrupt to software - * when an exception event occurs. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pip_int_en_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow - (not used in O2P) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure - (not used in O2P) */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC - (not used in O2P) */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn30xx; - struct cvmx_pip_int_en_cn30xx cn31xx; - struct cvmx_pip_int_en_cn30xx cn38xx; - struct cvmx_pip_int_en_cn30xx cn38xxp2; - struct cvmx_pip_int_en_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t reserved_1_1 : 1; - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t reserved_1_1 : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn50xx; - struct cvmx_pip_int_en_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t reserved_1_1 : 1; - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t reserved_1_1 : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } cn52xx; - struct cvmx_pip_int_en_cn52xx cn52xxp1; - struct cvmx_pip_int_en_s cn56xx; - struct cvmx_pip_int_en_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC - (Disabled in 56xx) */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn56xxp1; - struct cvmx_pip_int_en_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t reserved_9_11 : 3; - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t reserved_9_11 : 3; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } cn58xx; - struct cvmx_pip_int_en_cn30xx cn58xxp1; -} cvmx_pip_int_en_t; - - -/** - * cvmx_pip_int_reg - * - * PIP_INT_REG = PIP's Interrupt Register - * - * Any exception event that occurs is captured in the PIP_INT_REG. - * PIP_INT_REG will set the exception bit regardless of the value - * of PIP_INT_EN. PIP_INT_EN only controls if an interrupt is - * raised to software. - * - * Notes: - * * TODOOVR - * The PIP Todo list stores packets that have been received and require work - * queue entry generation. - * - * * SKPRUNT - * If a packet size is less then the amount programmed in the per port - * skippers, then there will be nothing to parse and the entire packet will - * basically be skipped over. This is probably not what the user desired, so - * there is an indication to software. - * - * * BADTAG - * A tag is considered bad when it is resued by a new packet before it was - * released by PIP. PIP considers a tag released by one of two methods. - * . QOS dropped so that it is released over the pip__ipd_release bus. - * . WorkQ entry is validated by the pip__ipd_done signal - * - * * PRTNXA - * If PIP receives a packet that is not in the valid port range, the port - * processed will be mapped into the valid port space (the mapping is - * currently unpredictable) and the PRTNXA bit will be set. PRTNXA will be - * set for packets received under the following conditions: - * - * * packet ports (ports 0-31) - * - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-31 - * - GMX_INF_MODE[TYPE]==1 (XAUI), received port is 1-31 - * * upper ports (pci and loopback ports 32-63) - * - received port is 40-47 or 52-63 - * - * * BCKPRS - * PIP can assert backpressure to the receive logic when the todo list - * exceeds a high-water mark. When this - * occurs, PIP can raise an interrupt to software. - * - * * PKTDRP - * PIP can drop packets based on QOS results received from IPD. If the QOS - * algorithm decides to drop a packet, PIP will assert an interrupt. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_pip_int_reg_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow - (not used in O2P) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure - (not used in O2P) */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC - (not used in O2P) */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t reserved_9_63 : 55; -#endif - } cn30xx; - struct cvmx_pip_int_reg_cn30xx cn31xx; - struct cvmx_pip_int_reg_cn30xx cn38xx; - struct cvmx_pip_int_reg_cn30xx cn38xxp2; - struct cvmx_pip_int_reg_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t reserved_1_1 : 1; - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t reserved_1_1 : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn50xx; - struct cvmx_pip_int_reg_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t reserved_1_1 : 1; - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t reserved_1_1 : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } cn52xx; - struct cvmx_pip_int_reg_cn52xx cn52xxp1; - struct cvmx_pip_int_reg_s cn56xx; - struct cvmx_pip_int_reg_cn56xxp1 - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t lenerr : 1; /**< Frame was received with length error */ - uint64_t maxerr : 1; /**< Frame was received with length > max_length */ - uint64_t minerr : 1; /**< Frame was received with length < min_length */ - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC - (Disabled in 56xx) */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t minerr : 1; - uint64_t maxerr : 1; - uint64_t lenerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } cn56xxp1; - struct cvmx_pip_int_reg_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t punyerr : 1; /**< Frame was received with length <=4B when CRC - stripping in IPD is enable */ - uint64_t reserved_9_11 : 3; - uint64_t beperr : 1; /**< Parity Error in back end memory */ - uint64_t feperr : 1; /**< Parity Error in front end memory */ - uint64_t todoovr : 1; /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */ - uint64_t skprunt : 1; /**< Packet was engulfed by skipper - This interrupt can occur with received PARTIAL - packets that are truncated to SKIP bytes or - smaller. */ - uint64_t badtag : 1; /**< A bad tag was sent from IPD */ - uint64_t prtnxa : 1; /**< Non-existent port */ - uint64_t bckprs : 1; /**< PIP asserted backpressure */ - uint64_t crcerr : 1; /**< PIP calculated bad CRC */ - uint64_t pktdrp : 1; /**< Packet Dropped due to QOS */ -#else - uint64_t pktdrp : 1; - uint64_t crcerr : 1; - uint64_t bckprs : 1; - uint64_t prtnxa : 1; - uint64_t badtag : 1; - uint64_t skprunt : 1; - uint64_t todoovr : 1; - uint64_t feperr : 1; - uint64_t beperr : 1; - uint64_t reserved_9_11 : 3; - uint64_t punyerr : 1; - uint64_t reserved_13_63 : 51; -#endif - } cn58xx; - struct cvmx_pip_int_reg_cn30xx cn58xxp1; -} cvmx_pip_int_reg_t; - - -/** - * cvmx_pip_ip_offset - * - * PIP_IP_OFFSET = Location of the IP in the workQ entry - * - * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires - * - * Notes: - * In normal configurations, OFFSET must be set in the 0..4 range to allow the - * entire IP and TCP/UDP headers to be buffered in HW and calculate the L4 - * checksum for TCP/UDP packets. - * - * The MAX value of OFFSET is determined by the the types of packets that can - * be sent to PIP as follows... - * - * Packet Type MAX OFFSET - * IPv4/TCP/UDP 7 - * IPv6/TCP/UDP 5 - * IPv6/without L4 parsing 6 - * - * If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase - * to 6. Here are the following programming restrictions for IPv6 packets and - * OFFSET==6: - * - * . PIP_GBL_CTL[TCP_FLAG] == 0 - * . PIP_GBL_CTL[L4_LEN] == 0 - * . PIP_GBL_CTL[L4_CHK] == 0 - * . PIP_GBL_CTL[L4_PRT] == 0 - * . PIP_GBL_CTL[L4_MAL] == 0 - * . PIP_DEC_IPSEC[TCP] == 0 - * . PIP_DEC_IPSEC[UDP] == 0 - * . PIP_PRT_TAG[IP6_DPRT] == 0 - * . PIP_PRT_TAG[IP6_SPRT] == 0 - * . PIP_PRT_TAG[TCP6_TAG] == 0 - * . PIP_GBL_CFG[TAG_SYN] == 0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_ip_offset_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t offset : 3; /**< Number of 8B ticks to include in workQ entry - prior to IP data - - 0: 0 Bytes / IP start at WORD4 of workQ entry - - 1: 8 Bytes / IP start at WORD5 of workQ entry - - 2: 16 Bytes / IP start at WORD6 of workQ entry - - 3: 24 Bytes / IP start at WORD7 of workQ entry - - 4: 32 Bytes / IP start at WORD8 of workQ entry - - 5: 40 Bytes / IP start at WORD9 of workQ entry - - 6: 48 Bytes / IP start at WORD10 of workQ entry - - 7: 56 Bytes / IP start at WORD11 of workQ entry */ -#else - uint64_t offset : 3; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_pip_ip_offset_s cn30xx; - struct cvmx_pip_ip_offset_s cn31xx; - struct cvmx_pip_ip_offset_s cn38xx; - struct cvmx_pip_ip_offset_s cn38xxp2; - struct cvmx_pip_ip_offset_s cn50xx; - struct cvmx_pip_ip_offset_s cn52xx; - struct cvmx_pip_ip_offset_s cn52xxp1; - struct cvmx_pip_ip_offset_s cn56xx; - struct cvmx_pip_ip_offset_s cn56xxp1; - struct cvmx_pip_ip_offset_s cn58xx; - struct cvmx_pip_ip_offset_s cn58xxp1; -} cvmx_pip_ip_offset_t; - - -/** - * cvmx_pip_prt_cfg# - * - * PIP_PRT_CFGX = Per port config information - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_prt_cfgx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_53_63 : 11; - uint64_t pad_len : 1; /**< When set, disables the length check for pkts with - padding in the client data */ - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */ - uint64_t lenerr_en : 1; /**< L2 length error check enable - Frame was received with length error */ - uint64_t maxerr_en : 1; /**< Max frame error check enable - Frame was received with length > max_length */ - uint64_t minerr_en : 1; /**< Min frame error check enable - Frame was received with length < min_length */ - uint64_t grp_wat_47 : 4; /**< GRP Watcher enable - (Watchers 4-7) */ - uint64_t qos_wat_47 : 4; /**< QOS Watcher enable - (Watchers 4-7) */ - uint64_t reserved_37_39 : 3; - uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet. - Normally, IPD will never drop a packet that PIP - indicates is RAW. - 0=never drop RAW packets based on RED algorithm - 1=allow RAW packet drops based on RED algorithm - (PASS2 only) */ - uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when - calculating mask tag hash - (PASS2 only) */ - uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size - (PASS2 only) */ - uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets - (not for PCI prts, 32-35) - (PASS2 only) */ - uint64_t grp_wat : 4; /**< GRP Watcher enable - (PASS2 only) */ - uint64_t hg_qos : 1; /**< When set, uses the HiGig priority bits as a - lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS) - to determine the QOS value - HG_QOS must not be set when HIGIG_EN=0 - (56xx pass2 only) */ - uint64_t qos : 3; /**< Default QOS level of the port */ - uint64_t qos_wat : 4; /**< QOS Watcher enable */ - uint64_t qos_vsel : 1; /**< Which QOS in PIP_QOS_VLAN to use - 0 = PIP_QOS_VLAN[QOS] - 1 = PIP_QOS_VLAN[QOS1] - (56xx pass2 only) */ - uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv - if VLAN exists, it is used - else if IP exists, Diffserv is used - else the per port default is used - Watchers are still highest priority */ - uint64_t qos_diff : 1; /**< QOS Diffserv */ - uint64_t qos_vlan : 1; /**< QOS VLAN */ - uint64_t reserved_13_15 : 3; - uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */ - uint64_t higig_en : 1; /**< Enable HiGig parsing - Should not be set for PCIe ports (ports 32-35) - When HIGIG_EN=1: - DSA_EN field below must be zero - SKIP field below is both Skip I size and the - size of the HiGig* header (12 or 16 bytes) - (56xx pass2 only) */ - uint64_t dsa_en : 1; /**< Enable DSA tag parsing - When DSA_EN=1: - HIGIG_EN field above must be zero - SKIP field below is size of DSA tag (4, 8, or - 12 bytes) rather than the size of Skip I - total SKIP (Skip I + header + Skip II - must be zero - INST_HDR field above must be zero (non-PCIe - ports) - For PCIe ports, NPEI_PKT*_INSTR_HDR[USE_IHDR] - and PCIE_INST_HDR[R] should be clear - MODE field below must be "skip to L2" - (56xx pass2 only) */ - cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode - 0 = no packet inspection (Uninterpreted) - 1 = L2 parsing / skip to L2 - 2 = IP parsing / skip to L3 - 3 = PCI Raw (illegal for software to set) */ - uint64_t reserved_7_7 : 1; - uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not - apply to packets on PCI ports when a PKT_INST_HDR - is present. See section 7.2.7 - Legal Skip - Values for further details. */ -#else - uint64_t skip : 7; - uint64_t reserved_7_7 : 1; - cvmx_pip_port_parse_mode_t mode : 2; - uint64_t dsa_en : 1; - uint64_t higig_en : 1; - uint64_t crc_en : 1; - uint64_t reserved_13_15 : 3; - uint64_t qos_vlan : 1; - uint64_t qos_diff : 1; - uint64_t qos_vod : 1; - uint64_t qos_vsel : 1; - uint64_t qos_wat : 4; - uint64_t qos : 3; - uint64_t hg_qos : 1; - uint64_t grp_wat : 4; - uint64_t inst_hdr : 1; - uint64_t dyn_rs : 1; - uint64_t tag_inc : 2; - uint64_t rawdrp : 1; - uint64_t reserved_37_39 : 3; - uint64_t qos_wat_47 : 4; - uint64_t grp_wat_47 : 4; - uint64_t minerr_en : 1; - uint64_t maxerr_en : 1; - uint64_t lenerr_en : 1; - uint64_t vlan_len : 1; - uint64_t pad_len : 1; - uint64_t reserved_53_63 : 11; -#endif - } s; - struct cvmx_pip_prt_cfgx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet. - Normally, IPD will never drop a packet that PIP - indicates is RAW. - 0=never drop RAW packets based on RED algorithm - 1=allow RAW packet drops based on RED algorithm */ - uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when - calculating mask tag hash */ - uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size */ - uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets - (not for PCI prts, 32-35) */ - uint64_t grp_wat : 4; /**< GRP Watcher enable */ - uint64_t reserved_27_27 : 1; - uint64_t qos : 3; /**< Default QOS level of the port */ - uint64_t qos_wat : 4; /**< QOS Watcher enable */ - uint64_t reserved_18_19 : 2; - uint64_t qos_diff : 1; /**< QOS Diffserv */ - uint64_t qos_vlan : 1; /**< QOS VLAN */ - uint64_t reserved_10_15 : 6; - cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode - 0 = no packet inspection (Uninterpreted) - 1 = L2 parsing / skip to L2 - 2 = IP parsing / skip to L3 - 3 = PCI Raw (illegal for software to set) */ - uint64_t reserved_7_7 : 1; - uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not - apply to packets on PCI ports when a PKT_INST_HDR - is present. See section 7.2.7 - Legal Skip - Values for further details. */ -#else - uint64_t skip : 7; - uint64_t reserved_7_7 : 1; - cvmx_pip_port_parse_mode_t mode : 2; - uint64_t reserved_10_15 : 6; - uint64_t qos_vlan : 1; - uint64_t qos_diff : 1; - uint64_t reserved_18_19 : 2; - uint64_t qos_wat : 4; - uint64_t qos : 3; - uint64_t reserved_27_27 : 1; - uint64_t grp_wat : 4; - uint64_t inst_hdr : 1; - uint64_t dyn_rs : 1; - uint64_t tag_inc : 2; - uint64_t rawdrp : 1; - uint64_t reserved_37_63 : 27; -#endif - } cn30xx; - struct cvmx_pip_prt_cfgx_cn30xx cn31xx; - struct cvmx_pip_prt_cfgx_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet. - Normally, IPD will never drop a packet that PIP - indicates is RAW. - 0=never drop RAW packets based on RED algorithm - 1=allow RAW packet drops based on RED algorithm - (PASS2 only) */ - uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when - calculating mask tag hash - (PASS2 only) */ - uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size - (PASS2 only) */ - uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets - (not for PCI prts, 32-35) - (PASS2 only) */ - uint64_t grp_wat : 4; /**< GRP Watcher enable - (PASS2 only) */ - uint64_t reserved_27_27 : 1; - uint64_t qos : 3; /**< Default QOS level of the port */ - uint64_t qos_wat : 4; /**< QOS Watcher enable */ - uint64_t reserved_18_19 : 2; - uint64_t qos_diff : 1; /**< QOS Diffserv */ - uint64_t qos_vlan : 1; /**< QOS VLAN */ - uint64_t reserved_13_15 : 3; - uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */ - uint64_t reserved_10_11 : 2; - cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode - 0 = no packet inspection (Uninterpreted) - 1 = L2 parsing / skip to L2 - 2 = IP parsing / skip to L3 - 3 = PCI Raw (illegal for software to set) */ - uint64_t reserved_7_7 : 1; - uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not - apply to packets on PCI ports when a PKT_INST_HDR - is present. See section 7.2.7 - Legal Skip - Values for further details. */ -#else - uint64_t skip : 7; - uint64_t reserved_7_7 : 1; - cvmx_pip_port_parse_mode_t mode : 2; - uint64_t reserved_10_11 : 2; - uint64_t crc_en : 1; - uint64_t reserved_13_15 : 3; - uint64_t qos_vlan : 1; - uint64_t qos_diff : 1; - uint64_t reserved_18_19 : 2; - uint64_t qos_wat : 4; - uint64_t qos : 3; - uint64_t reserved_27_27 : 1; - uint64_t grp_wat : 4; - uint64_t inst_hdr : 1; - uint64_t dyn_rs : 1; - uint64_t tag_inc : 2; - uint64_t rawdrp : 1; - uint64_t reserved_37_63 : 27; -#endif - } cn38xx; - struct cvmx_pip_prt_cfgx_cn38xx cn38xxp2; - struct cvmx_pip_prt_cfgx_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_53_63 : 11; - uint64_t pad_len : 1; /**< When set, disables the length check for pkts with - padding in the client data */ - uint64_t vlan_len : 1; /**< When set, disables the length check for VLAN pkts */ - uint64_t lenerr_en : 1; /**< L2 length error check enable - Frame was received with length error */ - uint64_t maxerr_en : 1; /**< Max frame error check enable - Frame was received with length > max_length */ - uint64_t minerr_en : 1; /**< Min frame error check enable - Frame was received with length < min_length */ - uint64_t grp_wat_47 : 4; /**< GRP Watcher enable - (Watchers 4-7) */ - uint64_t qos_wat_47 : 4; /**< QOS Watcher enable - (Watchers 4-7) */ - uint64_t reserved_37_39 : 3; - uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet. - Normally, IPD will never drop a packet that PIP - indicates is RAW. - 0=never drop RAW packets based on RED algorithm - 1=allow RAW packet drops based on RED algorithm */ - uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when - calculating mask tag hash */ - uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size */ - uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets - (not for PCI prts, 32-35) */ - uint64_t grp_wat : 4; /**< GRP Watcher enable */ - uint64_t reserved_27_27 : 1; - uint64_t qos : 3; /**< Default QOS level of the port */ - uint64_t qos_wat : 4; /**< QOS Watcher enable - (Watchers 0-3) */ - uint64_t reserved_19_19 : 1; - uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv - if VLAN exists, it is used - else if IP exists, Diffserv is used - else the per port default is used - Watchers are still highest priority */ - uint64_t qos_diff : 1; /**< QOS Diffserv */ - uint64_t qos_vlan : 1; /**< QOS VLAN */ - uint64_t reserved_13_15 : 3; - uint64_t crc_en : 1; /**< CRC Checking enabled - (Disabled in 5020) */ - uint64_t reserved_10_11 : 2; - cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode - 0 = no packet inspection (Uninterpreted) - 1 = L2 parsing / skip to L2 - 2 = IP parsing / skip to L3 - 3 = PCI Raw (illegal for software to set) */ - uint64_t reserved_7_7 : 1; - uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not - apply to packets on PCI ports when a PKT_INST_HDR - is present. See section 7.2.7 - Legal Skip - Values for further details. */ -#else - uint64_t skip : 7; - uint64_t reserved_7_7 : 1; - cvmx_pip_port_parse_mode_t mode : 2; - uint64_t reserved_10_11 : 2; - uint64_t crc_en : 1; - uint64_t reserved_13_15 : 3; - uint64_t qos_vlan : 1; - uint64_t qos_diff : 1; - uint64_t qos_vod : 1; - uint64_t reserved_19_19 : 1; - uint64_t qos_wat : 4; - uint64_t qos : 3; - uint64_t reserved_27_27 : 1; - uint64_t grp_wat : 4; - uint64_t inst_hdr : 1; - uint64_t dyn_rs : 1; - uint64_t tag_inc : 2; - uint64_t rawdrp : 1; - uint64_t reserved_37_39 : 3; - uint64_t qos_wat_47 : 4; - uint64_t grp_wat_47 : 4; - uint64_t minerr_en : 1; - uint64_t maxerr_en : 1; - uint64_t lenerr_en : 1; - uint64_t vlan_len : 1; - uint64_t pad_len : 1; - uint64_t reserved_53_63 : 11; -#endif - } cn50xx; - struct cvmx_pip_prt_cfgx_s cn52xx; - struct cvmx_pip_prt_cfgx_s cn52xxp1; - struct cvmx_pip_prt_cfgx_s cn56xx; - struct cvmx_pip_prt_cfgx_cn50xx cn56xxp1; - struct cvmx_pip_prt_cfgx_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t rawdrp : 1; /**< Allow the IPD to RED drop a packet. - Normally, IPD will never drop a packet that PIP - indicates is RAW. - 0=never drop RAW packets based on RED algorithm - 1=allow RAW packet drops based on RED algorithm - (PASS2 only) */ - uint64_t tag_inc : 2; /**< Which of the 4 PIP_TAG_INC to use when - calculating mask tag hash - (PASS2 only) */ - uint64_t dyn_rs : 1; /**< Dynamically calculate RS based on pkt size - (PASS2 only) */ - uint64_t inst_hdr : 1; /**< 8-byte INST_HDR is present on all packets - (not for PCI prts, 32-35) - (PASS2 only) */ - uint64_t grp_wat : 4; /**< GRP Watcher enable - (PASS2 only) */ - uint64_t reserved_27_27 : 1; - uint64_t qos : 3; /**< Default QOS level of the port */ - uint64_t qos_wat : 4; /**< QOS Watcher enable */ - uint64_t reserved_19_19 : 1; - uint64_t qos_vod : 1; /**< QOS VLAN over Diffserv - if VLAN exists, it is used - else if IP exists, Diffserv is used - else the per port default is used - Watchers are still highest priority */ - uint64_t qos_diff : 1; /**< QOS Diffserv */ - uint64_t qos_vlan : 1; /**< QOS VLAN */ - uint64_t reserved_13_15 : 3; - uint64_t crc_en : 1; /**< CRC Checking enabled (for ports 0-31 only) */ - uint64_t reserved_10_11 : 2; - cvmx_pip_port_parse_mode_t mode : 2; /**< Parse Mode - 0 = no packet inspection (Uninterpreted) - 1 = L2 parsing / skip to L2 - 2 = IP parsing / skip to L3 - 3 = PCI Raw (illegal for software to set) */ - uint64_t reserved_7_7 : 1; - uint64_t skip : 7; /**< Optional Skip I amount for packets. Does not - apply to packets on PCI ports when a PKT_INST_HDR - is present. See section 7.2.7 - Legal Skip - Values for further details. */ -#else - uint64_t skip : 7; - uint64_t reserved_7_7 : 1; - cvmx_pip_port_parse_mode_t mode : 2; - uint64_t reserved_10_11 : 2; - uint64_t crc_en : 1; - uint64_t reserved_13_15 : 3; - uint64_t qos_vlan : 1; - uint64_t qos_diff : 1; - uint64_t qos_vod : 1; - uint64_t reserved_19_19 : 1; - uint64_t qos_wat : 4; - uint64_t qos : 3; - uint64_t reserved_27_27 : 1; - uint64_t grp_wat : 4; - uint64_t inst_hdr : 1; - uint64_t dyn_rs : 1; - uint64_t tag_inc : 2; - uint64_t rawdrp : 1; - uint64_t reserved_37_63 : 27; -#endif - } cn58xx; - struct cvmx_pip_prt_cfgx_cn58xx cn58xxp1; -} cvmx_pip_prt_cfgx_t; - - -/** - * cvmx_pip_prt_tag# - * - * PIP_PRT_TAGX = Per port config information - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_prt_tagx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits - when GRPTAG is set. - (PASS2 only) */ - uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing - group when GRPTAG is set. - (PASS2 only) */ - uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute - the group in the work queue entry - GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE - (PASS2 only) */ - uint64_t grptag_mskip : 1; /**< When set, GRPTAG will be used regardless if the - packet IS_IP. */ - uint64_t tag_mode : 2; /**< Which tag algorithm to use - 0 = always use tuple tag algorithm - 1 = always use mask tag algorithm - 2 = if packet is IP, use tuple else use mask - 3 = tuple XOR mask - (PASS2 only) */ - uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in - tuple tag when VLAN stacking is detected - 0 = do not include VID in tuple tag generation - 1 = include VID (VLAN0) in hash - 2 = include VID (VLAN1) in hash - 3 = include VID ([VLAN0,VLAN1]) in hash - (PASS2 only) */ - uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag - when VLAN stacking is not detected - 0 = do not include VID in tuple tag generation - 1 = include VID in hash - (PASS2 only) */ - uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */ - uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is - included in tuple tag for IPv6 packets */ - uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is - included in tuple tag for IPv4 */ - uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is - included in tuple tag for IPv6 packets */ - uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is - included in tuple tag for IPv4 */ - uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple - tag hash */ - uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple - tag hash */ - uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple - tag hash */ - uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple - tag hash */ - uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple - tag hash */ - uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple - tag hash */ - cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6) - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4) - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */ -#else - uint64_t grp : 4; - cvmx_pow_tag_type_t non_tag_type : 2; - cvmx_pow_tag_type_t ip4_tag_type : 2; - cvmx_pow_tag_type_t ip6_tag_type : 2; - cvmx_pow_tag_type_t tcp4_tag_type : 2; - cvmx_pow_tag_type_t tcp6_tag_type : 2; - uint64_t ip4_src_flag : 1; - uint64_t ip6_src_flag : 1; - uint64_t ip4_dst_flag : 1; - uint64_t ip6_dst_flag : 1; - uint64_t ip4_pctl_flag : 1; - uint64_t ip6_nxth_flag : 1; - uint64_t ip4_sprt_flag : 1; - uint64_t ip6_sprt_flag : 1; - uint64_t ip4_dprt_flag : 1; - uint64_t ip6_dprt_flag : 1; - uint64_t inc_prt_flag : 1; - uint64_t inc_vlan : 1; - uint64_t inc_vs : 2; - uint64_t tag_mode : 2; - uint64_t grptag_mskip : 1; - uint64_t grptag : 1; - uint64_t grptagmask : 4; - uint64_t grptagbase : 4; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_pip_prt_tagx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t grptagbase : 4; /**< Offset to use when computing group from tag bits - when GRPTAG is set. */ - uint64_t grptagmask : 4; /**< Which bits of the tag to exclude when computing - group when GRPTAG is set. */ - uint64_t grptag : 1; /**< When set, use the lower bit of the tag to compute - the group in the work queue entry - GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */ - uint64_t reserved_30_30 : 1; - uint64_t tag_mode : 2; /**< Which tag algorithm to use - 0 = always use tuple tag algorithm - 1 = always use mask tag algorithm - 2 = if packet is IP, use tuple else use mask - 3 = tuple XOR mask */ - uint64_t inc_vs : 2; /**< determines the VLAN ID (VID) to be included in - tuple tag when VLAN stacking is detected - 0 = do not include VID in tuple tag generation - 1 = include VID (VLAN0) in hash - 2 = include VID (VLAN1) in hash - 3 = include VID ([VLAN0,VLAN1]) in hash */ - uint64_t inc_vlan : 1; /**< when set, the VLAN ID is included in tuple tag - when VLAN stacking is not detected - 0 = do not include VID in tuple tag generation - 1 = include VID in hash */ - uint64_t inc_prt_flag : 1; /**< sets whether the port is included in tuple tag */ - uint64_t ip6_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is - included in tuple tag for IPv6 packets */ - uint64_t ip4_dprt_flag : 1; /**< sets whether the TCP/UDP dst port is - included in tuple tag for IPv4 */ - uint64_t ip6_sprt_flag : 1; /**< sets whether the TCP/UDP src port is - included in tuple tag for IPv6 packets */ - uint64_t ip4_sprt_flag : 1; /**< sets whether the TCP/UDP src port is - included in tuple tag for IPv4 */ - uint64_t ip6_nxth_flag : 1; /**< sets whether ipv6 includes next header in tuple - tag hash */ - uint64_t ip4_pctl_flag : 1; /**< sets whether ipv4 includes protocol in tuple - tag hash */ - uint64_t ip6_dst_flag : 1; /**< sets whether ipv6 includes dst address in tuple - tag hash */ - uint64_t ip4_dst_flag : 1; /**< sets whether ipv4 includes dst address in tuple - tag hash */ - uint64_t ip6_src_flag : 1; /**< sets whether ipv6 includes src address in tuple - tag hash */ - uint64_t ip4_src_flag : 1; /**< sets whether ipv4 includes src address in tuple - tag hash */ - cvmx_pow_tag_type_t tcp6_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv6) - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t tcp4_tag_type : 2; /**< sets the tag_type of a TCP packet (IPv4) - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t ip6_tag_type : 2; /**< sets whether IPv6 packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t ip4_tag_type : 2; /**< sets whether IPv4 packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - cvmx_pow_tag_type_t non_tag_type : 2; /**< sets whether non-IP packet tag type - 0 = ordered tags - 1 = atomic tags - 2 = Null tags */ - uint64_t grp : 4; /**< 4-bit value indicating the group to schedule to */ -#else - uint64_t grp : 4; - cvmx_pow_tag_type_t non_tag_type : 2; - cvmx_pow_tag_type_t ip4_tag_type : 2; - cvmx_pow_tag_type_t ip6_tag_type : 2; - cvmx_pow_tag_type_t tcp4_tag_type : 2; - cvmx_pow_tag_type_t tcp6_tag_type : 2; - uint64_t ip4_src_flag : 1; - uint64_t ip6_src_flag : 1; - uint64_t ip4_dst_flag : 1; - uint64_t ip6_dst_flag : 1; - uint64_t ip4_pctl_flag : 1; - uint64_t ip6_nxth_flag : 1; - uint64_t ip4_sprt_flag : 1; - uint64_t ip6_sprt_flag : 1; - uint64_t ip4_dprt_flag : 1; - uint64_t ip6_dprt_flag : 1; - uint64_t inc_prt_flag : 1; - uint64_t inc_vlan : 1; - uint64_t inc_vs : 2; - uint64_t tag_mode : 2; - uint64_t reserved_30_30 : 1; - uint64_t grptag : 1; - uint64_t grptagmask : 4; - uint64_t grptagbase : 4; - uint64_t reserved_40_63 : 24; -#endif - } cn30xx; - struct cvmx_pip_prt_tagx_cn30xx cn31xx; - struct cvmx_pip_prt_tagx_cn30xx cn38xx; - struct cvmx_pip_prt_tagx_cn30xx cn38xxp2; - struct cvmx_pip_prt_tagx_s cn50xx; - struct cvmx_pip_prt_tagx_s cn52xx; - struct cvmx_pip_prt_tagx_s cn52xxp1; - struct cvmx_pip_prt_tagx_s cn56xx; - struct cvmx_pip_prt_tagx_s cn56xxp1; - struct cvmx_pip_prt_tagx_s cn58xx; - struct cvmx_pip_prt_tagx_s cn58xxp1; -} cvmx_pip_prt_tagx_t; - - -/** - * cvmx_pip_qos_diff# - * - * PIP_QOS_DIFFX = QOS Diffserv Tables - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_qos_diffx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t qos : 3; /**< Diffserv QOS level */ -#else - uint64_t qos : 3; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_pip_qos_diffx_s cn30xx; - struct cvmx_pip_qos_diffx_s cn31xx; - struct cvmx_pip_qos_diffx_s cn38xx; - struct cvmx_pip_qos_diffx_s cn38xxp2; - struct cvmx_pip_qos_diffx_s cn50xx; - struct cvmx_pip_qos_diffx_s cn52xx; - struct cvmx_pip_qos_diffx_s cn52xxp1; - struct cvmx_pip_qos_diffx_s cn56xx; - struct cvmx_pip_qos_diffx_s cn56xxp1; - struct cvmx_pip_qos_diffx_s cn58xx; - struct cvmx_pip_qos_diffx_s cn58xxp1; -} cvmx_pip_qos_diffx_t; - - -/** - * cvmx_pip_qos_vlan# - * - * PIP_QOS_VLANX = QOS VLAN Tables - * - * If the PIP indentifies a packet to be DSA/VLAN tagged, then the QOS - * can be set based on the DSA/VLAN user priority. These eight register - * comprise the QOS values for all DSA/VLAN user priority values. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_qos_vlanx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t qos1 : 3; /**< DSA/VLAN QOS level - Selected when PIP_PRT_CFGx[QOS_VSEL] = 1 - (56xx pass2 only) */ - uint64_t reserved_3_3 : 1; - uint64_t qos : 3; /**< VLAN QOS level */ -#else - uint64_t qos : 3; - uint64_t reserved_3_3 : 1; - uint64_t qos1 : 3; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_pip_qos_vlanx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t qos : 3; /**< VLAN QOS level */ -#else - uint64_t qos : 3; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_pip_qos_vlanx_cn30xx cn31xx; - struct cvmx_pip_qos_vlanx_cn30xx cn38xx; - struct cvmx_pip_qos_vlanx_cn30xx cn38xxp2; - struct cvmx_pip_qos_vlanx_cn30xx cn50xx; - struct cvmx_pip_qos_vlanx_s cn52xx; - struct cvmx_pip_qos_vlanx_s cn52xxp1; - struct cvmx_pip_qos_vlanx_s cn56xx; - struct cvmx_pip_qos_vlanx_cn30xx cn56xxp1; - struct cvmx_pip_qos_vlanx_cn30xx cn58xx; - struct cvmx_pip_qos_vlanx_cn30xx cn58xxp1; -} cvmx_pip_qos_vlanx_t; - - -/** - * cvmx_pip_qos_watch# - * - * PIP_QOS_WATCHX = QOS Watcher Tables - * - * Sets up the Configuration CSRs for the four QOS Watchers. - * Each Watcher can be set to look for a specific protocol, - * TCP/UDP destination port, or Ethertype to override the - * default QOS value. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_qos_watchx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t mask : 16; /**< Mask off a range of values (PASS2 only) */ - uint64_t reserved_28_31 : 4; - uint64_t grp : 4; /**< The GRP number of the watcher (PASS2 only) */ - uint64_t reserved_23_23 : 1; - uint64_t qos : 3; /**< The QOS level of the watcher */ - uint64_t reserved_19_19 : 1; - cvmx_pip_qos_watch_types match_type : 3; /**< The field for the watcher match against - 0 = disable across all ports - 1 = protocol (ipv4) - = next_header (ipv6) - 2 = TCP destination port - 3 = UDP destination port */ - uint64_t match_value : 16; /**< The value to watch for */ -#else - uint64_t match_value : 16; - cvmx_pip_qos_watch_types match_type : 3; - uint64_t reserved_19_19 : 1; - uint64_t qos : 3; - uint64_t reserved_23_23 : 1; - uint64_t grp : 4; - uint64_t reserved_28_31 : 4; - uint64_t mask : 16; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_pip_qos_watchx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t mask : 16; /**< Mask off a range of values */ - uint64_t reserved_28_31 : 4; - uint64_t grp : 4; /**< The GRP number of the watcher */ - uint64_t reserved_23_23 : 1; - uint64_t qos : 3; /**< The QOS level of the watcher */ - uint64_t reserved_18_19 : 2; - cvmx_pip_qos_watch_types match_type : 2; /**< The field for the watcher match against - 0 = disable across all ports - 1 = protocol (ipv4) - = next_header (ipv6) - 2 = TCP destination port - 3 = UDP destination port */ - uint64_t match_value : 16; /**< The value to watch for */ -#else - uint64_t match_value : 16; - cvmx_pip_qos_watch_types match_type : 2; - uint64_t reserved_18_19 : 2; - uint64_t qos : 3; - uint64_t reserved_23_23 : 1; - uint64_t grp : 4; - uint64_t reserved_28_31 : 4; - uint64_t mask : 16; - uint64_t reserved_48_63 : 16; -#endif - } cn30xx; - struct cvmx_pip_qos_watchx_cn30xx cn31xx; - struct cvmx_pip_qos_watchx_cn30xx cn38xx; - struct cvmx_pip_qos_watchx_cn30xx cn38xxp2; - struct cvmx_pip_qos_watchx_s cn50xx; - struct cvmx_pip_qos_watchx_s cn52xx; - struct cvmx_pip_qos_watchx_s cn52xxp1; - struct cvmx_pip_qos_watchx_s cn56xx; - struct cvmx_pip_qos_watchx_s cn56xxp1; - struct cvmx_pip_qos_watchx_cn30xx cn58xx; - struct cvmx_pip_qos_watchx_cn30xx cn58xxp1; -} cvmx_pip_qos_watchx_t; - - -/** - * cvmx_pip_raw_word - * - * PIP_RAW_WORD = The RAW Word2 of the workQ entry. - * - * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_raw_word_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_56_63 : 8; - uint64_t word : 56; /**< Word2 of the workQ entry - The 8-bit bufs field is still set by HW (IPD) */ -#else - uint64_t word : 56; - uint64_t reserved_56_63 : 8; -#endif - } s; - struct cvmx_pip_raw_word_s cn30xx; - struct cvmx_pip_raw_word_s cn31xx; - struct cvmx_pip_raw_word_s cn38xx; - struct cvmx_pip_raw_word_s cn38xxp2; - struct cvmx_pip_raw_word_s cn50xx; - struct cvmx_pip_raw_word_s cn52xx; - struct cvmx_pip_raw_word_s cn52xxp1; - struct cvmx_pip_raw_word_s cn56xx; - struct cvmx_pip_raw_word_s cn56xxp1; - struct cvmx_pip_raw_word_s cn58xx; - struct cvmx_pip_raw_word_s cn58xxp1; -} cvmx_pip_raw_word_t; - - -/** - * cvmx_pip_sft_rst - * - * PIP_SFT_RST = PIP Soft Reset - * - * When written to a '1', resets the pip block - * - * Notes: - * When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles - * in duration). Although this will reset much of PIP's internal state, some - * CSRs will not reset. - * - * . PIP_BIST_STATUS - * . PIP_STAT0_PRT* - * . PIP_STAT1_PRT* - * . PIP_STAT2_PRT* - * . PIP_STAT3_PRT* - * . PIP_STAT4_PRT* - * . PIP_STAT5_PRT* - * . PIP_STAT6_PRT* - * . PIP_STAT7_PRT* - * . PIP_STAT8_PRT* - * . PIP_STAT9_PRT* - * . PIP_STAT_INB_PKTS* - * . PIP_STAT_INB_OCTS* - * . PIP_STAT_INB_ERRS* - * . PIP_TAG_INC* - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_sft_rst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rst : 1; /**< Soft Reset */ -#else - uint64_t rst : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_pip_sft_rst_s cn30xx; - struct cvmx_pip_sft_rst_s cn31xx; - struct cvmx_pip_sft_rst_s cn38xx; - struct cvmx_pip_sft_rst_s cn50xx; - struct cvmx_pip_sft_rst_s cn52xx; - struct cvmx_pip_sft_rst_s cn52xxp1; - struct cvmx_pip_sft_rst_s cn56xx; - struct cvmx_pip_sft_rst_s cn56xxp1; - struct cvmx_pip_sft_rst_s cn58xx; - struct cvmx_pip_sft_rst_s cn58xxp1; -} cvmx_pip_sft_rst_t; - - -/** - * cvmx_pip_stat0_prt# - * - * PIP Statistics Counters - * - * Note: special stat counter behavior - * - * 1) Read and write operations must arbitrate for the statistics resources - * along with the packet engines which are incrementing the counters. - * In order to not drop packet information, the packet HW is always a - * higher priority and the CSR requests will only be satisified when - * there are idle cycles. This can potentially cause long delays if the - * system becomes full. - * - * 2) stat counters can be cleared in two ways. If PIP_STAT_CTL[RDCLR] is - * set, then all read accesses will clear the register. In addition, - * any write to a stats register will also reset the register to zero. - * Please note that the clearing operations must obey rule \#1 above. - * - * 3) all counters are wrapping - software must ensure they are read periodically - * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat0_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t drp_pkts : 32; /**< Inbound packets marked to be dropped by the IPD - QOS widget per port */ - uint64_t drp_octs : 32; /**< Inbound octets marked to be dropped by the IPD - QOS widget per port */ -#else - uint64_t drp_octs : 32; - uint64_t drp_pkts : 32; -#endif - } s; - struct cvmx_pip_stat0_prtx_s cn30xx; - struct cvmx_pip_stat0_prtx_s cn31xx; - struct cvmx_pip_stat0_prtx_s cn38xx; - struct cvmx_pip_stat0_prtx_s cn38xxp2; - struct cvmx_pip_stat0_prtx_s cn50xx; - struct cvmx_pip_stat0_prtx_s cn52xx; - struct cvmx_pip_stat0_prtx_s cn52xxp1; - struct cvmx_pip_stat0_prtx_s cn56xx; - struct cvmx_pip_stat0_prtx_s cn56xxp1; - struct cvmx_pip_stat0_prtx_s cn58xx; - struct cvmx_pip_stat0_prtx_s cn58xxp1; -} cvmx_pip_stat0_prtx_t; - - -/** - * cvmx_pip_stat1_prt# - * - * PIP_STAT1_PRTX = PIP_STAT_OCTS - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat1_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t octs : 48; /**< Number of octets received by PIP (good and bad) */ -#else - uint64_t octs : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_pip_stat1_prtx_s cn30xx; - struct cvmx_pip_stat1_prtx_s cn31xx; - struct cvmx_pip_stat1_prtx_s cn38xx; - struct cvmx_pip_stat1_prtx_s cn38xxp2; - struct cvmx_pip_stat1_prtx_s cn50xx; - struct cvmx_pip_stat1_prtx_s cn52xx; - struct cvmx_pip_stat1_prtx_s cn52xxp1; - struct cvmx_pip_stat1_prtx_s cn56xx; - struct cvmx_pip_stat1_prtx_s cn56xxp1; - struct cvmx_pip_stat1_prtx_s cn58xx; - struct cvmx_pip_stat1_prtx_s cn58xxp1; -} cvmx_pip_stat1_prtx_t; - - -/** - * cvmx_pip_stat2_prt# - * - * PIP_STAT2_PRTX = PIP_STAT_PKTS / PIP_STAT_RAW - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat2_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t pkts : 32; /**< Number of packets processed by PIP */ - uint64_t raw : 32; /**< RAWFULL + RAWSCH Packets without an L1/L2 error - received by PIP per port */ -#else - uint64_t raw : 32; - uint64_t pkts : 32; -#endif - } s; - struct cvmx_pip_stat2_prtx_s cn30xx; - struct cvmx_pip_stat2_prtx_s cn31xx; - struct cvmx_pip_stat2_prtx_s cn38xx; - struct cvmx_pip_stat2_prtx_s cn38xxp2; - struct cvmx_pip_stat2_prtx_s cn50xx; - struct cvmx_pip_stat2_prtx_s cn52xx; - struct cvmx_pip_stat2_prtx_s cn52xxp1; - struct cvmx_pip_stat2_prtx_s cn56xx; - struct cvmx_pip_stat2_prtx_s cn56xxp1; - struct cvmx_pip_stat2_prtx_s cn58xx; - struct cvmx_pip_stat2_prtx_s cn58xxp1; -} cvmx_pip_stat2_prtx_t; - - -/** - * cvmx_pip_stat3_prt# - * - * PIP_STAT3_PRTX = PIP_STAT_BCST / PIP_STAT_MCST - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat3_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bcst : 32; /**< Number of indentified L2 broadcast packets - Does not include multicast packets - Only includes packets whose parse mode is - SKIP_TO_L2. */ - uint64_t mcst : 32; /**< Number of indentified L2 multicast packets - Does not include broadcast packets - Only includes packets whose parse mode is - SKIP_TO_L2. */ -#else - uint64_t mcst : 32; - uint64_t bcst : 32; -#endif - } s; - struct cvmx_pip_stat3_prtx_s cn30xx; - struct cvmx_pip_stat3_prtx_s cn31xx; - struct cvmx_pip_stat3_prtx_s cn38xx; - struct cvmx_pip_stat3_prtx_s cn38xxp2; - struct cvmx_pip_stat3_prtx_s cn50xx; - struct cvmx_pip_stat3_prtx_s cn52xx; - struct cvmx_pip_stat3_prtx_s cn52xxp1; - struct cvmx_pip_stat3_prtx_s cn56xx; - struct cvmx_pip_stat3_prtx_s cn56xxp1; - struct cvmx_pip_stat3_prtx_s cn58xx; - struct cvmx_pip_stat3_prtx_s cn58xxp1; -} cvmx_pip_stat3_prtx_t; - - -/** - * cvmx_pip_stat4_prt# - * - * PIP_STAT4_PRTX = PIP_STAT_HIST1 / PIP_STAT_HIST0 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat4_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t h65to127 : 32; /**< Number of 65-127B packets */ - uint64_t h64 : 32; /**< Number of 1-64B packets */ -#else - uint64_t h64 : 32; - uint64_t h65to127 : 32; -#endif - } s; - struct cvmx_pip_stat4_prtx_s cn30xx; - struct cvmx_pip_stat4_prtx_s cn31xx; - struct cvmx_pip_stat4_prtx_s cn38xx; - struct cvmx_pip_stat4_prtx_s cn38xxp2; - struct cvmx_pip_stat4_prtx_s cn50xx; - struct cvmx_pip_stat4_prtx_s cn52xx; - struct cvmx_pip_stat4_prtx_s cn52xxp1; - struct cvmx_pip_stat4_prtx_s cn56xx; - struct cvmx_pip_stat4_prtx_s cn56xxp1; - struct cvmx_pip_stat4_prtx_s cn58xx; - struct cvmx_pip_stat4_prtx_s cn58xxp1; -} cvmx_pip_stat4_prtx_t; - - -/** - * cvmx_pip_stat5_prt# - * - * PIP_STAT5_PRTX = PIP_STAT_HIST3 / PIP_STAT_HIST2 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat5_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t h256to511 : 32; /**< Number of 256-511B packets */ - uint64_t h128to255 : 32; /**< Number of 128-255B packets */ -#else - uint64_t h128to255 : 32; - uint64_t h256to511 : 32; -#endif - } s; - struct cvmx_pip_stat5_prtx_s cn30xx; - struct cvmx_pip_stat5_prtx_s cn31xx; - struct cvmx_pip_stat5_prtx_s cn38xx; - struct cvmx_pip_stat5_prtx_s cn38xxp2; - struct cvmx_pip_stat5_prtx_s cn50xx; - struct cvmx_pip_stat5_prtx_s cn52xx; - struct cvmx_pip_stat5_prtx_s cn52xxp1; - struct cvmx_pip_stat5_prtx_s cn56xx; - struct cvmx_pip_stat5_prtx_s cn56xxp1; - struct cvmx_pip_stat5_prtx_s cn58xx; - struct cvmx_pip_stat5_prtx_s cn58xxp1; -} cvmx_pip_stat5_prtx_t; - - -/** - * cvmx_pip_stat6_prt# - * - * PIP_STAT6_PRTX = PIP_STAT_HIST5 / PIP_STAT_HIST4 - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat6_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t h1024to1518 : 32; /**< Number of 1024-1518B packets */ - uint64_t h512to1023 : 32; /**< Number of 512-1023B packets */ -#else - uint64_t h512to1023 : 32; - uint64_t h1024to1518 : 32; -#endif - } s; - struct cvmx_pip_stat6_prtx_s cn30xx; - struct cvmx_pip_stat6_prtx_s cn31xx; - struct cvmx_pip_stat6_prtx_s cn38xx; - struct cvmx_pip_stat6_prtx_s cn38xxp2; - struct cvmx_pip_stat6_prtx_s cn50xx; - struct cvmx_pip_stat6_prtx_s cn52xx; - struct cvmx_pip_stat6_prtx_s cn52xxp1; - struct cvmx_pip_stat6_prtx_s cn56xx; - struct cvmx_pip_stat6_prtx_s cn56xxp1; - struct cvmx_pip_stat6_prtx_s cn58xx; - struct cvmx_pip_stat6_prtx_s cn58xxp1; -} cvmx_pip_stat6_prtx_t; - - -/** - * cvmx_pip_stat7_prt# - * - * PIP_STAT7_PRTX = PIP_STAT_FCS / PIP_STAT_HIST6 - * - * - * Notes: - * FCS is not checked on the PCI ports 32..35. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat7_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fcs : 32; /**< Number of packets with FCS or Align opcode errors */ - uint64_t h1519 : 32; /**< Number of 1519-max packets */ -#else - uint64_t h1519 : 32; - uint64_t fcs : 32; -#endif - } s; - struct cvmx_pip_stat7_prtx_s cn30xx; - struct cvmx_pip_stat7_prtx_s cn31xx; - struct cvmx_pip_stat7_prtx_s cn38xx; - struct cvmx_pip_stat7_prtx_s cn38xxp2; - struct cvmx_pip_stat7_prtx_s cn50xx; - struct cvmx_pip_stat7_prtx_s cn52xx; - struct cvmx_pip_stat7_prtx_s cn52xxp1; - struct cvmx_pip_stat7_prtx_s cn56xx; - struct cvmx_pip_stat7_prtx_s cn56xxp1; - struct cvmx_pip_stat7_prtx_s cn58xx; - struct cvmx_pip_stat7_prtx_s cn58xxp1; -} cvmx_pip_stat7_prtx_t; - - -/** - * cvmx_pip_stat8_prt# - * - * PIP_STAT8_PRTX = PIP_STAT_FRAG / PIP_STAT_UNDER - * - * - * Notes: - * FCS is not checked on the PCI ports 32..35. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat8_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t frag : 32; /**< Number of packets with length < min and FCS error */ - uint64_t undersz : 32; /**< Number of packets with length < min */ -#else - uint64_t undersz : 32; - uint64_t frag : 32; -#endif - } s; - struct cvmx_pip_stat8_prtx_s cn30xx; - struct cvmx_pip_stat8_prtx_s cn31xx; - struct cvmx_pip_stat8_prtx_s cn38xx; - struct cvmx_pip_stat8_prtx_s cn38xxp2; - struct cvmx_pip_stat8_prtx_s cn50xx; - struct cvmx_pip_stat8_prtx_s cn52xx; - struct cvmx_pip_stat8_prtx_s cn52xxp1; - struct cvmx_pip_stat8_prtx_s cn56xx; - struct cvmx_pip_stat8_prtx_s cn56xxp1; - struct cvmx_pip_stat8_prtx_s cn58xx; - struct cvmx_pip_stat8_prtx_s cn58xxp1; -} cvmx_pip_stat8_prtx_t; - - -/** - * cvmx_pip_stat9_prt# - * - * PIP_STAT9_PRTX = PIP_STAT_JABBER / PIP_STAT_OVER - * - * - * Notes: - * FCS is not checked on the PCI ports 32..35. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat9_prtx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t jabber : 32; /**< Number of packets with length > max and FCS error */ - uint64_t oversz : 32; /**< Number of packets with length > max */ -#else - uint64_t oversz : 32; - uint64_t jabber : 32; -#endif - } s; - struct cvmx_pip_stat9_prtx_s cn30xx; - struct cvmx_pip_stat9_prtx_s cn31xx; - struct cvmx_pip_stat9_prtx_s cn38xx; - struct cvmx_pip_stat9_prtx_s cn38xxp2; - struct cvmx_pip_stat9_prtx_s cn50xx; - struct cvmx_pip_stat9_prtx_s cn52xx; - struct cvmx_pip_stat9_prtx_s cn52xxp1; - struct cvmx_pip_stat9_prtx_s cn56xx; - struct cvmx_pip_stat9_prtx_s cn56xxp1; - struct cvmx_pip_stat9_prtx_s cn58xx; - struct cvmx_pip_stat9_prtx_s cn58xxp1; -} cvmx_pip_stat9_prtx_t; - - -/** - * cvmx_pip_stat_ctl - * - * PIP_STAT_CTL = PIP's Stat Control Register - * - * Controls how the PIP statistics counters are handled. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t rdclr : 1; /**< Stat registers are read and clear - 0 = stat registers hold value when read - 1 = stat registers are cleared when read */ -#else - uint64_t rdclr : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_pip_stat_ctl_s cn30xx; - struct cvmx_pip_stat_ctl_s cn31xx; - struct cvmx_pip_stat_ctl_s cn38xx; - struct cvmx_pip_stat_ctl_s cn38xxp2; - struct cvmx_pip_stat_ctl_s cn50xx; - struct cvmx_pip_stat_ctl_s cn52xx; - struct cvmx_pip_stat_ctl_s cn52xxp1; - struct cvmx_pip_stat_ctl_s cn56xx; - struct cvmx_pip_stat_ctl_s cn56xxp1; - struct cvmx_pip_stat_ctl_s cn58xx; - struct cvmx_pip_stat_ctl_s cn58xxp1; -} cvmx_pip_stat_ctl_t; - - -/** - * cvmx_pip_stat_inb_errs# - * - * PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port - * - * Inbound stats collect all data sent to PIP from all packet interfaces. - * Its the raw counts of everything that comes into the block. The counts - * will reflect all error packets and packets dropped by the PKI RED engine. - * These counts are intended for system debug, but could convey useful - * information in production systems. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat_inb_errsx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t errs : 16; /**< Number of packets with GMX/SPX/PCI errors - received by PIP */ -#else - uint64_t errs : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pip_stat_inb_errsx_s cn30xx; - struct cvmx_pip_stat_inb_errsx_s cn31xx; - struct cvmx_pip_stat_inb_errsx_s cn38xx; - struct cvmx_pip_stat_inb_errsx_s cn38xxp2; - struct cvmx_pip_stat_inb_errsx_s cn50xx; - struct cvmx_pip_stat_inb_errsx_s cn52xx; - struct cvmx_pip_stat_inb_errsx_s cn52xxp1; - struct cvmx_pip_stat_inb_errsx_s cn56xx; - struct cvmx_pip_stat_inb_errsx_s cn56xxp1; - struct cvmx_pip_stat_inb_errsx_s cn58xx; - struct cvmx_pip_stat_inb_errsx_s cn58xxp1; -} cvmx_pip_stat_inb_errsx_t; - - -/** - * cvmx_pip_stat_inb_octs# - * - * PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port - * - * Inbound stats collect all data sent to PIP from all packet interfaces. - * Its the raw counts of everything that comes into the block. The counts - * will reflect all error packets and packets dropped by the PKI RED engine. - * These counts are intended for system debug, but could convey useful - * information in production systems. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat_inb_octsx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t octs : 48; /**< Total number of octets from all packets received - by PIP */ -#else - uint64_t octs : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_pip_stat_inb_octsx_s cn30xx; - struct cvmx_pip_stat_inb_octsx_s cn31xx; - struct cvmx_pip_stat_inb_octsx_s cn38xx; - struct cvmx_pip_stat_inb_octsx_s cn38xxp2; - struct cvmx_pip_stat_inb_octsx_s cn50xx; - struct cvmx_pip_stat_inb_octsx_s cn52xx; - struct cvmx_pip_stat_inb_octsx_s cn52xxp1; - struct cvmx_pip_stat_inb_octsx_s cn56xx; - struct cvmx_pip_stat_inb_octsx_s cn56xxp1; - struct cvmx_pip_stat_inb_octsx_s cn58xx; - struct cvmx_pip_stat_inb_octsx_s cn58xxp1; -} cvmx_pip_stat_inb_octsx_t; - - -/** - * cvmx_pip_stat_inb_pkts# - * - * PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port - * - * Inbound stats collect all data sent to PIP from all packet interfaces. - * Its the raw counts of everything that comes into the block. The counts - * will reflect all error packets and packets dropped by the PKI RED engine. - * These counts are intended for system debug, but could convey useful - * information in production systems. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_stat_inb_pktsx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pkts : 32; /**< Number of packets without GMX/SPX/PCI errors - received by PIP */ -#else - uint64_t pkts : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pip_stat_inb_pktsx_s cn30xx; - struct cvmx_pip_stat_inb_pktsx_s cn31xx; - struct cvmx_pip_stat_inb_pktsx_s cn38xx; - struct cvmx_pip_stat_inb_pktsx_s cn38xxp2; - struct cvmx_pip_stat_inb_pktsx_s cn50xx; - struct cvmx_pip_stat_inb_pktsx_s cn52xx; - struct cvmx_pip_stat_inb_pktsx_s cn52xxp1; - struct cvmx_pip_stat_inb_pktsx_s cn56xx; - struct cvmx_pip_stat_inb_pktsx_s cn56xxp1; - struct cvmx_pip_stat_inb_pktsx_s cn58xx; - struct cvmx_pip_stat_inb_pktsx_s cn58xxp1; -} cvmx_pip_stat_inb_pktsx_t; - - -/** - * cvmx_pip_tag_inc# - * - * PIP_TAG_INC = Which bytes to include in the new tag hash algorithm - * - * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask) - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_tag_incx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t en : 8; /**< Which bytes to include in mask tag algorithm - Broken into 4, 16-entry masks to cover 128B - PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use - registers 0-15 map to PIP_PRT_CFG[TAG_INC] == 0 - registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1 - registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2 - registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3 - [7] coresponds to the MSB of the 8B word - [0] coresponds to the LSB of the 8B word - (PASS2 only) */ -#else - uint64_t en : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pip_tag_incx_s cn30xx; - struct cvmx_pip_tag_incx_s cn31xx; - struct cvmx_pip_tag_incx_s cn38xx; - struct cvmx_pip_tag_incx_s cn38xxp2; - struct cvmx_pip_tag_incx_s cn50xx; - struct cvmx_pip_tag_incx_s cn52xx; - struct cvmx_pip_tag_incx_s cn52xxp1; - struct cvmx_pip_tag_incx_s cn56xx; - struct cvmx_pip_tag_incx_s cn56xxp1; - struct cvmx_pip_tag_incx_s cn58xx; - struct cvmx_pip_tag_incx_s cn58xxp1; -} cvmx_pip_tag_incx_t; - - -/** - * cvmx_pip_tag_mask - * - * PIP_TAG_MASK = Mask bit in the tag generation - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_tag_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mask : 16; /**< When set, MASK clears individual bits of lower 16 - bits of the computed tag. Does not effect RAW - or INSTR HDR packets. */ -#else - uint64_t mask : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pip_tag_mask_s cn30xx; - struct cvmx_pip_tag_mask_s cn31xx; - struct cvmx_pip_tag_mask_s cn38xx; - struct cvmx_pip_tag_mask_s cn38xxp2; - struct cvmx_pip_tag_mask_s cn50xx; - struct cvmx_pip_tag_mask_s cn52xx; - struct cvmx_pip_tag_mask_s cn52xxp1; - struct cvmx_pip_tag_mask_s cn56xx; - struct cvmx_pip_tag_mask_s cn56xxp1; - struct cvmx_pip_tag_mask_s cn58xx; - struct cvmx_pip_tag_mask_s cn58xxp1; -} cvmx_pip_tag_mask_t; - - -/** - * cvmx_pip_tag_secret - * - * PIP_TAG_SECRET = Initial value in tag generation - * - * The source and destination IV's provide a mechanism for each Octeon to be unique. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_tag_secret_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t dst : 16; /**< Secret for the destination tuple tag CRC calc */ - uint64_t src : 16; /**< Secret for the source tuple tag CRC calc */ -#else - uint64_t src : 16; - uint64_t dst : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pip_tag_secret_s cn30xx; - struct cvmx_pip_tag_secret_s cn31xx; - struct cvmx_pip_tag_secret_s cn38xx; - struct cvmx_pip_tag_secret_s cn38xxp2; - struct cvmx_pip_tag_secret_s cn50xx; - struct cvmx_pip_tag_secret_s cn52xx; - struct cvmx_pip_tag_secret_s cn52xxp1; - struct cvmx_pip_tag_secret_s cn56xx; - struct cvmx_pip_tag_secret_s cn56xxp1; - struct cvmx_pip_tag_secret_s cn58xx; - struct cvmx_pip_tag_secret_s cn58xxp1; -} cvmx_pip_tag_secret_t; - - -/** - * cvmx_pip_todo_entry - * - * PIP_TODO_ENTRY = Head entry of the Todo list (debug only) - * - * Summary of the current packet that has completed and waiting to be processed - */ -typedef union -{ - uint64_t u64; - struct cvmx_pip_todo_entry_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t val : 1; /**< Entry is valid */ - uint64_t reserved_62_62 : 1; - uint64_t entry : 62; /**< Todo list entry summary */ -#else - uint64_t entry : 62; - uint64_t reserved_62_62 : 1; - uint64_t val : 1; -#endif - } s; - struct cvmx_pip_todo_entry_s cn30xx; - struct cvmx_pip_todo_entry_s cn31xx; - struct cvmx_pip_todo_entry_s cn38xx; - struct cvmx_pip_todo_entry_s cn38xxp2; - struct cvmx_pip_todo_entry_s cn50xx; - struct cvmx_pip_todo_entry_s cn52xx; - struct cvmx_pip_todo_entry_s cn52xxp1; - struct cvmx_pip_todo_entry_s cn56xx; - struct cvmx_pip_todo_entry_s cn56xxp1; - struct cvmx_pip_todo_entry_s cn58xx; - struct cvmx_pip_todo_entry_s cn58xxp1; -} cvmx_pip_todo_entry_t; - - -/** - * cvmx_pko_mem_count0 - * - * Notes: - * Total number of packets seen by PKO, per port - * A write to this address will clear the entry whose index is specified as COUNT[5:0]. - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_count0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t count : 32; /**< Total number of packets seen by PKO */ -#else - uint64_t count : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pko_mem_count0_s cn30xx; - struct cvmx_pko_mem_count0_s cn31xx; - struct cvmx_pko_mem_count0_s cn38xx; - struct cvmx_pko_mem_count0_s cn38xxp2; - struct cvmx_pko_mem_count0_s cn50xx; - struct cvmx_pko_mem_count0_s cn52xx; - struct cvmx_pko_mem_count0_s cn52xxp1; - struct cvmx_pko_mem_count0_s cn56xx; - struct cvmx_pko_mem_count0_s cn56xxp1; - struct cvmx_pko_mem_count0_s cn58xx; - struct cvmx_pko_mem_count0_s cn58xxp1; -} cvmx_pko_mem_count0_t; - - -/** - * cvmx_pko_mem_count1 - * - * Notes: - * Total number of bytes seen by PKO, per port - * A write to this address will clear the entry whose index is specified as COUNT[5:0]. - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_count1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t count : 48; /**< Total number of bytes seen by PKO */ -#else - uint64_t count : 48; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_pko_mem_count1_s cn30xx; - struct cvmx_pko_mem_count1_s cn31xx; - struct cvmx_pko_mem_count1_s cn38xx; - struct cvmx_pko_mem_count1_s cn38xxp2; - struct cvmx_pko_mem_count1_s cn50xx; - struct cvmx_pko_mem_count1_s cn52xx; - struct cvmx_pko_mem_count1_s cn52xxp1; - struct cvmx_pko_mem_count1_s cn56xx; - struct cvmx_pko_mem_count1_s cn56xxp1; - struct cvmx_pko_mem_count1_s cn58xx; - struct cvmx_pko_mem_count1_s cn58xxp1; -} cvmx_pko_mem_count1_t; - - -/** - * cvmx_pko_mem_debug0 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.cmnd[63:0] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fau : 28; /**< Fetch and add command words */ - uint64_t cmd : 14; /**< Command word */ - uint64_t segs : 6; /**< Number of segments/gather size */ - uint64_t size : 16; /**< Packet length in bytes */ -#else - uint64_t size : 16; - uint64_t segs : 6; - uint64_t cmd : 14; - uint64_t fau : 28; -#endif - } s; - struct cvmx_pko_mem_debug0_s cn30xx; - struct cvmx_pko_mem_debug0_s cn31xx; - struct cvmx_pko_mem_debug0_s cn38xx; - struct cvmx_pko_mem_debug0_s cn38xxp2; - struct cvmx_pko_mem_debug0_s cn50xx; - struct cvmx_pko_mem_debug0_s cn52xx; - struct cvmx_pko_mem_debug0_s cn52xxp1; - struct cvmx_pko_mem_debug0_s cn56xx; - struct cvmx_pko_mem_debug0_s cn56xxp1; - struct cvmx_pko_mem_debug0_s cn58xx; - struct cvmx_pko_mem_debug0_s cn58xxp1; -} cvmx_pko_mem_debug0_t; - - -/** - * cvmx_pko_mem_debug1 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.curr[63:0] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t ptr : 40; /**< Data pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } s; - struct cvmx_pko_mem_debug1_s cn30xx; - struct cvmx_pko_mem_debug1_s cn31xx; - struct cvmx_pko_mem_debug1_s cn38xx; - struct cvmx_pko_mem_debug1_s cn38xxp2; - struct cvmx_pko_mem_debug1_s cn50xx; - struct cvmx_pko_mem_debug1_s cn52xx; - struct cvmx_pko_mem_debug1_s cn52xxp1; - struct cvmx_pko_mem_debug1_s cn56xx; - struct cvmx_pko_mem_debug1_s cn56xxp1; - struct cvmx_pko_mem_debug1_s cn58xx; - struct cvmx_pko_mem_debug1_s cn58xxp1; -} cvmx_pko_mem_debug1_t; - - -/** - * cvmx_pko_mem_debug10 - * - * Notes: - * Internal per-port state intended for debug use only - pko.dat.ptr.ptrs1, pko.dat.ptr.ptrs2 - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug10_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug10_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fau : 28; /**< Fetch and add command words */ - uint64_t cmd : 14; /**< Command word */ - uint64_t segs : 6; /**< Number of segments/gather size */ - uint64_t size : 16; /**< Packet length in bytes */ -#else - uint64_t size : 16; - uint64_t segs : 6; - uint64_t cmd : 14; - uint64_t fau : 28; -#endif - } cn30xx; - struct cvmx_pko_mem_debug10_cn30xx cn31xx; - struct cvmx_pko_mem_debug10_cn30xx cn38xx; - struct cvmx_pko_mem_debug10_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug10_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t ptrs1 : 17; /**< Internal state */ - uint64_t reserved_17_31 : 15; - uint64_t ptrs2 : 17; /**< Internal state */ -#else - uint64_t ptrs2 : 17; - uint64_t reserved_17_31 : 15; - uint64_t ptrs1 : 17; - uint64_t reserved_49_63 : 15; -#endif - } cn50xx; - struct cvmx_pko_mem_debug10_cn50xx cn52xx; - struct cvmx_pko_mem_debug10_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug10_cn50xx cn56xx; - struct cvmx_pko_mem_debug10_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug10_cn50xx cn58xx; - struct cvmx_pko_mem_debug10_cn50xx cn58xxp1; -} cvmx_pko_mem_debug10_t; - - -/** - * cvmx_pko_mem_debug11 - * - * Notes: - * Internal per-port state intended for debug use only - pko.out.sta.state[22:0] - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug11_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t reserved_0_39 : 40; -#else - uint64_t reserved_0_39 : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } s; - struct cvmx_pko_mem_debug11_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t ptr : 40; /**< Data pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } cn30xx; - struct cvmx_pko_mem_debug11_cn30xx cn31xx; - struct cvmx_pko_mem_debug11_cn30xx cn38xx; - struct cvmx_pko_mem_debug11_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug11_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t maj : 1; /**< Internal state */ - uint64_t uid : 3; /**< Internal state */ - uint64_t sop : 1; /**< Internal state */ - uint64_t len : 1; /**< Internal state */ - uint64_t chk : 1; /**< Internal state */ - uint64_t cnt : 13; /**< Internal state */ - uint64_t mod : 3; /**< Internal state */ -#else - uint64_t mod : 3; - uint64_t cnt : 13; - uint64_t chk : 1; - uint64_t len : 1; - uint64_t sop : 1; - uint64_t uid : 3; - uint64_t maj : 1; - uint64_t reserved_23_63 : 41; -#endif - } cn50xx; - struct cvmx_pko_mem_debug11_cn50xx cn52xx; - struct cvmx_pko_mem_debug11_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug11_cn50xx cn56xx; - struct cvmx_pko_mem_debug11_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug11_cn50xx cn58xx; - struct cvmx_pko_mem_debug11_cn50xx cn58xxp1; -} cvmx_pko_mem_debug11_t; - - -/** - * cvmx_pko_mem_debug12 - * - * Notes: - * Internal per-port state intended for debug use only - pko.out.ctl.cmnd[63:0] - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug12_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug12_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< WorkQ data or Store0 pointer */ -#else - uint64_t data : 64; -#endif - } cn30xx; - struct cvmx_pko_mem_debug12_cn30xx cn31xx; - struct cvmx_pko_mem_debug12_cn30xx cn38xx; - struct cvmx_pko_mem_debug12_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug12_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t fau : 28; /**< Fetch and add command words */ - uint64_t cmd : 14; /**< Command word */ - uint64_t segs : 6; /**< Number of segments/gather size */ - uint64_t size : 16; /**< Packet length in bytes */ -#else - uint64_t size : 16; - uint64_t segs : 6; - uint64_t cmd : 14; - uint64_t fau : 28; -#endif - } cn50xx; - struct cvmx_pko_mem_debug12_cn50xx cn52xx; - struct cvmx_pko_mem_debug12_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug12_cn50xx cn56xx; - struct cvmx_pko_mem_debug12_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug12_cn50xx cn58xx; - struct cvmx_pko_mem_debug12_cn50xx cn58xxp1; -} cvmx_pko_mem_debug12_t; - - -/** - * cvmx_pko_mem_debug13 - * - * Notes: - * Internal per-port state intended for debug use only - pko.out.ctl.head[63:0] - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug13_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t reserved_0_55 : 56; -#else - uint64_t reserved_0_55 : 56; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } s; - struct cvmx_pko_mem_debug13_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_51_63 : 13; - uint64_t widx : 17; /**< PDB widx */ - uint64_t ridx2 : 17; /**< PDB ridx2 */ - uint64_t widx2 : 17; /**< PDB widx2 */ -#else - uint64_t widx2 : 17; - uint64_t ridx2 : 17; - uint64_t widx : 17; - uint64_t reserved_51_63 : 13; -#endif - } cn30xx; - struct cvmx_pko_mem_debug13_cn30xx cn31xx; - struct cvmx_pko_mem_debug13_cn30xx cn38xx; - struct cvmx_pko_mem_debug13_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug13_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t ptr : 40; /**< Data pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } cn50xx; - struct cvmx_pko_mem_debug13_cn50xx cn52xx; - struct cvmx_pko_mem_debug13_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug13_cn50xx cn56xx; - struct cvmx_pko_mem_debug13_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug13_cn50xx cn58xx; - struct cvmx_pko_mem_debug13_cn50xx cn58xxp1; -} cvmx_pko_mem_debug13_t; - - -/** - * cvmx_pko_mem_debug14 - * - * Notes: - * Internal per-port state intended for debug use only - pko.prt.psb.save[63:0] - * This CSR is a memory of 120 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug14_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug14_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t ridx : 17; /**< PDB ridx */ -#else - uint64_t ridx : 17; - uint64_t reserved_17_63 : 47; -#endif - } cn30xx; - struct cvmx_pko_mem_debug14_cn30xx cn31xx; - struct cvmx_pko_mem_debug14_cn30xx cn38xx; - struct cvmx_pko_mem_debug14_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug14_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Command words */ -#else - uint64_t data : 64; -#endif - } cn52xx; - struct cvmx_pko_mem_debug14_cn52xx cn52xxp1; - struct cvmx_pko_mem_debug14_cn52xx cn56xx; - struct cvmx_pko_mem_debug14_cn52xx cn56xxp1; -} cvmx_pko_mem_debug14_t; - - -/** - * cvmx_pko_mem_debug2 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.head[63:0] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t ptr : 40; /**< Data pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } s; - struct cvmx_pko_mem_debug2_s cn30xx; - struct cvmx_pko_mem_debug2_s cn31xx; - struct cvmx_pko_mem_debug2_s cn38xx; - struct cvmx_pko_mem_debug2_s cn38xxp2; - struct cvmx_pko_mem_debug2_s cn50xx; - struct cvmx_pko_mem_debug2_s cn52xx; - struct cvmx_pko_mem_debug2_s cn52xxp1; - struct cvmx_pko_mem_debug2_s cn56xx; - struct cvmx_pko_mem_debug2_s cn56xxp1; - struct cvmx_pko_mem_debug2_s cn58xx; - struct cvmx_pko_mem_debug2_s cn58xxp1; -} cvmx_pko_mem_debug2_t; - - -/** - * cvmx_pko_mem_debug3 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.resp[63:0] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug3_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t i : 1; /**< "I" value used for free operation */ - uint64_t back : 4; /**< Back value used for free operation */ - uint64_t pool : 3; /**< Pool value used for free operation */ - uint64_t size : 16; /**< Size in bytes */ - uint64_t ptr : 40; /**< Data pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t pool : 3; - uint64_t back : 4; - uint64_t i : 1; -#endif - } cn30xx; - struct cvmx_pko_mem_debug3_cn30xx cn31xx; - struct cvmx_pko_mem_debug3_cn30xx cn38xx; - struct cvmx_pko_mem_debug3_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug3_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< WorkQ data or Store0 pointer */ -#else - uint64_t data : 64; -#endif - } cn50xx; - struct cvmx_pko_mem_debug3_cn50xx cn52xx; - struct cvmx_pko_mem_debug3_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug3_cn50xx cn56xx; - struct cvmx_pko_mem_debug3_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug3_cn50xx cn58xx; - struct cvmx_pko_mem_debug3_cn50xx cn58xxp1; -} cvmx_pko_mem_debug3_t; - - -/** - * cvmx_pko_mem_debug4 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.state[63:0] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug4_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< WorkQ data or Store0 pointer */ -#else - uint64_t data : 64; -#endif - } cn30xx; - struct cvmx_pko_mem_debug4_cn30xx cn31xx; - struct cvmx_pko_mem_debug4_cn30xx cn38xx; - struct cvmx_pko_mem_debug4_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug4_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cmnd_segs : 3; /**< Internal state */ - uint64_t cmnd_siz : 16; /**< Internal state */ - uint64_t cmnd_off : 6; /**< Internal state */ - uint64_t uid : 3; /**< Internal state */ - uint64_t dread_sop : 1; /**< Internal state */ - uint64_t init_dwrite : 1; /**< Internal state */ - uint64_t chk_once : 1; /**< Internal state */ - uint64_t chk_mode : 1; /**< Internal state */ - uint64_t active : 1; /**< Internal state */ - uint64_t static_p : 1; /**< Internal state */ - uint64_t qos : 3; /**< Internal state */ - uint64_t qcb_ridx : 5; /**< Internal state */ - uint64_t qid_off_max : 4; /**< Internal state */ - uint64_t qid_off : 4; /**< Internal state */ - uint64_t qid_base : 8; /**< Internal state */ - uint64_t wait : 1; /**< Internal state */ - uint64_t minor : 2; /**< Internal state */ - uint64_t major : 3; /**< Internal state */ -#else - uint64_t major : 3; - uint64_t minor : 2; - uint64_t wait : 1; - uint64_t qid_base : 8; - uint64_t qid_off : 4; - uint64_t qid_off_max : 4; - uint64_t qcb_ridx : 5; - uint64_t qos : 3; - uint64_t static_p : 1; - uint64_t active : 1; - uint64_t chk_mode : 1; - uint64_t chk_once : 1; - uint64_t init_dwrite : 1; - uint64_t dread_sop : 1; - uint64_t uid : 3; - uint64_t cmnd_off : 6; - uint64_t cmnd_siz : 16; - uint64_t cmnd_segs : 3; -#endif - } cn50xx; - struct cvmx_pko_mem_debug4_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t curr_siz : 8; /**< Internal state */ - uint64_t curr_off : 16; /**< Internal state */ - uint64_t cmnd_segs : 6; /**< Internal state */ - uint64_t cmnd_siz : 16; /**< Internal state */ - uint64_t cmnd_off : 6; /**< Internal state */ - uint64_t uid : 2; /**< Internal state */ - uint64_t dread_sop : 1; /**< Internal state */ - uint64_t init_dwrite : 1; /**< Internal state */ - uint64_t chk_once : 1; /**< Internal state */ - uint64_t chk_mode : 1; /**< Internal state */ - uint64_t wait : 1; /**< Internal state */ - uint64_t minor : 2; /**< Internal state */ - uint64_t major : 3; /**< Internal state */ -#else - uint64_t major : 3; - uint64_t minor : 2; - uint64_t wait : 1; - uint64_t chk_mode : 1; - uint64_t chk_once : 1; - uint64_t init_dwrite : 1; - uint64_t dread_sop : 1; - uint64_t uid : 2; - uint64_t cmnd_off : 6; - uint64_t cmnd_siz : 16; - uint64_t cmnd_segs : 6; - uint64_t curr_off : 16; - uint64_t curr_siz : 8; -#endif - } cn52xx; - struct cvmx_pko_mem_debug4_cn52xx cn52xxp1; - struct cvmx_pko_mem_debug4_cn52xx cn56xx; - struct cvmx_pko_mem_debug4_cn52xx cn56xxp1; - struct cvmx_pko_mem_debug4_cn50xx cn58xx; - struct cvmx_pko_mem_debug4_cn50xx cn58xxp1; -} cvmx_pko_mem_debug4_t; - - -/** - * cvmx_pko_mem_debug5 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.state[127:64] - * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_mem_debug5_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dwri_mod : 1; /**< Dwrite mod */ - uint64_t dwri_sop : 1; /**< Dwrite sop needed */ - uint64_t dwri_len : 1; /**< Dwrite len */ - uint64_t dwri_cnt : 13; /**< Dwrite count */ - uint64_t cmnd_siz : 16; /**< Copy of cmnd.size */ - uint64_t uid : 1; /**< UID */ - uint64_t xfer_wor : 1; /**< Transfer work needed */ - uint64_t xfer_dwr : 1; /**< Transfer dwrite needed */ - uint64_t cbuf_fre : 1; /**< Cbuf needs free */ - uint64_t reserved_27_27 : 1; - uint64_t chk_mode : 1; /**< Checksum mode */ - uint64_t active : 1; /**< Port is active */ - uint64_t qos : 3; /**< Current QOS round */ - uint64_t qcb_ridx : 5; /**< Buffer read index for QCB */ - uint64_t qid_off : 3; /**< Offset to be added to QID_BASE for current queue */ - uint64_t qid_base : 7; /**< Absolute QID of the queue array base = &QUEUES[0] */ - uint64_t wait : 1; /**< State wait when set */ - uint64_t minor : 2; /**< State minor code */ - uint64_t major : 4; /**< State major code */ -#else - uint64_t major : 4; - uint64_t minor : 2; - uint64_t wait : 1; - uint64_t qid_base : 7; - uint64_t qid_off : 3; - uint64_t qcb_ridx : 5; - uint64_t qos : 3; - uint64_t active : 1; - uint64_t chk_mode : 1; - uint64_t reserved_27_27 : 1; - uint64_t cbuf_fre : 1; - uint64_t xfer_dwr : 1; - uint64_t xfer_wor : 1; - uint64_t uid : 1; - uint64_t cmnd_siz : 16; - uint64_t dwri_cnt : 13; - uint64_t dwri_len : 1; - uint64_t dwri_sop : 1; - uint64_t dwri_mod : 1; -#endif - } cn30xx; - struct cvmx_pko_mem_debug5_cn30xx cn31xx; - struct cvmx_pko_mem_debug5_cn30xx cn38xx; - struct cvmx_pko_mem_debug5_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug5_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t curr_ptr : 29; /**< Internal state */ - uint64_t curr_siz : 16; /**< Internal state */ - uint64_t curr_off : 16; /**< Internal state */ - uint64_t cmnd_segs : 3; /**< Internal state */ -#else - uint64_t cmnd_segs : 3; - uint64_t curr_off : 16; - uint64_t curr_siz : 16; - uint64_t curr_ptr : 29; -#endif - } cn50xx; - struct cvmx_pko_mem_debug5_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_54_63 : 10; - uint64_t nxt_inflt : 6; /**< Internal state */ - uint64_t curr_ptr : 40; /**< Internal state */ - uint64_t curr_siz : 8; /**< Internal state */ -#else - uint64_t curr_siz : 8; - uint64_t curr_ptr : 40; - uint64_t nxt_inflt : 6; - uint64_t reserved_54_63 : 10; -#endif - } cn52xx; - struct cvmx_pko_mem_debug5_cn52xx cn52xxp1; - struct cvmx_pko_mem_debug5_cn52xx cn56xx; - struct cvmx_pko_mem_debug5_cn52xx cn56xxp1; - struct cvmx_pko_mem_debug5_cn50xx cn58xx; - struct cvmx_pko_mem_debug5_cn50xx cn58xxp1; -} cvmx_pko_mem_debug5_t; - - -/** - * cvmx_pko_mem_debug6 - * - * Notes: - * Internal per-port state intended for debug use only - pko_prt_psb.port[63:0] - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t qid_offres : 4; /**< Internal state */ - uint64_t qid_offths : 4; /**< Internal state */ - uint64_t preempter : 1; /**< Internal state */ - uint64_t preemptee : 1; /**< Internal state */ - uint64_t preempted : 1; /**< Internal state */ - uint64_t active : 1; /**< Internal state */ - uint64_t statc : 1; /**< Internal state */ - uint64_t qos : 3; /**< Internal state */ - uint64_t qcb_ridx : 5; /**< Internal state */ - uint64_t qid_offmax : 4; /**< Internal state */ - uint64_t reserved_0_11 : 12; -#else - uint64_t reserved_0_11 : 12; - uint64_t qid_offmax : 4; - uint64_t qcb_ridx : 5; - uint64_t qos : 3; - uint64_t statc : 1; - uint64_t active : 1; - uint64_t preempted : 1; - uint64_t preemptee : 1; - uint64_t preempter : 1; - uint64_t qid_offths : 4; - uint64_t qid_offres : 4; - uint64_t reserved_37_63 : 27; -#endif - } s; - struct cvmx_pko_mem_debug6_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t qid_offm : 3; /**< Qid offset max */ - uint64_t static_p : 1; /**< Static port when set */ - uint64_t work_min : 3; /**< Work minor */ - uint64_t dwri_chk : 1; /**< Dwrite checksum mode */ - uint64_t dwri_uid : 1; /**< Dwrite UID */ - uint64_t dwri_mod : 2; /**< Dwrite mod */ -#else - uint64_t dwri_mod : 2; - uint64_t dwri_uid : 1; - uint64_t dwri_chk : 1; - uint64_t work_min : 3; - uint64_t static_p : 1; - uint64_t qid_offm : 3; - uint64_t reserved_11_63 : 53; -#endif - } cn30xx; - struct cvmx_pko_mem_debug6_cn30xx cn31xx; - struct cvmx_pko_mem_debug6_cn30xx cn38xx; - struct cvmx_pko_mem_debug6_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug6_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t curr_ptr : 11; /**< Internal state */ -#else - uint64_t curr_ptr : 11; - uint64_t reserved_11_63 : 53; -#endif - } cn50xx; - struct cvmx_pko_mem_debug6_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_37_63 : 27; - uint64_t qid_offres : 4; /**< Internal state */ - uint64_t qid_offths : 4; /**< Internal state */ - uint64_t preempter : 1; /**< Internal state */ - uint64_t preemptee : 1; /**< Internal state */ - uint64_t preempted : 1; /**< Internal state */ - uint64_t active : 1; /**< Internal state */ - uint64_t statc : 1; /**< Internal state */ - uint64_t qos : 3; /**< Internal state */ - uint64_t qcb_ridx : 5; /**< Internal state */ - uint64_t qid_offmax : 4; /**< Internal state */ - uint64_t qid_off : 4; /**< Internal state */ - uint64_t qid_base : 8; /**< Internal state */ -#else - uint64_t qid_base : 8; - uint64_t qid_off : 4; - uint64_t qid_offmax : 4; - uint64_t qcb_ridx : 5; - uint64_t qos : 3; - uint64_t statc : 1; - uint64_t active : 1; - uint64_t preempted : 1; - uint64_t preemptee : 1; - uint64_t preempter : 1; - uint64_t qid_offths : 4; - uint64_t qid_offres : 4; - uint64_t reserved_37_63 : 27; -#endif - } cn52xx; - struct cvmx_pko_mem_debug6_cn52xx cn52xxp1; - struct cvmx_pko_mem_debug6_cn52xx cn56xx; - struct cvmx_pko_mem_debug6_cn52xx cn56xxp1; - struct cvmx_pko_mem_debug6_cn50xx cn58xx; - struct cvmx_pko_mem_debug6_cn50xx cn58xxp1; -} cvmx_pko_mem_debug6_t; - - -/** - * cvmx_pko_mem_debug7 - * - * Notes: - * Internal per-queue state intended for debug use only - pko_prt_qsb.state[63:0] - * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t qos : 5; /**< QOS mask to enable the queue when set */ - uint64_t tail : 1; /**< This queue is the last (tail) in the queue array */ - uint64_t reserved_0_57 : 58; -#else - uint64_t reserved_0_57 : 58; - uint64_t tail : 1; - uint64_t qos : 5; -#endif - } s; - struct cvmx_pko_mem_debug7_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_58_63 : 6; - uint64_t dwb : 9; /**< Calculated DWB count used for free operation */ - uint64_t start : 33; /**< Calculated start address used for free operation */ - uint64_t size : 16; /**< Packet length in bytes */ -#else - uint64_t size : 16; - uint64_t start : 33; - uint64_t dwb : 9; - uint64_t reserved_58_63 : 6; -#endif - } cn30xx; - struct cvmx_pko_mem_debug7_cn30xx cn31xx; - struct cvmx_pko_mem_debug7_cn30xx cn38xx; - struct cvmx_pko_mem_debug7_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug7_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t qos : 5; /**< QOS mask to enable the queue when set */ - uint64_t tail : 1; /**< This queue is the last (tail) in the queue array */ - uint64_t buf_siz : 13; /**< Command buffer remaining size in words */ - uint64_t buf_ptr : 33; /**< Command word pointer */ - uint64_t qcb_widx : 6; /**< Buffer write index for QCB */ - uint64_t qcb_ridx : 6; /**< Buffer read index for QCB */ -#else - uint64_t qcb_ridx : 6; - uint64_t qcb_widx : 6; - uint64_t buf_ptr : 33; - uint64_t buf_siz : 13; - uint64_t tail : 1; - uint64_t qos : 5; -#endif - } cn50xx; - struct cvmx_pko_mem_debug7_cn50xx cn52xx; - struct cvmx_pko_mem_debug7_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug7_cn50xx cn56xx; - struct cvmx_pko_mem_debug7_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug7_cn50xx cn58xx; - struct cvmx_pko_mem_debug7_cn50xx cn58xxp1; -} cvmx_pko_mem_debug7_t; - - -/** - * cvmx_pko_mem_debug8 - * - * Notes: - * Internal per-queue state intended for debug use only - pko_prt_qsb.state[91:64] - * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug8_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_59_63 : 5; - uint64_t tail : 1; /**< This queue is the last (tail) in the queue array */ - uint64_t buf_siz : 13; /**< Command buffer remaining size in words */ - uint64_t reserved_0_44 : 45; -#else - uint64_t reserved_0_44 : 45; - uint64_t buf_siz : 13; - uint64_t tail : 1; - uint64_t reserved_59_63 : 5; -#endif - } s; - struct cvmx_pko_mem_debug8_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t qos : 5; /**< QOS mask to enable the queue when set */ - uint64_t tail : 1; /**< This queue is the last (tail) in the queue array */ - uint64_t buf_siz : 13; /**< Command buffer remaining size in words */ - uint64_t buf_ptr : 33; /**< Command word pointer */ - uint64_t qcb_widx : 6; /**< Buffer write index for QCB */ - uint64_t qcb_ridx : 6; /**< Buffer read index for QCB */ -#else - uint64_t qcb_ridx : 6; - uint64_t qcb_widx : 6; - uint64_t buf_ptr : 33; - uint64_t buf_siz : 13; - uint64_t tail : 1; - uint64_t qos : 5; -#endif - } cn30xx; - struct cvmx_pko_mem_debug8_cn30xx cn31xx; - struct cvmx_pko_mem_debug8_cn30xx cn38xx; - struct cvmx_pko_mem_debug8_cn30xx cn38xxp2; - struct cvmx_pko_mem_debug8_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t doorbell : 20; /**< Doorbell count */ - uint64_t reserved_6_7 : 2; - uint64_t static_p : 1; /**< Static priority */ - uint64_t s_tail : 1; /**< Static tail */ - uint64_t static_q : 1; /**< Static priority */ - uint64_t qos : 3; /**< QOS mask to enable the queue when set */ -#else - uint64_t qos : 3; - uint64_t static_q : 1; - uint64_t s_tail : 1; - uint64_t static_p : 1; - uint64_t reserved_6_7 : 2; - uint64_t doorbell : 20; - uint64_t reserved_28_63 : 36; -#endif - } cn50xx; - struct cvmx_pko_mem_debug8_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t preempter : 1; /**< Preempter */ - uint64_t doorbell : 20; /**< Doorbell count */ - uint64_t reserved_7_7 : 1; - uint64_t preemptee : 1; /**< Preemptee */ - uint64_t static_p : 1; /**< Static priority */ - uint64_t s_tail : 1; /**< Static tail */ - uint64_t static_q : 1; /**< Static priority */ - uint64_t qos : 3; /**< QOS mask to enable the queue when set */ -#else - uint64_t qos : 3; - uint64_t static_q : 1; - uint64_t s_tail : 1; - uint64_t static_p : 1; - uint64_t preemptee : 1; - uint64_t reserved_7_7 : 1; - uint64_t doorbell : 20; - uint64_t preempter : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn52xx; - struct cvmx_pko_mem_debug8_cn52xx cn52xxp1; - struct cvmx_pko_mem_debug8_cn52xx cn56xx; - struct cvmx_pko_mem_debug8_cn52xx cn56xxp1; - struct cvmx_pko_mem_debug8_cn50xx cn58xx; - struct cvmx_pko_mem_debug8_cn50xx cn58xxp1; -} cvmx_pko_mem_debug8_t; - - -/** - * cvmx_pko_mem_debug9 - * - * Notes: - * Internal per-port state intended for debug use only - pko.dat.ptr.ptrs0, pko.dat.ptr.ptrs3 - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_debug9_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t ptrs0 : 17; /**< Internal state */ - uint64_t reserved_0_31 : 32; -#else - uint64_t reserved_0_31 : 32; - uint64_t ptrs0 : 17; - uint64_t reserved_49_63 : 15; -#endif - } s; - struct cvmx_pko_mem_debug9_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t doorbell : 20; /**< Doorbell count */ - uint64_t reserved_5_7 : 3; - uint64_t s_tail : 1; /**< reads as zero (S_TAIL cannot be read) */ - uint64_t static_q : 1; /**< reads as zero (STATIC_Q cannot be read) */ - uint64_t qos : 3; /**< QOS mask to enable the queue when set */ -#else - uint64_t qos : 3; - uint64_t static_q : 1; - uint64_t s_tail : 1; - uint64_t reserved_5_7 : 3; - uint64_t doorbell : 20; - uint64_t reserved_28_63 : 36; -#endif - } cn30xx; - struct cvmx_pko_mem_debug9_cn30xx cn31xx; - struct cvmx_pko_mem_debug9_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t doorbell : 20; /**< Doorbell count */ - uint64_t reserved_6_7 : 2; - uint64_t static_p : 1; /**< Static priority (port) */ - uint64_t s_tail : 1; /**< Static tail */ - uint64_t static_q : 1; /**< Static priority */ - uint64_t qos : 3; /**< QOS mask to enable the queue when set */ -#else - uint64_t qos : 3; - uint64_t static_q : 1; - uint64_t s_tail : 1; - uint64_t static_p : 1; - uint64_t reserved_6_7 : 2; - uint64_t doorbell : 20; - uint64_t reserved_28_63 : 36; -#endif - } cn38xx; - struct cvmx_pko_mem_debug9_cn38xx cn38xxp2; - struct cvmx_pko_mem_debug9_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_49_63 : 15; - uint64_t ptrs0 : 17; /**< Internal state */ - uint64_t reserved_17_31 : 15; - uint64_t ptrs3 : 17; /**< Internal state */ -#else - uint64_t ptrs3 : 17; - uint64_t reserved_17_31 : 15; - uint64_t ptrs0 : 17; - uint64_t reserved_49_63 : 15; -#endif - } cn50xx; - struct cvmx_pko_mem_debug9_cn50xx cn52xx; - struct cvmx_pko_mem_debug9_cn50xx cn52xxp1; - struct cvmx_pko_mem_debug9_cn50xx cn56xx; - struct cvmx_pko_mem_debug9_cn50xx cn56xxp1; - struct cvmx_pko_mem_debug9_cn50xx cn58xx; - struct cvmx_pko_mem_debug9_cn50xx cn58xxp1; -} cvmx_pko_mem_debug9_t; - - -/** - * cvmx_pko_mem_port_ptrs - * - * Notes: - * Sets the port to engine mapping, per port. Ports marked as static priority need not be contiguous, - * but they must be the lowest numbered PIDs mapped to this EID and must have QOS_MASK=0xff. If EID==8 - * or EID==9, then PID[1:0] is used to direct the packet to the correct port on that interface. - * EID==15 can be used for unused PKO-internal ports. - * BP_PORT==63 means that the PKO-internal port is not backpressured. - * BP_PORTs are assumed to belong to an interface as follows: - * 36 <= BP_PORT < 40 -> loopback interface - * 32 <= BP_PORT < 36 -> PCIe interface - * 0 <= BP_PORT < 16 -> SGMII/Xaui interface 0 - * The reset configuration is the following: - * PID EID(ext port) BP_PORT QOS_MASK STATIC_P - * ------------------------------------------- - * 0 0( 0) 0 0xff 0 - * 1 1( 1) 1 0xff 0 - * 2 2( 2) 2 0xff 0 - * 3 3( 3) 3 0xff 0 - * 4 0( 0) 4 0xff 0 - * 5 1( 1) 5 0xff 0 - * 6 2( 2) 6 0xff 0 - * 7 3( 3) 7 0xff 0 - * 8 0( 0) 8 0xff 0 - * 9 1( 1) 9 0xff 0 - * 10 2( 2) 10 0xff 0 - * 11 3( 3) 11 0xff 0 - * 12 0( 0) 12 0xff 0 - * 13 1( 1) 13 0xff 0 - * 14 2( 2) 14 0xff 0 - * 15 3( 3) 15 0xff 0 - * ------------------------------------------- - * 16 0( 0) 0 0xff 0 - * 17 1( 1) 1 0xff 0 - * 18 2( 2) 2 0xff 0 - * 19 3( 3) 3 0xff 0 - * 20 0( 0) 4 0xff 0 - * 21 1( 1) 5 0xff 0 - * 22 2( 2) 6 0xff 0 - * 23 3( 3) 7 0xff 0 - * 24 0( 0) 8 0xff 0 - * 25 1( 1) 9 0xff 0 - * 26 2( 2) 10 0xff 0 - * 27 3( 3) 11 0xff 0 - * 28 0( 0) 12 0xff 0 - * 29 1( 1) 13 0xff 0 - * 30 2( 2) 14 0xff 0 - * 31 3( 3) 15 0xff 0 - * ------------------------------------------- - * 32 8(32) 32 0xff 0 - * 33 8(33) 33 0xff 0 - * 34 8(34) 34 0xff 0 - * 35 8(35) 35 0xff 0 - * ------------------------------------------- - * 36 9(36) 36 0xff 0 - * 37 9(37) 37 0xff 0 - * 38 9(38) 38 0xff 0 - * 39 9(39) 39 0xff 0 - * - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_port_ptrs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_62_63 : 2; - uint64_t static_p : 1; /**< Set if this PID has static priority */ - uint64_t qos_mask : 8; /**< Mask to control priority across 8 QOS rounds */ - uint64_t reserved_16_52 : 37; - uint64_t bp_port : 6; /**< PID listens to BP_PORT for per-packet backpressure - Legal BP_PORTs: 0-39, 63 (63 means no BP) */ - uint64_t eid : 4; /**< Engine ID to which this port is mapped - Legal EIDs: 0-9, 15 (15 only if port not used) */ - uint64_t pid : 6; /**< Port ID[5:0] */ -#else - uint64_t pid : 6; - uint64_t eid : 4; - uint64_t bp_port : 6; - uint64_t reserved_16_52 : 37; - uint64_t qos_mask : 8; - uint64_t static_p : 1; - uint64_t reserved_62_63 : 2; -#endif - } s; - struct cvmx_pko_mem_port_ptrs_s cn52xx; - struct cvmx_pko_mem_port_ptrs_s cn52xxp1; - struct cvmx_pko_mem_port_ptrs_s cn56xx; - struct cvmx_pko_mem_port_ptrs_s cn56xxp1; -} cvmx_pko_mem_port_ptrs_t; - - -/** - * cvmx_pko_mem_port_qos - * - * Notes: - * Sets the QOS mask, per port. These QOS_MASK bits are logically and physically the same QOS_MASK - * bits in PKO_MEM_PORT_PTRS. This CSR address allows the QOS_MASK bits to be written during PKO - * operation without affecting any other port state. The engine to which port PID is mapped is engine - * EID. Note that the port to engine mapping must be the same as was previously programmed via the - * PKO_MEM_PORT_PTRS CSR. - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_port_qos_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_61_63 : 3; - uint64_t qos_mask : 8; /**< Mask to control priority across 8 QOS rounds */ - uint64_t reserved_10_52 : 43; - uint64_t eid : 4; /**< Engine ID to which this port is mapped - Legal EIDs: 0-9 */ - uint64_t pid : 6; /**< Port ID[5:0] */ -#else - uint64_t pid : 6; - uint64_t eid : 4; - uint64_t reserved_10_52 : 43; - uint64_t qos_mask : 8; - uint64_t reserved_61_63 : 3; -#endif - } s; - struct cvmx_pko_mem_port_qos_s cn52xx; - struct cvmx_pko_mem_port_qos_s cn52xxp1; - struct cvmx_pko_mem_port_qos_s cn56xx; - struct cvmx_pko_mem_port_qos_s cn56xxp1; -} cvmx_pko_mem_port_qos_t; - - -/** - * cvmx_pko_mem_port_rate0 - * - * Notes: - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_port_rate0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_51_63 : 13; - uint64_t rate_word : 19; /**< Rate limiting adder per 8 byte */ - uint64_t rate_pkt : 24; /**< Rate limiting adder per packet */ - uint64_t reserved_6_7 : 2; - uint64_t pid : 6; /**< Port ID[5:0] */ -#else - uint64_t pid : 6; - uint64_t reserved_6_7 : 2; - uint64_t rate_pkt : 24; - uint64_t rate_word : 19; - uint64_t reserved_51_63 : 13; -#endif - } s; - struct cvmx_pko_mem_port_rate0_s cn52xx; - struct cvmx_pko_mem_port_rate0_s cn52xxp1; - struct cvmx_pko_mem_port_rate0_s cn56xx; - struct cvmx_pko_mem_port_rate0_s cn56xxp1; -} cvmx_pko_mem_port_rate0_t; - - -/** - * cvmx_pko_mem_port_rate1 - * - * Notes: - * Writing PKO_MEM_PORT_RATE1[PID,RATE_LIM] has the side effect of setting the corresponding - * accumulator to zero. - * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_port_rate1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rate_lim : 24; /**< Rate limiting accumulator limit */ - uint64_t reserved_6_7 : 2; - uint64_t pid : 6; /**< Port ID[5:0] */ -#else - uint64_t pid : 6; - uint64_t reserved_6_7 : 2; - uint64_t rate_lim : 24; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pko_mem_port_rate1_s cn52xx; - struct cvmx_pko_mem_port_rate1_s cn52xxp1; - struct cvmx_pko_mem_port_rate1_s cn56xx; - struct cvmx_pko_mem_port_rate1_s cn56xxp1; -} cvmx_pko_mem_port_rate1_t; - - -/** - * cvmx_pko_mem_queue_ptrs - * - * Notes: - * Sets the queue to port mapping and the initial command buffer pointer, per queue - * Each queue may map to at most one port. No more than 16 queues may map to a port. The set of - * queues that is mapped to a port must be a contiguous array of queues. The port to which queue QID - * is mapped is port PID. The index of queue QID in port PID's queue list is IDX. The last queue in - * port PID's queue array must have its TAIL bit set. Unused queues must be mapped to port 63. - * STATIC_Q marks queue QID as having static priority. STATIC_P marks the port PID to which QID is - * mapped as having at least one queue with static priority. If any QID that maps to PID has static - * priority, then all QID that map to PID must have STATIC_P set. Queues marked as static priority - * must be contiguous and begin at IDX 0. The last queue that is marked as having static priority - * must have its S_TAIL bit set. - * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_queue_ptrs_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t s_tail : 1; /**< Set if this QID is the tail of the static queues */ - uint64_t static_p : 1; /**< Set if any QID in this PID has static priority */ - uint64_t static_q : 1; /**< Set if this QID has static priority */ - uint64_t qos_mask : 8; /**< Mask to control priority across 8 QOS rounds */ - uint64_t buf_ptr : 36; /**< Command buffer pointer, <23:17> MBZ */ - uint64_t tail : 1; /**< Set if this QID is the tail of the queue array */ - uint64_t index : 3; /**< Index[2:0] (distance from head) in the queue array */ - uint64_t port : 6; /**< Port ID to which this queue is mapped */ - uint64_t queue : 7; /**< Queue ID[6:0] */ -#else - uint64_t queue : 7; - uint64_t port : 6; - uint64_t index : 3; - uint64_t tail : 1; - uint64_t buf_ptr : 36; - uint64_t qos_mask : 8; - uint64_t static_q : 1; - uint64_t static_p : 1; - uint64_t s_tail : 1; -#endif - } s; - struct cvmx_pko_mem_queue_ptrs_s cn30xx; - struct cvmx_pko_mem_queue_ptrs_s cn31xx; - struct cvmx_pko_mem_queue_ptrs_s cn38xx; - struct cvmx_pko_mem_queue_ptrs_s cn38xxp2; - struct cvmx_pko_mem_queue_ptrs_s cn50xx; - struct cvmx_pko_mem_queue_ptrs_s cn52xx; - struct cvmx_pko_mem_queue_ptrs_s cn52xxp1; - struct cvmx_pko_mem_queue_ptrs_s cn56xx; - struct cvmx_pko_mem_queue_ptrs_s cn56xxp1; - struct cvmx_pko_mem_queue_ptrs_s cn58xx; - struct cvmx_pko_mem_queue_ptrs_s cn58xxp1; -} cvmx_pko_mem_queue_ptrs_t; - - -/** - * cvmx_pko_mem_queue_qos - * - * Notes: - * Sets the QOS mask, per queue. These QOS_MASK bits are logically and physically the same QOS_MASK - * bits in PKO_MEM_QUEUE_PTRS. This CSR address allows the QOS_MASK bits to be written during PKO - * operation without affecting any other queue state. The port to which queue QID is mapped is port - * PID. Note that the queue to port mapping must be the same as was previously programmed via the - * PKO_MEM_QUEUE_PTRS CSR. - * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_mem_queue_qos_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_61_63 : 3; - uint64_t qos_mask : 8; /**< Mask to control priority across 8 QOS rounds */ - uint64_t reserved_13_52 : 40; - uint64_t pid : 6; /**< Port ID to which this queue is mapped */ - uint64_t qid : 7; /**< Queue ID */ -#else - uint64_t qid : 7; - uint64_t pid : 6; - uint64_t reserved_13_52 : 40; - uint64_t qos_mask : 8; - uint64_t reserved_61_63 : 3; -#endif - } s; - struct cvmx_pko_mem_queue_qos_s cn30xx; - struct cvmx_pko_mem_queue_qos_s cn31xx; - struct cvmx_pko_mem_queue_qos_s cn38xx; - struct cvmx_pko_mem_queue_qos_s cn38xxp2; - struct cvmx_pko_mem_queue_qos_s cn50xx; - struct cvmx_pko_mem_queue_qos_s cn52xx; - struct cvmx_pko_mem_queue_qos_s cn52xxp1; - struct cvmx_pko_mem_queue_qos_s cn56xx; - struct cvmx_pko_mem_queue_qos_s cn56xxp1; - struct cvmx_pko_mem_queue_qos_s cn58xx; - struct cvmx_pko_mem_queue_qos_s cn58xxp1; -} cvmx_pko_mem_queue_qos_t; - - -/** - * cvmx_pko_reg_bist_result - * - * Notes: - * Access to the internal BiST results - * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_bist_result_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_pko_reg_bist_result_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_27_63 : 37; - uint64_t psb2 : 5; /**< BiST result of the PSB memories (0=pass, !0=fail) */ - uint64_t count : 1; /**< BiST result of the COUNT memories (0=pass, !0=fail) */ - uint64_t rif : 1; /**< BiST result of the RIF memories (0=pass, !0=fail) */ - uint64_t wif : 1; /**< BiST result of the WIF memories (0=pass, !0=fail) */ - uint64_t ncb : 1; /**< BiST result of the NCB memories (0=pass, !0=fail) */ - uint64_t out : 1; /**< BiST result of the OUT memories (0=pass, !0=fail) */ - uint64_t crc : 1; /**< BiST result of the CRC memories (0=pass, !0=fail) */ - uint64_t chk : 1; /**< BiST result of the CHK memories (0=pass, !0=fail) */ - uint64_t qsb : 2; /**< BiST result of the QSB memories (0=pass, !0=fail) */ - uint64_t qcb : 2; /**< BiST result of the QCB memories (0=pass, !0=fail) */ - uint64_t pdb : 4; /**< BiST result of the PDB memories (0=pass, !0=fail) */ - uint64_t psb : 7; /**< BiST result of the PSB memories (0=pass, !0=fail) */ -#else - uint64_t psb : 7; - uint64_t pdb : 4; - uint64_t qcb : 2; - uint64_t qsb : 2; - uint64_t chk : 1; - uint64_t crc : 1; - uint64_t out : 1; - uint64_t ncb : 1; - uint64_t wif : 1; - uint64_t rif : 1; - uint64_t count : 1; - uint64_t psb2 : 5; - uint64_t reserved_27_63 : 37; -#endif - } cn30xx; - struct cvmx_pko_reg_bist_result_cn30xx cn31xx; - struct cvmx_pko_reg_bist_result_cn30xx cn38xx; - struct cvmx_pko_reg_bist_result_cn30xx cn38xxp2; - struct cvmx_pko_reg_bist_result_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_33_63 : 31; - uint64_t csr : 1; /**< BiST result of CSR memories (0=pass, !0=fail) */ - uint64_t iob : 1; /**< BiST result of IOB memories (0=pass, !0=fail) */ - uint64_t out_crc : 1; /**< BiST result of OUT_CRC memories (0=pass, !0=fail) */ - uint64_t out_ctl : 3; /**< BiST result of OUT_CTL memories (0=pass, !0=fail) */ - uint64_t out_sta : 1; /**< BiST result of OUT_STA memories (0=pass, !0=fail) */ - uint64_t out_wif : 1; /**< BiST result of OUT_WIF memories (0=pass, !0=fail) */ - uint64_t prt_chk : 3; /**< BiST result of PRT_CHK memories (0=pass, !0=fail) */ - uint64_t prt_nxt : 1; /**< BiST result of PRT_NXT memories (0=pass, !0=fail) */ - uint64_t prt_psb : 6; /**< BiST result of PRT_PSB memories (0=pass, !0=fail) */ - uint64_t ncb_inb : 2; /**< BiST result of NCB_INB memories (0=pass, !0=fail) */ - uint64_t prt_qcb : 2; /**< BiST result of PRT_QCB memories (0=pass, !0=fail) */ - uint64_t prt_qsb : 3; /**< BiST result of PRT_QSB memories (0=pass, !0=fail) */ - uint64_t dat_dat : 4; /**< BiST result of DAT_DAT memories (0=pass, !0=fail) */ - uint64_t dat_ptr : 4; /**< BiST result of DAT_PTR memories (0=pass, !0=fail) */ -#else - uint64_t dat_ptr : 4; - uint64_t dat_dat : 4; - uint64_t prt_qsb : 3; - uint64_t prt_qcb : 2; - uint64_t ncb_inb : 2; - uint64_t prt_psb : 6; - uint64_t prt_nxt : 1; - uint64_t prt_chk : 3; - uint64_t out_wif : 1; - uint64_t out_sta : 1; - uint64_t out_ctl : 3; - uint64_t out_crc : 1; - uint64_t iob : 1; - uint64_t csr : 1; - uint64_t reserved_33_63 : 31; -#endif - } cn50xx; - struct cvmx_pko_reg_bist_result_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_35_63 : 29; - uint64_t csr : 1; /**< BiST result of CSR memories (0=pass, !0=fail) */ - uint64_t iob : 1; /**< BiST result of IOB memories (0=pass, !0=fail) */ - uint64_t out_dat : 1; /**< BiST result of OUT_DAT memories (0=pass, !0=fail) */ - uint64_t out_ctl : 3; /**< BiST result of OUT_CTL memories (0=pass, !0=fail) */ - uint64_t out_sta : 1; /**< BiST result of OUT_STA memories (0=pass, !0=fail) */ - uint64_t out_wif : 1; /**< BiST result of OUT_WIF memories (0=pass, !0=fail) */ - uint64_t prt_chk : 3; /**< BiST result of PRT_CHK memories (0=pass, !0=fail) */ - uint64_t prt_nxt : 1; /**< BiST result of PRT_NXT memories (0=pass, !0=fail) */ - uint64_t prt_psb : 8; /**< BiST result of PRT_PSB memories (0=pass, !0=fail) */ - uint64_t ncb_inb : 2; /**< BiST result of NCB_INB memories (0=pass, !0=fail) */ - uint64_t prt_qcb : 2; /**< BiST result of PRT_QCB memories (0=pass, !0=fail) */ - uint64_t prt_qsb : 3; /**< BiST result of PRT_QSB memories (0=pass, !0=fail) */ - uint64_t prt_ctl : 2; /**< BiST result of PRT_CTL memories (0=pass, !0=fail) */ - uint64_t dat_dat : 2; /**< BiST result of DAT_DAT memories (0=pass, !0=fail) */ - uint64_t dat_ptr : 4; /**< BiST result of DAT_PTR memories (0=pass, !0=fail) */ -#else - uint64_t dat_ptr : 4; - uint64_t dat_dat : 2; - uint64_t prt_ctl : 2; - uint64_t prt_qsb : 3; - uint64_t prt_qcb : 2; - uint64_t ncb_inb : 2; - uint64_t prt_psb : 8; - uint64_t prt_nxt : 1; - uint64_t prt_chk : 3; - uint64_t out_wif : 1; - uint64_t out_sta : 1; - uint64_t out_ctl : 3; - uint64_t out_dat : 1; - uint64_t iob : 1; - uint64_t csr : 1; - uint64_t reserved_35_63 : 29; -#endif - } cn52xx; - struct cvmx_pko_reg_bist_result_cn52xx cn52xxp1; - struct cvmx_pko_reg_bist_result_cn52xx cn56xx; - struct cvmx_pko_reg_bist_result_cn52xx cn56xxp1; - struct cvmx_pko_reg_bist_result_cn50xx cn58xx; - struct cvmx_pko_reg_bist_result_cn50xx cn58xxp1; -} cvmx_pko_reg_bist_result_t; - - -/** - * cvmx_pko_reg_cmd_buf - * - * Notes: - * Sets the command buffer parameters - * The size of the command buffer segments is measured in uint64s. The pool specifies (1 of 8 free - * lists to be used when freeing command buffer segments. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_cmd_buf_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_23_63 : 41; - uint64_t pool : 3; /**< Free list used to free command buffer segments */ - uint64_t reserved_13_19 : 7; - uint64_t size : 13; /**< Number of uint64s per command buffer segment */ -#else - uint64_t size : 13; - uint64_t reserved_13_19 : 7; - uint64_t pool : 3; - uint64_t reserved_23_63 : 41; -#endif - } s; - struct cvmx_pko_reg_cmd_buf_s cn30xx; - struct cvmx_pko_reg_cmd_buf_s cn31xx; - struct cvmx_pko_reg_cmd_buf_s cn38xx; - struct cvmx_pko_reg_cmd_buf_s cn38xxp2; - struct cvmx_pko_reg_cmd_buf_s cn50xx; - struct cvmx_pko_reg_cmd_buf_s cn52xx; - struct cvmx_pko_reg_cmd_buf_s cn52xxp1; - struct cvmx_pko_reg_cmd_buf_s cn56xx; - struct cvmx_pko_reg_cmd_buf_s cn56xxp1; - struct cvmx_pko_reg_cmd_buf_s cn58xx; - struct cvmx_pko_reg_cmd_buf_s cn58xxp1; -} cvmx_pko_reg_cmd_buf_t; - - -/** - * cvmx_pko_reg_crc_ctl# - * - * Notes: - * Controls datapath reflection when calculating CRC - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_crc_ctlx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t invres : 1; /**< Invert the result */ - uint64_t refin : 1; /**< Reflect the bits in each byte. - Byte order does not change. - - 0: CRC is calculated MSB to LSB - - 1: CRC is calculated MLB to MSB */ -#else - uint64_t refin : 1; - uint64_t invres : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pko_reg_crc_ctlx_s cn38xx; - struct cvmx_pko_reg_crc_ctlx_s cn38xxp2; - struct cvmx_pko_reg_crc_ctlx_s cn58xx; - struct cvmx_pko_reg_crc_ctlx_s cn58xxp1; -} cvmx_pko_reg_crc_ctlx_t; - - -/** - * cvmx_pko_reg_crc_enable - * - * Notes: - * Enables CRC for the GMX ports. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_crc_enable_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t enable : 32; /**< Mask for ports 31-0 to enable CRC - Mask bit==0 means CRC not enabled - Mask bit==1 means CRC enabled - Note that CRC should be enabled only when using SPI4.2 */ -#else - uint64_t enable : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pko_reg_crc_enable_s cn38xx; - struct cvmx_pko_reg_crc_enable_s cn38xxp2; - struct cvmx_pko_reg_crc_enable_s cn58xx; - struct cvmx_pko_reg_crc_enable_s cn58xxp1; -} cvmx_pko_reg_crc_enable_t; - - -/** - * cvmx_pko_reg_crc_iv# - * - * Notes: - * Determines the IV used by the CRC algorithm - * * PKO_CRC_IV - * PKO_CRC_IV controls the initial state of the CRC algorithm. Octane can - * support a wide range of CRC algorithms and as such, the IV must be - * carefully constructed to meet the specific algorithm. The code below - * determines the value to program into Octane based on the algorthim's IV - * and width. In the case of Octane, the width should always be 32. - * - * PKO_CRC_IV0 sets the IV for ports 0-15 while PKO_CRC_IV1 sets the IV for - * ports 16-31. - * - * @verbatim - * unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w) - * [ - * int i; - * int doit; - * unsigned int current_val = algorithm_iv; - * - * for(i = 0; i < w; i++) [ - * doit = current_val & 0x1; - * - * if(doit) current_val ^= poly; - * assert(!(current_val & 0x1)); - * - * current_val = (current_val >> 1) | (doit << (w-1)); - * ] - * - * return current_val; - * ] - * @endverbatim - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_crc_ivx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iv : 32; /**< IV used by the CRC algorithm. Default is FCS32. */ -#else - uint64_t iv : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pko_reg_crc_ivx_s cn38xx; - struct cvmx_pko_reg_crc_ivx_s cn38xxp2; - struct cvmx_pko_reg_crc_ivx_s cn58xx; - struct cvmx_pko_reg_crc_ivx_s cn58xxp1; -} cvmx_pko_reg_crc_ivx_t; - - -/** - * cvmx_pko_reg_debug0 - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t asserts : 64; /**< Various assertion checks */ -#else - uint64_t asserts : 64; -#endif - } s; - struct cvmx_pko_reg_debug0_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t asserts : 17; /**< Various assertion checks */ -#else - uint64_t asserts : 17; - uint64_t reserved_17_63 : 47; -#endif - } cn30xx; - struct cvmx_pko_reg_debug0_cn30xx cn31xx; - struct cvmx_pko_reg_debug0_cn30xx cn38xx; - struct cvmx_pko_reg_debug0_cn30xx cn38xxp2; - struct cvmx_pko_reg_debug0_s cn50xx; - struct cvmx_pko_reg_debug0_s cn52xx; - struct cvmx_pko_reg_debug0_s cn52xxp1; - struct cvmx_pko_reg_debug0_s cn56xx; - struct cvmx_pko_reg_debug0_s cn56xxp1; - struct cvmx_pko_reg_debug0_s cn58xx; - struct cvmx_pko_reg_debug0_s cn58xxp1; -} cvmx_pko_reg_debug0_t; - - -/** - * cvmx_pko_reg_debug1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_debug1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t asserts : 64; /**< Various assertion checks */ -#else - uint64_t asserts : 64; -#endif - } s; - struct cvmx_pko_reg_debug1_s cn50xx; - struct cvmx_pko_reg_debug1_s cn52xx; - struct cvmx_pko_reg_debug1_s cn52xxp1; - struct cvmx_pko_reg_debug1_s cn56xx; - struct cvmx_pko_reg_debug1_s cn56xxp1; - struct cvmx_pko_reg_debug1_s cn58xx; - struct cvmx_pko_reg_debug1_s cn58xxp1; -} cvmx_pko_reg_debug1_t; - - -/** - * cvmx_pko_reg_debug2 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_debug2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t asserts : 64; /**< Various assertion checks */ -#else - uint64_t asserts : 64; -#endif - } s; - struct cvmx_pko_reg_debug2_s cn50xx; - struct cvmx_pko_reg_debug2_s cn52xx; - struct cvmx_pko_reg_debug2_s cn52xxp1; - struct cvmx_pko_reg_debug2_s cn56xx; - struct cvmx_pko_reg_debug2_s cn56xxp1; - struct cvmx_pko_reg_debug2_s cn58xx; - struct cvmx_pko_reg_debug2_s cn58xxp1; -} cvmx_pko_reg_debug2_t; - - -/** - * cvmx_pko_reg_debug3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_debug3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t asserts : 64; /**< Various assertion checks */ -#else - uint64_t asserts : 64; -#endif - } s; - struct cvmx_pko_reg_debug3_s cn50xx; - struct cvmx_pko_reg_debug3_s cn52xx; - struct cvmx_pko_reg_debug3_s cn52xxp1; - struct cvmx_pko_reg_debug3_s cn56xx; - struct cvmx_pko_reg_debug3_s cn56xxp1; - struct cvmx_pko_reg_debug3_s cn58xx; - struct cvmx_pko_reg_debug3_s cn58xxp1; -} cvmx_pko_reg_debug3_t; - - -/** - * cvmx_pko_reg_engine_inflight - * - * Notes: - * Sets the maximum number of inflight packets, per engine. Values greater than 4 are illegal. - * Setting an engine's value to 0 effectively stops the engine. - * Note that engines 4-7 do not exist - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_engine_inflight_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t engine9 : 4; /**< Maximum number of inflight packets for engine9 */ - uint64_t engine8 : 4; /**< Maximum number of inflight packets for engine8 */ - uint64_t engine7 : 4; /**< Maximum number of inflight packets for engine7 */ - uint64_t engine6 : 4; /**< Maximum number of inflight packets for engine6 */ - uint64_t engine5 : 4; /**< Maximum number of inflight packets for engine5 */ - uint64_t engine4 : 4; /**< Maximum number of inflight packets for engine4 */ - uint64_t engine3 : 4; /**< Maximum number of inflight packets for engine3 */ - uint64_t engine2 : 4; /**< Maximum number of inflight packets for engine2 */ - uint64_t engine1 : 4; /**< Maximum number of inflight packets for engine1 */ - uint64_t engine0 : 4; /**< Maximum number of inflight packets for engine0 */ -#else - uint64_t engine0 : 4; - uint64_t engine1 : 4; - uint64_t engine2 : 4; - uint64_t engine3 : 4; - uint64_t engine4 : 4; - uint64_t engine5 : 4; - uint64_t engine6 : 4; - uint64_t engine7 : 4; - uint64_t engine8 : 4; - uint64_t engine9 : 4; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_pko_reg_engine_inflight_s cn52xx; - struct cvmx_pko_reg_engine_inflight_s cn52xxp1; - struct cvmx_pko_reg_engine_inflight_s cn56xx; - struct cvmx_pko_reg_engine_inflight_s cn56xxp1; -} cvmx_pko_reg_engine_inflight_t; - - -/** - * cvmx_pko_reg_engine_thresh - * - * Notes: - * When not enabled, packet data may be sent as soon as it is written into PKO's internal buffers. - * When enabled and the packet fits entirely in the PKO's internal buffer, none of the packet data will - * be sent until all of it has been written into the PKO's internal buffer. Note that a packet is - * considered to fit entirely only if the packet's size is <= BUFFER_SIZE-8. When enabled and the - * packet does not fit entirely in the PKO's internal buffer, none of the packet data will be sent until - * at least BUFFER_SIZE-256 bytes of the packet have been written into the PKO's internal buffer - * (note that BUFFER_SIZE is a function of PKO_REG_GMX_PORT_MODE above) - * Note that engines 4-7 do not exist, so MASK<7:4> MBZ - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_engine_thresh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t mask : 10; /**< Mask[n]=0 disables packet send threshold for engine n - Mask[n]=1 enables packet send threshold for engine n $PR NS */ -#else - uint64_t mask : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_pko_reg_engine_thresh_s cn52xx; - struct cvmx_pko_reg_engine_thresh_s cn52xxp1; - struct cvmx_pko_reg_engine_thresh_s cn56xx; - struct cvmx_pko_reg_engine_thresh_s cn56xxp1; -} cvmx_pko_reg_engine_thresh_t; - - -/** - * cvmx_pko_reg_error - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_error_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t currzero : 1; /**< A packet data pointer has size=0 */ - uint64_t doorbell : 1; /**< A doorbell count has overflowed */ - uint64_t parity : 1; /**< Read parity error at port data buffer */ -#else - uint64_t parity : 1; - uint64_t doorbell : 1; - uint64_t currzero : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_pko_reg_error_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t doorbell : 1; /**< A doorbell count has overflowed */ - uint64_t parity : 1; /**< Read parity error at port data buffer */ -#else - uint64_t parity : 1; - uint64_t doorbell : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn30xx; - struct cvmx_pko_reg_error_cn30xx cn31xx; - struct cvmx_pko_reg_error_cn30xx cn38xx; - struct cvmx_pko_reg_error_cn30xx cn38xxp2; - struct cvmx_pko_reg_error_s cn50xx; - struct cvmx_pko_reg_error_s cn52xx; - struct cvmx_pko_reg_error_s cn52xxp1; - struct cvmx_pko_reg_error_s cn56xx; - struct cvmx_pko_reg_error_s cn56xxp1; - struct cvmx_pko_reg_error_s cn58xx; - struct cvmx_pko_reg_error_s cn58xxp1; -} cvmx_pko_reg_error_t; - - -/** - * cvmx_pko_reg_flags - * - * Notes: - * When set, ENA_PKO enables the PKO picker and places the PKO in normal operation. When set, ENA_DWB - * enables the use of DontWriteBacks during the buffer freeing operations. When not set, STORE_BE inverts - * bits[2:0] of the STORE0 byte write address. When set, RESET causes a 4-cycle reset pulse to the - * entire box. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_flags_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t reset : 1; /**< Reset oneshot pulse */ - uint64_t store_be : 1; /**< Force STORE0 byte write address to big endian */ - uint64_t ena_dwb : 1; /**< Set to enable DontWriteBacks */ - uint64_t ena_pko : 1; /**< Set to enable the PKO picker */ -#else - uint64_t ena_pko : 1; - uint64_t ena_dwb : 1; - uint64_t store_be : 1; - uint64_t reset : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_pko_reg_flags_s cn30xx; - struct cvmx_pko_reg_flags_s cn31xx; - struct cvmx_pko_reg_flags_s cn38xx; - struct cvmx_pko_reg_flags_s cn38xxp2; - struct cvmx_pko_reg_flags_s cn50xx; - struct cvmx_pko_reg_flags_s cn52xx; - struct cvmx_pko_reg_flags_s cn52xxp1; - struct cvmx_pko_reg_flags_s cn56xx; - struct cvmx_pko_reg_flags_s cn56xxp1; - struct cvmx_pko_reg_flags_s cn58xx; - struct cvmx_pko_reg_flags_s cn58xxp1; -} cvmx_pko_reg_flags_t; - - -/** - * cvmx_pko_reg_gmx_port_mode - * - * Notes: - * The system has a total of 4 + 0 + 4 + 4 ports and 4 + 0 + 1 + 1 engines (GM0 + GM1 + PCI + LOOP). - * This CSR sets the number of GMX0 ports and amount of local storage per engine. - * It has no effect on the number of ports or amount of local storage per engine for - * PCI or LOOP. When all GMX ports are used (MODE0=2), each GMX engine has 2.5kB of local - * storage. Increasing the value of MODEn by 1 decreases the number of GMX ports by a power of 2 and - * increases the local storage per PKO GMX engine by a power of 2. - * Modes 0 and 1 are illegal and, if selected, are treated as mode 2. - * - * MODE[n] GM[0] PCI LOOP GM[0] PCI LOOP - * ports ports ports storage/engine storage/engine storage/engine - * 0 4 4 4 2.5kB 2.5kB 2.5kB - * 1 4 4 4 2.5kB 2.5kB 2.5kB - * 2 4 4 4 2.5kB 2.5kB 2.5kB - * 3 2 4 4 5.0kB 2.5kB 2.5kB - * 4 1 4 4 10.0kB 2.5kB 2.5kB - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_gmx_port_mode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mode1 : 3; /**< # of GM1 ports = 16 >> MODE1, 0 <= MODE1 <= 5 */ - uint64_t mode0 : 3; /**< # of GM0 ports = 16 >> MODE0, 0 <= MODE0 <= 5 */ -#else - uint64_t mode0 : 3; - uint64_t mode1 : 3; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_pko_reg_gmx_port_mode_s cn30xx; - struct cvmx_pko_reg_gmx_port_mode_s cn31xx; - struct cvmx_pko_reg_gmx_port_mode_s cn38xx; - struct cvmx_pko_reg_gmx_port_mode_s cn38xxp2; - struct cvmx_pko_reg_gmx_port_mode_s cn50xx; - struct cvmx_pko_reg_gmx_port_mode_s cn52xx; - struct cvmx_pko_reg_gmx_port_mode_s cn52xxp1; - struct cvmx_pko_reg_gmx_port_mode_s cn56xx; - struct cvmx_pko_reg_gmx_port_mode_s cn56xxp1; - struct cvmx_pko_reg_gmx_port_mode_s cn58xx; - struct cvmx_pko_reg_gmx_port_mode_s cn58xxp1; -} cvmx_pko_reg_gmx_port_mode_t; - - -/** - * cvmx_pko_reg_int_mask - * - * Notes: - * When a mask bit is set, the corresponding interrupt is enabled. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_int_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t currzero : 1; /**< Bit mask corresponding to PKO_REG_ERROR[2] above */ - uint64_t doorbell : 1; /**< Bit mask corresponding to PKO_REG_ERROR[1] above */ - uint64_t parity : 1; /**< Bit mask corresponding to PKO_REG_ERROR[0] above */ -#else - uint64_t parity : 1; - uint64_t doorbell : 1; - uint64_t currzero : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_pko_reg_int_mask_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t doorbell : 1; /**< Bit mask corresponding to PKO_REG_ERROR[1] above */ - uint64_t parity : 1; /**< Bit mask corresponding to PKO_REG_ERROR[0] above */ -#else - uint64_t parity : 1; - uint64_t doorbell : 1; - uint64_t reserved_2_63 : 62; -#endif - } cn30xx; - struct cvmx_pko_reg_int_mask_cn30xx cn31xx; - struct cvmx_pko_reg_int_mask_cn30xx cn38xx; - struct cvmx_pko_reg_int_mask_cn30xx cn38xxp2; - struct cvmx_pko_reg_int_mask_s cn50xx; - struct cvmx_pko_reg_int_mask_s cn52xx; - struct cvmx_pko_reg_int_mask_s cn52xxp1; - struct cvmx_pko_reg_int_mask_s cn56xx; - struct cvmx_pko_reg_int_mask_s cn56xxp1; - struct cvmx_pko_reg_int_mask_s cn58xx; - struct cvmx_pko_reg_int_mask_s cn58xxp1; -} cvmx_pko_reg_int_mask_t; - - -/** - * cvmx_pko_reg_queue_mode - * - * Notes: - * Sets the number of queues and amount of local storage per queue - * The system has a total of 256 queues and (256*8) words of local command storage. This CSR sets the - * number of queues that are used. Increasing the value of MODE by 1 decreases the number of queues - * by a power of 2 and increases the local storage per queue by a power of 2. - * MODEn queues storage/queue - * 0 256 64B ( 8 words) - * 1 128 128B (16 words) - * 2 64 256B (32 words) - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_queue_mode_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t mode : 2; /**< # of queues = 256 >> MODE, 0 <= MODE <=2 */ -#else - uint64_t mode : 2; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pko_reg_queue_mode_s cn30xx; - struct cvmx_pko_reg_queue_mode_s cn31xx; - struct cvmx_pko_reg_queue_mode_s cn38xx; - struct cvmx_pko_reg_queue_mode_s cn38xxp2; - struct cvmx_pko_reg_queue_mode_s cn50xx; - struct cvmx_pko_reg_queue_mode_s cn52xx; - struct cvmx_pko_reg_queue_mode_s cn52xxp1; - struct cvmx_pko_reg_queue_mode_s cn56xx; - struct cvmx_pko_reg_queue_mode_s cn56xxp1; - struct cvmx_pko_reg_queue_mode_s cn58xx; - struct cvmx_pko_reg_queue_mode_s cn58xxp1; -} cvmx_pko_reg_queue_mode_t; - - -/** - * cvmx_pko_reg_queue_ptrs1 - * - * Notes: - * This CSR is used with PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS to allow access to queues 128-255 - * and to allow up mapping of up to 16 queues per port. When programming queues 128-255, the - * programming sequence must first write PKO_REG_QUEUE_PTRS1 and then write PKO_MEM_QUEUE_PTRS or - * PKO_MEM_QUEUE_QOS for each queue. - * See the descriptions of PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS for further explanation of queue - * programming. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_queue_ptrs1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t idx3 : 1; /**< [3] of Index (distance from head) in the queue array */ - uint64_t qid7 : 1; /**< [7] of Queue ID */ -#else - uint64_t qid7 : 1; - uint64_t idx3 : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_pko_reg_queue_ptrs1_s cn50xx; - struct cvmx_pko_reg_queue_ptrs1_s cn52xx; - struct cvmx_pko_reg_queue_ptrs1_s cn52xxp1; - struct cvmx_pko_reg_queue_ptrs1_s cn56xx; - struct cvmx_pko_reg_queue_ptrs1_s cn56xxp1; - struct cvmx_pko_reg_queue_ptrs1_s cn58xx; - struct cvmx_pko_reg_queue_ptrs1_s cn58xxp1; -} cvmx_pko_reg_queue_ptrs1_t; - - -/** - * cvmx_pko_reg_read_idx - * - * Notes: - * Provides the read index during a CSR read operation to any of the CSRs that are physically stored - * as memories. The names of these CSRs begin with the prefix "PKO_MEM_". - * IDX[7:0] is the read index. INC[7:0] is an increment that is added to IDX[7:0] after any CSR read. - * The intended use is to initially write this CSR such that IDX=0 and INC=1. Then, the entire - * contents of a CSR memory can be read with consecutive CSR read commands. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pko_reg_read_idx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t inc : 8; /**< Increment to add to current index for next index */ - uint64_t index : 8; /**< Index to use for next memory CSR read */ -#else - uint64_t index : 8; - uint64_t inc : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_pko_reg_read_idx_s cn30xx; - struct cvmx_pko_reg_read_idx_s cn31xx; - struct cvmx_pko_reg_read_idx_s cn38xx; - struct cvmx_pko_reg_read_idx_s cn38xxp2; - struct cvmx_pko_reg_read_idx_s cn50xx; - struct cvmx_pko_reg_read_idx_s cn52xx; - struct cvmx_pko_reg_read_idx_s cn52xxp1; - struct cvmx_pko_reg_read_idx_s cn56xx; - struct cvmx_pko_reg_read_idx_s cn56xxp1; - struct cvmx_pko_reg_read_idx_s cn58xx; - struct cvmx_pko_reg_read_idx_s cn58xxp1; -} cvmx_pko_reg_read_idx_t; - - -/** - * cvmx_pow_bist_stat - * - * POW_BIST_STAT = POW BIST Status Register - * - * Contains the BIST status for the POW memories ('0' = pass, '1' = fail). - * - * Also contains the BIST status for the PP's. Each bit in the PP field is the OR of all BIST - * results for the corresponding physical PP ('0' = pass, '1' = fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_bist_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pp : 16; /**< Physical PP BIST status */ - uint64_t reserved_0_15 : 16; -#else - uint64_t reserved_0_15 : 16; - uint64_t pp : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_bist_stat_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t pp : 1; /**< Physical PP BIST status */ - uint64_t reserved_9_15 : 7; - uint64_t cam : 1; /**< POW CAM BIST status */ - uint64_t nbt1 : 1; /**< NCB transmitter memory 1 BIST status */ - uint64_t nbt0 : 1; /**< NCB transmitter memory 0 BIST status */ - uint64_t index : 1; /**< Index memory BIST status */ - uint64_t fidx : 1; /**< Forward index memory BIST status */ - uint64_t nbr1 : 1; /**< NCB receiver memory 1 BIST status */ - uint64_t nbr0 : 1; /**< NCB receiver memory 0 BIST status */ - uint64_t pend : 1; /**< Pending switch memory BIST status */ - uint64_t adr : 1; /**< Address memory BIST status */ -#else - uint64_t adr : 1; - uint64_t pend : 1; - uint64_t nbr0 : 1; - uint64_t nbr1 : 1; - uint64_t fidx : 1; - uint64_t index : 1; - uint64_t nbt0 : 1; - uint64_t nbt1 : 1; - uint64_t cam : 1; - uint64_t reserved_9_15 : 7; - uint64_t pp : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn30xx; - struct cvmx_pow_bist_stat_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t pp : 2; /**< Physical PP BIST status */ - uint64_t reserved_9_15 : 7; - uint64_t cam : 1; /**< POW CAM BIST status */ - uint64_t nbt1 : 1; /**< NCB transmitter memory 1 BIST status */ - uint64_t nbt0 : 1; /**< NCB transmitter memory 0 BIST status */ - uint64_t index : 1; /**< Index memory BIST status */ - uint64_t fidx : 1; /**< Forward index memory BIST status */ - uint64_t nbr1 : 1; /**< NCB receiver memory 1 BIST status */ - uint64_t nbr0 : 1; /**< NCB receiver memory 0 BIST status */ - uint64_t pend : 1; /**< Pending switch memory BIST status */ - uint64_t adr : 1; /**< Address memory BIST status */ -#else - uint64_t adr : 1; - uint64_t pend : 1; - uint64_t nbr0 : 1; - uint64_t nbr1 : 1; - uint64_t fidx : 1; - uint64_t index : 1; - uint64_t nbt0 : 1; - uint64_t nbt1 : 1; - uint64_t cam : 1; - uint64_t reserved_9_15 : 7; - uint64_t pp : 2; - uint64_t reserved_18_63 : 46; -#endif - } cn31xx; - struct cvmx_pow_bist_stat_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t pp : 16; /**< Physical PP BIST status */ - uint64_t reserved_10_15 : 6; - uint64_t cam : 1; /**< POW CAM BIST status */ - uint64_t nbt : 1; /**< NCB transmitter memory BIST status */ - uint64_t index : 1; /**< Index memory BIST status */ - uint64_t fidx : 1; /**< Forward index memory BIST status */ - uint64_t nbr1 : 1; /**< NCB receiver memory 1 BIST status */ - uint64_t nbr0 : 1; /**< NCB receiver memory 0 BIST status */ - uint64_t pend1 : 1; /**< Pending switch memory 1 BIST status */ - uint64_t pend0 : 1; /**< Pending switch memory 0 BIST status */ - uint64_t adr1 : 1; /**< Address memory 1 BIST status */ - uint64_t adr0 : 1; /**< Address memory 0 BIST status */ -#else - uint64_t adr0 : 1; - uint64_t adr1 : 1; - uint64_t pend0 : 1; - uint64_t pend1 : 1; - uint64_t nbr0 : 1; - uint64_t nbr1 : 1; - uint64_t fidx : 1; - uint64_t index : 1; - uint64_t nbt : 1; - uint64_t cam : 1; - uint64_t reserved_10_15 : 6; - uint64_t pp : 16; - uint64_t reserved_32_63 : 32; -#endif - } cn38xx; - struct cvmx_pow_bist_stat_cn38xx cn38xxp2; - struct cvmx_pow_bist_stat_cn31xx cn50xx; - struct cvmx_pow_bist_stat_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t pp : 4; /**< Physical PP BIST status */ - uint64_t reserved_9_15 : 7; - uint64_t cam : 1; /**< POW CAM BIST status */ - uint64_t nbt1 : 1; /**< NCB transmitter memory 1 BIST status */ - uint64_t nbt0 : 1; /**< NCB transmitter memory 0 BIST status */ - uint64_t index : 1; /**< Index memory BIST status */ - uint64_t fidx : 1; /**< Forward index memory BIST status */ - uint64_t nbr1 : 1; /**< NCB receiver memory 1 BIST status */ - uint64_t nbr0 : 1; /**< NCB receiver memory 0 BIST status */ - uint64_t pend : 1; /**< Pending switch memory BIST status */ - uint64_t adr : 1; /**< Address memory BIST status */ -#else - uint64_t adr : 1; - uint64_t pend : 1; - uint64_t nbr0 : 1; - uint64_t nbr1 : 1; - uint64_t fidx : 1; - uint64_t index : 1; - uint64_t nbt0 : 1; - uint64_t nbt1 : 1; - uint64_t cam : 1; - uint64_t reserved_9_15 : 7; - uint64_t pp : 4; - uint64_t reserved_20_63 : 44; -#endif - } cn52xx; - struct cvmx_pow_bist_stat_cn52xx cn52xxp1; - struct cvmx_pow_bist_stat_cn56xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t pp : 12; /**< Physical PP BIST status */ - uint64_t reserved_10_15 : 6; - uint64_t cam : 1; /**< POW CAM BIST status */ - uint64_t nbt : 1; /**< NCB transmitter memory BIST status */ - uint64_t index : 1; /**< Index memory BIST status */ - uint64_t fidx : 1; /**< Forward index memory BIST status */ - uint64_t nbr1 : 1; /**< NCB receiver memory 1 BIST status */ - uint64_t nbr0 : 1; /**< NCB receiver memory 0 BIST status */ - uint64_t pend1 : 1; /**< Pending switch memory 1 BIST status */ - uint64_t pend0 : 1; /**< Pending switch memory 0 BIST status */ - uint64_t adr1 : 1; /**< Address memory 1 BIST status */ - uint64_t adr0 : 1; /**< Address memory 0 BIST status */ -#else - uint64_t adr0 : 1; - uint64_t adr1 : 1; - uint64_t pend0 : 1; - uint64_t pend1 : 1; - uint64_t nbr0 : 1; - uint64_t nbr1 : 1; - uint64_t fidx : 1; - uint64_t index : 1; - uint64_t nbt : 1; - uint64_t cam : 1; - uint64_t reserved_10_15 : 6; - uint64_t pp : 12; - uint64_t reserved_28_63 : 36; -#endif - } cn56xx; - struct cvmx_pow_bist_stat_cn56xx cn56xxp1; - struct cvmx_pow_bist_stat_cn38xx cn58xx; - struct cvmx_pow_bist_stat_cn38xx cn58xxp1; -} cvmx_pow_bist_stat_t; - - -/** - * cvmx_pow_ds_pc - * - * POW_DS_PC = POW De-Schedule Performance Counter - * - * Counts the number of de-schedule requests. Write to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_ds_pc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ds_pc : 32; /**< De-schedule performance counter */ -#else - uint64_t ds_pc : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_ds_pc_s cn30xx; - struct cvmx_pow_ds_pc_s cn31xx; - struct cvmx_pow_ds_pc_s cn38xx; - struct cvmx_pow_ds_pc_s cn38xxp2; - struct cvmx_pow_ds_pc_s cn50xx; - struct cvmx_pow_ds_pc_s cn52xx; - struct cvmx_pow_ds_pc_s cn52xxp1; - struct cvmx_pow_ds_pc_s cn56xx; - struct cvmx_pow_ds_pc_s cn56xxp1; - struct cvmx_pow_ds_pc_s cn58xx; - struct cvmx_pow_ds_pc_s cn58xxp1; -} cvmx_pow_ds_pc_t; - - -/** - * cvmx_pow_ecc_err - * - * POW_ECC_ERR = POW ECC Error Register - * - * Contains the single and double error bits and the corresponding interrupt enables for the ECC- - * protected POW index memory. Also contains the syndrome value in the event of an ECC error. - * - * Also contains the remote pointer error bit and interrupt enable. RPE is set when the POW detected - * corruption on one or more of the input queue lists in L2/DRAM (POW's local copy of the tail pointer - * for the L2/DRAM input queue did not match the last entry on the the list). This is caused by - * L2/DRAM corruption, and is generally a fatal error because it likely caused POW to load bad work - * queue entries. - * - * This register also contains the illegal operation error bits and the corresponding interrupt - * enables as follows: - * - * <0> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL_NULL state - * <1> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL state - * <2> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK from PP with pending tag switch to ORDERED or ATOMIC - * <3> Received SWTAG/SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL_NULL - * <4> Received SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL - * <5> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with GET_WORK pending - * <6> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with NULL_RD pending - * <7> Received CLR_NSCHED from PP with SWTAG_DESCH/DESCH/CLR_NSCHED pending - * <8> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with CLR_NSCHED pending - * <9> Received illegal opcode - * <10> Received ADD_WORK with tag specified as NULL_NULL - * <11> Received DBG load from PP with DBG load pending - * <12> Received CSR load from PP with CSR load pending - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_ecc_err_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_45_63 : 19; - uint64_t iop_ie : 13; /**< Illegal operation interrupt enables */ - uint64_t reserved_29_31 : 3; - uint64_t iop : 13; /**< Illegal operation errors */ - uint64_t reserved_14_15 : 2; - uint64_t rpe_ie : 1; /**< Remote pointer error interrupt enable */ - uint64_t rpe : 1; /**< Remote pointer error */ - uint64_t reserved_9_11 : 3; - uint64_t syn : 5; /**< Syndrome value (only valid when DBE or SBE is set) */ - uint64_t dbe_ie : 1; /**< Double bit error interrupt enable */ - uint64_t sbe_ie : 1; /**< Single bit error interrupt enable */ - uint64_t dbe : 1; /**< Double bit error */ - uint64_t sbe : 1; /**< Single bit error */ -#else - uint64_t sbe : 1; - uint64_t dbe : 1; - uint64_t sbe_ie : 1; - uint64_t dbe_ie : 1; - uint64_t syn : 5; - uint64_t reserved_9_11 : 3; - uint64_t rpe : 1; - uint64_t rpe_ie : 1; - uint64_t reserved_14_15 : 2; - uint64_t iop : 13; - uint64_t reserved_29_31 : 3; - uint64_t iop_ie : 13; - uint64_t reserved_45_63 : 19; -#endif - } s; - struct cvmx_pow_ecc_err_s cn30xx; - struct cvmx_pow_ecc_err_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t rpe_ie : 1; /**< Remote pointer error interrupt enable */ - uint64_t rpe : 1; /**< Remote pointer error */ - uint64_t reserved_9_11 : 3; - uint64_t syn : 5; /**< Syndrome value (only valid when DBE or SBE is set) */ - uint64_t dbe_ie : 1; /**< Double bit error interrupt enable */ - uint64_t sbe_ie : 1; /**< Single bit error interrupt enable */ - uint64_t dbe : 1; /**< Double bit error */ - uint64_t sbe : 1; /**< Single bit error */ -#else - uint64_t sbe : 1; - uint64_t dbe : 1; - uint64_t sbe_ie : 1; - uint64_t dbe_ie : 1; - uint64_t syn : 5; - uint64_t reserved_9_11 : 3; - uint64_t rpe : 1; - uint64_t rpe_ie : 1; - uint64_t reserved_14_63 : 50; -#endif - } cn31xx; - struct cvmx_pow_ecc_err_s cn38xx; - struct cvmx_pow_ecc_err_cn31xx cn38xxp2; - struct cvmx_pow_ecc_err_s cn50xx; - struct cvmx_pow_ecc_err_s cn52xx; - struct cvmx_pow_ecc_err_s cn52xxp1; - struct cvmx_pow_ecc_err_s cn56xx; - struct cvmx_pow_ecc_err_s cn56xxp1; - struct cvmx_pow_ecc_err_s cn58xx; - struct cvmx_pow_ecc_err_s cn58xxp1; -} cvmx_pow_ecc_err_t; - - -/** - * cvmx_pow_int_ctl - * - * POW_INT_CTL = POW Internal Control Register - * - * Contains POW internal control values (for internal use, not typically for customer use): - * - * PFR_DIS = Disable high-performance pre-fetch reset mode. - * - * NBR_THR = Assert ncb__busy when the number of remaining coherent bus NBR credits equals is less - * than or equal to this value. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_int_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t pfr_dis : 1; /**< High-perf pre-fetch reset mode disable */ - uint64_t nbr_thr : 5; /**< NBR busy threshold */ -#else - uint64_t nbr_thr : 5; - uint64_t pfr_dis : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_pow_int_ctl_s cn30xx; - struct cvmx_pow_int_ctl_s cn31xx; - struct cvmx_pow_int_ctl_s cn38xx; - struct cvmx_pow_int_ctl_s cn38xxp2; - struct cvmx_pow_int_ctl_s cn50xx; - struct cvmx_pow_int_ctl_s cn52xx; - struct cvmx_pow_int_ctl_s cn52xxp1; - struct cvmx_pow_int_ctl_s cn56xx; - struct cvmx_pow_int_ctl_s cn56xxp1; - struct cvmx_pow_int_ctl_s cn58xx; - struct cvmx_pow_int_ctl_s cn58xxp1; -} cvmx_pow_int_ctl_t; - - -/** - * cvmx_pow_iq_cnt# - * - * POW_IQ_CNTX = POW Input Queue Count Register (1 per QOS level) - * - * Contains a read-only count of the number of work queue entries for each QOS level. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_iq_cntx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iq_cnt : 32; /**< Input queue count for QOS level X */ -#else - uint64_t iq_cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_iq_cntx_s cn30xx; - struct cvmx_pow_iq_cntx_s cn31xx; - struct cvmx_pow_iq_cntx_s cn38xx; - struct cvmx_pow_iq_cntx_s cn38xxp2; - struct cvmx_pow_iq_cntx_s cn50xx; - struct cvmx_pow_iq_cntx_s cn52xx; - struct cvmx_pow_iq_cntx_s cn52xxp1; - struct cvmx_pow_iq_cntx_s cn56xx; - struct cvmx_pow_iq_cntx_s cn56xxp1; - struct cvmx_pow_iq_cntx_s cn58xx; - struct cvmx_pow_iq_cntx_s cn58xxp1; -} cvmx_pow_iq_cntx_t; - - -/** - * cvmx_pow_iq_com_cnt - * - * POW_IQ_COM_CNT = POW Input Queue Combined Count Register - * - * Contains a read-only count of the total number of work queue entries in all QOS levels. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_iq_com_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iq_cnt : 32; /**< Input queue combined count */ -#else - uint64_t iq_cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_iq_com_cnt_s cn30xx; - struct cvmx_pow_iq_com_cnt_s cn31xx; - struct cvmx_pow_iq_com_cnt_s cn38xx; - struct cvmx_pow_iq_com_cnt_s cn38xxp2; - struct cvmx_pow_iq_com_cnt_s cn50xx; - struct cvmx_pow_iq_com_cnt_s cn52xx; - struct cvmx_pow_iq_com_cnt_s cn52xxp1; - struct cvmx_pow_iq_com_cnt_s cn56xx; - struct cvmx_pow_iq_com_cnt_s cn56xxp1; - struct cvmx_pow_iq_com_cnt_s cn58xx; - struct cvmx_pow_iq_com_cnt_s cn58xxp1; -} cvmx_pow_iq_com_cnt_t; - - -/** - * cvmx_pow_iq_int - * - * POW_IQ_INT = POW Input Queue Interrupt Register - * - * Contains the bits (1 per QOS level) that can trigger the input queue interrupt. An IQ_INT bit - * will be set if POW_IQ_CNT#QOS# changes and the resulting value is equal to POW_IQ_THR#QOS#. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_iq_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t iq_int : 8; /**< Input queue interrupt bits */ -#else - uint64_t iq_int : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pow_iq_int_s cn52xx; - struct cvmx_pow_iq_int_s cn52xxp1; - struct cvmx_pow_iq_int_s cn56xx; - struct cvmx_pow_iq_int_s cn56xxp1; -} cvmx_pow_iq_int_t; - - -/** - * cvmx_pow_iq_int_en - * - * POW_IQ_INT_EN = POW Input Queue Interrupt Enable Register - * - * Contains the bits (1 per QOS level) that enable the input queue interrupt. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_iq_int_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t int_en : 8; /**< Input queue interrupt enable bits */ -#else - uint64_t int_en : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pow_iq_int_en_s cn52xx; - struct cvmx_pow_iq_int_en_s cn52xxp1; - struct cvmx_pow_iq_int_en_s cn56xx; - struct cvmx_pow_iq_int_en_s cn56xxp1; -} cvmx_pow_iq_int_en_t; - - -/** - * cvmx_pow_iq_thr# - * - * POW_IQ_THRX = POW Input Queue Threshold Register (1 per QOS level) - * - * Threshold value for triggering input queue interrupts. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_iq_thrx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iq_thr : 32; /**< Input queue threshold for QOS level X */ -#else - uint64_t iq_thr : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_iq_thrx_s cn52xx; - struct cvmx_pow_iq_thrx_s cn52xxp1; - struct cvmx_pow_iq_thrx_s cn56xx; - struct cvmx_pow_iq_thrx_s cn56xxp1; -} cvmx_pow_iq_thrx_t; - - -/** - * cvmx_pow_nos_cnt - * - * POW_NOS_CNT = POW No-schedule Count Register - * - * Contains the number of work queue entries on the no-schedule list. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_nos_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t nos_cnt : 12; /**< # of work queue entries on the no-schedule list */ -#else - uint64_t nos_cnt : 12; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_pow_nos_cnt_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t nos_cnt : 7; /**< # of work queue entries on the no-schedule list */ -#else - uint64_t nos_cnt : 7; - uint64_t reserved_7_63 : 57; -#endif - } cn30xx; - struct cvmx_pow_nos_cnt_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t nos_cnt : 9; /**< # of work queue entries on the no-schedule list */ -#else - uint64_t nos_cnt : 9; - uint64_t reserved_9_63 : 55; -#endif - } cn31xx; - struct cvmx_pow_nos_cnt_s cn38xx; - struct cvmx_pow_nos_cnt_s cn38xxp2; - struct cvmx_pow_nos_cnt_cn31xx cn50xx; - struct cvmx_pow_nos_cnt_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t nos_cnt : 10; /**< # of work queue entries on the no-schedule list */ -#else - uint64_t nos_cnt : 10; - uint64_t reserved_10_63 : 54; -#endif - } cn52xx; - struct cvmx_pow_nos_cnt_cn52xx cn52xxp1; - struct cvmx_pow_nos_cnt_s cn56xx; - struct cvmx_pow_nos_cnt_s cn56xxp1; - struct cvmx_pow_nos_cnt_s cn58xx; - struct cvmx_pow_nos_cnt_s cn58xxp1; -} cvmx_pow_nos_cnt_t; - - -/** - * cvmx_pow_nw_tim - * - * POW_NW_TIM = POW New Work Timer Period Register - * - * Sets the minimum period for a new work request timeout. Period is specified in n-1 notation - * where the increment value is 1024 clock cycles. Thus, a value of 0x0 in this register translates - * to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc... Note: the - * maximum period for a new work request timeout is 2 times the minimum period. Note: the new work - * request timeout counter is reset when this register is written. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_nw_tim_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_10_63 : 54; - uint64_t nw_tim : 10; /**< New work timer period */ -#else - uint64_t nw_tim : 10; - uint64_t reserved_10_63 : 54; -#endif - } s; - struct cvmx_pow_nw_tim_s cn30xx; - struct cvmx_pow_nw_tim_s cn31xx; - struct cvmx_pow_nw_tim_s cn38xx; - struct cvmx_pow_nw_tim_s cn38xxp2; - struct cvmx_pow_nw_tim_s cn50xx; - struct cvmx_pow_nw_tim_s cn52xx; - struct cvmx_pow_nw_tim_s cn52xxp1; - struct cvmx_pow_nw_tim_s cn56xx; - struct cvmx_pow_nw_tim_s cn56xxp1; - struct cvmx_pow_nw_tim_s cn58xx; - struct cvmx_pow_nw_tim_s cn58xxp1; -} cvmx_pow_nw_tim_t; - - -/** - * cvmx_pow_pf_rst_msk - * - * POW_PF_RST_MSK = POW Prefetch Reset Mask - * - * Resets the work prefetch engine when work is stored in an internal buffer (either when the add - * work arrives or when the work is reloaded from an external buffer) for an enabled QOS level - * (1 bit per QOS level). - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_pf_rst_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t rst_msk : 8; /**< Prefetch engine reset mask */ -#else - uint64_t rst_msk : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_pow_pf_rst_msk_s cn50xx; - struct cvmx_pow_pf_rst_msk_s cn52xx; - struct cvmx_pow_pf_rst_msk_s cn52xxp1; - struct cvmx_pow_pf_rst_msk_s cn56xx; - struct cvmx_pow_pf_rst_msk_s cn56xxp1; - struct cvmx_pow_pf_rst_msk_s cn58xx; - struct cvmx_pow_pf_rst_msk_s cn58xxp1; -} cvmx_pow_pf_rst_msk_t; - - -/** - * cvmx_pow_pp_grp_msk# - * - * POW_PP_GRP_MSKX = POW PP Group Mask Register (1 per PP) - * - * Selects which group(s) a PP belongs to. A '1' in any bit position sets the PP's membership in - * the corresponding group. A value of 0x0 will prevent the PP from receiving new work. Note: - * disabled or non-existent PP's should have this field set to 0xffff (the reset value) in order to - * maximize POW performance. - * - * Also contains the QOS level priorities for each PP. 0x0 is highest priority, and 0x7 the lowest. - * Setting the priority to 0xf will prevent that PP from receiving work from that QOS level. - * Priority values 0x8 through 0xe are reserved and should not be used. For a given PP, priorities - * should begin at 0x0 and remain contiguous throughout the range. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_pp_grp_mskx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t qos7_pri : 4; /**< PPX priority for QOS level 7 */ - uint64_t qos6_pri : 4; /**< PPX priority for QOS level 6 */ - uint64_t qos5_pri : 4; /**< PPX priority for QOS level 5 */ - uint64_t qos4_pri : 4; /**< PPX priority for QOS level 4 */ - uint64_t qos3_pri : 4; /**< PPX priority for QOS level 3 */ - uint64_t qos2_pri : 4; /**< PPX priority for QOS level 2 */ - uint64_t qos1_pri : 4; /**< PPX priority for QOS level 1 */ - uint64_t qos0_pri : 4; /**< PPX priority for QOS level 0 */ - uint64_t grp_msk : 16; /**< PPX group mask */ -#else - uint64_t grp_msk : 16; - uint64_t qos0_pri : 4; - uint64_t qos1_pri : 4; - uint64_t qos2_pri : 4; - uint64_t qos3_pri : 4; - uint64_t qos4_pri : 4; - uint64_t qos5_pri : 4; - uint64_t qos6_pri : 4; - uint64_t qos7_pri : 4; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_pow_pp_grp_mskx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t grp_msk : 16; /**< PPX group mask */ -#else - uint64_t grp_msk : 16; - uint64_t reserved_16_63 : 48; -#endif - } cn30xx; - struct cvmx_pow_pp_grp_mskx_cn30xx cn31xx; - struct cvmx_pow_pp_grp_mskx_cn30xx cn38xx; - struct cvmx_pow_pp_grp_mskx_cn30xx cn38xxp2; - struct cvmx_pow_pp_grp_mskx_s cn50xx; - struct cvmx_pow_pp_grp_mskx_s cn52xx; - struct cvmx_pow_pp_grp_mskx_s cn52xxp1; - struct cvmx_pow_pp_grp_mskx_s cn56xx; - struct cvmx_pow_pp_grp_mskx_s cn56xxp1; - struct cvmx_pow_pp_grp_mskx_s cn58xx; - struct cvmx_pow_pp_grp_mskx_s cn58xxp1; -} cvmx_pow_pp_grp_mskx_t; - - -/** - * cvmx_pow_qos_rnd# - * - * POW_QOS_RNDX = POW QOS Issue Round Register (4 rounds per register x 8 registers = 32 rounds) - * - * Contains the round definitions for issuing new work. Each round consists of 8 bits with each bit - * corresponding to a QOS level. There are 4 rounds contained in each register for a total of 32 - * rounds. The issue logic traverses through the rounds sequentially (lowest round to highest round) - * in an attempt to find new work for each PP. Within each round, the issue logic traverses through - * the QOS levels sequentially (highest QOS to lowest QOS) skipping over each QOS level with a clear - * bit in the round mask. Note: setting a QOS level to all zeroes in all issue round registers will - * prevent work from being issued from that QOS level. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_qos_rndx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t rnd_p3 : 8; /**< Round mask for round Xx4+3 */ - uint64_t rnd_p2 : 8; /**< Round mask for round Xx4+2 */ - uint64_t rnd_p1 : 8; /**< Round mask for round Xx4+1 */ - uint64_t rnd : 8; /**< Round mask for round Xx4 */ -#else - uint64_t rnd : 8; - uint64_t rnd_p1 : 8; - uint64_t rnd_p2 : 8; - uint64_t rnd_p3 : 8; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_qos_rndx_s cn30xx; - struct cvmx_pow_qos_rndx_s cn31xx; - struct cvmx_pow_qos_rndx_s cn38xx; - struct cvmx_pow_qos_rndx_s cn38xxp2; - struct cvmx_pow_qos_rndx_s cn50xx; - struct cvmx_pow_qos_rndx_s cn52xx; - struct cvmx_pow_qos_rndx_s cn52xxp1; - struct cvmx_pow_qos_rndx_s cn56xx; - struct cvmx_pow_qos_rndx_s cn56xxp1; - struct cvmx_pow_qos_rndx_s cn58xx; - struct cvmx_pow_qos_rndx_s cn58xxp1; -} cvmx_pow_qos_rndx_t; - - -/** - * cvmx_pow_qos_thr# - * - * POW_QOS_THRX = POW QOS Threshold Register (1 per QOS level) - * - * Contains the thresholds for allocating POW internal storage buffers. If the number of remaining - * free buffers drops below the minimum threshold (MIN_THR) or the number of allocated buffers for - * this QOS level rises above the maximum threshold (MAX_THR), future incoming work queue entries - * will be buffered externally rather than internally. This register also contains a read-only count - * of the current number of free buffers (FREE_CNT), the number of internal buffers currently - * allocated to this QOS level (BUF_CNT), and the total number of buffers on the de-schedule list - * (DES_CNT) (which is not the same as the total number of de-scheduled buffers). - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_qos_thrx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t des_cnt : 12; /**< # of buffers on de-schedule list */ - uint64_t buf_cnt : 12; /**< # of internal buffers allocated to QOS level X */ - uint64_t free_cnt : 12; /**< # of total free buffers */ - uint64_t reserved_23_23 : 1; - uint64_t max_thr : 11; /**< Max threshold for QOS level X */ - uint64_t reserved_11_11 : 1; - uint64_t min_thr : 11; /**< Min threshold for QOS level X */ -#else - uint64_t min_thr : 11; - uint64_t reserved_11_11 : 1; - uint64_t max_thr : 11; - uint64_t reserved_23_23 : 1; - uint64_t free_cnt : 12; - uint64_t buf_cnt : 12; - uint64_t des_cnt : 12; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_pow_qos_thrx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_55_63 : 9; - uint64_t des_cnt : 7; /**< # of buffers on de-schedule list */ - uint64_t reserved_43_47 : 5; - uint64_t buf_cnt : 7; /**< # of internal buffers allocated to QOS level X */ - uint64_t reserved_31_35 : 5; - uint64_t free_cnt : 7; /**< # of total free buffers */ - uint64_t reserved_18_23 : 6; - uint64_t max_thr : 6; /**< Max threshold for QOS level X */ - uint64_t reserved_6_11 : 6; - uint64_t min_thr : 6; /**< Min threshold for QOS level X */ -#else - uint64_t min_thr : 6; - uint64_t reserved_6_11 : 6; - uint64_t max_thr : 6; - uint64_t reserved_18_23 : 6; - uint64_t free_cnt : 7; - uint64_t reserved_31_35 : 5; - uint64_t buf_cnt : 7; - uint64_t reserved_43_47 : 5; - uint64_t des_cnt : 7; - uint64_t reserved_55_63 : 9; -#endif - } cn30xx; - struct cvmx_pow_qos_thrx_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_57_63 : 7; - uint64_t des_cnt : 9; /**< # of buffers on de-schedule list */ - uint64_t reserved_45_47 : 3; - uint64_t buf_cnt : 9; /**< # of internal buffers allocated to QOS level X */ - uint64_t reserved_33_35 : 3; - uint64_t free_cnt : 9; /**< # of total free buffers */ - uint64_t reserved_20_23 : 4; - uint64_t max_thr : 8; /**< Max threshold for QOS level X */ - uint64_t reserved_8_11 : 4; - uint64_t min_thr : 8; /**< Min threshold for QOS level X */ -#else - uint64_t min_thr : 8; - uint64_t reserved_8_11 : 4; - uint64_t max_thr : 8; - uint64_t reserved_20_23 : 4; - uint64_t free_cnt : 9; - uint64_t reserved_33_35 : 3; - uint64_t buf_cnt : 9; - uint64_t reserved_45_47 : 3; - uint64_t des_cnt : 9; - uint64_t reserved_57_63 : 7; -#endif - } cn31xx; - struct cvmx_pow_qos_thrx_s cn38xx; - struct cvmx_pow_qos_thrx_s cn38xxp2; - struct cvmx_pow_qos_thrx_cn31xx cn50xx; - struct cvmx_pow_qos_thrx_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_58_63 : 6; - uint64_t des_cnt : 10; /**< # of buffers on de-schedule list */ - uint64_t reserved_46_47 : 2; - uint64_t buf_cnt : 10; /**< # of internal buffers allocated to QOS level X */ - uint64_t reserved_34_35 : 2; - uint64_t free_cnt : 10; /**< # of total free buffers */ - uint64_t reserved_21_23 : 3; - uint64_t max_thr : 9; /**< Max threshold for QOS level X */ - uint64_t reserved_9_11 : 3; - uint64_t min_thr : 9; /**< Min threshold for QOS level X */ -#else - uint64_t min_thr : 9; - uint64_t reserved_9_11 : 3; - uint64_t max_thr : 9; - uint64_t reserved_21_23 : 3; - uint64_t free_cnt : 10; - uint64_t reserved_34_35 : 2; - uint64_t buf_cnt : 10; - uint64_t reserved_46_47 : 2; - uint64_t des_cnt : 10; - uint64_t reserved_58_63 : 6; -#endif - } cn52xx; - struct cvmx_pow_qos_thrx_cn52xx cn52xxp1; - struct cvmx_pow_qos_thrx_s cn56xx; - struct cvmx_pow_qos_thrx_s cn56xxp1; - struct cvmx_pow_qos_thrx_s cn58xx; - struct cvmx_pow_qos_thrx_s cn58xxp1; -} cvmx_pow_qos_thrx_t; - - -/** - * cvmx_pow_ts_pc - * - * POW_TS_PC = POW Tag Switch Performance Counter - * - * Counts the number of tag switch requests. Write to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_ts_pc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ts_pc : 32; /**< Tag switch performance counter */ -#else - uint64_t ts_pc : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_ts_pc_s cn30xx; - struct cvmx_pow_ts_pc_s cn31xx; - struct cvmx_pow_ts_pc_s cn38xx; - struct cvmx_pow_ts_pc_s cn38xxp2; - struct cvmx_pow_ts_pc_s cn50xx; - struct cvmx_pow_ts_pc_s cn52xx; - struct cvmx_pow_ts_pc_s cn52xxp1; - struct cvmx_pow_ts_pc_s cn56xx; - struct cvmx_pow_ts_pc_s cn56xxp1; - struct cvmx_pow_ts_pc_s cn58xx; - struct cvmx_pow_ts_pc_s cn58xxp1; -} cvmx_pow_ts_pc_t; - - -/** - * cvmx_pow_wa_com_pc - * - * POW_WA_COM_PC = POW Work Add Combined Performance Counter - * - * Counts the number of add new work requests for all QOS levels. Write to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wa_com_pc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wa_pc : 32; /**< Work add combined performance counter */ -#else - uint64_t wa_pc : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_wa_com_pc_s cn30xx; - struct cvmx_pow_wa_com_pc_s cn31xx; - struct cvmx_pow_wa_com_pc_s cn38xx; - struct cvmx_pow_wa_com_pc_s cn38xxp2; - struct cvmx_pow_wa_com_pc_s cn50xx; - struct cvmx_pow_wa_com_pc_s cn52xx; - struct cvmx_pow_wa_com_pc_s cn52xxp1; - struct cvmx_pow_wa_com_pc_s cn56xx; - struct cvmx_pow_wa_com_pc_s cn56xxp1; - struct cvmx_pow_wa_com_pc_s cn58xx; - struct cvmx_pow_wa_com_pc_s cn58xxp1; -} cvmx_pow_wa_com_pc_t; - - -/** - * cvmx_pow_wa_pc# - * - * POW_WA_PCX = POW Work Add Performance Counter (1 per QOS level) - * - * Counts the number of add new work requests for each QOS level. Write to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wa_pcx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t wa_pc : 32; /**< Work add performance counter for QOS level X */ -#else - uint64_t wa_pc : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_wa_pcx_s cn30xx; - struct cvmx_pow_wa_pcx_s cn31xx; - struct cvmx_pow_wa_pcx_s cn38xx; - struct cvmx_pow_wa_pcx_s cn38xxp2; - struct cvmx_pow_wa_pcx_s cn50xx; - struct cvmx_pow_wa_pcx_s cn52xx; - struct cvmx_pow_wa_pcx_s cn52xxp1; - struct cvmx_pow_wa_pcx_s cn56xx; - struct cvmx_pow_wa_pcx_s cn56xxp1; - struct cvmx_pow_wa_pcx_s cn58xx; - struct cvmx_pow_wa_pcx_s cn58xxp1; -} cvmx_pow_wa_pcx_t; - - -/** - * cvmx_pow_wq_int - * - * POW_WQ_INT = POW Work Queue Interrupt Register - * - * Contains the bits (1 per group) that set work queue interrupts and are used to clear these - * interrupts. Also contains the input queue interrupt temporary disable bits (1 per group). For - * more information regarding this register, see the interrupt section. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wq_int_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t iq_dis : 16; /**< Input queue interrupt temporary disable mask - Corresponding WQ_INT<*> bit cannot be set due to - IQ_CNT/IQ_THR check when this bit is set. - Corresponding IQ_DIS bit is cleared by HW whenever: - - POW_WQ_INT_CNT*[IQ_CNT] is zero, or - - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic - counter POW_WQ_INT_PC[PC]==0 */ - uint64_t wq_int : 16; /**< Work queue interrupt bits - Corresponding WQ_INT bit is set by HW whenever: - - POW_WQ_INT_CNT*[IQ_CNT] >= - POW_WQ_INT_THR*[IQ_THR] and the threshold - interrupt is not disabled. - IQ_DIS<*>==1 disables the interrupt. - POW_WQ_INT_THR*[IQ_THR]==0 disables the int. - - POW_WQ_INT_CNT*[DS_CNT] >= - POW_WQ_INT_THR*[DS_THR] and the threshold - interrupt is not disabled - POW_WQ_INT_THR*[DS_THR]==0 disables the int. - - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic - counter POW_WQ_INT_PC[PC]==0 and - POW_WQ_INT_THR*[TC_EN]==1 and at least one of: - - POW_WQ_INT_CNT*[IQ_CNT] > 0 - - POW_WQ_INT_CNT*[DS_CNT] > 0 */ -#else - uint64_t wq_int : 16; - uint64_t iq_dis : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_wq_int_s cn30xx; - struct cvmx_pow_wq_int_s cn31xx; - struct cvmx_pow_wq_int_s cn38xx; - struct cvmx_pow_wq_int_s cn38xxp2; - struct cvmx_pow_wq_int_s cn50xx; - struct cvmx_pow_wq_int_s cn52xx; - struct cvmx_pow_wq_int_s cn52xxp1; - struct cvmx_pow_wq_int_s cn56xx; - struct cvmx_pow_wq_int_s cn56xxp1; - struct cvmx_pow_wq_int_s cn58xx; - struct cvmx_pow_wq_int_s cn58xxp1; -} cvmx_pow_wq_int_t; - - -/** - * cvmx_pow_wq_int_cnt# - * - * POW_WQ_INT_CNTX = POW Work Queue Interrupt Count Register (1 per group) - * - * Contains a read-only copy of the counts used to trigger work queue interrupts. For more - * information regarding this register, see the interrupt section. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wq_int_cntx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t tc_cnt : 4; /**< Time counter current value for group X - HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever: - - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and - corresponding POW_WQ_INT_CNT*[DS_CNT]==0 - - corresponding POW_WQ_INT[WQ_INT<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT[IQ_DIS<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT_THR* is written by SW - - TC_CNT==1 and periodic counter - POW_WQ_INT_PC[PC]==0 - Otherwise, HW decrements TC_CNT whenever the - periodic counter POW_WQ_INT_PC[PC]==0. - TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */ - uint64_t ds_cnt : 12; /**< De-schedule executable count for group X */ - uint64_t iq_cnt : 12; /**< Input queue executable count for group X */ -#else - uint64_t iq_cnt : 12; - uint64_t ds_cnt : 12; - uint64_t tc_cnt : 4; - uint64_t reserved_28_63 : 36; -#endif - } s; - struct cvmx_pow_wq_int_cntx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t tc_cnt : 4; /**< Time counter current value for group X - HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever: - - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and - corresponding POW_WQ_INT_CNT*[DS_CNT]==0 - - corresponding POW_WQ_INT[WQ_INT<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT[IQ_DIS<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT_THR* is written by SW - - TC_CNT==1 and periodic counter - POW_WQ_INT_PC[PC]==0 - Otherwise, HW decrements TC_CNT whenever the - periodic counter POW_WQ_INT_PC[PC]==0. - TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */ - uint64_t reserved_19_23 : 5; - uint64_t ds_cnt : 7; /**< De-schedule executable count for group X */ - uint64_t reserved_7_11 : 5; - uint64_t iq_cnt : 7; /**< Input queue executable count for group X */ -#else - uint64_t iq_cnt : 7; - uint64_t reserved_7_11 : 5; - uint64_t ds_cnt : 7; - uint64_t reserved_19_23 : 5; - uint64_t tc_cnt : 4; - uint64_t reserved_28_63 : 36; -#endif - } cn30xx; - struct cvmx_pow_wq_int_cntx_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t tc_cnt : 4; /**< Time counter current value for group X - HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever: - - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and - corresponding POW_WQ_INT_CNT*[DS_CNT]==0 - - corresponding POW_WQ_INT[WQ_INT<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT[IQ_DIS<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT_THR* is written by SW - - TC_CNT==1 and periodic counter - POW_WQ_INT_PC[PC]==0 - Otherwise, HW decrements TC_CNT whenever the - periodic counter POW_WQ_INT_PC[PC]==0. - TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */ - uint64_t reserved_21_23 : 3; - uint64_t ds_cnt : 9; /**< De-schedule executable count for group X */ - uint64_t reserved_9_11 : 3; - uint64_t iq_cnt : 9; /**< Input queue executable count for group X */ -#else - uint64_t iq_cnt : 9; - uint64_t reserved_9_11 : 3; - uint64_t ds_cnt : 9; - uint64_t reserved_21_23 : 3; - uint64_t tc_cnt : 4; - uint64_t reserved_28_63 : 36; -#endif - } cn31xx; - struct cvmx_pow_wq_int_cntx_s cn38xx; - struct cvmx_pow_wq_int_cntx_s cn38xxp2; - struct cvmx_pow_wq_int_cntx_cn31xx cn50xx; - struct cvmx_pow_wq_int_cntx_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_28_63 : 36; - uint64_t tc_cnt : 4; /**< Time counter current value for group X - HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever: - - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and - corresponding POW_WQ_INT_CNT*[DS_CNT]==0 - - corresponding POW_WQ_INT[WQ_INT<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT[IQ_DIS<*>] is written - with a 1 by SW - - corresponding POW_WQ_INT_THR* is written by SW - - TC_CNT==1 and periodic counter - POW_WQ_INT_PC[PC]==0 - Otherwise, HW decrements TC_CNT whenever the - periodic counter POW_WQ_INT_PC[PC]==0. - TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */ - uint64_t reserved_22_23 : 2; - uint64_t ds_cnt : 10; /**< De-schedule executable count for group X */ - uint64_t reserved_10_11 : 2; - uint64_t iq_cnt : 10; /**< Input queue executable count for group X */ -#else - uint64_t iq_cnt : 10; - uint64_t reserved_10_11 : 2; - uint64_t ds_cnt : 10; - uint64_t reserved_22_23 : 2; - uint64_t tc_cnt : 4; - uint64_t reserved_28_63 : 36; -#endif - } cn52xx; - struct cvmx_pow_wq_int_cntx_cn52xx cn52xxp1; - struct cvmx_pow_wq_int_cntx_s cn56xx; - struct cvmx_pow_wq_int_cntx_s cn56xxp1; - struct cvmx_pow_wq_int_cntx_s cn58xx; - struct cvmx_pow_wq_int_cntx_s cn58xxp1; -} cvmx_pow_wq_int_cntx_t; - - -/** - * cvmx_pow_wq_int_pc - * - * POW_WQ_INT_PC = POW Work Queue Interrupt Periodic Counter Register - * - * Contains the threshold value for the work queue interrupt periodic counter and also a read-only - * copy of the periodic counter. For more information regarding this register, see the interrupt - * section. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wq_int_pc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_60_63 : 4; - uint64_t pc : 28; /**< Work queue interrupt periodic counter */ - uint64_t reserved_28_31 : 4; - uint64_t pc_thr : 20; /**< Work queue interrupt periodic counter threshold */ - uint64_t reserved_0_7 : 8; -#else - uint64_t reserved_0_7 : 8; - uint64_t pc_thr : 20; - uint64_t reserved_28_31 : 4; - uint64_t pc : 28; - uint64_t reserved_60_63 : 4; -#endif - } s; - struct cvmx_pow_wq_int_pc_s cn30xx; - struct cvmx_pow_wq_int_pc_s cn31xx; - struct cvmx_pow_wq_int_pc_s cn38xx; - struct cvmx_pow_wq_int_pc_s cn38xxp2; - struct cvmx_pow_wq_int_pc_s cn50xx; - struct cvmx_pow_wq_int_pc_s cn52xx; - struct cvmx_pow_wq_int_pc_s cn52xxp1; - struct cvmx_pow_wq_int_pc_s cn56xx; - struct cvmx_pow_wq_int_pc_s cn56xxp1; - struct cvmx_pow_wq_int_pc_s cn58xx; - struct cvmx_pow_wq_int_pc_s cn58xxp1; -} cvmx_pow_wq_int_pc_t; - - -/** - * cvmx_pow_wq_int_thr# - * - * POW_WQ_INT_THRX = POW Work Queue Interrupt Threshold Register (1 per group) - * - * Contains the thresholds for enabling and setting work queue interrupts. For more information - * regarding this register, see the interrupt section. - * - * Note: Up to 4 of the POW's internal storage buffers can be allocated for hardware use and are - * therefore not available for incoming work queue entries. Additionally, any PP that is not in the - * NULL_NULL state consumes a buffer. Thus in a 4 PP system, it is not advisable to set either - * IQ_THR or DS_THR to greater than 512 - 4 - 4 = 504. Doing so may prevent the interrupt from - * ever triggering. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_wq_int_thrx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t tc_en : 1; /**< Time counter interrupt enable for group X - TC_EN must be zero when TC_THR==0 */ - uint64_t tc_thr : 4; /**< Time counter interrupt threshold for group X - When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */ - uint64_t reserved_23_23 : 1; - uint64_t ds_thr : 11; /**< De-schedule count threshold for group X - DS_THR==0 disables the threshold interrupt */ - uint64_t reserved_11_11 : 1; - uint64_t iq_thr : 11; /**< Input queue count threshold for group X - IQ_THR==0 disables the threshold interrupt */ -#else - uint64_t iq_thr : 11; - uint64_t reserved_11_11 : 1; - uint64_t ds_thr : 11; - uint64_t reserved_23_23 : 1; - uint64_t tc_thr : 4; - uint64_t tc_en : 1; - uint64_t reserved_29_63 : 35; -#endif - } s; - struct cvmx_pow_wq_int_thrx_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t tc_en : 1; /**< Time counter interrupt enable for group X - TC_EN must be zero when TC_THR==0 */ - uint64_t tc_thr : 4; /**< Time counter interrupt threshold for group X - When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */ - uint64_t reserved_18_23 : 6; - uint64_t ds_thr : 6; /**< De-schedule count threshold for group X - DS_THR==0 disables the threshold interrupt */ - uint64_t reserved_6_11 : 6; - uint64_t iq_thr : 6; /**< Input queue count threshold for group X - IQ_THR==0 disables the threshold interrupt */ -#else - uint64_t iq_thr : 6; - uint64_t reserved_6_11 : 6; - uint64_t ds_thr : 6; - uint64_t reserved_18_23 : 6; - uint64_t tc_thr : 4; - uint64_t tc_en : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn30xx; - struct cvmx_pow_wq_int_thrx_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t tc_en : 1; /**< Time counter interrupt enable for group X - TC_EN must be zero when TC_THR==0 */ - uint64_t tc_thr : 4; /**< Time counter interrupt threshold for group X - When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */ - uint64_t reserved_20_23 : 4; - uint64_t ds_thr : 8; /**< De-schedule count threshold for group X - DS_THR==0 disables the threshold interrupt */ - uint64_t reserved_8_11 : 4; - uint64_t iq_thr : 8; /**< Input queue count threshold for group X - IQ_THR==0 disables the threshold interrupt */ -#else - uint64_t iq_thr : 8; - uint64_t reserved_8_11 : 4; - uint64_t ds_thr : 8; - uint64_t reserved_20_23 : 4; - uint64_t tc_thr : 4; - uint64_t tc_en : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn31xx; - struct cvmx_pow_wq_int_thrx_s cn38xx; - struct cvmx_pow_wq_int_thrx_s cn38xxp2; - struct cvmx_pow_wq_int_thrx_cn31xx cn50xx; - struct cvmx_pow_wq_int_thrx_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_29_63 : 35; - uint64_t tc_en : 1; /**< Time counter interrupt enable for group X - TC_EN must be zero when TC_THR==0 */ - uint64_t tc_thr : 4; /**< Time counter interrupt threshold for group X - When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */ - uint64_t reserved_21_23 : 3; - uint64_t ds_thr : 9; /**< De-schedule count threshold for group X - DS_THR==0 disables the threshold interrupt */ - uint64_t reserved_9_11 : 3; - uint64_t iq_thr : 9; /**< Input queue count threshold for group X - IQ_THR==0 disables the threshold interrupt */ -#else - uint64_t iq_thr : 9; - uint64_t reserved_9_11 : 3; - uint64_t ds_thr : 9; - uint64_t reserved_21_23 : 3; - uint64_t tc_thr : 4; - uint64_t tc_en : 1; - uint64_t reserved_29_63 : 35; -#endif - } cn52xx; - struct cvmx_pow_wq_int_thrx_cn52xx cn52xxp1; - struct cvmx_pow_wq_int_thrx_s cn56xx; - struct cvmx_pow_wq_int_thrx_s cn56xxp1; - struct cvmx_pow_wq_int_thrx_s cn58xx; - struct cvmx_pow_wq_int_thrx_s cn58xxp1; -} cvmx_pow_wq_int_thrx_t; - - -/** - * cvmx_pow_ws_pc# - * - * POW_WS_PCX = POW Work Schedule Performance Counter (1 per group) - * - * Counts the number of work schedules for each group. Write to clear. - */ -typedef union -{ - uint64_t u64; - struct cvmx_pow_ws_pcx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t ws_pc : 32; /**< Work schedule performance counter for group X */ -#else - uint64_t ws_pc : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_pow_ws_pcx_s cn30xx; - struct cvmx_pow_ws_pcx_s cn31xx; - struct cvmx_pow_ws_pcx_s cn38xx; - struct cvmx_pow_ws_pcx_s cn38xxp2; - struct cvmx_pow_ws_pcx_s cn50xx; - struct cvmx_pow_ws_pcx_s cn52xx; - struct cvmx_pow_ws_pcx_s cn52xxp1; - struct cvmx_pow_ws_pcx_s cn56xx; - struct cvmx_pow_ws_pcx_s cn56xxp1; - struct cvmx_pow_ws_pcx_s cn58xx; - struct cvmx_pow_ws_pcx_s cn58xxp1; -} cvmx_pow_ws_pcx_t; - - -/** - * cvmx_rad_mem_debug0 - * - * Notes: - * This CSR is a memory of 32 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_mem_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t iword : 64; /**< IWord */ -#else - uint64_t iword : 64; -#endif - } s; - struct cvmx_rad_mem_debug0_s cn52xx; - struct cvmx_rad_mem_debug0_s cn52xxp1; - struct cvmx_rad_mem_debug0_s cn56xx; - struct cvmx_rad_mem_debug0_s cn56xxp1; -} cvmx_rad_mem_debug0_t; - - -/** - * cvmx_rad_mem_debug1 - * - * Notes: - * This CSR is a memory of 256 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_mem_debug1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t p_dat : 64; /**< P data */ -#else - uint64_t p_dat : 64; -#endif - } s; - struct cvmx_rad_mem_debug1_s cn52xx; - struct cvmx_rad_mem_debug1_s cn52xxp1; - struct cvmx_rad_mem_debug1_s cn56xx; - struct cvmx_rad_mem_debug1_s cn56xxp1; -} cvmx_rad_mem_debug1_t; - - -/** - * cvmx_rad_mem_debug2 - * - * Notes: - * This CSR is a memory of 256 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. A read of any entry that has not been - * previously written is illegal and will result in unpredictable CSR read data. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_mem_debug2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t q_dat : 64; /**< Q data */ -#else - uint64_t q_dat : 64; -#endif - } s; - struct cvmx_rad_mem_debug2_s cn52xx; - struct cvmx_rad_mem_debug2_s cn52xxp1; - struct cvmx_rad_mem_debug2_s cn56xx; - struct cvmx_rad_mem_debug2_s cn56xxp1; -} cvmx_rad_mem_debug2_t; - - -/** - * cvmx_rad_reg_bist_result - * - * Notes: - * Access to the internal BiST results - * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_bist_result_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t sta : 1; /**< BiST result of the STA memories */ - uint64_t ncb_oub : 1; /**< BiST result of the NCB_OUB memories */ - uint64_t ncb_inb : 2; /**< BiST result of the NCB_INB memories */ - uint64_t dat : 2; /**< BiST result of the DAT memories */ -#else - uint64_t dat : 2; - uint64_t ncb_inb : 2; - uint64_t ncb_oub : 1; - uint64_t sta : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_rad_reg_bist_result_s cn52xx; - struct cvmx_rad_reg_bist_result_s cn52xxp1; - struct cvmx_rad_reg_bist_result_s cn56xx; - struct cvmx_rad_reg_bist_result_s cn56xxp1; -} cvmx_rad_reg_bist_result_t; - - -/** - * cvmx_rad_reg_cmd_buf - * - * Notes: - * Sets the command buffer parameters - * The size of the command buffer segments is measured in uint64s. The pool specifies 1 of 8 free - * lists to be used when freeing command buffer segments. The PTR field is overwritten with the next - * pointer each time that the command buffer segment is exhausted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_cmd_buf_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_58_63 : 6; - uint64_t dwb : 9; /**< Number of DontWriteBacks */ - uint64_t pool : 3; /**< Free list used to free command buffer segments */ - uint64_t size : 13; /**< Number of uint64s per command buffer segment */ - uint64_t ptr : 33; /**< Initial command buffer pointer[39:7] (128B-aligned) */ -#else - uint64_t ptr : 33; - uint64_t size : 13; - uint64_t pool : 3; - uint64_t dwb : 9; - uint64_t reserved_58_63 : 6; -#endif - } s; - struct cvmx_rad_reg_cmd_buf_s cn52xx; - struct cvmx_rad_reg_cmd_buf_s cn52xxp1; - struct cvmx_rad_reg_cmd_buf_s cn56xx; - struct cvmx_rad_reg_cmd_buf_s cn56xxp1; -} cvmx_rad_reg_cmd_buf_t; - - -/** - * cvmx_rad_reg_ctl - * - * Notes: - * MAX_READ is a throttle to control NCB usage. Values >8 are illegal. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t max_read : 4; /**< Maximum number of outstanding data read commands */ - uint64_t store_le : 1; /**< Force STORE0 byte write address to little endian */ - uint64_t reset : 1; /**< Reset oneshot pulse (lasts for 4 cycles) */ -#else - uint64_t reset : 1; - uint64_t store_le : 1; - uint64_t max_read : 4; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_rad_reg_ctl_s cn52xx; - struct cvmx_rad_reg_ctl_s cn52xxp1; - struct cvmx_rad_reg_ctl_s cn56xx; - struct cvmx_rad_reg_ctl_s cn56xxp1; -} cvmx_rad_reg_ctl_t; - - -/** - * cvmx_rad_reg_debug0 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_57_63 : 7; - uint64_t loop : 25; /**< Loop offset */ - uint64_t reserved_22_31 : 10; - uint64_t iridx : 6; /**< IWords read index */ - uint64_t reserved_14_15 : 2; - uint64_t iwidx : 6; /**< IWords write index */ - uint64_t owordqv : 1; /**< Valid for OWORDQ */ - uint64_t owordpv : 1; /**< Valid for OWORDP */ - uint64_t commit : 1; /**< Waiting for write commit */ - uint64_t state : 5; /**< Main state */ -#else - uint64_t state : 5; - uint64_t commit : 1; - uint64_t owordpv : 1; - uint64_t owordqv : 1; - uint64_t iwidx : 6; - uint64_t reserved_14_15 : 2; - uint64_t iridx : 6; - uint64_t reserved_22_31 : 10; - uint64_t loop : 25; - uint64_t reserved_57_63 : 7; -#endif - } s; - struct cvmx_rad_reg_debug0_s cn52xx; - struct cvmx_rad_reg_debug0_s cn52xxp1; - struct cvmx_rad_reg_debug0_s cn56xx; - struct cvmx_rad_reg_debug0_s cn56xxp1; -} cvmx_rad_reg_debug0_t; - - -/** - * cvmx_rad_reg_debug1 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cword : 64; /**< CWord */ -#else - uint64_t cword : 64; -#endif - } s; - struct cvmx_rad_reg_debug1_s cn52xx; - struct cvmx_rad_reg_debug1_s cn52xxp1; - struct cvmx_rad_reg_debug1_s cn56xx; - struct cvmx_rad_reg_debug1_s cn56xxp1; -} cvmx_rad_reg_debug1_t; - - -/** - * cvmx_rad_reg_debug10 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug10_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t flags : 8; /**< OCTL flags */ - uint64_t size : 16; /**< OCTL size (bytes) */ - uint64_t ptr : 40; /**< OCTL pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t flags : 8; -#endif - } s; - struct cvmx_rad_reg_debug10_s cn52xx; - struct cvmx_rad_reg_debug10_s cn52xxp1; - struct cvmx_rad_reg_debug10_s cn56xx; - struct cvmx_rad_reg_debug10_s cn56xxp1; -} cvmx_rad_reg_debug10_t; - - -/** - * cvmx_rad_reg_debug11 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug11_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t q : 1; /**< OCTL q flag */ - uint64_t p : 1; /**< OCTL p flag */ - uint64_t wc : 1; /**< OCTL write commit flag */ - uint64_t eod : 1; /**< OCTL eod flag */ - uint64_t sod : 1; /**< OCTL sod flag */ - uint64_t index : 8; /**< OCTL index */ -#else - uint64_t index : 8; - uint64_t sod : 1; - uint64_t eod : 1; - uint64_t wc : 1; - uint64_t p : 1; - uint64_t q : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_rad_reg_debug11_s cn52xx; - struct cvmx_rad_reg_debug11_s cn52xxp1; - struct cvmx_rad_reg_debug11_s cn56xx; - struct cvmx_rad_reg_debug11_s cn56xxp1; -} cvmx_rad_reg_debug11_t; - - -/** - * cvmx_rad_reg_debug12 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug12_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t asserts : 15; /**< Various assertion checks */ -#else - uint64_t asserts : 15; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_rad_reg_debug12_s cn52xx; - struct cvmx_rad_reg_debug12_s cn52xxp1; - struct cvmx_rad_reg_debug12_s cn56xx; - struct cvmx_rad_reg_debug12_s cn56xxp1; -} cvmx_rad_reg_debug12_t; - - -/** - * cvmx_rad_reg_debug2 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t owordp : 64; /**< OWordP */ -#else - uint64_t owordp : 64; -#endif - } s; - struct cvmx_rad_reg_debug2_s cn52xx; - struct cvmx_rad_reg_debug2_s cn52xxp1; - struct cvmx_rad_reg_debug2_s cn56xx; - struct cvmx_rad_reg_debug2_s cn56xxp1; -} cvmx_rad_reg_debug2_t; - - -/** - * cvmx_rad_reg_debug3 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t owordq : 64; /**< OWordQ */ -#else - uint64_t owordq : 64; -#endif - } s; - struct cvmx_rad_reg_debug3_s cn52xx; - struct cvmx_rad_reg_debug3_s cn52xxp1; - struct cvmx_rad_reg_debug3_s cn56xx; - struct cvmx_rad_reg_debug3_s cn56xxp1; -} cvmx_rad_reg_debug3_t; - - -/** - * cvmx_rad_reg_debug4 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t rword : 64; /**< RWord */ -#else - uint64_t rword : 64; -#endif - } s; - struct cvmx_rad_reg_debug4_s cn52xx; - struct cvmx_rad_reg_debug4_s cn52xxp1; - struct cvmx_rad_reg_debug4_s cn56xx; - struct cvmx_rad_reg_debug4_s cn56xxp1; -} cvmx_rad_reg_debug4_t; - - -/** - * cvmx_rad_reg_debug5 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_53_63 : 11; - uint64_t niropc7 : 3; /**< NCBI ropc (stage7 grant) */ - uint64_t nirque7 : 2; /**< NCBI rque (stage7 grant) */ - uint64_t nirval7 : 5; /**< NCBI rval (stage7 grant) */ - uint64_t niropc6 : 3; /**< NCBI ropc (stage6 arb) */ - uint64_t nirque6 : 2; /**< NCBI rque (stage6 arb) */ - uint64_t nirarb6 : 1; /**< NCBI rarb (stage6 arb) */ - uint64_t nirval6 : 5; /**< NCBI rval (stage6 arb) */ - uint64_t niridx1 : 4; /**< NCBI ridx1 */ - uint64_t niwidx1 : 4; /**< NCBI widx1 */ - uint64_t niridx0 : 4; /**< NCBI ridx0 */ - uint64_t niwidx0 : 4; /**< NCBI widx0 */ - uint64_t wccreds : 2; /**< WC credits */ - uint64_t fpacreds : 2; /**< POW credits */ - uint64_t reserved_10_11 : 2; - uint64_t powcreds : 2; /**< POW credits */ - uint64_t n1creds : 4; /**< NCBI1 credits */ - uint64_t n0creds : 4; /**< NCBI0 credits */ -#else - uint64_t n0creds : 4; - uint64_t n1creds : 4; - uint64_t powcreds : 2; - uint64_t reserved_10_11 : 2; - uint64_t fpacreds : 2; - uint64_t wccreds : 2; - uint64_t niwidx0 : 4; - uint64_t niridx0 : 4; - uint64_t niwidx1 : 4; - uint64_t niridx1 : 4; - uint64_t nirval6 : 5; - uint64_t nirarb6 : 1; - uint64_t nirque6 : 2; - uint64_t niropc6 : 3; - uint64_t nirval7 : 5; - uint64_t nirque7 : 2; - uint64_t niropc7 : 3; - uint64_t reserved_53_63 : 11; -#endif - } s; - struct cvmx_rad_reg_debug5_s cn52xx; - struct cvmx_rad_reg_debug5_s cn52xxp1; - struct cvmx_rad_reg_debug5_s cn56xx; - struct cvmx_rad_reg_debug5_s cn56xxp1; -} cvmx_rad_reg_debug5_t; - - -/** - * cvmx_rad_reg_debug6 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cnt : 8; /**< CCTL count[7:0] (bytes) */ - uint64_t size : 16; /**< CCTL size (bytes) */ - uint64_t ptr : 40; /**< CCTL pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t cnt : 8; -#endif - } s; - struct cvmx_rad_reg_debug6_s cn52xx; - struct cvmx_rad_reg_debug6_s cn52xxp1; - struct cvmx_rad_reg_debug6_s cn56xx; - struct cvmx_rad_reg_debug6_s cn56xxp1; -} cvmx_rad_reg_debug6_t; - - -/** - * cvmx_rad_reg_debug7 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t cnt : 15; /**< CCTL count[22:8] (bytes) */ -#else - uint64_t cnt : 15; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_rad_reg_debug7_s cn52xx; - struct cvmx_rad_reg_debug7_s cn52xxp1; - struct cvmx_rad_reg_debug7_s cn56xx; - struct cvmx_rad_reg_debug7_s cn56xxp1; -} cvmx_rad_reg_debug7_t; - - -/** - * cvmx_rad_reg_debug8 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug8_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t flags : 8; /**< ICTL flags */ - uint64_t size : 16; /**< ICTL size (bytes) */ - uint64_t ptr : 40; /**< ICTL pointer */ -#else - uint64_t ptr : 40; - uint64_t size : 16; - uint64_t flags : 8; -#endif - } s; - struct cvmx_rad_reg_debug8_s cn52xx; - struct cvmx_rad_reg_debug8_s cn52xxp1; - struct cvmx_rad_reg_debug8_s cn56xx; - struct cvmx_rad_reg_debug8_s cn56xxp1; -} cvmx_rad_reg_debug8_t; - - -/** - * cvmx_rad_reg_debug9 - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_debug9_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t eod : 1; /**< ICTL eod flag */ - uint64_t ini : 1; /**< ICTL init flag */ - uint64_t q : 1; /**< ICTL q enable */ - uint64_t p : 1; /**< ICTL p enable */ - uint64_t mul : 8; /**< ICTL multiplier */ - uint64_t index : 8; /**< ICTL index */ -#else - uint64_t index : 8; - uint64_t mul : 8; - uint64_t p : 1; - uint64_t q : 1; - uint64_t ini : 1; - uint64_t eod : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_rad_reg_debug9_s cn52xx; - struct cvmx_rad_reg_debug9_s cn52xxp1; - struct cvmx_rad_reg_debug9_s cn56xx; - struct cvmx_rad_reg_debug9_s cn56xxp1; -} cvmx_rad_reg_debug9_t; - - -/** - * cvmx_rad_reg_error - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_error_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t doorbell : 1; /**< A doorbell count has overflowed */ -#else - uint64_t doorbell : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_rad_reg_error_s cn52xx; - struct cvmx_rad_reg_error_s cn52xxp1; - struct cvmx_rad_reg_error_s cn56xx; - struct cvmx_rad_reg_error_s cn56xxp1; -} cvmx_rad_reg_error_t; - - -/** - * cvmx_rad_reg_int_mask - * - * Notes: - * When a mask bit is set, the corresponding interrupt is enabled. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_int_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t doorbell : 1; /**< Bit mask corresponding to RAD_REG_ERROR[0] above */ -#else - uint64_t doorbell : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_rad_reg_int_mask_s cn52xx; - struct cvmx_rad_reg_int_mask_s cn52xxp1; - struct cvmx_rad_reg_int_mask_s cn56xx; - struct cvmx_rad_reg_int_mask_s cn56xxp1; -} cvmx_rad_reg_int_mask_t; - - -/** - * cvmx_rad_reg_polynomial - * - * Notes: - * The polynomial is x^8 + C7*x^7 + C6*x^6 + C5*x^5 + C4*x^4 + C3*x^3 + C2*x^2 + C1*x^1 + C0. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_polynomial_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t coeffs : 8; /**< coefficients of GF(2^8) irreducible polynomial */ -#else - uint64_t coeffs : 8; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_rad_reg_polynomial_s cn52xx; - struct cvmx_rad_reg_polynomial_s cn52xxp1; - struct cvmx_rad_reg_polynomial_s cn56xx; - struct cvmx_rad_reg_polynomial_s cn56xxp1; -} cvmx_rad_reg_polynomial_t; - - -/** - * cvmx_rad_reg_read_idx - * - * Notes: - * Provides the read index during a CSR read operation to any of the CSRs that are physically stored - * as memories. The names of these CSRs begin with the prefix "RAD_MEM_". - * IDX[15:0] is the read index. INC[15:0] is an increment that is added to IDX[15:0] after any CSR read. - * The intended use is to initially write this CSR such that IDX=0 and INC=1. Then, the entire - * contents of a CSR memory can be read with consecutive CSR read commands. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rad_reg_read_idx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t inc : 16; /**< Increment to add to current index for next index */ - uint64_t index : 16; /**< Index to use for next memory CSR read */ -#else - uint64_t index : 16; - uint64_t inc : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_rad_reg_read_idx_s cn52xx; - struct cvmx_rad_reg_read_idx_s cn52xxp1; - struct cvmx_rad_reg_read_idx_s cn56xx; - struct cvmx_rad_reg_read_idx_s cn56xxp1; -} cvmx_rad_reg_read_idx_t; - - -/** - * cvmx_rnm_bist_status - * - * RNM_BIST_STATUS = RNM's BIST Status Register - * - * The RNM's Memory Bist Status register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rnm_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t rrc : 1; /**< Status of RRC block bist. */ - uint64_t mem : 1; /**< Status of MEM block bist. */ -#else - uint64_t mem : 1; - uint64_t rrc : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_rnm_bist_status_s cn30xx; - struct cvmx_rnm_bist_status_s cn31xx; - struct cvmx_rnm_bist_status_s cn38xx; - struct cvmx_rnm_bist_status_s cn38xxp2; - struct cvmx_rnm_bist_status_s cn50xx; - struct cvmx_rnm_bist_status_s cn52xx; - struct cvmx_rnm_bist_status_s cn52xxp1; - struct cvmx_rnm_bist_status_s cn56xx; - struct cvmx_rnm_bist_status_s cn56xxp1; - struct cvmx_rnm_bist_status_s cn58xx; - struct cvmx_rnm_bist_status_s cn58xxp1; -} cvmx_rnm_bist_status_t; - - -/** - * cvmx_rnm_ctl_status - * - * RNM_CTL_STATUS = RNM's Control/Status Register - * - * The RNM's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_rnm_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t ent_sel : 4; /**< ? */ - uint64_t exp_ent : 1; /**< Exported entropy enable for random number generator */ - uint64_t rng_rst : 1; /**< Reset RNG as core reset. */ - uint64_t rnm_rst : 1; /**< Reset the RNM as core reset except for register - logic. */ - uint64_t rng_en : 1; /**< Enable the output of the RNG. */ - uint64_t ent_en : 1; /**< Entropy enable for random number generator. */ -#else - uint64_t ent_en : 1; - uint64_t rng_en : 1; - uint64_t rnm_rst : 1; - uint64_t rng_rst : 1; - uint64_t exp_ent : 1; - uint64_t ent_sel : 4; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_rnm_ctl_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t rng_rst : 1; /**< Reset RNG as core reset. */ - uint64_t rnm_rst : 1; /**< Reset the RNM as core reset except for register - logic. */ - uint64_t rng_en : 1; /**< Enable the output of the RNG. */ - uint64_t ent_en : 1; /**< Entropy enable for random number generator. */ -#else - uint64_t ent_en : 1; - uint64_t rng_en : 1; - uint64_t rnm_rst : 1; - uint64_t rng_rst : 1; - uint64_t reserved_4_63 : 60; -#endif - } cn30xx; - struct cvmx_rnm_ctl_status_cn30xx cn31xx; - struct cvmx_rnm_ctl_status_cn30xx cn38xx; - struct cvmx_rnm_ctl_status_cn30xx cn38xxp2; - struct cvmx_rnm_ctl_status_s cn50xx; - struct cvmx_rnm_ctl_status_s cn52xx; - struct cvmx_rnm_ctl_status_s cn52xxp1; - struct cvmx_rnm_ctl_status_s cn56xx; - struct cvmx_rnm_ctl_status_s cn56xxp1; - struct cvmx_rnm_ctl_status_s cn58xx; - struct cvmx_rnm_ctl_status_s cn58xxp1; -} cvmx_rnm_ctl_status_t; - - -/** - * cvmx_smi#_clk - * - * SMI_CLK = Clock Control Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_smix_clk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_25_63 : 39; - uint64_t mode : 1; /**< IEEE operating mode - 0=Clause 22 complient - 1=Clause 45 complient */ - uint64_t reserved_21_23 : 3; - uint64_t sample_hi : 5; /**< When to sample read data (extended bits) */ - uint64_t sample_mode : 1; /**< Read Data sampling mode - According to the 802.3 spec, on reads, the STA - transitions MDC and the PHY drives MDIO with - some delay relative to that edge. This is edge1. - The STA then samples MDIO on the next rising edge - of MDC. This is edge2. Octeon can sample the - read data relative to either edge. - 0=[SAMPLE_HI,SAMPLE] specify the sample time - relative to edge2 - 1=[SAMPLE_HI,SAMPLE] specify the sample time - relative to edge1 */ - uint64_t reserved_14_14 : 1; - uint64_t clk_idle : 1; /**< Do not toggle MDC on idle cycles */ - uint64_t preamble : 1; /**< Send PREAMBLE on SMI transacton */ - uint64_t sample : 4; /**< When to sample read data - (number of eclks after the rising edge of mdc) - ( [SAMPLE_HI,SAMPLE] > 1 ) - ( [SAMPLE_HI, SAMPLE] + 3 <= 2*PHASE ) */ - uint64_t phase : 8; /**< MDC Clock Phase - (number of eclks that make up an mdc phase) - (PHASE > 2) */ -#else - uint64_t phase : 8; - uint64_t sample : 4; - uint64_t preamble : 1; - uint64_t clk_idle : 1; - uint64_t reserved_14_14 : 1; - uint64_t sample_mode : 1; - uint64_t sample_hi : 5; - uint64_t reserved_21_23 : 3; - uint64_t mode : 1; - uint64_t reserved_25_63 : 39; -#endif - } s; - struct cvmx_smix_clk_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_21_63 : 43; - uint64_t sample_hi : 5; /**< When to sample read data (extended bits) */ - uint64_t sample_mode : 1; /**< Read Data sampling mode - According to the 802.3 spec, on reads, the STA - transitions MDC and the PHY drives MDIO with - some delay relative to that edge. This is edge1. - The STA then samples MDIO on the next rising edge - of MDC. This is edge2. Octeon can sample the - read data relative to either edge. - 0=[SAMPLE_HI,SAMPLE] specify the sample time - relative to edge2 - 1=[SAMPLE_HI,SAMPLE] specify the sample time - relative to edge1 */ - uint64_t reserved_14_14 : 1; - uint64_t clk_idle : 1; /**< Do not toggle MDC on idle cycles */ - uint64_t preamble : 1; /**< Send PREAMBLE on SMI transacton */ - uint64_t sample : 4; /**< When to sample read data - (number of eclks after the rising edge of mdc) - ( [SAMPLE_HI,SAMPLE] > 1 ) - ( [SAMPLE_HI, SAMPLE] + 3 <= 2*PHASE ) */ - uint64_t phase : 8; /**< MDC Clock Phase - (number of eclks that make up an mdc phase) - (PHASE > 2) */ -#else - uint64_t phase : 8; - uint64_t sample : 4; - uint64_t preamble : 1; - uint64_t clk_idle : 1; - uint64_t reserved_14_14 : 1; - uint64_t sample_mode : 1; - uint64_t sample_hi : 5; - uint64_t reserved_21_63 : 43; -#endif - } cn30xx; - struct cvmx_smix_clk_cn30xx cn31xx; - struct cvmx_smix_clk_cn30xx cn38xx; - struct cvmx_smix_clk_cn30xx cn38xxp2; - struct cvmx_smix_clk_s cn50xx; - struct cvmx_smix_clk_s cn52xx; - struct cvmx_smix_clk_s cn52xxp1; - struct cvmx_smix_clk_s cn56xx; - struct cvmx_smix_clk_s cn56xxp1; - struct cvmx_smix_clk_cn30xx cn58xx; - struct cvmx_smix_clk_cn30xx cn58xxp1; -} cvmx_smix_clk_t; - - -/** - * cvmx_smi#_cmd - * - * SMI_CMD = Force a Read/Write command to the PHY - * - * - * Notes: - * Writes to this register will create SMI xactions. Software will poll on (depending on the xaction type). - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_smix_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t phy_op : 2; /**< PHY Opcode - 0=write - 1=read */ - uint64_t reserved_13_15 : 3; - uint64_t phy_adr : 5; /**< PHY Address */ - uint64_t reserved_5_7 : 3; - uint64_t reg_adr : 5; /**< PHY Register Offset */ -#else - uint64_t reg_adr : 5; - uint64_t reserved_5_7 : 3; - uint64_t phy_adr : 5; - uint64_t reserved_13_15 : 3; - uint64_t phy_op : 2; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_smix_cmd_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t phy_op : 1; /**< PHY Opcode - 0=write - 1=read */ - uint64_t reserved_13_15 : 3; - uint64_t phy_adr : 5; /**< PHY Address */ - uint64_t reserved_5_7 : 3; - uint64_t reg_adr : 5; /**< PHY Register Offset */ -#else - uint64_t reg_adr : 5; - uint64_t reserved_5_7 : 3; - uint64_t phy_adr : 5; - uint64_t reserved_13_15 : 3; - uint64_t phy_op : 1; - uint64_t reserved_17_63 : 47; -#endif - } cn30xx; - struct cvmx_smix_cmd_cn30xx cn31xx; - struct cvmx_smix_cmd_cn30xx cn38xx; - struct cvmx_smix_cmd_cn30xx cn38xxp2; - struct cvmx_smix_cmd_s cn50xx; - struct cvmx_smix_cmd_s cn52xx; - struct cvmx_smix_cmd_s cn52xxp1; - struct cvmx_smix_cmd_s cn56xx; - struct cvmx_smix_cmd_s cn56xxp1; - struct cvmx_smix_cmd_cn30xx cn58xx; - struct cvmx_smix_cmd_cn30xx cn58xxp1; -} cvmx_smix_cmd_t; - - -/** - * cvmx_smi#_en - * - * SMI_EN = Enable the SMI interface - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_smix_en_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t en : 1; /**< Interface enable - 0=SMI Interface is down / no transactions, no MDC - 1=SMI Interface is up */ -#else - uint64_t en : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_smix_en_s cn30xx; - struct cvmx_smix_en_s cn31xx; - struct cvmx_smix_en_s cn38xx; - struct cvmx_smix_en_s cn38xxp2; - struct cvmx_smix_en_s cn50xx; - struct cvmx_smix_en_s cn52xx; - struct cvmx_smix_en_s cn52xxp1; - struct cvmx_smix_en_s cn56xx; - struct cvmx_smix_en_s cn56xxp1; - struct cvmx_smix_en_s cn58xx; - struct cvmx_smix_en_s cn58xxp1; -} cvmx_smix_en_t; - - -/** - * cvmx_smi#_rd_dat - * - * SMI_RD_DAT = SMI Read Data - * - * - * Notes: - * VAL will assert when the read xaction completes. A read to this register - * will clear VAL. PENDING indicates that an SMI RD transaction is in flight. - */ -typedef union -{ - uint64_t u64; - struct cvmx_smix_rd_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t pending : 1; /**< Read Xaction Pending */ - uint64_t val : 1; /**< Read Data Valid */ - uint64_t dat : 16; /**< Read Data */ -#else - uint64_t dat : 16; - uint64_t val : 1; - uint64_t pending : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_smix_rd_dat_s cn30xx; - struct cvmx_smix_rd_dat_s cn31xx; - struct cvmx_smix_rd_dat_s cn38xx; - struct cvmx_smix_rd_dat_s cn38xxp2; - struct cvmx_smix_rd_dat_s cn50xx; - struct cvmx_smix_rd_dat_s cn52xx; - struct cvmx_smix_rd_dat_s cn52xxp1; - struct cvmx_smix_rd_dat_s cn56xx; - struct cvmx_smix_rd_dat_s cn56xxp1; - struct cvmx_smix_rd_dat_s cn58xx; - struct cvmx_smix_rd_dat_s cn58xxp1; -} cvmx_smix_rd_dat_t; - - -/** - * cvmx_smi#_wr_dat - * - * SMI_WR_DAT = SMI Write Data - * - * - * Notes: - * VAL will assert when the write xaction completes. A read to this register - * will clear VAL. PENDING indicates that an SMI WR transaction is in flight. - */ -typedef union -{ - uint64_t u64; - struct cvmx_smix_wr_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t pending : 1; /**< Write Xaction Pending */ - uint64_t val : 1; /**< Write Data Valid */ - uint64_t dat : 16; /**< Write Data */ -#else - uint64_t dat : 16; - uint64_t val : 1; - uint64_t pending : 1; - uint64_t reserved_18_63 : 46; -#endif - } s; - struct cvmx_smix_wr_dat_s cn30xx; - struct cvmx_smix_wr_dat_s cn31xx; - struct cvmx_smix_wr_dat_s cn38xx; - struct cvmx_smix_wr_dat_s cn38xxp2; - struct cvmx_smix_wr_dat_s cn50xx; - struct cvmx_smix_wr_dat_s cn52xx; - struct cvmx_smix_wr_dat_s cn52xxp1; - struct cvmx_smix_wr_dat_s cn56xx; - struct cvmx_smix_wr_dat_s cn56xxp1; - struct cvmx_smix_wr_dat_s cn58xx; - struct cvmx_smix_wr_dat_s cn58xxp1; -} cvmx_smix_wr_dat_t; - - -/** - * cvmx_spx#_bckprs_cnt - * - * Notes: - * The back pressure watcher counts the number of cycles in which the spi - * receiver receives data once the TPA for a particular port has been - * deasserted. The desired port to watch can be selected with the - * SPX_TPA_SEL[PRTSEL] field. - * - * This register can be cleared by simply writting all 1's to it. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_bckprs_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Number of cycles when back-pressure is received */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_spxx_bckprs_cnt_s cn38xx; - struct cvmx_spxx_bckprs_cnt_s cn38xxp2; - struct cvmx_spxx_bckprs_cnt_s cn58xx; - struct cvmx_spxx_bckprs_cnt_s cn58xxp1; -} cvmx_spxx_bckprs_cnt_t; - - -/** - * cvmx_spx#_bist_stat - * - * Notes: - * Bist results encoding - * - 0: good (or bist in progress/never run) - * - 1: bad - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_bist_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t stat2 : 1; /**< Bist Results/No Repair (Tx calendar table) - (spx.stx.cal.calendar) */ - uint64_t stat1 : 1; /**< Bist Results/No Repair (Rx calendar table) - (spx.srx.spi4.cal.calendar) */ - uint64_t stat0 : 1; /**< Bist Results/No Repair (Spi4 receive datapath FIFO) - (spx.srx.spi4.dat.dpr) */ -#else - uint64_t stat0 : 1; - uint64_t stat1 : 1; - uint64_t stat2 : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_spxx_bist_stat_s cn38xx; - struct cvmx_spxx_bist_stat_s cn38xxp2; - struct cvmx_spxx_bist_stat_s cn58xx; - struct cvmx_spxx_bist_stat_s cn58xxp1; -} cvmx_spxx_bist_stat_t; - - -/** - * cvmx_spx#_clk_ctl - * - * Notes: - * * SRXDLCK - * When asserted, this bit locks the Spi4 receive DLLs. This bit also - * acts as the Spi4 receiver reset and must be asserted before the - * training sequences are used to initialize the interface. This bit - * only applies to the receiver interface. - * - * * RCVTRN - * Once the SRXDLCK bit is asserted and the DLLs have locked and the - * system has been programmed, software should assert this bit in order - * to start looking for valid training sequence and synchronize the - * interface. This bit only applies to the receiver interface. - * - * * DRPTRN - * The Spi4 receiver can either convert training packets into NOPs or - * drop them entirely. Dropping ticks allows the interface to deskew - * periodically if the dclk and eclk ratios are close. This bit only - * applies to the receiver interface. - * - * * SNDTRN - * When software sets this bit, it indicates that the Spi4 transmit - * interface has been setup and has seen the calendare status. Once the - * transmitter begins sending training data, the receiving device is free - * to start traversing the calendar table to synch the link. - * - * * STATRCV - * This bit determines which status clock edge to sample the status - * channel in Spi4 mode. Since the status channel is in the opposite - * direction to the datapath, the STATRCV actually effects the - * transmitter/TX block. - * - * * STATDRV - * This bit determines which status clock edge to drive the status - * channel in Spi4 mode. Since the status channel is in the opposite - * direction to the datapath, the STATDRV actually effects the - * receiver/RX block. - * - * * RUNBIST - * RUNBIST will beginning BIST/BISR in all the SPX compilied memories. - * These memories are... - * - * * spx.srx.spi4.dat.dpr // FIFO Spi4 to IMX - * * spx.stx.cal.calendar // Spi4 TX calendar table - * * spx.srx.spi4.cal.calendar // Spi4 RX calendar table - * - * RUNBIST must never be asserted when the interface is enabled. - * Furthmore, setting RUNBIST at any other time is destructive and can - * cause data and configuration corruption. The entire interface must be - * reconfigured when this bit is set. - * - * * CLKDLY - * Static clock positioning mostly intended for use in quarter clocking - * schemes. The delay window is not large enough for slow clock freq, - * therefore clock and data must be statically positioned with CSRs. By - * changing the clock position relative to the data bits, we give the - * system a wider window. - * - * * SEETRN - * In systems in which no training data is sent to N2 or N2 cannot - * correctly sample the training data, software may pulse this bit by - * writing a '1' followed by a '0' in order to correctly set the - * receivers state. The receive data bus should be idle at this time - * (only NOPs on the bus). If N2 cannot see at least on training - * sequence, the data bus will not send any data to the core. The - * interface will hang. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_clk_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t seetrn : 1; /**< Force the Spi4 receive into seeing a traing - sequence */ - uint64_t reserved_12_15 : 4; - uint64_t clkdly : 5; /**< Set the spx__clkdly lines to this value to - control the delay on the incoming dclk - (spx__clkdly) */ - uint64_t runbist : 1; /**< Write this bit to begin BIST testing in SPX */ - uint64_t statdrv : 1; /**< Spi4 status channel drive mode - - 1: Drive STAT on posedge of SCLK - - 0: Drive STAT on negedge of SCLK */ - uint64_t statrcv : 1; /**< Spi4 status channel sample mode - - 1: Sample STAT on posedge of SCLK - - 0: Sample STAT on negedge of SCLK */ - uint64_t sndtrn : 1; /**< Start sending training patterns on the Spi4 - Tx Interface */ - uint64_t drptrn : 1; /**< Drop blocks of training packets */ - uint64_t rcvtrn : 1; /**< Write this bit once the DLL is locked to sync - on the training seqeunce */ - uint64_t srxdlck : 1; /**< Write this bit to lock the Spi4 receive DLL */ -#else - uint64_t srxdlck : 1; - uint64_t rcvtrn : 1; - uint64_t drptrn : 1; - uint64_t sndtrn : 1; - uint64_t statrcv : 1; - uint64_t statdrv : 1; - uint64_t runbist : 1; - uint64_t clkdly : 5; - uint64_t reserved_12_15 : 4; - uint64_t seetrn : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_spxx_clk_ctl_s cn38xx; - struct cvmx_spxx_clk_ctl_s cn38xxp2; - struct cvmx_spxx_clk_ctl_s cn58xx; - struct cvmx_spxx_clk_ctl_s cn58xxp1; -} cvmx_spxx_clk_ctl_t; - - -/** - * cvmx_spx#_clk_stat - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_clk_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_11_63 : 53; - uint64_t stxcal : 1; /**< The transistion from Sync to Calendar on status - channel */ - uint64_t reserved_9_9 : 1; - uint64_t srxtrn : 1; /**< Saw a good data training sequence */ - uint64_t s4clk1 : 1; /**< Saw '1' on Spi4 transmit status forward clk input */ - uint64_t s4clk0 : 1; /**< Saw '0' on Spi4 transmit status forward clk input */ - uint64_t d4clk1 : 1; /**< Saw '1' on Spi4 receive data forward clk input */ - uint64_t d4clk0 : 1; /**< Saw '0' on Spi4 receive data forward clk input */ - uint64_t reserved_0_3 : 4; -#else - uint64_t reserved_0_3 : 4; - uint64_t d4clk0 : 1; - uint64_t d4clk1 : 1; - uint64_t s4clk0 : 1; - uint64_t s4clk1 : 1; - uint64_t srxtrn : 1; - uint64_t reserved_9_9 : 1; - uint64_t stxcal : 1; - uint64_t reserved_11_63 : 53; -#endif - } s; - struct cvmx_spxx_clk_stat_s cn38xx; - struct cvmx_spxx_clk_stat_s cn38xxp2; - struct cvmx_spxx_clk_stat_s cn58xx; - struct cvmx_spxx_clk_stat_s cn58xxp1; -} cvmx_spxx_clk_stat_t; - - -/** - * cvmx_spx#_dbg_deskew_ctl - * - * Notes: - * These bits are meant as a backdoor to control Spi4 per-bit deskew. See - * that Spec for more details. - * - * The basic idea is to allow software to disable the auto-deskew widgets - * and make any adjustments by hand. These steps should only be taken - * once the RCVTRN bit is set and before any real traffic is sent on the - * Spi4 bus. Great care should be taken when messing with these bits as - * improper programmings can cause catestrophic or intermitent problems. - * - * The params we have to test are the MUX tap selects and the XCV delay - * tap selects. - * - * For the muxes, we can set each tap to a random value and then read - * back the taps. To write... - * - * SPXX_DBG_DESKEW_CTL[BITSEL] = bit to set - * SPXX_DBG_DESKEW_CTL[OFFSET] = mux tap value (2-bits) - * SPXX_DBG_DESKEW_CTL[MUX] = go bit - * - * Notice this can all happen with a single CSR write. To read, first - * set the bit you to look at with the SPXX_DBG_DESKEW_CTL[BITSEL], then - * simply read SPXX_DBG_DESKEW_STATE[MUXSEL]... - * - * SPXX_DBG_DESKEW_CTL[BITSEL] = bit to set - * SPXX_DBG_DESKEW_STATE[MUXSEL] = 2-bit value - * - * For the xcv delay taps, the CSR controls increment and decrement the - * 5-bit count value in the XCV. This is a saturating counter, so it - * will not wrap when decrementing below zero or incrementing above 31. - * - * To write... - * - * SPXX_DBG_DESKEW_CTL[BITSEL] = bit to set - * SPXX_DBG_DESKEW_CTL[OFFSET] = tap value increment or decrement amount (5-bits) - * SPXX_DBG_DESKEW_CTL[INC|DEC] = go bit - * - * These values are copied in SPX, so that they can be read back by - * software by a similar mechanism to the MUX selects... - * - * SPXX_DBG_DESKEW_CTL[BITSEL] = bit to set - * SPXX_DBG_DESKEW_STATE[OFFSET] = 5-bit value - * - * In addition, there is a reset bit that sets all the state back to the - * default/starting value of 0x10. - * - * SPXX_DBG_DESKEW_CTL[CLRDLY] = 1 - * - * SINGLE STEP TRAINING MODE (WILMA) - * Debug feature that will enable the user to single-step the debug - * logic to watch initial movement and trends by putting the training - * machine in single step mode. - * - * * SPX*_DBG_DESKEW_CTL[SSTEP] - * This will put the training control logic into single step mode. We - * will not deskew in this scenario and will require the TX device to - * send continuous training sequences. - * - * It is required that SRX*_COM_CTL[INF_EN] be clear so that suspect - * data does not flow into the chip. - * - * Deasserting SPX*_DBG_DESKEW_CTL[SSTEP] will attempt to deskew as per - * the normal definition. Single step mode is for debug only. Special - * care must be given to correctly deskew the interface if normal - * operation is desired. - * - * * SPX*_DBG_DESKEW_CTL[SSTEP_GO] - * Each write of '1' to SSTEP_GO will go through a single training - * iteration and will perform... - * - * - DLL update, if SPX*_DBG_DESKEW_CTL[DLLDIS] is clear - * - coarse update, if SPX*_TRN4_CTL[MUX_EN] is set - * - single fine update, if SPX*_TRN4_CTL[MACRO_EN] is set and an edge - * was detected after walked +/- SPX*_TRN4_CTL[MAXDIST] taps. - * - * Writes to this register have no effect if the interface is not in - * SSTEP mode (SPX*_DBG_DESKEW_CTL[SSTEP]). - * - * The WILMA mode will be cleared at the final state transition, so - * that software can set SPX*_DBG_DESKEW_CTL[SSTEP] and - * SPX*_DBG_DESKEW_CTL[SSTEP_GO] before setting SPX*_CLK_CTL[RCVTRN] - * and the machine will go through the initial iteration and stop - - * waiting for another SPX*_DBG_DESKEW_CTL[SSTEP_GO] or an interface - * enable. - * - * * SPX*_DBG_DESKEW_CTL[FALL8] - * Determines how many pattern matches are required during training - * operations to fallout of training and begin processing the normal data - * stream. The default value is 10 pattern matches. The pattern that is - * used is dependent on the SPX*_DBG_DESKEW_CTL[FALLNOP] CSR which - * determines between non-training packets (the default) and NOPs. - * - * * SPX*_DBG_DESKEW_CTL[FALLNOP] - * Determines the pattern that is required during training operations to - * fallout of training and begin processing the normal data stream. The - * default value is to match against non-training data. Setting this - * bit, changes the behavior to watch for NOPs packet instead. - * - * This bit should not be changed dynamically while the link is - * operational. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_dbg_deskew_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_30_63 : 34; - uint64_t fallnop : 1; /**< Training fallout on NOP matches instead of - non-training matches. - (spx_csr__spi4_fallout_nop) */ - uint64_t fall8 : 1; /**< Training fallout at 8 pattern matches instead of 10 - (spx_csr__spi4_fallout_8_match) */ - uint64_t reserved_26_27 : 2; - uint64_t sstep_go : 1; /**< Single Step Training Sequence - (spx_csr__spi4_single_step_go) */ - uint64_t sstep : 1; /**< Single Step Training Mode - (spx_csr__spi4_single_step_mode) */ - uint64_t reserved_22_23 : 2; - uint64_t clrdly : 1; /**< Resets the offset control in the XCV - (spx_csr__spi4_dll_clr_dly) */ - uint64_t dec : 1; /**< Decrement the offset by OFFSET for the Spi4 - bit selected by BITSEL - (spx_csr__spi4_dbg_trn_dec) */ - uint64_t inc : 1; /**< Increment the offset by OFFSET for the Spi4 - bit selected by BITSEL - (spx_csr__spi4_dbg_trn_inc) */ - uint64_t mux : 1; /**< Set the mux select tap for the Spi4 bit - selected by BITSEL - (spx_csr__spi4_dbg_trn_mux) */ - uint64_t offset : 5; /**< Adds or subtracts (Based on INC or DEC) the - offset to Spi4 bit BITSEL. - (spx_csr__spi4_dbg_trn_offset) */ - uint64_t bitsel : 5; /**< Select the Spi4 CTL or DAT bit - 15-0 : Spi4 DAT[15:0] - 16 : Spi4 CTL - - 31-17: Invalid - (spx_csr__spi4_dbg_trn_bitsel) */ - uint64_t offdly : 6; /**< Set the spx__offset lines to this value when - not in macro sequence - (spx_csr__spi4_mac_offdly) */ - uint64_t dllfrc : 1; /**< Force the Spi4 RX DLL to update - (spx_csr__spi4_dll_force) */ - uint64_t dlldis : 1; /**< Disable sending the update signal to the Spi4 - RX DLL when set - (spx_csr__spi4_dll_trn_en) */ -#else - uint64_t dlldis : 1; - uint64_t dllfrc : 1; - uint64_t offdly : 6; - uint64_t bitsel : 5; - uint64_t offset : 5; - uint64_t mux : 1; - uint64_t inc : 1; - uint64_t dec : 1; - uint64_t clrdly : 1; - uint64_t reserved_22_23 : 2; - uint64_t sstep : 1; - uint64_t sstep_go : 1; - uint64_t reserved_26_27 : 2; - uint64_t fall8 : 1; - uint64_t fallnop : 1; - uint64_t reserved_30_63 : 34; -#endif - } s; - struct cvmx_spxx_dbg_deskew_ctl_s cn38xx; - struct cvmx_spxx_dbg_deskew_ctl_s cn38xxp2; - struct cvmx_spxx_dbg_deskew_ctl_s cn58xx; - struct cvmx_spxx_dbg_deskew_ctl_s cn58xxp1; -} cvmx_spxx_dbg_deskew_ctl_t; - - -/** - * cvmx_spx#_dbg_deskew_state - * - * Notes: - * These bits are meant as a backdoor to control Spi4 per-bit deskew. See - * that Spec for more details. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_dbg_deskew_state_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t testres : 1; /**< Training Test Mode Result - (srx_spi4__test_mode_result) */ - uint64_t unxterm : 1; /**< Unexpected training terminiation - (srx_spi4__top_unxexp_trn_term) */ - uint64_t muxsel : 2; /**< The mux select value of the bit selected by - SPX_DBG_DESKEW_CTL[BITSEL] - (srx_spi4__trn_mux_sel) */ - uint64_t offset : 5; /**< The counter value of the bit selected by - SPX_DBG_DESKEW_CTL[BITSEL] - (srx_spi4__xcv_tap_select) */ -#else - uint64_t offset : 5; - uint64_t muxsel : 2; - uint64_t unxterm : 1; - uint64_t testres : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_spxx_dbg_deskew_state_s cn38xx; - struct cvmx_spxx_dbg_deskew_state_s cn38xxp2; - struct cvmx_spxx_dbg_deskew_state_s cn58xx; - struct cvmx_spxx_dbg_deskew_state_s cn58xxp1; -} cvmx_spxx_dbg_deskew_state_t; - - -/** - * cvmx_spx#_drv_ctl - * - * Notes: - * These bits all come from Duke - he will provide documentation and - * explanation. I'll just butcher it. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_drv_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_0_63 : 64; -#else - uint64_t reserved_0_63 : 64; -#endif - } s; - struct cvmx_spxx_drv_ctl_cn38xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t stx4ncmp : 4; /**< Duke (spx__spi4_tx_nctl_comp) */ - uint64_t stx4pcmp : 4; /**< Duke (spx__spi4_tx_pctl_comp) */ - uint64_t srx4cmp : 8; /**< Duke (spx__spi4_rx_rctl_comp) */ -#else - uint64_t srx4cmp : 8; - uint64_t stx4pcmp : 4; - uint64_t stx4ncmp : 4; - uint64_t reserved_16_63 : 48; -#endif - } cn38xx; - struct cvmx_spxx_drv_ctl_cn38xx cn38xxp2; - struct cvmx_spxx_drv_ctl_cn58xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t stx4ncmp : 4; /**< Duke (spx__spi4_tx_nctl_comp) */ - uint64_t stx4pcmp : 4; /**< Duke (spx__spi4_tx_pctl_comp) */ - uint64_t reserved_10_15 : 6; - uint64_t srx4cmp : 10; /**< Duke (spx__spi4_rx_rctl_comp) */ -#else - uint64_t srx4cmp : 10; - uint64_t reserved_10_15 : 6; - uint64_t stx4pcmp : 4; - uint64_t stx4ncmp : 4; - uint64_t reserved_24_63 : 40; -#endif - } cn58xx; - struct cvmx_spxx_drv_ctl_cn58xx cn58xxp1; -} cvmx_spxx_drv_ctl_t; - - -/** - * cvmx_spx#_err_ctl - * - * SPX_ERR_CTL - Spi error control register - * - * - * Notes: - * * DIPPAY, DIPCLS, PRTNXA - * These bits control whether or not the packet's ERR bit is set when any of - * the these error is detected. If the corresponding error's bit is clear, - * the packet ERR will be set. If the error bit is set, the SPX will simply - * pass through the ERR bit without modifying it in anyway - the error bit - * may or may not have been set by the transmitter device. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_err_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t prtnxa : 1; /**< Spi4 - set the ERR bit on packets in which the - port is out-of-range */ - uint64_t dipcls : 1; /**< Spi4 DIPERR on closing control words cause the - ERR bit to be set */ - uint64_t dippay : 1; /**< Spi4 DIPERR on payload control words cause the - ERR bit to be set */ - uint64_t reserved_4_5 : 2; - uint64_t errcnt : 4; /**< Number of Dip4 errors before bringing down the - interface */ -#else - uint64_t errcnt : 4; - uint64_t reserved_4_5 : 2; - uint64_t dippay : 1; - uint64_t dipcls : 1; - uint64_t prtnxa : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_spxx_err_ctl_s cn38xx; - struct cvmx_spxx_err_ctl_s cn38xxp2; - struct cvmx_spxx_err_ctl_s cn58xx; - struct cvmx_spxx_err_ctl_s cn58xxp1; -} cvmx_spxx_err_ctl_t; - - -/** - * cvmx_spx#_int_dat - * - * SPX_INT_DAT - Interrupt Data Register - * - * - * Notes: - * Note: The SPX_INT_DAT[MUL] bit is set when multiple errors have been - * detected that would set any of the data fields: PRT, RSVOP, and CALBNK. - * - * The following errors will cause MUL to assert for PRT conflicts. - * - ABNORM - * - APERR - * - DPERR - * - * The following errors will cause MUL to assert for RSVOP conflicts. - * - RSVERR - * - * The following errors will cause MUL to assert for CALBNK conflicts. - * - CALERR - * - * The following errors will cause MUL to assert if multiple interrupts are - * asserted. - * - TPAOVR - * - * The MUL bit will be cleared once all outstanding errors have been - * cleared by software (not just MUL errors - all errors). - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_int_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t mul : 1; /**< Multiple errors have occured */ - uint64_t reserved_14_30 : 17; - uint64_t calbnk : 2; /**< Spi4 Calendar table parity error bank */ - uint64_t rsvop : 4; /**< Spi4 reserved control word */ - uint64_t prt : 8; /**< Port associated with error */ -#else - uint64_t prt : 8; - uint64_t rsvop : 4; - uint64_t calbnk : 2; - uint64_t reserved_14_30 : 17; - uint64_t mul : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_spxx_int_dat_s cn38xx; - struct cvmx_spxx_int_dat_s cn38xxp2; - struct cvmx_spxx_int_dat_s cn58xx; - struct cvmx_spxx_int_dat_s cn58xxp1; -} cvmx_spxx_int_dat_t; - - -/** - * cvmx_spx#_int_msk - * - * SPX_INT_MSK - Interrupt Mask Register - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_int_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t calerr : 1; /**< Spi4 Calendar table parity error */ - uint64_t syncerr : 1; /**< Consecutive Spi4 DIP4 errors have exceeded - SPX_ERR_CTL[ERRCNT] */ - uint64_t diperr : 1; /**< Spi4 DIP4 error */ - uint64_t tpaovr : 1; /**< Selected port has hit TPA overflow */ - uint64_t rsverr : 1; /**< Spi4 reserved control word detected */ - uint64_t drwnng : 1; /**< Spi4 receive FIFO drowning/overflow */ - uint64_t clserr : 1; /**< Spi4 packet closed on non-16B alignment without EOP */ - uint64_t spiovr : 1; /**< Spi async FIFO overflow (Spi3 or Spi4) */ - uint64_t reserved_2_3 : 2; - uint64_t abnorm : 1; /**< Abnormal packet termination (ERR bit) */ - uint64_t prtnxa : 1; /**< Port out of range */ -#else - uint64_t prtnxa : 1; - uint64_t abnorm : 1; - uint64_t reserved_2_3 : 2; - uint64_t spiovr : 1; - uint64_t clserr : 1; - uint64_t drwnng : 1; - uint64_t rsverr : 1; - uint64_t tpaovr : 1; - uint64_t diperr : 1; - uint64_t syncerr : 1; - uint64_t calerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_spxx_int_msk_s cn38xx; - struct cvmx_spxx_int_msk_s cn38xxp2; - struct cvmx_spxx_int_msk_s cn58xx; - struct cvmx_spxx_int_msk_s cn58xxp1; -} cvmx_spxx_int_msk_t; - - -/** - * cvmx_spx#_int_reg - * - * SPX_INT_REG - Interrupt Register - * - * - * Notes: - * * PRTNXA - * This error indicates that the port on the Spi bus was not a valid port - * for the system. Spi4 accesses occur on payload control bit-times. The - * SRX can be configured with the exact number of ports available (by - * SRX_COM_CTL[PRTS] register). Any Spi access to anthing outside the range - * of 0 .. (SRX_COM_CTL[PRTS] - 1) is considered an error. The offending - * port is logged in SPX_INT_DAT[PRT] if there are no pending interrupts in - * SPX_INT_REG that require SPX_INT_DAT[PRT]. - * - * SRX will not drop the packet with the bogus port address. Instead, the - * port will be mapped into the supported port range. The remapped address - * in simply... - * - * Address = [ interfaceId, ADR[3:0] ] - * - * If the SPX detects that a PRTNXA error has occured, the packet will - * have its ERR bit set (or'ed in with the ERR bit from the transmitter) - * if the SPX_ERR_CTL[PRTNXA] bit is clear. - * - * In Spi4 mode, SPX will generate an interrupt for every 8B data burst - * associated with the invalid address. The SPX_INT_DAT[MUL] bit will never - * be set. - * - * * ABNORM - * This bit simply indicates that a given packet had abnormal terminiation. - * In Spi4 mode, this means that packet completed with an EOPS[1:0] code of - * 2'b01. This error can also be thought of as the application specific - * error (as mentioned in the Spi4 spec). The offending port is logged in - * SPX_INT_DAT[PRT] if there are no pending interrupts in SPX_INT_REG that - * require SPX_INT_DAT[PRT]. - * - * The ABNORM error is only raised when the ERR bit that comes from the - * Spi interface is set. It will never assert if any internal condition - * causes the ERR bit to assert (e.g. PRTNXA or DPERR). - * - * * SPIOVR - * This error indicates that the FIFOs that manage the async crossing from - * the Spi clocks to the core clock domains have overflowed. This is a - * fatal error and can cause much data/control corruption since ticks will - * be dropped and reordered. This is purely a function of clock ratios and - * correct system ratios should make this an impossible condition. - * - * * CLSERR - * This is a Spi4 error that indicates that a given data transfer burst - * that did not terminate with an EOP, did not end with the 16B alignment - * as per the Spi4 spec. The offending port cannot be logged since the - * block does not know the streamm terminated until the port switches. - * At that time, that packet has already been pushed down the pipe. - * - * The CLSERR bit does not actually check the Spi4 burst - just how data - * is accumulated for the downstream logic. Bursts that are separted by - * idles or training will still be merged into accumulated transfers and - * will not fire the CLSERR condition. The checker is really checking - * non-8B aligned, non-EOP data ticks that are sent downstream. These - * ticks are what will really mess up the core. - * - * This is an expensive fix, so we'll probably let it ride. We never - * claim to check Spi4 protocol anyway. - * - * * DRWNNG - * This error indicates that the Spi4 FIFO that services the GMX has - * overflowed. Like the SPIOVR error condition, correct system ratios - * should make this an impossible condition. - * - * * RSVERR - * This Spi4 error indicates that the Spi4 receiver has seen a reserve - * control packet. A reserve control packet is an invalid combiniation - * of bits on DAT[15:12]. Basically this is DAT[15] == 1'b0 and DAT[12] - * == 1'b1 (an SOP without a payload command). The RSVERR indicates an - * error has occured and SPX_INT_DAT[RSVOP] holds the first reserved - * opcode and will be set if there are no pending interrupts in - * SPX_INT_REG that require SPX_INT_DAT[RSVOP]. - * - * * TPAOVR - * This bit indicates that the TPA Watcher has flagged an event. See the - * TPA Watcher for a more detailed discussion. - * - * * DIPERR - * This bit indicates that the Spi4 receiver has encountered a DIP4 - * miscompare on the datapath. A DIPERR can occur in an IDLE or a - * control word that frames a data burst. If the DIPERR occurs on a - * framing word there are three cases. - * - * 1) DIPERR occurs at the end of a data burst. The previous packet is - * marked with the ERR bit to be processed later if - * SPX_ERR_CTL[DIPCLS] is clear. - * 2) DIPERR occurs on a payload word. The subsequent packet is marked - * with the ERR bit to be processed later if SPX_ERR_CTL[DIPPAY] is - * clear. - * 3) DIPERR occurs on a control word that closes on packet and is a - * payload for another packet. In this case, both packets will have - * their ERR bit marked depending on the respective values of - * SPX_ERR_CTL[DIPCLS] and SPX_ERR_CTL[DIPPAY] as discussed above. - * - * * SYNCERR - * This bit indicates that the Spi4 receiver has encountered - * SPX_ERR_CTL[ERRCNT] consecutive Spi4 DIP4 errors and the interface - * should be synched. - * - * * CALERR - * This bit indicates that the Spi4 calendar table encountered a parity - * error. This error bit is associated with the calendar table on the RX - * interface - the interface that receives the Spi databus. Parity errors - * can occur during normal operation when the calendar table is constantly - * being read for the port information, or during initialization time, when - * the user has access. Since the calendar table is split into two banks, - * SPX_INT_DAT[CALBNK] indicates which banks have taken a parity error. - * CALBNK[1] indicates the error occured in the upper bank, while CALBNK[0] - * indicates that the error occured in the lower bank. SPX_INT_DAT[CALBNK] - * will be set if there are no pending interrupts in SPX_INT_REG that - * require SPX_INT_DAT[CALBNK]. - * - * * SPF - * This bit indicates that a Spi fatal error has occurred. A fatal error - * is defined as any error condition for which the corresponding - * SPX_INT_SYNC bit is set. Therefore, conservative systems can halt the - * interface on any error condition although this is not strictly - * necessary. Some error are much more fatal in nature than others. - * - * PRTNXA, SPIOVR, CLSERR, DRWNNG, DIPERR, CALERR, and SYNCERR are examples - * of fatal error for different reasons - usually because multiple port - * streams could be effected. ABNORM, RSVERR, and TPAOVR are conditions - * that are contained to a single packet which allows the interface to drop - * a single packet and remain up and stable. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t spf : 1; /**< Spi interface down */ - uint64_t reserved_12_30 : 19; - uint64_t calerr : 1; /**< Spi4 Calendar table parity error */ - uint64_t syncerr : 1; /**< Consecutive Spi4 DIP4 errors have exceeded - SPX_ERR_CTL[ERRCNT] */ - uint64_t diperr : 1; /**< Spi4 DIP4 error */ - uint64_t tpaovr : 1; /**< Selected port has hit TPA overflow */ - uint64_t rsverr : 1; /**< Spi4 reserved control word detected */ - uint64_t drwnng : 1; /**< Spi4 receive FIFO drowning/overflow */ - uint64_t clserr : 1; /**< Spi4 packet closed on non-16B alignment without EOP */ - uint64_t spiovr : 1; /**< Spi async FIFO overflow */ - uint64_t reserved_2_3 : 2; - uint64_t abnorm : 1; /**< Abnormal packet termination (ERR bit) */ - uint64_t prtnxa : 1; /**< Port out of range */ -#else - uint64_t prtnxa : 1; - uint64_t abnorm : 1; - uint64_t reserved_2_3 : 2; - uint64_t spiovr : 1; - uint64_t clserr : 1; - uint64_t drwnng : 1; - uint64_t rsverr : 1; - uint64_t tpaovr : 1; - uint64_t diperr : 1; - uint64_t syncerr : 1; - uint64_t calerr : 1; - uint64_t reserved_12_30 : 19; - uint64_t spf : 1; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_spxx_int_reg_s cn38xx; - struct cvmx_spxx_int_reg_s cn38xxp2; - struct cvmx_spxx_int_reg_s cn58xx; - struct cvmx_spxx_int_reg_s cn58xxp1; -} cvmx_spxx_int_reg_t; - - -/** - * cvmx_spx#_int_sync - * - * SPX_INT_SYNC - Interrupt Sync Register - * - * - * Notes: - * This mask set indicates which exception condition should cause the - * SPX_INT_REG[SPF] bit to assert - * - * It is recommended that software set the PRTNXA, SPIOVR, CLSERR, DRWNNG, - * DIPERR, CALERR, and SYNCERR errors as synchronization events. Software is - * free to synchronize the bus on other conditions, but this is the minimum - * recommended set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_int_sync_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_12_63 : 52; - uint64_t calerr : 1; /**< Spi4 Calendar table parity error */ - uint64_t syncerr : 1; /**< Consecutive Spi4 DIP4 errors have exceeded - SPX_ERR_CTL[ERRCNT] */ - uint64_t diperr : 1; /**< Spi4 DIP4 error */ - uint64_t tpaovr : 1; /**< Selected port has hit TPA overflow */ - uint64_t rsverr : 1; /**< Spi4 reserved control word detected */ - uint64_t drwnng : 1; /**< Spi4 receive FIFO drowning/overflow */ - uint64_t clserr : 1; /**< Spi4 packet closed on non-16B alignment without EOP */ - uint64_t spiovr : 1; /**< Spi async FIFO overflow (Spi3 or Spi4) */ - uint64_t reserved_2_3 : 2; - uint64_t abnorm : 1; /**< Abnormal packet termination (ERR bit) */ - uint64_t prtnxa : 1; /**< Port out of range */ -#else - uint64_t prtnxa : 1; - uint64_t abnorm : 1; - uint64_t reserved_2_3 : 2; - uint64_t spiovr : 1; - uint64_t clserr : 1; - uint64_t drwnng : 1; - uint64_t rsverr : 1; - uint64_t tpaovr : 1; - uint64_t diperr : 1; - uint64_t syncerr : 1; - uint64_t calerr : 1; - uint64_t reserved_12_63 : 52; -#endif - } s; - struct cvmx_spxx_int_sync_s cn38xx; - struct cvmx_spxx_int_sync_s cn38xxp2; - struct cvmx_spxx_int_sync_s cn58xx; - struct cvmx_spxx_int_sync_s cn58xxp1; -} cvmx_spxx_int_sync_t; - - -/** - * cvmx_spx#_tpa_acc - * - * SPX_TPA_ACC - TPA watcher byte accumulator - * - * - * Notes: - * This field allows the user to access the TPA watcher accumulator counter. - * This register reflects the number of bytes sent to IMX once the port - * specified by SPX_TPA_SEL[PRTSEL] has lost its TPA. The SPX_INT_REG[TPAOVR] - * bit is asserted when CNT >= SPX_TPA_MAX[MAX]. The CNT will continue to - * increment until the TPA for the port is asserted. At that point the CNT - * value is frozen until software clears the interrupt bit. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_tpa_acc_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< TPA watcher accumulate count */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_spxx_tpa_acc_s cn38xx; - struct cvmx_spxx_tpa_acc_s cn38xxp2; - struct cvmx_spxx_tpa_acc_s cn58xx; - struct cvmx_spxx_tpa_acc_s cn58xxp1; -} cvmx_spxx_tpa_acc_t; - - -/** - * cvmx_spx#_tpa_max - * - * SPX_TPA_MAX - TPA watcher assertion threshold - * - * - * Notes: - * The TPA watcher has the ability to notify the system with an interrupt when - * too much data has been received on loss of TPA. The user sets the - * SPX_TPA_MAX[MAX] register and when the watcher has accumulated that many - * ticks, then the interrupt is conditionally raised (based on interrupt mask - * bits). This feature will be disabled if the programmed count is zero. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_tpa_max_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t max : 32; /**< TPA watcher TPA threshold */ -#else - uint64_t max : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_spxx_tpa_max_s cn38xx; - struct cvmx_spxx_tpa_max_s cn38xxp2; - struct cvmx_spxx_tpa_max_s cn58xx; - struct cvmx_spxx_tpa_max_s cn58xxp1; -} cvmx_spxx_tpa_max_t; - - -/** - * cvmx_spx#_tpa_sel - * - * SPX_TPA_SEL - TPA watcher port selector - * - * - * Notes: - * The TPA Watcher is primarily a debug vehicle used to help initial bringup - * of a system. The TPA watcher counts bytes that roll in from the Spi - * interface. The user programs the Spi port to watch using - * SPX_TPA_SEL[PRTSEL]. Once the TPA is deasserted for that port, the watcher - * begins to count the data ticks that have been delivered to the inbound - * datapath (and eventually to the IOB). The result is that we can derive - * turn-around times of the other device by watching how much data was sent - * after a loss of TPA through the SPX_TPA_ACC[CNT] register. An optional - * interrupt may be raised as well. See SPX_TPA_MAX for further information. - * - * TPA's can be deasserted for a number of reasons... - * - * 1) IPD indicates backpressure - * 2) The GMX inbound FIFO is filling up and should BP - * 3) User has out an override on the TPA wires - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_tpa_sel_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t prtsel : 4; /**< TPA watcher port select */ -#else - uint64_t prtsel : 4; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_spxx_tpa_sel_s cn38xx; - struct cvmx_spxx_tpa_sel_s cn38xxp2; - struct cvmx_spxx_tpa_sel_s cn58xx; - struct cvmx_spxx_tpa_sel_s cn58xxp1; -} cvmx_spxx_tpa_sel_t; - - -/** - * cvmx_spx#_trn4_ctl - * - * Notes: - * These bits are controls for the Spi4 RX bit deskew logic. See that Spec - * for further details. - * - * * BOOT_BIT - * On the initial training synchronization sequence, the hardware has the - * BOOT_BIT set which means that it will continueously perform macro - * operations. Once the BOOT_BIT is cleared, the macro machine will finish - * the macro operation is working on and then return to the idle state. - * Subsequent training sequences will only go through a single macro - * operation in order to do slight deskews. - * - * * JITTER - * Minimum value is 1. This parameter must be set for Spi4 mode using - * auto-bit deskew. Regardless of the original intent, this field must be - * set non-zero for deskew to function correctly. - * - * The thought is the JITTER range is no longer required since the macro - * machine was enhanced to understand about edge direction. Originally - * these bits were intended to compensate for clock jitter. - * - * dly: this is the intrinsic delay of each delay element - * tap currently, it is 70ps-110ps. - * jitter: amount of jitter we expect in the system (~200ps) - * j: number of taps to account for jitter - * - * j = ((jitter / dly) + 1) - * - * * TRNTEST - * This mode is used to test systems to make sure that the bit deskew - * parameters have been correctly setup. After configuration, software can - * set the TRNTEST mode bit. This should be done before SRX_COM_CTL[ST_EN] - * is set such that we can be sure that the TX device is simply sending - * continuous training patterns. - * - * The test mode samples every incoming bit-time and makes sure that it is - * either a training control or a training data packet. If any other data - * is observed, then SPX_DBG_DESKEW_STATE[TESTRES] will assert signaling a - * test failure. - * - * Software must clear TRNTEST before training is terminated. - * - * * Example Spi4 RX init flow... - * - * 1) set the CLKDLY lines (SPXX_CLK_CTL[CLKDLY]) - * - these bits must be set before the DLL can successfully lock - * - * 2) set the SRXDLCK (SPXX_CLK_CTL[SRXDLCK]) - * - this is the DLL lock bit which also acts as a block reset - * - * 3) wait for the DLLs lock - * - * 4) set any desired fields in SPXX_DBG_DESKEW_CTL - * - This register has only one field that most users will care about. - * When set, DLLDIS will disable sending update pulses to the Spi4 RX - * DLLs. This pulse allows the DLL to adjust to clock variations over - * time. In general, it is desired behavior. - * - * 5) set fields in SPXX_TRN4_CTL - * - These fields deal with the MUX training sequence - * * MUX_EN - * This is the enable bit for the mux select. The MUX select will - * run in the training sequence between the DLL and the Macro - * sequence when enabled. Once the MUX selects are selected, the - * entire macro sequence must be rerun. The expectation is that - * this is only run at boot time and this is bit cleared at/around - * step \#8. - * - These fields deal with the Macro training sequence - * * MACRO_EN - * This is the enable bit for the macro sequence. Macro sequences - * will run after the DLL and MUX training sequences. Each macro - * sequence can move the offset by one value. - * * MAXDIST - * This is how far we will search for an edge. Example... - * - * dly: this is the intrinsic delay of each delay element - * tap currently, it is 70ps-110ps. - * U: bit time period in time units. - * - * MAXDIST = MIN(16, ((bit_time / 2) / dly) - * - * Each MAXDIST iteration consists of an edge detect in the early - * and late (+/-) directions in an attempt to center the data. This - * requires two training transistions, the control/data and - * data/control transistions which comprise a training sequence. - * Therefore, the number of training sequences required for a single - * macro operation is simply MAXDIST. - * - * 6) set the RCVTRN go bit (SPXX_CLK_CTL[RCVTRN]) - * - this bit synchs on the first valid complete training cycle and - * starts to process the training packets - * - * 6b) This is where software could manually set the controls as opposed to - * letting the hardware do it. See the SPXX_DBG_DESKEW_CTL register - * description for more detail. - * - * 7) the TX device must continue to send training packets for the initial - * time period. - * - this can be determined by... - * - * DLL: one training sequence for the DLL adjustment (regardless of enable/disable) - * MUX: one training sequence for the Flop MUX taps (regardless of enable/disable) - * INIT_SEQUENCES: max number of taps that we must move - * - * INIT_SEQUENCES = MIN(16, ((bit_time / 2) / dly)) - * - * INIT_TRN = DLL + MUX + ROUNDUP((INIT_SEQUENCES * (MAXDIST + 2))) - * - * - * - software can either wait a fixed amount of time based on the clock - * frequencies or poll the SPXX_CLK_STAT[SRXTRN] register. Each - * assertion of SRXTRN means that at least one training sequence has - * been received. Software can poll, clear, and repeat on this bit to - * eventually count all required transistions. - * - * int cnt = 0; - * while (cnt < INIT_TRN) [ - * if (SPXX_CLK_STAT[SRXTRN]) [ - * cnt++; - * SPXX_CLK_STAT[SRXTRN] = 0; - * ] - * ] - * - * - subsequent training sequences will normally move the taps only - * one position, so the ALPHA equation becomes... - * - * MAC = (MAXDIST == 0) ? 1 : ROUNDUP((1 * (MAXDIST + 2))) + 1 - * - * ALPHA = DLL + MUX + MAC - * - * ergo, MAXDIST simplifies to... - * - * ALPHA = (MAXDIST == 0) ? 3 : MAXDIST + 5 - * - * DLL and MUX and MAC will always require at least a training sequence - * each - even if disabled. If the macro sequence is enabled, an - * additional training sequenece at the end is necessary. The extra - * sequence allows for all training state to be cleared before resuming - * normal operation. - * - * 8) after the recevier gets enough training sequences in order to achieve - * deskew lock, set SPXX_TRN4_CTL[CLR_BOOT] - * - this disables the continuous macro sequences and puts into into one - * macro sequnence per training operation - * - optionally, the machine can choose to fall out of training if - * enough NOPs follow the training operation (require at least 32 NOPs - * to follow the training sequence). - * - * There must be at least MAXDIST + 3 training sequences after the - * SPXX_TRN4_CTL[CLR_BOOT] is set or sufficient NOPs from the TX device. - * - * 9) the TX device continues to send training sequences until the RX - * device sends a calendar transistion. This is controlled by - * SRXX_COM_CTL[ST_EN]. Other restrictions require other Spi parameters - * (e.g. the calendar table) to be setup before this bit can be enabled. - * Once the entire interface is properly programmed, software writes - * SRXX_COM_CTL[INF_EN]. At this point, the Spi4 packets will begin to - * be sent into the N2K core and processed by the chip. - */ -typedef union -{ - uint64_t u64; - struct cvmx_spxx_trn4_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_13_63 : 51; - uint64_t trntest : 1; /**< Training Test Mode - This bit is only for initial bringup - (spx_csr__spi4_trn_test_mode) */ - uint64_t jitter : 3; /**< Accounts for jitter when the macro sequence is - locking. The value is how many consecutive - transititions before declaring en edge. Minimum - value is 1. This parameter must be set for Spi4 - mode using auto-bit deskew. - (spx_csr__spi4_mac_jitter) */ - uint64_t clr_boot : 1; /**< Clear the macro boot sequence mode bit - (spx_csr__spi4_mac_clr_boot) */ - uint64_t set_boot : 1; /**< Enable the macro boot sequence mode bit - (spx_csr__spi4_mac_set_boot) */ - uint64_t maxdist : 5; /**< This field defines how far from center the - deskew logic will search in a single macro - sequence (spx_csr__spi4_mac_iters) */ - uint64_t macro_en : 1; /**< Allow the macro sequence to center the sample - point in the data window through hardware - (spx_csr__spi4_mac_trn_en) */ - uint64_t mux_en : 1; /**< Enable the hardware machine that selects the - proper coarse FLOP selects - (spx_csr__spi4_mux_trn_en) */ -#else - uint64_t mux_en : 1; - uint64_t macro_en : 1; - uint64_t maxdist : 5; - uint64_t set_boot : 1; - uint64_t clr_boot : 1; - uint64_t jitter : 3; - uint64_t trntest : 1; - uint64_t reserved_13_63 : 51; -#endif - } s; - struct cvmx_spxx_trn4_ctl_s cn38xx; - struct cvmx_spxx_trn4_ctl_s cn38xxp2; - struct cvmx_spxx_trn4_ctl_s cn58xx; - struct cvmx_spxx_trn4_ctl_s cn58xxp1; -} cvmx_spxx_trn4_ctl_t; - - -/** - * cvmx_spx0_pll_bw_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_spx0_pll_bw_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t bw_ctl : 5; /**< Core PLL bandwidth control */ -#else - uint64_t bw_ctl : 5; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_spx0_pll_bw_ctl_s cn38xx; - struct cvmx_spx0_pll_bw_ctl_s cn38xxp2; -} cvmx_spx0_pll_bw_ctl_t; - - -/** - * cvmx_spx0_pll_setting - */ -typedef union -{ - uint64_t u64; - struct cvmx_spx0_pll_setting_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t setting : 17; /**< Core PLL setting */ -#else - uint64_t setting : 17; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_spx0_pll_setting_s cn38xx; - struct cvmx_spx0_pll_setting_s cn38xxp2; -} cvmx_spx0_pll_setting_t; - - -/** - * cvmx_srx#_com_ctl - * - * SRX_COM_CTL - Spi receive common control - * - * - * Notes: - * Restrictions: - * Both the calendar table and the LEN and M parameters must be completely - * setup before writing the Interface enable (INF_EN) and Status channel - * enabled (ST_EN) asserted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_com_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t prts : 4; /**< Number of ports in the receiver (write: ports - 1) - - 0: 1 port - - 1: 2 ports - - 2: 3 ports - - ... - - 15: 16 ports */ - uint64_t st_en : 1; /**< Status channel enabled - This is to allow configs without a status channel. - This bit should not be modified once the - interface is enabled. */ - uint64_t reserved_1_2 : 2; - uint64_t inf_en : 1; /**< Interface enable - The master switch that enables the entire - interface. SRX will not validiate any data until - this bit is set. This bit should not be modified - once the interface is enabled. */ -#else - uint64_t inf_en : 1; - uint64_t reserved_1_2 : 2; - uint64_t st_en : 1; - uint64_t prts : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_srxx_com_ctl_s cn38xx; - struct cvmx_srxx_com_ctl_s cn38xxp2; - struct cvmx_srxx_com_ctl_s cn58xx; - struct cvmx_srxx_com_ctl_s cn58xxp1; -} cvmx_srxx_com_ctl_t; - - -/** - * cvmx_srx#_ign_rx_full - * - * SRX_IGN_RX_FULL - Ignore RX FIFO backpressure - * - * - * Notes: - * * IGNORE - * If a device can not or should not assert backpressure, then setting DROP - * will force STARVING status on the status channel for all ports. This - * eliminates any back pressure from N2. - * - * This implies that it's ok drop packets when the FIFOS fill up. - * - * A side effect of this mode is that the TPA Watcher will effectively be - * disabled. Since the DROP mode forces all TPA lines asserted, the TPA - * Watcher will never find a cycle where the TPA for the selected port is - * deasserted in order to increment its count. - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_ign_rx_full_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t ignore : 16; /**< This port should ignore backpressure hints from - GMX when the RX FIFO fills up - - 0: Use GMX backpressure - - 1: Ignore GMX backpressure */ -#else - uint64_t ignore : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_srxx_ign_rx_full_s cn38xx; - struct cvmx_srxx_ign_rx_full_s cn38xxp2; - struct cvmx_srxx_ign_rx_full_s cn58xx; - struct cvmx_srxx_ign_rx_full_s cn58xxp1; -} cvmx_srxx_ign_rx_full_t; - - -/** - * cvmx_srx#_spi4_cal# - * - * specify the RSL base addresses for the block - * SRX_SPI4_CAL - Spi4 Calender table - * direct_calendar_write / direct_calendar_read - * - * Notes: - * There are 32 calendar table CSR's, each containing 4 entries for a - * total of 128 entries. In the above definition... - * - * n = calendar table offset * 4 - * - * Example, offset 0x00 contains the calendar table entries 0, 1, 2, 3 - * (with n == 0). Offset 0x10 is the 16th entry in the calendar table - * and would contain entries (16*4) = 64, 65, 66, and 67. - * - * Restrictions: - * Calendar table entry accesses (read or write) can only occur - * if the interface is disabled. All other accesses will be - * unpredictable. - * - * Both the calendar table and the LEN and M parameters must be - * completely setup before writing the Interface enable (INF_EN) and - * Status channel enabled (ST_EN) asserted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_spi4_calx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t oddpar : 1; /**< Odd parity over SRX_SPI4_CAL[15:0] - (^SRX_SPI4_CAL[16:0] === 1'b1) | $NS NS */ - uint64_t prt3 : 4; /**< Status for port n+3 */ - uint64_t prt2 : 4; /**< Status for port n+2 */ - uint64_t prt1 : 4; /**< Status for port n+1 */ - uint64_t prt0 : 4; /**< Status for port n+0 */ -#else - uint64_t prt0 : 4; - uint64_t prt1 : 4; - uint64_t prt2 : 4; - uint64_t prt3 : 4; - uint64_t oddpar : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_srxx_spi4_calx_s cn38xx; - struct cvmx_srxx_spi4_calx_s cn38xxp2; - struct cvmx_srxx_spi4_calx_s cn58xx; - struct cvmx_srxx_spi4_calx_s cn58xxp1; -} cvmx_srxx_spi4_calx_t; - - -/** - * cvmx_srx#_spi4_stat - * - * SRX_SPI4_STAT - Spi4 status channel control - * - * - * Notes: - * Restrictions: - * Both the calendar table and the LEN and M parameters must be - * completely setup before writing the Interface enable (INF_EN) and - * Status channel enabled (ST_EN) asserted. - * - * Current rev only supports LVTTL status IO - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_spi4_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t m : 8; /**< CALENDAR_M (from spi4.2 spec) */ - uint64_t reserved_7_7 : 1; - uint64_t len : 7; /**< CALENDAR_LEN (from spi4.2 spec) */ -#else - uint64_t len : 7; - uint64_t reserved_7_7 : 1; - uint64_t m : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_srxx_spi4_stat_s cn38xx; - struct cvmx_srxx_spi4_stat_s cn38xxp2; - struct cvmx_srxx_spi4_stat_s cn58xx; - struct cvmx_srxx_spi4_stat_s cn58xxp1; -} cvmx_srxx_spi4_stat_t; - - -/** - * cvmx_srx#_sw_tick_ctl - * - * SRX_SW_TICK_CTL - Create a software tick of Spi4 data. A write to this register will create a data tick. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_sw_tick_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t eop : 1; /**< SW Tick EOP - (PASS3 only) */ - uint64_t sop : 1; /**< SW Tick SOP - (PASS3 only) */ - uint64_t mod : 4; /**< SW Tick MOD - valid byte count - (PASS3 only) */ - uint64_t opc : 4; /**< SW Tick ERR - packet had an error - (PASS3 only) */ - uint64_t adr : 4; /**< SW Tick port address - (PASS3 only) */ -#else - uint64_t adr : 4; - uint64_t opc : 4; - uint64_t mod : 4; - uint64_t sop : 1; - uint64_t eop : 1; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_srxx_sw_tick_ctl_s cn38xx; - struct cvmx_srxx_sw_tick_ctl_s cn58xx; - struct cvmx_srxx_sw_tick_ctl_s cn58xxp1; -} cvmx_srxx_sw_tick_ctl_t; - - -/** - * cvmx_srx#_sw_tick_dat - * - * SRX_SW_TICK_DAT - Create a software tick of Spi4 data - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_srxx_sw_tick_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t dat : 64; /**< Data tick when SRX_SW_TICK_CTL is written - (PASS3 only) */ -#else - uint64_t dat : 64; -#endif - } s; - struct cvmx_srxx_sw_tick_dat_s cn38xx; - struct cvmx_srxx_sw_tick_dat_s cn58xx; - struct cvmx_srxx_sw_tick_dat_s cn58xxp1; -} cvmx_srxx_sw_tick_dat_t; - - -/** - * cvmx_stx#_arb_ctl - * - * STX_ARB_CTL - Spi transmit arbitration control - * - * - * Notes: - * If STX_ARB_CTL[MINTRN] is set in Spi4 mode, then the data_max_t - * parameter will have to be adjusted. Please see the - * STX_SPI4_DAT[MAX_T] section for additional information. In - * addition, the min_burst can only be guaranteed on the initial data - * burst of a given packet (i.e. the first data burst which contains - * the SOP tick). All subsequent bursts could be truncated by training - * sequences at any point during transmission and could be arbitrarily - * small. This mode is only for use in Spi4 mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_arb_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t mintrn : 1; /**< Hold off training cycles until STX_MIN_BST[MINB] - is satisfied */ - uint64_t reserved_4_4 : 1; - uint64_t igntpa : 1; /**< User switch to ignore any TPA information from the - Spi interface. This CSR forces all TPA terms to - be masked out. It is only intended as backdoor - or debug feature. */ - uint64_t reserved_0_2 : 3; -#else - uint64_t reserved_0_2 : 3; - uint64_t igntpa : 1; - uint64_t reserved_4_4 : 1; - uint64_t mintrn : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_stxx_arb_ctl_s cn38xx; - struct cvmx_stxx_arb_ctl_s cn38xxp2; - struct cvmx_stxx_arb_ctl_s cn58xx; - struct cvmx_stxx_arb_ctl_s cn58xxp1; -} cvmx_stxx_arb_ctl_t; - - -/** - * cvmx_stx#_bckprs_cnt - * - * Notes: - * This register reports the total number of cycles (STX data clks - - * stx_clk) in which the port defined in STX_STAT_CTL[BCKPRS] has lost TPA - * or is otherwise receiving backpressure. - * - * In Spi4 mode, this is defined as a loss of TPA which is indicated when - * the receiving device reports SATISFIED for the given port. The calendar - * status is brought into N2 on the spi4_tx*_sclk and synchronized into the - * N2 Spi TX clock domain which is 1/2 the frequency of the spi4_tx*_dclk - * clock (internally, this the stx_clk). The counter will update on the - * rising edge in which backpressure is reported. - * - * This register will be cleared when software writes all '1's to - * the STX_BCKPRS_CNT. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_bckprs_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Number of cycles when back-pressure is received - for port defined in STX_STAT_CTL[BCKPRS] */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_stxx_bckprs_cnt_s cn38xx; - struct cvmx_stxx_bckprs_cnt_s cn38xxp2; - struct cvmx_stxx_bckprs_cnt_s cn58xx; - struct cvmx_stxx_bckprs_cnt_s cn58xxp1; -} cvmx_stxx_bckprs_cnt_t; - - -/** - * cvmx_stx#_com_ctl - * - * STX_COM_CTL - TX Common Control Register - * - * - * Notes: - * Restrictions: - * Both the calendar table and the LEN and M parameters must be - * completely setup before writing the Interface enable (INF_EN) and - * Status channel enabled (ST_EN) asserted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_com_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t st_en : 1; /**< Status channel enabled */ - uint64_t reserved_1_2 : 2; - uint64_t inf_en : 1; /**< Interface enable */ -#else - uint64_t inf_en : 1; - uint64_t reserved_1_2 : 2; - uint64_t st_en : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_stxx_com_ctl_s cn38xx; - struct cvmx_stxx_com_ctl_s cn38xxp2; - struct cvmx_stxx_com_ctl_s cn58xx; - struct cvmx_stxx_com_ctl_s cn58xxp1; -} cvmx_stxx_com_ctl_t; - - -/** - * cvmx_stx#_dip_cnt - * - * Notes: - * * DIPMAX - * This counts the number of consecutive DIP2 states in which the the - * received DIP2 is bad. The expected range is 1-15 cycles with the - * value of 0 meaning disabled. - * - * * FRMMAX - * This counts the number of consecutive unexpected framing patterns (11) - * states. The expected range is 1-15 cycles with the value of 0 meaning - * disabled. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_dip_cnt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t frmmax : 4; /**< Number of consecutive unexpected framing patterns - before loss of sync */ - uint64_t dipmax : 4; /**< Number of consecutive DIP2 error before loss - of sync */ -#else - uint64_t dipmax : 4; - uint64_t frmmax : 4; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_stxx_dip_cnt_s cn38xx; - struct cvmx_stxx_dip_cnt_s cn38xxp2; - struct cvmx_stxx_dip_cnt_s cn58xx; - struct cvmx_stxx_dip_cnt_s cn58xxp1; -} cvmx_stxx_dip_cnt_t; - - -/** - * cvmx_stx#_ign_cal - * - * STX_IGN_CAL - Ignore Calendar Status from Spi4 Status Channel - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_ign_cal_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t igntpa : 16; /**< Ignore Calendar Status from Spi4 Status Channel - per Spi4 port - - 0: Use the status channel info - - 1: Grant the given port MAX_BURST1 credits */ -#else - uint64_t igntpa : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_stxx_ign_cal_s cn38xx; - struct cvmx_stxx_ign_cal_s cn38xxp2; - struct cvmx_stxx_ign_cal_s cn58xx; - struct cvmx_stxx_ign_cal_s cn58xxp1; -} cvmx_stxx_ign_cal_t; - - -/** - * cvmx_stx#_int_msk - * - * Notes: - * If the bit is enabled, then the coresponding exception condition will - * result in an interrupt to the system. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_int_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t frmerr : 1; /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */ - uint64_t unxfrm : 1; /**< Unexpected framing sequence */ - uint64_t nosync : 1; /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */ - uint64_t diperr : 1; /**< DIP2 error on the Spi4 Status channel */ - uint64_t datovr : 1; /**< Spi4 FIFO overflow error */ - uint64_t ovrbst : 1; /**< Transmit packet burst too big */ - uint64_t calpar1 : 1; /**< STX Calendar Table Parity Error Bank1 */ - uint64_t calpar0 : 1; /**< STX Calendar Table Parity Error Bank0 */ -#else - uint64_t calpar0 : 1; - uint64_t calpar1 : 1; - uint64_t ovrbst : 1; - uint64_t datovr : 1; - uint64_t diperr : 1; - uint64_t nosync : 1; - uint64_t unxfrm : 1; - uint64_t frmerr : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_stxx_int_msk_s cn38xx; - struct cvmx_stxx_int_msk_s cn38xxp2; - struct cvmx_stxx_int_msk_s cn58xx; - struct cvmx_stxx_int_msk_s cn58xxp1; -} cvmx_stxx_int_msk_t; - - -/** - * cvmx_stx#_int_reg - * - * Notes: - * * CALPAR0 - * This bit indicates that the Spi4 calendar table encountered a parity - * error on bank0 of the calendar table memory. This error bit is - * associated with the calendar table on the TX interface - the interface - * that drives the Spi databus. The calendar table is used in Spi4 mode - * when using the status channel. Parity errors can occur during normal - * operation when the calendar table is constantly being read for the port - * information, or during initialization time, when the user has access. - * This errors will force the the status channel to the reset state and - * begin driving training sequences. The status channel will also reset. - * Software must follow the init sequence to resynch the interface. This - * includes toggling INF_EN which will cancel all outstanding accumulated - * credits. - * - * * CALPAR1 - * Identical to CALPAR0 except that it indicates that the error occured - * on bank1 (instead of bank0). - * - * * OVRBST - * STX can track upto a 512KB data burst. Any packet larger than that is - * illegal and will cause confusion in the STX state machine. BMI is - * responsible for throwing away these out of control packets from the - * input and the Execs should never generate them on the output. This is - * a fatal error and should have STX_INT_SYNC[OVRBST] set. - * - * * DATOVR - * FIFO where the Spi4 data ramps upto its transmit frequency has - * overflowed. This is a fatal error and should have - * STX_INT_SYNC[DATOVR] set. - * - * * DIPERR - * This bit will fire if any DIP2 error is caught by the Spi4 status - * channel. - * - * * NOSYNC - * This bit indicates that the number of consecutive DIP2 errors exceeds - * STX_DIP_CNT[MAXDIP] and that the interface should be taken down. The - * datapath will be notified and send continuous training sequences until - * software resynchronizes the interface. This error condition should - * have STX_INT_SYNC[NOSYNC] set. - * - * * UNXFRM - * Unexpected framing data was seen on the status channel. - * - * * FRMERR - * This bit indicates that the number of consecutive unexpected framing - * sequences STX_DIP_CNT[MAXFRM] and that the interface should be taken - * down. The datapath will be notified and send continuous training - * sequences until software resynchronizes the interface. This error - * condition should have STX_INT_SYNC[FRMERR] set. - * - * * SYNCERR - * Indicates that an exception marked in STX_INT_SYNC has occured and the - * TX datapath is disabled. It is recommended that the OVRBST, DATOVR, - * NOSYNC, and FRMERR error conditions all have their bits set in the - * STX_INT_SYNC register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_int_reg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t syncerr : 1; /**< Interface encountered a fatal error */ - uint64_t frmerr : 1; /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */ - uint64_t unxfrm : 1; /**< Unexpected framing sequence */ - uint64_t nosync : 1; /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */ - uint64_t diperr : 1; /**< DIP2 error on the Spi4 Status channel */ - uint64_t datovr : 1; /**< Spi4 FIFO overflow error */ - uint64_t ovrbst : 1; /**< Transmit packet burst too big */ - uint64_t calpar1 : 1; /**< STX Calendar Table Parity Error Bank1 */ - uint64_t calpar0 : 1; /**< STX Calendar Table Parity Error Bank0 */ -#else - uint64_t calpar0 : 1; - uint64_t calpar1 : 1; - uint64_t ovrbst : 1; - uint64_t datovr : 1; - uint64_t diperr : 1; - uint64_t nosync : 1; - uint64_t unxfrm : 1; - uint64_t frmerr : 1; - uint64_t syncerr : 1; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_stxx_int_reg_s cn38xx; - struct cvmx_stxx_int_reg_s cn38xxp2; - struct cvmx_stxx_int_reg_s cn58xx; - struct cvmx_stxx_int_reg_s cn58xxp1; -} cvmx_stxx_int_reg_t; - - -/** - * cvmx_stx#_int_sync - * - * Notes: - * If the bit is enabled, then the coresponding exception condition is flagged - * to be fatal. In Spi4 mode, the exception condition will result in a loss - * of sync condition on the Spi4 interface and the datapath will send - * continuous traing sequences. - * - * It is recommended that software set the OVRBST, DATOVR, NOSYNC, and - * FRMERR errors as synchronization events. Software is free to - * synchronize the bus on other conditions, but this is the minimum - * recommended set. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_int_sync_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_8_63 : 56; - uint64_t frmerr : 1; /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */ - uint64_t unxfrm : 1; /**< Unexpected framing sequence */ - uint64_t nosync : 1; /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */ - uint64_t diperr : 1; /**< DIP2 error on the Spi4 Status channel */ - uint64_t datovr : 1; /**< Spi4 FIFO overflow error */ - uint64_t ovrbst : 1; /**< Transmit packet burst too big */ - uint64_t calpar1 : 1; /**< STX Calendar Table Parity Error Bank1 */ - uint64_t calpar0 : 1; /**< STX Calendar Table Parity Error Bank0 */ -#else - uint64_t calpar0 : 1; - uint64_t calpar1 : 1; - uint64_t ovrbst : 1; - uint64_t datovr : 1; - uint64_t diperr : 1; - uint64_t nosync : 1; - uint64_t unxfrm : 1; - uint64_t frmerr : 1; - uint64_t reserved_8_63 : 56; -#endif - } s; - struct cvmx_stxx_int_sync_s cn38xx; - struct cvmx_stxx_int_sync_s cn38xxp2; - struct cvmx_stxx_int_sync_s cn58xx; - struct cvmx_stxx_int_sync_s cn58xxp1; -} cvmx_stxx_int_sync_t; - - -/** - * cvmx_stx#_min_bst - * - * STX_MIN_BST - Min Burst to enforce when inserting training sequence - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_min_bst_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_9_63 : 55; - uint64_t minb : 9; /**< When STX_ARB_CTL[MINTRN] is set, MINB indicates - the number of 8B blocks to send before inserting - a training sequence. Normally MINB will be set - to GMX_TX_SPI_THRESH[THRESH]. MINB should always - be set to an even number (ie. multiple of 16B) */ -#else - uint64_t minb : 9; - uint64_t reserved_9_63 : 55; -#endif - } s; - struct cvmx_stxx_min_bst_s cn38xx; - struct cvmx_stxx_min_bst_s cn38xxp2; - struct cvmx_stxx_min_bst_s cn58xx; - struct cvmx_stxx_min_bst_s cn58xxp1; -} cvmx_stxx_min_bst_t; - - -/** - * cvmx_stx#_spi4_cal# - * - * specify the RSL base addresses for the block - * STX_SPI4_CAL - Spi4 Calender table - * direct_calendar_write / direct_calendar_read - * - * Notes: - * There are 32 calendar table CSR's, each containing 4 entries for a - * total of 128 entries. In the above definition... - * - * n = calendar table offset * 4 - * - * Example, offset 0x00 contains the calendar table entries 0, 1, 2, 3 - * (with n == 0). Offset 0x10 is the 16th entry in the calendar table - * and would contain entries (16*4) = 64, 65, 66, and 67. - * - * Restrictions: - * Calendar table entry accesses (read or write) can only occur - * if the interface is disabled. All other accesses will be - * unpredictable. - * - * Both the calendar table and the LEN and M parameters must be - * completely setup before writing the Interface enable (INF_EN) and - * Status channel enabled (ST_EN) asserted. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_spi4_calx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t oddpar : 1; /**< Odd parity over STX_SPI4_CAL[15:0] - (^STX_SPI4_CAL[16:0] === 1'b1) | $NS NS */ - uint64_t prt3 : 4; /**< Status for port n+3 */ - uint64_t prt2 : 4; /**< Status for port n+2 */ - uint64_t prt1 : 4; /**< Status for port n+1 */ - uint64_t prt0 : 4; /**< Status for port n+0 */ -#else - uint64_t prt0 : 4; - uint64_t prt1 : 4; - uint64_t prt2 : 4; - uint64_t prt3 : 4; - uint64_t oddpar : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_stxx_spi4_calx_s cn38xx; - struct cvmx_stxx_spi4_calx_s cn38xxp2; - struct cvmx_stxx_spi4_calx_s cn58xx; - struct cvmx_stxx_spi4_calx_s cn58xxp1; -} cvmx_stxx_spi4_calx_t; - - -/** - * cvmx_stx#_spi4_dat - * - * STX_SPI4_DAT - Spi4 datapath channel control register - * - * - * Notes: - * Restrictions: - * * DATA_MAX_T must be in MOD 4 cycles - * - * * DATA_MAX_T must at least 0x20 - * - * * DATA_MAX_T == 0 or ALPHA == 0 will disable the training sequnce - * - * * If STX_ARB_CTL[MINTRN] is set, then training cycles will stall - * waiting for min bursts to complete. In the worst case, this will - * add the entire min burst transmission time to the interval between - * trainging sequence. The observed MAX_T on the Spi4 bus will be... - * - * STX_SPI4_DAT[MAX_T] + (STX_MIN_BST[MINB] * 4) - * - * If STX_ARB_CTL[MINTRN] is set in Spi4 mode, then the data_max_t - * parameter will have to be adjusted. Please see the - * STX_SPI4_DAT[MAX_T] section for additional information. In - * addition, the min_burst can only be guaranteed on the initial data - * burst of a given packet (i.e. the first data burst which contains - * the SOP tick). All subsequent bursts could be truncated by training - * sequences at any point during transmission and could be arbitrarily - * small. This mode is only for use in Spi4 mode. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_spi4_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t alpha : 16; /**< alpha (from spi4.2 spec) */ - uint64_t max_t : 16; /**< DATA_MAX_T (from spi4.2 spec) */ -#else - uint64_t max_t : 16; - uint64_t alpha : 16; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_stxx_spi4_dat_s cn38xx; - struct cvmx_stxx_spi4_dat_s cn38xxp2; - struct cvmx_stxx_spi4_dat_s cn58xx; - struct cvmx_stxx_spi4_dat_s cn58xxp1; -} cvmx_stxx_spi4_dat_t; - - -/** - * cvmx_stx#_spi4_stat - * - * STX_SPI4_STAT - Spi4 status channel control register - * - * - * Notes: - * Restrictions: - * Both the calendar table and the LEN and M parameters must be - * completely setup before writing the Interface enable (INF_EN) and - * Status channel enabled (ST_EN) asserted. - * - * The calendar table will only be enabled when LEN > 0. - * - * Current rev will only support LVTTL status IO. - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_spi4_stat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t m : 8; /**< CALENDAR_M (from spi4.2 spec) */ - uint64_t reserved_7_7 : 1; - uint64_t len : 7; /**< CALENDAR_LEN (from spi4.2 spec) */ -#else - uint64_t len : 7; - uint64_t reserved_7_7 : 1; - uint64_t m : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_stxx_spi4_stat_s cn38xx; - struct cvmx_stxx_spi4_stat_s cn38xxp2; - struct cvmx_stxx_spi4_stat_s cn58xx; - struct cvmx_stxx_spi4_stat_s cn58xxp1; -} cvmx_stxx_spi4_stat_t; - - -/** - * cvmx_stx#_stat_bytes_hi - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_stat_bytes_hi_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Number of bytes sent (CNT[63:32]) */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_stxx_stat_bytes_hi_s cn38xx; - struct cvmx_stxx_stat_bytes_hi_s cn38xxp2; - struct cvmx_stxx_stat_bytes_hi_s cn58xx; - struct cvmx_stxx_stat_bytes_hi_s cn58xxp1; -} cvmx_stxx_stat_bytes_hi_t; - - -/** - * cvmx_stx#_stat_bytes_lo - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_stat_bytes_lo_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Number of bytes sent (CNT[31:0]) */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_stxx_stat_bytes_lo_s cn38xx; - struct cvmx_stxx_stat_bytes_lo_s cn38xxp2; - struct cvmx_stxx_stat_bytes_lo_s cn58xx; - struct cvmx_stxx_stat_bytes_lo_s cn58xxp1; -} cvmx_stxx_stat_bytes_lo_t; - - -/** - * cvmx_stx#_stat_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_stat_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_5_63 : 59; - uint64_t clr : 1; /**< Clear all statistics counters - - STX_STAT_PKT_XMT - - STX_STAT_BYTES_HI - - STX_STAT_BYTES_LO */ - uint64_t bckprs : 4; /**< The selected port for STX_BCKPRS_CNT */ -#else - uint64_t bckprs : 4; - uint64_t clr : 1; - uint64_t reserved_5_63 : 59; -#endif - } s; - struct cvmx_stxx_stat_ctl_s cn38xx; - struct cvmx_stxx_stat_ctl_s cn38xxp2; - struct cvmx_stxx_stat_ctl_s cn58xx; - struct cvmx_stxx_stat_ctl_s cn58xxp1; -} cvmx_stxx_stat_ctl_t; - - -/** - * cvmx_stx#_stat_pkt_xmt - */ -typedef union -{ - uint64_t u64; - struct cvmx_stxx_stat_pkt_xmt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t cnt : 32; /**< Number of packets sent */ -#else - uint64_t cnt : 32; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_stxx_stat_pkt_xmt_s cn38xx; - struct cvmx_stxx_stat_pkt_xmt_s cn38xxp2; - struct cvmx_stxx_stat_pkt_xmt_s cn58xx; - struct cvmx_stxx_stat_pkt_xmt_s cn58xxp1; -} cvmx_stxx_stat_pkt_xmt_t; - - -/** - * cvmx_tim_mem_debug0 - * - * Notes: - * Internal per-ring state intended for debug use only - tim.ctl[47:0] - * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_mem_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t ena : 1; /**< Ring timer enable */ - uint64_t reserved_46_46 : 1; - uint64_t count : 22; /**< Time offset for the ring - Set to INTERVAL and counts down by 1 every 1024 - cycles when ENA==1. The HW forces a bucket - traversal (and resets COUNT to INTERVAL) whenever - the decrement would cause COUNT to go negative. - COUNT is unpredictable whenever ENA==0. - COUNT is reset to INTERVAL whenever TIM_MEM_RING1 - is written for the ring. */ - uint64_t reserved_22_23 : 2; - uint64_t interval : 22; /**< Timer interval - 1 */ -#else - uint64_t interval : 22; - uint64_t reserved_22_23 : 2; - uint64_t count : 22; - uint64_t reserved_46_46 : 1; - uint64_t ena : 1; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_tim_mem_debug0_s cn30xx; - struct cvmx_tim_mem_debug0_s cn31xx; - struct cvmx_tim_mem_debug0_s cn38xx; - struct cvmx_tim_mem_debug0_s cn38xxp2; - struct cvmx_tim_mem_debug0_s cn50xx; - struct cvmx_tim_mem_debug0_s cn52xx; - struct cvmx_tim_mem_debug0_s cn52xxp1; - struct cvmx_tim_mem_debug0_s cn56xx; - struct cvmx_tim_mem_debug0_s cn56xxp1; - struct cvmx_tim_mem_debug0_s cn58xx; - struct cvmx_tim_mem_debug0_s cn58xxp1; -} cvmx_tim_mem_debug0_t; - - -/** - * cvmx_tim_mem_debug1 - * - * Notes: - * Internal per-ring state intended for debug use only - tim.sta[63:0] - * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_mem_debug1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t bucket : 13; /**< Current bucket[12:0] - Reset to 0 whenever TIM_MEM_RING0 is written for - the ring. Incremented (modulo BSIZE) once per - bucket traversal. - See TIM_MEM_DEBUG2[BUCKET]. */ - uint64_t base : 31; /**< Pointer[35:5] to bucket[0] */ - uint64_t bsize : 20; /**< Number of buckets - 1 */ -#else - uint64_t bsize : 20; - uint64_t base : 31; - uint64_t bucket : 13; -#endif - } s; - struct cvmx_tim_mem_debug1_s cn30xx; - struct cvmx_tim_mem_debug1_s cn31xx; - struct cvmx_tim_mem_debug1_s cn38xx; - struct cvmx_tim_mem_debug1_s cn38xxp2; - struct cvmx_tim_mem_debug1_s cn50xx; - struct cvmx_tim_mem_debug1_s cn52xx; - struct cvmx_tim_mem_debug1_s cn52xxp1; - struct cvmx_tim_mem_debug1_s cn56xx; - struct cvmx_tim_mem_debug1_s cn56xxp1; - struct cvmx_tim_mem_debug1_s cn58xx; - struct cvmx_tim_mem_debug1_s cn58xxp1; -} cvmx_tim_mem_debug1_t; - - -/** - * cvmx_tim_mem_debug2 - * - * Notes: - * Internal per-ring state intended for debug use only - tim.sta[95:64] - * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_mem_debug2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_24_63 : 40; - uint64_t cpool : 3; /**< Free list used to free chunks */ - uint64_t csize : 13; /**< Number of words per chunk */ - uint64_t reserved_7_7 : 1; - uint64_t bucket : 7; /**< Current bucket[19:13] - See TIM_MEM_DEBUG1[BUCKET]. */ -#else - uint64_t bucket : 7; - uint64_t reserved_7_7 : 1; - uint64_t csize : 13; - uint64_t cpool : 3; - uint64_t reserved_24_63 : 40; -#endif - } s; - struct cvmx_tim_mem_debug2_s cn30xx; - struct cvmx_tim_mem_debug2_s cn31xx; - struct cvmx_tim_mem_debug2_s cn38xx; - struct cvmx_tim_mem_debug2_s cn38xxp2; - struct cvmx_tim_mem_debug2_s cn50xx; - struct cvmx_tim_mem_debug2_s cn52xx; - struct cvmx_tim_mem_debug2_s cn52xxp1; - struct cvmx_tim_mem_debug2_s cn56xx; - struct cvmx_tim_mem_debug2_s cn56xxp1; - struct cvmx_tim_mem_debug2_s cn58xx; - struct cvmx_tim_mem_debug2_s cn58xxp1; -} cvmx_tim_mem_debug2_t; - - -/** - * cvmx_tim_mem_ring0 - * - * Notes: - * TIM_MEM_RING0 must not be written for a ring when TIM_MEM_RING1[ENA] is set for the ring. - * Every write to TIM_MEM_RING0 clears the current bucket for the ring. (The current bucket is - * readable via TIM_MEM_DEBUG2[BUCKET],TIM_MEM_DEBUG1[BUCKET].) - * BASE is a 32-byte aligned pointer[35:0]. Only pointer[35:5] are stored because pointer[4:0] = 0. - * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_mem_ring0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_55_63 : 9; - uint64_t first_bucket : 31; /**< Pointer[35:5] to bucket[0] */ - uint64_t num_buckets : 20; /**< Number of buckets - 1 */ - uint64_t ring : 4; /**< Ring ID */ -#else - uint64_t ring : 4; - uint64_t num_buckets : 20; - uint64_t first_bucket : 31; - uint64_t reserved_55_63 : 9; -#endif - } s; - struct cvmx_tim_mem_ring0_s cn30xx; - struct cvmx_tim_mem_ring0_s cn31xx; - struct cvmx_tim_mem_ring0_s cn38xx; - struct cvmx_tim_mem_ring0_s cn38xxp2; - struct cvmx_tim_mem_ring0_s cn50xx; - struct cvmx_tim_mem_ring0_s cn52xx; - struct cvmx_tim_mem_ring0_s cn52xxp1; - struct cvmx_tim_mem_ring0_s cn56xx; - struct cvmx_tim_mem_ring0_s cn56xxp1; - struct cvmx_tim_mem_ring0_s cn58xx; - struct cvmx_tim_mem_ring0_s cn58xxp1; -} cvmx_tim_mem_ring0_t; - - -/** - * cvmx_tim_mem_ring1 - * - * Notes: - * After a 1->0 transition on ENA, the HW will still complete a bucket traversal for the ring - * if it was pending or active prior to the transition. (SW must delay to ensure the completion - * of the traversal before reprogramming the ring.) - * Every write to TIM_MEM_RING1 resets the current time offset for the ring to the INTERVAL value. - * (The current time offset for the ring is readable via TIM_MEM_DEBUG0[COUNT].) - * CSIZE must be at least 16. It is illegal to program CSIZE to a value that is less than 16. - * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any - * CSR read operations to this address can be performed. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_mem_ring1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_43_63 : 21; - uint64_t enable : 1; /**< Ring timer enable - When clear, the ring is disabled and TIM - will not traverse any new buckets for the ring. */ - uint64_t pool : 3; /**< Free list used to free chunks */ - uint64_t words_per_chunk : 13; /**< Number of words per chunk */ - uint64_t interval : 22; /**< Timer interval - 1, measured in 1024 cycle ticks */ - uint64_t ring : 4; /**< Ring ID */ -#else - uint64_t ring : 4; - uint64_t interval : 22; - uint64_t words_per_chunk : 13; - uint64_t pool : 3; - uint64_t enable : 1; - uint64_t reserved_43_63 : 21; -#endif - } s; - struct cvmx_tim_mem_ring1_s cn30xx; - struct cvmx_tim_mem_ring1_s cn31xx; - struct cvmx_tim_mem_ring1_s cn38xx; - struct cvmx_tim_mem_ring1_s cn38xxp2; - struct cvmx_tim_mem_ring1_s cn50xx; - struct cvmx_tim_mem_ring1_s cn52xx; - struct cvmx_tim_mem_ring1_s cn52xxp1; - struct cvmx_tim_mem_ring1_s cn56xx; - struct cvmx_tim_mem_ring1_s cn56xxp1; - struct cvmx_tim_mem_ring1_s cn58xx; - struct cvmx_tim_mem_ring1_s cn58xxp1; -} cvmx_tim_mem_ring1_t; - - -/** - * cvmx_tim_reg_bist_result - * - * Notes: - * Access to the internal BiST results - * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_reg_bist_result_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t sta : 2; /**< BiST result of the STA memories (0=pass, !0=fail) */ - uint64_t ncb : 1; /**< BiST result of the NCB memories (0=pass, !0=fail) */ - uint64_t ctl : 1; /**< BiST result of the CTL memories (0=pass, !0=fail) */ -#else - uint64_t ctl : 1; - uint64_t ncb : 1; - uint64_t sta : 2; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_tim_reg_bist_result_s cn30xx; - struct cvmx_tim_reg_bist_result_s cn31xx; - struct cvmx_tim_reg_bist_result_s cn38xx; - struct cvmx_tim_reg_bist_result_s cn38xxp2; - struct cvmx_tim_reg_bist_result_s cn50xx; - struct cvmx_tim_reg_bist_result_s cn52xx; - struct cvmx_tim_reg_bist_result_s cn52xxp1; - struct cvmx_tim_reg_bist_result_s cn56xx; - struct cvmx_tim_reg_bist_result_s cn56xxp1; - struct cvmx_tim_reg_bist_result_s cn58xx; - struct cvmx_tim_reg_bist_result_s cn58xxp1; -} cvmx_tim_reg_bist_result_t; - - -/** - * cvmx_tim_reg_error - * - * Notes: - * A ring is in error if its interval has elapsed more than once without having been serviced. - * During a CSR write to this register, the write data is used as a mask to clear the selected mask - * bits (mask'[15:0] = mask[15:0] & ~write_data[15:0]). - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_reg_error_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mask : 16; /**< Bit mask indicating the rings in error */ -#else - uint64_t mask : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_tim_reg_error_s cn30xx; - struct cvmx_tim_reg_error_s cn31xx; - struct cvmx_tim_reg_error_s cn38xx; - struct cvmx_tim_reg_error_s cn38xxp2; - struct cvmx_tim_reg_error_s cn50xx; - struct cvmx_tim_reg_error_s cn52xx; - struct cvmx_tim_reg_error_s cn52xxp1; - struct cvmx_tim_reg_error_s cn56xx; - struct cvmx_tim_reg_error_s cn56xxp1; - struct cvmx_tim_reg_error_s cn58xx; - struct cvmx_tim_reg_error_s cn58xxp1; -} cvmx_tim_reg_error_t; - - -/** - * cvmx_tim_reg_flags - * - * Notes: - * TIM has a counter that causes a periodic tick every 1024 cycles. This counter is shared by all - * rings. (Each tick causes the HW to decrement the time offset (i.e. COUNT) for all enabled rings.) - * When ENA_TIM==0, the HW stops this shared periodic counter, so there are no more ticks, and there - * are no more new bucket traversals (for any ring). - * - * If ENA_TIM transitions 1->0, TIM will no longer create new bucket traversals, but there may - * have been previous ones. If there are ring bucket traversals that were already pending but - * not currently active (i.e. bucket traversals that need to be done by the HW, but haven't been yet) - * during this ENA_TIM 1->0 transition, then these bucket traversals will remain pending until - * ENA_TIM is later set to one. Bucket traversals that were already in progress will complete - * after the 1->0 ENA_TIM transition, though. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_reg_flags_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t reset : 1; /**< Reset oneshot pulse for free-running structures */ - uint64_t enable_dwb : 1; /**< Enables non-zero DonwWriteBacks when set - When set, enables the use of - DontWriteBacks during the buffer freeing - operations. */ - uint64_t enable_timers : 1; /**< Enables the TIM section when set - When set, TIM is in normal operation. - When clear, time is effectively stopped for all - rings in TIM. */ -#else - uint64_t enable_timers : 1; - uint64_t enable_dwb : 1; - uint64_t reset : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_tim_reg_flags_s cn30xx; - struct cvmx_tim_reg_flags_s cn31xx; - struct cvmx_tim_reg_flags_s cn38xx; - struct cvmx_tim_reg_flags_s cn38xxp2; - struct cvmx_tim_reg_flags_s cn50xx; - struct cvmx_tim_reg_flags_s cn52xx; - struct cvmx_tim_reg_flags_s cn52xxp1; - struct cvmx_tim_reg_flags_s cn56xx; - struct cvmx_tim_reg_flags_s cn56xxp1; - struct cvmx_tim_reg_flags_s cn58xx; - struct cvmx_tim_reg_flags_s cn58xxp1; -} cvmx_tim_reg_flags_t; - - -/** - * cvmx_tim_reg_int_mask - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * When mask bit is set, the interrupt is enabled. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_reg_int_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t mask : 16; /**< Bit mask corresponding to TIM_REG_ERROR.MASK above */ -#else - uint64_t mask : 16; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_tim_reg_int_mask_s cn30xx; - struct cvmx_tim_reg_int_mask_s cn31xx; - struct cvmx_tim_reg_int_mask_s cn38xx; - struct cvmx_tim_reg_int_mask_s cn38xxp2; - struct cvmx_tim_reg_int_mask_s cn50xx; - struct cvmx_tim_reg_int_mask_s cn52xx; - struct cvmx_tim_reg_int_mask_s cn52xxp1; - struct cvmx_tim_reg_int_mask_s cn56xx; - struct cvmx_tim_reg_int_mask_s cn56xxp1; - struct cvmx_tim_reg_int_mask_s cn58xx; - struct cvmx_tim_reg_int_mask_s cn58xxp1; -} cvmx_tim_reg_int_mask_t; - - -/** - * cvmx_tim_reg_read_idx - * - * Notes: - * Provides the read index during a CSR read operation to any of the CSRs that are physically stored - * as memories. The names of these CSRs begin with the prefix "TIM_MEM_". - * IDX[7:0] is the read index. INC[7:0] is an increment that is added to IDX[7:0] after any CSR read. - * The intended use is to initially write this CSR such that IDX=0 and INC=1. Then, the entire - * contents of a CSR memory can be read with consecutive CSR read commands. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tim_reg_read_idx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t inc : 8; /**< Increment to add to current index for next index */ - uint64_t index : 8; /**< Index to use for next memory CSR read */ -#else - uint64_t index : 8; - uint64_t inc : 8; - uint64_t reserved_16_63 : 48; -#endif - } s; - struct cvmx_tim_reg_read_idx_s cn30xx; - struct cvmx_tim_reg_read_idx_s cn31xx; - struct cvmx_tim_reg_read_idx_s cn38xx; - struct cvmx_tim_reg_read_idx_s cn38xxp2; - struct cvmx_tim_reg_read_idx_s cn50xx; - struct cvmx_tim_reg_read_idx_s cn52xx; - struct cvmx_tim_reg_read_idx_s cn52xxp1; - struct cvmx_tim_reg_read_idx_s cn56xx; - struct cvmx_tim_reg_read_idx_s cn56xxp1; - struct cvmx_tim_reg_read_idx_s cn58xx; - struct cvmx_tim_reg_read_idx_s cn58xxp1; -} cvmx_tim_reg_read_idx_t; - - -/** - * cvmx_tra_bist_status - * - * TRA_BIST_STATUS = Trace Buffer BiST Status - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t tcf : 1; /**< Bist Results for TCF memory - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t tdf1 : 1; /**< Bist Results for TDF memory 1 - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ - uint64_t tdf0 : 1; /**< Bist Results for TCF memory 0 - - 0: GOOD (or bist in progress/never run) - - 1: BAD */ -#else - uint64_t tdf0 : 1; - uint64_t tdf1 : 1; - uint64_t tcf : 1; - uint64_t reserved_3_63 : 61; -#endif - } s; - struct cvmx_tra_bist_status_s cn31xx; - struct cvmx_tra_bist_status_s cn38xx; - struct cvmx_tra_bist_status_s cn38xxp2; - struct cvmx_tra_bist_status_s cn52xx; - struct cvmx_tra_bist_status_s cn52xxp1; - struct cvmx_tra_bist_status_s cn56xx; - struct cvmx_tra_bist_status_s cn56xxp1; - struct cvmx_tra_bist_status_s cn58xx; - struct cvmx_tra_bist_status_s cn58xxp1; -} cvmx_tra_bist_status_t; - - -/** - * cvmx_tra_ctl - * - * TRA_CTL = Trace Buffer Control - * - * Description: - * - * Notes: - * It is illegal to change the values of WRAP, TRIG_CTL, IGNORE_O while tracing (i.e. when ENA=1). - * Note that the following fields are present only in chip revisions beginning with pass2: IGNORE_O - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_15_63 : 49; - uint64_t ignore_o : 1; /**< Ignore overflow during wrap mode - If set and wrapping mode is enabled, then tracing - will not stop at the overflow condition. Each - write during an overflow will overwrite the - oldest, unread entry and the read pointer is - incremented by one entry. This bit has no effect - if WRAP=0. */ - uint64_t mcd0_ena : 1; /**< MCD0 enable - If set and any PP sends the MCD0 signal, the - tracing is disabled. */ - uint64_t mcd0_thr : 1; /**< MCD0_threshold - At a fill threshold event, sends an MCD0 - wire pulse that can cause cores to enter debug - mode, if enabled. This MCD0 wire pulse will not - occur while (TRA_INT_STATUS.MCD0_THR == 1). */ - uint64_t mcd0_trg : 1; /**< MCD0_trigger - At an end trigger event, sends an MCD0 - wire pulse that can cause cores to enter debug - mode, if enabled. This MCD0 wire pulse will not - occur while (TRA_INT_STATUS.MCD0_TRG == 1). */ - uint64_t ciu_thr : 1; /**< CIU_threshold - When set during a fill threshold event, - TRA_INT_STATUS[CIU_THR] is set, which can cause - core interrupts, if enabled. */ - uint64_t ciu_trg : 1; /**< CIU_trigger - When set during an end trigger event, - TRA_INT_STATUS[CIU_TRG] is set, which can cause - core interrupts, if enabled. */ - uint64_t full_thr : 2; /**< Full Threshhold - 0=none - 1=1/2 full - 2=3/4 full - 3=4/4 full */ - uint64_t time_grn : 3; /**< Timestamp granularity - granularity=8^n cycles, n=0,1,2,3,4,5,6,7 */ - uint64_t trig_ctl : 2; /**< Trigger Control - Note: trigger events are written to the trace - 0=no triggers - 1=trigger0=start trigger, trigger1=stop trigger - 2=(trigger0 || trigger1)=start trigger - 3=(trigger0 || trigger1)=stop trigger */ - uint64_t wrap : 1; /**< Wrap mode - When WRAP=0, the trace buffer will disable itself - after having logged 1024 entries. When WRAP=1, - the trace buffer will never disable itself. - In this case, tracing may or may not be - temporarily suspended during the overflow - condition (see IGNORE_O above). - 0=do not wrap - 1=wrap */ - uint64_t ena : 1; /**< Enable Trace - Master enable. Tracing only happens when ENA=1. - When ENA changes from 0 to 1, the read and write - pointers are reset to 0x00 to begin a new trace. - The MCD0 event may set ENA=0 (see MCD0_ENA - above). When using triggers, tracing occurs only - between start and stop triggers (including the - triggers themselves). - 0=disable - 1=enable */ -#else - uint64_t ena : 1; - uint64_t wrap : 1; - uint64_t trig_ctl : 2; - uint64_t time_grn : 3; - uint64_t full_thr : 2; - uint64_t ciu_trg : 1; - uint64_t ciu_thr : 1; - uint64_t mcd0_trg : 1; - uint64_t mcd0_thr : 1; - uint64_t mcd0_ena : 1; - uint64_t ignore_o : 1; - uint64_t reserved_15_63 : 49; -#endif - } s; - struct cvmx_tra_ctl_s cn31xx; - struct cvmx_tra_ctl_s cn38xx; - struct cvmx_tra_ctl_s cn38xxp2; - struct cvmx_tra_ctl_s cn52xx; - struct cvmx_tra_ctl_s cn52xxp1; - struct cvmx_tra_ctl_s cn56xx; - struct cvmx_tra_ctl_s cn56xxp1; - struct cvmx_tra_ctl_s cn58xx; - struct cvmx_tra_ctl_s cn58xxp1; -} cvmx_tra_ctl_t; - - -/** - * cvmx_tra_cycles_since - * - * TRA_CYCLES_SINCE = Trace Buffer Cycles Since Last Write, Read/Write pointers - * - * Description: - * - * Notes: - * This CSR is obsolete. Use TRA_CYCLES_SINCE1 instead. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_cycles_since_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cycles : 48; /**< Cycles since the last entry was written */ - uint64_t rptr : 8; /**< Read pointer */ - uint64_t wptr : 8; /**< Write pointer */ -#else - uint64_t wptr : 8; - uint64_t rptr : 8; - uint64_t cycles : 48; -#endif - } s; - struct cvmx_tra_cycles_since_s cn31xx; - struct cvmx_tra_cycles_since_s cn38xx; - struct cvmx_tra_cycles_since_s cn38xxp2; - struct cvmx_tra_cycles_since_s cn52xx; - struct cvmx_tra_cycles_since_s cn52xxp1; - struct cvmx_tra_cycles_since_s cn56xx; - struct cvmx_tra_cycles_since_s cn56xxp1; - struct cvmx_tra_cycles_since_s cn58xx; - struct cvmx_tra_cycles_since_s cn58xxp1; -} cvmx_tra_cycles_since_t; - - -/** - * cvmx_tra_cycles_since1 - * - * TRA_CYCLES_SINCE1 = Trace Buffer Cycles Since Last Write, Read/Write pointers - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_cycles_since1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t cycles : 40; /**< Cycles since the last entry was written */ - uint64_t reserved_22_23 : 2; - uint64_t rptr : 10; /**< Read pointer */ - uint64_t reserved_10_11 : 2; - uint64_t wptr : 10; /**< Write pointer */ -#else - uint64_t wptr : 10; - uint64_t reserved_10_11 : 2; - uint64_t rptr : 10; - uint64_t reserved_22_23 : 2; - uint64_t cycles : 40; -#endif - } s; - struct cvmx_tra_cycles_since1_s cn52xx; - struct cvmx_tra_cycles_since1_s cn52xxp1; - struct cvmx_tra_cycles_since1_s cn56xx; - struct cvmx_tra_cycles_since1_s cn56xxp1; - struct cvmx_tra_cycles_since1_s cn58xx; - struct cvmx_tra_cycles_since1_s cn58xxp1; -} cvmx_tra_cycles_since1_t; - - -/** - * cvmx_tra_filt_adr_adr - * - * TRA_FILT_ADR_ADR = Trace Buffer Filter Address Address - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_filt_adr_adr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Unmasked Address - The combination of TRA_FILT_ADR_ADR and - TRA_FILT_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_filt_adr_adr_s cn31xx; - struct cvmx_tra_filt_adr_adr_s cn38xx; - struct cvmx_tra_filt_adr_adr_s cn38xxp2; - struct cvmx_tra_filt_adr_adr_s cn52xx; - struct cvmx_tra_filt_adr_adr_s cn52xxp1; - struct cvmx_tra_filt_adr_adr_s cn56xx; - struct cvmx_tra_filt_adr_adr_s cn56xxp1; - struct cvmx_tra_filt_adr_adr_s cn58xx; - struct cvmx_tra_filt_adr_adr_s cn58xxp1; -} cvmx_tra_filt_adr_adr_t; - - -/** - * cvmx_tra_filt_adr_msk - * - * TRA_FILT_ADR_MSK = Trace Buffer Filter Address Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_filt_adr_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Address Mask - The combination of TRA_FILT_ADR_ADR and - TRA_FILT_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches. When a mask bit is not - set, the corresponding address bits are assumed - to match. Also, note that IOBDMAs do not have - proper addresses, so when TRA_FILT_CMD[IOBDMA] - is set, TRA_FILT_ADR_MSK must be zero to - guarantee that any IOBDMAs enter the trace. */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_filt_adr_msk_s cn31xx; - struct cvmx_tra_filt_adr_msk_s cn38xx; - struct cvmx_tra_filt_adr_msk_s cn38xxp2; - struct cvmx_tra_filt_adr_msk_s cn52xx; - struct cvmx_tra_filt_adr_msk_s cn52xxp1; - struct cvmx_tra_filt_adr_msk_s cn56xx; - struct cvmx_tra_filt_adr_msk_s cn56xxp1; - struct cvmx_tra_filt_adr_msk_s cn58xx; - struct cvmx_tra_filt_adr_msk_s cn58xxp1; -} cvmx_tra_filt_adr_msk_t; - - -/** - * cvmx_tra_filt_cmd - * - * TRA_FILT_CMD = Trace Buffer Filter Command Mask - * - * Description: - * - * Notes: - * Note that the trace buffer does not do proper IOBDMA address compares. Thus, if IOBDMA is set, then - * the address compare must be disabled (i.e. TRA_FILT_ADR_MSK set to zero) to guarantee that IOBDMAs - * enter the trace. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_filt_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t saa : 1; /**< Enable SAA tracing - 0=disable, 1=enable */ - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t saa : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_tra_filt_cmd_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn31xx; - struct cvmx_tra_filt_cmd_cn31xx cn38xx; - struct cvmx_tra_filt_cmd_cn31xx cn38xxp2; - struct cvmx_tra_filt_cmd_s cn52xx; - struct cvmx_tra_filt_cmd_s cn52xxp1; - struct cvmx_tra_filt_cmd_s cn56xx; - struct cvmx_tra_filt_cmd_s cn56xxp1; - struct cvmx_tra_filt_cmd_s cn58xx; - struct cvmx_tra_filt_cmd_s cn58xxp1; -} cvmx_tra_filt_cmd_t; - - -/** - * cvmx_tra_filt_did - * - * TRA_FILT_DID = Trace Buffer Filter DestinationId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_filt_did_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t illegal : 19; /**< Illegal destinations */ - uint64_t pow : 1; /**< Enable tracing of requests to POW - (get work, add work, status/memory/index - loads, NULLRd loads, CSR's) */ - uint64_t illegal2 : 3; /**< Illegal destinations */ - uint64_t rng : 1; /**< Enable tracing of requests to RNG - (loads/IOBDMA's are legal) */ - uint64_t zip : 1; /**< Enable tracing of requests to ZIP - (doorbell stores are legal) */ - uint64_t dfa : 1; /**< Enable tracing of requests to DFA - (CSR's and operations are legal) */ - uint64_t fpa : 1; /**< Enable tracing of requests to FPA - (alloc's (loads/IOBDMA's), frees (stores) are legal) */ - uint64_t key : 1; /**< Enable tracing of requests to KEY memory - (loads/IOBDMA's/stores are legal) */ - uint64_t pci : 1; /**< Enable tracing of requests to PCI and RSL-type - CSR's (RSL CSR's, PCI bus operations, PCI - CSR's) */ - uint64_t illegal3 : 2; /**< Illegal destinations */ - uint64_t mio : 1; /**< Enable tracing of CIU and GPIO CSR's */ -#else - uint64_t mio : 1; - uint64_t illegal3 : 2; - uint64_t pci : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rng : 1; - uint64_t illegal2 : 3; - uint64_t pow : 1; - uint64_t illegal : 19; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_tra_filt_did_s cn31xx; - struct cvmx_tra_filt_did_s cn38xx; - struct cvmx_tra_filt_did_s cn38xxp2; - struct cvmx_tra_filt_did_s cn52xx; - struct cvmx_tra_filt_did_s cn52xxp1; - struct cvmx_tra_filt_did_s cn56xx; - struct cvmx_tra_filt_did_s cn56xxp1; - struct cvmx_tra_filt_did_s cn58xx; - struct cvmx_tra_filt_did_s cn58xxp1; -} cvmx_tra_filt_did_t; - - -/** - * cvmx_tra_filt_sid - * - * TRA_FILT_SID = Trace Buffer Filter SourceId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_filt_sid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t dwb : 1; /**< Enable tracing of requests from the IOB DWB engine */ - uint64_t iobreq : 1; /**< Enable tracing of requests from FPA,TIM,DFA, - PCI,ZIP,POW, and PKO (writes) */ - uint64_t pko : 1; /**< Enable tracing of read requests from PKO */ - uint64_t pki : 1; /**< Enable tracing of write requests from PIP/IPD */ - uint64_t pp : 16; /**< Enable tracing from PP[N] with matching SourceID - 0=disable, 1=enableper bit N where 0<=N<=15 */ -#else - uint64_t pp : 16; - uint64_t pki : 1; - uint64_t pko : 1; - uint64_t iobreq : 1; - uint64_t dwb : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_tra_filt_sid_s cn31xx; - struct cvmx_tra_filt_sid_s cn38xx; - struct cvmx_tra_filt_sid_s cn38xxp2; - struct cvmx_tra_filt_sid_s cn52xx; - struct cvmx_tra_filt_sid_s cn52xxp1; - struct cvmx_tra_filt_sid_s cn56xx; - struct cvmx_tra_filt_sid_s cn56xxp1; - struct cvmx_tra_filt_sid_s cn58xx; - struct cvmx_tra_filt_sid_s cn58xxp1; -} cvmx_tra_filt_sid_t; - - -/** - * cvmx_tra_int_status - * - * TRA_INT_STATUS = Trace Buffer Interrupt Status - * - * Description: - * - * Notes: - * During a CSR write to this register, the write data is used as a mask to clear the selected status - * bits (status'[3:0] = status[3:0] & ~write_data[3:0]). - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_int_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_4_63 : 60; - uint64_t mcd0_thr : 1; /**< MCD0 full threshold interrupt status - 0=trace buffer did not generate MCD0 wire pulse - 1=trace buffer did generate MCD0 wire pulse - and prevents additional MCD0_THR MCD0 wire pulses */ - uint64_t mcd0_trg : 1; /**< MCD0 end trigger interrupt status - 0=trace buffer did not generate interrupt - 1=trace buffer did generate interrupt - and prevents additional MCD0_TRG MCD0 wire pulses */ - uint64_t ciu_thr : 1; /**< CIU full threshold interrupt status - 0=trace buffer did not generate interrupt - 1=trace buffer did generate interrupt */ - uint64_t ciu_trg : 1; /**< CIU end trigger interrupt status - 0=trace buffer did not generate interrupt - 1=trace buffer did generate interrupt */ -#else - uint64_t ciu_trg : 1; - uint64_t ciu_thr : 1; - uint64_t mcd0_trg : 1; - uint64_t mcd0_thr : 1; - uint64_t reserved_4_63 : 60; -#endif - } s; - struct cvmx_tra_int_status_s cn31xx; - struct cvmx_tra_int_status_s cn38xx; - struct cvmx_tra_int_status_s cn38xxp2; - struct cvmx_tra_int_status_s cn52xx; - struct cvmx_tra_int_status_s cn52xxp1; - struct cvmx_tra_int_status_s cn56xx; - struct cvmx_tra_int_status_s cn56xxp1; - struct cvmx_tra_int_status_s cn58xx; - struct cvmx_tra_int_status_s cn58xxp1; -} cvmx_tra_int_status_t; - - -/** - * cvmx_tra_read_dat - * - * TRA_READ_DAT = Trace Buffer Read Data - * - * Description: - * - * Notes: - * This CSR is a memory of 1024 entries. When the trace was enabled, the read pointer was set to entry - * 0 by hardware. Each read to this address increments the read pointer. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_read_dat_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t data : 64; /**< Trace buffer data for current entry */ -#else - uint64_t data : 64; -#endif - } s; - struct cvmx_tra_read_dat_s cn31xx; - struct cvmx_tra_read_dat_s cn38xx; - struct cvmx_tra_read_dat_s cn38xxp2; - struct cvmx_tra_read_dat_s cn52xx; - struct cvmx_tra_read_dat_s cn52xxp1; - struct cvmx_tra_read_dat_s cn56xx; - struct cvmx_tra_read_dat_s cn56xxp1; - struct cvmx_tra_read_dat_s cn58xx; - struct cvmx_tra_read_dat_s cn58xxp1; -} cvmx_tra_read_dat_t; - - -/** - * cvmx_tra_trig0_adr_adr - * - * TRA_TRIG0_ADR_ADR = Trace Buffer Filter Address Address - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig0_adr_adr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Unmasked Address - The combination of TRA_TRIG0_ADR_ADR and - TRA_TRIG0_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_trig0_adr_adr_s cn31xx; - struct cvmx_tra_trig0_adr_adr_s cn38xx; - struct cvmx_tra_trig0_adr_adr_s cn38xxp2; - struct cvmx_tra_trig0_adr_adr_s cn52xx; - struct cvmx_tra_trig0_adr_adr_s cn52xxp1; - struct cvmx_tra_trig0_adr_adr_s cn56xx; - struct cvmx_tra_trig0_adr_adr_s cn56xxp1; - struct cvmx_tra_trig0_adr_adr_s cn58xx; - struct cvmx_tra_trig0_adr_adr_s cn58xxp1; -} cvmx_tra_trig0_adr_adr_t; - - -/** - * cvmx_tra_trig0_adr_msk - * - * TRA_TRIG0_ADR_MSK = Trace Buffer Filter Address Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig0_adr_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Address Mask - The combination of TRA_TRIG0_ADR_ADR and - TRA_TRIG0_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches. When a mask bit is not - set, the corresponding address bits are assumed - to match. Also, note that IOBDMAs do not have - proper addresses, so when TRA_TRIG0_CMD[IOBDMA] - is set, TRA_FILT_TRIG0_MSK must be zero to - guarantee that any IOBDMAs are recognized as - triggers. */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_trig0_adr_msk_s cn31xx; - struct cvmx_tra_trig0_adr_msk_s cn38xx; - struct cvmx_tra_trig0_adr_msk_s cn38xxp2; - struct cvmx_tra_trig0_adr_msk_s cn52xx; - struct cvmx_tra_trig0_adr_msk_s cn52xxp1; - struct cvmx_tra_trig0_adr_msk_s cn56xx; - struct cvmx_tra_trig0_adr_msk_s cn56xxp1; - struct cvmx_tra_trig0_adr_msk_s cn58xx; - struct cvmx_tra_trig0_adr_msk_s cn58xxp1; -} cvmx_tra_trig0_adr_msk_t; - - -/** - * cvmx_tra_trig0_cmd - * - * TRA_TRIG0_CMD = Trace Buffer Filter Command Mask - * - * Description: - * - * Notes: - * Note that the trace buffer does not do proper IOBDMA address compares. Thus, if IOBDMA is set, then - * the address compare must be disabled (i.e. TRA_TRIG0_ADR_MSK set to zero) to guarantee that IOBDMAs - * are recognized as triggers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig0_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t saa : 1; /**< Enable SAA tracing - 0=disable, 1=enable */ - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t saa : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_tra_trig0_cmd_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn31xx; - struct cvmx_tra_trig0_cmd_cn31xx cn38xx; - struct cvmx_tra_trig0_cmd_cn31xx cn38xxp2; - struct cvmx_tra_trig0_cmd_s cn52xx; - struct cvmx_tra_trig0_cmd_s cn52xxp1; - struct cvmx_tra_trig0_cmd_s cn56xx; - struct cvmx_tra_trig0_cmd_s cn56xxp1; - struct cvmx_tra_trig0_cmd_s cn58xx; - struct cvmx_tra_trig0_cmd_s cn58xxp1; -} cvmx_tra_trig0_cmd_t; - - -/** - * cvmx_tra_trig0_did - * - * TRA_TRIG0_DID = Trace Buffer Filter DestinationId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig0_did_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t illegal : 19; /**< Illegal destinations */ - uint64_t pow : 1; /**< Enable triggering on requests to POW - (get work, add work, status/memory/index - loads, NULLRd loads, CSR's) */ - uint64_t illegal2 : 3; /**< Illegal destinations */ - uint64_t rng : 1; /**< Enable triggering on requests to RNG - (loads/IOBDMA's are legal) */ - uint64_t zip : 1; /**< Enable triggering on requests to ZIP - (doorbell stores are legal) */ - uint64_t dfa : 1; /**< Enable triggering on requests to DFA - (CSR's and operations are legal) */ - uint64_t fpa : 1; /**< Enable triggering on requests to FPA - (alloc's (loads/IOBDMA's), frees (stores) are legal) */ - uint64_t key : 1; /**< Enable triggering on requests to KEY memory - (loads/IOBDMA's/stores are legal) */ - uint64_t pci : 1; /**< Enable triggering on requests to PCI and RSL-type - CSR's (RSL CSR's, PCI bus operations, PCI - CSR's) */ - uint64_t illegal3 : 2; /**< Illegal destinations */ - uint64_t mio : 1; /**< Enable triggering on CIU and GPIO CSR's */ -#else - uint64_t mio : 1; - uint64_t illegal3 : 2; - uint64_t pci : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rng : 1; - uint64_t illegal2 : 3; - uint64_t pow : 1; - uint64_t illegal : 19; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_tra_trig0_did_s cn31xx; - struct cvmx_tra_trig0_did_s cn38xx; - struct cvmx_tra_trig0_did_s cn38xxp2; - struct cvmx_tra_trig0_did_s cn52xx; - struct cvmx_tra_trig0_did_s cn52xxp1; - struct cvmx_tra_trig0_did_s cn56xx; - struct cvmx_tra_trig0_did_s cn56xxp1; - struct cvmx_tra_trig0_did_s cn58xx; - struct cvmx_tra_trig0_did_s cn58xxp1; -} cvmx_tra_trig0_did_t; - - -/** - * cvmx_tra_trig0_sid - * - * TRA_TRIG0_SID = Trace Buffer Filter SourceId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig0_sid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t dwb : 1; /**< Enable triggering on requests from the IOB DWB engine */ - uint64_t iobreq : 1; /**< Enable triggering on requests from FPA,TIM,DFA, - PCI,ZIP,POW, and PKO (writes) */ - uint64_t pko : 1; /**< Enable triggering on read requests from PKO */ - uint64_t pki : 1; /**< Enable triggering on write requests from PIP/IPD */ - uint64_t pp : 16; /**< Enable triggering from PP[N] with matching SourceID - 0=disable, 1=enableper bit N where 0<=N<=15 */ -#else - uint64_t pp : 16; - uint64_t pki : 1; - uint64_t pko : 1; - uint64_t iobreq : 1; - uint64_t dwb : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_tra_trig0_sid_s cn31xx; - struct cvmx_tra_trig0_sid_s cn38xx; - struct cvmx_tra_trig0_sid_s cn38xxp2; - struct cvmx_tra_trig0_sid_s cn52xx; - struct cvmx_tra_trig0_sid_s cn52xxp1; - struct cvmx_tra_trig0_sid_s cn56xx; - struct cvmx_tra_trig0_sid_s cn56xxp1; - struct cvmx_tra_trig0_sid_s cn58xx; - struct cvmx_tra_trig0_sid_s cn58xxp1; -} cvmx_tra_trig0_sid_t; - - -/** - * cvmx_tra_trig1_adr_adr - * - * TRA_TRIG1_ADR_ADR = Trace Buffer Filter Address Address - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig1_adr_adr_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Unmasked Address - The combination of TRA_TRIG1_ADR_ADR and - TRA_TRIG1_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_trig1_adr_adr_s cn31xx; - struct cvmx_tra_trig1_adr_adr_s cn38xx; - struct cvmx_tra_trig1_adr_adr_s cn38xxp2; - struct cvmx_tra_trig1_adr_adr_s cn52xx; - struct cvmx_tra_trig1_adr_adr_s cn52xxp1; - struct cvmx_tra_trig1_adr_adr_s cn56xx; - struct cvmx_tra_trig1_adr_adr_s cn56xxp1; - struct cvmx_tra_trig1_adr_adr_s cn58xx; - struct cvmx_tra_trig1_adr_adr_s cn58xxp1; -} cvmx_tra_trig1_adr_adr_t; - - -/** - * cvmx_tra_trig1_adr_msk - * - * TRA_TRIG1_ADR_MSK = Trace Buffer Filter Address Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig1_adr_msk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t adr : 36; /**< Address Mask - The combination of TRA_TRIG1_ADR_ADR and - TRA_TRIG1_ADR_MSK is a masked address to - enable tracing of only those commands whose - masked address matches. When a mask bit is not - set, the corresponding address bits are assumed - to match. Also, note that IOBDMAs do not have - proper addresses, so when TRA_TRIG1_CMD[IOBDMA] - is set, TRA_FILT_TRIG1_MSK must be zero to - guarantee that any IOBDMAs are recognized as - triggers. */ -#else - uint64_t adr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_tra_trig1_adr_msk_s cn31xx; - struct cvmx_tra_trig1_adr_msk_s cn38xx; - struct cvmx_tra_trig1_adr_msk_s cn38xxp2; - struct cvmx_tra_trig1_adr_msk_s cn52xx; - struct cvmx_tra_trig1_adr_msk_s cn52xxp1; - struct cvmx_tra_trig1_adr_msk_s cn56xx; - struct cvmx_tra_trig1_adr_msk_s cn56xxp1; - struct cvmx_tra_trig1_adr_msk_s cn58xx; - struct cvmx_tra_trig1_adr_msk_s cn58xxp1; -} cvmx_tra_trig1_adr_msk_t; - - -/** - * cvmx_tra_trig1_cmd - * - * TRA_TRIG1_CMD = Trace Buffer Filter Command Mask - * - * Description: - * - * Notes: - * Note that the trace buffer does not do proper IOBDMA address compares. Thus, if IOBDMA is set, then - * the address compare must be disabled (i.e. TRA_TRIG1_ADR_MSK set to zero) to guarantee that IOBDMAs - * are recognized as triggers. - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig1_cmd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_17_63 : 47; - uint64_t saa : 1; /**< Enable SAA tracing - 0=disable, 1=enable */ - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t saa : 1; - uint64_t reserved_17_63 : 47; -#endif - } s; - struct cvmx_tra_trig1_cmd_cn31xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_16_63 : 48; - uint64_t iobdma : 1; /**< Enable IOBDMA tracing - 0=disable, 1=enable */ - uint64_t iobst : 1; /**< Enable IOBST tracing - 0=disable, 1=enable */ - uint64_t iobld64 : 1; /**< Enable IOBLD64 tracing - 0=disable, 1=enable */ - uint64_t iobld32 : 1; /**< Enable IOBLD32 tracing - 0=disable, 1=enable */ - uint64_t iobld16 : 1; /**< Enable IOBLD16 tracing - 0=disable, 1=enable */ - uint64_t iobld8 : 1; /**< Enable IOBLD8 tracing - 0=disable, 1=enable */ - uint64_t stt : 1; /**< Enable STT tracing - 0=disable, 1=enable */ - uint64_t stp : 1; /**< Enable STP tracing - 0=disable, 1=enable */ - uint64_t stc : 1; /**< Enable STC tracing - 0=disable, 1=enable */ - uint64_t stf : 1; /**< Enable STF tracing - 0=disable, 1=enable */ - uint64_t ldt : 1; /**< Enable LDT tracing - 0=disable, 1=enable */ - uint64_t ldi : 1; /**< Enable LDI tracing - 0=disable, 1=enable */ - uint64_t ldd : 1; /**< Enable LDD tracing - 0=disable, 1=enable */ - uint64_t psl1 : 1; /**< Enable PSL1 tracing - 0=disable, 1=enable */ - uint64_t pl2 : 1; /**< Enable PL2 tracing - 0=disable, 1=enable */ - uint64_t dwb : 1; /**< Enable DWB tracing - 0=disable, 1=enable */ -#else - uint64_t dwb : 1; - uint64_t pl2 : 1; - uint64_t psl1 : 1; - uint64_t ldd : 1; - uint64_t ldi : 1; - uint64_t ldt : 1; - uint64_t stf : 1; - uint64_t stc : 1; - uint64_t stp : 1; - uint64_t stt : 1; - uint64_t iobld8 : 1; - uint64_t iobld16 : 1; - uint64_t iobld32 : 1; - uint64_t iobld64 : 1; - uint64_t iobst : 1; - uint64_t iobdma : 1; - uint64_t reserved_16_63 : 48; -#endif - } cn31xx; - struct cvmx_tra_trig1_cmd_cn31xx cn38xx; - struct cvmx_tra_trig1_cmd_cn31xx cn38xxp2; - struct cvmx_tra_trig1_cmd_s cn52xx; - struct cvmx_tra_trig1_cmd_s cn52xxp1; - struct cvmx_tra_trig1_cmd_s cn56xx; - struct cvmx_tra_trig1_cmd_s cn56xxp1; - struct cvmx_tra_trig1_cmd_s cn58xx; - struct cvmx_tra_trig1_cmd_s cn58xxp1; -} cvmx_tra_trig1_cmd_t; - - -/** - * cvmx_tra_trig1_did - * - * TRA_TRIG1_DID = Trace Buffer Filter DestinationId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig1_did_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_32_63 : 32; - uint64_t illegal : 19; /**< Illegal destinations */ - uint64_t pow : 1; /**< Enable triggering on requests to POW - (get work, add work, status/memory/index - loads, NULLRd loads, CSR's) */ - uint64_t illegal2 : 3; /**< Illegal destinations */ - uint64_t rng : 1; /**< Enable triggering on requests to RNG - (loads/IOBDMA's are legal) */ - uint64_t zip : 1; /**< Enable triggering on requests to ZIP - (doorbell stores are legal) */ - uint64_t dfa : 1; /**< Enable triggering on requests to DFA - (CSR's and operations are legal) */ - uint64_t fpa : 1; /**< Enable triggering on requests to FPA - (alloc's (loads/IOBDMA's), frees (stores) are legal) */ - uint64_t key : 1; /**< Enable triggering on requests to KEY memory - (loads/IOBDMA's/stores are legal) */ - uint64_t pci : 1; /**< Enable triggering on requests to PCI and RSL-type - CSR's (RSL CSR's, PCI bus operations, PCI - CSR's) */ - uint64_t illegal3 : 2; /**< Illegal destinations */ - uint64_t mio : 1; /**< Enable triggering on CIU and GPIO CSR's */ -#else - uint64_t mio : 1; - uint64_t illegal3 : 2; - uint64_t pci : 1; - uint64_t key : 1; - uint64_t fpa : 1; - uint64_t dfa : 1; - uint64_t zip : 1; - uint64_t rng : 1; - uint64_t illegal2 : 3; - uint64_t pow : 1; - uint64_t illegal : 19; - uint64_t reserved_32_63 : 32; -#endif - } s; - struct cvmx_tra_trig1_did_s cn31xx; - struct cvmx_tra_trig1_did_s cn38xx; - struct cvmx_tra_trig1_did_s cn38xxp2; - struct cvmx_tra_trig1_did_s cn52xx; - struct cvmx_tra_trig1_did_s cn52xxp1; - struct cvmx_tra_trig1_did_s cn56xx; - struct cvmx_tra_trig1_did_s cn56xxp1; - struct cvmx_tra_trig1_did_s cn58xx; - struct cvmx_tra_trig1_did_s cn58xxp1; -} cvmx_tra_trig1_did_t; - - -/** - * cvmx_tra_trig1_sid - * - * TRA_TRIG1_SID = Trace Buffer Filter SourceId Mask - * - * Description: - */ -typedef union -{ - uint64_t u64; - struct cvmx_tra_trig1_sid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t dwb : 1; /**< Enable triggering on requests from the IOB DWB engine */ - uint64_t iobreq : 1; /**< Enable triggering on requests from FPA,TIM,DFA, - PCI,ZIP,POW, and PKO (writes) */ - uint64_t pko : 1; /**< Enable triggering on read requests from PKO */ - uint64_t pki : 1; /**< Enable triggering on write requests from PIP/IPD */ - uint64_t pp : 16; /**< Enable trigering from PP[N] with matching SourceID - 0=disable, 1=enableper bit N where 0<=N<=15 */ -#else - uint64_t pp : 16; - uint64_t pki : 1; - uint64_t pko : 1; - uint64_t iobreq : 1; - uint64_t dwb : 1; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_tra_trig1_sid_s cn31xx; - struct cvmx_tra_trig1_sid_s cn38xx; - struct cvmx_tra_trig1_sid_s cn38xxp2; - struct cvmx_tra_trig1_sid_s cn52xx; - struct cvmx_tra_trig1_sid_s cn52xxp1; - struct cvmx_tra_trig1_sid_s cn56xx; - struct cvmx_tra_trig1_sid_s cn56xxp1; - struct cvmx_tra_trig1_sid_s cn58xx; - struct cvmx_tra_trig1_sid_s cn58xxp1; -} cvmx_tra_trig1_sid_t; - - -/** - * cvmx_usbc#_daint - * - * Device All Endpoints Interrupt Register (DAINT) - * - * When a significant event occurs on an endpoint, a Device All Endpoints Interrupt register - * interrupts the application using the Device OUT Endpoints Interrupt bit or Device IN Endpoints - * Interrupt bit of the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt, respectively). - * There is one interrupt bit per endpoint, up to a maximum of 16 bits for OUT endpoints and 16 - * bits for IN endpoints. For a bidirectional endpoint, the corresponding IN and OUT interrupt - * bits are used. Bits in this register are set and cleared when the application sets and clears - * bits in the corresponding Device Endpoint-n Interrupt register (DIEPINTn/DOEPINTn). - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_daint_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t outepint : 16; /**< OUT Endpoint Interrupt Bits (OutEPInt) - One bit per OUT endpoint: - Bit 16 for OUT endpoint 0, bit 31 for OUT endpoint 15 */ - uint32_t inepint : 16; /**< IN Endpoint Interrupt Bits (InEpInt) - One bit per IN Endpoint: - Bit 0 for IN endpoint 0, bit 15 for endpoint 15 */ -#else - uint32_t inepint : 16; - uint32_t outepint : 16; -#endif - } s; - struct cvmx_usbcx_daint_s cn30xx; - struct cvmx_usbcx_daint_s cn31xx; - struct cvmx_usbcx_daint_s cn50xx; - struct cvmx_usbcx_daint_s cn52xx; - struct cvmx_usbcx_daint_s cn52xxp1; - struct cvmx_usbcx_daint_s cn56xx; - struct cvmx_usbcx_daint_s cn56xxp1; -} cvmx_usbcx_daint_t; - - -/** - * cvmx_usbc#_daintmsk - * - * Device All Endpoints Interrupt Mask Register (DAINTMSK) - * - * The Device Endpoint Interrupt Mask register works with the Device Endpoint Interrupt register - * to interrupt the application when an event occurs on a device endpoint. However, the Device - * All Endpoints Interrupt (DAINT) register bit corresponding to that interrupt will still be set. - * Mask Interrupt: 1'b0 Unmask Interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_daintmsk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t outepmsk : 16; /**< OUT EP Interrupt Mask Bits (OutEpMsk) - One per OUT Endpoint: - Bit 16 for OUT EP 0, bit 31 for OUT EP 15 */ - uint32_t inepmsk : 16; /**< IN EP Interrupt Mask Bits (InEpMsk) - One bit per IN Endpoint: - Bit 0 for IN EP 0, bit 15 for IN EP 15 */ -#else - uint32_t inepmsk : 16; - uint32_t outepmsk : 16; -#endif - } s; - struct cvmx_usbcx_daintmsk_s cn30xx; - struct cvmx_usbcx_daintmsk_s cn31xx; - struct cvmx_usbcx_daintmsk_s cn50xx; - struct cvmx_usbcx_daintmsk_s cn52xx; - struct cvmx_usbcx_daintmsk_s cn52xxp1; - struct cvmx_usbcx_daintmsk_s cn56xx; - struct cvmx_usbcx_daintmsk_s cn56xxp1; -} cvmx_usbcx_daintmsk_t; - - -/** - * cvmx_usbc#_dcfg - * - * Device Configuration Register (DCFG) - * - * This register configures the core in Device mode after power-on or after certain control - * commands or enumeration. Do not make changes to this register after initial programming. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_23_31 : 9; - uint32_t epmiscnt : 5; /**< IN Endpoint Mismatch Count (EPMisCnt) - The application programs this filed with a count that determines - when the core generates an Endpoint Mismatch interrupt - (GINTSTS.EPMis). The core loads this value into an internal - counter and decrements it. The counter is reloaded whenever - there is a match or when the counter expires. The width of this - counter depends on the depth of the Token Queue. */ - uint32_t reserved_13_17 : 5; - uint32_t perfrint : 2; /**< Periodic Frame Interval (PerFrInt) - Indicates the time within a (micro)frame at which the application - must be notified using the End Of Periodic Frame Interrupt. This - can be used to determine if all the isochronous traffic for that - (micro)frame is complete. - * 2'b00: 80% of the (micro)frame interval - * 2'b01: 85% - * 2'b10: 90% - * 2'b11: 95% */ - uint32_t devaddr : 7; /**< Device Address (DevAddr) - The application must program this field after every SetAddress - control command. */ - uint32_t reserved_3_3 : 1; - uint32_t nzstsouthshk : 1; /**< Non-Zero-Length Status OUT Handshake (NZStsOUTHShk) - The application can use this field to select the handshake the - core sends on receiving a nonzero-length data packet during - the OUT transaction of a control transfer's Status stage. - * 1'b1: Send a STALL handshake on a nonzero-length status - OUT transaction and do not send the received OUT packet to - the application. - * 1'b0: Send the received OUT packet to the application (zero- - length or nonzero-length) and send a handshake based on - the NAK and STALL bits for the endpoint in the Device - Endpoint Control register. */ - uint32_t devspd : 2; /**< Device Speed (DevSpd) - Indicates the speed at which the application requires the core to - enumerate, or the maximum speed the application can support. - However, the actual bus speed is determined only after the - chirp sequence is completed, and is based on the speed of the - USB host to which the core is connected. See "Device - Initialization" on page 249 for details. - * 2'b00: High speed (USB 2.0 PHY clock is 30 MHz or 60 MHz) - * 2'b01: Full speed (USB 2.0 PHY clock is 30 MHz or 60 MHz) - * 2'b10: Low speed (USB 1.1 transceiver clock is 6 MHz). If - you select 6 MHz LS mode, you must do a soft reset. - * 2'b11: Full speed (USB 1.1 transceiver clock is 48 MHz) */ -#else - uint32_t devspd : 2; - uint32_t nzstsouthshk : 1; - uint32_t reserved_3_3 : 1; - uint32_t devaddr : 7; - uint32_t perfrint : 2; - uint32_t reserved_13_17 : 5; - uint32_t epmiscnt : 5; - uint32_t reserved_23_31 : 9; -#endif - } s; - struct cvmx_usbcx_dcfg_s cn30xx; - struct cvmx_usbcx_dcfg_s cn31xx; - struct cvmx_usbcx_dcfg_s cn50xx; - struct cvmx_usbcx_dcfg_s cn52xx; - struct cvmx_usbcx_dcfg_s cn52xxp1; - struct cvmx_usbcx_dcfg_s cn56xx; - struct cvmx_usbcx_dcfg_s cn56xxp1; -} cvmx_usbcx_dcfg_t; - - -/** - * cvmx_usbc#_dctl - * - * Device Control Register (DCTL) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_12_31 : 20; - uint32_t pwronprgdone : 1; /**< Power-On Programming Done (PWROnPrgDone) - The application uses this bit to indicate that register - programming is completed after a wake-up from Power Down - mode. For more information, see "Device Mode Suspend and - Resume With Partial Power-Down" on page 357. */ - uint32_t cgoutnak : 1; /**< Clear Global OUT NAK (CGOUTNak) - A write to this field clears the Global OUT NAK. */ - uint32_t sgoutnak : 1; /**< Set Global OUT NAK (SGOUTNak) - A write to this field sets the Global OUT NAK. - The application uses this bit to send a NAK handshake on all - OUT endpoints. - The application should set the this bit only after making sure - that the Global OUT NAK Effective bit in the Core Interrupt - Register (GINTSTS.GOUTNakEff) is cleared. */ - uint32_t cgnpinnak : 1; /**< Clear Global Non-Periodic IN NAK (CGNPInNak) - A write to this field clears the Global Non-Periodic IN NAK. */ - uint32_t sgnpinnak : 1; /**< Set Global Non-Periodic IN NAK (SGNPInNak) - A write to this field sets the Global Non-Periodic IN NAK.The - application uses this bit to send a NAK handshake on all non- - periodic IN endpoints. The core can also set this bit when a - timeout condition is detected on a non-periodic endpoint. - The application should set this bit only after making sure that - the Global IN NAK Effective bit in the Core Interrupt Register - (GINTSTS.GINNakEff) is cleared. */ - uint32_t tstctl : 3; /**< Test Control (TstCtl) - * 3'b000: Test mode disabled - * 3'b001: Test_J mode - * 3'b010: Test_K mode - * 3'b011: Test_SE0_NAK mode - * 3'b100: Test_Packet mode - * 3'b101: Test_Force_Enable - * Others: Reserved */ - uint32_t goutnaksts : 1; /**< Global OUT NAK Status (GOUTNakSts) - * 1'b0: A handshake is sent based on the FIFO Status and the - NAK and STALL bit settings. - * 1'b1: No data is written to the RxFIFO, irrespective of space - availability. Sends a NAK handshake on all packets, except - on SETUP transactions. All isochronous OUT packets are - dropped. */ - uint32_t gnpinnaksts : 1; /**< Global Non-Periodic IN NAK Status (GNPINNakSts) - * 1'b0: A handshake is sent out based on the data availability - in the transmit FIFO. - * 1'b1: A NAK handshake is sent out on all non-periodic IN - endpoints, irrespective of the data availability in the transmit - FIFO. */ - uint32_t sftdiscon : 1; /**< Soft Disconnect (SftDiscon) - The application uses this bit to signal the O2P USB core to do a - soft disconnect. As long as this bit is set, the host will not see - that the device is connected, and the device will not receive - signals on the USB. The core stays in the disconnected state - until the application clears this bit. - The minimum duration for which the core must keep this bit set - is specified in Minimum Duration for Soft Disconnect . - * 1'b0: Normal operation. When this bit is cleared after a soft - disconnect, the core drives the phy_opmode_o signal on the - UTMI+ to 2'b00, which generates a device connect event to - the USB host. When the device is reconnected, the USB host - restarts device enumeration. - * 1'b1: The core drives the phy_opmode_o signal on the - UTMI+ to 2'b01, which generates a device disconnect event - to the USB host. */ - uint32_t rmtwkupsig : 1; /**< Remote Wakeup Signaling (RmtWkUpSig) - When the application sets this bit, the core initiates remote - signaling to wake up the USB host.The application must set this - bit to get the core out of Suspended state and must clear this bit - after the core comes out of Suspended state. */ -#else - uint32_t rmtwkupsig : 1; - uint32_t sftdiscon : 1; - uint32_t gnpinnaksts : 1; - uint32_t goutnaksts : 1; - uint32_t tstctl : 3; - uint32_t sgnpinnak : 1; - uint32_t cgnpinnak : 1; - uint32_t sgoutnak : 1; - uint32_t cgoutnak : 1; - uint32_t pwronprgdone : 1; - uint32_t reserved_12_31 : 20; -#endif - } s; - struct cvmx_usbcx_dctl_s cn30xx; - struct cvmx_usbcx_dctl_s cn31xx; - struct cvmx_usbcx_dctl_s cn50xx; - struct cvmx_usbcx_dctl_s cn52xx; - struct cvmx_usbcx_dctl_s cn52xxp1; - struct cvmx_usbcx_dctl_s cn56xx; - struct cvmx_usbcx_dctl_s cn56xxp1; -} cvmx_usbcx_dctl_t; - - -/** - * cvmx_usbc#_diepctl# - * - * Device IN Endpoint-n Control Register (DIEPCTLn) - * - * The application uses the register to control the behaviour of each logical endpoint other than endpoint 0. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_diepctlx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t epena : 1; /**< Endpoint Enable (EPEna) - Indicates that data is ready to be transmitted on the endpoint. - The core clears this bit before setting any of the following - interrupts on this endpoint: - * Endpoint Disabled - * Transfer Completed */ - uint32_t epdis : 1; /**< Endpoint Disable (EPDis) - The application sets this bit to stop transmitting data on an - endpoint, even before the transfer for that endpoint is complete. - The application must wait for the Endpoint Disabled interrupt - before treating the endpoint as disabled. The core clears this bit - before setting the Endpoint Disabled Interrupt. The application - should set this bit only if Endpoint Enable is already set for this - endpoint. */ - uint32_t setd1pid : 1; /**< For Interrupt/BULK enpoints: - Set DATA1 PID (SetD1PID) - Writing to this field sets the Endpoint Data Pid (DPID) field in - this register to DATA1. - For Isochronous endpoints: - Set Odd (micro)frame (SetOddFr) - Writing to this field sets the Even/Odd (micro)frame (EO_FrNum) - field to odd (micro)frame. */ - uint32_t setd0pid : 1; /**< For Interrupt/BULK enpoints: - Writing to this field sets the Endpoint Data Pid (DPID) field in - this register to DATA0. - For Isochronous endpoints: - Set Odd (micro)frame (SetEvenFr) - Writing to this field sets the Even/Odd (micro)frame (EO_FrNum) - field to even (micro)frame. */ - uint32_t snak : 1; /**< Set NAK (SNAK) - A write to this bit sets the NAK bit for the endpoint. - Using this bit, the application can control the transmission of - NAK handshakes on an endpoint. The core can also set this bit - for an endpoint after a SETUP packet is received on the - endpoint. */ - uint32_t cnak : 1; /**< Clear NAK (CNAK) - A write to this bit clears the NAK bit for the endpoint. */ - uint32_t txfnum : 4; /**< TxFIFO Number (TxFNum) - Non-periodic endpoints must set this bit to zero. Periodic - endpoints must map this to the corresponding Periodic TxFIFO - number. - * 4'h0: Non-Periodic TxFIFO - * Others: Specified Periodic TxFIFO number */ - uint32_t stall : 1; /**< STALL Handshake (Stall) - For non-control, non-isochronous endpoints: - The application sets this bit to stall all tokens from the USB host - to this endpoint. If a NAK bit, Global Non-Periodic IN NAK, or - Global OUT NAK is set along with this bit, the STALL bit takes - priority. Only the application can clear this bit, never the core. - For control endpoints: - The application can only set this bit, and the core clears it, when - a SETUP token i received for this endpoint. If a NAK bit, Global - Non-Periodic IN NAK, or Global OUT NAK is set along with this - bit, the STALL bit takes priority. Irrespective of this bit's setting, - the core always responds to SETUP data packets with an ACK handshake. */ - uint32_t reserved_20_20 : 1; - uint32_t eptype : 2; /**< Endpoint Type (EPType) - This is the transfer type supported by this logical endpoint. - * 2'b00: Control - * 2'b01: Isochronous - * 2'b10: Bulk - * 2'b11: Interrupt */ - uint32_t naksts : 1; /**< NAK Status (NAKSts) - Indicates the following: - * 1'b0: The core is transmitting non-NAK handshakes based - on the FIFO status - * 1'b1: The core is transmitting NAK handshakes on this - endpoint. - When either the application or the core sets this bit: - * For non-isochronous IN endpoints: The core stops - transmitting any data on an IN endpoint, even if data is - available in the TxFIFO. - * For isochronous IN endpoints: The core sends out a zero- - length data packet, even if data is available in the TxFIFO. - Irrespective of this bit's setting, the core always responds to - SETUP data packets with an ACK handshake. */ - uint32_t dpid : 1; /**< For interrupt/bulk IN and OUT endpoints: - Endpoint Data PID (DPID) - Contains the PID of the packet to be received or transmitted on - this endpoint. The application should program the PID of the first - packet to be received or transmitted on this endpoint, after the - endpoint is activated. Applications use the SetD1PID and - SetD0PID fields of this register to program either DATA0 or - DATA1 PID. - * 1'b0: DATA0 - * 1'b1: DATA1 - For isochronous IN and OUT endpoints: - Even/Odd (Micro)Frame (EO_FrNum) - Indicates the (micro)frame number in which the core transmits/ - receives isochronous data for this endpoint. The application - should program the even/odd (micro) frame number in which it - intends to transmit/receive isochronous data for this endpoint - using the SetEvnFr and SetOddFr fields in this register. - * 1'b0: Even (micro)frame - * 1'b1: Odd (micro)frame */ - uint32_t usbactep : 1; /**< USB Active Endpoint (USBActEP) - Indicates whether this endpoint is active in the current - configuration and interface. The core clears this bit for all - endpoints (other than EP 0) after detecting a USB reset. After - receiving the SetConfiguration and SetInterface commands, the - application must program endpoint registers accordingly and set - this bit. */ - uint32_t nextep : 4; /**< Next Endpoint (NextEp) - Applies to non-periodic IN endpoints only. - Indicates the endpoint number to be fetched after the data for - the current endpoint is fetched. The core can access this field, - even when the Endpoint Enable (EPEna) bit is not set. This - field is not valid in Slave mode. */ - uint32_t mps : 11; /**< Maximum Packet Size (MPS) - Applies to IN and OUT endpoints. - The application must program this field with the maximum - packet size for the current logical endpoint. This value is in - bytes. */ -#else - uint32_t mps : 11; - uint32_t nextep : 4; - uint32_t usbactep : 1; - uint32_t dpid : 1; - uint32_t naksts : 1; - uint32_t eptype : 2; - uint32_t reserved_20_20 : 1; - uint32_t stall : 1; - uint32_t txfnum : 4; - uint32_t cnak : 1; - uint32_t snak : 1; - uint32_t setd0pid : 1; - uint32_t setd1pid : 1; - uint32_t epdis : 1; - uint32_t epena : 1; -#endif - } s; - struct cvmx_usbcx_diepctlx_s cn30xx; - struct cvmx_usbcx_diepctlx_s cn31xx; - struct cvmx_usbcx_diepctlx_s cn50xx; - struct cvmx_usbcx_diepctlx_s cn52xx; - struct cvmx_usbcx_diepctlx_s cn52xxp1; - struct cvmx_usbcx_diepctlx_s cn56xx; - struct cvmx_usbcx_diepctlx_s cn56xxp1; -} cvmx_usbcx_diepctlx_t; - - -/** - * cvmx_usbc#_diepint# - * - * Device Endpoint-n Interrupt Register (DIEPINTn) - * - * This register indicates the status of an endpoint with respect to - * USB- and AHB-related events. The application must read this register - * when the OUT Endpoints Interrupt bit or IN Endpoints Interrupt bit of - * the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt, - * respectively) is set. Before the application can read this register, - * it must first read the Device All Endpoints Interrupt (DAINT) register - * to get the exact endpoint number for the Device Endpoint-n Interrupt - * register. The application must clear the appropriate bit in this register - * to clear the corresponding bits in the DAINT and GINTSTS registers. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_diepintx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_7_31 : 25; - uint32_t inepnakeff : 1; /**< IN Endpoint NAK Effective (INEPNakEff) - Applies to periodic IN endpoints only. - Indicates that the IN endpoint NAK bit set by the application has - taken effect in the core. This bit can be cleared when the - application clears the IN endpoint NAK by writing to - DIEPCTLn.CNAK. - This interrupt indicates that the core has sampled the NAK bit - set (either by the application or by the core). - This interrupt does not necessarily mean that a NAK handshake - is sent on the USB. A STALL bit takes priority over a NAK bit. */ - uint32_t intknepmis : 1; /**< IN Token Received with EP Mismatch (INTknEPMis) - Applies to non-periodic IN endpoints only. - Indicates that the data in the top of the non-periodic TxFIFO - belongs to an endpoint other than the one for which the IN - token was received. This interrupt is asserted on the endpoint - for which the IN token was received. */ - uint32_t intkntxfemp : 1; /**< IN Token Received When TxFIFO is Empty (INTknTXFEmp) - Applies only to non-periodic IN endpoints. - Indicates that an IN token was received when the associated - TxFIFO (periodic/non-periodic) was empty. This interrupt is - asserted on the endpoint for which the IN token was received. */ - uint32_t timeout : 1; /**< Timeout Condition (TimeOUT) - Applies to non-isochronous IN endpoints only. - Indicates that the core has detected a timeout condition on the - USB for the last IN token on this endpoint. */ - uint32_t ahberr : 1; /**< AHB Error (AHBErr) - This is generated only in Internal DMA mode when there is an - AHB error during an AHB read/write. The application can read - the corresponding endpoint DMA address register to get the - error address. */ - uint32_t epdisbld : 1; /**< Endpoint Disabled Interrupt (EPDisbld) - This bit indicates that the endpoint is disabled per the - application's request. */ - uint32_t xfercompl : 1; /**< Transfer Completed Interrupt (XferCompl) - Indicates that the programmed transfer is complete on the AHB - as well as on the USB, for this endpoint. */ -#else - uint32_t xfercompl : 1; - uint32_t epdisbld : 1; - uint32_t ahberr : 1; - uint32_t timeout : 1; - uint32_t intkntxfemp : 1; - uint32_t intknepmis : 1; - uint32_t inepnakeff : 1; - uint32_t reserved_7_31 : 25; -#endif - } s; - struct cvmx_usbcx_diepintx_s cn30xx; - struct cvmx_usbcx_diepintx_s cn31xx; - struct cvmx_usbcx_diepintx_s cn50xx; - struct cvmx_usbcx_diepintx_s cn52xx; - struct cvmx_usbcx_diepintx_s cn52xxp1; - struct cvmx_usbcx_diepintx_s cn56xx; - struct cvmx_usbcx_diepintx_s cn56xxp1; -} cvmx_usbcx_diepintx_t; - - -/** - * cvmx_usbc#_diepmsk - * - * Device IN Endpoint Common Interrupt Mask Register (DIEPMSK) - * - * This register works with each of the Device IN Endpoint Interrupt (DIEPINTn) registers - * for all endpoints to generate an interrupt per IN endpoint. The IN endpoint interrupt - * for a specific status in the DIEPINTn register can be masked by writing to the corresponding - * bit in this register. Status bits are masked by default. - * Mask interrupt: 1'b0 Unmask interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_diepmsk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_7_31 : 25; - uint32_t inepnakeffmsk : 1; /**< IN Endpoint NAK Effective Mask (INEPNakEffMsk) */ - uint32_t intknepmismsk : 1; /**< IN Token received with EP Mismatch Mask (INTknEPMisMsk) */ - uint32_t intkntxfempmsk : 1; /**< IN Token Received When TxFIFO Empty Mask - (INTknTXFEmpMsk) */ - uint32_t timeoutmsk : 1; /**< Timeout Condition Mask (TimeOUTMsk) - (Non-isochronous endpoints) */ - uint32_t ahberrmsk : 1; /**< AHB Error Mask (AHBErrMsk) */ - uint32_t epdisbldmsk : 1; /**< Endpoint Disabled Interrupt Mask (EPDisbldMsk) */ - uint32_t xfercomplmsk : 1; /**< Transfer Completed Interrupt Mask (XferComplMsk) */ -#else - uint32_t xfercomplmsk : 1; - uint32_t epdisbldmsk : 1; - uint32_t ahberrmsk : 1; - uint32_t timeoutmsk : 1; - uint32_t intkntxfempmsk : 1; - uint32_t intknepmismsk : 1; - uint32_t inepnakeffmsk : 1; - uint32_t reserved_7_31 : 25; -#endif - } s; - struct cvmx_usbcx_diepmsk_s cn30xx; - struct cvmx_usbcx_diepmsk_s cn31xx; - struct cvmx_usbcx_diepmsk_s cn50xx; - struct cvmx_usbcx_diepmsk_s cn52xx; - struct cvmx_usbcx_diepmsk_s cn52xxp1; - struct cvmx_usbcx_diepmsk_s cn56xx; - struct cvmx_usbcx_diepmsk_s cn56xxp1; -} cvmx_usbcx_diepmsk_t; - - -/** - * cvmx_usbc#_dieptsiz# - * - * Device Endpoint-n Transfer Size Register (DIEPTSIZn) - * - * The application must modify this register before enabling the endpoint. - * Once the endpoint is enabled using Endpoint Enable bit of the Device Endpoint-n Control registers (DIEPCTLn.EPEna/DOEPCTLn.EPEna), - * the core modifies this register. The application can only read this register once the core has cleared the Endpoint Enable bit. - * This register is used only for endpoints other than Endpoint 0. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dieptsizx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_31_31 : 1; - uint32_t mc : 2; /**< Multi Count (MC) - Applies to IN endpoints only. - For periodic IN endpoints, this field indicates the number of - packets that must be transmitted per microframe on the USB. - The core uses this field to calculate the data PID for - isochronous IN endpoints. - * 2'b01: 1 packet - * 2'b10: 2 packets - * 2'b11: 3 packets - For non-periodic IN endpoints, this field is valid only in Internal - DMA mode. It specifies the number of packets the core should - fetch for an IN endpoint before it switches to the endpoint - pointed to by the Next Endpoint field of the Device Endpoint-n - Control register (DIEPCTLn.NextEp) */ - uint32_t pktcnt : 10; /**< Packet Count (PktCnt) - Indicates the total number of USB packets that constitute the - Transfer Size amount of data for this endpoint. - IN Endpoints: This field is decremented every time a packet - (maximum size or short packet) is read from the TxFIFO. */ - uint32_t xfersize : 19; /**< Transfer Size (XferSize) - This field contains the transfer size in bytes for the current - endpoint. - The core only interrupts the application after it has exhausted - the transfer size amount of data. The transfer size can be set to - the maximum packet size of the endpoint, to be interrupted at - the end of each packet. - IN Endpoints: The core decrements this field every time a - packet from the external memory is written to the TxFIFO. */ -#else - uint32_t xfersize : 19; - uint32_t pktcnt : 10; - uint32_t mc : 2; - uint32_t reserved_31_31 : 1; -#endif - } s; - struct cvmx_usbcx_dieptsizx_s cn30xx; - struct cvmx_usbcx_dieptsizx_s cn31xx; - struct cvmx_usbcx_dieptsizx_s cn50xx; - struct cvmx_usbcx_dieptsizx_s cn52xx; - struct cvmx_usbcx_dieptsizx_s cn52xxp1; - struct cvmx_usbcx_dieptsizx_s cn56xx; - struct cvmx_usbcx_dieptsizx_s cn56xxp1; -} cvmx_usbcx_dieptsizx_t; - - -/** - * cvmx_usbc#_doepctl# - * - * Device OUT Endpoint-n Control Register (DOEPCTLn) - * - * The application uses the register to control the behaviour of each logical endpoint other than endpoint 0. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_doepctlx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t epena : 1; /**< Endpoint Enable (EPEna) - Indicates that the application has allocated the memory tp start - receiving data from the USB. - The core clears this bit before setting any of the following - interrupts on this endpoint: - * SETUP Phase Done - * Endpoint Disabled - * Transfer Completed - For control OUT endpoints in DMA mode, this bit must be set - to be able to transfer SETUP data packets in memory. */ - uint32_t epdis : 1; /**< Endpoint Disable (EPDis) - The application sets this bit to stop transmitting data on an - endpoint, even before the transfer for that endpoint is complete. - The application must wait for the Endpoint Disabled interrupt - before treating the endpoint as disabled. The core clears this bit - before setting the Endpoint Disabled Interrupt. The application - should set this bit only if Endpoint Enable is already set for this - endpoint. */ - uint32_t setd1pid : 1; /**< For Interrupt/BULK enpoints: - Set DATA1 PID (SetD1PID) - Writing to this field sets the Endpoint Data Pid (DPID) field in - this register to DATA1. - For Isochronous endpoints: - Set Odd (micro)frame (SetOddFr) - Writing to this field sets the Even/Odd (micro)frame (EO_FrNum) - field to odd (micro)frame. */ - uint32_t setd0pid : 1; /**< For Interrupt/BULK enpoints: - Writing to this field sets the Endpoint Data Pid (DPID) field in - this register to DATA0. - For Isochronous endpoints: - Set Odd (micro)frame (SetEvenFr) - Writing to this field sets the Even/Odd (micro)frame (EO_FrNum) - field to even (micro)frame. */ - uint32_t snak : 1; /**< Set NAK (SNAK) - A write to this bit sets the NAK bit for the endpoint. - Using this bit, the application can control the transmission of - NAK handshakes on an endpoint. The core can also set this bit - for an endpoint after a SETUP packet is received on the - endpoint. */ - uint32_t cnak : 1; /**< Clear NAK (CNAK) - A write to this bit clears the NAK bit for the endpoint. */ - uint32_t reserved_22_25 : 4; - uint32_t stall : 1; /**< STALL Handshake (Stall) - For non-control, non-isochronous endpoints: - The application sets this bit to stall all tokens from the USB host - to this endpoint. If a NAK bit, Global Non-Periodic IN NAK, or - Global OUT NAK is set along with this bit, the STALL bit takes - priority. Only the application can clear this bit, never the core. - For control endpoints: - The application can only set this bit, and the core clears it, when - a SETUP token i received for this endpoint. If a NAK bit, Global - Non-Periodic IN NAK, or Global OUT NAK is set along with this - bit, the STALL bit takes priority. Irrespective of this bit's setting, - the core always responds to SETUP data packets with an ACK handshake. */ - uint32_t snp : 1; /**< Snoop Mode (Snp) - This bit configures the endpoint to Snoop mode. In Snoop mode, - the core does not check the correctness of OUT packets before - transferring them to application memory. */ - uint32_t eptype : 2; /**< Endpoint Type (EPType) - This is the transfer type supported by this logical endpoint. - * 2'b00: Control - * 2'b01: Isochronous - * 2'b10: Bulk - * 2'b11: Interrupt */ - uint32_t naksts : 1; /**< NAK Status (NAKSts) - Indicates the following: - * 1'b0: The core is transmitting non-NAK handshakes based - on the FIFO status - * 1'b1: The core is transmitting NAK handshakes on this - endpoint. - When either the application or the core sets this bit: - * The core stops receiving any data on an OUT endpoint, even - if there is space in the RxFIFO to accomodate the incoming - packet. */ - uint32_t dpid : 1; /**< For interrupt/bulk IN and OUT endpoints: - Endpoint Data PID (DPID) - Contains the PID of the packet to be received or transmitted on - this endpoint. The application should program the PID of the first - packet to be received or transmitted on this endpoint, after the - endpoint is activated. Applications use the SetD1PID and - SetD0PID fields of this register to program either DATA0 or - DATA1 PID. - * 1'b0: DATA0 - * 1'b1: DATA1 - For isochronous IN and OUT endpoints: - Even/Odd (Micro)Frame (EO_FrNum) - Indicates the (micro)frame number in which the core transmits/ - receives isochronous data for this endpoint. The application - should program the even/odd (micro) frame number in which it - intends to transmit/receive isochronous data for this endpoint - using the SetEvnFr and SetOddFr fields in this register. - * 1'b0: Even (micro)frame - * 1'b1: Odd (micro)frame */ - uint32_t usbactep : 1; /**< USB Active Endpoint (USBActEP) - Indicates whether this endpoint is active in the current - configuration and interface. The core clears this bit for all - endpoints (other than EP 0) after detecting a USB reset. After - receiving the SetConfiguration and SetInterface commands, the - application must program endpoint registers accordingly and set - this bit. */ - uint32_t reserved_11_14 : 4; - uint32_t mps : 11; /**< Maximum Packet Size (MPS) - Applies to IN and OUT endpoints. - The application must program this field with the maximum - packet size for the current logical endpoint. This value is in - bytes. */ -#else - uint32_t mps : 11; - uint32_t reserved_11_14 : 4; - uint32_t usbactep : 1; - uint32_t dpid : 1; - uint32_t naksts : 1; - uint32_t eptype : 2; - uint32_t snp : 1; - uint32_t stall : 1; - uint32_t reserved_22_25 : 4; - uint32_t cnak : 1; - uint32_t snak : 1; - uint32_t setd0pid : 1; - uint32_t setd1pid : 1; - uint32_t epdis : 1; - uint32_t epena : 1; -#endif - } s; - struct cvmx_usbcx_doepctlx_s cn30xx; - struct cvmx_usbcx_doepctlx_s cn31xx; - struct cvmx_usbcx_doepctlx_s cn50xx; - struct cvmx_usbcx_doepctlx_s cn52xx; - struct cvmx_usbcx_doepctlx_s cn52xxp1; - struct cvmx_usbcx_doepctlx_s cn56xx; - struct cvmx_usbcx_doepctlx_s cn56xxp1; -} cvmx_usbcx_doepctlx_t; - - -/** - * cvmx_usbc#_doepint# - * - * Device Endpoint-n Interrupt Register (DOEPINTn) - * - * This register indicates the status of an endpoint with respect to USB- and AHB-related events. - * The application must read this register when the OUT Endpoints Interrupt bit or IN Endpoints - * Interrupt bit of the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt, respectively) - * is set. Before the application can read this register, it must first read the Device All - * Endpoints Interrupt (DAINT) register to get the exact endpoint number for the Device Endpoint-n - * Interrupt register. The application must clear the appropriate bit in this register to clear the - * corresponding bits in the DAINT and GINTSTS registers. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_doepintx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t outtknepdis : 1; /**< OUT Token Received When Endpoint Disabled (OUTTknEPdis) - Applies only to control OUT endpoints. - Indicates that an OUT token was received when the endpoint - was not yet enabled. This interrupt is asserted on the endpoint - for which the OUT token was received. */ - uint32_t setup : 1; /**< SETUP Phase Done (SetUp) - Applies to control OUT endpoints only. - Indicates that the SETUP phase for the control endpoint is - complete and no more back-to-back SETUP packets were - received for the current control transfer. On this interrupt, the - application can decode the received SETUP data packet. */ - uint32_t ahberr : 1; /**< AHB Error (AHBErr) - This is generated only in Internal DMA mode when there is an - AHB error during an AHB read/write. The application can read - the corresponding endpoint DMA address register to get the - error address. */ - uint32_t epdisbld : 1; /**< Endpoint Disabled Interrupt (EPDisbld) - This bit indicates that the endpoint is disabled per the - application's request. */ - uint32_t xfercompl : 1; /**< Transfer Completed Interrupt (XferCompl) - Indicates that the programmed transfer is complete on the AHB - as well as on the USB, for this endpoint. */ -#else - uint32_t xfercompl : 1; - uint32_t epdisbld : 1; - uint32_t ahberr : 1; - uint32_t setup : 1; - uint32_t outtknepdis : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_usbcx_doepintx_s cn30xx; - struct cvmx_usbcx_doepintx_s cn31xx; - struct cvmx_usbcx_doepintx_s cn50xx; - struct cvmx_usbcx_doepintx_s cn52xx; - struct cvmx_usbcx_doepintx_s cn52xxp1; - struct cvmx_usbcx_doepintx_s cn56xx; - struct cvmx_usbcx_doepintx_s cn56xxp1; -} cvmx_usbcx_doepintx_t; - - -/** - * cvmx_usbc#_doepmsk - * - * Device OUT Endpoint Common Interrupt Mask Register (DOEPMSK) - * - * This register works with each of the Device OUT Endpoint Interrupt (DOEPINTn) registers - * for all endpoints to generate an interrupt per OUT endpoint. The OUT endpoint interrupt - * for a specific status in the DOEPINTn register can be masked by writing into the - * corresponding bit in this register. Status bits are masked by default. - * Mask interrupt: 1'b0 Unmask interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_doepmsk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t outtknepdismsk : 1; /**< OUT Token Received when Endpoint Disabled Mask - (OUTTknEPdisMsk) - Applies to control OUT endpoints only. */ - uint32_t setupmsk : 1; /**< SETUP Phase Done Mask (SetUPMsk) - Applies to control endpoints only. */ - uint32_t ahberrmsk : 1; /**< AHB Error (AHBErrMsk) */ - uint32_t epdisbldmsk : 1; /**< Endpoint Disabled Interrupt Mask (EPDisbldMsk) */ - uint32_t xfercomplmsk : 1; /**< Transfer Completed Interrupt Mask (XferComplMsk) */ -#else - uint32_t xfercomplmsk : 1; - uint32_t epdisbldmsk : 1; - uint32_t ahberrmsk : 1; - uint32_t setupmsk : 1; - uint32_t outtknepdismsk : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_usbcx_doepmsk_s cn30xx; - struct cvmx_usbcx_doepmsk_s cn31xx; - struct cvmx_usbcx_doepmsk_s cn50xx; - struct cvmx_usbcx_doepmsk_s cn52xx; - struct cvmx_usbcx_doepmsk_s cn52xxp1; - struct cvmx_usbcx_doepmsk_s cn56xx; - struct cvmx_usbcx_doepmsk_s cn56xxp1; -} cvmx_usbcx_doepmsk_t; - - -/** - * cvmx_usbc#_doeptsiz# - * - * Device Endpoint-n Transfer Size Register (DOEPTSIZn) - * - * The application must modify this register before enabling the endpoint. - * Once the endpoint is enabled using Endpoint Enable bit of the Device Endpoint-n Control - * registers (DOEPCTLn.EPEna/DOEPCTLn.EPEna), the core modifies this register. The application - * can only read this register once the core has cleared the Endpoint Enable bit. - * This register is used only for endpoints other than Endpoint 0. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_doeptsizx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_31_31 : 1; - uint32_t mc : 2; /**< Multi Count (MC) - Received Data PID (RxDPID) - Applies to isochronous OUT endpoints only. - This is the data PID received in the last packet for this endpoint. - 2'b00: DATA0 - 2'b01: DATA1 - 2'b10: DATA2 - 2'b11: MDATA - SETUP Packet Count (SUPCnt) - Applies to control OUT Endpoints only. - This field specifies the number of back-to-back SETUP data - packets the endpoint can receive. - 2'b01: 1 packet - 2'b10: 2 packets - 2'b11: 3 packets */ - uint32_t pktcnt : 10; /**< Packet Count (PktCnt) - Indicates the total number of USB packets that constitute the - Transfer Size amount of data for this endpoint. - OUT Endpoints: This field is decremented every time a - packet (maximum size or short packet) is written to the - RxFIFO. */ - uint32_t xfersize : 19; /**< Transfer Size (XferSize) - This field contains the transfer size in bytes for the current - endpoint. - The core only interrupts the application after it has exhausted - the transfer size amount of data. The transfer size can be set to - the maximum packet size of the endpoint, to be interrupted at - the end of each packet. - OUT Endpoints: The core decrements this field every time a - packet is read from the RxFIFO and written to the external - memory. */ -#else - uint32_t xfersize : 19; - uint32_t pktcnt : 10; - uint32_t mc : 2; - uint32_t reserved_31_31 : 1; -#endif - } s; - struct cvmx_usbcx_doeptsizx_s cn30xx; - struct cvmx_usbcx_doeptsizx_s cn31xx; - struct cvmx_usbcx_doeptsizx_s cn50xx; - struct cvmx_usbcx_doeptsizx_s cn52xx; - struct cvmx_usbcx_doeptsizx_s cn52xxp1; - struct cvmx_usbcx_doeptsizx_s cn56xx; - struct cvmx_usbcx_doeptsizx_s cn56xxp1; -} cvmx_usbcx_doeptsizx_t; - - -/** - * cvmx_usbc#_dptxfsiz# - * - * Device Periodic Transmit FIFO-n Size Register (DPTXFSIZ) - * - * This register holds the memory start address of each periodic TxFIFO to implemented - * in Device mode. Each periodic FIFO holds the data for one periodic IN endpoint. - * This register is repeated for each periodic FIFO instantiated. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dptxfsizx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dptxfsize : 16; /**< Device Periodic TxFIFO Size (DPTxFSize) - This value is in terms of 32-bit words. - * Minimum value is 4 - * Maximum value is 768 */ - uint32_t dptxfstaddr : 16; /**< Device Periodic TxFIFO RAM Start Address (DPTxFStAddr) - Holds the start address in the RAM for this periodic FIFO. */ -#else - uint32_t dptxfstaddr : 16; - uint32_t dptxfsize : 16; -#endif - } s; - struct cvmx_usbcx_dptxfsizx_s cn30xx; - struct cvmx_usbcx_dptxfsizx_s cn31xx; - struct cvmx_usbcx_dptxfsizx_s cn50xx; - struct cvmx_usbcx_dptxfsizx_s cn52xx; - struct cvmx_usbcx_dptxfsizx_s cn52xxp1; - struct cvmx_usbcx_dptxfsizx_s cn56xx; - struct cvmx_usbcx_dptxfsizx_s cn56xxp1; -} cvmx_usbcx_dptxfsizx_t; - - -/** - * cvmx_usbc#_dsts - * - * Device Status Register (DSTS) - * - * This register indicates the status of the core with respect to USB-related events. - * It must be read on interrupts from Device All Interrupts (DAINT) register. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dsts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_22_31 : 10; - uint32_t soffn : 14; /**< Frame or Microframe Number of the Received SOF (SOFFN) - When the core is operating at high speed, this field contains a - microframe number. When the core is operating at full or low - speed, this field contains a frame number. */ - uint32_t reserved_4_7 : 4; - uint32_t errticerr : 1; /**< Erratic Error (ErrticErr) - The core sets this bit to report any erratic errors - (phy_rxvalid_i/phy_rxvldh_i or phy_rxactive_i is asserted for at - least 2 ms, due to PHY error) seen on the UTMI+. - Due to erratic errors, the O2P USB core goes into Suspended - state and an interrupt is generated to the application with Early - Suspend bit of the Core Interrupt register (GINTSTS.ErlySusp). - If the early suspend is asserted due to an erratic error, the - application can only perform a soft disconnect recover. */ - uint32_t enumspd : 2; /**< Enumerated Speed (EnumSpd) - Indicates the speed at which the O2P USB core has come up - after speed detection through a chirp sequence. - * 2'b00: High speed (PHY clock is running at 30 or 60 MHz) - * 2'b01: Full speed (PHY clock is running at 30 or 60 MHz) - * 2'b10: Low speed (PHY clock is running at 6 MHz) - * 2'b11: Full speed (PHY clock is running at 48 MHz) - Low speed is not supported for devices using a UTMI+ PHY. */ - uint32_t suspsts : 1; /**< Suspend Status (SuspSts) - In Device mode, this bit is set as long as a Suspend condition is - detected on the USB. The core enters the Suspended state - when there is no activity on the phy_line_state_i signal for an - extended period of time. The core comes out of the suspend: - * When there is any activity on the phy_line_state_i signal - * When the application writes to the Remote Wakeup Signaling - bit in the Device Control register (DCTL.RmtWkUpSig). */ -#else - uint32_t suspsts : 1; - uint32_t enumspd : 2; - uint32_t errticerr : 1; - uint32_t reserved_4_7 : 4; - uint32_t soffn : 14; - uint32_t reserved_22_31 : 10; -#endif - } s; - struct cvmx_usbcx_dsts_s cn30xx; - struct cvmx_usbcx_dsts_s cn31xx; - struct cvmx_usbcx_dsts_s cn50xx; - struct cvmx_usbcx_dsts_s cn52xx; - struct cvmx_usbcx_dsts_s cn52xxp1; - struct cvmx_usbcx_dsts_s cn56xx; - struct cvmx_usbcx_dsts_s cn56xxp1; -} cvmx_usbcx_dsts_t; - - -/** - * cvmx_usbc#_dtknqr1 - * - * Device IN Token Sequence Learning Queue Read Register 1 (DTKNQR1) - * - * The depth of the IN Token Sequence Learning Queue is specified for Device Mode IN Token - * Sequence Learning Queue Depth. The queue is 4 bits wide to store the endpoint number. - * A read from this register returns the first 5 endpoint entries of the IN Token Sequence - * Learning Queue. When the queue is full, the new token is pushed into the queue and oldest - * token is discarded. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dtknqr1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t eptkn : 24; /**< Endpoint Token (EPTkn) - Four bits per token represent the endpoint number of the token: - * Bits [31:28]: Endpoint number of Token 5 - * Bits [27:24]: Endpoint number of Token 4 - - ....... - * Bits [15:12]: Endpoint number of Token 1 - * Bits [11:8]: Endpoint number of Token 0 */ - uint32_t wrapbit : 1; /**< Wrap Bit (WrapBit) - This bit is set when the write pointer wraps. It is cleared when - the learning queue is cleared. */ - uint32_t reserved_5_6 : 2; - uint32_t intknwptr : 5; /**< IN Token Queue Write Pointer (INTknWPtr) */ -#else - uint32_t intknwptr : 5; - uint32_t reserved_5_6 : 2; - uint32_t wrapbit : 1; - uint32_t eptkn : 24; -#endif - } s; - struct cvmx_usbcx_dtknqr1_s cn30xx; - struct cvmx_usbcx_dtknqr1_s cn31xx; - struct cvmx_usbcx_dtknqr1_s cn50xx; - struct cvmx_usbcx_dtknqr1_s cn52xx; - struct cvmx_usbcx_dtknqr1_s cn52xxp1; - struct cvmx_usbcx_dtknqr1_s cn56xx; - struct cvmx_usbcx_dtknqr1_s cn56xxp1; -} cvmx_usbcx_dtknqr1_t; - - -/** - * cvmx_usbc#_dtknqr2 - * - * Device IN Token Sequence Learning Queue Read Register 2 (DTKNQR2) - * - * A read from this register returns the next 8 endpoint entries of the learning queue. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dtknqr2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t eptkn : 32; /**< Endpoint Token (EPTkn) - Four bits per token represent the endpoint number of the token: - * Bits [31:28]: Endpoint number of Token 13 - * Bits [27:24]: Endpoint number of Token 12 - - ....... - * Bits [7:4]: Endpoint number of Token 7 - * Bits [3:0]: Endpoint number of Token 6 */ -#else - uint32_t eptkn : 32; -#endif - } s; - struct cvmx_usbcx_dtknqr2_s cn30xx; - struct cvmx_usbcx_dtknqr2_s cn31xx; - struct cvmx_usbcx_dtknqr2_s cn50xx; - struct cvmx_usbcx_dtknqr2_s cn52xx; - struct cvmx_usbcx_dtknqr2_s cn52xxp1; - struct cvmx_usbcx_dtknqr2_s cn56xx; - struct cvmx_usbcx_dtknqr2_s cn56xxp1; -} cvmx_usbcx_dtknqr2_t; - - -/** - * cvmx_usbc#_dtknqr3 - * - * Device IN Token Sequence Learning Queue Read Register 3 (DTKNQR3) - * - * A read from this register returns the next 8 endpoint entries of the learning queue. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dtknqr3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t eptkn : 32; /**< Endpoint Token (EPTkn) - Four bits per token represent the endpoint number of the token: - * Bits [31:28]: Endpoint number of Token 21 - * Bits [27:24]: Endpoint number of Token 20 - - ....... - * Bits [7:4]: Endpoint number of Token 15 - * Bits [3:0]: Endpoint number of Token 14 */ -#else - uint32_t eptkn : 32; -#endif - } s; - struct cvmx_usbcx_dtknqr3_s cn30xx; - struct cvmx_usbcx_dtknqr3_s cn31xx; - struct cvmx_usbcx_dtknqr3_s cn50xx; - struct cvmx_usbcx_dtknqr3_s cn52xx; - struct cvmx_usbcx_dtknqr3_s cn52xxp1; - struct cvmx_usbcx_dtknqr3_s cn56xx; - struct cvmx_usbcx_dtknqr3_s cn56xxp1; -} cvmx_usbcx_dtknqr3_t; - - -/** - * cvmx_usbc#_dtknqr4 - * - * Device IN Token Sequence Learning Queue Read Register 4 (DTKNQR4) - * - * A read from this register returns the last 8 endpoint entries of the learning queue. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_dtknqr4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t eptkn : 32; /**< Endpoint Token (EPTkn) - Four bits per token represent the endpoint number of the token: - * Bits [31:28]: Endpoint number of Token 29 - * Bits [27:24]: Endpoint number of Token 28 - - ....... - * Bits [7:4]: Endpoint number of Token 23 - * Bits [3:0]: Endpoint number of Token 22 */ -#else - uint32_t eptkn : 32; -#endif - } s; - struct cvmx_usbcx_dtknqr4_s cn30xx; - struct cvmx_usbcx_dtknqr4_s cn31xx; - struct cvmx_usbcx_dtknqr4_s cn50xx; - struct cvmx_usbcx_dtknqr4_s cn52xx; - struct cvmx_usbcx_dtknqr4_s cn52xxp1; - struct cvmx_usbcx_dtknqr4_s cn56xx; - struct cvmx_usbcx_dtknqr4_s cn56xxp1; -} cvmx_usbcx_dtknqr4_t; - - -/** - * cvmx_usbc#_gahbcfg - * - * Core AHB Configuration Register (GAHBCFG) - * - * This register can be used to configure the core after power-on or a change in mode of operation. - * This register mainly contains AHB system-related configuration parameters. The AHB is the processor - * interface to the O2P USB core. In general, software need not know about this interface except to - * program the values as specified. - * - * The application must program this register as part of the O2P USB core initialization. - * Do not change this register after the initial programming. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gahbcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_9_31 : 23; - uint32_t ptxfemplvl : 1; /**< Periodic TxFIFO Empty Level (PTxFEmpLvl) - Software should set this bit to 0x1. - Indicates when the Periodic TxFIFO Empty Interrupt bit in the - Core Interrupt register (GINTSTS.PTxFEmp) is triggered. This - bit is used only in Slave mode. - * 1'b0: GINTSTS.PTxFEmp interrupt indicates that the Periodic - TxFIFO is half empty - * 1'b1: GINTSTS.PTxFEmp interrupt indicates that the Periodic - TxFIFO is completely empty */ - uint32_t nptxfemplvl : 1; /**< Non-Periodic TxFIFO Empty Level (NPTxFEmpLvl) - Software should set this bit to 0x1. - Indicates when the Non-Periodic TxFIFO Empty Interrupt bit in - the Core Interrupt register (GINTSTS.NPTxFEmp) is triggered. - This bit is used only in Slave mode. - * 1'b0: GINTSTS.NPTxFEmp interrupt indicates that the Non- - Periodic TxFIFO is half empty - * 1'b1: GINTSTS.NPTxFEmp interrupt indicates that the Non- - Periodic TxFIFO is completely empty */ - uint32_t reserved_6_6 : 1; - uint32_t dmaen : 1; /**< DMA Enable (DMAEn) - * 1'b0: Core operates in Slave mode - * 1'b1: Core operates in a DMA mode */ - uint32_t hbstlen : 4; /**< Burst Length/Type (HBstLen) - This field has not effect and should be left as 0x0. */ - uint32_t glblintrmsk : 1; /**< Global Interrupt Mask (GlblIntrMsk) - Software should set this field to 0x1. - The application uses this bit to mask or unmask the interrupt - line assertion to itself. Irrespective of this bit's setting, the - interrupt status registers are updated by the core. - * 1'b0: Mask the interrupt assertion to the application. - * 1'b1: Unmask the interrupt assertion to the application. */ -#else - uint32_t glblintrmsk : 1; - uint32_t hbstlen : 4; - uint32_t dmaen : 1; - uint32_t reserved_6_6 : 1; - uint32_t nptxfemplvl : 1; - uint32_t ptxfemplvl : 1; - uint32_t reserved_9_31 : 23; -#endif - } s; - struct cvmx_usbcx_gahbcfg_s cn30xx; - struct cvmx_usbcx_gahbcfg_s cn31xx; - struct cvmx_usbcx_gahbcfg_s cn50xx; - struct cvmx_usbcx_gahbcfg_s cn52xx; - struct cvmx_usbcx_gahbcfg_s cn52xxp1; - struct cvmx_usbcx_gahbcfg_s cn56xx; - struct cvmx_usbcx_gahbcfg_s cn56xxp1; -} cvmx_usbcx_gahbcfg_t; - - -/** - * cvmx_usbc#_ghwcfg1 - * - * User HW Config1 Register (GHWCFG1) - * - * This register contains the logical endpoint direction(s) of the O2P USB core. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_ghwcfg1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t epdir : 32; /**< Endpoint Direction (epdir) - Two bits per endpoint represent the direction. - * 2'b00: BIDIR (IN and OUT) endpoint - * 2'b01: IN endpoint - * 2'b10: OUT endpoint - * 2'b11: Reserved - Bits [31:30]: Endpoint 15 direction - Bits [29:28]: Endpoint 14 direction - - ... - Bits [3:2]: Endpoint 1 direction - Bits[1:0]: Endpoint 0 direction (always BIDIR) */ -#else - uint32_t epdir : 32; -#endif - } s; - struct cvmx_usbcx_ghwcfg1_s cn30xx; - struct cvmx_usbcx_ghwcfg1_s cn31xx; - struct cvmx_usbcx_ghwcfg1_s cn50xx; - struct cvmx_usbcx_ghwcfg1_s cn52xx; - struct cvmx_usbcx_ghwcfg1_s cn52xxp1; - struct cvmx_usbcx_ghwcfg1_s cn56xx; - struct cvmx_usbcx_ghwcfg1_s cn56xxp1; -} cvmx_usbcx_ghwcfg1_t; - - -/** - * cvmx_usbc#_ghwcfg2 - * - * User HW Config2 Register (GHWCFG2) - * - * This register contains configuration options of the O2P USB core. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_ghwcfg2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_31_31 : 1; - uint32_t tknqdepth : 5; /**< Device Mode IN Token Sequence Learning Queue Depth - (TknQDepth) - Range: 0-30 */ - uint32_t ptxqdepth : 2; /**< Host Mode Periodic Request Queue Depth (PTxQDepth) - * 2'b00: 2 - * 2'b01: 4 - * 2'b10: 8 - * Others: Reserved */ - uint32_t nptxqdepth : 2; /**< Non-Periodic Request Queue Depth (NPTxQDepth) - * 2'b00: 2 - * 2'b01: 4 - * 2'b10: 8 - * Others: Reserved */ - uint32_t reserved_20_21 : 2; - uint32_t dynfifosizing : 1; /**< Dynamic FIFO Sizing Enabled (DynFifoSizing) - * 1'b0: No - * 1'b1: Yes */ - uint32_t periosupport : 1; /**< Periodic OUT Channels Supported in Host Mode - (PerioSupport) - * 1'b0: No - * 1'b1: Yes */ - uint32_t numhstchnl : 4; /**< Number of Host Channels (NumHstChnl) - Indicates the number of host channels supported by the core in - Host mode. The range of this field is 0-15: 0 specifies 1 - channel, 15 specifies 16 channels. */ - uint32_t numdeveps : 4; /**< Number of Device Endpoints (NumDevEps) - Indicates the number of device endpoints supported by the core - in Device mode in addition to control endpoint 0. The range of - this field is 1-15. */ - uint32_t fsphytype : 2; /**< Full-Speed PHY Interface Type (FSPhyType) - * 2'b00: Full-speed interface not supported - * 2'b01: Dedicated full-speed interface - * 2'b10: FS pins shared with UTMI+ pins - * 2'b11: FS pins shared with ULPI pins */ - uint32_t hsphytype : 2; /**< High-Speed PHY Interface Type (HSPhyType) - * 2'b00: High-Speed interface not supported - * 2'b01: UTMI+ - * 2'b10: ULPI - * 2'b11: UTMI+ and ULPI */ - uint32_t singpnt : 1; /**< Point-to-Point (SingPnt) - * 1'b0: Multi-point application - * 1'b1: Single-point application */ - uint32_t otgarch : 2; /**< Architecture (OtgArch) - * 2'b00: Slave-Only - * 2'b01: External DMA - * 2'b10: Internal DMA - * Others: Reserved */ - uint32_t otgmode : 3; /**< Mode of Operation (OtgMode) - * 3'b000: HNP- and SRP-Capable OTG (Host & Device) - * 3'b001: SRP-Capable OTG (Host & Device) - * 3'b010: Non-HNP and Non-SRP Capable OTG (Host & - Device) - * 3'b011: SRP-Capable Device - * 3'b100: Non-OTG Device - * 3'b101: SRP-Capable Host - * 3'b110: Non-OTG Host - * Others: Reserved */ -#else - uint32_t otgmode : 3; - uint32_t otgarch : 2; - uint32_t singpnt : 1; - uint32_t hsphytype : 2; - uint32_t fsphytype : 2; - uint32_t numdeveps : 4; - uint32_t numhstchnl : 4; - uint32_t periosupport : 1; - uint32_t dynfifosizing : 1; - uint32_t reserved_20_21 : 2; - uint32_t nptxqdepth : 2; - uint32_t ptxqdepth : 2; - uint32_t tknqdepth : 5; - uint32_t reserved_31_31 : 1; -#endif - } s; - struct cvmx_usbcx_ghwcfg2_s cn30xx; - struct cvmx_usbcx_ghwcfg2_s cn31xx; - struct cvmx_usbcx_ghwcfg2_s cn50xx; - struct cvmx_usbcx_ghwcfg2_s cn52xx; - struct cvmx_usbcx_ghwcfg2_s cn52xxp1; - struct cvmx_usbcx_ghwcfg2_s cn56xx; - struct cvmx_usbcx_ghwcfg2_s cn56xxp1; -} cvmx_usbcx_ghwcfg2_t; - - -/** - * cvmx_usbc#_ghwcfg3 - * - * User HW Config3 Register (GHWCFG3) - * - * This register contains the configuration options of the O2P USB core. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_ghwcfg3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dfifodepth : 16; /**< DFIFO Depth (DfifoDepth) - This value is in terms of 32-bit words. - * Minimum value is 32 - * Maximum value is 32768 */ - uint32_t reserved_13_15 : 3; - uint32_t ahbphysync : 1; /**< AHB and PHY Synchronous (AhbPhySync) - Indicates whether AHB and PHY clocks are synchronous to - each other. - * 1'b0: No - * 1'b1: Yes - This bit is tied to 1. */ - uint32_t rsttype : 1; /**< Reset Style for Clocked always Blocks in RTL (RstType) - * 1'b0: Asynchronous reset is used in the core - * 1'b1: Synchronous reset is used in the core */ - uint32_t optfeature : 1; /**< Optional Features Removed (OptFeature) - Indicates whether the User ID register, GPIO interface ports, - and SOF toggle and counter ports were removed for gate count - optimization. */ - uint32_t vendor_control_interface_support : 1;/**< Vendor Control Interface Support - * 1'b0: Vendor Control Interface is not available on the core. - * 1'b1: Vendor Control Interface is available. */ - uint32_t i2c_selection : 1; /**< I2C Selection - * 1'b0: I2C Interface is not available on the core. - * 1'b1: I2C Interface is available on the core. */ - uint32_t otgen : 1; /**< OTG Function Enabled (OtgEn) - The application uses this bit to indicate the O2P USB core's - OTG capabilities. - * 1'b0: Not OTG capable - * 1'b1: OTG Capable */ - uint32_t pktsizewidth : 3; /**< Width of Packet Size Counters (PktSizeWidth) - * 3'b000: 4 bits - * 3'b001: 5 bits - * 3'b010: 6 bits - * 3'b011: 7 bits - * 3'b100: 8 bits - * 3'b101: 9 bits - * 3'b110: 10 bits - * Others: Reserved */ - uint32_t xfersizewidth : 4; /**< Width of Transfer Size Counters (XferSizeWidth) - * 4'b0000: 11 bits - * 4'b0001: 12 bits - - ... - * 4'b1000: 19 bits - * Others: Reserved */ -#else - uint32_t xfersizewidth : 4; - uint32_t pktsizewidth : 3; - uint32_t otgen : 1; - uint32_t i2c_selection : 1; - uint32_t vendor_control_interface_support : 1; - uint32_t optfeature : 1; - uint32_t rsttype : 1; - uint32_t ahbphysync : 1; - uint32_t reserved_13_15 : 3; - uint32_t dfifodepth : 16; -#endif - } s; - struct cvmx_usbcx_ghwcfg3_s cn30xx; - struct cvmx_usbcx_ghwcfg3_s cn31xx; - struct cvmx_usbcx_ghwcfg3_s cn50xx; - struct cvmx_usbcx_ghwcfg3_s cn52xx; - struct cvmx_usbcx_ghwcfg3_s cn52xxp1; - struct cvmx_usbcx_ghwcfg3_s cn56xx; - struct cvmx_usbcx_ghwcfg3_s cn56xxp1; -} cvmx_usbcx_ghwcfg3_t; - - -/** - * cvmx_usbc#_ghwcfg4 - * - * User HW Config4 Register (GHWCFG4) - * - * This register contains the configuration options of the O2P USB core. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_ghwcfg4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_30_31 : 2; - uint32_t numdevmodinend : 4; /**< Enable dedicatd transmit FIFO for device IN endpoints. */ - uint32_t endedtrfifo : 1; /**< Enable dedicatd transmit FIFO for device IN endpoints. */ - uint32_t sessendfltr : 1; /**< "session_end" Filter Enabled (SessEndFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t bvalidfltr : 1; /**< "b_valid" Filter Enabled (BValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t avalidfltr : 1; /**< "a_valid" Filter Enabled (AValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t vbusvalidfltr : 1; /**< "vbus_valid" Filter Enabled (VBusValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t iddgfltr : 1; /**< "iddig" Filter Enable (IddgFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t numctleps : 4; /**< Number of Device Mode Control Endpoints in Addition to - Endpoint 0 (NumCtlEps) - Range: 1-15 */ - uint32_t phydatawidth : 2; /**< UTMI+ PHY/ULPI-to-Internal UTMI+ Wrapper Data Width - (PhyDataWidth) - When a ULPI PHY is used, an internal wrapper converts ULPI - to UTMI+. - * 2'b00: 8 bits - * 2'b01: 16 bits - * 2'b10: 8/16 bits, software selectable - * Others: Reserved */ - uint32_t reserved_6_13 : 8; - uint32_t ahbfreq : 1; /**< Minimum AHB Frequency Less Than 60 MHz (AhbFreq) - * 1'b0: No - * 1'b1: Yes */ - uint32_t enablepwropt : 1; /**< Enable Power Optimization? (EnablePwrOpt) - * 1'b0: No - * 1'b1: Yes */ - uint32_t numdevperioeps : 4; /**< Number of Device Mode Periodic IN Endpoints - (NumDevPerioEps) - Range: 0-15 */ -#else - uint32_t numdevperioeps : 4; - uint32_t enablepwropt : 1; - uint32_t ahbfreq : 1; - uint32_t reserved_6_13 : 8; - uint32_t phydatawidth : 2; - uint32_t numctleps : 4; - uint32_t iddgfltr : 1; - uint32_t vbusvalidfltr : 1; - uint32_t avalidfltr : 1; - uint32_t bvalidfltr : 1; - uint32_t sessendfltr : 1; - uint32_t endedtrfifo : 1; - uint32_t numdevmodinend : 4; - uint32_t reserved_30_31 : 2; -#endif - } s; - struct cvmx_usbcx_ghwcfg4_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_25_31 : 7; - uint32_t sessendfltr : 1; /**< "session_end" Filter Enabled (SessEndFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t bvalidfltr : 1; /**< "b_valid" Filter Enabled (BValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t avalidfltr : 1; /**< "a_valid" Filter Enabled (AValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t vbusvalidfltr : 1; /**< "vbus_valid" Filter Enabled (VBusValidFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t iddgfltr : 1; /**< "iddig" Filter Enable (IddgFltr) - * 1'b0: No filter - * 1'b1: Filter */ - uint32_t numctleps : 4; /**< Number of Device Mode Control Endpoints in Addition to - Endpoint 0 (NumCtlEps) - Range: 1-15 */ - uint32_t phydatawidth : 2; /**< UTMI+ PHY/ULPI-to-Internal UTMI+ Wrapper Data Width - (PhyDataWidth) - When a ULPI PHY is used, an internal wrapper converts ULPI - to UTMI+. - * 2'b00: 8 bits - * 2'b01: 16 bits - * 2'b10: 8/16 bits, software selectable - * Others: Reserved */ - uint32_t reserved_6_13 : 8; - uint32_t ahbfreq : 1; /**< Minimum AHB Frequency Less Than 60 MHz (AhbFreq) - * 1'b0: No - * 1'b1: Yes */ - uint32_t enablepwropt : 1; /**< Enable Power Optimization? (EnablePwrOpt) - * 1'b0: No - * 1'b1: Yes */ - uint32_t numdevperioeps : 4; /**< Number of Device Mode Periodic IN Endpoints - (NumDevPerioEps) - Range: 0-15 */ -#else - uint32_t numdevperioeps : 4; - uint32_t enablepwropt : 1; - uint32_t ahbfreq : 1; - uint32_t reserved_6_13 : 8; - uint32_t phydatawidth : 2; - uint32_t numctleps : 4; - uint32_t iddgfltr : 1; - uint32_t vbusvalidfltr : 1; - uint32_t avalidfltr : 1; - uint32_t bvalidfltr : 1; - uint32_t sessendfltr : 1; - uint32_t reserved_25_31 : 7; -#endif - } cn30xx; - struct cvmx_usbcx_ghwcfg4_cn30xx cn31xx; - struct cvmx_usbcx_ghwcfg4_s cn50xx; - struct cvmx_usbcx_ghwcfg4_s cn52xx; - struct cvmx_usbcx_ghwcfg4_s cn52xxp1; - struct cvmx_usbcx_ghwcfg4_s cn56xx; - struct cvmx_usbcx_ghwcfg4_s cn56xxp1; -} cvmx_usbcx_ghwcfg4_t; - - -/** - * cvmx_usbc#_gintmsk - * - * Core Interrupt Mask Register (GINTMSK) - * - * This register works with the Core Interrupt register to interrupt the application. - * When an interrupt bit is masked, the interrupt associated with that bit will not be generated. - * However, the Core Interrupt (GINTSTS) register bit corresponding to that interrupt will still be set. - * Mask interrupt: 1'b0, Unmask interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gintmsk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wkupintmsk : 1; /**< Resume/Remote Wakeup Detected Interrupt Mask - (WkUpIntMsk) */ - uint32_t sessreqintmsk : 1; /**< Session Request/New Session Detected Interrupt Mask - (SessReqIntMsk) */ - uint32_t disconnintmsk : 1; /**< Disconnect Detected Interrupt Mask (DisconnIntMsk) */ - uint32_t conidstschngmsk : 1; /**< Connector ID Status Change Mask (ConIDStsChngMsk) */ - uint32_t reserved_27_27 : 1; - uint32_t ptxfempmsk : 1; /**< Periodic TxFIFO Empty Mask (PTxFEmpMsk) */ - uint32_t hchintmsk : 1; /**< Host Channels Interrupt Mask (HChIntMsk) */ - uint32_t prtintmsk : 1; /**< Host Port Interrupt Mask (PrtIntMsk) */ - uint32_t reserved_23_23 : 1; - uint32_t fetsuspmsk : 1; /**< Data Fetch Suspended Mask (FetSuspMsk) */ - uint32_t incomplpmsk : 1; /**< Incomplete Periodic Transfer Mask (incomplPMsk) - Incomplete Isochronous OUT Transfer Mask - (incompISOOUTMsk) */ - uint32_t incompisoinmsk : 1; /**< Incomplete Isochronous IN Transfer Mask (incompISOINMsk) */ - uint32_t oepintmsk : 1; /**< OUT Endpoints Interrupt Mask (OEPIntMsk) */ - uint32_t inepintmsk : 1; /**< IN Endpoints Interrupt Mask (INEPIntMsk) */ - uint32_t epmismsk : 1; /**< Endpoint Mismatch Interrupt Mask (EPMisMsk) */ - uint32_t reserved_16_16 : 1; - uint32_t eopfmsk : 1; /**< End of Periodic Frame Interrupt Mask (EOPFMsk) */ - uint32_t isooutdropmsk : 1; /**< Isochronous OUT Packet Dropped Interrupt Mask - (ISOOutDropMsk) */ - uint32_t enumdonemsk : 1; /**< Enumeration Done Mask (EnumDoneMsk) */ - uint32_t usbrstmsk : 1; /**< USB Reset Mask (USBRstMsk) */ - uint32_t usbsuspmsk : 1; /**< USB Suspend Mask (USBSuspMsk) */ - uint32_t erlysuspmsk : 1; /**< Early Suspend Mask (ErlySuspMsk) */ - uint32_t i2cint : 1; /**< I2C Interrupt Mask (I2CINT) */ - uint32_t ulpickintmsk : 1; /**< ULPI Carkit Interrupt Mask (ULPICKINTMsk) - I2C Carkit Interrupt Mask (I2CCKINTMsk) */ - uint32_t goutnakeffmsk : 1; /**< Global OUT NAK Effective Mask (GOUTNakEffMsk) */ - uint32_t ginnakeffmsk : 1; /**< Global Non-Periodic IN NAK Effective Mask (GINNakEffMsk) */ - uint32_t nptxfempmsk : 1; /**< Non-Periodic TxFIFO Empty Mask (NPTxFEmpMsk) */ - uint32_t rxflvlmsk : 1; /**< Receive FIFO Non-Empty Mask (RxFLvlMsk) */ - uint32_t sofmsk : 1; /**< Start of (micro)Frame Mask (SofMsk) */ - uint32_t otgintmsk : 1; /**< OTG Interrupt Mask (OTGIntMsk) */ - uint32_t modemismsk : 1; /**< Mode Mismatch Interrupt Mask (ModeMisMsk) */ - uint32_t reserved_0_0 : 1; -#else - uint32_t reserved_0_0 : 1; - uint32_t modemismsk : 1; - uint32_t otgintmsk : 1; - uint32_t sofmsk : 1; - uint32_t rxflvlmsk : 1; - uint32_t nptxfempmsk : 1; - uint32_t ginnakeffmsk : 1; - uint32_t goutnakeffmsk : 1; - uint32_t ulpickintmsk : 1; - uint32_t i2cint : 1; - uint32_t erlysuspmsk : 1; - uint32_t usbsuspmsk : 1; - uint32_t usbrstmsk : 1; - uint32_t enumdonemsk : 1; - uint32_t isooutdropmsk : 1; - uint32_t eopfmsk : 1; - uint32_t reserved_16_16 : 1; - uint32_t epmismsk : 1; - uint32_t inepintmsk : 1; - uint32_t oepintmsk : 1; - uint32_t incompisoinmsk : 1; - uint32_t incomplpmsk : 1; - uint32_t fetsuspmsk : 1; - uint32_t reserved_23_23 : 1; - uint32_t prtintmsk : 1; - uint32_t hchintmsk : 1; - uint32_t ptxfempmsk : 1; - uint32_t reserved_27_27 : 1; - uint32_t conidstschngmsk : 1; - uint32_t disconnintmsk : 1; - uint32_t sessreqintmsk : 1; - uint32_t wkupintmsk : 1; -#endif - } s; - struct cvmx_usbcx_gintmsk_s cn30xx; - struct cvmx_usbcx_gintmsk_s cn31xx; - struct cvmx_usbcx_gintmsk_s cn50xx; - struct cvmx_usbcx_gintmsk_s cn52xx; - struct cvmx_usbcx_gintmsk_s cn52xxp1; - struct cvmx_usbcx_gintmsk_s cn56xx; - struct cvmx_usbcx_gintmsk_s cn56xxp1; -} cvmx_usbcx_gintmsk_t; - - -/** - * cvmx_usbc#_gintsts - * - * Core Interrupt Register (GINTSTS) - * - * This register interrupts the application for system-level events in the current mode of operation - * (Device mode or Host mode). It is shown in Interrupt. Some of the bits in this register are valid only in Host mode, - * while others are valid in Device mode only. This register also indicates the current mode of operation. - * In order to clear the interrupt status bits of type R_SS_WC, the application must write 1'b1 into the bit. - * The FIFO status interrupts are read only; once software reads from or writes to the FIFO while servicing these - * interrupts, FIFO interrupt conditions are cleared automatically. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gintsts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t wkupint : 1; /**< Resume/Remote Wakeup Detected Interrupt (WkUpInt) - In Device mode, this interrupt is asserted when a resume is - detected on the USB. In Host mode, this interrupt is asserted - when a remote wakeup is detected on the USB. - For more information on how to use this interrupt, see "Partial - Power-Down and Clock Gating Programming Model" on - page 353. */ - uint32_t sessreqint : 1; /**< Session Request/New Session Detected Interrupt (SessReqInt) - In Host mode, this interrupt is asserted when a session request - is detected from the device. In Device mode, this interrupt is - asserted when the utmiotg_bvalid signal goes high. - For more information on how to use this interrupt, see "Partial - Power-Down and Clock Gating Programming Model" on - page 353. */ - uint32_t disconnint : 1; /**< Disconnect Detected Interrupt (DisconnInt) - Asserted when a device disconnect is detected. */ - uint32_t conidstschng : 1; /**< Connector ID Status Change (ConIDStsChng) - The core sets this bit when there is a change in connector ID - status. */ - uint32_t reserved_27_27 : 1; - uint32_t ptxfemp : 1; /**< Periodic TxFIFO Empty (PTxFEmp) - Asserted when the Periodic Transmit FIFO is either half or - completely empty and there is space for at least one entry to be - written in the Periodic Request Queue. The half or completely - empty status is determined by the Periodic TxFIFO Empty Level - bit in the Core AHB Configuration register - (GAHBCFG.PTxFEmpLvl). */ - uint32_t hchint : 1; /**< Host Channels Interrupt (HChInt) - The core sets this bit to indicate that an interrupt is pending on - one of the channels of the core (in Host mode). The application - must read the Host All Channels Interrupt (HAINT) register to - determine the exact number of the channel on which the - interrupt occurred, and then read the corresponding Host - Channel-n Interrupt (HCINTn) register to determine the exact - cause of the interrupt. The application must clear the - appropriate status bit in the HCINTn register to clear this bit. */ - uint32_t prtint : 1; /**< Host Port Interrupt (PrtInt) - The core sets this bit to indicate a change in port status of one - of the O2P USB core ports in Host mode. The application must - read the Host Port Control and Status (HPRT) register to - determine the exact event that caused this interrupt. The - application must clear the appropriate status bit in the Host Port - Control and Status register to clear this bit. */ - uint32_t reserved_23_23 : 1; - uint32_t fetsusp : 1; /**< Data Fetch Suspended (FetSusp) - This interrupt is valid only in DMA mode. This interrupt indicates - that the core has stopped fetching data for IN endpoints due to - the unavailability of TxFIFO space or Request Queue space. - This interrupt is used by the application for an endpoint - mismatch algorithm. */ - uint32_t incomplp : 1; /**< Incomplete Periodic Transfer (incomplP) - In Host mode, the core sets this interrupt bit when there are - incomplete periodic transactions still pending which are - scheduled for the current microframe. - Incomplete Isochronous OUT Transfer (incompISOOUT) - The Device mode, the core sets this interrupt to indicate that - there is at least one isochronous OUT endpoint on which the - transfer is not completed in the current microframe. This - interrupt is asserted along with the End of Periodic Frame - Interrupt (EOPF) bit in this register. */ - uint32_t incompisoin : 1; /**< Incomplete Isochronous IN Transfer (incompISOIN) - The core sets this interrupt to indicate that there is at least one - isochronous IN endpoint on which the transfer is not completed - in the current microframe. This interrupt is asserted along with - the End of Periodic Frame Interrupt (EOPF) bit in this register. */ - uint32_t oepint : 1; /**< OUT Endpoints Interrupt (OEPInt) - The core sets this bit to indicate that an interrupt is pending on - one of the OUT endpoints of the core (in Device mode). The - application must read the Device All Endpoints Interrupt - (DAINT) register to determine the exact number of the OUT - endpoint on which the interrupt occurred, and then read the - corresponding Device OUT Endpoint-n Interrupt (DOEPINTn) - register to determine the exact cause of the interrupt. The - application must clear the appropriate status bit in the - corresponding DOEPINTn register to clear this bit. */ - uint32_t iepint : 1; /**< IN Endpoints Interrupt (IEPInt) - The core sets this bit to indicate that an interrupt is pending on - one of the IN endpoints of the core (in Device mode). The - application must read the Device All Endpoints Interrupt - (DAINT) register to determine the exact number of the IN - endpoint on which the interrupt occurred, and then read the - corresponding Device IN Endpoint-n Interrupt (DIEPINTn) - register to determine the exact cause of the interrupt. The - application must clear the appropriate status bit in the - corresponding DIEPINTn register to clear this bit. */ - uint32_t epmis : 1; /**< Endpoint Mismatch Interrupt (EPMis) - Indicates that an IN token has been received for a non-periodic - endpoint, but the data for another endpoint is present in the top - of the Non-Periodic Transmit FIFO and the IN endpoint - mismatch count programmed by the application has expired. */ - uint32_t reserved_16_16 : 1; - uint32_t eopf : 1; /**< End of Periodic Frame Interrupt (EOPF) - Indicates that the period specified in the Periodic Frame Interval - field of the Device Configuration register (DCFG.PerFrInt) has - been reached in the current microframe. */ - uint32_t isooutdrop : 1; /**< Isochronous OUT Packet Dropped Interrupt (ISOOutDrop) - The core sets this bit when it fails to write an isochronous OUT - packet into the RxFIFO because the RxFIFO doesn't have - enough space to accommodate a maximum packet size packet - for the isochronous OUT endpoint. */ - uint32_t enumdone : 1; /**< Enumeration Done (EnumDone) - The core sets this bit to indicate that speed enumeration is - complete. The application must read the Device Status (DSTS) - register to obtain the enumerated speed. */ - uint32_t usbrst : 1; /**< USB Reset (USBRst) - The core sets this bit to indicate that a reset is detected on the - USB. */ - uint32_t usbsusp : 1; /**< USB Suspend (USBSusp) - The core sets this bit to indicate that a suspend was detected - on the USB. The core enters the Suspended state when there - is no activity on the phy_line_state_i signal for an extended - period of time. */ - uint32_t erlysusp : 1; /**< Early Suspend (ErlySusp) - The core sets this bit to indicate that an Idle state has been - detected on the USB for 3 ms. */ - uint32_t i2cint : 1; /**< I2C Interrupt (I2CINT) - This bit is always 0x0. */ - uint32_t ulpickint : 1; /**< ULPI Carkit Interrupt (ULPICKINT) - This bit is always 0x0. */ - uint32_t goutnakeff : 1; /**< Global OUT NAK Effective (GOUTNakEff) - Indicates that the Set Global OUT NAK bit in the Device Control - register (DCTL.SGOUTNak), set by the application, has taken - effect in the core. This bit can be cleared by writing the Clear - Global OUT NAK bit in the Device Control register - (DCTL.CGOUTNak). */ - uint32_t ginnakeff : 1; /**< Global IN Non-Periodic NAK Effective (GINNakEff) - Indicates that the Set Global Non-Periodic IN NAK bit in the - Device Control register (DCTL.SGNPInNak), set by the - application, has taken effect in the core. That is, the core has - sampled the Global IN NAK bit set by the application. This bit - can be cleared by clearing the Clear Global Non-Periodic IN - NAK bit in the Device Control register (DCTL.CGNPInNak). - This interrupt does not necessarily mean that a NAK handshake - is sent out on the USB. The STALL bit takes precedence over - the NAK bit. */ - uint32_t nptxfemp : 1; /**< Non-Periodic TxFIFO Empty (NPTxFEmp) - This interrupt is asserted when the Non-Periodic TxFIFO is - either half or completely empty, and there is space for at least - one entry to be written to the Non-Periodic Transmit Request - Queue. The half or completely empty status is determined by - the Non-Periodic TxFIFO Empty Level bit in the Core AHB - Configuration register (GAHBCFG.NPTxFEmpLvl). */ - uint32_t rxflvl : 1; /**< RxFIFO Non-Empty (RxFLvl) - Indicates that there is at least one packet pending to be read - from the RxFIFO. */ - uint32_t sof : 1; /**< Start of (micro)Frame (Sof) - In Host mode, the core sets this bit to indicate that an SOF - (FS), micro-SOF (HS), or Keep-Alive (LS) is transmitted on the - USB. The application must write a 1 to this bit to clear the - interrupt. - In Device mode, in the core sets this bit to indicate that an SOF - token has been received on the USB. The application can read - the Device Status register to get the current (micro)frame - number. This interrupt is seen only when the core is operating - at either HS or FS. */ - uint32_t otgint : 1; /**< OTG Interrupt (OTGInt) - The core sets this bit to indicate an OTG protocol event. The - application must read the OTG Interrupt Status (GOTGINT) - register to determine the exact event that caused this interrupt. - The application must clear the appropriate status bit in the - GOTGINT register to clear this bit. */ - uint32_t modemis : 1; /**< Mode Mismatch Interrupt (ModeMis) - The core sets this bit when the application is trying to access: - * A Host mode register, when the core is operating in Device - mode - * A Device mode register, when the core is operating in Host - mode - The register access is completed on the AHB with an OKAY - response, but is ignored by the core internally and doesn't - affect the operation of the core. */ - uint32_t curmod : 1; /**< Current Mode of Operation (CurMod) - Indicates the current mode of operation. - * 1'b0: Device mode - * 1'b1: Host mode */ -#else - uint32_t curmod : 1; - uint32_t modemis : 1; - uint32_t otgint : 1; - uint32_t sof : 1; - uint32_t rxflvl : 1; - uint32_t nptxfemp : 1; - uint32_t ginnakeff : 1; - uint32_t goutnakeff : 1; - uint32_t ulpickint : 1; - uint32_t i2cint : 1; - uint32_t erlysusp : 1; - uint32_t usbsusp : 1; - uint32_t usbrst : 1; - uint32_t enumdone : 1; - uint32_t isooutdrop : 1; - uint32_t eopf : 1; - uint32_t reserved_16_16 : 1; - uint32_t epmis : 1; - uint32_t iepint : 1; - uint32_t oepint : 1; - uint32_t incompisoin : 1; - uint32_t incomplp : 1; - uint32_t fetsusp : 1; - uint32_t reserved_23_23 : 1; - uint32_t prtint : 1; - uint32_t hchint : 1; - uint32_t ptxfemp : 1; - uint32_t reserved_27_27 : 1; - uint32_t conidstschng : 1; - uint32_t disconnint : 1; - uint32_t sessreqint : 1; - uint32_t wkupint : 1; -#endif - } s; - struct cvmx_usbcx_gintsts_s cn30xx; - struct cvmx_usbcx_gintsts_s cn31xx; - struct cvmx_usbcx_gintsts_s cn50xx; - struct cvmx_usbcx_gintsts_s cn52xx; - struct cvmx_usbcx_gintsts_s cn52xxp1; - struct cvmx_usbcx_gintsts_s cn56xx; - struct cvmx_usbcx_gintsts_s cn56xxp1; -} cvmx_usbcx_gintsts_t; - - -/** - * cvmx_usbc#_gnptxfsiz - * - * Non-Periodic Transmit FIFO Size Register (GNPTXFSIZ) - * - * The application can program the RAM size and the memory start address for the Non-Periodic TxFIFO. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gnptxfsiz_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t nptxfdep : 16; /**< Non-Periodic TxFIFO Depth (NPTxFDep) - This value is in terms of 32-bit words. - Minimum value is 16 - Maximum value is 32768 */ - uint32_t nptxfstaddr : 16; /**< Non-Periodic Transmit RAM Start Address (NPTxFStAddr) - This field contains the memory start address for Non-Periodic - Transmit FIFO RAM. */ -#else - uint32_t nptxfstaddr : 16; - uint32_t nptxfdep : 16; -#endif - } s; - struct cvmx_usbcx_gnptxfsiz_s cn30xx; - struct cvmx_usbcx_gnptxfsiz_s cn31xx; - struct cvmx_usbcx_gnptxfsiz_s cn50xx; - struct cvmx_usbcx_gnptxfsiz_s cn52xx; - struct cvmx_usbcx_gnptxfsiz_s cn52xxp1; - struct cvmx_usbcx_gnptxfsiz_s cn56xx; - struct cvmx_usbcx_gnptxfsiz_s cn56xxp1; -} cvmx_usbcx_gnptxfsiz_t; - - -/** - * cvmx_usbc#_gnptxsts - * - * Non-Periodic Transmit FIFO/Queue Status Register (GNPTXSTS) - * - * This read-only register contains the free space information for the Non-Periodic TxFIFO and - * the Non-Periodic Transmit Request Queue - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gnptxsts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_31_31 : 1; - uint32_t nptxqtop : 7; /**< Top of the Non-Periodic Transmit Request Queue (NPTxQTop) - Entry in the Non-Periodic Tx Request Queue that is currently - being processed by the MAC. - * Bits [30:27]: Channel/endpoint number - * Bits [26:25]: - - 2'b00: IN/OUT token - - 2'b01: Zero-length transmit packet (device IN/host OUT) - - 2'b10: PING/CSPLIT token - - 2'b11: Channel halt command - * Bit [24]: Terminate (last entry for selected channel/endpoint) */ - uint32_t nptxqspcavail : 8; /**< Non-Periodic Transmit Request Queue Space Available - (NPTxQSpcAvail) - Indicates the amount of free space available in the Non- - Periodic Transmit Request Queue. This queue holds both IN - and OUT requests in Host mode. Device mode has only IN - requests. - * 8'h0: Non-Periodic Transmit Request Queue is full - * 8'h1: 1 location available - * 8'h2: 2 locations available - * n: n locations available (0..8) - * Others: Reserved */ - uint32_t nptxfspcavail : 16; /**< Non-Periodic TxFIFO Space Avail (NPTxFSpcAvail) - Indicates the amount of free space available in the Non- - Periodic TxFIFO. - Values are in terms of 32-bit words. - * 16'h0: Non-Periodic TxFIFO is full - * 16'h1: 1 word available - * 16'h2: 2 words available - * 16'hn: n words available (where 0..32768) - * 16'h8000: 32768 words available - * Others: Reserved */ -#else - uint32_t nptxfspcavail : 16; - uint32_t nptxqspcavail : 8; - uint32_t nptxqtop : 7; - uint32_t reserved_31_31 : 1; -#endif - } s; - struct cvmx_usbcx_gnptxsts_s cn30xx; - struct cvmx_usbcx_gnptxsts_s cn31xx; - struct cvmx_usbcx_gnptxsts_s cn50xx; - struct cvmx_usbcx_gnptxsts_s cn52xx; - struct cvmx_usbcx_gnptxsts_s cn52xxp1; - struct cvmx_usbcx_gnptxsts_s cn56xx; - struct cvmx_usbcx_gnptxsts_s cn56xxp1; -} cvmx_usbcx_gnptxsts_t; - - -/** - * cvmx_usbc#_gotgctl - * - * OTG Control and Status Register (GOTGCTL) - * - * The OTG Control and Status register controls the behavior and reflects the status of the OTG function of the core.: - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gotgctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t bsesvld : 1; /**< B-Session Valid (BSesVld) - Valid only when O2P USB core is configured as a USB device. - Indicates the Device mode transceiver status. - * 1'b0: B-session is not valid. - * 1'b1: B-session is valid. */ - uint32_t asesvld : 1; /**< A-Session Valid (ASesVld) - Valid only when O2P USB core is configured as a USB host. - Indicates the Host mode transceiver status. - * 1'b0: A-session is not valid - * 1'b1: A-session is valid */ - uint32_t dbnctime : 1; /**< Long/Short Debounce Time (DbncTime) - In the present version of the core this bit will only read as '0'. */ - uint32_t conidsts : 1; /**< Connector ID Status (ConIDSts) - Indicates the connector ID status on a connect event. - * 1'b0: The O2P USB core is in A-device mode - * 1'b1: The O2P USB core is in B-device mode */ - uint32_t reserved_12_15 : 4; - uint32_t devhnpen : 1; /**< Device HNP Enabled (DevHNPEn) - Since O2P USB core is not HNP capable this bit is 0x0. */ - uint32_t hstsethnpen : 1; /**< Host Set HNP Enable (HstSetHNPEn) - Since O2P USB core is not HNP capable this bit is 0x0. */ - uint32_t hnpreq : 1; /**< HNP Request (HNPReq) - Since O2P USB core is not HNP capable this bit is 0x0. */ - uint32_t hstnegscs : 1; /**< Host Negotiation Success (HstNegScs) - Since O2P USB core is not HNP capable this bit is 0x0. */ - uint32_t reserved_2_7 : 6; - uint32_t sesreq : 1; /**< Session Request (SesReq) - Since O2P USB core is not SRP capable this bit is 0x0. */ - uint32_t sesreqscs : 1; /**< Session Request Success (SesReqScs) - Since O2P USB core is not SRP capable this bit is 0x0. */ -#else - uint32_t sesreqscs : 1; - uint32_t sesreq : 1; - uint32_t reserved_2_7 : 6; - uint32_t hstnegscs : 1; - uint32_t hnpreq : 1; - uint32_t hstsethnpen : 1; - uint32_t devhnpen : 1; - uint32_t reserved_12_15 : 4; - uint32_t conidsts : 1; - uint32_t dbnctime : 1; - uint32_t asesvld : 1; - uint32_t bsesvld : 1; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_usbcx_gotgctl_s cn30xx; - struct cvmx_usbcx_gotgctl_s cn31xx; - struct cvmx_usbcx_gotgctl_s cn50xx; - struct cvmx_usbcx_gotgctl_s cn52xx; - struct cvmx_usbcx_gotgctl_s cn52xxp1; - struct cvmx_usbcx_gotgctl_s cn56xx; - struct cvmx_usbcx_gotgctl_s cn56xxp1; -} cvmx_usbcx_gotgctl_t; - - -/** - * cvmx_usbc#_gotgint - * - * OTG Interrupt Register (GOTGINT) - * - * The application reads this register whenever there is an OTG interrupt and clears the bits in this register - * to clear the OTG interrupt. It is shown in Interrupt .: - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gotgint_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_20_31 : 12; - uint32_t dbncedone : 1; /**< Debounce Done (DbnceDone) - In the present version of the code this bit is tied to '0'. */ - uint32_t adevtoutchg : 1; /**< A-Device Timeout Change (ADevTOUTChg) - Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */ - uint32_t hstnegdet : 1; /**< Host Negotiation Detected (HstNegDet) - Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */ - uint32_t reserved_10_16 : 7; - uint32_t hstnegsucstschng : 1; /**< Host Negotiation Success Status Change (HstNegSucStsChng) - Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */ - uint32_t sesreqsucstschng : 1; /**< Session Request Success Status Change - Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */ - uint32_t reserved_3_7 : 5; - uint32_t sesenddet : 1; /**< Session End Detected (SesEndDet) - Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */ - uint32_t reserved_0_1 : 2; -#else - uint32_t reserved_0_1 : 2; - uint32_t sesenddet : 1; - uint32_t reserved_3_7 : 5; - uint32_t sesreqsucstschng : 1; - uint32_t hstnegsucstschng : 1; - uint32_t reserved_10_16 : 7; - uint32_t hstnegdet : 1; - uint32_t adevtoutchg : 1; - uint32_t dbncedone : 1; - uint32_t reserved_20_31 : 12; -#endif - } s; - struct cvmx_usbcx_gotgint_s cn30xx; - struct cvmx_usbcx_gotgint_s cn31xx; - struct cvmx_usbcx_gotgint_s cn50xx; - struct cvmx_usbcx_gotgint_s cn52xx; - struct cvmx_usbcx_gotgint_s cn52xxp1; - struct cvmx_usbcx_gotgint_s cn56xx; - struct cvmx_usbcx_gotgint_s cn56xxp1; -} cvmx_usbcx_gotgint_t; - - -/** - * cvmx_usbc#_grstctl - * - * Core Reset Register (GRSTCTL) - * - * The application uses this register to reset various hardware features inside the core. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grstctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ahbidle : 1; /**< AHB Master Idle (AHBIdle) - Indicates that the AHB Master State Machine is in the IDLE - condition. */ - uint32_t dmareq : 1; /**< DMA Request Signal (DMAReq) - Indicates that the DMA request is in progress. Used for debug. */ - uint32_t reserved_11_29 : 19; - uint32_t txfnum : 5; /**< TxFIFO Number (TxFNum) - This is the FIFO number that must be flushed using the TxFIFO - Flush bit. This field must not be changed until the core clears - the TxFIFO Flush bit. - * 5'h0: Non-Periodic TxFIFO flush - * 5'h1: Periodic TxFIFO 1 flush in Device mode or Periodic - TxFIFO flush in Host mode - * 5'h2: Periodic TxFIFO 2 flush in Device mode - - ... - * 5'hF: Periodic TxFIFO 15 flush in Device mode - * 5'h10: Flush all the Periodic and Non-Periodic TxFIFOs in the - core */ - uint32_t txfflsh : 1; /**< TxFIFO Flush (TxFFlsh) - This bit selectively flushes a single or all transmit FIFOs, but - cannot do so if the core is in the midst of a transaction. - The application must only write this bit after checking that the - core is neither writing to the TxFIFO nor reading from the - TxFIFO. - The application must wait until the core clears this bit before - performing any operations. This bit takes 8 clocks (of phy_clk or - hclk, whichever is slower) to clear. */ - uint32_t rxfflsh : 1; /**< RxFIFO Flush (RxFFlsh) - The application can flush the entire RxFIFO using this bit, but - must first ensure that the core is not in the middle of a - transaction. - The application must only write to this bit after checking that the - core is neither reading from the RxFIFO nor writing to the - RxFIFO. - The application must wait until the bit is cleared before - performing any other operations. This bit will take 8 clocks - (slowest of PHY or AHB clock) to clear. */ - uint32_t intknqflsh : 1; /**< IN Token Sequence Learning Queue Flush (INTknQFlsh) - The application writes this bit to flush the IN Token Sequence - Learning Queue. */ - uint32_t frmcntrrst : 1; /**< Host Frame Counter Reset (FrmCntrRst) - The application writes this bit to reset the (micro)frame number - counter inside the core. When the (micro)frame counter is reset, - the subsequent SOF sent out by the core will have a - (micro)frame number of 0. */ - uint32_t hsftrst : 1; /**< HClk Soft Reset (HSftRst) - The application uses this bit to flush the control logic in the AHB - Clock domain. Only AHB Clock Domain pipelines are reset. - * FIFOs are not flushed with this bit. - * All state machines in the AHB clock domain are reset to the - Idle state after terminating the transactions on the AHB, - following the protocol. - * CSR control bits used by the AHB clock domain state - machines are cleared. - * To clear this interrupt, status mask bits that control the - interrupt status and are generated by the AHB clock domain - state machine are cleared. - * Because interrupt status bits are not cleared, the application - can get the status of any core events that occurred after it set - this bit. - This is a self-clearing bit that the core clears after all necessary - logic is reset in the core. This may take several clocks, - depending on the core's current state. */ - uint32_t csftrst : 1; /**< Core Soft Reset (CSftRst) - Resets the hclk and phy_clock domains as follows: - * Clears the interrupts and all the CSR registers except the - following register bits: - - PCGCCTL.RstPdwnModule - - PCGCCTL.GateHclk - - PCGCCTL.PwrClmp - - PCGCCTL.StopPPhyLPwrClkSelclk - - GUSBCFG.PhyLPwrClkSel - - GUSBCFG.DDRSel - - GUSBCFG.PHYSel - - GUSBCFG.FSIntf - - GUSBCFG.ULPI_UTMI_Sel - - GUSBCFG.PHYIf - - HCFG.FSLSPclkSel - - DCFG.DevSpd - * All module state machines (except the AHB Slave Unit) are - reset to the IDLE state, and all the transmit FIFOs and the - receive FIFO are flushed. - * Any transactions on the AHB Master are terminated as soon - as possible, after gracefully completing the last data phase of - an AHB transfer. Any transactions on the USB are terminated - immediately. - The application can write to this bit any time it wants to reset - the core. This is a self-clearing bit and the core clears this bit - after all the necessary logic is reset in the core, which may take - several clocks, depending on the current state of the core. - Once this bit is cleared software should wait at least 3 PHY - clocks before doing any access to the PHY domain - (synchronization delay). Software should also should check that - bit 31 of this register is 1 (AHB Master is IDLE) before starting - any operation. - Typically software reset is used during software development - and also when you dynamically change the PHY selection bits - in the USB configuration registers listed above. When you - change the PHY, the corresponding clock for the PHY is - selected and used in the PHY domain. Once a new clock is - selected, the PHY domain has to be reset for proper operation. */ -#else - uint32_t csftrst : 1; - uint32_t hsftrst : 1; - uint32_t frmcntrrst : 1; - uint32_t intknqflsh : 1; - uint32_t rxfflsh : 1; - uint32_t txfflsh : 1; - uint32_t txfnum : 5; - uint32_t reserved_11_29 : 19; - uint32_t dmareq : 1; - uint32_t ahbidle : 1; -#endif - } s; - struct cvmx_usbcx_grstctl_s cn30xx; - struct cvmx_usbcx_grstctl_s cn31xx; - struct cvmx_usbcx_grstctl_s cn50xx; - struct cvmx_usbcx_grstctl_s cn52xx; - struct cvmx_usbcx_grstctl_s cn52xxp1; - struct cvmx_usbcx_grstctl_s cn56xx; - struct cvmx_usbcx_grstctl_s cn56xxp1; -} cvmx_usbcx_grstctl_t; - - -/** - * cvmx_usbc#_grxfsiz - * - * Receive FIFO Size Register (GRXFSIZ) - * - * The application can program the RAM size that must be allocated to the RxFIFO. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grxfsiz_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t rxfdep : 16; /**< RxFIFO Depth (RxFDep) - This value is in terms of 32-bit words. - * Minimum value is 16 - * Maximum value is 32768 */ -#else - uint32_t rxfdep : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_usbcx_grxfsiz_s cn30xx; - struct cvmx_usbcx_grxfsiz_s cn31xx; - struct cvmx_usbcx_grxfsiz_s cn50xx; - struct cvmx_usbcx_grxfsiz_s cn52xx; - struct cvmx_usbcx_grxfsiz_s cn52xxp1; - struct cvmx_usbcx_grxfsiz_s cn56xx; - struct cvmx_usbcx_grxfsiz_s cn56xxp1; -} cvmx_usbcx_grxfsiz_t; - - -/** - * cvmx_usbc#_grxstspd - * - * Receive Status Debug Read Register, Device Mode (GRXSTSPD) - * - * A read to the Receive Status Read and Pop register returns and additionally pops the top data entry out of the RxFIFO. - * This Description is only valid when the core is in Device Mode. For Host Mode use USBC_GRXSTSPH instead. - * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the same offset in the O2P USB core. - * The offset difference shown in this document is for software clarity and is actually ignored by the - * hardware. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grxstspd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_25_31 : 7; - uint32_t fn : 4; /**< Frame Number (FN) - This is the least significant 4 bits of the (micro)frame number in - which the packet is received on the USB. This field is supported - only when the isochronous OUT endpoints are supported. */ - uint32_t pktsts : 4; /**< Packet Status (PktSts) - Indicates the status of the received packet - * 4'b0001: Glogal OUT NAK (triggers an interrupt) - * 4'b0010: OUT data packet received - * 4'b0100: SETUP transaction completed (triggers an interrupt) - * 4'b0110: SETUP data packet received - * Others: Reserved */ - uint32_t dpid : 2; /**< Data PID (DPID) - * 2'b00: DATA0 - * 2'b10: DATA1 - * 2'b01: DATA2 - * 2'b11: MDATA */ - uint32_t bcnt : 11; /**< Byte Count (BCnt) - Indicates the byte count of the received data packet */ - uint32_t epnum : 4; /**< Endpoint Number (EPNum) - Indicates the endpoint number to which the current received - packet belongs. */ -#else - uint32_t epnum : 4; - uint32_t bcnt : 11; - uint32_t dpid : 2; - uint32_t pktsts : 4; - uint32_t fn : 4; - uint32_t reserved_25_31 : 7; -#endif - } s; - struct cvmx_usbcx_grxstspd_s cn30xx; - struct cvmx_usbcx_grxstspd_s cn31xx; - struct cvmx_usbcx_grxstspd_s cn50xx; - struct cvmx_usbcx_grxstspd_s cn52xx; - struct cvmx_usbcx_grxstspd_s cn52xxp1; - struct cvmx_usbcx_grxstspd_s cn56xx; - struct cvmx_usbcx_grxstspd_s cn56xxp1; -} cvmx_usbcx_grxstspd_t; - - -/** - * cvmx_usbc#_grxstsph - * - * Receive Status Read and Pop Register, Host Mode (GRXSTSPH) - * - * A read to the Receive Status Read and Pop register returns and additionally pops the top data entry out of the RxFIFO. - * This Description is only valid when the core is in Host Mode. For Device Mode use USBC_GRXSTSPD instead. - * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the same offset in the O2P USB core. - * The offset difference shown in this document is for software clarity and is actually ignored by the - * hardware. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grxstsph_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t pktsts : 4; /**< Packet Status (PktSts) - Indicates the status of the received packet - * 4'b0010: IN data packet received - * 4'b0011: IN transfer completed (triggers an interrupt) - * 4'b0101: Data toggle error (triggers an interrupt) - * 4'b0111: Channel halted (triggers an interrupt) - * Others: Reserved */ - uint32_t dpid : 2; /**< Data PID (DPID) - * 2'b00: DATA0 - * 2'b10: DATA1 - * 2'b01: DATA2 - * 2'b11: MDATA */ - uint32_t bcnt : 11; /**< Byte Count (BCnt) - Indicates the byte count of the received IN data packet */ - uint32_t chnum : 4; /**< Channel Number (ChNum) - Indicates the channel number to which the current received - packet belongs. */ -#else - uint32_t chnum : 4; - uint32_t bcnt : 11; - uint32_t dpid : 2; - uint32_t pktsts : 4; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_usbcx_grxstsph_s cn30xx; - struct cvmx_usbcx_grxstsph_s cn31xx; - struct cvmx_usbcx_grxstsph_s cn50xx; - struct cvmx_usbcx_grxstsph_s cn52xx; - struct cvmx_usbcx_grxstsph_s cn52xxp1; - struct cvmx_usbcx_grxstsph_s cn56xx; - struct cvmx_usbcx_grxstsph_s cn56xxp1; -} cvmx_usbcx_grxstsph_t; - - -/** - * cvmx_usbc#_grxstsrd - * - * Receive Status Debug Read Register, Device Mode (GRXSTSRD) - * - * A read to the Receive Status Debug Read register returns the contents of the top of the Receive FIFO. - * This Description is only valid when the core is in Device Mode. For Host Mode use USBC_GRXSTSRH instead. - * NOTE: GRXSTSRH and GRXSTSRD are physically the same register and share the same offset in the O2P USB core. - * The offset difference shown in this document is for software clarity and is actually ignored by the - * hardware. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grxstsrd_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_25_31 : 7; - uint32_t fn : 4; /**< Frame Number (FN) - This is the least significant 4 bits of the (micro)frame number in - which the packet is received on the USB. This field is supported - only when the isochronous OUT endpoints are supported. */ - uint32_t pktsts : 4; /**< Packet Status (PktSts) - Indicates the status of the received packet - * 4'b0001: Glogal OUT NAK (triggers an interrupt) - * 4'b0010: OUT data packet received - * 4'b0100: SETUP transaction completed (triggers an interrupt) - * 4'b0110: SETUP data packet received - * Others: Reserved */ - uint32_t dpid : 2; /**< Data PID (DPID) - * 2'b00: DATA0 - * 2'b10: DATA1 - * 2'b01: DATA2 - * 2'b11: MDATA */ - uint32_t bcnt : 11; /**< Byte Count (BCnt) - Indicates the byte count of the received data packet */ - uint32_t epnum : 4; /**< Endpoint Number (EPNum) - Indicates the endpoint number to which the current received - packet belongs. */ -#else - uint32_t epnum : 4; - uint32_t bcnt : 11; - uint32_t dpid : 2; - uint32_t pktsts : 4; - uint32_t fn : 4; - uint32_t reserved_25_31 : 7; -#endif - } s; - struct cvmx_usbcx_grxstsrd_s cn30xx; - struct cvmx_usbcx_grxstsrd_s cn31xx; - struct cvmx_usbcx_grxstsrd_s cn50xx; - struct cvmx_usbcx_grxstsrd_s cn52xx; - struct cvmx_usbcx_grxstsrd_s cn52xxp1; - struct cvmx_usbcx_grxstsrd_s cn56xx; - struct cvmx_usbcx_grxstsrd_s cn56xxp1; -} cvmx_usbcx_grxstsrd_t; - - -/** - * cvmx_usbc#_grxstsrh - * - * Receive Status Debug Read Register, Host Mode (GRXSTSRH) - * - * A read to the Receive Status Debug Read register returns the contents of the top of the Receive FIFO. - * This Description is only valid when the core is in Host Mode. For Device Mode use USBC_GRXSTSRD instead. - * NOTE: GRXSTSRH and GRXSTSRD are physically the same register and share the same offset in the O2P USB core. - * The offset difference shown in this document is for software clarity and is actually ignored by the - * hardware. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_grxstsrh_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_21_31 : 11; - uint32_t pktsts : 4; /**< Packet Status (PktSts) - Indicates the status of the received packet - * 4'b0010: IN data packet received - * 4'b0011: IN transfer completed (triggers an interrupt) - * 4'b0101: Data toggle error (triggers an interrupt) - * 4'b0111: Channel halted (triggers an interrupt) - * Others: Reserved */ - uint32_t dpid : 2; /**< Data PID (DPID) - * 2'b00: DATA0 - * 2'b10: DATA1 - * 2'b01: DATA2 - * 2'b11: MDATA */ - uint32_t bcnt : 11; /**< Byte Count (BCnt) - Indicates the byte count of the received IN data packet */ - uint32_t chnum : 4; /**< Channel Number (ChNum) - Indicates the channel number to which the current received - packet belongs. */ -#else - uint32_t chnum : 4; - uint32_t bcnt : 11; - uint32_t dpid : 2; - uint32_t pktsts : 4; - uint32_t reserved_21_31 : 11; -#endif - } s; - struct cvmx_usbcx_grxstsrh_s cn30xx; - struct cvmx_usbcx_grxstsrh_s cn31xx; - struct cvmx_usbcx_grxstsrh_s cn50xx; - struct cvmx_usbcx_grxstsrh_s cn52xx; - struct cvmx_usbcx_grxstsrh_s cn52xxp1; - struct cvmx_usbcx_grxstsrh_s cn56xx; - struct cvmx_usbcx_grxstsrh_s cn56xxp1; -} cvmx_usbcx_grxstsrh_t; - - -/** - * cvmx_usbc#_gsnpsid - * - * Synopsys ID Register (GSNPSID) - * - * This is a read-only register that contains the release number of the core being used. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gsnpsid_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t synopsysid : 32; /**< 0x4F54\<version\>A, release number of the core being used. - 0x4F54220A => pass1.x, 0x4F54240A => pass2.x */ -#else - uint32_t synopsysid : 32; -#endif - } s; - struct cvmx_usbcx_gsnpsid_s cn30xx; - struct cvmx_usbcx_gsnpsid_s cn31xx; - struct cvmx_usbcx_gsnpsid_s cn50xx; - struct cvmx_usbcx_gsnpsid_s cn52xx; - struct cvmx_usbcx_gsnpsid_s cn52xxp1; - struct cvmx_usbcx_gsnpsid_s cn56xx; - struct cvmx_usbcx_gsnpsid_s cn56xxp1; -} cvmx_usbcx_gsnpsid_t; - - -/** - * cvmx_usbc#_gusbcfg - * - * Core USB Configuration Register (GUSBCFG) - * - * This register can be used to configure the core after power-on or a changing to Host mode or Device mode. - * It contains USB and USB-PHY related configuration parameters. The application must program this register - * before starting any transactions on either the AHB or the USB. - * Do not make changes to this register after the initial programming. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_gusbcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_17_31 : 15; - uint32_t otgi2csel : 1; /**< UTMIFS or I2C Interface Select (OtgI2CSel) - This bit is always 0x0. */ - uint32_t phylpwrclksel : 1; /**< PHY Low-Power Clock Select (PhyLPwrClkSel) - Software should set this bit to 0x0. - Selects either 480-MHz or 48-MHz (low-power) PHY mode. In - FS and LS modes, the PHY can usually operate on a 48-MHz - clock to save power. - * 1'b0: 480-MHz Internal PLL clock - * 1'b1: 48-MHz External Clock - In 480 MHz mode, the UTMI interface operates at either 60 or - 30-MHz, depending upon whether 8- or 16-bit data width is - selected. In 48-MHz mode, the UTMI interface operates at 48 - MHz in FS mode and at either 48 or 6 MHz in LS mode - (depending on the PHY vendor). - This bit drives the utmi_fsls_low_power core output signal, and - is valid only for UTMI+ PHYs. */ - uint32_t reserved_14_14 : 1; - uint32_t usbtrdtim : 4; /**< USB Turnaround Time (USBTrdTim) - Sets the turnaround time in PHY clocks. - Specifies the response time for a MAC request to the Packet - FIFO Controller (PFC) to fetch data from the DFIFO (SPRAM). - This must be programmed to 0x5. */ - uint32_t hnpcap : 1; /**< HNP-Capable (HNPCap) - This bit is always 0x0. */ - uint32_t srpcap : 1; /**< SRP-Capable (SRPCap) - This bit is always 0x0. */ - uint32_t ddrsel : 1; /**< ULPI DDR Select (DDRSel) - Software should set this bit to 0x0. */ - uint32_t physel : 1; /**< USB 2.0 High-Speed PHY or USB 1.1 Full-Speed Serial - Software should set this bit to 0x0. */ - uint32_t fsintf : 1; /**< Full-Speed Serial Interface Select (FSIntf) - Software should set this bit to 0x0. */ - uint32_t ulpi_utmi_sel : 1; /**< ULPI or UTMI+ Select (ULPI_UTMI_Sel) - This bit is always 0x0. */ - uint32_t phyif : 1; /**< PHY Interface (PHYIf) - This bit is always 0x1. */ - uint32_t toutcal : 3; /**< HS/FS Timeout Calibration (TOutCal) - The number of PHY clocks that the application programs in this - field is added to the high-speed/full-speed interpacket timeout - duration in the core to account for any additional delays - introduced by the PHY. This may be required, since the delay - introduced by the PHY in generating the linestate condition may - vary from one PHY to another. - The USB standard timeout value for high-speed operation is - 736 to 816 (inclusive) bit times. The USB standard timeout - value for full-speed operation is 16 to 18 (inclusive) bit times. - The application must program this field based on the speed of - enumeration. The number of bit times added per PHY clock are: - High-speed operation: - * One 30-MHz PHY clock = 16 bit times - * One 60-MHz PHY clock = 8 bit times - Full-speed operation: - * One 30-MHz PHY clock = 0.4 bit times - * One 60-MHz PHY clock = 0.2 bit times - * One 48-MHz PHY clock = 0.25 bit times */ -#else - uint32_t toutcal : 3; - uint32_t phyif : 1; - uint32_t ulpi_utmi_sel : 1; - uint32_t fsintf : 1; - uint32_t physel : 1; - uint32_t ddrsel : 1; - uint32_t srpcap : 1; - uint32_t hnpcap : 1; - uint32_t usbtrdtim : 4; - uint32_t reserved_14_14 : 1; - uint32_t phylpwrclksel : 1; - uint32_t otgi2csel : 1; - uint32_t reserved_17_31 : 15; -#endif - } s; - struct cvmx_usbcx_gusbcfg_s cn30xx; - struct cvmx_usbcx_gusbcfg_s cn31xx; - struct cvmx_usbcx_gusbcfg_s cn50xx; - struct cvmx_usbcx_gusbcfg_s cn52xx; - struct cvmx_usbcx_gusbcfg_s cn52xxp1; - struct cvmx_usbcx_gusbcfg_s cn56xx; - struct cvmx_usbcx_gusbcfg_s cn56xxp1; -} cvmx_usbcx_gusbcfg_t; - - -/** - * cvmx_usbc#_haint - * - * Host All Channels Interrupt Register (HAINT) - * - * When a significant event occurs on a channel, the Host All Channels Interrupt register - * interrupts the application using the Host Channels Interrupt bit of the Core Interrupt - * register (GINTSTS.HChInt). This is shown in Interrupt . There is one interrupt bit per - * channel, up to a maximum of 16 bits. Bits in this register are set and cleared when the - * application sets and clears bits in the corresponding Host Channel-n Interrupt register. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_haint_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t haint : 16; /**< Channel Interrupts (HAINT) - One bit per channel: Bit 0 for Channel 0, bit 15 for Channel 15 */ -#else - uint32_t haint : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_usbcx_haint_s cn30xx; - struct cvmx_usbcx_haint_s cn31xx; - struct cvmx_usbcx_haint_s cn50xx; - struct cvmx_usbcx_haint_s cn52xx; - struct cvmx_usbcx_haint_s cn52xxp1; - struct cvmx_usbcx_haint_s cn56xx; - struct cvmx_usbcx_haint_s cn56xxp1; -} cvmx_usbcx_haint_t; - - -/** - * cvmx_usbc#_haintmsk - * - * Host All Channels Interrupt Mask Register (HAINTMSK) - * - * The Host All Channel Interrupt Mask register works with the Host All Channel Interrupt - * register to interrupt the application when an event occurs on a channel. There is one - * interrupt mask bit per channel, up to a maximum of 16 bits. - * Mask interrupt: 1'b0 Unmask interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_haintmsk_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t haintmsk : 16; /**< Channel Interrupt Mask (HAINTMsk) - One bit per channel: Bit 0 for channel 0, bit 15 for channel 15 */ -#else - uint32_t haintmsk : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_usbcx_haintmsk_s cn30xx; - struct cvmx_usbcx_haintmsk_s cn31xx; - struct cvmx_usbcx_haintmsk_s cn50xx; - struct cvmx_usbcx_haintmsk_s cn52xx; - struct cvmx_usbcx_haintmsk_s cn52xxp1; - struct cvmx_usbcx_haintmsk_s cn56xx; - struct cvmx_usbcx_haintmsk_s cn56xxp1; -} cvmx_usbcx_haintmsk_t; - - -/** - * cvmx_usbc#_hcchar# - * - * Host Channel-n Characteristics Register (HCCHAR) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hccharx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t chena : 1; /**< Channel Enable (ChEna) - This field is set by the application and cleared by the OTG host. - * 1'b0: Channel disabled - * 1'b1: Channel enabled */ - uint32_t chdis : 1; /**< Channel Disable (ChDis) - The application sets this bit to stop transmitting/receiving data - on a channel, even before the transfer for that channel is - complete. The application must wait for the Channel Disabled - interrupt before treating the channel as disabled. */ - uint32_t oddfrm : 1; /**< Odd Frame (OddFrm) - This field is set (reset) by the application to indicate that the - OTG host must perform a transfer in an odd (micro)frame. This - field is applicable for only periodic (isochronous and interrupt) - transactions. - * 1'b0: Even (micro)frame - * 1'b1: Odd (micro)frame */ - uint32_t devaddr : 7; /**< Device Address (DevAddr) - This field selects the specific device serving as the data source - or sink. */ - uint32_t ec : 2; /**< Multi Count (MC) / Error Count (EC) - When the Split Enable bit of the Host Channel-n Split Control - register (HCSPLTn.SpltEna) is reset (1'b0), this field indicates - to the host the number of transactions that should be executed - per microframe for this endpoint. - * 2'b00: Reserved. This field yields undefined results. - * 2'b01: 1 transaction - * 2'b10: 2 transactions to be issued for this endpoint per - microframe - * 2'b11: 3 transactions to be issued for this endpoint per - microframe - When HCSPLTn.SpltEna is set (1'b1), this field indicates the - number of immediate retries to be performed for a periodic split - transactions on transaction errors. This field must be set to at - least 2'b01. */ - uint32_t eptype : 2; /**< Endpoint Type (EPType) - Indicates the transfer type selected. - * 2'b00: Control - * 2'b01: Isochronous - * 2'b10: Bulk - * 2'b11: Interrupt */ - uint32_t lspddev : 1; /**< Low-Speed Device (LSpdDev) - This field is set by the application to indicate that this channel is - communicating to a low-speed device. */ - uint32_t reserved_16_16 : 1; - uint32_t epdir : 1; /**< Endpoint Direction (EPDir) - Indicates whether the transaction is IN or OUT. - * 1'b0: OUT - * 1'b1: IN */ - uint32_t epnum : 4; /**< Endpoint Number (EPNum) - Indicates the endpoint number on the device serving as the - data source or sink. */ - uint32_t mps : 11; /**< Maximum Packet Size (MPS) - Indicates the maximum packet size of the associated endpoint. */ -#else - uint32_t mps : 11; - uint32_t epnum : 4; - uint32_t epdir : 1; - uint32_t reserved_16_16 : 1; - uint32_t lspddev : 1; - uint32_t eptype : 2; - uint32_t ec : 2; - uint32_t devaddr : 7; - uint32_t oddfrm : 1; - uint32_t chdis : 1; - uint32_t chena : 1; -#endif - } s; - struct cvmx_usbcx_hccharx_s cn30xx; - struct cvmx_usbcx_hccharx_s cn31xx; - struct cvmx_usbcx_hccharx_s cn50xx; - struct cvmx_usbcx_hccharx_s cn52xx; - struct cvmx_usbcx_hccharx_s cn52xxp1; - struct cvmx_usbcx_hccharx_s cn56xx; - struct cvmx_usbcx_hccharx_s cn56xxp1; -} cvmx_usbcx_hccharx_t; - - -/** - * cvmx_usbc#_hcfg - * - * Host Configuration Register (HCFG) - * - * This register configures the core after power-on. Do not make changes to this register after initializing the host. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hcfg_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_3_31 : 29; - uint32_t fslssupp : 1; /**< FS- and LS-Only Support (FSLSSupp) - The application uses this bit to control the core's enumeration - speed. Using this bit, the application can make the core - enumerate as a FS host, even if the connected device supports - HS traffic. Do not make changes to this field after initial - programming. - * 1'b0: HS/FS/LS, based on the maximum speed supported by - the connected device - * 1'b1: FS/LS-only, even if the connected device can support HS */ - uint32_t fslspclksel : 2; /**< FS/LS PHY Clock Select (FSLSPclkSel) - When the core is in FS Host mode - * 2'b00: PHY clock is running at 30/60 MHz - * 2'b01: PHY clock is running at 48 MHz - * Others: Reserved - When the core is in LS Host mode - * 2'b00: PHY clock is running at 30/60 MHz. When the - UTMI+/ULPI PHY Low Power mode is not selected, use - 30/60 MHz. - * 2'b01: PHY clock is running at 48 MHz. When the UTMI+ - PHY Low Power mode is selected, use 48MHz if the PHY - supplies a 48 MHz clock during LS mode. - * 2'b10: PHY clock is running at 6 MHz. In USB 1.1 FS mode, - use 6 MHz when the UTMI+ PHY Low Power mode is - selected and the PHY supplies a 6 MHz clock during LS - mode. If you select a 6 MHz clock during LS mode, you must - do a soft reset. - * 2'b11: Reserved */ -#else - uint32_t fslspclksel : 2; - uint32_t fslssupp : 1; - uint32_t reserved_3_31 : 29; -#endif - } s; - struct cvmx_usbcx_hcfg_s cn30xx; - struct cvmx_usbcx_hcfg_s cn31xx; - struct cvmx_usbcx_hcfg_s cn50xx; - struct cvmx_usbcx_hcfg_s cn52xx; - struct cvmx_usbcx_hcfg_s cn52xxp1; - struct cvmx_usbcx_hcfg_s cn56xx; - struct cvmx_usbcx_hcfg_s cn56xxp1; -} cvmx_usbcx_hcfg_t; - - -/** - * cvmx_usbc#_hcint# - * - * Host Channel-n Interrupt Register (HCINT) - * - * This register indicates the status of a channel with respect to USB- and AHB-related events. - * The application must read this register when the Host Channels Interrupt bit of the Core Interrupt - * register (GINTSTS.HChInt) is set. Before the application can read this register, it must first read - * the Host All Channels Interrupt (HAINT) register to get the exact channel number for the Host Channel-n - * Interrupt register. The application must clear the appropriate bit in this register to clear the - * corresponding bits in the HAINT and GINTSTS registers. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hcintx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_11_31 : 21; - uint32_t datatglerr : 1; /**< Data Toggle Error (DataTglErr) */ - uint32_t frmovrun : 1; /**< Frame Overrun (FrmOvrun) */ - uint32_t bblerr : 1; /**< Babble Error (BblErr) */ - uint32_t xacterr : 1; /**< Transaction Error (XactErr) */ - uint32_t nyet : 1; /**< NYET Response Received Interrupt (NYET) */ - uint32_t ack : 1; /**< ACK Response Received Interrupt (ACK) */ - uint32_t nak : 1; /**< NAK Response Received Interrupt (NAK) */ - uint32_t stall : 1; /**< STALL Response Received Interrupt (STALL) */ - uint32_t ahberr : 1; /**< This bit is always 0x0. */ - uint32_t chhltd : 1; /**< Channel Halted (ChHltd) - Indicates the transfer completed abnormally either because of - any USB transaction error or in response to disable request by - the application. */ - uint32_t xfercompl : 1; /**< Transfer Completed (XferCompl) - Transfer completed normally without any errors. */ -#else - uint32_t xfercompl : 1; - uint32_t chhltd : 1; - uint32_t ahberr : 1; - uint32_t stall : 1; - uint32_t nak : 1; - uint32_t ack : 1; - uint32_t nyet : 1; - uint32_t xacterr : 1; - uint32_t bblerr : 1; - uint32_t frmovrun : 1; - uint32_t datatglerr : 1; - uint32_t reserved_11_31 : 21; -#endif - } s; - struct cvmx_usbcx_hcintx_s cn30xx; - struct cvmx_usbcx_hcintx_s cn31xx; - struct cvmx_usbcx_hcintx_s cn50xx; - struct cvmx_usbcx_hcintx_s cn52xx; - struct cvmx_usbcx_hcintx_s cn52xxp1; - struct cvmx_usbcx_hcintx_s cn56xx; - struct cvmx_usbcx_hcintx_s cn56xxp1; -} cvmx_usbcx_hcintx_t; - - -/** - * cvmx_usbc#_hcintmsk# - * - * Host Channel-n Interrupt Mask Register (HCINTMSKn) - * - * This register reflects the mask for each channel status described in the previous section. - * Mask interrupt: 1'b0 Unmask interrupt: 1'b1 - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hcintmskx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_11_31 : 21; - uint32_t datatglerrmsk : 1; /**< Data Toggle Error Mask (DataTglErrMsk) */ - uint32_t frmovrunmsk : 1; /**< Frame Overrun Mask (FrmOvrunMsk) */ - uint32_t bblerrmsk : 1; /**< Babble Error Mask (BblErrMsk) */ - uint32_t xacterrmsk : 1; /**< Transaction Error Mask (XactErrMsk) */ - uint32_t nyetmsk : 1; /**< NYET Response Received Interrupt Mask (NyetMsk) */ - uint32_t ackmsk : 1; /**< ACK Response Received Interrupt Mask (AckMsk) */ - uint32_t nakmsk : 1; /**< NAK Response Received Interrupt Mask (NakMsk) */ - uint32_t stallmsk : 1; /**< STALL Response Received Interrupt Mask (StallMsk) */ - uint32_t ahberrmsk : 1; /**< AHB Error Mask (AHBErrMsk) */ - uint32_t chhltdmsk : 1; /**< Channel Halted Mask (ChHltdMsk) */ - uint32_t xfercomplmsk : 1; /**< Transfer Completed Mask (XferComplMsk) */ -#else - uint32_t xfercomplmsk : 1; - uint32_t chhltdmsk : 1; - uint32_t ahberrmsk : 1; - uint32_t stallmsk : 1; - uint32_t nakmsk : 1; - uint32_t ackmsk : 1; - uint32_t nyetmsk : 1; - uint32_t xacterrmsk : 1; - uint32_t bblerrmsk : 1; - uint32_t frmovrunmsk : 1; - uint32_t datatglerrmsk : 1; - uint32_t reserved_11_31 : 21; -#endif - } s; - struct cvmx_usbcx_hcintmskx_s cn30xx; - struct cvmx_usbcx_hcintmskx_s cn31xx; - struct cvmx_usbcx_hcintmskx_s cn50xx; - struct cvmx_usbcx_hcintmskx_s cn52xx; - struct cvmx_usbcx_hcintmskx_s cn52xxp1; - struct cvmx_usbcx_hcintmskx_s cn56xx; - struct cvmx_usbcx_hcintmskx_s cn56xxp1; -} cvmx_usbcx_hcintmskx_t; - - -/** - * cvmx_usbc#_hcsplt# - * - * Host Channel-n Split Control Register (HCSPLT) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hcspltx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t spltena : 1; /**< Split Enable (SpltEna) - The application sets this field to indicate that this channel is - enabled to perform split transactions. */ - uint32_t reserved_17_30 : 14; - uint32_t compsplt : 1; /**< Do Complete Split (CompSplt) - The application sets this field to request the OTG host to - perform a complete split transaction. */ - uint32_t xactpos : 2; /**< Transaction Position (XactPos) - This field is used to determine whether to send all, first, middle, - or last payloads with each OUT transaction. - * 2'b11: All. This is the entire data payload is of this transaction - (which is less than or equal to 188 bytes). - * 2'b10: Begin. This is the first data payload of this transaction - (which is larger than 188 bytes). - * 2'b00: Mid. This is the middle payload of this transaction - (which is larger than 188 bytes). - * 2'b01: End. This is the last payload of this transaction (which - is larger than 188 bytes). */ - uint32_t hubaddr : 7; /**< Hub Address (HubAddr) - This field holds the device address of the transaction - translator's hub. */ - uint32_t prtaddr : 7; /**< Port Address (PrtAddr) - This field is the port number of the recipient transaction - translator. */ -#else - uint32_t prtaddr : 7; - uint32_t hubaddr : 7; - uint32_t xactpos : 2; - uint32_t compsplt : 1; - uint32_t reserved_17_30 : 14; - uint32_t spltena : 1; -#endif - } s; - struct cvmx_usbcx_hcspltx_s cn30xx; - struct cvmx_usbcx_hcspltx_s cn31xx; - struct cvmx_usbcx_hcspltx_s cn50xx; - struct cvmx_usbcx_hcspltx_s cn52xx; - struct cvmx_usbcx_hcspltx_s cn52xxp1; - struct cvmx_usbcx_hcspltx_s cn56xx; - struct cvmx_usbcx_hcspltx_s cn56xxp1; -} cvmx_usbcx_hcspltx_t; - - -/** - * cvmx_usbc#_hctsiz# - * - * Host Channel-n Transfer Size Register (HCTSIZ) - * - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hctsizx_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t dopng : 1; /**< Do Ping (DoPng) - Setting this field to 1 directs the host to do PING protocol. */ - uint32_t pid : 2; /**< PID (Pid) - The application programs this field with the type of PID to use - for the initial transaction. The host will maintain this field for the - rest of the transfer. - * 2'b00: DATA0 - * 2'b01: DATA2 - * 2'b10: DATA1 - * 2'b11: MDATA (non-control)/SETUP (control) */ - uint32_t pktcnt : 10; /**< Packet Count (PktCnt) - This field is programmed by the application with the expected - number of packets to be transmitted (OUT) or received (IN). - The host decrements this count on every successful - transmission or reception of an OUT/IN packet. Once this count - reaches zero, the application is interrupted to indicate normal - completion. */ - uint32_t xfersize : 19; /**< Transfer Size (XferSize) - For an OUT, this field is the number of data bytes the host will - send during the transfer. - For an IN, this field is the buffer size that the application has - reserved for the transfer. The application is expected to - program this field as an integer multiple of the maximum packet - size for IN transactions (periodic and non-periodic). */ -#else - uint32_t xfersize : 19; - uint32_t pktcnt : 10; - uint32_t pid : 2; - uint32_t dopng : 1; -#endif - } s; - struct cvmx_usbcx_hctsizx_s cn30xx; - struct cvmx_usbcx_hctsizx_s cn31xx; - struct cvmx_usbcx_hctsizx_s cn50xx; - struct cvmx_usbcx_hctsizx_s cn52xx; - struct cvmx_usbcx_hctsizx_s cn52xxp1; - struct cvmx_usbcx_hctsizx_s cn56xx; - struct cvmx_usbcx_hctsizx_s cn56xxp1; -} cvmx_usbcx_hctsizx_t; - - -/** - * cvmx_usbc#_hfir - * - * Host Frame Interval Register (HFIR) - * - * This register stores the frame interval information for the current speed to which the O2P USB core has enumerated. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hfir_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_16_31 : 16; - uint32_t frint : 16; /**< Frame Interval (FrInt) - The value that the application programs to this field specifies - the interval between two consecutive SOFs (FS) or micro- - SOFs (HS) or Keep-Alive tokens (HS). This field contains the - number of PHY clocks that constitute the required frame - interval. The default value set in this field for a FS operation - when the PHY clock frequency is 60 MHz. The application can - write a value to this register only after the Port Enable bit of - the Host Port Control and Status register (HPRT.PrtEnaPort) - has been set. If no value is programmed, the core calculates - the value based on the PHY clock specified in the FS/LS PHY - Clock Select field of the Host Configuration register - (HCFG.FSLSPclkSel). Do not change the value of this field - after the initial configuration. - * 125 us (PHY clock frequency for HS) - * 1 ms (PHY clock frequency for FS/LS) */ -#else - uint32_t frint : 16; - uint32_t reserved_16_31 : 16; -#endif - } s; - struct cvmx_usbcx_hfir_s cn30xx; - struct cvmx_usbcx_hfir_s cn31xx; - struct cvmx_usbcx_hfir_s cn50xx; - struct cvmx_usbcx_hfir_s cn52xx; - struct cvmx_usbcx_hfir_s cn52xxp1; - struct cvmx_usbcx_hfir_s cn56xx; - struct cvmx_usbcx_hfir_s cn56xxp1; -} cvmx_usbcx_hfir_t; - - -/** - * cvmx_usbc#_hfnum - * - * Host Frame Number/Frame Time Remaining Register (HFNUM) - * - * This register indicates the current frame number. - * It also indicates the time remaining (in terms of the number of PHY clocks) - * in the current (micro)frame. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hfnum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t frrem : 16; /**< Frame Time Remaining (FrRem) - Indicates the amount of time remaining in the current - microframe (HS) or frame (FS/LS), in terms of PHY clocks. - This field decrements on each PHY clock. When it reaches - zero, this field is reloaded with the value in the Frame Interval - register and a new SOF is transmitted on the USB. */ - uint32_t frnum : 16; /**< Frame Number (FrNum) - This field increments when a new SOF is transmitted on the - USB, and is reset to 0 when it reaches 16'h3FFF. */ -#else - uint32_t frnum : 16; - uint32_t frrem : 16; -#endif - } s; - struct cvmx_usbcx_hfnum_s cn30xx; - struct cvmx_usbcx_hfnum_s cn31xx; - struct cvmx_usbcx_hfnum_s cn50xx; - struct cvmx_usbcx_hfnum_s cn52xx; - struct cvmx_usbcx_hfnum_s cn52xxp1; - struct cvmx_usbcx_hfnum_s cn56xx; - struct cvmx_usbcx_hfnum_s cn56xxp1; -} cvmx_usbcx_hfnum_t; - - -/** - * cvmx_usbc#_hprt - * - * Host Port Control and Status Register (HPRT) - * - * This register is available in both Host and Device modes. - * Currently, the OTG Host supports only one port. - * A single register holds USB port-related information such as USB reset, enable, suspend, resume, - * connect status, and test mode for each port. The R_SS_WC bits in this register can trigger an - * interrupt to the application through the Host Port Interrupt bit of the Core Interrupt - * register (GINTSTS.PrtInt). On a Port Interrupt, the application must read this register and clear - * the bit that caused the interrupt. For the R_SS_WC bits, the application must write a 1 to the bit - * to clear the interrupt. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hprt_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_19_31 : 13; - uint32_t prtspd : 2; /**< Port Speed (PrtSpd) - Indicates the speed of the device attached to this port. - * 2'b00: High speed - * 2'b01: Full speed - * 2'b10: Low speed - * 2'b11: Reserved */ - uint32_t prttstctl : 4; /**< Port Test Control (PrtTstCtl) - The application writes a nonzero value to this field to put - the port into a Test mode, and the corresponding pattern is - signaled on the port. - * 4'b0000: Test mode disabled - * 4'b0001: Test_J mode - * 4'b0010: Test_K mode - * 4'b0011: Test_SE0_NAK mode - * 4'b0100: Test_Packet mode - * 4'b0101: Test_Force_Enable - * Others: Reserved - PrtSpd must be zero (i.e. the interface must be in high-speed - mode) to use the PrtTstCtl test modes. */ - uint32_t prtpwr : 1; /**< Port Power (PrtPwr) - The application uses this field to control power to this port, - and the core clears this bit on an overcurrent condition. - * 1'b0: Power off - * 1'b1: Power on */ - uint32_t prtlnsts : 2; /**< Port Line Status (PrtLnSts) - Indicates the current logic level USB data lines - * Bit [10]: Logic level of D- - * Bit [11]: Logic level of D+ */ - uint32_t reserved_9_9 : 1; - uint32_t prtrst : 1; /**< Port Reset (PrtRst) - When the application sets this bit, a reset sequence is - started on this port. The application must time the reset - period and clear this bit after the reset sequence is - complete. - * 1'b0: Port not in reset - * 1'b1: Port in reset - The application must leave this bit set for at least a - minimum duration mentioned below to start a reset on the - port. The application can leave it set for another 10 ms in - addition to the required minimum duration, before clearing - the bit, even though there is no maximum limit set by the - USB standard. - * High speed: 50 ms - * Full speed/Low speed: 10 ms */ - uint32_t prtsusp : 1; /**< Port Suspend (PrtSusp) - The application sets this bit to put this port in Suspend - mode. The core only stops sending SOFs when this is set. - To stop the PHY clock, the application must set the Port - Clock Stop bit, which will assert the suspend input pin of - the PHY. - The read value of this bit reflects the current suspend - status of the port. This bit is cleared by the core after a - remote wakeup signal is detected or the application sets - the Port Reset bit or Port Resume bit in this register or the - Resume/Remote Wakeup Detected Interrupt bit or - Disconnect Detected Interrupt bit in the Core Interrupt - register (GINTSTS.WkUpInt or GINTSTS.DisconnInt, - respectively). - * 1'b0: Port not in Suspend mode - * 1'b1: Port in Suspend mode */ - uint32_t prtres : 1; /**< Port Resume (PrtRes) - The application sets this bit to drive resume signaling on - the port. The core continues to drive the resume signal - until the application clears this bit. - If the core detects a USB remote wakeup sequence, as - indicated by the Port Resume/Remote Wakeup Detected - Interrupt bit of the Core Interrupt register - (GINTSTS.WkUpInt), the core starts driving resume - signaling without application intervention and clears this bit - when it detects a disconnect condition. The read value of - this bit indicates whether the core is currently driving - resume signaling. - * 1'b0: No resume driven - * 1'b1: Resume driven */ - uint32_t prtovrcurrchng : 1; /**< Port Overcurrent Change (PrtOvrCurrChng) - The core sets this bit when the status of the Port - Overcurrent Active bit (bit 4) in this register changes. */ - uint32_t prtovrcurract : 1; /**< Port Overcurrent Active (PrtOvrCurrAct) - Indicates the overcurrent condition of the port. - * 1'b0: No overcurrent condition - * 1'b1: Overcurrent condition */ - uint32_t prtenchng : 1; /**< Port Enable/Disable Change (PrtEnChng) - The core sets this bit when the status of the Port Enable bit - [2] of this register changes. */ - uint32_t prtena : 1; /**< Port Enable (PrtEna) - A port is enabled only by the core after a reset sequence, - and is disabled by an overcurrent condition, a disconnect - condition, or by the application clearing this bit. The - application cannot set this bit by a register write. It can only - clear it to disable the port. This bit does not trigger any - interrupt to the application. - * 1'b0: Port disabled - * 1'b1: Port enabled */ - uint32_t prtconndet : 1; /**< Port Connect Detected (PrtConnDet) - The core sets this bit when a device connection is detected - to trigger an interrupt to the application using the Host Port - Interrupt bit of the Core Interrupt register (GINTSTS.PrtInt). - The application must write a 1 to this bit to clear the - interrupt. */ - uint32_t prtconnsts : 1; /**< Port Connect Status (PrtConnSts) - * 0: No device is attached to the port. - * 1: A device is attached to the port. */ -#else - uint32_t prtconnsts : 1; - uint32_t prtconndet : 1; - uint32_t prtena : 1; - uint32_t prtenchng : 1; - uint32_t prtovrcurract : 1; - uint32_t prtovrcurrchng : 1; - uint32_t prtres : 1; - uint32_t prtsusp : 1; - uint32_t prtrst : 1; - uint32_t reserved_9_9 : 1; - uint32_t prtlnsts : 2; - uint32_t prtpwr : 1; - uint32_t prttstctl : 4; - uint32_t prtspd : 2; - uint32_t reserved_19_31 : 13; -#endif - } s; - struct cvmx_usbcx_hprt_s cn30xx; - struct cvmx_usbcx_hprt_s cn31xx; - struct cvmx_usbcx_hprt_s cn50xx; - struct cvmx_usbcx_hprt_s cn52xx; - struct cvmx_usbcx_hprt_s cn52xxp1; - struct cvmx_usbcx_hprt_s cn56xx; - struct cvmx_usbcx_hprt_s cn56xxp1; -} cvmx_usbcx_hprt_t; - - -/** - * cvmx_usbc#_hptxfsiz - * - * Host Periodic Transmit FIFO Size Register (HPTXFSIZ) - * - * This register holds the size and the memory start address of the Periodic TxFIFO, as shown in Figures 310 and 311. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hptxfsiz_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ptxfsize : 16; /**< Host Periodic TxFIFO Depth (PTxFSize) - This value is in terms of 32-bit words. - * Minimum value is 16 - * Maximum value is 32768 */ - uint32_t ptxfstaddr : 16; /**< Host Periodic TxFIFO Start Address (PTxFStAddr) */ -#else - uint32_t ptxfstaddr : 16; - uint32_t ptxfsize : 16; -#endif - } s; - struct cvmx_usbcx_hptxfsiz_s cn30xx; - struct cvmx_usbcx_hptxfsiz_s cn31xx; - struct cvmx_usbcx_hptxfsiz_s cn50xx; - struct cvmx_usbcx_hptxfsiz_s cn52xx; - struct cvmx_usbcx_hptxfsiz_s cn52xxp1; - struct cvmx_usbcx_hptxfsiz_s cn56xx; - struct cvmx_usbcx_hptxfsiz_s cn56xxp1; -} cvmx_usbcx_hptxfsiz_t; - - -/** - * cvmx_usbc#_hptxsts - * - * Host Periodic Transmit FIFO/Queue Status Register (HPTXSTS) - * - * This read-only register contains the free space information for the Periodic TxFIFO and - * the Periodic Transmit Request Queue - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_hptxsts_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t ptxqtop : 8; /**< Top of the Periodic Transmit Request Queue (PTxQTop) - This indicates the entry in the Periodic Tx Request Queue that - is currently being processes by the MAC. - This register is used for debugging. - * Bit [31]: Odd/Even (micro)frame - - 1'b0: send in even (micro)frame - - 1'b1: send in odd (micro)frame - * Bits [30:27]: Channel/endpoint number - * Bits [26:25]: Type - - 2'b00: IN/OUT - - 2'b01: Zero-length packet - - 2'b10: CSPLIT - - 2'b11: Disable channel command - * Bit [24]: Terminate (last entry for the selected - channel/endpoint) */ - uint32_t ptxqspcavail : 8; /**< Periodic Transmit Request Queue Space Available - (PTxQSpcAvail) - Indicates the number of free locations available to be written in - the Periodic Transmit Request Queue. This queue holds both - IN and OUT requests. - * 8'h0: Periodic Transmit Request Queue is full - * 8'h1: 1 location available - * 8'h2: 2 locations available - * n: n locations available (0..8) - * Others: Reserved */ - uint32_t ptxfspcavail : 16; /**< Periodic Transmit Data FIFO Space Available (PTxFSpcAvail) - Indicates the number of free locations available to be written to - in the Periodic TxFIFO. - Values are in terms of 32-bit words - * 16'h0: Periodic TxFIFO is full - * 16'h1: 1 word available - * 16'h2: 2 words available - * 16'hn: n words available (where 0..32768) - * 16'h8000: 32768 words available - * Others: Reserved */ -#else - uint32_t ptxfspcavail : 16; - uint32_t ptxqspcavail : 8; - uint32_t ptxqtop : 8; -#endif - } s; - struct cvmx_usbcx_hptxsts_s cn30xx; - struct cvmx_usbcx_hptxsts_s cn31xx; - struct cvmx_usbcx_hptxsts_s cn50xx; - struct cvmx_usbcx_hptxsts_s cn52xx; - struct cvmx_usbcx_hptxsts_s cn52xxp1; - struct cvmx_usbcx_hptxsts_s cn56xx; - struct cvmx_usbcx_hptxsts_s cn56xxp1; -} cvmx_usbcx_hptxsts_t; - - -/** - * cvmx_usbc#_nptxdfifo# - * - * NPTX Data Fifo (NPTXDFIFO) - * - * A slave mode application uses this register to access the Tx FIFO for channel n. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_nptxdfifox_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t data : 32; /**< Reserved */ -#else - uint32_t data : 32; -#endif - } s; - struct cvmx_usbcx_nptxdfifox_s cn30xx; - struct cvmx_usbcx_nptxdfifox_s cn31xx; - struct cvmx_usbcx_nptxdfifox_s cn50xx; - struct cvmx_usbcx_nptxdfifox_s cn52xx; - struct cvmx_usbcx_nptxdfifox_s cn52xxp1; - struct cvmx_usbcx_nptxdfifox_s cn56xx; - struct cvmx_usbcx_nptxdfifox_s cn56xxp1; -} cvmx_usbcx_nptxdfifox_t; - - -/** - * cvmx_usbc#_pcgcctl - * - * Power and Clock Gating Control Register (PCGCCTL) - * - * The application can use this register to control the core's power-down and clock gating features. - */ -typedef union -{ - uint32_t u32; - struct cvmx_usbcx_pcgcctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint32_t reserved_5_31 : 27; - uint32_t physuspended : 1; /**< PHY Suspended. (PhySuspended) - Indicates that the PHY has been suspended. After the - application sets the Stop Pclk bit (bit 0), this bit is updated once - the PHY is suspended. - Since the UTMI+ PHY suspend is controlled through a port, the - UTMI+ PHY is suspended immediately after Stop Pclk is set. - However, the ULPI PHY takes a few clocks to suspend, - because the suspend information is conveyed through the ULPI - protocol to the ULPI PHY. */ - uint32_t rstpdwnmodule : 1; /**< Reset Power-Down Modules (RstPdwnModule) - This bit is valid only in Partial Power-Down mode. The - application sets this bit when the power is turned off. The - application clears this bit after the power is turned on and the - PHY clock is up. */ - uint32_t pwrclmp : 1; /**< Power Clamp (PwrClmp) - This bit is only valid in Partial Power-Down mode. The - application sets this bit before the power is turned off to clamp - the signals between the power-on modules and the power-off - modules. The application clears the bit to disable the clamping - before the power is turned on. */ - uint32_t gatehclk : 1; /**< Gate Hclk (GateHclk) - The application sets this bit to gate hclk to modules other than - the AHB Slave and Master and wakeup logic when the USB is - suspended or the session is not valid. The application clears - this bit when the USB is resumed or a new session starts. */ - uint32_t stoppclk : 1; /**< Stop Pclk (StopPclk) - The application sets this bit to stop the PHY clock (phy_clk) - when the USB is suspended, the session is not valid, or the - device is disconnected. The application clears this bit when the - USB is resumed or a new session starts. */ -#else - uint32_t stoppclk : 1; - uint32_t gatehclk : 1; - uint32_t pwrclmp : 1; - uint32_t rstpdwnmodule : 1; - uint32_t physuspended : 1; - uint32_t reserved_5_31 : 27; -#endif - } s; - struct cvmx_usbcx_pcgcctl_s cn30xx; - struct cvmx_usbcx_pcgcctl_s cn31xx; - struct cvmx_usbcx_pcgcctl_s cn50xx; - struct cvmx_usbcx_pcgcctl_s cn52xx; - struct cvmx_usbcx_pcgcctl_s cn52xxp1; - struct cvmx_usbcx_pcgcctl_s cn56xx; - struct cvmx_usbcx_pcgcctl_s cn56xxp1; -} cvmx_usbcx_pcgcctl_t; - - -/** - * cvmx_usbn#_bist_status - * - * USBN_BIST_STATUS = USBN's Control and Status - * - * Contain general control bits and status information for the USBN. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_bist_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_7_63 : 57; - uint64_t u2nc_bis : 1; /**< Bist status U2N CTL FIFO Memory. */ - uint64_t u2nf_bis : 1; /**< Bist status U2N FIFO Memory. */ - uint64_t e2hc_bis : 1; /**< Bist status E2H CTL FIFO Memory. */ - uint64_t n2uf_bis : 1; /**< Bist status N2U FIFO Memory. */ - uint64_t usbc_bis : 1; /**< Bist status USBC FIFO Memory. */ - uint64_t nif_bis : 1; /**< Bist status for Inbound Memory. */ - uint64_t nof_bis : 1; /**< Bist status for Outbound Memory. */ -#else - uint64_t nof_bis : 1; - uint64_t nif_bis : 1; - uint64_t usbc_bis : 1; - uint64_t n2uf_bis : 1; - uint64_t e2hc_bis : 1; - uint64_t u2nf_bis : 1; - uint64_t u2nc_bis : 1; - uint64_t reserved_7_63 : 57; -#endif - } s; - struct cvmx_usbnx_bist_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_3_63 : 61; - uint64_t usbc_bis : 1; /**< Bist status USBC FIFO Memory. */ - uint64_t nif_bis : 1; /**< Bist status for Inbound Memory. */ - uint64_t nof_bis : 1; /**< Bist status for Outbound Memory. */ -#else - uint64_t nof_bis : 1; - uint64_t nif_bis : 1; - uint64_t usbc_bis : 1; - uint64_t reserved_3_63 : 61; -#endif - } cn30xx; - struct cvmx_usbnx_bist_status_cn30xx cn31xx; - struct cvmx_usbnx_bist_status_s cn50xx; - struct cvmx_usbnx_bist_status_s cn52xx; - struct cvmx_usbnx_bist_status_s cn52xxp1; - struct cvmx_usbnx_bist_status_s cn56xx; - struct cvmx_usbnx_bist_status_s cn56xxp1; -} cvmx_usbnx_bist_status_t; - - -/** - * cvmx_usbn#_clk_ctl - * - * USBN_CLK_CTL = USBN's Clock Control - * - * This register is used to control the frequency of the hclk and the hreset and phy_rst signals. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_clk_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t divide2 : 2; /**< The 'hclk' used by the USB subsystem is derived - from the eclk. - Also see the field DIVIDE. DIVIDE2<1> must currently - be zero because it is not implemented, so the maximum - ratio of eclk/hclk is currently 16. - The actual divide number for hclk is: - (DIVIDE2 + 1) * (DIVIDE + 1) */ - uint64_t hclk_rst : 1; /**< When this field is '0' the HCLK-DIVIDER used to - generate the hclk in the USB Subsystem is held - in reset. This bit must be set to '0' before - changing the value os DIVIDE in this register. - The reset to the HCLK_DIVIDERis also asserted - when core reset is asserted. */ - uint64_t p_x_on : 1; /**< Force USB-PHY on during suspend. - '1' USB-PHY XO block is powered-down during - suspend. - '0' USB-PHY XO block is powered-up during - suspend. - The value of this field must be set while POR is - active. */ - uint64_t reserved_14_15 : 2; - uint64_t p_com_on : 1; /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to - remain powered in Suspend Mode. - '1' The USB-PHY XO Bias, Bandgap and PLL are - powered down in suspend mode. - The value of this field must be set while POR is - active. */ - uint64_t p_c_sel : 2; /**< Phy clock speed select. - Selects the reference clock / crystal frequency. - '11': Reserved - '10': 48 MHz (reserved when a crystal is used) - '01': 24 MHz (reserved when a crystal is used) - '00': 12 MHz - The value of this field must be set while POR is - active. - NOTE: if a crystal is used as a reference clock, - this field must be set to 12 MHz. */ - uint64_t cdiv_byp : 1; /**< Used to enable the bypass input to the USB_CLK_DIV. */ - uint64_t sd_mode : 2; /**< Scaledown mode for the USBC. Control timing events - in the USBC, for normal operation this must be '0'. */ - uint64_t s_bist : 1; /**< Starts bist on the hclk memories, during the '0' - to '1' transition. */ - uint64_t por : 1; /**< Power On Reset for the PHY. - Resets all the PHYS registers and state machines. */ - uint64_t enable : 1; /**< When '1' allows the generation of the hclk. When - '0' the hclk will not be generated. SEE DIVIDE - field of this register. */ - uint64_t prst : 1; /**< When this field is '0' the reset associated with - the phy_clk functionality in the USB Subsystem is - help in reset. This bit should not be set to '1' - until the time it takes 6 clocks (hclk or phy_clk, - whichever is slower) has passed. Under normal - operation once this bit is set to '1' it should not - be set to '0'. */ - uint64_t hrst : 1; /**< When this field is '0' the reset associated with - the hclk functioanlity in the USB Subsystem is - held in reset.This bit should not be set to '1' - until 12ms after phy_clk is stable. Under normal - operation, once this bit is set to '1' it should - not be set to '0'. */ - uint64_t divide : 3; /**< The frequency of 'hclk' used by the USB subsystem - is the eclk frequency divided by the value of - (DIVIDE2 + 1) * (DIVIDE + 1), also see the field - DIVIDE2 of this register. - The hclk frequency should be less than 125Mhz. - After writing a value to this field the SW should - read the field for the value written. - The ENABLE field of this register should not be set - until AFTER this field is set and then read. */ -#else - uint64_t divide : 3; - uint64_t hrst : 1; - uint64_t prst : 1; - uint64_t enable : 1; - uint64_t por : 1; - uint64_t s_bist : 1; - uint64_t sd_mode : 2; - uint64_t cdiv_byp : 1; - uint64_t p_c_sel : 2; - uint64_t p_com_on : 1; - uint64_t reserved_14_15 : 2; - uint64_t p_x_on : 1; - uint64_t hclk_rst : 1; - uint64_t divide2 : 2; - uint64_t reserved_20_63 : 44; -#endif - } s; - struct cvmx_usbnx_clk_ctl_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_18_63 : 46; - uint64_t hclk_rst : 1; /**< When this field is '0' the HCLK-DIVIDER used to - generate the hclk in the USB Subsystem is held - in reset. This bit must be set to '0' before - changing the value os DIVIDE in this register. - The reset to the HCLK_DIVIDERis also asserted - when core reset is asserted. */ - uint64_t p_x_on : 1; /**< Force USB-PHY on during suspend. - '1' USB-PHY XO block is powered-down during - suspend. - '0' USB-PHY XO block is powered-up during - suspend. - The value of this field must be set while POR is - active. */ - uint64_t p_rclk : 1; /**< Phy refrence clock enable. - '1' The PHY PLL uses the XO block output as a - reference. - '0' Reserved. */ - uint64_t p_xenbn : 1; /**< Phy external clock enable. - '1' The XO block uses the clock from a crystal. - '0' The XO block uses an external clock supplied - on the XO pin. USB_XI should be tied to - ground for this usage. */ - uint64_t p_com_on : 1; /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to - remain powered in Suspend Mode. - '1' The USB-PHY XO Bias, Bandgap and PLL are - powered down in suspend mode. - The value of this field must be set while POR is - active. */ - uint64_t p_c_sel : 2; /**< Phy clock speed select. - Selects the reference clock / crystal frequency. - '11': Reserved - '10': 48 MHz - '01': 24 MHz - '00': 12 MHz - The value of this field must be set while POR is - active. */ - uint64_t cdiv_byp : 1; /**< Used to enable the bypass input to the USB_CLK_DIV. */ - uint64_t sd_mode : 2; /**< Scaledown mode for the USBC. Control timing events - in the USBC, for normal operation this must be '0'. */ - uint64_t s_bist : 1; /**< Starts bist on the hclk memories, during the '0' - to '1' transition. */ - uint64_t por : 1; /**< Power On Reset for the PHY. - Resets all the PHYS registers and state machines. */ - uint64_t enable : 1; /**< When '1' allows the generation of the hclk. When - '0' the hclk will not be generated. */ - uint64_t prst : 1; /**< When this field is '0' the reset associated with - the phy_clk functionality in the USB Subsystem is - help in reset. This bit should not be set to '1' - until the time it takes 6 clocks (hclk or phy_clk, - whichever is slower) has passed. Under normal - operation once this bit is set to '1' it should not - be set to '0'. */ - uint64_t hrst : 1; /**< When this field is '0' the reset associated with - the hclk functioanlity in the USB Subsystem is - held in reset.This bit should not be set to '1' - until 12ms after phy_clk is stable. Under normal - operation, once this bit is set to '1' it should - not be set to '0'. */ - uint64_t divide : 3; /**< The 'hclk' used by the USB subsystem is derived - from the eclk. The eclk will be divided by the - value of this field +1 to determine the hclk - frequency. (Also see HRST of this register). - The hclk frequency must be less than 125 MHz. */ -#else - uint64_t divide : 3; - uint64_t hrst : 1; - uint64_t prst : 1; - uint64_t enable : 1; - uint64_t por : 1; - uint64_t s_bist : 1; - uint64_t sd_mode : 2; - uint64_t cdiv_byp : 1; - uint64_t p_c_sel : 2; - uint64_t p_com_on : 1; - uint64_t p_xenbn : 1; - uint64_t p_rclk : 1; - uint64_t p_x_on : 1; - uint64_t hclk_rst : 1; - uint64_t reserved_18_63 : 46; -#endif - } cn30xx; - struct cvmx_usbnx_clk_ctl_cn30xx cn31xx; - struct cvmx_usbnx_clk_ctl_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_20_63 : 44; - uint64_t divide2 : 2; /**< The 'hclk' used by the USB subsystem is derived - from the eclk. - Also see the field DIVIDE. DIVIDE2<1> must currently - be zero because it is not implemented, so the maximum - ratio of eclk/hclk is currently 16. - The actual divide number for hclk is: - (DIVIDE2 + 1) * (DIVIDE + 1) */ - uint64_t hclk_rst : 1; /**< When this field is '0' the HCLK-DIVIDER used to - generate the hclk in the USB Subsystem is held - in reset. This bit must be set to '0' before - changing the value os DIVIDE in this register. - The reset to the HCLK_DIVIDERis also asserted - when core reset is asserted. */ - uint64_t reserved_16_16 : 1; - uint64_t p_rtype : 2; /**< PHY reference clock type - '0' The USB-PHY uses a 12MHz crystal as a clock - source at the USB_XO and USB_XI pins - '1' Reserved - '2' The USB_PHY uses 12/24/48MHz 2.5V board clock - at the USB_XO pin. USB_XI should be tied to - ground in this case. - '3' Reserved - (bit 14 was P_XENBN on 3xxx) - (bit 15 was P_RCLK on 3xxx) */ - uint64_t p_com_on : 1; /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to - remain powered in Suspend Mode. - '1' The USB-PHY XO Bias, Bandgap and PLL are - powered down in suspend mode. - The value of this field must be set while POR is - active. */ - uint64_t p_c_sel : 2; /**< Phy clock speed select. - Selects the reference clock / crystal frequency. - '11': Reserved - '10': 48 MHz (reserved when a crystal is used) - '01': 24 MHz (reserved when a crystal is used) - '00': 12 MHz - The value of this field must be set while POR is - active. - NOTE: if a crystal is used as a reference clock, - this field must be set to 12 MHz. */ - uint64_t cdiv_byp : 1; /**< Used to enable the bypass input to the USB_CLK_DIV. */ - uint64_t sd_mode : 2; /**< Scaledown mode for the USBC. Control timing events - in the USBC, for normal operation this must be '0'. */ - uint64_t s_bist : 1; /**< Starts bist on the hclk memories, during the '0' - to '1' transition. */ - uint64_t por : 1; /**< Power On Reset for the PHY. - Resets all the PHYS registers and state machines. */ - uint64_t enable : 1; /**< When '1' allows the generation of the hclk. When - '0' the hclk will not be generated. SEE DIVIDE - field of this register. */ - uint64_t prst : 1; /**< When this field is '0' the reset associated with - the phy_clk functionality in the USB Subsystem is - help in reset. This bit should not be set to '1' - until the time it takes 6 clocks (hclk or phy_clk, - whichever is slower) has passed. Under normal - operation once this bit is set to '1' it should not - be set to '0'. */ - uint64_t hrst : 1; /**< When this field is '0' the reset associated with - the hclk functioanlity in the USB Subsystem is - held in reset.This bit should not be set to '1' - until 12ms after phy_clk is stable. Under normal - operation, once this bit is set to '1' it should - not be set to '0'. */ - uint64_t divide : 3; /**< The frequency of 'hclk' used by the USB subsystem - is the eclk frequency divided by the value of - (DIVIDE2 + 1) * (DIVIDE + 1), also see the field - DIVIDE2 of this register. - The hclk frequency should be less than 125Mhz. - After writing a value to this field the SW should - read the field for the value written. - The ENABLE field of this register should not be set - until AFTER this field is set and then read. */ -#else - uint64_t divide : 3; - uint64_t hrst : 1; - uint64_t prst : 1; - uint64_t enable : 1; - uint64_t por : 1; - uint64_t s_bist : 1; - uint64_t sd_mode : 2; - uint64_t cdiv_byp : 1; - uint64_t p_c_sel : 2; - uint64_t p_com_on : 1; - uint64_t p_rtype : 2; - uint64_t reserved_16_16 : 1; - uint64_t hclk_rst : 1; - uint64_t divide2 : 2; - uint64_t reserved_20_63 : 44; -#endif - } cn50xx; - struct cvmx_usbnx_clk_ctl_cn50xx cn52xx; - struct cvmx_usbnx_clk_ctl_cn50xx cn52xxp1; - struct cvmx_usbnx_clk_ctl_cn50xx cn56xx; - struct cvmx_usbnx_clk_ctl_cn50xx cn56xxp1; -} cvmx_usbnx_clk_ctl_t; - - -/** - * cvmx_usbn#_ctl_status - * - * USBN_CTL_STATUS = USBN's Control And Status Register - * - * Contains general control and status information for the USBN block. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_6_63 : 58; - uint64_t dma_0pag : 1; /**< When '1' sets the DMA engine will set the zero-Page - bit in the L2C store operation to the IOB. */ - uint64_t dma_stt : 1; /**< When '1' sets the DMA engine to use STT operations. */ - uint64_t dma_test : 1; /**< When '1' sets the DMA engine into Test-Mode. - For normal operation this bit should be '0'. */ - uint64_t inv_a2 : 1; /**< When '1' causes the address[2] driven on the AHB - for USB-CORE FIFO access to be inverted. Also data - writen to and read from the AHB will have it byte - order swapped. If the orginal order was A-B-C-D the - new byte order will be D-C-B-A. */ - uint64_t l2c_emod : 2; /**< Endian format for data from/to the L2C. - IN: A-B-C-D-E-F-G-H - OUT0: A-B-C-D-E-F-G-H - OUT1: H-G-F-E-D-C-B-A - OUT2: D-C-B-A-H-G-F-E - OUT3: E-F-G-H-A-B-C-D */ -#else - uint64_t l2c_emod : 2; - uint64_t inv_a2 : 1; - uint64_t dma_test : 1; - uint64_t dma_stt : 1; - uint64_t dma_0pag : 1; - uint64_t reserved_6_63 : 58; -#endif - } s; - struct cvmx_usbnx_ctl_status_s cn30xx; - struct cvmx_usbnx_ctl_status_s cn31xx; - struct cvmx_usbnx_ctl_status_s cn50xx; - struct cvmx_usbnx_ctl_status_s cn52xx; - struct cvmx_usbnx_ctl_status_s cn52xxp1; - struct cvmx_usbnx_ctl_status_s cn56xx; - struct cvmx_usbnx_ctl_status_s cn56xxp1; -} cvmx_usbnx_ctl_status_t; - - -/** - * cvmx_usbn#_dma0_inb_chn0 - * - * USBN_DMA0_INB_CHN0 = USBN's Inbound DMA for USB0 Channel0 - * - * Contains the starting address for use when USB0 writes to L2C via Channel0. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn0_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn0_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn0_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn0_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn0_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn0_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn0_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn0_t; - - -/** - * cvmx_usbn#_dma0_inb_chn1 - * - * USBN_DMA0_INB_CHN1 = USBN's Inbound DMA for USB0 Channel1 - * - * Contains the starting address for use when USB0 writes to L2C via Channel1. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn1_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn1_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn1_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn1_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn1_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn1_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn1_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn1_t; - - -/** - * cvmx_usbn#_dma0_inb_chn2 - * - * USBN_DMA0_INB_CHN2 = USBN's Inbound DMA for USB0 Channel2 - * - * Contains the starting address for use when USB0 writes to L2C via Channel2. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn2_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn2_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn2_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn2_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn2_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn2_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn2_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn2_t; - - -/** - * cvmx_usbn#_dma0_inb_chn3 - * - * USBN_DMA0_INB_CHN3 = USBN's Inbound DMA for USB0 Channel3 - * - * Contains the starting address for use when USB0 writes to L2C via Channel3. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn3_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn3_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn3_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn3_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn3_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn3_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn3_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn3_t; - - -/** - * cvmx_usbn#_dma0_inb_chn4 - * - * USBN_DMA0_INB_CHN4 = USBN's Inbound DMA for USB0 Channel4 - * - * Contains the starting address for use when USB0 writes to L2C via Channel4. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn4_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn4_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn4_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn4_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn4_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn4_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn4_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn4_t; - - -/** - * cvmx_usbn#_dma0_inb_chn5 - * - * USBN_DMA0_INB_CHN5 = USBN's Inbound DMA for USB0 Channel5 - * - * Contains the starting address for use when USB0 writes to L2C via Channel5. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn5_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn5_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn5_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn5_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn5_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn5_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn5_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn5_t; - - -/** - * cvmx_usbn#_dma0_inb_chn6 - * - * USBN_DMA0_INB_CHN6 = USBN's Inbound DMA for USB0 Channel6 - * - * Contains the starting address for use when USB0 writes to L2C via Channel6. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn6_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn6_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn6_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn6_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn6_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn6_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn6_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn6_t; - - -/** - * cvmx_usbn#_dma0_inb_chn7 - * - * USBN_DMA0_INB_CHN7 = USBN's Inbound DMA for USB0 Channel7 - * - * Contains the starting address for use when USB0 writes to L2C via Channel7. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_inb_chn7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Write to L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_inb_chn7_s cn30xx; - struct cvmx_usbnx_dma0_inb_chn7_s cn31xx; - struct cvmx_usbnx_dma0_inb_chn7_s cn50xx; - struct cvmx_usbnx_dma0_inb_chn7_s cn52xx; - struct cvmx_usbnx_dma0_inb_chn7_s cn52xxp1; - struct cvmx_usbnx_dma0_inb_chn7_s cn56xx; - struct cvmx_usbnx_dma0_inb_chn7_s cn56xxp1; -} cvmx_usbnx_dma0_inb_chn7_t; - - -/** - * cvmx_usbn#_dma0_outb_chn0 - * - * USBN_DMA0_OUTB_CHN0 = USBN's Outbound DMA for USB0 Channel0 - * - * Contains the starting address for use when USB0 reads from L2C via Channel0. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn0_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn0_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn0_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn0_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn0_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn0_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn0_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn0_t; - - -/** - * cvmx_usbn#_dma0_outb_chn1 - * - * USBN_DMA0_OUTB_CHN1 = USBN's Outbound DMA for USB0 Channel1 - * - * Contains the starting address for use when USB0 reads from L2C via Channel1. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn1_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn1_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn1_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn1_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn1_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn1_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn1_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn1_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn1_t; - - -/** - * cvmx_usbn#_dma0_outb_chn2 - * - * USBN_DMA0_OUTB_CHN2 = USBN's Outbound DMA for USB0 Channel2 - * - * Contains the starting address for use when USB0 reads from L2C via Channel2. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn2_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn2_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn2_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn2_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn2_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn2_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn2_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn2_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn2_t; - - -/** - * cvmx_usbn#_dma0_outb_chn3 - * - * USBN_DMA0_OUTB_CHN3 = USBN's Outbound DMA for USB0 Channel3 - * - * Contains the starting address for use when USB0 reads from L2C via Channel3. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn3_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn3_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn3_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn3_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn3_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn3_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn3_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn3_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn3_t; - - -/** - * cvmx_usbn#_dma0_outb_chn4 - * - * USBN_DMA0_OUTB_CHN4 = USBN's Outbound DMA for USB0 Channel4 - * - * Contains the starting address for use when USB0 reads from L2C via Channel4. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn4_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn4_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn4_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn4_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn4_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn4_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn4_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn4_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn4_t; - - -/** - * cvmx_usbn#_dma0_outb_chn5 - * - * USBN_DMA0_OUTB_CHN5 = USBN's Outbound DMA for USB0 Channel5 - * - * Contains the starting address for use when USB0 reads from L2C via Channel5. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn5_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn5_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn5_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn5_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn5_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn5_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn5_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn5_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn5_t; - - -/** - * cvmx_usbn#_dma0_outb_chn6 - * - * USBN_DMA0_OUTB_CHN6 = USBN's Outbound DMA for USB0 Channel6 - * - * Contains the starting address for use when USB0 reads from L2C via Channel6. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn6_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn6_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn6_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn6_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn6_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn6_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn6_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn6_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn6_t; - - -/** - * cvmx_usbn#_dma0_outb_chn7 - * - * USBN_DMA0_OUTB_CHN7 = USBN's Outbound DMA for USB0 Channel7 - * - * Contains the starting address for use when USB0 reads from L2C via Channel7. - * Writing of this register sets the base address. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma0_outb_chn7_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_36_63 : 28; - uint64_t addr : 36; /**< Base address for DMA Read from L2C. */ -#else - uint64_t addr : 36; - uint64_t reserved_36_63 : 28; -#endif - } s; - struct cvmx_usbnx_dma0_outb_chn7_s cn30xx; - struct cvmx_usbnx_dma0_outb_chn7_s cn31xx; - struct cvmx_usbnx_dma0_outb_chn7_s cn50xx; - struct cvmx_usbnx_dma0_outb_chn7_s cn52xx; - struct cvmx_usbnx_dma0_outb_chn7_s cn52xxp1; - struct cvmx_usbnx_dma0_outb_chn7_s cn56xx; - struct cvmx_usbnx_dma0_outb_chn7_s cn56xxp1; -} cvmx_usbnx_dma0_outb_chn7_t; - - -/** - * cvmx_usbn#_dma_test - * - * USBN_DMA_TEST = USBN's DMA TestRegister - * - * This register can cause the external DMA engine to the USB-Core to make transfers from/to L2C/USB-FIFOs - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_dma_test_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_40_63 : 24; - uint64_t done : 1; /**< This field is set when a DMA completes. Writing a - '1' to this field clears this bit. */ - uint64_t req : 1; /**< DMA Request. Writing a 1 to this register - will cause a DMA request as specified in the other - fields of this register to take place. This field - will always read as '0'. */ - uint64_t f_addr : 18; /**< The address to read from in the Data-Fifo. */ - uint64_t count : 11; /**< DMA Request Count. */ - uint64_t channel : 5; /**< DMA Channel/Enpoint. */ - uint64_t burst : 4; /**< DMA Burst Size. */ -#else - uint64_t burst : 4; - uint64_t channel : 5; - uint64_t count : 11; - uint64_t f_addr : 18; - uint64_t req : 1; - uint64_t done : 1; - uint64_t reserved_40_63 : 24; -#endif - } s; - struct cvmx_usbnx_dma_test_s cn30xx; - struct cvmx_usbnx_dma_test_s cn31xx; - struct cvmx_usbnx_dma_test_s cn50xx; - struct cvmx_usbnx_dma_test_s cn52xx; - struct cvmx_usbnx_dma_test_s cn52xxp1; - struct cvmx_usbnx_dma_test_s cn56xx; - struct cvmx_usbnx_dma_test_s cn56xxp1; -} cvmx_usbnx_dma_test_t; - - -/** - * cvmx_usbn#_int_enb - * - * USBN_INT_ENB = USBN's Interrupt Enable - * - * The USBN's interrupt enable register. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_int_enb_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t nd4o_dpf : 1; /**< When set (1) and bit 37 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_dpe : 1; /**< When set (1) and bit 36 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_rpf : 1; /**< When set (1) and bit 35 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_rpe : 1; /**< When set (1) and bit 34 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t ltl_f_pf : 1; /**< When set (1) and bit 33 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t ltl_f_pe : 1; /**< When set (1) and bit 32 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t u2n_c_pe : 1; /**< When set (1) and bit 31 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t u2n_c_pf : 1; /**< When set (1) and bit 30 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t u2n_d_pf : 1; /**< When set (1) and bit 29 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t u2n_d_pe : 1; /**< When set (1) and bit 28 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t n2u_pe : 1; /**< When set (1) and bit 27 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t n2u_pf : 1; /**< When set (1) and bit 26 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t uod_pf : 1; /**< When set (1) and bit 25 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t uod_pe : 1; /**< When set (1) and bit 24 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q3_e : 1; /**< When set (1) and bit 23 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q3_f : 1; /**< When set (1) and bit 22 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q2_e : 1; /**< When set (1) and bit 21 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q2_f : 1; /**< When set (1) and bit 20 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rg_fi_f : 1; /**< When set (1) and bit 19 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rg_fi_e : 1; /**< When set (1) and bit 18 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2_fi_f : 1; /**< When set (1) and bit 17 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2_fi_e : 1; /**< When set (1) and bit 16 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2c_a_f : 1; /**< When set (1) and bit 15 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2c_s_e : 1; /**< When set (1) and bit 14 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t dcred_f : 1; /**< When set (1) and bit 13 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t dcred_e : 1; /**< When set (1) and bit 12 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lt_pu_f : 1; /**< When set (1) and bit 11 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lt_po_e : 1; /**< When set (1) and bit 10 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nt_pu_f : 1; /**< When set (1) and bit 9 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nt_po_e : 1; /**< When set (1) and bit 8 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pt_pu_f : 1; /**< When set (1) and bit 7 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pt_po_e : 1; /**< When set (1) and bit 6 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lr_pu_f : 1; /**< When set (1) and bit 5 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lr_po_e : 1; /**< When set (1) and bit 4 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nr_pu_f : 1; /**< When set (1) and bit 3 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nr_po_e : 1; /**< When set (1) and bit 2 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pr_pu_f : 1; /**< When set (1) and bit 1 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pr_po_e : 1; /**< When set (1) and bit 0 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ -#else - uint64_t pr_po_e : 1; - uint64_t pr_pu_f : 1; - uint64_t nr_po_e : 1; - uint64_t nr_pu_f : 1; - uint64_t lr_po_e : 1; - uint64_t lr_pu_f : 1; - uint64_t pt_po_e : 1; - uint64_t pt_pu_f : 1; - uint64_t nt_po_e : 1; - uint64_t nt_pu_f : 1; - uint64_t lt_po_e : 1; - uint64_t lt_pu_f : 1; - uint64_t dcred_e : 1; - uint64_t dcred_f : 1; - uint64_t l2c_s_e : 1; - uint64_t l2c_a_f : 1; - uint64_t l2_fi_e : 1; - uint64_t l2_fi_f : 1; - uint64_t rg_fi_e : 1; - uint64_t rg_fi_f : 1; - uint64_t rq_q2_f : 1; - uint64_t rq_q2_e : 1; - uint64_t rq_q3_f : 1; - uint64_t rq_q3_e : 1; - uint64_t uod_pe : 1; - uint64_t uod_pf : 1; - uint64_t n2u_pf : 1; - uint64_t n2u_pe : 1; - uint64_t u2n_d_pe : 1; - uint64_t u2n_d_pf : 1; - uint64_t u2n_c_pf : 1; - uint64_t u2n_c_pe : 1; - uint64_t ltl_f_pe : 1; - uint64_t ltl_f_pf : 1; - uint64_t nd4o_rpe : 1; - uint64_t nd4o_rpf : 1; - uint64_t nd4o_dpe : 1; - uint64_t nd4o_dpf : 1; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_usbnx_int_enb_s cn30xx; - struct cvmx_usbnx_int_enb_s cn31xx; - struct cvmx_usbnx_int_enb_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t nd4o_dpf : 1; /**< When set (1) and bit 37 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_dpe : 1; /**< When set (1) and bit 36 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_rpf : 1; /**< When set (1) and bit 35 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nd4o_rpe : 1; /**< When set (1) and bit 34 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t ltl_f_pf : 1; /**< When set (1) and bit 33 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t ltl_f_pe : 1; /**< When set (1) and bit 32 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t reserved_26_31 : 6; - uint64_t uod_pf : 1; /**< When set (1) and bit 25 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t uod_pe : 1; /**< When set (1) and bit 24 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q3_e : 1; /**< When set (1) and bit 23 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q3_f : 1; /**< When set (1) and bit 22 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q2_e : 1; /**< When set (1) and bit 21 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rq_q2_f : 1; /**< When set (1) and bit 20 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rg_fi_f : 1; /**< When set (1) and bit 19 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t rg_fi_e : 1; /**< When set (1) and bit 18 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2_fi_f : 1; /**< When set (1) and bit 17 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2_fi_e : 1; /**< When set (1) and bit 16 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2c_a_f : 1; /**< When set (1) and bit 15 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t l2c_s_e : 1; /**< When set (1) and bit 14 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t dcred_f : 1; /**< When set (1) and bit 13 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t dcred_e : 1; /**< When set (1) and bit 12 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lt_pu_f : 1; /**< When set (1) and bit 11 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lt_po_e : 1; /**< When set (1) and bit 10 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nt_pu_f : 1; /**< When set (1) and bit 9 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nt_po_e : 1; /**< When set (1) and bit 8 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pt_pu_f : 1; /**< When set (1) and bit 7 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pt_po_e : 1; /**< When set (1) and bit 6 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lr_pu_f : 1; /**< When set (1) and bit 5 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t lr_po_e : 1; /**< When set (1) and bit 4 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nr_pu_f : 1; /**< When set (1) and bit 3 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t nr_po_e : 1; /**< When set (1) and bit 2 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pr_pu_f : 1; /**< When set (1) and bit 1 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ - uint64_t pr_po_e : 1; /**< When set (1) and bit 0 of the USBN_INT_SUM - register is asserted the USBN will assert an - interrupt. */ -#else - uint64_t pr_po_e : 1; - uint64_t pr_pu_f : 1; - uint64_t nr_po_e : 1; - uint64_t nr_pu_f : 1; - uint64_t lr_po_e : 1; - uint64_t lr_pu_f : 1; - uint64_t pt_po_e : 1; - uint64_t pt_pu_f : 1; - uint64_t nt_po_e : 1; - uint64_t nt_pu_f : 1; - uint64_t lt_po_e : 1; - uint64_t lt_pu_f : 1; - uint64_t dcred_e : 1; - uint64_t dcred_f : 1; - uint64_t l2c_s_e : 1; - uint64_t l2c_a_f : 1; - uint64_t l2_fi_e : 1; - uint64_t l2_fi_f : 1; - uint64_t rg_fi_e : 1; - uint64_t rg_fi_f : 1; - uint64_t rq_q2_f : 1; - uint64_t rq_q2_e : 1; - uint64_t rq_q3_f : 1; - uint64_t rq_q3_e : 1; - uint64_t uod_pe : 1; - uint64_t uod_pf : 1; - uint64_t reserved_26_31 : 6; - uint64_t ltl_f_pe : 1; - uint64_t ltl_f_pf : 1; - uint64_t nd4o_rpe : 1; - uint64_t nd4o_rpf : 1; - uint64_t nd4o_dpe : 1; - uint64_t nd4o_dpf : 1; - uint64_t reserved_38_63 : 26; -#endif - } cn50xx; - struct cvmx_usbnx_int_enb_cn50xx cn52xx; - struct cvmx_usbnx_int_enb_cn50xx cn52xxp1; - struct cvmx_usbnx_int_enb_cn50xx cn56xx; - struct cvmx_usbnx_int_enb_cn50xx cn56xxp1; -} cvmx_usbnx_int_enb_t; - - -/** - * cvmx_usbn#_int_sum - * - * USBN_INT_SUM = USBN's Interrupt Summary Register - * - * Contains the diffrent interrupt summary bits of the USBN. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_int_sum_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t nd4o_dpf : 1; /**< NCB DMA Out Data Fifo Push Full. */ - uint64_t nd4o_dpe : 1; /**< NCB DMA Out Data Fifo Pop Empty. */ - uint64_t nd4o_rpf : 1; /**< NCB DMA Out Request Fifo Push Full. */ - uint64_t nd4o_rpe : 1; /**< NCB DMA Out Request Fifo Pop Empty. */ - uint64_t ltl_f_pf : 1; /**< L2C Transfer Length Fifo Push Full. */ - uint64_t ltl_f_pe : 1; /**< L2C Transfer Length Fifo Pop Empty. */ - uint64_t u2n_c_pe : 1; /**< U2N Control Fifo Pop Empty. */ - uint64_t u2n_c_pf : 1; /**< U2N Control Fifo Push Full. */ - uint64_t u2n_d_pf : 1; /**< U2N Data Fifo Push Full. */ - uint64_t u2n_d_pe : 1; /**< U2N Data Fifo Pop Empty. */ - uint64_t n2u_pe : 1; /**< N2U Fifo Pop Empty. */ - uint64_t n2u_pf : 1; /**< N2U Fifo Push Full. */ - uint64_t uod_pf : 1; /**< UOD Fifo Push Full. */ - uint64_t uod_pe : 1; /**< UOD Fifo Pop Empty. */ - uint64_t rq_q3_e : 1; /**< Request Queue-3 Fifo Pushed When Full. */ - uint64_t rq_q3_f : 1; /**< Request Queue-3 Fifo Pushed When Full. */ - uint64_t rq_q2_e : 1; /**< Request Queue-2 Fifo Pushed When Full. */ - uint64_t rq_q2_f : 1; /**< Request Queue-2 Fifo Pushed When Full. */ - uint64_t rg_fi_f : 1; /**< Register Request Fifo Pushed When Full. */ - uint64_t rg_fi_e : 1; /**< Register Request Fifo Pushed When Full. */ - uint64_t lt_fi_f : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t lt_fi_e : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t l2c_a_f : 1; /**< L2C Credit Count Added When Full. */ - uint64_t l2c_s_e : 1; /**< L2C Credit Count Subtracted When Empty. */ - uint64_t dcred_f : 1; /**< Data CreditFifo Pushed When Full. */ - uint64_t dcred_e : 1; /**< Data Credit Fifo Pushed When Full. */ - uint64_t lt_pu_f : 1; /**< L2C Trasaction Fifo Pushed When Full. */ - uint64_t lt_po_e : 1; /**< L2C Trasaction Fifo Popped When Full. */ - uint64_t nt_pu_f : 1; /**< NPI Trasaction Fifo Pushed When Full. */ - uint64_t nt_po_e : 1; /**< NPI Trasaction Fifo Popped When Full. */ - uint64_t pt_pu_f : 1; /**< PP Trasaction Fifo Pushed When Full. */ - uint64_t pt_po_e : 1; /**< PP Trasaction Fifo Popped When Full. */ - uint64_t lr_pu_f : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t lr_po_e : 1; /**< L2C Request Fifo Popped When Empty. */ - uint64_t nr_pu_f : 1; /**< NPI Request Fifo Pushed When Full. */ - uint64_t nr_po_e : 1; /**< NPI Request Fifo Popped When Empty. */ - uint64_t pr_pu_f : 1; /**< PP Request Fifo Pushed When Full. */ - uint64_t pr_po_e : 1; /**< PP Request Fifo Popped When Empty. */ -#else - uint64_t pr_po_e : 1; - uint64_t pr_pu_f : 1; - uint64_t nr_po_e : 1; - uint64_t nr_pu_f : 1; - uint64_t lr_po_e : 1; - uint64_t lr_pu_f : 1; - uint64_t pt_po_e : 1; - uint64_t pt_pu_f : 1; - uint64_t nt_po_e : 1; - uint64_t nt_pu_f : 1; - uint64_t lt_po_e : 1; - uint64_t lt_pu_f : 1; - uint64_t dcred_e : 1; - uint64_t dcred_f : 1; - uint64_t l2c_s_e : 1; - uint64_t l2c_a_f : 1; - uint64_t lt_fi_e : 1; - uint64_t lt_fi_f : 1; - uint64_t rg_fi_e : 1; - uint64_t rg_fi_f : 1; - uint64_t rq_q2_f : 1; - uint64_t rq_q2_e : 1; - uint64_t rq_q3_f : 1; - uint64_t rq_q3_e : 1; - uint64_t uod_pe : 1; - uint64_t uod_pf : 1; - uint64_t n2u_pf : 1; - uint64_t n2u_pe : 1; - uint64_t u2n_d_pe : 1; - uint64_t u2n_d_pf : 1; - uint64_t u2n_c_pf : 1; - uint64_t u2n_c_pe : 1; - uint64_t ltl_f_pe : 1; - uint64_t ltl_f_pf : 1; - uint64_t nd4o_rpe : 1; - uint64_t nd4o_rpf : 1; - uint64_t nd4o_dpe : 1; - uint64_t nd4o_dpf : 1; - uint64_t reserved_38_63 : 26; -#endif - } s; - struct cvmx_usbnx_int_sum_s cn30xx; - struct cvmx_usbnx_int_sum_s cn31xx; - struct cvmx_usbnx_int_sum_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t nd4o_dpf : 1; /**< NCB DMA Out Data Fifo Push Full. */ - uint64_t nd4o_dpe : 1; /**< NCB DMA Out Data Fifo Pop Empty. */ - uint64_t nd4o_rpf : 1; /**< NCB DMA Out Request Fifo Push Full. */ - uint64_t nd4o_rpe : 1; /**< NCB DMA Out Request Fifo Pop Empty. */ - uint64_t ltl_f_pf : 1; /**< L2C Transfer Length Fifo Push Full. */ - uint64_t ltl_f_pe : 1; /**< L2C Transfer Length Fifo Pop Empty. */ - uint64_t reserved_26_31 : 6; - uint64_t uod_pf : 1; /**< UOD Fifo Push Full. */ - uint64_t uod_pe : 1; /**< UOD Fifo Pop Empty. */ - uint64_t rq_q3_e : 1; /**< Request Queue-3 Fifo Pushed When Full. */ - uint64_t rq_q3_f : 1; /**< Request Queue-3 Fifo Pushed When Full. */ - uint64_t rq_q2_e : 1; /**< Request Queue-2 Fifo Pushed When Full. */ - uint64_t rq_q2_f : 1; /**< Request Queue-2 Fifo Pushed When Full. */ - uint64_t rg_fi_f : 1; /**< Register Request Fifo Pushed When Full. */ - uint64_t rg_fi_e : 1; /**< Register Request Fifo Pushed When Full. */ - uint64_t lt_fi_f : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t lt_fi_e : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t l2c_a_f : 1; /**< L2C Credit Count Added When Full. */ - uint64_t l2c_s_e : 1; /**< L2C Credit Count Subtracted When Empty. */ - uint64_t dcred_f : 1; /**< Data CreditFifo Pushed When Full. */ - uint64_t dcred_e : 1; /**< Data Credit Fifo Pushed When Full. */ - uint64_t lt_pu_f : 1; /**< L2C Trasaction Fifo Pushed When Full. */ - uint64_t lt_po_e : 1; /**< L2C Trasaction Fifo Popped When Full. */ - uint64_t nt_pu_f : 1; /**< NPI Trasaction Fifo Pushed When Full. */ - uint64_t nt_po_e : 1; /**< NPI Trasaction Fifo Popped When Full. */ - uint64_t pt_pu_f : 1; /**< PP Trasaction Fifo Pushed When Full. */ - uint64_t pt_po_e : 1; /**< PP Trasaction Fifo Popped When Full. */ - uint64_t lr_pu_f : 1; /**< L2C Request Fifo Pushed When Full. */ - uint64_t lr_po_e : 1; /**< L2C Request Fifo Popped When Empty. */ - uint64_t nr_pu_f : 1; /**< NPI Request Fifo Pushed When Full. */ - uint64_t nr_po_e : 1; /**< NPI Request Fifo Popped When Empty. */ - uint64_t pr_pu_f : 1; /**< PP Request Fifo Pushed When Full. */ - uint64_t pr_po_e : 1; /**< PP Request Fifo Popped When Empty. */ -#else - uint64_t pr_po_e : 1; - uint64_t pr_pu_f : 1; - uint64_t nr_po_e : 1; - uint64_t nr_pu_f : 1; - uint64_t lr_po_e : 1; - uint64_t lr_pu_f : 1; - uint64_t pt_po_e : 1; - uint64_t pt_pu_f : 1; - uint64_t nt_po_e : 1; - uint64_t nt_pu_f : 1; - uint64_t lt_po_e : 1; - uint64_t lt_pu_f : 1; - uint64_t dcred_e : 1; - uint64_t dcred_f : 1; - uint64_t l2c_s_e : 1; - uint64_t l2c_a_f : 1; - uint64_t lt_fi_e : 1; - uint64_t lt_fi_f : 1; - uint64_t rg_fi_e : 1; - uint64_t rg_fi_f : 1; - uint64_t rq_q2_f : 1; - uint64_t rq_q2_e : 1; - uint64_t rq_q3_f : 1; - uint64_t rq_q3_e : 1; - uint64_t uod_pe : 1; - uint64_t uod_pf : 1; - uint64_t reserved_26_31 : 6; - uint64_t ltl_f_pe : 1; - uint64_t ltl_f_pf : 1; - uint64_t nd4o_rpe : 1; - uint64_t nd4o_rpf : 1; - uint64_t nd4o_dpe : 1; - uint64_t nd4o_dpf : 1; - uint64_t reserved_38_63 : 26; -#endif - } cn50xx; - struct cvmx_usbnx_int_sum_cn50xx cn52xx; - struct cvmx_usbnx_int_sum_cn50xx cn52xxp1; - struct cvmx_usbnx_int_sum_cn50xx cn56xx; - struct cvmx_usbnx_int_sum_cn50xx cn56xxp1; -} cvmx_usbnx_int_sum_t; - - -/** - * cvmx_usbn#_usbp_ctl_status - * - * USBN_USBP_CTL_STATUS = USBP Control And Status Register - * - * Contains general control and status information for the USBN block. - */ -typedef union -{ - uint64_t u64; - struct cvmx_usbnx_usbp_ctl_status_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t txrisetune : 1; /**< HS Transmitter Rise/Fall Time Adjustment */ - uint64_t txvreftune : 4; /**< HS DC Voltage Level Adjustment */ - uint64_t txfslstune : 4; /**< FS/LS Source Impedence Adjustment */ - uint64_t txhsxvtune : 2; /**< Transmitter High-Speed Crossover Adjustment */ - uint64_t sqrxtune : 3; /**< Squelch Threshold Adjustment */ - uint64_t compdistune : 3; /**< Disconnect Threshold Adjustment */ - uint64_t otgtune : 3; /**< VBUS Valid Threshold Adjustment */ - uint64_t otgdisable : 1; /**< OTG Block Disable */ - uint64_t portreset : 1; /**< Per_Port Reset */ - uint64_t drvvbus : 1; /**< Drive VBUS */ - uint64_t lsbist : 1; /**< Low-Speed BIST Enable. */ - uint64_t fsbist : 1; /**< Full-Speed BIST Enable. */ - uint64_t hsbist : 1; /**< High-Speed BIST Enable. */ - uint64_t bist_done : 1; /**< PHY Bist Done. - Asserted at the end of the PHY BIST sequence. */ - uint64_t bist_err : 1; /**< PHY Bist Error. - Indicates an internal error was detected during - the BIST sequence. */ - uint64_t tdata_out : 4; /**< PHY Test Data Out. - Presents either internaly generated signals or - test register contents, based upon the value of - test_data_out_sel. */ - uint64_t siddq : 1; /**< Drives the USBP (USB-PHY) SIDDQ input. - Normally should be set to zero. - When customers have no intent to use USB PHY - interface, they should: - - still provide 3.3V to USB_VDD33, and - - tie USB_REXT to 3.3V supply, and - - set USBN*_USBP_CTL_STATUS[SIDDQ]=1 */ - uint64_t txpreemphasistune : 1; /**< HS Transmitter Pre-Emphasis Enable */ - uint64_t dma_bmode : 1; /**< When set to 1 the L2C DMA address will be updated - with byte-counts between packets. When set to 0 - the L2C DMA address is incremented to the next - 4-byte aligned address after adding byte-count. */ - uint64_t usbc_end : 1; /**< Bigendian input to the USB Core. This should be - set to '0' for operation. */ - uint64_t usbp_bist : 1; /**< PHY, This is cleared '0' to run BIST on the USBP. */ - uint64_t tclk : 1; /**< PHY Test Clock, used to load TDATA_IN to the USBP. */ - uint64_t dp_pulld : 1; /**< PHY DP_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D+ line. '1' pull down-resistance is connected - to D+/ '0' pull down resistance is not connected - to D+. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t dm_pulld : 1; /**< PHY DM_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D- line. '1' pull down-resistance is connected - to D-. '0' pull down resistance is not connected - to D-. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t hst_mode : 1; /**< When '0' the USB is acting as HOST, when '1' - USB is acting as device. This field needs to be - set while the USB is in reset. */ - uint64_t tuning : 4; /**< Transmitter Tuning for High-Speed Operation. - Tunes the current supply and rise/fall output - times for high-speed operation. - [20:19] == 11: Current supply increased - approximately 9% - [20:19] == 10: Current supply increased - approximately 4.5% - [20:19] == 01: Design default. - [20:19] == 00: Current supply decreased - approximately 4.5% - [22:21] == 11: Rise and fall times are increased. - [22:21] == 10: Design default. - [22:21] == 01: Rise and fall times are decreased. - [22:21] == 00: Rise and fall times are decreased - further as compared to the 01 setting. */ - uint64_t tx_bs_enh : 1; /**< Transmit Bit Stuffing on [15:8]. - Enables or disables bit stuffing on data[15:8] - when bit-stuffing is enabled. */ - uint64_t tx_bs_en : 1; /**< Transmit Bit Stuffing on [7:0]. - Enables or disables bit stuffing on data[7:0] - when bit-stuffing is enabled. */ - uint64_t loop_enb : 1; /**< PHY Loopback Test Enable. - '1': During data transmission the receive is - enabled. - '0': During data transmission the receive is - disabled. - Must be '0' for normal operation. */ - uint64_t vtest_enb : 1; /**< Analog Test Pin Enable. - '1' The PHY's analog_test pin is enabled for the - input and output of applicable analog test signals. - '0' THe analog_test pin is disabled. */ - uint64_t bist_enb : 1; /**< Built-In Self Test Enable. - Used to activate BIST in the PHY. */ - uint64_t tdata_sel : 1; /**< Test Data Out Select. - '1' test_data_out[3:0] (PHY) register contents - are output. '0' internaly generated signals are - output. */ - uint64_t taddr_in : 4; /**< Mode Address for Test Interface. - Specifies the register address for writing to or - reading from the PHY test interface register. */ - uint64_t tdata_in : 8; /**< Internal Testing Register Input Data and Select - This is a test bus. Data is present on [3:0], - and its corresponding select (enable) is present - on bits [7:4]. */ - uint64_t ate_reset : 1; /**< Reset input from automatic test equipment. - This is a test signal. When the USB Core is - powered up (not in Susned Mode), an automatic - tester can use this to disable phy_clock and - free_clk, then re-eanable them with an aligned - phase. - '1': The phy_clk and free_clk outputs are - disabled. "0": The phy_clock and free_clk outputs - are available within a specific period after the - de-assertion. */ -#else - uint64_t ate_reset : 1; - uint64_t tdata_in : 8; - uint64_t taddr_in : 4; - uint64_t tdata_sel : 1; - uint64_t bist_enb : 1; - uint64_t vtest_enb : 1; - uint64_t loop_enb : 1; - uint64_t tx_bs_en : 1; - uint64_t tx_bs_enh : 1; - uint64_t tuning : 4; - uint64_t hst_mode : 1; - uint64_t dm_pulld : 1; - uint64_t dp_pulld : 1; - uint64_t tclk : 1; - uint64_t usbp_bist : 1; - uint64_t usbc_end : 1; - uint64_t dma_bmode : 1; - uint64_t txpreemphasistune : 1; - uint64_t siddq : 1; - uint64_t tdata_out : 4; - uint64_t bist_err : 1; - uint64_t bist_done : 1; - uint64_t hsbist : 1; - uint64_t fsbist : 1; - uint64_t lsbist : 1; - uint64_t drvvbus : 1; - uint64_t portreset : 1; - uint64_t otgdisable : 1; - uint64_t otgtune : 3; - uint64_t compdistune : 3; - uint64_t sqrxtune : 3; - uint64_t txhsxvtune : 2; - uint64_t txfslstune : 4; - uint64_t txvreftune : 4; - uint64_t txrisetune : 1; -#endif - } s; - struct cvmx_usbnx_usbp_ctl_status_cn30xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_38_63 : 26; - uint64_t bist_done : 1; /**< PHY Bist Done. - Asserted at the end of the PHY BIST sequence. */ - uint64_t bist_err : 1; /**< PHY Bist Error. - Indicates an internal error was detected during - the BIST sequence. */ - uint64_t tdata_out : 4; /**< PHY Test Data Out. - Presents either internaly generated signals or - test register contents, based upon the value of - test_data_out_sel. */ - uint64_t reserved_30_31 : 2; - uint64_t dma_bmode : 1; /**< When set to 1 the L2C DMA address will be updated - with byte-counts between packets. When set to 0 - the L2C DMA address is incremented to the next - 4-byte aligned address after adding byte-count. */ - uint64_t usbc_end : 1; /**< Bigendian input to the USB Core. This should be - set to '0' for operation. */ - uint64_t usbp_bist : 1; /**< PHY, This is cleared '0' to run BIST on the USBP. */ - uint64_t tclk : 1; /**< PHY Test Clock, used to load TDATA_IN to the USBP. */ - uint64_t dp_pulld : 1; /**< PHY DP_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D+ line. '1' pull down-resistance is connected - to D+/ '0' pull down resistance is not connected - to D+. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t dm_pulld : 1; /**< PHY DM_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D- line. '1' pull down-resistance is connected - to D-. '0' pull down resistance is not connected - to D-. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t hst_mode : 1; /**< When '0' the USB is acting as HOST, when '1' - USB is acting as device. This field needs to be - set while the USB is in reset. */ - uint64_t tuning : 4; /**< Transmitter Tuning for High-Speed Operation. - Tunes the current supply and rise/fall output - times for high-speed operation. - [20:19] == 11: Current supply increased - approximately 9% - [20:19] == 10: Current supply increased - approximately 4.5% - [20:19] == 01: Design default. - [20:19] == 00: Current supply decreased - approximately 4.5% - [22:21] == 11: Rise and fall times are increased. - [22:21] == 10: Design default. - [22:21] == 01: Rise and fall times are decreased. - [22:21] == 00: Rise and fall times are decreased - further as compared to the 01 setting. */ - uint64_t tx_bs_enh : 1; /**< Transmit Bit Stuffing on [15:8]. - Enables or disables bit stuffing on data[15:8] - when bit-stuffing is enabled. */ - uint64_t tx_bs_en : 1; /**< Transmit Bit Stuffing on [7:0]. - Enables or disables bit stuffing on data[7:0] - when bit-stuffing is enabled. */ - uint64_t loop_enb : 1; /**< PHY Loopback Test Enable. - '1': During data transmission the receive is - enabled. - '0': During data transmission the receive is - disabled. - Must be '0' for normal operation. */ - uint64_t vtest_enb : 1; /**< Analog Test Pin Enable. - '1' The PHY's analog_test pin is enabled for the - input and output of applicable analog test signals. - '0' THe analog_test pin is disabled. */ - uint64_t bist_enb : 1; /**< Built-In Self Test Enable. - Used to activate BIST in the PHY. */ - uint64_t tdata_sel : 1; /**< Test Data Out Select. - '1' test_data_out[3:0] (PHY) register contents - are output. '0' internaly generated signals are - output. */ - uint64_t taddr_in : 4; /**< Mode Address for Test Interface. - Specifies the register address for writing to or - reading from the PHY test interface register. */ - uint64_t tdata_in : 8; /**< Internal Testing Register Input Data and Select - This is a test bus. Data is present on [3:0], - and its corresponding select (enable) is present - on bits [7:4]. */ - uint64_t ate_reset : 1; /**< Reset input from automatic test equipment. - This is a test signal. When the USB Core is - powered up (not in Susned Mode), an automatic - tester can use this to disable phy_clock and - free_clk, then re-eanable them with an aligned - phase. - '1': The phy_clk and free_clk outputs are - disabled. "0": The phy_clock and free_clk outputs - are available within a specific period after the - de-assertion. */ -#else - uint64_t ate_reset : 1; - uint64_t tdata_in : 8; - uint64_t taddr_in : 4; - uint64_t tdata_sel : 1; - uint64_t bist_enb : 1; - uint64_t vtest_enb : 1; - uint64_t loop_enb : 1; - uint64_t tx_bs_en : 1; - uint64_t tx_bs_enh : 1; - uint64_t tuning : 4; - uint64_t hst_mode : 1; - uint64_t dm_pulld : 1; - uint64_t dp_pulld : 1; - uint64_t tclk : 1; - uint64_t usbp_bist : 1; - uint64_t usbc_end : 1; - uint64_t dma_bmode : 1; - uint64_t reserved_30_31 : 2; - uint64_t tdata_out : 4; - uint64_t bist_err : 1; - uint64_t bist_done : 1; - uint64_t reserved_38_63 : 26; -#endif - } cn30xx; - struct cvmx_usbnx_usbp_ctl_status_cn30xx cn31xx; - struct cvmx_usbnx_usbp_ctl_status_cn50xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t txrisetune : 1; /**< HS Transmitter Rise/Fall Time Adjustment */ - uint64_t txvreftune : 4; /**< HS DC Voltage Level Adjustment */ - uint64_t txfslstune : 4; /**< FS/LS Source Impedence Adjustment */ - uint64_t txhsxvtune : 2; /**< Transmitter High-Speed Crossover Adjustment */ - uint64_t sqrxtune : 3; /**< Squelch Threshold Adjustment */ - uint64_t compdistune : 3; /**< Disconnect Threshold Adjustment */ - uint64_t otgtune : 3; /**< VBUS Valid Threshold Adjustment */ - uint64_t otgdisable : 1; /**< OTG Block Disable */ - uint64_t portreset : 1; /**< Per_Port Reset */ - uint64_t drvvbus : 1; /**< Drive VBUS */ - uint64_t lsbist : 1; /**< Low-Speed BIST Enable. */ - uint64_t fsbist : 1; /**< Full-Speed BIST Enable. */ - uint64_t hsbist : 1; /**< High-Speed BIST Enable. */ - uint64_t bist_done : 1; /**< PHY Bist Done. - Asserted at the end of the PHY BIST sequence. */ - uint64_t bist_err : 1; /**< PHY Bist Error. - Indicates an internal error was detected during - the BIST sequence. */ - uint64_t tdata_out : 4; /**< PHY Test Data Out. - Presents either internaly generated signals or - test register contents, based upon the value of - test_data_out_sel. */ - uint64_t reserved_31_31 : 1; - uint64_t txpreemphasistune : 1; /**< HS Transmitter Pre-Emphasis Enable */ - uint64_t dma_bmode : 1; /**< When set to 1 the L2C DMA address will be updated - with byte-counts between packets. When set to 0 - the L2C DMA address is incremented to the next - 4-byte aligned address after adding byte-count. */ - uint64_t usbc_end : 1; /**< Bigendian input to the USB Core. This should be - set to '0' for operation. */ - uint64_t usbp_bist : 1; /**< PHY, This is cleared '0' to run BIST on the USBP. */ - uint64_t tclk : 1; /**< PHY Test Clock, used to load TDATA_IN to the USBP. */ - uint64_t dp_pulld : 1; /**< PHY DP_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D+ line. '1' pull down-resistance is connected - to D+/ '0' pull down resistance is not connected - to D+. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t dm_pulld : 1; /**< PHY DM_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D- line. '1' pull down-resistance is connected - to D-. '0' pull down resistance is not connected - to D-. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t hst_mode : 1; /**< When '0' the USB is acting as HOST, when '1' - USB is acting as device. This field needs to be - set while the USB is in reset. */ - uint64_t reserved_19_22 : 4; - uint64_t tx_bs_enh : 1; /**< Transmit Bit Stuffing on [15:8]. - Enables or disables bit stuffing on data[15:8] - when bit-stuffing is enabled. */ - uint64_t tx_bs_en : 1; /**< Transmit Bit Stuffing on [7:0]. - Enables or disables bit stuffing on data[7:0] - when bit-stuffing is enabled. */ - uint64_t loop_enb : 1; /**< PHY Loopback Test Enable. - '1': During data transmission the receive is - enabled. - '0': During data transmission the receive is - disabled. - Must be '0' for normal operation. */ - uint64_t vtest_enb : 1; /**< Analog Test Pin Enable. - '1' The PHY's analog_test pin is enabled for the - input and output of applicable analog test signals. - '0' THe analog_test pin is disabled. */ - uint64_t bist_enb : 1; /**< Built-In Self Test Enable. - Used to activate BIST in the PHY. */ - uint64_t tdata_sel : 1; /**< Test Data Out Select. - '1' test_data_out[3:0] (PHY) register contents - are output. '0' internaly generated signals are - output. */ - uint64_t taddr_in : 4; /**< Mode Address for Test Interface. - Specifies the register address for writing to or - reading from the PHY test interface register. */ - uint64_t tdata_in : 8; /**< Internal Testing Register Input Data and Select - This is a test bus. Data is present on [3:0], - and its corresponding select (enable) is present - on bits [7:4]. */ - uint64_t ate_reset : 1; /**< Reset input from automatic test equipment. - This is a test signal. When the USB Core is - powered up (not in Susned Mode), an automatic - tester can use this to disable phy_clock and - free_clk, then re-eanable them with an aligned - phase. - '1': The phy_clk and free_clk outputs are - disabled. "0": The phy_clock and free_clk outputs - are available within a specific period after the - de-assertion. */ -#else - uint64_t ate_reset : 1; - uint64_t tdata_in : 8; - uint64_t taddr_in : 4; - uint64_t tdata_sel : 1; - uint64_t bist_enb : 1; - uint64_t vtest_enb : 1; - uint64_t loop_enb : 1; - uint64_t tx_bs_en : 1; - uint64_t tx_bs_enh : 1; - uint64_t reserved_19_22 : 4; - uint64_t hst_mode : 1; - uint64_t dm_pulld : 1; - uint64_t dp_pulld : 1; - uint64_t tclk : 1; - uint64_t usbp_bist : 1; - uint64_t usbc_end : 1; - uint64_t dma_bmode : 1; - uint64_t txpreemphasistune : 1; - uint64_t reserved_31_31 : 1; - uint64_t tdata_out : 4; - uint64_t bist_err : 1; - uint64_t bist_done : 1; - uint64_t hsbist : 1; - uint64_t fsbist : 1; - uint64_t lsbist : 1; - uint64_t drvvbus : 1; - uint64_t portreset : 1; - uint64_t otgdisable : 1; - uint64_t otgtune : 3; - uint64_t compdistune : 3; - uint64_t sqrxtune : 3; - uint64_t txhsxvtune : 2; - uint64_t txfslstune : 4; - uint64_t txvreftune : 4; - uint64_t txrisetune : 1; -#endif - } cn50xx; - struct cvmx_usbnx_usbp_ctl_status_cn52xx - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t txrisetune : 1; /**< HS Transmitter Rise/Fall Time Adjustment */ - uint64_t txvreftune : 4; /**< HS DC Voltage Level Adjustment */ - uint64_t txfslstune : 4; /**< FS/LS Source Impedence Adjustment */ - uint64_t txhsxvtune : 2; /**< Transmitter High-Speed Crossover Adjustment */ - uint64_t sqrxtune : 3; /**< Squelch Threshold Adjustment */ - uint64_t compdistune : 3; /**< Disconnect Threshold Adjustment */ - uint64_t otgtune : 3; /**< VBUS Valid Threshold Adjustment */ - uint64_t otgdisable : 1; /**< OTG Block Disable */ - uint64_t portreset : 1; /**< Per_Port Reset */ - uint64_t drvvbus : 1; /**< Drive VBUS */ - uint64_t lsbist : 1; /**< Low-Speed BIST Enable. */ - uint64_t fsbist : 1; /**< Full-Speed BIST Enable. */ - uint64_t hsbist : 1; /**< High-Speed BIST Enable. */ - uint64_t bist_done : 1; /**< PHY Bist Done. - Asserted at the end of the PHY BIST sequence. */ - uint64_t bist_err : 1; /**< PHY Bist Error. - Indicates an internal error was detected during - the BIST sequence. */ - uint64_t tdata_out : 4; /**< PHY Test Data Out. - Presents either internaly generated signals or - test register contents, based upon the value of - test_data_out_sel. */ - uint64_t siddq : 1; /**< Drives the USBP (USB-PHY) SIDDQ input. - Normally should be set to zero. - When customers have no intent to use USB PHY - interface, they should: - - still provide 3.3V to USB_VDD33, and - - tie USB_REXT to 3.3V supply, and - - set USBN*_USBP_CTL_STATUS[SIDDQ]=1 */ - uint64_t txpreemphasistune : 1; /**< HS Transmitter Pre-Emphasis Enable */ - uint64_t dma_bmode : 1; /**< When set to 1 the L2C DMA address will be updated - with byte-counts between packets. When set to 0 - the L2C DMA address is incremented to the next - 4-byte aligned address after adding byte-count. */ - uint64_t usbc_end : 1; /**< Bigendian input to the USB Core. This should be - set to '0' for operation. */ - uint64_t usbp_bist : 1; /**< PHY, This is cleared '0' to run BIST on the USBP. */ - uint64_t tclk : 1; /**< PHY Test Clock, used to load TDATA_IN to the USBP. */ - uint64_t dp_pulld : 1; /**< PHY DP_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D+ line. '1' pull down-resistance is connected - to D+/ '0' pull down resistance is not connected - to D+. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t dm_pulld : 1; /**< PHY DM_PULLDOWN input to the USB-PHY. - This signal enables the pull-down resistance on - the D- line. '1' pull down-resistance is connected - to D-. '0' pull down resistance is not connected - to D-. When an A/B device is acting as a host - (downstream-facing port), dp_pulldown and - dm_pulldown are enabled. This must not toggle - during normal opeartion. */ - uint64_t hst_mode : 1; /**< When '0' the USB is acting as HOST, when '1' - USB is acting as device. This field needs to be - set while the USB is in reset. */ - uint64_t reserved_19_22 : 4; - uint64_t tx_bs_enh : 1; /**< Transmit Bit Stuffing on [15:8]. - Enables or disables bit stuffing on data[15:8] - when bit-stuffing is enabled. */ - uint64_t tx_bs_en : 1; /**< Transmit Bit Stuffing on [7:0]. - Enables or disables bit stuffing on data[7:0] - when bit-stuffing is enabled. */ - uint64_t loop_enb : 1; /**< PHY Loopback Test Enable. - '1': During data transmission the receive is - enabled. - '0': During data transmission the receive is - disabled. - Must be '0' for normal operation. */ - uint64_t vtest_enb : 1; /**< Analog Test Pin Enable. - '1' The PHY's analog_test pin is enabled for the - input and output of applicable analog test signals. - '0' THe analog_test pin is disabled. */ - uint64_t bist_enb : 1; /**< Built-In Self Test Enable. - Used to activate BIST in the PHY. */ - uint64_t tdata_sel : 1; /**< Test Data Out Select. - '1' test_data_out[3:0] (PHY) register contents - are output. '0' internaly generated signals are - output. */ - uint64_t taddr_in : 4; /**< Mode Address for Test Interface. - Specifies the register address for writing to or - reading from the PHY test interface register. */ - uint64_t tdata_in : 8; /**< Internal Testing Register Input Data and Select - This is a test bus. Data is present on [3:0], - and its corresponding select (enable) is present - on bits [7:4]. */ - uint64_t ate_reset : 1; /**< Reset input from automatic test equipment. - This is a test signal. When the USB Core is - powered up (not in Susned Mode), an automatic - tester can use this to disable phy_clock and - free_clk, then re-eanable them with an aligned - phase. - '1': The phy_clk and free_clk outputs are - disabled. "0": The phy_clock and free_clk outputs - are available within a specific period after the - de-assertion. */ -#else - uint64_t ate_reset : 1; - uint64_t tdata_in : 8; - uint64_t taddr_in : 4; - uint64_t tdata_sel : 1; - uint64_t bist_enb : 1; - uint64_t vtest_enb : 1; - uint64_t loop_enb : 1; - uint64_t tx_bs_en : 1; - uint64_t tx_bs_enh : 1; - uint64_t reserved_19_22 : 4; - uint64_t hst_mode : 1; - uint64_t dm_pulld : 1; - uint64_t dp_pulld : 1; - uint64_t tclk : 1; - uint64_t usbp_bist : 1; - uint64_t usbc_end : 1; - uint64_t dma_bmode : 1; - uint64_t txpreemphasistune : 1; - uint64_t siddq : 1; - uint64_t tdata_out : 4; - uint64_t bist_err : 1; - uint64_t bist_done : 1; - uint64_t hsbist : 1; - uint64_t fsbist : 1; - uint64_t lsbist : 1; - uint64_t drvvbus : 1; - uint64_t portreset : 1; - uint64_t otgdisable : 1; - uint64_t otgtune : 3; - uint64_t compdistune : 3; - uint64_t sqrxtune : 3; - uint64_t txhsxvtune : 2; - uint64_t txfslstune : 4; - uint64_t txvreftune : 4; - uint64_t txrisetune : 1; -#endif - } cn52xx; - struct cvmx_usbnx_usbp_ctl_status_cn50xx cn52xxp1; - struct cvmx_usbnx_usbp_ctl_status_cn52xx cn56xx; - struct cvmx_usbnx_usbp_ctl_status_cn50xx cn56xxp1; -} cvmx_usbnx_usbp_ctl_status_t; - - -/** - * cvmx_zip_cmd_bist_result - * - * Notes: - * Access to the internal BiST results - * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail). - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_cmd_bist_result_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_31_63 : 33; - uint64_t zip_core : 27; /**< BiST result of the ZIP_CORE memories */ - uint64_t zip_ctl : 4; /**< BiST result of the ZIP_CTL memories */ -#else - uint64_t zip_ctl : 4; - uint64_t zip_core : 27; - uint64_t reserved_31_63 : 33; -#endif - } s; - struct cvmx_zip_cmd_bist_result_s cn31xx; - struct cvmx_zip_cmd_bist_result_s cn38xx; - struct cvmx_zip_cmd_bist_result_s cn38xxp2; - struct cvmx_zip_cmd_bist_result_s cn56xx; - struct cvmx_zip_cmd_bist_result_s cn56xxp1; - struct cvmx_zip_cmd_bist_result_s cn58xx; - struct cvmx_zip_cmd_bist_result_s cn58xxp1; -} cvmx_zip_cmd_bist_result_t; - - -/** - * cvmx_zip_cmd_buf - * - * Notes: - * Sets the command buffer parameters - * The size of the command buffer segments is measured in uint64s. The pool specifies (1 of 8 free - * lists to be used when freeing command buffer segments. The PTR field is overwritten with the next - * pointer each time that the command buffer segment is exhausted. - * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite - * this register to effectively reset the command buffer state machine. New commands will then be - * read from the newly specified command buffer pointer. - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_cmd_buf_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_58_63 : 6; - uint64_t dwb : 9; /**< Number of DontWriteBacks */ - uint64_t pool : 3; /**< Free list used to free command buffer segments */ - uint64_t size : 13; /**< Number of uint64s per command buffer segment */ - uint64_t ptr : 33; /**< Initial command buffer pointer[39:7] (128B-aligned) */ -#else - uint64_t ptr : 33; - uint64_t size : 13; - uint64_t pool : 3; - uint64_t dwb : 9; - uint64_t reserved_58_63 : 6; -#endif - } s; - struct cvmx_zip_cmd_buf_s cn31xx; - struct cvmx_zip_cmd_buf_s cn38xx; - struct cvmx_zip_cmd_buf_s cn38xxp2; - struct cvmx_zip_cmd_buf_s cn56xx; - struct cvmx_zip_cmd_buf_s cn56xxp1; - struct cvmx_zip_cmd_buf_s cn58xx; - struct cvmx_zip_cmd_buf_s cn58xxp1; -} cvmx_zip_cmd_buf_t; - - -/** - * cvmx_zip_cmd_ctl - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_cmd_ctl_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_2_63 : 62; - uint64_t forceclk : 1; /**< Force zip_ctl__clock_on_b == 1 when set */ - uint64_t reset : 1; /**< Reset oneshot pulse for zip core */ -#else - uint64_t reset : 1; - uint64_t forceclk : 1; - uint64_t reserved_2_63 : 62; -#endif - } s; - struct cvmx_zip_cmd_ctl_s cn31xx; - struct cvmx_zip_cmd_ctl_s cn38xx; - struct cvmx_zip_cmd_ctl_s cn38xxp2; - struct cvmx_zip_cmd_ctl_s cn56xx; - struct cvmx_zip_cmd_ctl_s cn56xxp1; - struct cvmx_zip_cmd_ctl_s cn58xx; - struct cvmx_zip_cmd_ctl_s cn58xxp1; -} cvmx_zip_cmd_ctl_t; - - -/** - * cvmx_zip_constants - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_constants_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_48_63 : 16; - uint64_t depth : 16; /**< Maximum search depth for compression */ - uint64_t onfsize : 12; /**< Output near full threshhold in bytes */ - uint64_t ctxsize : 12; /**< Context size in bytes */ - uint64_t reserved_1_7 : 7; - uint64_t disabled : 1; /**< 1=zip unit isdisabled, 0=zip unit not disabled */ -#else - uint64_t disabled : 1; - uint64_t reserved_1_7 : 7; - uint64_t ctxsize : 12; - uint64_t onfsize : 12; - uint64_t depth : 16; - uint64_t reserved_48_63 : 16; -#endif - } s; - struct cvmx_zip_constants_s cn31xx; - struct cvmx_zip_constants_s cn38xx; - struct cvmx_zip_constants_s cn38xxp2; - struct cvmx_zip_constants_s cn56xx; - struct cvmx_zip_constants_s cn56xxp1; - struct cvmx_zip_constants_s cn58xx; - struct cvmx_zip_constants_s cn58xxp1; -} cvmx_zip_constants_t; - - -/** - * cvmx_zip_debug0 - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_debug0_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_14_63 : 50; - uint64_t asserts : 14; /**< FIFO assertion checks */ -#else - uint64_t asserts : 14; - uint64_t reserved_14_63 : 50; -#endif - } s; - struct cvmx_zip_debug0_s cn31xx; - struct cvmx_zip_debug0_s cn38xx; - struct cvmx_zip_debug0_s cn38xxp2; - struct cvmx_zip_debug0_s cn56xx; - struct cvmx_zip_debug0_s cn56xxp1; - struct cvmx_zip_debug0_s cn58xx; - struct cvmx_zip_debug0_s cn58xxp1; -} cvmx_zip_debug0_t; - - -/** - * cvmx_zip_error - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_error_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t doorbell : 1; /**< A doorbell count has overflowed */ -#else - uint64_t doorbell : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_zip_error_s cn31xx; - struct cvmx_zip_error_s cn38xx; - struct cvmx_zip_error_s cn38xxp2; - struct cvmx_zip_error_s cn56xx; - struct cvmx_zip_error_s cn56xxp1; - struct cvmx_zip_error_s cn58xx; - struct cvmx_zip_error_s cn58xxp1; -} cvmx_zip_error_t; - - -/** - * cvmx_zip_int_mask - * - * Notes: - * Note that this CSR is present only in chip revisions beginning with pass2. - * When a mask bit is set, the corresponding interrupt is enabled. - */ -typedef union -{ - uint64_t u64; - struct cvmx_zip_int_mask_s - { -#if __BYTE_ORDER == __BIG_ENDIAN - uint64_t reserved_1_63 : 63; - uint64_t doorbell : 1; /**< Bit mask corresponding to PKO_REG_ERROR[1] above */ -#else - uint64_t doorbell : 1; - uint64_t reserved_1_63 : 63; -#endif - } s; - struct cvmx_zip_int_mask_s cn31xx; - struct cvmx_zip_int_mask_s cn38xx; - struct cvmx_zip_int_mask_s cn38xxp2; - struct cvmx_zip_int_mask_s cn56xx; - struct cvmx_zip_int_mask_s cn56xxp1; - struct cvmx_zip_int_mask_s cn58xx; - struct cvmx_zip_int_mask_s cn58xxp1; -} cvmx_zip_int_mask_t; +#include "cvmx-agl-defs.h" +#include "cvmx-asxx-defs.h" +#include "cvmx-asx0-defs.h" +#include "cvmx-ciu-defs.h" +#include "cvmx-dbg-defs.h" +#include "cvmx-dfa-defs.h" +#include "cvmx-dfm-defs.h" +#include "cvmx-dpi-defs.h" +#include "cvmx-fpa-defs.h" +#include "cvmx-gmxx-defs.h" +#include "cvmx-gpio-defs.h" +#include "cvmx-iob-defs.h" +#include "cvmx-ipd-defs.h" +#include "cvmx-key-defs.h" +#include "cvmx-l2c-defs.h" +#include "cvmx-l2d-defs.h" +#include "cvmx-l2t-defs.h" +#include "cvmx-led-defs.h" +#include "cvmx-lmcx-defs.h" +#include "cvmx-mio-defs.h" +#include "cvmx-mixx-defs.h" +#include "cvmx-mpi-defs.h" +#include "cvmx-ndf-defs.h" +#include "cvmx-npei-defs.h" +#include "cvmx-npi-defs.h" +#include "cvmx-pci-defs.h" +#include "cvmx-pcieepx-defs.h" +#include "cvmx-pciercx-defs.h" +#include "cvmx-pcmx-defs.h" +#include "cvmx-pcm-defs.h" +#include "cvmx-pcsx-defs.h" +#include "cvmx-pcsxx-defs.h" +#include "cvmx-pemx-defs.h" +#include "cvmx-pescx-defs.h" +#include "cvmx-pip-defs.h" +#include "cvmx-pko-defs.h" +#include "cvmx-pow-defs.h" +#include "cvmx-rad-defs.h" +#include "cvmx-rnm-defs.h" +#include "cvmx-sli-defs.h" +#include "cvmx-smix-defs.h" +#include "cvmx-smi-defs.h" +#include "cvmx-spxx-defs.h" +#include "cvmx-spx0-defs.h" +#include "cvmx-sriox-defs.h" +#include "cvmx-sriomaintx-defs.h" +#include "cvmx-srxx-defs.h" +#include "cvmx-stxx-defs.h" +#include "cvmx-tim-defs.h" +#include "cvmx-tra-defs.h" +#include "cvmx-uahcx-defs.h" +#include "cvmx-uctlx-defs.h" +#include "cvmx-usbcx-defs.h" +#include "cvmx-usbnx-defs.h" +#include "cvmx-zip-defs.h" + +#include "cvmx-pexp-defs.h" #endif /* __CVMX_CSR_TYPEDEFS_H__ */ |