freebsd-nq/sys/contrib/octeon-sdk/cvmx-dpi-defs.h
Juli Mallett dc4ee6ca91 Merge the Cavium Octeon SDK 2.3.0 Simple Executive code and update FreeBSD to
make use of it where possible.

This primarily brings in support for newer hardware, and FreeBSD is not yet
able to support the abundance of IRQs on new hardware and many features in the
Ethernet driver.

Because of the changes to IRQs in the Simple Executive, we have to maintain our
own list of Octeon IRQs now, which probably can be pared-down and be specific
to the CIU interrupt unit soon, and when other interrupt mechanisms are added
they can maintain their own definitions.

Remove unmasking of interrupts from within the UART device now that the
function used is no longer present in the Simple Executive.  The unmasking
seems to have been gratuitous as this is more properly handled by the buses
above the UART device, and seems to work on that basis.
2012-03-11 06:17:49 +00:00

2072 lines
108 KiB
C

/***********************license start***************
* Copyright (c) 2003-2012 Cavium Inc. (support@cavium.com). All rights
* reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of Cavium Inc. nor the names of
* its contributors may be used to endorse or promote products
* derived from this software without specific prior written
* permission.
* This Software, including technical data, may be subject to U.S. export control
* laws, including the U.S. Export Administration Act and its associated
* regulations, and may be subject to export or import regulations in other
* countries.
* TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
* AND WITH ALL FAULTS AND CAVIUM INC. 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_DEFS_H__
#define __CVMX_DPI_DEFS_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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_ERR_RSP_STATUS(unsigned long offset)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
cvmx_warn("CVMX_DPI_DMAX_ERR_RSP_STATUS(%lu) is invalid on this chip\n", offset);
return CVMX_ADD_IO_SEG(0x0001DF0000000A80ull) + ((offset) & 7) * 8;
}
#else
#define CVMX_DPI_DMAX_ERR_RSP_STATUS(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000A80ull) + ((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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_IFLIGHT(unsigned long offset)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 7)))))
cvmx_warn("CVMX_DPI_DMAX_IFLIGHT(%lu) is invalid on this chip\n", offset);
return CVMX_ADD_IO_SEG(0x0001DF0000000A00ull) + ((offset) & 7) * 8;
}
#else
#define CVMX_DPI_DMAX_IFLIGHT(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000A00ull) + ((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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_CN61XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 7))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_DMA_PPX_CNT(unsigned long offset)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 31))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
cvmx_warn("CVMX_DPI_DMA_PPX_CNT(%lu) is invalid on this chip\n", offset);
return CVMX_ADD_IO_SEG(0x0001DF0000000B00ull) + ((offset) & 31) * 8;
}
#else
#define CVMX_DPI_DMA_PPX_CNT(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000B00ull) + ((offset) & 31) * 8)
#endif
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
static inline uint64_t CVMX_DPI_ENGX_BUF(unsigned long offset)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 5))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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
static inline uint64_t CVMX_DPI_NCBX_CFG(unsigned long block_id)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
cvmx_warn("CVMX_DPI_NCBX_CFG(%lu) is invalid on this chip\n", block_id);
return CVMX_ADD_IO_SEG(0x0001DF0000000800ull);
}
#else
#define CVMX_DPI_NCBX_CFG(block_id) (CVMX_ADD_IO_SEG(0x0001DF0000000800ull))
#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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_ERR_SKIP_COMP CVMX_DPI_REQ_ERR_SKIP_COMP_FUNC()
static inline uint64_t CVMX_DPI_REQ_ERR_SKIP_COMP_FUNC(void)
{
if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
cvmx_warn("CVMX_DPI_REQ_ERR_SKIP_COMP not supported on this chip\n");
return CVMX_ADD_IO_SEG(0x0001DF0000000838ull);
}
#else
#define CVMX_DPI_REQ_ERR_SKIP_COMP (CVMX_ADD_IO_SEG(0x0001DF0000000838ull))
#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_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
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_CN61XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1)))))
cvmx_warn("CVMX_DPI_SLI_PRTX_CFG(%lu) is invalid on this chip\n", offset);
return CVMX_ADD_IO_SEG(0x0001DF0000000900ull) + ((offset) & 3) * 8;
}
#else
#define CVMX_DPI_SLI_PRTX_CFG(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000900ull) + ((offset) & 3) * 8)
#endif
static inline uint64_t CVMX_DPI_SLI_PRTX_ERR(unsigned long offset)
{
switch(cvmx_get_octeon_family()) {
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
if ((offset <= 3))
return CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 3) * 8;
break;
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS1))
if ((offset <= 1))
return CVMX_ADD_IO_SEG(0x0001DF0000000928ull) + ((offset) & 1) * 8;
if (OCTEON_IS_MODEL(OCTEON_CN68XX_PASS2))
if ((offset <= 1))
return CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 1) * 8; if ((offset <= 1))
return CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 1) * 8;
break;
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
if ((offset <= 1))
return CVMX_ADD_IO_SEG(0x0001DF0000000928ull) + ((offset) & 1) * 8;
break;
}
cvmx_warn("CVMX_DPI_SLI_PRTX_ERR (offset = %lu) not supported on this chip\n", offset);
return CVMX_ADD_IO_SEG(0x0001DF0000000920ull) + ((offset) & 1) * 8;
}
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
static inline uint64_t CVMX_DPI_SLI_PRTX_ERR_INFO(unsigned long offset)
{
if (!(
(OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 3))) ||
(OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
(OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((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) & 3) * 8;
}
#else
#define CVMX_DPI_SLI_PRTX_ERR_INFO(offset) (CVMX_ADD_IO_SEG(0x0001DF0000000940ull) + ((offset) & 3) * 8)
#endif
/**
* cvmx_dpi_bist_status
*/
union cvmx_dpi_bist_status {
uint64_t u64;
struct cvmx_dpi_bist_status_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_47_63 : 17;
uint64_t bist : 47; /**< BIST Results.
HW sets a bit in BIST for for memory that fails
BIST. */
#else
uint64_t bist : 47;
uint64_t reserved_47_63 : 17;
#endif
} s;
struct cvmx_dpi_bist_status_s cn61xx;
struct cvmx_dpi_bist_status_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_45_63 : 19;
uint64_t bist : 45; /**< BIST Results.
HW sets a bit in BIST for for memory that fails
BIST. */
#else
uint64_t bist : 45;
uint64_t reserved_45_63 : 19;
#endif
} cn63xx;
struct cvmx_dpi_bist_status_cn63xxp1 {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn63xxp1;
struct cvmx_dpi_bist_status_s cn66xx;
struct cvmx_dpi_bist_status_cn63xx cn68xx;
struct cvmx_dpi_bist_status_cn63xx cn68xxp1;
struct cvmx_dpi_bist_status_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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_cn61xx {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_1_63 : 63;
uint64_t en : 1; /**< Turns on the DMA and Packet state machines */
#else
uint64_t en : 1;
uint64_t reserved_1_63 : 63;
#endif
} cn61xx;
struct cvmx_dpi_ctl_s cn63xx;
struct cvmx_dpi_ctl_s cn63xxp1;
struct cvmx_dpi_ctl_s cn66xx;
struct cvmx_dpi_ctl_s cn68xx;
struct cvmx_dpi_ctl_s cn68xxp1;
struct cvmx_dpi_ctl_cn61xx cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_dmax_counts_s cn63xx;
struct cvmx_dpi_dmax_counts_s cn63xxp1;
struct cvmx_dpi_dmax_counts_s cn66xx;
struct cvmx_dpi_dmax_counts_s cn68xx;
struct cvmx_dpi_dmax_counts_s cn68xxp1;
struct cvmx_dpi_dmax_counts_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_dmax_dbell_s cn63xx;
struct cvmx_dpi_dmax_dbell_s cn63xxp1;
struct cvmx_dpi_dmax_dbell_s cn66xx;
struct cvmx_dpi_dmax_dbell_s cn68xx;
struct cvmx_dpi_dmax_dbell_s cn68xxp1;
struct cvmx_dpi_dmax_dbell_s cnf71xx;
};
typedef union cvmx_dpi_dmax_dbell cvmx_dpi_dmax_dbell_t;
/**
* cvmx_dpi_dma#_err_rsp_status
*/
union cvmx_dpi_dmax_err_rsp_status {
uint64_t u64;
struct cvmx_dpi_dmax_err_rsp_status_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_6_63 : 58;
uint64_t status : 6; /**< QUE captures the ErrorResponse status of the last
6 instructions for each instruction queue.
STATUS<5> represents the status for first
instruction in instruction order while STATUS<0>
represents the last or most recent instruction.
If STATUS<n> is set, then the nth instruction in
the given queue experienced an ErrorResponse.
Otherwise, it completed normally. */
#else
uint64_t status : 6;
uint64_t reserved_6_63 : 58;
#endif
} s;
struct cvmx_dpi_dmax_err_rsp_status_s cn61xx;
struct cvmx_dpi_dmax_err_rsp_status_s cn66xx;
struct cvmx_dpi_dmax_err_rsp_status_s cn68xx;
struct cvmx_dpi_dmax_err_rsp_status_s cn68xxp1;
struct cvmx_dpi_dmax_err_rsp_status_s cnf71xx;
};
typedef union cvmx_dpi_dmax_err_rsp_status cvmx_dpi_dmax_err_rsp_status_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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 saddr : 33; /**< 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 : 33;
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_cn61xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn61xx;
struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn63xx;
struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn63xxp1;
struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cn66xx;
struct cvmx_dpi_dmax_ibuff_saddr_s cn68xx;
struct cvmx_dpi_dmax_ibuff_saddr_s cn68xxp1;
struct cvmx_dpi_dmax_ibuff_saddr_cn61xx cnf71xx;
};
typedef union cvmx_dpi_dmax_ibuff_saddr cvmx_dpi_dmax_ibuff_saddr_t;
/**
* cvmx_dpi_dma#_iflight
*/
union cvmx_dpi_dmax_iflight {
uint64_t u64;
struct cvmx_dpi_dmax_iflight_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_3_63 : 61;
uint64_t cnt : 3; /**< The number of instructions from a given queue that
can be inflight to the DMA engines at a time.
Reset value matches the number of DMA engines. */
#else
uint64_t cnt : 3;
uint64_t reserved_3_63 : 61;
#endif
} s;
struct cvmx_dpi_dmax_iflight_s cn61xx;
struct cvmx_dpi_dmax_iflight_s cn66xx;
struct cvmx_dpi_dmax_iflight_s cn68xx;
struct cvmx_dpi_dmax_iflight_s cn68xxp1;
struct cvmx_dpi_dmax_iflight_s cnf71xx;
};
typedef union cvmx_dpi_dmax_iflight cvmx_dpi_dmax_iflight_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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_40_63 : 24;
uint64_t addr : 40; /**< The next L2C address to read DMA# instructions
from. */
#else
uint64_t addr : 40;
uint64_t reserved_40_63 : 24;
#endif
} s;
struct cvmx_dpi_dmax_naddr_cn61xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn61xx;
struct cvmx_dpi_dmax_naddr_cn61xx cn63xx;
struct cvmx_dpi_dmax_naddr_cn61xx cn63xxp1;
struct cvmx_dpi_dmax_naddr_cn61xx cn66xx;
struct cvmx_dpi_dmax_naddr_s cn68xx;
struct cvmx_dpi_dmax_naddr_s cn68xxp1;
struct cvmx_dpi_dmax_naddr_cn61xx cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t state : 64; /**< State */
#else
uint64_t state : 64;
#endif
} s;
struct cvmx_dpi_dmax_reqbnk0_s cn61xx;
struct cvmx_dpi_dmax_reqbnk0_s cn63xx;
struct cvmx_dpi_dmax_reqbnk0_s cn63xxp1;
struct cvmx_dpi_dmax_reqbnk0_s cn66xx;
struct cvmx_dpi_dmax_reqbnk0_s cn68xx;
struct cvmx_dpi_dmax_reqbnk0_s cn68xxp1;
struct cvmx_dpi_dmax_reqbnk0_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t state : 64; /**< State */
#else
uint64_t state : 64;
#endif
} s;
struct cvmx_dpi_dmax_reqbnk1_s cn61xx;
struct cvmx_dpi_dmax_reqbnk1_s cn63xx;
struct cvmx_dpi_dmax_reqbnk1_s cn63xxp1;
struct cvmx_dpi_dmax_reqbnk1_s cn66xx;
struct cvmx_dpi_dmax_reqbnk1_s cn68xx;
struct cvmx_dpi_dmax_reqbnk1_s cn68xxp1;
struct cvmx_dpi_dmax_reqbnk1_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_62_63 : 2;
uint64_t dici_mode : 1; /**< DMA Instruction Completion Interrupt Mode
turns on mode to increment DPI_DMA_PPx_CNT
counters. */
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.
This mode has been deprecated. */
uint64_t pkt_en : 1; /**< Enables 1st 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_EN1=1, then PKT_EN=1. */
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.
When PKT_EN1=1, then DMA_ENB<4>=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 SLI_DMAX_CNT
DMA counters, if '0' then the number of bytes
in the dma transfer will be added to the
SLI_DMAX_CNT 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 dici_mode : 1;
uint64_t reserved_62_63 : 2;
#endif
} s;
struct cvmx_dpi_dma_control_s cn61xx;
struct cvmx_dpi_dma_control_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
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.
This mode has been deprecated. */
uint64_t pkt_en : 1; /**< Enables 1st 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_EN1=1, then PKT_EN=1. */
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.
When PKT_EN1=1, then DMA_ENB<4>=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
} cn63xx;
struct cvmx_dpi_dma_control_cn63xxp1 {
#ifdef __BIG_ENDIAN_BITFIELD
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;
struct cvmx_dpi_dma_control_cn63xx cn66xx;
struct cvmx_dpi_dma_control_s cn68xx;
struct cvmx_dpi_dma_control_cn63xx cn68xxp1;
struct cvmx_dpi_dma_control_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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.
When DPI_DMA_CONTROL[PKT_EN1] = 1, then
DPI_DMA_ENG4_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 cn61xx;
struct cvmx_dpi_dma_engx_en_s cn63xx;
struct cvmx_dpi_dma_engx_en_s cn63xxp1;
struct cvmx_dpi_dma_engx_en_s cn66xx;
struct cvmx_dpi_dma_engx_en_s cn68xx;
struct cvmx_dpi_dma_engx_en_s cn68xxp1;
struct cvmx_dpi_dma_engx_en_s cnf71xx;
};
typedef union cvmx_dpi_dma_engx_en cvmx_dpi_dma_engx_en_t;
/**
* cvmx_dpi_dma_pp#_cnt
*
* DPI_DMA_PP[0..3]_CNT = DMA per PP Instr Done Counter
*
* When DMA Instruction Completion Interrupt Mode DPI_DMA_CONTROL.DICI_MODE is enabled, every dma instruction
* that has the WQP=0 and a PTR value of 1..4 will incremrement DPI_DMA_PPx_CNT value-1 counter.
* Instructions with WQP=0 and PTR values higher then 0x3F will still send a zero byte write.
* Hardware reserves that values 5..63 for future use and will treat them as a PTR of 0 and do nothing.
*/
union cvmx_dpi_dma_ppx_cnt {
uint64_t u64;
struct cvmx_dpi_dma_ppx_cnt_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_16_63 : 48;
uint64_t cnt : 16; /**< Counter incremented according to conditions
described above and decremented by values written
to this field. A CNT of non zero, will cause
an interrupt in the CIU_SUM1_PPX_IPX register */
#else
uint64_t cnt : 16;
uint64_t reserved_16_63 : 48;
#endif
} s;
struct cvmx_dpi_dma_ppx_cnt_s cn61xx;
struct cvmx_dpi_dma_ppx_cnt_s cn68xx;
struct cvmx_dpi_dma_ppx_cnt_s cnf71xx;
};
typedef union cvmx_dpi_dma_ppx_cnt cvmx_dpi_dma_ppx_cnt_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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_37_63 : 27;
uint64_t compblks : 5; /**< Computed engine block size */
uint64_t reserved_9_31 : 23;
uint64_t base : 5; /**< The base address in 512B blocks of the engine fifo */
uint64_t blks : 4; /**< The size of the engine fifo
Legal values are 0-10.
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
9 = 6.0KB buffer
10 = 8.0KB buffer */
#else
uint64_t blks : 4;
uint64_t base : 5;
uint64_t reserved_9_31 : 23;
uint64_t compblks : 5;
uint64_t reserved_37_63 : 27;
#endif
} s;
struct cvmx_dpi_engx_buf_s cn61xx;
struct cvmx_dpi_engx_buf_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn63xx;
struct cvmx_dpi_engx_buf_cn63xx cn63xxp1;
struct cvmx_dpi_engx_buf_s cn66xx;
struct cvmx_dpi_engx_buf_s cn68xx;
struct cvmx_dpi_engx_buf_s cn68xxp1;
struct cvmx_dpi_engx_buf_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_info_reg_s cn63xx;
struct cvmx_dpi_info_reg_cn63xxp1 {
#ifdef __BIG_ENDIAN_BITFIELD
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;
struct cvmx_dpi_info_reg_s cn66xx;
struct cvmx_dpi_info_reg_s cn68xx;
struct cvmx_dpi_info_reg_s cn68xxp1;
struct cvmx_dpi_info_reg_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_28_63 : 36;
uint64_t sprt3_rst : 1; /**< DMA instruction was dropped because the source or
destination port was in reset.
this bit is set. */
uint64_t sprt2_rst : 1; /**< DMA instruction was dropped because the source or
destination port was in reset.
this bit is set. */
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 sprt2_rst : 1;
uint64_t sprt3_rst : 1;
uint64_t reserved_28_63 : 36;
#endif
} s;
struct cvmx_dpi_int_en_s cn61xx;
struct cvmx_dpi_int_en_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn63xx;
struct cvmx_dpi_int_en_cn63xx cn63xxp1;
struct cvmx_dpi_int_en_s cn66xx;
struct cvmx_dpi_int_en_cn63xx cn68xx;
struct cvmx_dpi_int_en_cn63xx cn68xxp1;
struct cvmx_dpi_int_en_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_28_63 : 36;
uint64_t sprt3_rst : 1; /**< DMA instruction was dropped because the source or
destination port was in reset.
this bit is set. */
uint64_t sprt2_rst : 1; /**< DMA instruction was dropped because the source or
destination port was in reset.
this bit is set. */
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 sprt2_rst : 1;
uint64_t sprt3_rst : 1;
uint64_t reserved_28_63 : 36;
#endif
} s;
struct cvmx_dpi_int_reg_s cn61xx;
struct cvmx_dpi_int_reg_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
} cn63xx;
struct cvmx_dpi_int_reg_cn63xx cn63xxp1;
struct cvmx_dpi_int_reg_s cn66xx;
struct cvmx_dpi_int_reg_cn63xx cn68xx;
struct cvmx_dpi_int_reg_cn63xx cn68xxp1;
struct cvmx_dpi_int_reg_s cnf71xx;
};
typedef union cvmx_dpi_int_reg cvmx_dpi_int_reg_t;
/**
* cvmx_dpi_ncb#_cfg
*/
union cvmx_dpi_ncbx_cfg {
uint64_t u64;
struct cvmx_dpi_ncbx_cfg_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_6_63 : 58;
uint64_t molr : 6; /**< Max Outstanding Load Requests
Limits the number of oustanding load requests on
the NCB interface. This value can range from 1
to 32. Setting a value of 0 will halt all read
traffic to the NCB interface. There are no
restrictions on when this value can be changed. */
#else
uint64_t molr : 6;
uint64_t reserved_6_63 : 58;
#endif
} s;
struct cvmx_dpi_ncbx_cfg_s cn61xx;
struct cvmx_dpi_ncbx_cfg_s cn66xx;
struct cvmx_dpi_ncbx_cfg_s cn68xx;
struct cvmx_dpi_ncbx_cfg_s cnf71xx;
};
typedef union cvmx_dpi_ncbx_cfg cvmx_dpi_ncbx_cfg_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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_pint_info_s cn63xx;
struct cvmx_dpi_pint_info_s cn63xxp1;
struct cvmx_dpi_pint_info_s cn66xx;
struct cvmx_dpi_pint_info_s cn68xx;
struct cvmx_dpi_pint_info_s cn68xxp1;
struct cvmx_dpi_pint_info_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_pkt_err_rsp_s cn63xx;
struct cvmx_dpi_pkt_err_rsp_s cn63xxp1;
struct cvmx_dpi_pkt_err_rsp_s cn66xx;
struct cvmx_dpi_pkt_err_rsp_s cn68xx;
struct cvmx_dpi_pkt_err_rsp_s cn68xxp1;
struct cvmx_dpi_pkt_err_rsp_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_req_err_rsp_s cn63xx;
struct cvmx_dpi_req_err_rsp_s cn63xxp1;
struct cvmx_dpi_req_err_rsp_s cn66xx;
struct cvmx_dpi_req_err_rsp_s cn68xx;
struct cvmx_dpi_req_err_rsp_s cn68xxp1;
struct cvmx_dpi_req_err_rsp_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_req_err_rsp_en_s cn63xx;
struct cvmx_dpi_req_err_rsp_en_s cn63xxp1;
struct cvmx_dpi_req_err_rsp_en_s cn66xx;
struct cvmx_dpi_req_err_rsp_en_s cn68xx;
struct cvmx_dpi_req_err_rsp_en_s cn68xxp1;
struct cvmx_dpi_req_err_rsp_en_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_req_err_rst_s cn63xx;
struct cvmx_dpi_req_err_rst_s cn63xxp1;
struct cvmx_dpi_req_err_rst_s cn66xx;
struct cvmx_dpi_req_err_rst_s cn68xx;
struct cvmx_dpi_req_err_rst_s cn68xxp1;
struct cvmx_dpi_req_err_rst_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_req_err_rst_en_s cn63xx;
struct cvmx_dpi_req_err_rst_en_s cn63xxp1;
struct cvmx_dpi_req_err_rst_en_s cn66xx;
struct cvmx_dpi_req_err_rst_en_s cn68xx;
struct cvmx_dpi_req_err_rst_en_s cn68xxp1;
struct cvmx_dpi_req_err_rst_en_s cnf71xx;
};
typedef union cvmx_dpi_req_err_rst_en cvmx_dpi_req_err_rst_en_t;
/**
* cvmx_dpi_req_err_skip_comp
*/
union cvmx_dpi_req_err_skip_comp {
uint64_t u64;
struct cvmx_dpi_req_err_skip_comp_s {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t reserved_24_63 : 40;
uint64_t en_rst : 8; /**< Indicates which instruction queue should skip the
completion phase once an port reset is
detected as indicated by DPI_REQ_ERR_RST. All
completions to the effected instruction queue
will be skipped as long as
DPI_REQ_ERR_RSP[QERR<ique>] & EN_RSP<ique> or
DPI_REQ_ERR_RST[QERR<ique>] & EN_RST<ique> are
set. */
uint64_t reserved_8_15 : 8;
uint64_t en_rsp : 8; /**< Indicates which instruction queue should skip the
completion phase once an ErrorResponse is
detected as indicated by DPI_REQ_ERR_RSP. All
completions to the effected instruction queue
will be skipped as long as
DPI_REQ_ERR_RSP[QERR<ique>] & EN_RSP<ique> or
DPI_REQ_ERR_RST[QERR<ique>] & EN_RST<ique> are
set. */
#else
uint64_t en_rsp : 8;
uint64_t reserved_8_15 : 8;
uint64_t en_rst : 8;
uint64_t reserved_24_63 : 40;
#endif
} s;
struct cvmx_dpi_req_err_skip_comp_s cn61xx;
struct cvmx_dpi_req_err_skip_comp_s cn66xx;
struct cvmx_dpi_req_err_skip_comp_s cn68xx;
struct cvmx_dpi_req_err_skip_comp_s cn68xxp1;
struct cvmx_dpi_req_err_skip_comp_s cnf71xx;
};
typedef union cvmx_dpi_req_err_skip_comp cvmx_dpi_req_err_skip_comp_t;
/**
* cvmx_dpi_req_gbl_en
*/
union cvmx_dpi_req_gbl_en {
uint64_t u64;
struct cvmx_dpi_req_gbl_en_s {
#ifdef __BIG_ENDIAN_BITFIELD
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 cn61xx;
struct cvmx_dpi_req_gbl_en_s cn63xx;
struct cvmx_dpi_req_gbl_en_s cn63xxp1;
struct cvmx_dpi_req_gbl_en_s cn66xx;
struct cvmx_dpi_req_gbl_en_s cn68xx;
struct cvmx_dpi_req_gbl_en_s cn68xxp1;
struct cvmx_dpi_req_gbl_en_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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 qlm_cfg : 4; /**< QLM_CFG is a function of MIO_QLMx_CFG[QLM_CFG]
QLM_CFG may contain values that are not normally
used for DMA and/or packet operations.
QLM_CFG does not indicate if a port is disabled.
MIO_QLMx_CFG can be used for more complete QLM
configuration information.
0000 = MAC is PCIe 1x4 (QLM) or 1x2 (DLM)
0001 = MAC is PCIe 2x1 (DLM only)
0010 = MAC is SGMII
0011 = MAC is XAUI
all other encodings are RESERVED */
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 depending on the MAC
type and number of lanes.
MAC == PCIe: Max is 32
MAC == sRio / 4 lanes: Max is 32
MAC == sRio / 2 lanes: Max is 16
MAC == sRio / 1 lane: Max is 8
Reset value is computed based on the MAC config.
Setting MOLR to 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 : 4;
uint64_t halt : 1;
uint64_t reserved_25_63 : 39;
#endif
} s;
struct cvmx_dpi_sli_prtx_cfg_s cn61xx;
struct cvmx_dpi_sli_prtx_cfg_cn63xx {
#ifdef __BIG_ENDIAN_BITFIELD
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
Since QLM_CFG is simply a copy of the QLM CFG
pins, it may reflect values that are not normal
for DMA or packet operations. QLM_CFG does not
indicate if a port is disabled.
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
} cn63xx;
struct cvmx_dpi_sli_prtx_cfg_cn63xx cn63xxp1;
struct cvmx_dpi_sli_prtx_cfg_s cn66xx;
struct cvmx_dpi_sli_prtx_cfg_cn63xx cn68xx;
struct cvmx_dpi_sli_prtx_cfg_cn63xx cn68xxp1;
struct cvmx_dpi_sli_prtx_cfg_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
uint64_t addr : 61; /**< Address of the failed load request.
Address is locked along with the
DPI_SLI_PRTx_ERR_INFO register.
See the DPI_SLI_PRTx_ERR_INFO[LOCK] description
for further information. */
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 cn61xx;
struct cvmx_dpi_sli_prtx_err_s cn63xx;
struct cvmx_dpi_sli_prtx_err_s cn63xxp1;
struct cvmx_dpi_sli_prtx_err_s cn66xx;
struct cvmx_dpi_sli_prtx_err_s cn68xx;
struct cvmx_dpi_sli_prtx_err_s cn68xxp1;
struct cvmx_dpi_sli_prtx_err_s cnf71xx;
};
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 {
#ifdef __BIG_ENDIAN_BITFIELD
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.
When Octeon first detects an ErrorResponse, the
TYPE, REQQ, and ADDR of the error is saved and an
internal lock state is set so the data associated
with the initial error is perserved.
Subsequent ErrorResponses will optionally raise
an interrupt, but will not modify the TYPE, REQQ,
or ADDR fields until the internal lock state is
cleared.
SW can clear the internal lock state by writting
a '1' to the appropriate bit in either
DPI_REQ_ERR_RSP or DPI_PKT_ERR_RSP depending on
the TYPE field.
Once the internal lock state is cleared,
the next ErrorResponse will set the TYPE, REQQ,
and ADDR for the new transaction. */
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 cn61xx;
struct cvmx_dpi_sli_prtx_err_info_s cn63xx;
struct cvmx_dpi_sli_prtx_err_info_s cn63xxp1;
struct cvmx_dpi_sli_prtx_err_info_s cn66xx;
struct cvmx_dpi_sli_prtx_err_info_s cn68xx;
struct cvmx_dpi_sli_prtx_err_info_s cn68xxp1;
struct cvmx_dpi_sli_prtx_err_info_s cnf71xx;
};
typedef union cvmx_dpi_sli_prtx_err_info cvmx_dpi_sli_prtx_err_info_t;
#endif