04b6fa8330
facilities as well as support for the Octeon 2 family of SoCs. XXX Note that with our antediluvian assembler, we can't support some Octeon 2 instructions and fall back to using the old ones instead.
1306 lines
58 KiB
C
1306 lines
58 KiB
C
/***********************license start***************
|
|
* 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**************************************/
|
|
|
|
|
|
/**
|
|
* cvmx-dpi-defs.h
|
|
*
|
|
* Configuration and status register (CSR) type definitions for
|
|
* Octeon dpi.
|
|
*
|
|
* This file is auto generated. Do not edit.
|
|
*
|
|
* <hr>$Revision$<hr>
|
|
*
|
|
*/
|
|
#ifndef __CVMX_DPI_TYPEDEFS_H__
|
|
#define __CVMX_DPI_TYPEDEFS_H__
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_BIST_STATUS CVMX_DPI_BIST_STATUS_FUNC()
|
|
static inline uint64_t CVMX_DPI_BIST_STATUS_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_BIST_STATUS not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000000ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_BIST_STATUS (CVMX_ADD_IO_SEG(0x0001DF0000000000ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_CTL CVMX_DPI_CTL_FUNC()
|
|
static inline uint64_t CVMX_DPI_CTL_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_CTL not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000040ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_CTL (CVMX_ADD_IO_SEG(0x0001DF0000000040ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_COUNTS(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_COUNTS(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000300ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_COUNTS(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000300ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_DBELL(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_DBELL(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000200ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_DBELL(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000200ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_IBUFF_SADDR(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_IBUFF_SADDR(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000280ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_IBUFF_SADDR(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000280ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_NADDR(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_NADDR(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000380ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_NADDR(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000380ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_REQBNK0(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_REQBNK0(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000400ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_REQBNK0(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000400ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMAX_REQBNK1(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
|
|
cvmx_warn("CVMX_DPI_DMAX_REQBNK1(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000480ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMAX_REQBNK1(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000480ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_DMA_CONTROL CVMX_DPI_DMA_CONTROL_FUNC()
|
|
static inline uint64_t CVMX_DPI_DMA_CONTROL_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_DMA_CONTROL not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000048ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMA_CONTROL (CVMX_ADD_IO_SEG(0x0001DF0000000048ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_DMA_ENGX_EN(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5)))))
|
|
cvmx_warn("CVMX_DPI_DMA_ENGX_EN(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000080ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_DMA_ENGX_EN(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000080ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_ENGX_BUF(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5)))))
|
|
cvmx_warn("CVMX_DPI_ENGX_BUF(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000880ull) + ((offset) & 7) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_ENGX_BUF(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000880ull) + ((offset) & 7) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_INFO_REG CVMX_DPI_INFO_REG_FUNC()
|
|
static inline uint64_t CVMX_DPI_INFO_REG_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_INFO_REG not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000980ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_INFO_REG (CVMX_ADD_IO_SEG(0x0001DF0000000980ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_INT_EN CVMX_DPI_INT_EN_FUNC()
|
|
static inline uint64_t CVMX_DPI_INT_EN_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_INT_EN not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000010ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_INT_EN (CVMX_ADD_IO_SEG(0x0001DF0000000010ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_INT_REG CVMX_DPI_INT_REG_FUNC()
|
|
static inline uint64_t CVMX_DPI_INT_REG_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_INT_REG not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000008ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_INT_REG (CVMX_ADD_IO_SEG(0x0001DF0000000008ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_PINT_INFO CVMX_DPI_PINT_INFO_FUNC()
|
|
static inline uint64_t CVMX_DPI_PINT_INFO_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_PINT_INFO not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000830ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_PINT_INFO (CVMX_ADD_IO_SEG(0x0001DF0000000830ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_PKT_ERR_RSP CVMX_DPI_PKT_ERR_RSP_FUNC()
|
|
static inline uint64_t CVMX_DPI_PKT_ERR_RSP_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_PKT_ERR_RSP not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000078ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_PKT_ERR_RSP (CVMX_ADD_IO_SEG(0x0001DF0000000078ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_REQ_ERR_RSP CVMX_DPI_REQ_ERR_RSP_FUNC()
|
|
static inline uint64_t CVMX_DPI_REQ_ERR_RSP_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_REQ_ERR_RSP not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000058ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_REQ_ERR_RSP (CVMX_ADD_IO_SEG(0x0001DF0000000058ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_REQ_ERR_RSP_EN CVMX_DPI_REQ_ERR_RSP_EN_FUNC()
|
|
static inline uint64_t CVMX_DPI_REQ_ERR_RSP_EN_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_REQ_ERR_RSP_EN not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000068ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_REQ_ERR_RSP_EN (CVMX_ADD_IO_SEG(0x0001DF0000000068ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_REQ_ERR_RST CVMX_DPI_REQ_ERR_RST_FUNC()
|
|
static inline uint64_t CVMX_DPI_REQ_ERR_RST_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_REQ_ERR_RST not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000060ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_REQ_ERR_RST (CVMX_ADD_IO_SEG(0x0001DF0000000060ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_REQ_ERR_RST_EN CVMX_DPI_REQ_ERR_RST_EN_FUNC()
|
|
static inline uint64_t CVMX_DPI_REQ_ERR_RST_EN_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_REQ_ERR_RST_EN not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000070ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_REQ_ERR_RST_EN (CVMX_ADD_IO_SEG(0x0001DF0000000070ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
#define CVMX_DPI_REQ_GBL_EN CVMX_DPI_REQ_GBL_EN_FUNC()
|
|
static inline uint64_t CVMX_DPI_REQ_GBL_EN_FUNC(void)
|
|
{
|
|
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)))
|
|
cvmx_warn("CVMX_DPI_REQ_GBL_EN not supported on this chip\n");
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000050ull);
|
|
}
|
|
#else
|
|
#define CVMX_DPI_REQ_GBL_EN (CVMX_ADD_IO_SEG(0x0001DF0000000050ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_SLI_PRTX_CFG(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1)))))
|
|
cvmx_warn("CVMX_DPI_SLI_PRTX_CFG(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000900ull) + ((offset) & 1) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_SLI_PRTX_CFG(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000900ull) + ((offset) & 1) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_SLI_PRTX_ERR(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1)))))
|
|
cvmx_warn("CVMX_DPI_SLI_PRTX_ERR(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 1) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_SLI_PRTX_ERR(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 1) * 8)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_DPI_SLI_PRTX_ERR_INFO(unsigned long offset)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1)))))
|
|
cvmx_warn("CVMX_DPI_SLI_PRTX_ERR_INFO(%lu) is invalid on this chip\n", offset);
|
|
return CVMX_ADD_IO_SEG(0x0001DF0000000940ull) + ((offset) & 1) * 8;
|
|
}
|
|
#else
|
|
#define CVMX_DPI_SLI_PRTX_ERR_INFO(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000940ull) + ((offset) & 1) * 8)
|
|
#endif
|
|
|
|
/**
|
|
* cvmx_dpi_bist_status
|
|
*/
|
|
union cvmx_dpi_bist_status
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_bist_status_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_37_63 : 27;
|
|
uint64_t bist : 37; /**< BIST Results.
|
|
HW sets a bit in BIST for for memory that fails
|
|
BIST. */
|
|
#else
|
|
uint64_t bist : 37;
|
|
uint64_t reserved_37_63 : 27;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_bist_status_s cn63xx;
|
|
struct cvmx_dpi_bist_status_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_bist_status cvmx_dpi_bist_status_t;
|
|
|
|
/**
|
|
* cvmx_dpi_ctl
|
|
*/
|
|
union cvmx_dpi_ctl
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_ctl_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_2_63 : 62;
|
|
uint64_t clk : 1; /**< Status bit that indicates that the clks are running */
|
|
uint64_t en : 1; /**< Turns on the DMA and Packet state machines */
|
|
#else
|
|
uint64_t en : 1;
|
|
uint64_t clk : 1;
|
|
uint64_t reserved_2_63 : 62;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_ctl_s cn63xx;
|
|
struct cvmx_dpi_ctl_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_ctl cvmx_dpi_ctl_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_counts
|
|
*
|
|
* DPI_DMA[0..7]_COUNTS = DMA Instruction Counts
|
|
*
|
|
* Values for determing the number of instructions for DMA[0..7] in the DPI.
|
|
*/
|
|
union cvmx_dpi_dmax_counts
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_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 locally
|
|
cached within DPI. */
|
|
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_dpi_dmax_counts_s cn63xx;
|
|
struct cvmx_dpi_dmax_counts_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_counts cvmx_dpi_dmax_counts_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_dbell
|
|
*
|
|
* DPI_DMA_DBELL[0..7] = DMA Door Bell
|
|
*
|
|
* The door bell register for DMA[0..7] queue.
|
|
*/
|
|
union cvmx_dpi_dmax_dbell
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dmax_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_dpi_dmax_dbell_s cn63xx;
|
|
struct cvmx_dpi_dmax_dbell_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_dbell cvmx_dpi_dmax_dbell_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_ibuff_saddr
|
|
*
|
|
* DPI_DMA[0..7]_IBUFF_SADDR = DMA Instruction Buffer Starting Address
|
|
*
|
|
* The address to start reading Instructions from for DMA[0..7].
|
|
*/
|
|
union cvmx_dpi_dmax_ibuff_saddr
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dmax_ibuff_saddr_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_62_63 : 2;
|
|
uint64_t csize : 14; /**< The size in 8B words of the DMA Instruction Chunk.
|
|
This value should only be written at known times
|
|
in order to prevent corruption of the instruction
|
|
queue. The minimum CSIZE is 16 (one cacheblock). */
|
|
uint64_t reserved_41_47 : 7;
|
|
uint64_t idle : 1; /**< DMA Request Queue is IDLE */
|
|
uint64_t reserved_36_39 : 4;
|
|
uint64_t saddr : 29; /**< The 128 byte aligned starting or chunk address.
|
|
SADDR is address bit 35:7 of the starting
|
|
instructions address. When new chunks are fetched
|
|
by the HW, SADDR will be updated to reflect the
|
|
address of the current chunk.
|
|
A write to SADDR resets both the queue's doorbell
|
|
(DPI_DMAx_COUNTS[DBELL) and its tail pointer
|
|
(DPI_DMAx_NADDR[ADDR]). */
|
|
uint64_t reserved_0_6 : 7;
|
|
#else
|
|
uint64_t reserved_0_6 : 7;
|
|
uint64_t saddr : 29;
|
|
uint64_t reserved_36_39 : 4;
|
|
uint64_t idle : 1;
|
|
uint64_t reserved_41_47 : 7;
|
|
uint64_t csize : 14;
|
|
uint64_t reserved_62_63 : 2;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_dmax_ibuff_saddr_s cn63xx;
|
|
struct cvmx_dpi_dmax_ibuff_saddr_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_ibuff_saddr cvmx_dpi_dmax_ibuff_saddr_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_naddr
|
|
*
|
|
* DPI_DMA[0..7]_NADDR = DMA Next Ichunk Address
|
|
*
|
|
* Place DPI will read the next Ichunk data from.
|
|
*/
|
|
union cvmx_dpi_dmax_naddr
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_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_dpi_dmax_naddr_s cn63xx;
|
|
struct cvmx_dpi_dmax_naddr_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_naddr cvmx_dpi_dmax_naddr_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_reqbnk0
|
|
*
|
|
* DPI_DMA[0..7]_REQBNK0 = DMA Request State Bank0
|
|
*
|
|
* Current contents of the request state machine - bank0
|
|
*/
|
|
union cvmx_dpi_dmax_reqbnk0
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dmax_reqbnk0_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t state : 64; /**< State */
|
|
#else
|
|
uint64_t state : 64;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_dmax_reqbnk0_s cn63xx;
|
|
struct cvmx_dpi_dmax_reqbnk0_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_reqbnk0 cvmx_dpi_dmax_reqbnk0_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma#_reqbnk1
|
|
*
|
|
* DPI_DMA[0..7]_REQBNK1 = DMA Request State Bank1
|
|
*
|
|
* Current contents of the request state machine - bank1
|
|
*/
|
|
union cvmx_dpi_dmax_reqbnk1
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dmax_reqbnk1_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t state : 64; /**< State */
|
|
#else
|
|
uint64_t state : 64;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_dmax_reqbnk1_s cn63xx;
|
|
struct cvmx_dpi_dmax_reqbnk1_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dmax_reqbnk1 cvmx_dpi_dmax_reqbnk1_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma_control
|
|
*
|
|
* DPI_DMA_CONTROL = DMA Control Register
|
|
*
|
|
* Controls operation of the DMA IN/OUT.
|
|
*/
|
|
union cvmx_dpi_dma_control
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dma_control_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_61_63 : 3;
|
|
uint64_t pkt_en1 : 1; /**< Enables the 2nd packet interface.
|
|
When the packet interface is enabled, engine 4
|
|
is used for packets and is not available for DMA.
|
|
The packet interfaces must be enabled in order.
|
|
When PKT_EN1=1, then PKT_EN=1.
|
|
When PKT_EN1=1, then DMA_ENB<4>=0. */
|
|
uint64_t ffp_dis : 1; /**< Force forward progress disable
|
|
The DMA engines will compete for shared resources.
|
|
If the HW detects that particular engines are not
|
|
able to make requests to an interface, the HW
|
|
will periodically trade-off throughput for
|
|
fairness. */
|
|
uint64_t commit_mode : 1; /**< DMA Engine Commit Mode
|
|
|
|
When COMMIT_MODE=0, DPI considers an instruction
|
|
complete when the HW internally generates the
|
|
final write for the current instruction.
|
|
|
|
When COMMIT_MODE=1, DPI additionally waits for
|
|
the final write to reach the interface coherency
|
|
point to declare the instructions complete.
|
|
|
|
Please note: when COMMIT_MODE == 0, DPI may not
|
|
follow the HRM ordering rules.
|
|
|
|
DPI hardware performance may be better with
|
|
COMMIT_MODE == 0 than with COMMIT_MODE == 1 due
|
|
to the relaxed ordering rules.
|
|
|
|
If the HRM ordering rules are required, set
|
|
COMMIT_MODE == 1. */
|
|
uint64_t pkt_hp : 1; /**< High-Priority Mode for Packet Interface.
|
|
Engine 5 will be serviced more frequently to
|
|
deliver more bandwidth to packet interface.
|
|
When PKT_EN=0, then PKT_HP=0. */
|
|
uint64_t pkt_en : 1; /**< Enables the packet interface.
|
|
When the packet interface is enabled, engine 5
|
|
is used for packets and is not available for DMA.
|
|
When PKT_EN=1, then DMA_ENB<5>=0.
|
|
When PKT_EN=0, then PKT_HP=0. */
|
|
uint64_t reserved_54_55 : 2;
|
|
uint64_t dma_enb : 6; /**< DMA engine enable. Enables the operation of the
|
|
DMA engine. After being enabled an engine should
|
|
not be disabled while processing instructions.
|
|
When PKT_EN=1, then DMA_ENB<5>=0. */
|
|
uint64_t reserved_34_47 : 14;
|
|
uint64_t b0_lend : 1; /**< When set '1' and the DPI 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', DPI 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.
|
|
0=DPTR format 1 is used
|
|
use register values for address and pointer
|
|
values for ES, NS, RO
|
|
1=DPTR format 0 is used
|
|
use pointer values for address and register
|
|
values for ES, NS, RO */
|
|
uint64_t reserved_0_13 : 14;
|
|
#else
|
|
uint64_t reserved_0_13 : 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 reserved_34_47 : 14;
|
|
uint64_t dma_enb : 6;
|
|
uint64_t reserved_54_55 : 2;
|
|
uint64_t pkt_en : 1;
|
|
uint64_t pkt_hp : 1;
|
|
uint64_t commit_mode : 1;
|
|
uint64_t ffp_dis : 1;
|
|
uint64_t pkt_en1 : 1;
|
|
uint64_t reserved_61_63 : 3;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_dma_control_s cn63xx;
|
|
struct cvmx_dpi_dma_control_cn63xxp1
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_59_63 : 5;
|
|
uint64_t commit_mode : 1; /**< DMA Engine Commit Mode
|
|
|
|
When COMMIT_MODE=0, DPI considers an instruction
|
|
complete when the HW internally generates the
|
|
final write for the current instruction.
|
|
|
|
When COMMIT_MODE=1, DPI additionally waits for
|
|
the final write to reach the interface coherency
|
|
point to declare the instructions complete.
|
|
|
|
Please note: when COMMIT_MODE == 0, DPI may not
|
|
follow the HRM ordering rules.
|
|
|
|
DPI hardware performance may be better with
|
|
COMMIT_MODE == 0 than with COMMIT_MODE == 1 due
|
|
to the relaxed ordering rules.
|
|
|
|
If the HRM ordering rules are required, set
|
|
COMMIT_MODE == 1. */
|
|
uint64_t pkt_hp : 1; /**< High-Priority Mode for Packet Interface.
|
|
Engine 5 will be serviced more frequently to
|
|
deliver more bandwidth to packet interface.
|
|
When PKT_EN=0, then PKT_HP=0. */
|
|
uint64_t pkt_en : 1; /**< Enables the packet interface.
|
|
When the packet interface is enabled, engine 5
|
|
is used for packets and is not available for DMA.
|
|
When PKT_EN=1, then DMA_ENB<5>=0.
|
|
When PKT_EN=0, then PKT_HP=0. */
|
|
uint64_t reserved_54_55 : 2;
|
|
uint64_t dma_enb : 6; /**< DMA engine enable. Enables the operation of the
|
|
DMA engine. After being enabled an engine should
|
|
not be disabled while processing instructions.
|
|
When PKT_EN=1, then DMA_ENB<5>=0. */
|
|
uint64_t reserved_34_47 : 14;
|
|
uint64_t b0_lend : 1; /**< When set '1' and the DPI 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', DPI 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.
|
|
0=DPTR format 1 is used
|
|
use register values for address and pointer
|
|
values for ES, NS, RO
|
|
1=DPTR format 0 is used
|
|
use pointer values for address and register
|
|
values for ES, NS, RO */
|
|
uint64_t reserved_0_13 : 14;
|
|
#else
|
|
uint64_t reserved_0_13 : 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 reserved_34_47 : 14;
|
|
uint64_t dma_enb : 6;
|
|
uint64_t reserved_54_55 : 2;
|
|
uint64_t pkt_en : 1;
|
|
uint64_t pkt_hp : 1;
|
|
uint64_t commit_mode : 1;
|
|
uint64_t reserved_59_63 : 5;
|
|
#endif
|
|
} cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dma_control cvmx_dpi_dma_control_t;
|
|
|
|
/**
|
|
* cvmx_dpi_dma_eng#_en
|
|
*/
|
|
union cvmx_dpi_dma_engx_en
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_dma_engx_en_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t qen : 8; /**< Controls which logical instruction queues can be
|
|
serviced by the DMA engine. Setting QEN==0
|
|
effectively disables the engine.
|
|
When DPI_DMA_CONTROL[PKT_EN] = 1, then
|
|
DPI_DMA_ENG5_EN[QEN] must be zero. */
|
|
#else
|
|
uint64_t qen : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_dma_engx_en_s cn63xx;
|
|
struct cvmx_dpi_dma_engx_en_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_dma_engx_en cvmx_dpi_dma_engx_en_t;
|
|
|
|
/**
|
|
* cvmx_dpi_eng#_buf
|
|
*
|
|
* Notes:
|
|
* The total amount of storage allocated to the 6 DPI DMA engines (via DPI_ENG*_BUF[BLKS]) must not exceed 8KB.
|
|
*
|
|
*/
|
|
union cvmx_dpi_engx_buf
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_engx_buf_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t base : 4; /**< The base address in 512B blocks of the engine fifo */
|
|
uint64_t blks : 4; /**< The size in 512B blocks of the engine fifo
|
|
Legal values are 0-8.
|
|
0 = Engine is disabled
|
|
1 = 0.5KB buffer
|
|
2 = 1.0KB buffer
|
|
3 = 1.5KB buffer
|
|
4 = 2.0KB buffer
|
|
5 = 2.5KB buffer
|
|
6 = 3.0KB buffer
|
|
7 = 3.5KB buffer
|
|
8 = 4.0KB buffer */
|
|
#else
|
|
uint64_t blks : 4;
|
|
uint64_t base : 4;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_engx_buf_s cn63xx;
|
|
struct cvmx_dpi_engx_buf_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_engx_buf cvmx_dpi_engx_buf_t;
|
|
|
|
/**
|
|
* cvmx_dpi_info_reg
|
|
*/
|
|
union cvmx_dpi_info_reg
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_info_reg_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t ffp : 4; /**< Force Forward Progress Indicator */
|
|
uint64_t reserved_2_3 : 2;
|
|
uint64_t ncb : 1; /**< NCB Register Access
|
|
This interrupt will fire in normal operation
|
|
when SW reads a DPI register through the NCB
|
|
interface. */
|
|
uint64_t rsl : 1; /**< RSL Register Access
|
|
This interrupt will fire in normal operation
|
|
when SW reads a DPI register through the RSL
|
|
interface. */
|
|
#else
|
|
uint64_t rsl : 1;
|
|
uint64_t ncb : 1;
|
|
uint64_t reserved_2_3 : 2;
|
|
uint64_t ffp : 4;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_info_reg_s cn63xx;
|
|
struct cvmx_dpi_info_reg_cn63xxp1
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_2_63 : 62;
|
|
uint64_t ncb : 1; /**< NCB Register Access
|
|
This interrupt will fire in normal operation
|
|
when SW reads a DPI register through the NCB
|
|
interface. */
|
|
uint64_t rsl : 1; /**< RSL Register Access
|
|
This interrupt will fire in normal operation
|
|
when SW reads a DPI register through the RSL
|
|
interface. */
|
|
#else
|
|
uint64_t rsl : 1;
|
|
uint64_t ncb : 1;
|
|
uint64_t reserved_2_63 : 62;
|
|
#endif
|
|
} cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_info_reg cvmx_dpi_info_reg_t;
|
|
|
|
/**
|
|
* cvmx_dpi_int_en
|
|
*/
|
|
union cvmx_dpi_int_en
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_int_en_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_26_63 : 38;
|
|
uint64_t sprt1_rst : 1; /**< DMA instruction was dropped because the source or
|
|
destination port was in reset.
|
|
this bit is set. */
|
|
uint64_t sprt0_rst : 1; /**< DMA instruction was dropped because the source or
|
|
destination port was in reset.
|
|
this bit is set. */
|
|
uint64_t reserved_23_23 : 1;
|
|
uint64_t req_badfil : 1; /**< DMA instruction unexpected fill */
|
|
uint64_t req_inull : 1; /**< DMA instruction filled with NULL pointer */
|
|
uint64_t req_anull : 1; /**< DMA instruction filled with bad instruction */
|
|
uint64_t req_undflw : 1; /**< DMA instruction FIFO underflow */
|
|
uint64_t req_ovrflw : 1; /**< DMA instruction FIFO overflow */
|
|
uint64_t req_badlen : 1; /**< DMA instruction fetch with length */
|
|
uint64_t req_badadr : 1; /**< DMA instruction fetch with bad pointer */
|
|
uint64_t dmadbo : 8; /**< DMAx doorbell overflow. */
|
|
uint64_t reserved_2_7 : 6;
|
|
uint64_t nfovr : 1; /**< CSR Fifo Overflow */
|
|
uint64_t nderr : 1; /**< NCB Decode Error */
|
|
#else
|
|
uint64_t nderr : 1;
|
|
uint64_t nfovr : 1;
|
|
uint64_t reserved_2_7 : 6;
|
|
uint64_t dmadbo : 8;
|
|
uint64_t req_badadr : 1;
|
|
uint64_t req_badlen : 1;
|
|
uint64_t req_ovrflw : 1;
|
|
uint64_t req_undflw : 1;
|
|
uint64_t req_anull : 1;
|
|
uint64_t req_inull : 1;
|
|
uint64_t req_badfil : 1;
|
|
uint64_t reserved_23_23 : 1;
|
|
uint64_t sprt0_rst : 1;
|
|
uint64_t sprt1_rst : 1;
|
|
uint64_t reserved_26_63 : 38;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_int_en_s cn63xx;
|
|
struct cvmx_dpi_int_en_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_int_en cvmx_dpi_int_en_t;
|
|
|
|
/**
|
|
* cvmx_dpi_int_reg
|
|
*/
|
|
union cvmx_dpi_int_reg
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_int_reg_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_26_63 : 38;
|
|
uint64_t sprt1_rst : 1; /**< DMA instruction was dropped because the source or
|
|
destination port was in reset.
|
|
this bit is set. */
|
|
uint64_t sprt0_rst : 1; /**< DMA instruction was dropped because the source or
|
|
destination port was in reset.
|
|
this bit is set. */
|
|
uint64_t reserved_23_23 : 1;
|
|
uint64_t req_badfil : 1; /**< DMA instruction unexpected fill
|
|
Instruction fill when none outstanding. */
|
|
uint64_t req_inull : 1; /**< DMA instruction filled with NULL pointer
|
|
Next pointer was NULL. */
|
|
uint64_t req_anull : 1; /**< DMA instruction filled with bad instruction
|
|
Fetched instruction word was 0. */
|
|
uint64_t req_undflw : 1; /**< DMA instruction FIFO underflow
|
|
DPI tracks outstanding instructions fetches.
|
|
Interrupt will fire when FIFO underflows. */
|
|
uint64_t req_ovrflw : 1; /**< DMA instruction FIFO overflow
|
|
DPI tracks outstanding instructions fetches.
|
|
Interrupt will fire when FIFO overflows. */
|
|
uint64_t req_badlen : 1; /**< DMA instruction fetch with length
|
|
Interrupt will fire if DPI forms an instruction
|
|
fetch with length of zero. */
|
|
uint64_t req_badadr : 1; /**< DMA instruction fetch with bad pointer
|
|
Interrupt will fire if DPI forms an instruction
|
|
fetch to the NULL pointer. */
|
|
uint64_t dmadbo : 8; /**< DMAx doorbell overflow.
|
|
DPI has a 32-bit counter for each request's queue
|
|
outstanding doorbell counts. Interrupt will fire
|
|
if the count overflows. */
|
|
uint64_t reserved_2_7 : 6;
|
|
uint64_t nfovr : 1; /**< CSR Fifo Overflow
|
|
DPI can store upto 16 CSR request. The FIFO will
|
|
overflow if that number is exceeded. */
|
|
uint64_t nderr : 1; /**< NCB Decode Error
|
|
DPI received a NCB transaction on the outbound
|
|
bus to the DPI deviceID, but the command was not
|
|
recognized. */
|
|
#else
|
|
uint64_t nderr : 1;
|
|
uint64_t nfovr : 1;
|
|
uint64_t reserved_2_7 : 6;
|
|
uint64_t dmadbo : 8;
|
|
uint64_t req_badadr : 1;
|
|
uint64_t req_badlen : 1;
|
|
uint64_t req_ovrflw : 1;
|
|
uint64_t req_undflw : 1;
|
|
uint64_t req_anull : 1;
|
|
uint64_t req_inull : 1;
|
|
uint64_t req_badfil : 1;
|
|
uint64_t reserved_23_23 : 1;
|
|
uint64_t sprt0_rst : 1;
|
|
uint64_t sprt1_rst : 1;
|
|
uint64_t reserved_26_63 : 38;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_int_reg_s cn63xx;
|
|
struct cvmx_dpi_int_reg_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_int_reg cvmx_dpi_int_reg_t;
|
|
|
|
/**
|
|
* cvmx_dpi_pint_info
|
|
*
|
|
* DPI_PINT_INFO = DPI Packet Interrupt Info
|
|
*
|
|
* DPI Packet Interrupt Info.
|
|
*/
|
|
union cvmx_dpi_pint_info
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_pint_info_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_14_63 : 50;
|
|
uint64_t iinfo : 6; /**< Packet Instruction Doorbell count overflow info */
|
|
uint64_t reserved_6_7 : 2;
|
|
uint64_t sinfo : 6; /**< Packet Scatterlist Doorbell count overflow info */
|
|
#else
|
|
uint64_t sinfo : 6;
|
|
uint64_t reserved_6_7 : 2;
|
|
uint64_t iinfo : 6;
|
|
uint64_t reserved_14_63 : 50;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_pint_info_s cn63xx;
|
|
struct cvmx_dpi_pint_info_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_pint_info cvmx_dpi_pint_info_t;
|
|
|
|
/**
|
|
* cvmx_dpi_pkt_err_rsp
|
|
*/
|
|
union cvmx_dpi_pkt_err_rsp
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_pkt_err_rsp_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_1_63 : 63;
|
|
uint64_t pkterr : 1; /**< Indicates that an ErrorResponse was received from
|
|
the I/O subsystem. */
|
|
#else
|
|
uint64_t pkterr : 1;
|
|
uint64_t reserved_1_63 : 63;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_pkt_err_rsp_s cn63xx;
|
|
struct cvmx_dpi_pkt_err_rsp_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_pkt_err_rsp cvmx_dpi_pkt_err_rsp_t;
|
|
|
|
/**
|
|
* cvmx_dpi_req_err_rsp
|
|
*/
|
|
union cvmx_dpi_req_err_rsp
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_req_err_rsp_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t qerr : 8; /**< Indicates which instruction queue received an
|
|
ErrorResponse from the I/O subsystem.
|
|
SW must clear the bit before the the cooresponding
|
|
instruction queue will continue processing
|
|
instructions if DPI_REQ_ERR_RSP_EN[EN] is set. */
|
|
#else
|
|
uint64_t qerr : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_req_err_rsp_s cn63xx;
|
|
struct cvmx_dpi_req_err_rsp_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_req_err_rsp cvmx_dpi_req_err_rsp_t;
|
|
|
|
/**
|
|
* cvmx_dpi_req_err_rsp_en
|
|
*/
|
|
union cvmx_dpi_req_err_rsp_en
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_req_err_rsp_en_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t en : 8; /**< Indicates which instruction queues should stop
|
|
dispatching instructions when an ErrorResponse
|
|
is received from the I/O subsystem. */
|
|
#else
|
|
uint64_t en : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_req_err_rsp_en_s cn63xx;
|
|
struct cvmx_dpi_req_err_rsp_en_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_req_err_rsp_en cvmx_dpi_req_err_rsp_en_t;
|
|
|
|
/**
|
|
* cvmx_dpi_req_err_rst
|
|
*/
|
|
union cvmx_dpi_req_err_rst
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_req_err_rst_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t qerr : 8; /**< Indicates which instruction queue dropped an
|
|
instruction because the source or destination
|
|
was in reset.
|
|
SW must clear the bit before the the cooresponding
|
|
instruction queue will continue processing
|
|
instructions if DPI_REQ_ERR_RST_EN[EN] is set. */
|
|
#else
|
|
uint64_t qerr : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_req_err_rst_s cn63xx;
|
|
struct cvmx_dpi_req_err_rst_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_req_err_rst cvmx_dpi_req_err_rst_t;
|
|
|
|
/**
|
|
* cvmx_dpi_req_err_rst_en
|
|
*/
|
|
union cvmx_dpi_req_err_rst_en
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_req_err_rst_en_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t en : 8; /**< Indicates which instruction queues should stop
|
|
dispatching instructions when an instruction
|
|
is dropped because the source or destination port
|
|
is in reset. */
|
|
#else
|
|
uint64_t en : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_req_err_rst_en_s cn63xx;
|
|
struct cvmx_dpi_req_err_rst_en_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_req_err_rst_en cvmx_dpi_req_err_rst_en_t;
|
|
|
|
/**
|
|
* cvmx_dpi_req_gbl_en
|
|
*/
|
|
union cvmx_dpi_req_gbl_en
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_req_gbl_en_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_8_63 : 56;
|
|
uint64_t qen : 8; /**< Indicates which instruction queues are enabled and
|
|
can dispatch instructions to a requesting engine. */
|
|
#else
|
|
uint64_t qen : 8;
|
|
uint64_t reserved_8_63 : 56;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_req_gbl_en_s cn63xx;
|
|
struct cvmx_dpi_req_gbl_en_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_req_gbl_en cvmx_dpi_req_gbl_en_t;
|
|
|
|
/**
|
|
* cvmx_dpi_sli_prt#_cfg
|
|
*
|
|
* DPI_SLI_PRTx_CFG = DPI SLI Port Configuration
|
|
*
|
|
* Configures the Max Read Request Size, Max Paylod Size, and Max Number of SLI Tags in use
|
|
*/
|
|
union cvmx_dpi_sli_prtx_cfg
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_sli_prtx_cfg_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_25_63 : 39;
|
|
uint64_t halt : 1; /**< When set, HALT indicates that the MAC has detected
|
|
a reset condition. No further instructions that
|
|
reference the MAC from any instruction Q will be
|
|
issued until the MAC comes out of reset and HALT
|
|
is cleared in SLI_CTL_PORTx[DIS_PORT]. */
|
|
uint64_t reserved_21_23 : 3;
|
|
uint64_t qlm_cfg : 1; /**< Read only copy of the QLM CFG pin
|
|
0= MAC is PCIe
|
|
1= MAC is SRIO */
|
|
uint64_t reserved_17_19 : 3;
|
|
uint64_t rd_mode : 1; /**< Read Mode
|
|
0=Exact Read Mode
|
|
If the port is a PCIe port, the HW reads on a
|
|
4B granularity. In this mode, the HW may break
|
|
a given read into 3 operations to satisify
|
|
PCIe rules.
|
|
If the port is a SRIO port, the HW follows the
|
|
SRIO read rules from the SRIO specification and
|
|
only issues 32*n, 16, and 8 byte operations
|
|
on the SRIO bus.
|
|
1=Block Mode
|
|
The HW will read more data than requested in
|
|
order to minimize the number of operations
|
|
necessary to complete the operation.
|
|
The memory region must be memory like. */
|
|
uint64_t reserved_14_15 : 2;
|
|
uint64_t molr : 6; /**< Max Outstanding Load Requests
|
|
Limits the number of oustanding load requests on
|
|
the port by restricting the number of tags
|
|
used by the SLI to track load responses. This
|
|
value can range from 1 to 32. Setting a value of
|
|
0 will halt all read traffic to the port. There
|
|
are no restrictions on when this value
|
|
can be changed. */
|
|
uint64_t mps_lim : 1; /**< MAC memory space write requests cannot cross the
|
|
(naturally-aligned) MPS boundary.
|
|
When clear, DPI is allowed to issue a MAC memory
|
|
space read that crosses the naturally-aligned
|
|
boundary of size defined by MPS. (DPI will still
|
|
only cross the boundary when it would eliminate a
|
|
write by doing so.)
|
|
When set, DPI will never issue a MAC memory space
|
|
write that crosses the naturally-aligned boundary
|
|
of size defined by MPS. */
|
|
uint64_t reserved_5_6 : 2;
|
|
uint64_t mps : 1; /**< Max Payload Size
|
|
0 = 128B
|
|
1 = 256B
|
|
For PCIe MACs, this MPS size must not exceed
|
|
the size selected by PCIE*_CFG030[MPS].
|
|
For sRIO MACs, all MPS values are allowed. */
|
|
uint64_t mrrs_lim : 1; /**< MAC memory space read requests cannot cross the
|
|
(naturally-aligned) MRRS boundary.
|
|
When clear, DPI is allowed to issue a MAC memory
|
|
space read that crosses the naturally-aligned
|
|
boundary of size defined by MRRS. (DPI will still
|
|
only cross the boundary when it would eliminate a
|
|
read by doing so.)
|
|
When set, DPI will never issue a MAC memory space
|
|
read that crosses the naturally-aligned boundary
|
|
of size defined by MRRS. */
|
|
uint64_t reserved_2_2 : 1;
|
|
uint64_t mrrs : 2; /**< Max Read Request Size
|
|
0 = 128B
|
|
1 = 256B
|
|
2 = 512B
|
|
3 = 1024B
|
|
For PCIe MACs, this MRRS size must not exceed
|
|
the size selected by PCIE*_CFG030[MRRS].
|
|
For sRIO MACs, this MRRS size must be <= 256B. */
|
|
#else
|
|
uint64_t mrrs : 2;
|
|
uint64_t reserved_2_2 : 1;
|
|
uint64_t mrrs_lim : 1;
|
|
uint64_t mps : 1;
|
|
uint64_t reserved_5_6 : 2;
|
|
uint64_t mps_lim : 1;
|
|
uint64_t molr : 6;
|
|
uint64_t reserved_14_15 : 2;
|
|
uint64_t rd_mode : 1;
|
|
uint64_t reserved_17_19 : 3;
|
|
uint64_t qlm_cfg : 1;
|
|
uint64_t reserved_21_23 : 3;
|
|
uint64_t halt : 1;
|
|
uint64_t reserved_25_63 : 39;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_sli_prtx_cfg_s cn63xx;
|
|
struct cvmx_dpi_sli_prtx_cfg_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_sli_prtx_cfg cvmx_dpi_sli_prtx_cfg_t;
|
|
|
|
/**
|
|
* cvmx_dpi_sli_prt#_err
|
|
*
|
|
* DPI_SLI_PRTx_ERR = DPI SLI Port Error Info
|
|
*
|
|
* Logs the Address and Request Queue associated with the reported SLI error response
|
|
*/
|
|
union cvmx_dpi_sli_prtx_err
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_sli_prtx_err_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t addr : 61; /**< Address of the failed load request. */
|
|
uint64_t reserved_0_2 : 3;
|
|
#else
|
|
uint64_t reserved_0_2 : 3;
|
|
uint64_t addr : 61;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_sli_prtx_err_s cn63xx;
|
|
struct cvmx_dpi_sli_prtx_err_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_sli_prtx_err cvmx_dpi_sli_prtx_err_t;
|
|
|
|
/**
|
|
* cvmx_dpi_sli_prt#_err_info
|
|
*
|
|
* DPI_SLI_PRTx_ERR_INFO = DPI SLI Port Error Info
|
|
*
|
|
* Logs the Address and Request Queue associated with the reported SLI error response
|
|
*/
|
|
union cvmx_dpi_sli_prtx_err_info
|
|
{
|
|
uint64_t u64;
|
|
struct cvmx_dpi_sli_prtx_err_info_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint64_t reserved_9_63 : 55;
|
|
uint64_t lock : 1; /**< DPI_SLI_PRTx_ERR and DPI_SLI_PRTx_ERR_INFO have
|
|
captured and locked contents. */
|
|
uint64_t reserved_5_7 : 3;
|
|
uint64_t type : 1; /**< Type of transaction that caused the ErrorResponse.
|
|
0=DMA Instruction
|
|
1=PKT Instruction */
|
|
uint64_t reserved_3_3 : 1;
|
|
uint64_t reqq : 3; /**< Request queue that made the failed load request. */
|
|
#else
|
|
uint64_t reqq : 3;
|
|
uint64_t reserved_3_3 : 1;
|
|
uint64_t type : 1;
|
|
uint64_t reserved_5_7 : 3;
|
|
uint64_t lock : 1;
|
|
uint64_t reserved_9_63 : 55;
|
|
#endif
|
|
} s;
|
|
struct cvmx_dpi_sli_prtx_err_info_s cn63xx;
|
|
struct cvmx_dpi_sli_prtx_err_info_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_dpi_sli_prtx_err_info cvmx_dpi_sli_prtx_err_info_t;
|
|
|
|
#endif
|