mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-10-30 15:48:52 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
274
arch/mips/include/asm/octeon/cvmx-address.h
Normal file
274
arch/mips/include/asm/octeon/cvmx-address.h
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2009 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* Typedefs and defines for working with Octeon physical addresses.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_ADDRESS_H__
|
||||
#define __CVMX_ADDRESS_H__
|
||||
|
||||
#if 0
|
||||
typedef enum {
|
||||
CVMX_MIPS_SPACE_XKSEG = 3LL,
|
||||
CVMX_MIPS_SPACE_XKPHYS = 2LL,
|
||||
CVMX_MIPS_SPACE_XSSEG = 1LL,
|
||||
CVMX_MIPS_SPACE_XUSEG = 0LL
|
||||
} cvmx_mips_space_t;
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
CVMX_MIPS_XKSEG_SPACE_KSEG0 = 0LL,
|
||||
CVMX_MIPS_XKSEG_SPACE_KSEG1 = 1LL,
|
||||
CVMX_MIPS_XKSEG_SPACE_SSEG = 2LL,
|
||||
CVMX_MIPS_XKSEG_SPACE_KSEG3 = 3LL
|
||||
} cvmx_mips_xkseg_space_t;
|
||||
|
||||
/* decodes <14:13> of a kseg3 window address */
|
||||
typedef enum {
|
||||
CVMX_ADD_WIN_SCR = 0L,
|
||||
/* see cvmx_add_win_dma_dec_t for further decode */
|
||||
CVMX_ADD_WIN_DMA = 1L,
|
||||
CVMX_ADD_WIN_UNUSED = 2L,
|
||||
CVMX_ADD_WIN_UNUSED2 = 3L
|
||||
} cvmx_add_win_dec_t;
|
||||
|
||||
/* decode within DMA space */
|
||||
typedef enum {
|
||||
/*
|
||||
* Add store data to the write buffer entry, allocating it if
|
||||
* necessary.
|
||||
*/
|
||||
CVMX_ADD_WIN_DMA_ADD = 0L,
|
||||
/* send out the write buffer entry to DRAM */
|
||||
CVMX_ADD_WIN_DMA_SENDMEM = 1L,
|
||||
/* store data must be normal DRAM memory space address in this case */
|
||||
/* send out the write buffer entry as an IOBDMA command */
|
||||
CVMX_ADD_WIN_DMA_SENDDMA = 2L,
|
||||
/* see CVMX_ADD_WIN_DMA_SEND_DEC for data contents */
|
||||
/* send out the write buffer entry as an IO write */
|
||||
CVMX_ADD_WIN_DMA_SENDIO = 3L,
|
||||
/* store data must be normal IO space address in this case */
|
||||
/* send out a single-tick command on the NCB bus */
|
||||
CVMX_ADD_WIN_DMA_SENDSINGLE = 4L,
|
||||
/* no write buffer data needed/used */
|
||||
} cvmx_add_win_dma_dec_t;
|
||||
|
||||
/*
|
||||
* Physical Address Decode
|
||||
*
|
||||
* Octeon-I HW never interprets this X (<39:36> reserved
|
||||
* for future expansion), software should set to 0.
|
||||
*
|
||||
* - 0x0 XXX0 0000 0000 to DRAM Cached
|
||||
* - 0x0 XXX0 0FFF FFFF
|
||||
*
|
||||
* - 0x0 XXX0 1000 0000 to Boot Bus Uncached (Converted to 0x1 00X0 1000 0000
|
||||
* - 0x0 XXX0 1FFF FFFF + EJTAG to 0x1 00X0 1FFF FFFF)
|
||||
*
|
||||
* - 0x0 XXX0 2000 0000 to DRAM Cached
|
||||
* - 0x0 XXXF FFFF FFFF
|
||||
*
|
||||
* - 0x1 00X0 0000 0000 to Boot Bus Uncached
|
||||
* - 0x1 00XF FFFF FFFF
|
||||
*
|
||||
* - 0x1 01X0 0000 0000 to Other NCB Uncached
|
||||
* - 0x1 FFXF FFFF FFFF devices
|
||||
*
|
||||
* Decode of all Octeon addresses
|
||||
*/
|
||||
typedef union {
|
||||
|
||||
uint64_t u64;
|
||||
/* mapped or unmapped virtual address */
|
||||
struct {
|
||||
uint64_t R:2;
|
||||
uint64_t offset:62;
|
||||
} sva;
|
||||
|
||||
/* mapped USEG virtual addresses (typically) */
|
||||
struct {
|
||||
uint64_t zeroes:33;
|
||||
uint64_t offset:31;
|
||||
} suseg;
|
||||
|
||||
/* mapped or unmapped virtual address */
|
||||
struct {
|
||||
uint64_t ones:33;
|
||||
uint64_t sp:2;
|
||||
uint64_t offset:29;
|
||||
} sxkseg;
|
||||
|
||||
/*
|
||||
* physical address accessed through xkphys unmapped virtual
|
||||
* address.
|
||||
*/
|
||||
struct {
|
||||
uint64_t R:2; /* CVMX_MIPS_SPACE_XKPHYS in this case */
|
||||
uint64_t cca:3; /* ignored by octeon */
|
||||
uint64_t mbz:10;
|
||||
uint64_t pa:49; /* physical address */
|
||||
} sxkphys;
|
||||
|
||||
/* physical address */
|
||||
struct {
|
||||
uint64_t mbz:15;
|
||||
/* if set, the address is uncached and resides on MCB bus */
|
||||
uint64_t is_io:1;
|
||||
/*
|
||||
* the hardware ignores this field when is_io==0, else
|
||||
* device ID.
|
||||
*/
|
||||
uint64_t did:8;
|
||||
/* the hardware ignores <39:36> in Octeon I */
|
||||
uint64_t unaddr:4;
|
||||
uint64_t offset:36;
|
||||
} sphys;
|
||||
|
||||
/* physical mem address */
|
||||
struct {
|
||||
/* techically, <47:40> are dont-cares */
|
||||
uint64_t zeroes:24;
|
||||
/* the hardware ignores <39:36> in Octeon I */
|
||||
uint64_t unaddr:4;
|
||||
uint64_t offset:36;
|
||||
} smem;
|
||||
|
||||
/* physical IO address */
|
||||
struct {
|
||||
uint64_t mem_region:2;
|
||||
uint64_t mbz:13;
|
||||
/* 1 in this case */
|
||||
uint64_t is_io:1;
|
||||
/*
|
||||
* The hardware ignores this field when is_io==0, else
|
||||
* device ID.
|
||||
*/
|
||||
uint64_t did:8;
|
||||
/* the hardware ignores <39:36> in Octeon I */
|
||||
uint64_t unaddr:4;
|
||||
uint64_t offset:36;
|
||||
} sio;
|
||||
|
||||
/*
|
||||
* Scratchpad virtual address - accessed through a window at
|
||||
* the end of kseg3
|
||||
*/
|
||||
struct {
|
||||
uint64_t ones:49;
|
||||
/* CVMX_ADD_WIN_SCR (0) in this case */
|
||||
cvmx_add_win_dec_t csrdec:2;
|
||||
uint64_t addr:13;
|
||||
} sscr;
|
||||
|
||||
/* there should only be stores to IOBDMA space, no loads */
|
||||
/*
|
||||
* IOBDMA virtual address - accessed through a window at the
|
||||
* end of kseg3
|
||||
*/
|
||||
struct {
|
||||
uint64_t ones:49;
|
||||
uint64_t csrdec:2; /* CVMX_ADD_WIN_DMA (1) in this case */
|
||||
uint64_t unused2:3;
|
||||
uint64_t type:3;
|
||||
uint64_t addr:7;
|
||||
} sdma;
|
||||
|
||||
struct {
|
||||
uint64_t didspace:24;
|
||||
uint64_t unused:40;
|
||||
} sfilldidspace;
|
||||
|
||||
} cvmx_addr_t;
|
||||
|
||||
/* These macros for used by 32 bit applications */
|
||||
|
||||
#define CVMX_MIPS32_SPACE_KSEG0 1l
|
||||
#define CVMX_ADD_SEG32(segment, add) \
|
||||
(((int32_t)segment << 31) | (int32_t)(add))
|
||||
|
||||
/*
|
||||
* Currently all IOs are performed using XKPHYS addressing. Linux uses
|
||||
* the CvmMemCtl register to enable XKPHYS addressing to IO space from
|
||||
* user mode. Future OSes may need to change the upper bits of IO
|
||||
* addresses. The following define controls the upper two bits for all
|
||||
* IO addresses generated by the simple executive library.
|
||||
*/
|
||||
#define CVMX_IO_SEG CVMX_MIPS_SPACE_XKPHYS
|
||||
|
||||
/* These macros simplify the process of creating common IO addresses */
|
||||
#define CVMX_ADD_SEG(segment, add) ((((uint64_t)segment) << 62) | (add))
|
||||
#ifndef CVMX_ADD_IO_SEG
|
||||
#define CVMX_ADD_IO_SEG(add) CVMX_ADD_SEG(CVMX_IO_SEG, (add))
|
||||
#endif
|
||||
#define CVMX_ADDR_DIDSPACE(did) (((CVMX_IO_SEG) << 22) | ((1ULL) << 8) | (did))
|
||||
#define CVMX_ADDR_DID(did) (CVMX_ADDR_DIDSPACE(did) << 40)
|
||||
#define CVMX_FULL_DID(did, subdid) (((did) << 3) | (subdid))
|
||||
|
||||
/* from include/ncb_rsl_id.v */
|
||||
#define CVMX_OCT_DID_MIS 0ULL /* misc stuff */
|
||||
#define CVMX_OCT_DID_GMX0 1ULL
|
||||
#define CVMX_OCT_DID_GMX1 2ULL
|
||||
#define CVMX_OCT_DID_PCI 3ULL
|
||||
#define CVMX_OCT_DID_KEY 4ULL
|
||||
#define CVMX_OCT_DID_FPA 5ULL
|
||||
#define CVMX_OCT_DID_DFA 6ULL
|
||||
#define CVMX_OCT_DID_ZIP 7ULL
|
||||
#define CVMX_OCT_DID_RNG 8ULL
|
||||
#define CVMX_OCT_DID_IPD 9ULL
|
||||
#define CVMX_OCT_DID_PKT 10ULL
|
||||
#define CVMX_OCT_DID_TIM 11ULL
|
||||
#define CVMX_OCT_DID_TAG 12ULL
|
||||
/* the rest are not on the IO bus */
|
||||
#define CVMX_OCT_DID_L2C 16ULL
|
||||
#define CVMX_OCT_DID_LMC 17ULL
|
||||
#define CVMX_OCT_DID_SPX0 18ULL
|
||||
#define CVMX_OCT_DID_SPX1 19ULL
|
||||
#define CVMX_OCT_DID_PIP 20ULL
|
||||
#define CVMX_OCT_DID_ASX0 22ULL
|
||||
#define CVMX_OCT_DID_ASX1 23ULL
|
||||
#define CVMX_OCT_DID_IOB 30ULL
|
||||
|
||||
#define CVMX_OCT_DID_PKT_SEND CVMX_FULL_DID(CVMX_OCT_DID_PKT, 2ULL)
|
||||
#define CVMX_OCT_DID_TAG_SWTAG CVMX_FULL_DID(CVMX_OCT_DID_TAG, 0ULL)
|
||||
#define CVMX_OCT_DID_TAG_TAG1 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 1ULL)
|
||||
#define CVMX_OCT_DID_TAG_TAG2 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 2ULL)
|
||||
#define CVMX_OCT_DID_TAG_TAG3 CVMX_FULL_DID(CVMX_OCT_DID_TAG, 3ULL)
|
||||
#define CVMX_OCT_DID_TAG_NULL_RD CVMX_FULL_DID(CVMX_OCT_DID_TAG, 4ULL)
|
||||
#define CVMX_OCT_DID_TAG_CSR CVMX_FULL_DID(CVMX_OCT_DID_TAG, 7ULL)
|
||||
#define CVMX_OCT_DID_FAU_FAI CVMX_FULL_DID(CVMX_OCT_DID_IOB, 0ULL)
|
||||
#define CVMX_OCT_DID_TIM_CSR CVMX_FULL_DID(CVMX_OCT_DID_TIM, 0ULL)
|
||||
#define CVMX_OCT_DID_KEY_RW CVMX_FULL_DID(CVMX_OCT_DID_KEY, 0ULL)
|
||||
#define CVMX_OCT_DID_PCI_6 CVMX_FULL_DID(CVMX_OCT_DID_PCI, 6ULL)
|
||||
#define CVMX_OCT_DID_MIS_BOO CVMX_FULL_DID(CVMX_OCT_DID_MIS, 0ULL)
|
||||
#define CVMX_OCT_DID_PCI_RML CVMX_FULL_DID(CVMX_OCT_DID_PCI, 0ULL)
|
||||
#define CVMX_OCT_DID_IPD_CSR CVMX_FULL_DID(CVMX_OCT_DID_IPD, 7ULL)
|
||||
#define CVMX_OCT_DID_DFA_CSR CVMX_FULL_DID(CVMX_OCT_DID_DFA, 7ULL)
|
||||
#define CVMX_OCT_DID_MIS_CSR CVMX_FULL_DID(CVMX_OCT_DID_MIS, 7ULL)
|
||||
#define CVMX_OCT_DID_ZIP_CSR CVMX_FULL_DID(CVMX_OCT_DID_ZIP, 0ULL)
|
||||
|
||||
#endif /* __CVMX_ADDRESS_H__ */
|
||||
2458
arch/mips/include/asm/octeon/cvmx-agl-defs.h
Normal file
2458
arch/mips/include/asm/octeon/cvmx-agl-defs.h
Normal file
File diff suppressed because it is too large
Load diff
139
arch/mips/include/asm/octeon/cvmx-asm.h
Normal file
139
arch/mips/include/asm/octeon/cvmx-asm.h
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* This is file defines ASM primitives for the executive.
|
||||
*/
|
||||
#ifndef __CVMX_ASM_H__
|
||||
#define __CVMX_ASM_H__
|
||||
|
||||
#include <asm/octeon/octeon-model.h>
|
||||
|
||||
/* other useful stuff */
|
||||
#define CVMX_SYNC asm volatile ("sync" : : : "memory")
|
||||
/* String version of SYNCW macro for using in inline asm constructs */
|
||||
#define CVMX_SYNCW_STR "syncw\nsyncw\n"
|
||||
#ifdef __OCTEON__
|
||||
|
||||
/* Deprecated, will be removed in future release */
|
||||
#define CVMX_SYNCIO asm volatile ("nop")
|
||||
|
||||
#define CVMX_SYNCIOBDMA asm volatile ("synciobdma" : : : "memory")
|
||||
|
||||
/* Deprecated, will be removed in future release */
|
||||
#define CVMX_SYNCIOALL asm volatile ("nop")
|
||||
|
||||
/*
|
||||
* We actually use two syncw instructions in a row when we need a write
|
||||
* memory barrier. This is because the CN3XXX series of Octeons have
|
||||
* errata Core-401. This can cause a single syncw to not enforce
|
||||
* ordering under very rare conditions. Even if it is rare, better safe
|
||||
* than sorry.
|
||||
*/
|
||||
#define CVMX_SYNCW asm volatile ("syncw\n\tsyncw" : : : "memory")
|
||||
|
||||
/*
|
||||
* Define new sync instructions to be normal SYNC instructions for
|
||||
* operating systems that use threads.
|
||||
*/
|
||||
#define CVMX_SYNCWS CVMX_SYNCW
|
||||
#define CVMX_SYNCS CVMX_SYNC
|
||||
#define CVMX_SYNCWS_STR CVMX_SYNCW_STR
|
||||
#else
|
||||
/*
|
||||
* Not using a Cavium compiler, always use the slower sync so the
|
||||
* assembler stays happy.
|
||||
*/
|
||||
/* Deprecated, will be removed in future release */
|
||||
#define CVMX_SYNCIO asm volatile ("nop")
|
||||
|
||||
#define CVMX_SYNCIOBDMA asm volatile ("sync" : : : "memory")
|
||||
|
||||
/* Deprecated, will be removed in future release */
|
||||
#define CVMX_SYNCIOALL asm volatile ("nop")
|
||||
|
||||
#define CVMX_SYNCW asm volatile ("sync" : : : "memory")
|
||||
#define CVMX_SYNCWS CVMX_SYNCW
|
||||
#define CVMX_SYNCS CVMX_SYNC
|
||||
#define CVMX_SYNCWS_STR CVMX_SYNCW_STR
|
||||
#endif
|
||||
|
||||
/*
|
||||
* CVMX_PREPARE_FOR_STORE makes each byte of the block unpredictable
|
||||
* (actually old value or zero) until that byte is stored to (by this or
|
||||
* another processor. Note that the value of each byte is not only
|
||||
* unpredictable, but may also change again - up until the point when one
|
||||
* of the cores stores to the byte.
|
||||
*/
|
||||
#define CVMX_PREPARE_FOR_STORE(address, offset) \
|
||||
asm volatile ("pref 30, " CVMX_TMP_STR(offset) "(%[rbase])" : : \
|
||||
[rbase] "d" (address))
|
||||
/*
|
||||
* This is a command headed to the L2 controller to tell it to clear
|
||||
* its dirty bit for a block. Basically, SW is telling HW that the
|
||||
* current version of the block will not be used.
|
||||
*/
|
||||
#define CVMX_DONT_WRITE_BACK(address, offset) \
|
||||
asm volatile ("pref 29, " CVMX_TMP_STR(offset) "(%[rbase])" : : \
|
||||
[rbase] "d" (address))
|
||||
|
||||
/* flush stores, invalidate entire icache */
|
||||
#define CVMX_ICACHE_INVALIDATE \
|
||||
{ CVMX_SYNC; asm volatile ("synci 0($0)" : : ); }
|
||||
|
||||
/* flush stores, invalidate entire icache */
|
||||
#define CVMX_ICACHE_INVALIDATE2 \
|
||||
{ CVMX_SYNC; asm volatile ("cache 0, 0($0)" : : ); }
|
||||
|
||||
/* complete prefetches, invalidate entire dcache */
|
||||
#define CVMX_DCACHE_INVALIDATE \
|
||||
{ CVMX_SYNC; asm volatile ("cache 9, 0($0)" : : ); }
|
||||
|
||||
#define CVMX_CACHE(op, address, offset) \
|
||||
asm volatile ("cache " CVMX_TMP_STR(op) ", " CVMX_TMP_STR(offset) "(%[rbase])" \
|
||||
: : [rbase] "d" (address) )
|
||||
/* fetch and lock the state. */
|
||||
#define CVMX_CACHE_LCKL2(address, offset) CVMX_CACHE(31, address, offset)
|
||||
/* unlock the state. */
|
||||
#define CVMX_CACHE_WBIL2(address, offset) CVMX_CACHE(23, address, offset)
|
||||
/* invalidate the cache block and clear the USED bits for the block */
|
||||
#define CVMX_CACHE_WBIL2I(address, offset) CVMX_CACHE(3, address, offset)
|
||||
/* load virtual tag and data for the L2 cache block into L2C_TAD0_TAG register */
|
||||
#define CVMX_CACHE_LTGL2I(address, offset) CVMX_CACHE(7, address, offset)
|
||||
|
||||
#define CVMX_POP(result, input) \
|
||||
asm ("pop %[rd],%[rs]" : [rd] "=d" (result) : [rs] "d" (input))
|
||||
#define CVMX_DPOP(result, input) \
|
||||
asm ("dpop %[rd],%[rs]" : [rd] "=d" (result) : [rs] "d" (input))
|
||||
|
||||
/* some new cop0-like stuff */
|
||||
#define CVMX_RDHWR(result, regstr) \
|
||||
asm volatile ("rdhwr %[rt],$" CVMX_TMP_STR(regstr) : [rt] "=d" (result))
|
||||
#define CVMX_RDHWRNV(result, regstr) \
|
||||
asm ("rdhwr %[rt],$" CVMX_TMP_STR(regstr) : [rt] "=d" (result))
|
||||
#endif /* __CVMX_ASM_H__ */
|
||||
669
arch/mips/include/asm/octeon/cvmx-asxx-defs.h
Normal file
669
arch/mips/include/asm/octeon/cvmx-asxx-defs.h
Normal file
|
|
@ -0,0 +1,669 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_ASXX_DEFS_H__
|
||||
#define __CVMX_ASXX_DEFS_H__
|
||||
|
||||
#define CVMX_ASXX_GMII_RX_CLK_SET(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000180ull))
|
||||
#define CVMX_ASXX_GMII_RX_DAT_SET(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000188ull))
|
||||
#define CVMX_ASXX_INT_EN(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000018ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_INT_REG(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000010ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_MII_RX_DAT_SET(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000190ull))
|
||||
#define CVMX_ASXX_PRT_LOOP(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000040ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_BYPASS(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000248ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_BYPASS_SETTING(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000250ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_COMP(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000220ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_DATA_DRV(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000218ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_FCRAM_MODE(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000210ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_NCTL_STRONG(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000230ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_NCTL_WEAK(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000240ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_PCTL_STRONG(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000228ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_PCTL_WEAK(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000238ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RLD_SETTING(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000258ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RX_CLK_SETX(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800B0000020ull) + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
|
||||
#define CVMX_ASXX_RX_PRT_EN(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000000ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RX_WOL(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000100ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RX_WOL_MSK(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000108ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RX_WOL_POWOK(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000118ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_RX_WOL_SIG(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000110ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_TX_CLK_SETX(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800B0000048ull) + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
|
||||
#define CVMX_ASXX_TX_COMP_BYP(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000068ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_ASXX_TX_HI_WATERX(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800B0000080ull) + (((offset) & 3) + ((block_id) & 1) * 0x1000000ull) * 8)
|
||||
#define CVMX_ASXX_TX_PRT_EN(block_id) (CVMX_ADD_IO_SEG(0x00011800B0000008ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
|
||||
union cvmx_asxx_gmii_rx_clk_set {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_gmii_rx_clk_set_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_gmii_rx_clk_set_s cn30xx;
|
||||
struct cvmx_asxx_gmii_rx_clk_set_s cn31xx;
|
||||
struct cvmx_asxx_gmii_rx_clk_set_s cn50xx;
|
||||
};
|
||||
|
||||
union cvmx_asxx_gmii_rx_dat_set {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_gmii_rx_dat_set_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_gmii_rx_dat_set_s cn30xx;
|
||||
struct cvmx_asxx_gmii_rx_dat_set_s cn31xx;
|
||||
struct cvmx_asxx_gmii_rx_dat_set_s cn50xx;
|
||||
};
|
||||
|
||||
union cvmx_asxx_int_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_int_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t txpsh:4;
|
||||
uint64_t txpop:4;
|
||||
uint64_t ovrflw:4;
|
||||
#else
|
||||
uint64_t ovrflw:4;
|
||||
uint64_t txpop:4;
|
||||
uint64_t txpsh:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_int_en_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_11_63:53;
|
||||
uint64_t txpsh:3;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t txpop:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t ovrflw:3;
|
||||
#else
|
||||
uint64_t ovrflw:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t txpop:3;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t txpsh:3;
|
||||
uint64_t reserved_11_63:53;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_int_en_cn30xx cn31xx;
|
||||
struct cvmx_asxx_int_en_s cn38xx;
|
||||
struct cvmx_asxx_int_en_s cn38xxp2;
|
||||
struct cvmx_asxx_int_en_cn30xx cn50xx;
|
||||
struct cvmx_asxx_int_en_s cn58xx;
|
||||
struct cvmx_asxx_int_en_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_int_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_int_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t txpsh:4;
|
||||
uint64_t txpop:4;
|
||||
uint64_t ovrflw:4;
|
||||
#else
|
||||
uint64_t ovrflw:4;
|
||||
uint64_t txpop:4;
|
||||
uint64_t txpsh:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_int_reg_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_11_63:53;
|
||||
uint64_t txpsh:3;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t txpop:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t ovrflw:3;
|
||||
#else
|
||||
uint64_t ovrflw:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t txpop:3;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t txpsh:3;
|
||||
uint64_t reserved_11_63:53;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_int_reg_cn30xx cn31xx;
|
||||
struct cvmx_asxx_int_reg_s cn38xx;
|
||||
struct cvmx_asxx_int_reg_s cn38xxp2;
|
||||
struct cvmx_asxx_int_reg_cn30xx cn50xx;
|
||||
struct cvmx_asxx_int_reg_s cn58xx;
|
||||
struct cvmx_asxx_int_reg_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_mii_rx_dat_set {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_mii_rx_dat_set_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_mii_rx_dat_set_s cn30xx;
|
||||
struct cvmx_asxx_mii_rx_dat_set_s cn50xx;
|
||||
};
|
||||
|
||||
union cvmx_asxx_prt_loop {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_prt_loop_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t ext_loop:4;
|
||||
uint64_t int_loop:4;
|
||||
#else
|
||||
uint64_t int_loop:4;
|
||||
uint64_t ext_loop:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_prt_loop_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t ext_loop:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t int_loop:3;
|
||||
#else
|
||||
uint64_t int_loop:3;
|
||||
uint64_t reserved_3_3:1;
|
||||
uint64_t ext_loop:3;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_prt_loop_cn30xx cn31xx;
|
||||
struct cvmx_asxx_prt_loop_s cn38xx;
|
||||
struct cvmx_asxx_prt_loop_s cn38xxp2;
|
||||
struct cvmx_asxx_prt_loop_cn30xx cn50xx;
|
||||
struct cvmx_asxx_prt_loop_s cn58xx;
|
||||
struct cvmx_asxx_prt_loop_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_bypass {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_bypass_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t bypass:1;
|
||||
#else
|
||||
uint64_t bypass:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_bypass_s cn38xx;
|
||||
struct cvmx_asxx_rld_bypass_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_bypass_s cn58xx;
|
||||
struct cvmx_asxx_rld_bypass_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_bypass_setting {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_bypass_setting_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_bypass_setting_s cn38xx;
|
||||
struct cvmx_asxx_rld_bypass_setting_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_bypass_setting_s cn58xx;
|
||||
struct cvmx_asxx_rld_bypass_setting_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_comp {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_comp_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t pctl:5;
|
||||
uint64_t nctl:4;
|
||||
#else
|
||||
uint64_t nctl:4;
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_comp_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t pctl:4;
|
||||
uint64_t nctl:4;
|
||||
#else
|
||||
uint64_t nctl:4;
|
||||
uint64_t pctl:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_asxx_rld_comp_cn38xx cn38xxp2;
|
||||
struct cvmx_asxx_rld_comp_s cn58xx;
|
||||
struct cvmx_asxx_rld_comp_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_data_drv {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_data_drv_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t pctl:4;
|
||||
uint64_t nctl:4;
|
||||
#else
|
||||
uint64_t nctl:4;
|
||||
uint64_t pctl:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_data_drv_s cn38xx;
|
||||
struct cvmx_asxx_rld_data_drv_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_data_drv_s cn58xx;
|
||||
struct cvmx_asxx_rld_data_drv_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_fcram_mode {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_fcram_mode_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t mode:1;
|
||||
#else
|
||||
uint64_t mode:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_fcram_mode_s cn38xx;
|
||||
struct cvmx_asxx_rld_fcram_mode_s cn38xxp2;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_nctl_strong {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_nctl_strong_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t nctl:5;
|
||||
#else
|
||||
uint64_t nctl:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_nctl_strong_s cn38xx;
|
||||
struct cvmx_asxx_rld_nctl_strong_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_nctl_strong_s cn58xx;
|
||||
struct cvmx_asxx_rld_nctl_strong_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_nctl_weak {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_nctl_weak_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t nctl:5;
|
||||
#else
|
||||
uint64_t nctl:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_nctl_weak_s cn38xx;
|
||||
struct cvmx_asxx_rld_nctl_weak_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_nctl_weak_s cn58xx;
|
||||
struct cvmx_asxx_rld_nctl_weak_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_pctl_strong {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_pctl_strong_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t pctl:5;
|
||||
#else
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_pctl_strong_s cn38xx;
|
||||
struct cvmx_asxx_rld_pctl_strong_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_pctl_strong_s cn58xx;
|
||||
struct cvmx_asxx_rld_pctl_strong_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_pctl_weak {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_pctl_weak_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t pctl:5;
|
||||
#else
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_pctl_weak_s cn38xx;
|
||||
struct cvmx_asxx_rld_pctl_weak_s cn38xxp2;
|
||||
struct cvmx_asxx_rld_pctl_weak_s cn58xx;
|
||||
struct cvmx_asxx_rld_pctl_weak_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rld_setting {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rld_setting_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t dfaset:5;
|
||||
uint64_t dfalag:1;
|
||||
uint64_t dfalead:1;
|
||||
uint64_t dfalock:1;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t dfalock:1;
|
||||
uint64_t dfalead:1;
|
||||
uint64_t dfalag:1;
|
||||
uint64_t dfaset:5;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rld_setting_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_asxx_rld_setting_cn38xx cn38xxp2;
|
||||
struct cvmx_asxx_rld_setting_s cn58xx;
|
||||
struct cvmx_asxx_rld_setting_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_clk_setx {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_clk_setx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn30xx;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn31xx;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn38xx;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn38xxp2;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn50xx;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn58xx;
|
||||
struct cvmx_asxx_rx_clk_setx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_prt_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_prt_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t prt_en:4;
|
||||
#else
|
||||
uint64_t prt_en:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_prt_en_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_3_63:61;
|
||||
uint64_t prt_en:3;
|
||||
#else
|
||||
uint64_t prt_en:3;
|
||||
uint64_t reserved_3_63:61;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_rx_prt_en_cn30xx cn31xx;
|
||||
struct cvmx_asxx_rx_prt_en_s cn38xx;
|
||||
struct cvmx_asxx_rx_prt_en_s cn38xxp2;
|
||||
struct cvmx_asxx_rx_prt_en_cn30xx cn50xx;
|
||||
struct cvmx_asxx_rx_prt_en_s cn58xx;
|
||||
struct cvmx_asxx_rx_prt_en_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_wol {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_wol_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t status:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t status:1;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_wol_s cn38xx;
|
||||
struct cvmx_asxx_rx_wol_s cn38xxp2;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_wol_msk {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_wol_msk_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t msk:64;
|
||||
#else
|
||||
uint64_t msk:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_wol_msk_s cn38xx;
|
||||
struct cvmx_asxx_rx_wol_msk_s cn38xxp2;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_wol_powok {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_wol_powok_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t powerok:1;
|
||||
#else
|
||||
uint64_t powerok:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_wol_powok_s cn38xx;
|
||||
struct cvmx_asxx_rx_wol_powok_s cn38xxp2;
|
||||
};
|
||||
|
||||
union cvmx_asxx_rx_wol_sig {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_rx_wol_sig_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t sig:32;
|
||||
#else
|
||||
uint64_t sig:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_rx_wol_sig_s cn38xx;
|
||||
struct cvmx_asxx_rx_wol_sig_s cn38xxp2;
|
||||
};
|
||||
|
||||
union cvmx_asxx_tx_clk_setx {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_tx_clk_setx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t setting:5;
|
||||
#else
|
||||
uint64_t setting:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn30xx;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn31xx;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn38xx;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn38xxp2;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn50xx;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn58xx;
|
||||
struct cvmx_asxx_tx_clk_setx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_tx_comp_byp {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_tx_comp_byp_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_0_63:64;
|
||||
#else
|
||||
uint64_t reserved_0_63:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_tx_comp_byp_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t bypass:1;
|
||||
uint64_t pctl:4;
|
||||
uint64_t nctl:4;
|
||||
#else
|
||||
uint64_t nctl:4;
|
||||
uint64_t pctl:4;
|
||||
uint64_t bypass:1;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_tx_comp_byp_cn30xx cn31xx;
|
||||
struct cvmx_asxx_tx_comp_byp_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t pctl:4;
|
||||
uint64_t nctl:4;
|
||||
#else
|
||||
uint64_t nctl:4;
|
||||
uint64_t pctl:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_asxx_tx_comp_byp_cn38xx cn38xxp2;
|
||||
struct cvmx_asxx_tx_comp_byp_cn50xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t bypass:1;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t nctl:5;
|
||||
#else
|
||||
uint64_t nctl:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t bypass:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} cn50xx;
|
||||
struct cvmx_asxx_tx_comp_byp_cn58xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t nctl:5;
|
||||
#else
|
||||
uint64_t nctl:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t pctl:5;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} cn58xx;
|
||||
struct cvmx_asxx_tx_comp_byp_cn58xx cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_tx_hi_waterx {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_tx_hi_waterx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t mark:4;
|
||||
#else
|
||||
uint64_t mark:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_tx_hi_waterx_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_3_63:61;
|
||||
uint64_t mark:3;
|
||||
#else
|
||||
uint64_t mark:3;
|
||||
uint64_t reserved_3_63:61;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_tx_hi_waterx_cn30xx cn31xx;
|
||||
struct cvmx_asxx_tx_hi_waterx_s cn38xx;
|
||||
struct cvmx_asxx_tx_hi_waterx_s cn38xxp2;
|
||||
struct cvmx_asxx_tx_hi_waterx_cn30xx cn50xx;
|
||||
struct cvmx_asxx_tx_hi_waterx_s cn58xx;
|
||||
struct cvmx_asxx_tx_hi_waterx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_asxx_tx_prt_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_asxx_tx_prt_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t prt_en:4;
|
||||
#else
|
||||
uint64_t prt_en:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_asxx_tx_prt_en_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_3_63:61;
|
||||
uint64_t prt_en:3;
|
||||
#else
|
||||
uint64_t prt_en:3;
|
||||
uint64_t reserved_3_63:61;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_asxx_tx_prt_en_cn30xx cn31xx;
|
||||
struct cvmx_asxx_tx_prt_en_s cn38xx;
|
||||
struct cvmx_asxx_tx_prt_en_s cn38xxp2;
|
||||
struct cvmx_asxx_tx_prt_en_cn30xx cn50xx;
|
||||
struct cvmx_asxx_tx_prt_en_s cn58xx;
|
||||
struct cvmx_asxx_tx_prt_en_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
351
arch/mips/include/asm/octeon/cvmx-bootinfo.h
Normal file
351
arch/mips/include/asm/octeon/cvmx-bootinfo.h
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Header file containing the ABI with the bootloader.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_BOOTINFO_H__
|
||||
#define __CVMX_BOOTINFO_H__
|
||||
|
||||
/*
|
||||
* Current major and minor versions of the CVMX bootinfo block that is
|
||||
* passed from the bootloader to the application. This is versioned
|
||||
* so that applications can properly handle multiple bootloader
|
||||
* versions.
|
||||
*/
|
||||
#define CVMX_BOOTINFO_MAJ_VER 1
|
||||
#define CVMX_BOOTINFO_MIN_VER 3
|
||||
|
||||
#if (CVMX_BOOTINFO_MAJ_VER == 1)
|
||||
#define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
|
||||
/*
|
||||
* This structure is populated by the bootloader. For binary
|
||||
* compatibility the only changes that should be made are
|
||||
* adding members to the end of the structure, and the minor
|
||||
* version should be incremented at that time.
|
||||
* If an incompatible change is made, the major version
|
||||
* must be incremented, and the minor version should be reset
|
||||
* to 0.
|
||||
*/
|
||||
struct cvmx_bootinfo {
|
||||
uint32_t major_version;
|
||||
uint32_t minor_version;
|
||||
|
||||
uint64_t stack_top;
|
||||
uint64_t heap_base;
|
||||
uint64_t heap_end;
|
||||
uint64_t desc_vaddr;
|
||||
|
||||
uint32_t exception_base_addr;
|
||||
uint32_t stack_size;
|
||||
uint32_t flags;
|
||||
uint32_t core_mask;
|
||||
/* DRAM size in megabytes */
|
||||
uint32_t dram_size;
|
||||
/* physical address of free memory descriptor block*/
|
||||
uint32_t phy_mem_desc_addr;
|
||||
/* used to pass flags from app to debugger */
|
||||
uint32_t debugger_flags_base_addr;
|
||||
|
||||
/* CPU clock speed, in hz */
|
||||
uint32_t eclock_hz;
|
||||
|
||||
/* DRAM clock speed, in hz */
|
||||
uint32_t dclock_hz;
|
||||
|
||||
uint32_t reserved0;
|
||||
uint16_t board_type;
|
||||
uint8_t board_rev_major;
|
||||
uint8_t board_rev_minor;
|
||||
uint16_t reserved1;
|
||||
uint8_t reserved2;
|
||||
uint8_t reserved3;
|
||||
char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
|
||||
uint8_t mac_addr_base[6];
|
||||
uint8_t mac_addr_count;
|
||||
#if (CVMX_BOOTINFO_MIN_VER >= 1)
|
||||
/*
|
||||
* Several boards support compact flash on the Octeon boot
|
||||
* bus. The CF memory spaces may be mapped to different
|
||||
* addresses on different boards. These are the physical
|
||||
* addresses, so care must be taken to use the correct
|
||||
* XKPHYS/KSEG0 addressing depending on the application's
|
||||
* ABI. These values will be 0 if CF is not present.
|
||||
*/
|
||||
uint64_t compact_flash_common_base_addr;
|
||||
uint64_t compact_flash_attribute_base_addr;
|
||||
/*
|
||||
* Base address of the LED display (as on EBT3000 board)
|
||||
* This will be 0 if LED display not present.
|
||||
*/
|
||||
uint64_t led_display_base_addr;
|
||||
#endif
|
||||
#if (CVMX_BOOTINFO_MIN_VER >= 2)
|
||||
/* DFA reference clock in hz (if applicable)*/
|
||||
uint32_t dfa_ref_clock_hz;
|
||||
|
||||
/*
|
||||
* flags indicating various configuration options. These
|
||||
* flags supercede the 'flags' variable and should be used
|
||||
* instead if available.
|
||||
*/
|
||||
uint32_t config_flags;
|
||||
#endif
|
||||
#if (CVMX_BOOTINFO_MIN_VER >= 3)
|
||||
/*
|
||||
* Address of the OF Flattened Device Tree structure
|
||||
* describing the board.
|
||||
*/
|
||||
uint64_t fdt_addr;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0)
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1)
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2)
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3)
|
||||
/* This flag is set if the TLB mappings are not contained in the
|
||||
* 0x10000000 - 0x20000000 boot bus region. */
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
|
||||
#define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5)
|
||||
|
||||
#endif /* (CVMX_BOOTINFO_MAJ_VER == 1) */
|
||||
|
||||
/* Type defines for board and chip types */
|
||||
enum cvmx_board_types_enum {
|
||||
CVMX_BOARD_TYPE_NULL = 0,
|
||||
CVMX_BOARD_TYPE_SIM = 1,
|
||||
CVMX_BOARD_TYPE_EBT3000 = 2,
|
||||
CVMX_BOARD_TYPE_KODAMA = 3,
|
||||
CVMX_BOARD_TYPE_NIAGARA = 4,
|
||||
CVMX_BOARD_TYPE_NAC38 = 5, /* formerly NAO38 */
|
||||
CVMX_BOARD_TYPE_THUNDER = 6,
|
||||
CVMX_BOARD_TYPE_TRANTOR = 7,
|
||||
CVMX_BOARD_TYPE_EBH3000 = 8,
|
||||
CVMX_BOARD_TYPE_EBH3100 = 9,
|
||||
CVMX_BOARD_TYPE_HIKARI = 10,
|
||||
CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
|
||||
CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
|
||||
CVMX_BOARD_TYPE_KBP = 13,
|
||||
/* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */
|
||||
CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
|
||||
CVMX_BOARD_TYPE_EBT5800 = 15,
|
||||
CVMX_BOARD_TYPE_NICPRO2 = 16,
|
||||
CVMX_BOARD_TYPE_EBH5600 = 17,
|
||||
CVMX_BOARD_TYPE_EBH5601 = 18,
|
||||
CVMX_BOARD_TYPE_EBH5200 = 19,
|
||||
CVMX_BOARD_TYPE_BBGW_REF = 20,
|
||||
CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
|
||||
CVMX_BOARD_TYPE_EBT5600 = 22,
|
||||
CVMX_BOARD_TYPE_EBH5201 = 23,
|
||||
CVMX_BOARD_TYPE_EBT5200 = 24,
|
||||
CVMX_BOARD_TYPE_CB5600 = 25,
|
||||
CVMX_BOARD_TYPE_CB5601 = 26,
|
||||
CVMX_BOARD_TYPE_CB5200 = 27,
|
||||
/* Special 'generic' board type, supports many boards */
|
||||
CVMX_BOARD_TYPE_GENERIC = 28,
|
||||
CVMX_BOARD_TYPE_EBH5610 = 29,
|
||||
CVMX_BOARD_TYPE_LANAI2_A = 30,
|
||||
CVMX_BOARD_TYPE_LANAI2_U = 31,
|
||||
CVMX_BOARD_TYPE_EBB5600 = 32,
|
||||
CVMX_BOARD_TYPE_EBB6300 = 33,
|
||||
CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
|
||||
CVMX_BOARD_TYPE_LANAI2_G = 35,
|
||||
CVMX_BOARD_TYPE_EBT5810 = 36,
|
||||
CVMX_BOARD_TYPE_NIC10E = 37,
|
||||
CVMX_BOARD_TYPE_EP6300C = 38,
|
||||
CVMX_BOARD_TYPE_EBB6800 = 39,
|
||||
CVMX_BOARD_TYPE_NIC4E = 40,
|
||||
CVMX_BOARD_TYPE_NIC2E = 41,
|
||||
CVMX_BOARD_TYPE_EBB6600 = 42,
|
||||
CVMX_BOARD_TYPE_REDWING = 43,
|
||||
CVMX_BOARD_TYPE_NIC68_4 = 44,
|
||||
CVMX_BOARD_TYPE_NIC10E_66 = 45,
|
||||
CVMX_BOARD_TYPE_MAX,
|
||||
|
||||
/*
|
||||
* The range from CVMX_BOARD_TYPE_MAX to
|
||||
* CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved for future
|
||||
* SDK use.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Set aside a range for customer boards. These numbers are managed
|
||||
* by Cavium.
|
||||
*/
|
||||
CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
|
||||
CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
|
||||
CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
|
||||
CVMX_BOARD_TYPE_CUST_NB5 = 10003,
|
||||
CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
|
||||
CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
|
||||
CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
|
||||
CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
|
||||
CVMX_BOARD_TYPE_CUST_GST104 = 10008,
|
||||
CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
|
||||
CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
|
||||
CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
|
||||
CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
|
||||
CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
|
||||
CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
|
||||
CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
|
||||
CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
|
||||
CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
|
||||
CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
|
||||
CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
|
||||
CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
|
||||
CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
|
||||
CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
|
||||
|
||||
/*
|
||||
* Set aside a range for customer private use. The SDK won't
|
||||
* use any numbers in this range.
|
||||
*/
|
||||
CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
|
||||
CVMX_BOARD_TYPE_UBNT_E100 = 20002,
|
||||
CVMX_BOARD_TYPE_CUST_DSR1000N = 20006,
|
||||
CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
|
||||
|
||||
/* The remaining range is reserved for future use. */
|
||||
};
|
||||
|
||||
enum cvmx_chip_types_enum {
|
||||
CVMX_CHIP_TYPE_NULL = 0,
|
||||
CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
|
||||
CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
|
||||
CVMX_CHIP_TYPE_MAX,
|
||||
};
|
||||
|
||||
/* Compatibility alias for NAC38 name change, planned to be removed
|
||||
* from SDK 1.7 */
|
||||
#define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38
|
||||
|
||||
/* Functions to return string based on type */
|
||||
#define ENUM_BRD_TYPE_CASE(x) \
|
||||
case x: return(#x + 16); /* Skip CVMX_BOARD_TYPE_ */
|
||||
static inline const char *cvmx_board_type_to_string(enum
|
||||
cvmx_board_types_enum type)
|
||||
{
|
||||
switch (type) {
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
|
||||
|
||||
/* Customer boards listed here */
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
|
||||
|
||||
/* Customer private range */
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
|
||||
}
|
||||
return "Unsupported Board";
|
||||
}
|
||||
|
||||
#define ENUM_CHIP_TYPE_CASE(x) \
|
||||
case x: return(#x + 15); /* Skip CVMX_CHIP_TYPE */
|
||||
static inline const char *cvmx_chip_type_to_string(enum
|
||||
cvmx_chip_types_enum type)
|
||||
{
|
||||
switch (type) {
|
||||
ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
|
||||
ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
|
||||
ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
|
||||
ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
|
||||
}
|
||||
return "Unsupported Chip";
|
||||
}
|
||||
|
||||
#endif /* __CVMX_BOOTINFO_H__ */
|
||||
375
arch/mips/include/asm/octeon/cvmx-bootmem.h
Normal file
375
arch/mips/include/asm/octeon/cvmx-bootmem.h
Normal file
|
|
@ -0,0 +1,375 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Simple allocate only memory allocator. Used to allocate memory at
|
||||
* application start time.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_BOOTMEM_H__
|
||||
#define __CVMX_BOOTMEM_H__
|
||||
/* Must be multiple of 8, changing breaks ABI */
|
||||
#define CVMX_BOOTMEM_NAME_LEN 128
|
||||
|
||||
/* Can change without breaking ABI */
|
||||
#define CVMX_BOOTMEM_NUM_NAMED_BLOCKS 64
|
||||
|
||||
/* minimum alignment of bootmem alloced blocks */
|
||||
#define CVMX_BOOTMEM_ALIGNMENT_SIZE (16ull)
|
||||
|
||||
/* Flags for cvmx_bootmem_phy_mem* functions */
|
||||
/* Allocate from end of block instead of beginning */
|
||||
#define CVMX_BOOTMEM_FLAG_END_ALLOC (1 << 0)
|
||||
|
||||
/* Don't do any locking. */
|
||||
#define CVMX_BOOTMEM_FLAG_NO_LOCKING (1 << 1)
|
||||
|
||||
/* First bytes of each free physical block of memory contain this structure,
|
||||
* which is used to maintain the free memory list. Since the bootloader is
|
||||
* only 32 bits, there is a union providing 64 and 32 bit versions. The
|
||||
* application init code converts addresses to 64 bit addresses before the
|
||||
* application starts.
|
||||
*/
|
||||
struct cvmx_bootmem_block_header {
|
||||
/*
|
||||
* Note: these are referenced from assembly routines in the
|
||||
* bootloader, so this structure should not be changed
|
||||
* without changing those routines as well.
|
||||
*/
|
||||
uint64_t next_block_addr;
|
||||
uint64_t size;
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure for named memory blocks. Number of descriptors available
|
||||
* can be changed without affecting compatibility, but name length
|
||||
* changes require a bump in the bootmem descriptor version Note: This
|
||||
* structure must be naturally 64 bit aligned, as a single memory
|
||||
* image will be used by both 32 and 64 bit programs.
|
||||
*/
|
||||
struct cvmx_bootmem_named_block_desc {
|
||||
/* Base address of named block */
|
||||
uint64_t base_addr;
|
||||
/*
|
||||
* Size actually allocated for named block (may differ from
|
||||
* requested).
|
||||
*/
|
||||
uint64_t size;
|
||||
/* name of named block */
|
||||
char name[CVMX_BOOTMEM_NAME_LEN];
|
||||
};
|
||||
|
||||
/* Current descriptor versions */
|
||||
/* CVMX bootmem descriptor major version */
|
||||
#define CVMX_BOOTMEM_DESC_MAJ_VER 3
|
||||
|
||||
/* CVMX bootmem descriptor minor version */
|
||||
#define CVMX_BOOTMEM_DESC_MIN_VER 0
|
||||
|
||||
/* First three members of cvmx_bootmem_desc_t are left in original
|
||||
* positions for backwards compatibility.
|
||||
*/
|
||||
struct cvmx_bootmem_desc {
|
||||
/* spinlock to control access to list */
|
||||
uint32_t lock;
|
||||
/* flags for indicating various conditions */
|
||||
uint32_t flags;
|
||||
uint64_t head_addr;
|
||||
|
||||
/* Incremented when incompatible changes made */
|
||||
uint32_t major_version;
|
||||
|
||||
/*
|
||||
* Incremented changed when compatible changes made, reset to
|
||||
* zero when major incremented.
|
||||
*/
|
||||
uint32_t minor_version;
|
||||
|
||||
uint64_t app_data_addr;
|
||||
uint64_t app_data_size;
|
||||
|
||||
/* number of elements in named blocks array */
|
||||
uint32_t named_block_num_blocks;
|
||||
|
||||
/* length of name array in bootmem blocks */
|
||||
uint32_t named_block_name_len;
|
||||
/* address of named memory block descriptors */
|
||||
uint64_t named_block_array_addr;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize the boot alloc memory structures. This is
|
||||
* normally called inside of cvmx_user_app_init()
|
||||
*
|
||||
* @mem_desc_ptr: Address of the free memory list
|
||||
*/
|
||||
extern int cvmx_bootmem_init(void *mem_desc_ptr);
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from the free list that was passed
|
||||
* to the application by the bootloader.
|
||||
* This is an allocate-only algorithm, so freeing memory is not possible.
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @alignment: Alignment required - must be power of 2
|
||||
*
|
||||
* Returns pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc(uint64_t size, uint64_t alignment);
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from the free list that was
|
||||
* passed to the application by the bootloader at a specific
|
||||
* address. This is an allocate-only algorithm, so
|
||||
* freeing memory is not possible. Allocation will fail if
|
||||
* memory cannot be allocated at the specified address.
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @address: Physical address to allocate memory at. If this memory is not
|
||||
* available, the allocation fails.
|
||||
* @alignment: Alignment required - must be power of 2
|
||||
* Returns pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc_address(uint64_t size, uint64_t address,
|
||||
uint64_t alignment);
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from the free list that was
|
||||
* passed to the application by the bootloader within a specified
|
||||
* address range. This is an allocate-only algorithm, so
|
||||
* freeing memory is not possible. Allocation will fail if
|
||||
* memory cannot be allocated in the requested range.
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @min_addr: defines the minimum address of the range
|
||||
* @max_addr: defines the maximum address of the range
|
||||
* @alignment: Alignment required - must be power of 2
|
||||
* Returns pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc_range(uint64_t size, uint64_t alignment,
|
||||
uint64_t min_addr, uint64_t max_addr);
|
||||
|
||||
/**
|
||||
* Frees a previously allocated named bootmem block.
|
||||
*
|
||||
* @name: name of block to free
|
||||
*
|
||||
* Returns 0 on failure,
|
||||
* !0 on success
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from the free list that was passed
|
||||
* to the application by the bootloader, and assign it a name in the
|
||||
* global named block table. (part of the cvmx_bootmem_descriptor_t structure)
|
||||
* Named blocks can later be freed.
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @alignment: Alignment required - must be power of 2
|
||||
* @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
|
||||
*
|
||||
* Returns a pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc_named(uint64_t size, uint64_t alignment,
|
||||
char *name);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from the free list that was passed
|
||||
* to the application by the bootloader, and assign it a name in the
|
||||
* global named block table. (part of the cvmx_bootmem_descriptor_t structure)
|
||||
* Named blocks can later be freed.
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @address: Physical address to allocate memory at. If this
|
||||
* memory is not available, the allocation fails.
|
||||
* @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN
|
||||
* bytes
|
||||
*
|
||||
* Returns a pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc_named_address(uint64_t size, uint64_t address,
|
||||
char *name);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a block of memory from a specific range of the free list
|
||||
* that was passed to the application by the bootloader, and assign it
|
||||
* a name in the global named block table. (part of the
|
||||
* cvmx_bootmem_descriptor_t structure) Named blocks can later be
|
||||
* freed. If request cannot be satisfied within the address range
|
||||
* specified, NULL is returned
|
||||
*
|
||||
* @size: Size in bytes of block to allocate
|
||||
* @min_addr: minimum address of range
|
||||
* @max_addr: maximum address of range
|
||||
* @align: Alignment of memory to be allocated. (must be a power of 2)
|
||||
* @name: name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
|
||||
*
|
||||
* Returns a pointer to block of memory, NULL on error
|
||||
*/
|
||||
extern void *cvmx_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
|
||||
uint64_t max_addr, uint64_t align,
|
||||
char *name);
|
||||
|
||||
extern int cvmx_bootmem_free_named(char *name);
|
||||
|
||||
/**
|
||||
* Finds a named bootmem block by name.
|
||||
*
|
||||
* @name: name of block to free
|
||||
*
|
||||
* Returns pointer to named block descriptor on success
|
||||
* 0 on failure
|
||||
*/
|
||||
struct cvmx_bootmem_named_block_desc *cvmx_bootmem_find_named_block(char *name);
|
||||
|
||||
/**
|
||||
* Allocates a block of physical memory from the free list, at
|
||||
* (optional) requested address and alignment.
|
||||
*
|
||||
* @req_size: size of region to allocate. All requests are rounded up
|
||||
* to be a multiple CVMX_BOOTMEM_ALIGNMENT_SIZE bytes size
|
||||
*
|
||||
* @address_min: Minimum address that block can occupy.
|
||||
*
|
||||
* @address_max: Specifies the maximum address_min (inclusive) that
|
||||
* the allocation can use.
|
||||
*
|
||||
* @alignment: Requested alignment of the block. If this alignment
|
||||
* cannot be met, the allocation fails. This must be a
|
||||
* power of 2. (Note: Alignment of
|
||||
* CVMX_BOOTMEM_ALIGNMENT_SIZE bytes is required, and
|
||||
* internally enforced. Requested alignments of less than
|
||||
* CVMX_BOOTMEM_ALIGNMENT_SIZE are set to
|
||||
* CVMX_BOOTMEM_ALIGNMENT_SIZE.)
|
||||
*
|
||||
* @flags: Flags to control options for the allocation.
|
||||
*
|
||||
* Returns physical address of block allocated, or -1 on failure
|
||||
*/
|
||||
int64_t cvmx_bootmem_phy_alloc(uint64_t req_size, uint64_t address_min,
|
||||
uint64_t address_max, uint64_t alignment,
|
||||
uint32_t flags);
|
||||
|
||||
/**
|
||||
* Allocates a named block of physical memory from the free list, at
|
||||
* (optional) requested address and alignment.
|
||||
*
|
||||
* @param size size of region to allocate. All requests are rounded
|
||||
* up to be a multiple CVMX_BOOTMEM_ALIGNMENT_SIZE
|
||||
* bytes size
|
||||
* @param min_addr Minimum address that block can occupy.
|
||||
* @param max_addr Specifies the maximum address_min (inclusive) that
|
||||
* the allocation can use.
|
||||
* @param alignment Requested alignment of the block. If this
|
||||
* alignment cannot be met, the allocation fails.
|
||||
* This must be a power of 2. (Note: Alignment of
|
||||
* CVMX_BOOTMEM_ALIGNMENT_SIZE bytes is required, and
|
||||
* internally enforced. Requested alignments of less
|
||||
* than CVMX_BOOTMEM_ALIGNMENT_SIZE are set to
|
||||
* CVMX_BOOTMEM_ALIGNMENT_SIZE.)
|
||||
* @param name name to assign to named block
|
||||
* @param flags Flags to control options for the allocation.
|
||||
*
|
||||
* @return physical address of block allocated, or -1 on failure
|
||||
*/
|
||||
int64_t cvmx_bootmem_phy_named_block_alloc(uint64_t size, uint64_t min_addr,
|
||||
uint64_t max_addr,
|
||||
uint64_t alignment,
|
||||
char *name, uint32_t flags);
|
||||
|
||||
/**
|
||||
* Finds a named memory block by name.
|
||||
* Also used for finding an unused entry in the named block table.
|
||||
*
|
||||
* @name: Name of memory block to find. If NULL pointer given, then
|
||||
* finds unused descriptor, if available.
|
||||
*
|
||||
* @flags: Flags to control options for the allocation.
|
||||
*
|
||||
* Returns Pointer to memory block descriptor, NULL if not found.
|
||||
* If NULL returned when name parameter is NULL, then no memory
|
||||
* block descriptors are available.
|
||||
*/
|
||||
struct cvmx_bootmem_named_block_desc *
|
||||
cvmx_bootmem_phy_named_block_find(char *name, uint32_t flags);
|
||||
|
||||
/**
|
||||
* Frees a named block.
|
||||
*
|
||||
* @name: name of block to free
|
||||
* @flags: flags for passing options
|
||||
*
|
||||
* Returns 0 on failure
|
||||
* 1 on success
|
||||
*/
|
||||
int cvmx_bootmem_phy_named_block_free(char *name, uint32_t flags);
|
||||
|
||||
/**
|
||||
* Frees a block to the bootmem allocator list. This must
|
||||
* be used with care, as the size provided must match the size
|
||||
* of the block that was allocated, or the list will become
|
||||
* corrupted.
|
||||
*
|
||||
* IMPORTANT: This is only intended to be used as part of named block
|
||||
* frees and initial population of the free memory list.
|
||||
* *
|
||||
*
|
||||
* @phy_addr: physical address of block
|
||||
* @size: size of block in bytes.
|
||||
* @flags: flags for passing options
|
||||
*
|
||||
* Returns 1 on success,
|
||||
* 0 on failure
|
||||
*/
|
||||
int __cvmx_bootmem_phy_free(uint64_t phy_addr, uint64_t size, uint32_t flags);
|
||||
|
||||
/**
|
||||
* Locks the bootmem allocator. This is useful in certain situations
|
||||
* where multiple allocations must be made without being interrupted.
|
||||
* This should be used with the CVMX_BOOTMEM_FLAG_NO_LOCKING flag.
|
||||
*
|
||||
*/
|
||||
void cvmx_bootmem_lock(void);
|
||||
|
||||
/**
|
||||
* Unlocks the bootmem allocator. This is useful in certain situations
|
||||
* where multiple allocations must be made without being interrupted.
|
||||
* This should be used with the CVMX_BOOTMEM_FLAG_NO_LOCKING flag.
|
||||
*
|
||||
*/
|
||||
void cvmx_bootmem_unlock(void);
|
||||
|
||||
extern struct cvmx_bootmem_desc *cvmx_bootmem_get_desc(void);
|
||||
|
||||
#endif /* __CVMX_BOOTMEM_H__ */
|
||||
10004
arch/mips/include/asm/octeon/cvmx-ciu-defs.h
Normal file
10004
arch/mips/include/asm/octeon/cvmx-ciu-defs.h
Normal file
File diff suppressed because it is too large
Load diff
7108
arch/mips/include/asm/octeon/cvmx-ciu2-defs.h
Normal file
7108
arch/mips/include/asm/octeon/cvmx-ciu2-defs.h
Normal file
File diff suppressed because it is too large
Load diff
617
arch/mips/include/asm/octeon/cvmx-cmd-queue.h
Normal file
617
arch/mips/include/asm/octeon/cvmx-cmd-queue.h
Normal file
|
|
@ -0,0 +1,617 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* Support functions for managing command queues used for
|
||||
* various hardware blocks.
|
||||
*
|
||||
* The common command queue infrastructure abstracts out the
|
||||
* software necessary for adding to Octeon's chained queue
|
||||
* structures. These structures are used for commands to the
|
||||
* PKO, ZIP, DFA, RAID, and DMA engine blocks. Although each
|
||||
* hardware unit takes commands and CSRs of different types,
|
||||
* they all use basic linked command buffers to store the
|
||||
* pending request. In general, users of the CVMX API don't
|
||||
* call cvmx-cmd-queue functions directly. Instead the hardware
|
||||
* unit specific wrapper should be used. The wrappers perform
|
||||
* unit specific validation and CSR writes to submit the
|
||||
* commands.
|
||||
*
|
||||
* Even though most software will never directly interact with
|
||||
* cvmx-cmd-queue, knowledge of its internal working can help
|
||||
* in diagnosing performance problems and help with debugging.
|
||||
*
|
||||
* Command queue pointers are stored in a global named block
|
||||
* called "cvmx_cmd_queues". Except for the PKO queues, each
|
||||
* hardware queue is stored in its own cache line to reduce SMP
|
||||
* contention on spin locks. The PKO queues are stored such that
|
||||
* every 16th queue is next to each other in memory. This scheme
|
||||
* allows for queues being in separate cache lines when there
|
||||
* are low number of queues per port. With 16 queues per port,
|
||||
* the first queue for each port is in the same cache area. The
|
||||
* second queues for each port are in another area, etc. This
|
||||
* allows software to implement very efficient lockless PKO with
|
||||
* 16 queues per port using a minimum of cache lines per core.
|
||||
* All queues for a given core will be isolated in the same
|
||||
* cache area.
|
||||
*
|
||||
* In addition to the memory pointer layout, cvmx-cmd-queue
|
||||
* provides an optimized fair ll/sc locking mechanism for the
|
||||
* queues. The lock uses a "ticket / now serving" model to
|
||||
* maintain fair order on contended locks. In addition, it uses
|
||||
* predicted locking time to limit cache contention. When a core
|
||||
* know it must wait in line for a lock, it spins on the
|
||||
* internal cycle counter to completely eliminate any causes of
|
||||
* bus traffic.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_CMD_QUEUE_H__
|
||||
#define __CVMX_CMD_QUEUE_H__
|
||||
|
||||
#include <linux/prefetch.h>
|
||||
|
||||
#include <asm/octeon/cvmx-fpa.h>
|
||||
/**
|
||||
* By default we disable the max depth support. Most programs
|
||||
* don't use it and it slows down the command queue processing
|
||||
* significantly.
|
||||
*/
|
||||
#ifndef CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH
|
||||
#define CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Enumeration representing all hardware blocks that use command
|
||||
* queues. Each hardware block has up to 65536 sub identifiers for
|
||||
* multiple command queues. Not all chips support all hardware
|
||||
* units.
|
||||
*/
|
||||
typedef enum {
|
||||
CVMX_CMD_QUEUE_PKO_BASE = 0x00000,
|
||||
|
||||
#define CVMX_CMD_QUEUE_PKO(queue) \
|
||||
((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_PKO_BASE + (0xffff&(queue))))
|
||||
|
||||
CVMX_CMD_QUEUE_ZIP = 0x10000,
|
||||
CVMX_CMD_QUEUE_DFA = 0x20000,
|
||||
CVMX_CMD_QUEUE_RAID = 0x30000,
|
||||
CVMX_CMD_QUEUE_DMA_BASE = 0x40000,
|
||||
|
||||
#define CVMX_CMD_QUEUE_DMA(queue) \
|
||||
((cvmx_cmd_queue_id_t)(CVMX_CMD_QUEUE_DMA_BASE + (0xffff&(queue))))
|
||||
|
||||
CVMX_CMD_QUEUE_END = 0x50000,
|
||||
} cvmx_cmd_queue_id_t;
|
||||
|
||||
/**
|
||||
* Command write operations can fail if the command queue needs
|
||||
* a new buffer and the associated FPA pool is empty. It can also
|
||||
* fail if the number of queued command words reaches the maximum
|
||||
* set at initialization.
|
||||
*/
|
||||
typedef enum {
|
||||
CVMX_CMD_QUEUE_SUCCESS = 0,
|
||||
CVMX_CMD_QUEUE_NO_MEMORY = -1,
|
||||
CVMX_CMD_QUEUE_FULL = -2,
|
||||
CVMX_CMD_QUEUE_INVALID_PARAM = -3,
|
||||
CVMX_CMD_QUEUE_ALREADY_SETUP = -4,
|
||||
} cvmx_cmd_queue_result_t;
|
||||
|
||||
typedef struct {
|
||||
/* You have lock when this is your ticket */
|
||||
uint8_t now_serving;
|
||||
uint64_t unused1:24;
|
||||
/* Maximum outstanding command words */
|
||||
uint32_t max_depth;
|
||||
/* FPA pool buffers come from */
|
||||
uint64_t fpa_pool:3;
|
||||
/* Top of command buffer pointer shifted 7 */
|
||||
uint64_t base_ptr_div128:29;
|
||||
uint64_t unused2:6;
|
||||
/* FPA buffer size in 64bit words minus 1 */
|
||||
uint64_t pool_size_m1:13;
|
||||
/* Number of commands already used in buffer */
|
||||
uint64_t index:13;
|
||||
} __cvmx_cmd_queue_state_t;
|
||||
|
||||
/**
|
||||
* This structure contains the global state of all command queues.
|
||||
* It is stored in a bootmem named block and shared by all
|
||||
* applications running on Octeon. Tickets are stored in a differnet
|
||||
* cahce line that queue information to reduce the contention on the
|
||||
* ll/sc used to get a ticket. If this is not the case, the update
|
||||
* of queue state causes the ll/sc to fail quite often.
|
||||
*/
|
||||
typedef struct {
|
||||
uint64_t ticket[(CVMX_CMD_QUEUE_END >> 16) * 256];
|
||||
__cvmx_cmd_queue_state_t state[(CVMX_CMD_QUEUE_END >> 16) * 256];
|
||||
} __cvmx_cmd_queue_all_state_t;
|
||||
|
||||
/**
|
||||
* Initialize a command queue for use. The initial FPA buffer is
|
||||
* allocated and the hardware unit is configured to point to the
|
||||
* new command queue.
|
||||
*
|
||||
* @queue_id: Hardware command queue to initialize.
|
||||
* @max_depth: Maximum outstanding commands that can be queued.
|
||||
* @fpa_pool: FPA pool the command queues should come from.
|
||||
* @pool_size: Size of each buffer in the FPA pool (bytes)
|
||||
*
|
||||
* Returns CVMX_CMD_QUEUE_SUCCESS or a failure code
|
||||
*/
|
||||
cvmx_cmd_queue_result_t cvmx_cmd_queue_initialize(cvmx_cmd_queue_id_t queue_id,
|
||||
int max_depth, int fpa_pool,
|
||||
int pool_size);
|
||||
|
||||
/**
|
||||
* Shutdown a queue a free it's command buffers to the FPA. The
|
||||
* hardware connected to the queue must be stopped before this
|
||||
* function is called.
|
||||
*
|
||||
* @queue_id: Queue to shutdown
|
||||
*
|
||||
* Returns CVMX_CMD_QUEUE_SUCCESS or a failure code
|
||||
*/
|
||||
cvmx_cmd_queue_result_t cvmx_cmd_queue_shutdown(cvmx_cmd_queue_id_t queue_id);
|
||||
|
||||
/**
|
||||
* Return the number of command words pending in the queue. This
|
||||
* function may be relatively slow for some hardware units.
|
||||
*
|
||||
* @queue_id: Hardware command queue to query
|
||||
*
|
||||
* Returns Number of outstanding commands
|
||||
*/
|
||||
int cvmx_cmd_queue_length(cvmx_cmd_queue_id_t queue_id);
|
||||
|
||||
/**
|
||||
* Return the command buffer to be written to. The purpose of this
|
||||
* function is to allow CVMX routine access t othe low level buffer
|
||||
* for initial hardware setup. User applications should not call this
|
||||
* function directly.
|
||||
*
|
||||
* @queue_id: Command queue to query
|
||||
*
|
||||
* Returns Command buffer or NULL on failure
|
||||
*/
|
||||
void *cvmx_cmd_queue_buffer(cvmx_cmd_queue_id_t queue_id);
|
||||
|
||||
/**
|
||||
* Get the index into the state arrays for the supplied queue id.
|
||||
*
|
||||
* @queue_id: Queue ID to get an index for
|
||||
*
|
||||
* Returns Index into the state arrays
|
||||
*/
|
||||
static inline int __cvmx_cmd_queue_get_index(cvmx_cmd_queue_id_t queue_id)
|
||||
{
|
||||
/*
|
||||
* Warning: This code currently only works with devices that
|
||||
* have 256 queues or less. Devices with more than 16 queues
|
||||
* are laid out in memory to allow cores quick access to
|
||||
* every 16th queue. This reduces cache thrashing when you are
|
||||
* running 16 queues per port to support lockless operation.
|
||||
*/
|
||||
int unit = queue_id >> 16;
|
||||
int q = (queue_id >> 4) & 0xf;
|
||||
int core = queue_id & 0xf;
|
||||
return unit * 256 + core * 16 + q;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lock the supplied queue so nobody else is updating it at the same
|
||||
* time as us.
|
||||
*
|
||||
* @queue_id: Queue ID to lock
|
||||
* @qptr: Pointer to the queue's global state
|
||||
*/
|
||||
static inline void __cvmx_cmd_queue_lock(cvmx_cmd_queue_id_t queue_id,
|
||||
__cvmx_cmd_queue_state_t *qptr)
|
||||
{
|
||||
extern __cvmx_cmd_queue_all_state_t
|
||||
*__cvmx_cmd_queue_state_ptr;
|
||||
int tmp;
|
||||
int my_ticket;
|
||||
prefetch(qptr);
|
||||
asm volatile (
|
||||
".set push\n"
|
||||
".set noreorder\n"
|
||||
"1:\n"
|
||||
/* Atomic add one to ticket_ptr */
|
||||
"ll %[my_ticket], %[ticket_ptr]\n"
|
||||
/* and store the original value */
|
||||
"li %[ticket], 1\n"
|
||||
/* in my_ticket */
|
||||
"baddu %[ticket], %[my_ticket]\n"
|
||||
"sc %[ticket], %[ticket_ptr]\n"
|
||||
"beqz %[ticket], 1b\n"
|
||||
" nop\n"
|
||||
/* Load the current now_serving ticket */
|
||||
"lbu %[ticket], %[now_serving]\n"
|
||||
"2:\n"
|
||||
/* Jump out if now_serving == my_ticket */
|
||||
"beq %[ticket], %[my_ticket], 4f\n"
|
||||
/* Find out how many tickets are in front of me */
|
||||
" subu %[ticket], %[my_ticket], %[ticket]\n"
|
||||
/* Use tickets in front of me minus one to delay */
|
||||
"subu %[ticket], 1\n"
|
||||
/* Delay will be ((tickets in front)-1)*32 loops */
|
||||
"cins %[ticket], %[ticket], 5, 7\n"
|
||||
"3:\n"
|
||||
/* Loop here until our ticket might be up */
|
||||
"bnez %[ticket], 3b\n"
|
||||
" subu %[ticket], 1\n"
|
||||
/* Jump back up to check out ticket again */
|
||||
"b 2b\n"
|
||||
/* Load the current now_serving ticket */
|
||||
" lbu %[ticket], %[now_serving]\n"
|
||||
"4:\n"
|
||||
".set pop\n" :
|
||||
[ticket_ptr] "=m"(__cvmx_cmd_queue_state_ptr->ticket[__cvmx_cmd_queue_get_index(queue_id)]),
|
||||
[now_serving] "=m"(qptr->now_serving), [ticket] "=r"(tmp),
|
||||
[my_ticket] "=r"(my_ticket)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlock the queue, flushing all writes.
|
||||
*
|
||||
* @qptr: Queue to unlock
|
||||
*/
|
||||
static inline void __cvmx_cmd_queue_unlock(__cvmx_cmd_queue_state_t *qptr)
|
||||
{
|
||||
qptr->now_serving++;
|
||||
CVMX_SYNCWS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the queue state structure for the given queue id
|
||||
*
|
||||
* @queue_id: Queue id to get
|
||||
*
|
||||
* Returns Queue structure or NULL on failure
|
||||
*/
|
||||
static inline __cvmx_cmd_queue_state_t
|
||||
*__cvmx_cmd_queue_get_state(cvmx_cmd_queue_id_t queue_id)
|
||||
{
|
||||
extern __cvmx_cmd_queue_all_state_t
|
||||
*__cvmx_cmd_queue_state_ptr;
|
||||
return &__cvmx_cmd_queue_state_ptr->
|
||||
state[__cvmx_cmd_queue_get_index(queue_id)];
|
||||
}
|
||||
|
||||
/**
|
||||
* Write an arbitrary number of command words to a command queue.
|
||||
* This is a generic function; the fixed number of command word
|
||||
* functions yield higher performance.
|
||||
*
|
||||
* @queue_id: Hardware command queue to write to
|
||||
* @use_locking:
|
||||
* Use internal locking to ensure exclusive access for queue
|
||||
* updates. If you don't use this locking you must ensure
|
||||
* exclusivity some other way. Locking is strongly recommended.
|
||||
* @cmd_count: Number of command words to write
|
||||
* @cmds: Array of commands to write
|
||||
*
|
||||
* Returns CVMX_CMD_QUEUE_SUCCESS or a failure code
|
||||
*/
|
||||
static inline cvmx_cmd_queue_result_t cvmx_cmd_queue_write(cvmx_cmd_queue_id_t
|
||||
queue_id,
|
||||
int use_locking,
|
||||
int cmd_count,
|
||||
uint64_t *cmds)
|
||||
{
|
||||
__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
|
||||
|
||||
/* Make sure nobody else is updating the same queue */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_lock(queue_id, qptr);
|
||||
|
||||
/*
|
||||
* If a max queue length was specified then make sure we don't
|
||||
* exceed it. If any part of the command would be below the
|
||||
* limit we allow it.
|
||||
*/
|
||||
if (CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH && unlikely(qptr->max_depth)) {
|
||||
if (unlikely
|
||||
(cvmx_cmd_queue_length(queue_id) > (int)qptr->max_depth)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_FULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Normally there is plenty of room in the current buffer for
|
||||
* the command.
|
||||
*/
|
||||
if (likely(qptr->index + cmd_count < qptr->pool_size_m1)) {
|
||||
uint64_t *ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
ptr += qptr->index;
|
||||
qptr->index += cmd_count;
|
||||
while (cmd_count--)
|
||||
*ptr++ = *cmds++;
|
||||
} else {
|
||||
uint64_t *ptr;
|
||||
int count;
|
||||
/*
|
||||
* We need a new command buffer. Fail if there isn't
|
||||
* one available.
|
||||
*/
|
||||
uint64_t *new_buffer =
|
||||
(uint64_t *) cvmx_fpa_alloc(qptr->fpa_pool);
|
||||
if (unlikely(new_buffer == NULL)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_NO_MEMORY;
|
||||
}
|
||||
ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
/*
|
||||
* Figure out how many command words will fit in this
|
||||
* buffer. One location will be needed for the next
|
||||
* buffer pointer.
|
||||
*/
|
||||
count = qptr->pool_size_m1 - qptr->index;
|
||||
ptr += qptr->index;
|
||||
cmd_count -= count;
|
||||
while (count--)
|
||||
*ptr++ = *cmds++;
|
||||
*ptr = cvmx_ptr_to_phys(new_buffer);
|
||||
/*
|
||||
* The current buffer is full and has a link to the
|
||||
* next buffer. Time to write the rest of the commands
|
||||
* into the new buffer.
|
||||
*/
|
||||
qptr->base_ptr_div128 = *ptr >> 7;
|
||||
qptr->index = cmd_count;
|
||||
ptr = new_buffer;
|
||||
while (cmd_count--)
|
||||
*ptr++ = *cmds++;
|
||||
}
|
||||
|
||||
/* All updates are complete. Release the lock and return */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple function to write two command words to a command
|
||||
* queue.
|
||||
*
|
||||
* @queue_id: Hardware command queue to write to
|
||||
* @use_locking:
|
||||
* Use internal locking to ensure exclusive access for queue
|
||||
* updates. If you don't use this locking you must ensure
|
||||
* exclusivity some other way. Locking is strongly recommended.
|
||||
* @cmd1: Command
|
||||
* @cmd2: Command
|
||||
*
|
||||
* Returns CVMX_CMD_QUEUE_SUCCESS or a failure code
|
||||
*/
|
||||
static inline cvmx_cmd_queue_result_t cvmx_cmd_queue_write2(cvmx_cmd_queue_id_t
|
||||
queue_id,
|
||||
int use_locking,
|
||||
uint64_t cmd1,
|
||||
uint64_t cmd2)
|
||||
{
|
||||
__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
|
||||
|
||||
/* Make sure nobody else is updating the same queue */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_lock(queue_id, qptr);
|
||||
|
||||
/*
|
||||
* If a max queue length was specified then make sure we don't
|
||||
* exceed it. If any part of the command would be below the
|
||||
* limit we allow it.
|
||||
*/
|
||||
if (CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH && unlikely(qptr->max_depth)) {
|
||||
if (unlikely
|
||||
(cvmx_cmd_queue_length(queue_id) > (int)qptr->max_depth)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_FULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Normally there is plenty of room in the current buffer for
|
||||
* the command.
|
||||
*/
|
||||
if (likely(qptr->index + 2 < qptr->pool_size_m1)) {
|
||||
uint64_t *ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
ptr += qptr->index;
|
||||
qptr->index += 2;
|
||||
ptr[0] = cmd1;
|
||||
ptr[1] = cmd2;
|
||||
} else {
|
||||
uint64_t *ptr;
|
||||
/*
|
||||
* Figure out how many command words will fit in this
|
||||
* buffer. One location will be needed for the next
|
||||
* buffer pointer.
|
||||
*/
|
||||
int count = qptr->pool_size_m1 - qptr->index;
|
||||
/*
|
||||
* We need a new command buffer. Fail if there isn't
|
||||
* one available.
|
||||
*/
|
||||
uint64_t *new_buffer =
|
||||
(uint64_t *) cvmx_fpa_alloc(qptr->fpa_pool);
|
||||
if (unlikely(new_buffer == NULL)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_NO_MEMORY;
|
||||
}
|
||||
count--;
|
||||
ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
ptr += qptr->index;
|
||||
*ptr++ = cmd1;
|
||||
if (likely(count))
|
||||
*ptr++ = cmd2;
|
||||
*ptr = cvmx_ptr_to_phys(new_buffer);
|
||||
/*
|
||||
* The current buffer is full and has a link to the
|
||||
* next buffer. Time to write the rest of the commands
|
||||
* into the new buffer.
|
||||
*/
|
||||
qptr->base_ptr_div128 = *ptr >> 7;
|
||||
qptr->index = 0;
|
||||
if (unlikely(count == 0)) {
|
||||
qptr->index = 1;
|
||||
new_buffer[0] = cmd2;
|
||||
}
|
||||
}
|
||||
|
||||
/* All updates are complete. Release the lock and return */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple function to write three command words to a command
|
||||
* queue.
|
||||
*
|
||||
* @queue_id: Hardware command queue to write to
|
||||
* @use_locking:
|
||||
* Use internal locking to ensure exclusive access for queue
|
||||
* updates. If you don't use this locking you must ensure
|
||||
* exclusivity some other way. Locking is strongly recommended.
|
||||
* @cmd1: Command
|
||||
* @cmd2: Command
|
||||
* @cmd3: Command
|
||||
*
|
||||
* Returns CVMX_CMD_QUEUE_SUCCESS or a failure code
|
||||
*/
|
||||
static inline cvmx_cmd_queue_result_t cvmx_cmd_queue_write3(cvmx_cmd_queue_id_t
|
||||
queue_id,
|
||||
int use_locking,
|
||||
uint64_t cmd1,
|
||||
uint64_t cmd2,
|
||||
uint64_t cmd3)
|
||||
{
|
||||
__cvmx_cmd_queue_state_t *qptr = __cvmx_cmd_queue_get_state(queue_id);
|
||||
|
||||
/* Make sure nobody else is updating the same queue */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_lock(queue_id, qptr);
|
||||
|
||||
/*
|
||||
* If a max queue length was specified then make sure we don't
|
||||
* exceed it. If any part of the command would be below the
|
||||
* limit we allow it.
|
||||
*/
|
||||
if (CVMX_CMD_QUEUE_ENABLE_MAX_DEPTH && unlikely(qptr->max_depth)) {
|
||||
if (unlikely
|
||||
(cvmx_cmd_queue_length(queue_id) > (int)qptr->max_depth)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_FULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Normally there is plenty of room in the current buffer for
|
||||
* the command.
|
||||
*/
|
||||
if (likely(qptr->index + 3 < qptr->pool_size_m1)) {
|
||||
uint64_t *ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
ptr += qptr->index;
|
||||
qptr->index += 3;
|
||||
ptr[0] = cmd1;
|
||||
ptr[1] = cmd2;
|
||||
ptr[2] = cmd3;
|
||||
} else {
|
||||
uint64_t *ptr;
|
||||
/*
|
||||
* Figure out how many command words will fit in this
|
||||
* buffer. One location will be needed for the next
|
||||
* buffer pointer
|
||||
*/
|
||||
int count = qptr->pool_size_m1 - qptr->index;
|
||||
/*
|
||||
* We need a new command buffer. Fail if there isn't
|
||||
* one available
|
||||
*/
|
||||
uint64_t *new_buffer =
|
||||
(uint64_t *) cvmx_fpa_alloc(qptr->fpa_pool);
|
||||
if (unlikely(new_buffer == NULL)) {
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_NO_MEMORY;
|
||||
}
|
||||
count--;
|
||||
ptr =
|
||||
(uint64_t *) cvmx_phys_to_ptr((uint64_t) qptr->
|
||||
base_ptr_div128 << 7);
|
||||
ptr += qptr->index;
|
||||
*ptr++ = cmd1;
|
||||
if (count) {
|
||||
*ptr++ = cmd2;
|
||||
if (count > 1)
|
||||
*ptr++ = cmd3;
|
||||
}
|
||||
*ptr = cvmx_ptr_to_phys(new_buffer);
|
||||
/*
|
||||
* The current buffer is full and has a link to the
|
||||
* next buffer. Time to write the rest of the commands
|
||||
* into the new buffer.
|
||||
*/
|
||||
qptr->base_ptr_div128 = *ptr >> 7;
|
||||
qptr->index = 0;
|
||||
ptr = new_buffer;
|
||||
if (count == 0) {
|
||||
*ptr++ = cmd2;
|
||||
qptr->index++;
|
||||
}
|
||||
if (count < 2) {
|
||||
*ptr++ = cmd3;
|
||||
qptr->index++;
|
||||
}
|
||||
}
|
||||
|
||||
/* All updates are complete. Release the lock and return */
|
||||
if (likely(use_locking))
|
||||
__cvmx_cmd_queue_unlock(qptr);
|
||||
return CVMX_CMD_QUEUE_SUCCESS;
|
||||
}
|
||||
|
||||
#endif /* __CVMX_CMD_QUEUE_H__ */
|
||||
168
arch/mips/include/asm/octeon/cvmx-config.h
Normal file
168
arch/mips/include/asm/octeon/cvmx-config.h
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
#ifndef __CVMX_CONFIG_H__
|
||||
#define __CVMX_CONFIG_H__
|
||||
|
||||
/************************* Config Specific Defines ************************/
|
||||
#define CVMX_LLM_NUM_PORTS 1
|
||||
#define CVMX_NULL_POINTER_PROTECT 1
|
||||
#define CVMX_ENABLE_DEBUG_PRINTS 1
|
||||
/* PKO queues per port for interface 0 (ports 0-15) */
|
||||
#define CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 1
|
||||
/* PKO queues per port for interface 1 (ports 16-31) */
|
||||
#define CVMX_PKO_QUEUES_PER_PORT_INTERFACE1 1
|
||||
/* Limit on the number of PKO ports enabled for interface 0 */
|
||||
#define CVMX_PKO_MAX_PORTS_INTERFACE0 CVMX_HELPER_PKO_MAX_PORTS_INTERFACE0
|
||||
/* Limit on the number of PKO ports enabled for interface 1 */
|
||||
#define CVMX_PKO_MAX_PORTS_INTERFACE1 CVMX_HELPER_PKO_MAX_PORTS_INTERFACE1
|
||||
/* PKO queues per port for PCI (ports 32-35) */
|
||||
#define CVMX_PKO_QUEUES_PER_PORT_PCI 1
|
||||
/* PKO queues per port for Loop devices (ports 36-39) */
|
||||
#define CVMX_PKO_QUEUES_PER_PORT_LOOP 1
|
||||
|
||||
/************************* FPA allocation *********************************/
|
||||
/* Pool sizes in bytes, must be multiple of a cache line */
|
||||
#define CVMX_FPA_POOL_0_SIZE (16 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_1_SIZE (1 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_2_SIZE (8 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_3_SIZE (0 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_4_SIZE (0 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_5_SIZE (0 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_6_SIZE (0 * CVMX_CACHE_LINE_SIZE)
|
||||
#define CVMX_FPA_POOL_7_SIZE (0 * CVMX_CACHE_LINE_SIZE)
|
||||
|
||||
/* Pools in use */
|
||||
/* Packet buffers */
|
||||
#define CVMX_FPA_PACKET_POOL (0)
|
||||
#define CVMX_FPA_PACKET_POOL_SIZE CVMX_FPA_POOL_0_SIZE
|
||||
/* Work queue entrys */
|
||||
#define CVMX_FPA_WQE_POOL (1)
|
||||
#define CVMX_FPA_WQE_POOL_SIZE CVMX_FPA_POOL_1_SIZE
|
||||
/* PKO queue command buffers */
|
||||
#define CVMX_FPA_OUTPUT_BUFFER_POOL (2)
|
||||
#define CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE CVMX_FPA_POOL_2_SIZE
|
||||
|
||||
/************************* FAU allocation ********************************/
|
||||
/* The fetch and add registers are allocated here. They are arranged
|
||||
* in order of descending size so that all alignment constraints are
|
||||
* automatically met. The enums are linked so that the following enum
|
||||
* continues allocating where the previous one left off, so the
|
||||
* numbering within each enum always starts with zero. The macros
|
||||
* take care of the address increment size, so the values entered
|
||||
* always increase by 1. FAU registers are accessed with byte
|
||||
* addresses.
|
||||
*/
|
||||
|
||||
#define CVMX_FAU_REG_64_ADDR(x) ((x << 3) + CVMX_FAU_REG_64_START)
|
||||
typedef enum {
|
||||
CVMX_FAU_REG_64_START = 0,
|
||||
CVMX_FAU_REG_64_END = CVMX_FAU_REG_64_ADDR(0),
|
||||
} cvmx_fau_reg_64_t;
|
||||
|
||||
#define CVMX_FAU_REG_32_ADDR(x) ((x << 2) + CVMX_FAU_REG_32_START)
|
||||
typedef enum {
|
||||
CVMX_FAU_REG_32_START = CVMX_FAU_REG_64_END,
|
||||
CVMX_FAU_REG_32_END = CVMX_FAU_REG_32_ADDR(0),
|
||||
} cvmx_fau_reg_32_t;
|
||||
|
||||
#define CVMX_FAU_REG_16_ADDR(x) ((x << 1) + CVMX_FAU_REG_16_START)
|
||||
typedef enum {
|
||||
CVMX_FAU_REG_16_START = CVMX_FAU_REG_32_END,
|
||||
CVMX_FAU_REG_16_END = CVMX_FAU_REG_16_ADDR(0),
|
||||
} cvmx_fau_reg_16_t;
|
||||
|
||||
#define CVMX_FAU_REG_8_ADDR(x) ((x) + CVMX_FAU_REG_8_START)
|
||||
typedef enum {
|
||||
CVMX_FAU_REG_8_START = CVMX_FAU_REG_16_END,
|
||||
CVMX_FAU_REG_8_END = CVMX_FAU_REG_8_ADDR(0),
|
||||
} cvmx_fau_reg_8_t;
|
||||
|
||||
/*
|
||||
* The name CVMX_FAU_REG_AVAIL_BASE is provided to indicate the first
|
||||
* available FAU address that is not allocated in cvmx-config.h. This
|
||||
* is 64 bit aligned.
|
||||
*/
|
||||
#define CVMX_FAU_REG_AVAIL_BASE ((CVMX_FAU_REG_8_END + 0x7) & (~0x7ULL))
|
||||
#define CVMX_FAU_REG_END (2048)
|
||||
|
||||
/********************** scratch memory allocation *************************/
|
||||
/* Scratchpad memory allocation. Note that these are byte memory
|
||||
* addresses. Some uses of scratchpad (IOBDMA for example) require
|
||||
* the use of 8-byte aligned addresses, so proper alignment needs to
|
||||
* be taken into account.
|
||||
*/
|
||||
/* Generic scratch iobdma area */
|
||||
#define CVMX_SCR_SCRATCH (0)
|
||||
/* First location available after cvmx-config.h allocated region. */
|
||||
#define CVMX_SCR_REG_AVAIL_BASE (8)
|
||||
|
||||
/*
|
||||
* CVMX_HELPER_FIRST_MBUFF_SKIP is the number of bytes to reserve
|
||||
* before the beginning of the packet. If necessary, override the
|
||||
* default here. See the IPD section of the hardware manual for MBUFF
|
||||
* SKIP details.
|
||||
*/
|
||||
#define CVMX_HELPER_FIRST_MBUFF_SKIP 184
|
||||
|
||||
/*
|
||||
* CVMX_HELPER_NOT_FIRST_MBUFF_SKIP is the number of bytes to reserve
|
||||
* in each chained packet element. If necessary, override the default
|
||||
* here.
|
||||
*/
|
||||
#define CVMX_HELPER_NOT_FIRST_MBUFF_SKIP 0
|
||||
|
||||
/*
|
||||
* CVMX_HELPER_ENABLE_BACK_PRESSURE controls whether back pressure is
|
||||
* enabled for all input ports. This controls if IPD sends
|
||||
* backpressure to all ports if Octeon's FPA pools don't have enough
|
||||
* packet or work queue entries. Even when this is off, it is still
|
||||
* possible to get backpressure from individual hardware ports. When
|
||||
* configuring backpressure, also check
|
||||
* CVMX_HELPER_DISABLE_*_BACKPRESSURE below. If necessary, override
|
||||
* the default here.
|
||||
*/
|
||||
#define CVMX_HELPER_ENABLE_BACK_PRESSURE 1
|
||||
|
||||
/*
|
||||
* CVMX_HELPER_ENABLE_IPD controls if the IPD is enabled in the helper
|
||||
* function. Once it is enabled the hardware starts accepting
|
||||
* packets. You might want to skip the IPD enable if configuration
|
||||
* changes are need from the default helper setup. If necessary,
|
||||
* override the default here.
|
||||
*/
|
||||
#define CVMX_HELPER_ENABLE_IPD 0
|
||||
|
||||
/*
|
||||
* CVMX_HELPER_INPUT_TAG_TYPE selects the type of tag that the IPD assigns
|
||||
* to incoming packets.
|
||||
*/
|
||||
#define CVMX_HELPER_INPUT_TAG_TYPE CVMX_POW_TAG_TYPE_ORDERED
|
||||
|
||||
#define CVMX_ENABLE_PARAMETER_CHECKING 0
|
||||
|
||||
/*
|
||||
* The following select which fields are used by the PIP to generate
|
||||
* the tag on INPUT
|
||||
* 0: don't include
|
||||
* 1: include
|
||||
*/
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV6_SRC_IP 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV6_DST_IP 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV6_SRC_PORT 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV6_DST_PORT 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV6_NEXT_HEADER 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV4_SRC_IP 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV4_DST_IP 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV4_SRC_PORT 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV4_DST_PORT 0
|
||||
#define CVMX_HELPER_INPUT_TAG_IPV4_PROTOCOL 0
|
||||
#define CVMX_HELPER_INPUT_TAG_INPUT_PORT 1
|
||||
|
||||
/* Select skip mode for input ports */
|
||||
#define CVMX_HELPER_INPUT_PORT_SKIP_MODE CVMX_PIP_PORT_CFG_MODE_SKIPL2
|
||||
|
||||
/*
|
||||
* Force backpressure to be disabled. This overrides all other
|
||||
* backpressure configuration.
|
||||
*/
|
||||
#define CVMX_HELPER_DISABLE_RGMII_BACKPRESSURE 0
|
||||
|
||||
#endif /* __CVMX_CONFIG_H__ */
|
||||
105
arch/mips/include/asm/octeon/cvmx-dbg-defs.h
Normal file
105
arch/mips/include/asm/octeon/cvmx-dbg-defs.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_DBG_DEFS_H__
|
||||
#define __CVMX_DBG_DEFS_H__
|
||||
|
||||
#define CVMX_DBG_DATA (CVMX_ADD_IO_SEG(0x00011F00000001E8ull))
|
||||
|
||||
union cvmx_dbg_data {
|
||||
uint64_t u64;
|
||||
struct cvmx_dbg_data_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_23_63:41;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t data:17;
|
||||
#else
|
||||
uint64_t data:17;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t reserved_23_63:41;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_dbg_data_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_31_63:33;
|
||||
uint64_t pll_mul:3;
|
||||
uint64_t reserved_23_27:5;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t data:17;
|
||||
#else
|
||||
uint64_t data:17;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t reserved_23_27:5;
|
||||
uint64_t pll_mul:3;
|
||||
uint64_t reserved_31_63:33;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_dbg_data_cn30xx cn31xx;
|
||||
struct cvmx_dbg_data_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t d_mul:4;
|
||||
uint64_t dclk_mul2:1;
|
||||
uint64_t cclk_div2:1;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t data:17;
|
||||
#else
|
||||
uint64_t data:17;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t cclk_div2:1;
|
||||
uint64_t dclk_mul2:1;
|
||||
uint64_t d_mul:4;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_dbg_data_cn38xx cn38xxp2;
|
||||
struct cvmx_dbg_data_cn30xx cn50xx;
|
||||
struct cvmx_dbg_data_cn58xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t rem:6;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t data:17;
|
||||
#else
|
||||
uint64_t data:17;
|
||||
uint64_t dsel_ext:1;
|
||||
uint64_t c_mul:5;
|
||||
uint64_t rem:6;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn58xx;
|
||||
struct cvmx_dbg_data_cn58xx cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
1052
arch/mips/include/asm/octeon/cvmx-dpi-defs.h
Normal file
1052
arch/mips/include/asm/octeon/cvmx-dpi-defs.h
Normal file
File diff suppressed because it is too large
Load diff
597
arch/mips/include/asm/octeon/cvmx-fau.h
Normal file
597
arch/mips/include/asm/octeon/cvmx-fau.h
Normal file
|
|
@ -0,0 +1,597 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Interface to the hardware Fetch and Add Unit.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_FAU_H__
|
||||
#define __CVMX_FAU_H__
|
||||
|
||||
/*
|
||||
* Octeon Fetch and Add Unit (FAU)
|
||||
*/
|
||||
|
||||
#define CVMX_FAU_LOAD_IO_ADDRESS cvmx_build_io_address(0x1e, 0)
|
||||
#define CVMX_FAU_BITS_SCRADDR 63, 56
|
||||
#define CVMX_FAU_BITS_LEN 55, 48
|
||||
#define CVMX_FAU_BITS_INEVAL 35, 14
|
||||
#define CVMX_FAU_BITS_TAGWAIT 13, 13
|
||||
#define CVMX_FAU_BITS_NOADD 13, 13
|
||||
#define CVMX_FAU_BITS_SIZE 12, 11
|
||||
#define CVMX_FAU_BITS_REGISTER 10, 0
|
||||
|
||||
typedef enum {
|
||||
CVMX_FAU_OP_SIZE_8 = 0,
|
||||
CVMX_FAU_OP_SIZE_16 = 1,
|
||||
CVMX_FAU_OP_SIZE_32 = 2,
|
||||
CVMX_FAU_OP_SIZE_64 = 3
|
||||
} cvmx_fau_op_size_t;
|
||||
|
||||
/**
|
||||
* Tagwait return definition. If a timeout occurs, the error
|
||||
* bit will be set. Otherwise the value of the register before
|
||||
* the update will be returned.
|
||||
*/
|
||||
typedef struct {
|
||||
uint64_t error:1;
|
||||
int64_t value:63;
|
||||
} cvmx_fau_tagwait64_t;
|
||||
|
||||
/**
|
||||
* Tagwait return definition. If a timeout occurs, the error
|
||||
* bit will be set. Otherwise the value of the register before
|
||||
* the update will be returned.
|
||||
*/
|
||||
typedef struct {
|
||||
uint64_t error:1;
|
||||
int32_t value:31;
|
||||
} cvmx_fau_tagwait32_t;
|
||||
|
||||
/**
|
||||
* Tagwait return definition. If a timeout occurs, the error
|
||||
* bit will be set. Otherwise the value of the register before
|
||||
* the update will be returned.
|
||||
*/
|
||||
typedef struct {
|
||||
uint64_t error:1;
|
||||
int16_t value:15;
|
||||
} cvmx_fau_tagwait16_t;
|
||||
|
||||
/**
|
||||
* Tagwait return definition. If a timeout occurs, the error
|
||||
* bit will be set. Otherwise the value of the register before
|
||||
* the update will be returned.
|
||||
*/
|
||||
typedef struct {
|
||||
uint64_t error:1;
|
||||
int8_t value:7;
|
||||
} cvmx_fau_tagwait8_t;
|
||||
|
||||
/**
|
||||
* Asynchronous tagwait return definition. If a timeout occurs,
|
||||
* the error bit will be set. Otherwise the value of the
|
||||
* register before the update will be returned.
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
uint64_t invalid:1;
|
||||
uint64_t data:63; /* unpredictable if invalid is set */
|
||||
} s;
|
||||
} cvmx_fau_async_tagwait_result_t;
|
||||
|
||||
/**
|
||||
* Builds a store I/O address for writing to the FAU
|
||||
*
|
||||
* @noadd: 0 = Store value is atomically added to the current value
|
||||
* 1 = Store value is atomically written over the current value
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* Returns Address to store for atomic update
|
||||
*/
|
||||
static inline uint64_t __cvmx_fau_store_address(uint64_t noadd, uint64_t reg)
|
||||
{
|
||||
return CVMX_ADD_IO_SEG(CVMX_FAU_LOAD_IO_ADDRESS) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_NOADD, noadd) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a I/O address for accessing the FAU
|
||||
*
|
||||
* @tagwait: Should the atomic add wait for the current tag switch
|
||||
* operation to complete.
|
||||
* - 0 = Don't wait
|
||||
* - 1 = Wait for tag switch to complete
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: When performing 32 and 64 bit access, only the low
|
||||
* 22 bits are available.
|
||||
* Returns Address to read from for atomic update
|
||||
*/
|
||||
static inline uint64_t __cvmx_fau_atomic_address(uint64_t tagwait, uint64_t reg,
|
||||
int64_t value)
|
||||
{
|
||||
return CVMX_ADD_IO_SEG(CVMX_FAU_LOAD_IO_ADDRESS) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_INEVAL, value) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_TAGWAIT, tagwait) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 64 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Value of the register before the update
|
||||
*/
|
||||
static inline int64_t cvmx_fau_fetch_and_add64(cvmx_fau_reg_64_t reg,
|
||||
int64_t value)
|
||||
{
|
||||
return cvmx_read64_int64(__cvmx_fau_atomic_address(0, reg, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 32 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Value of the register before the update
|
||||
*/
|
||||
static inline int32_t cvmx_fau_fetch_and_add32(cvmx_fau_reg_32_t reg,
|
||||
int32_t value)
|
||||
{
|
||||
return cvmx_read64_int32(__cvmx_fau_atomic_address(0, reg, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 16 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Returns Value of the register before the update
|
||||
*/
|
||||
static inline int16_t cvmx_fau_fetch_and_add16(cvmx_fau_reg_16_t reg,
|
||||
int16_t value)
|
||||
{
|
||||
return cvmx_read64_int16(__cvmx_fau_atomic_address(0, reg, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 8 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to add.
|
||||
* Returns Value of the register before the update
|
||||
*/
|
||||
static inline int8_t cvmx_fau_fetch_and_add8(cvmx_fau_reg_8_t reg, int8_t value)
|
||||
{
|
||||
return cvmx_read64_int8(__cvmx_fau_atomic_address(0, reg, value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 64 bit add after the current tag switch
|
||||
* completes
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns If a timeout occurs, the error bit will be set. Otherwise
|
||||
* the value of the register before the update will be
|
||||
* returned
|
||||
*/
|
||||
static inline cvmx_fau_tagwait64_t
|
||||
cvmx_fau_tagwait_fetch_and_add64(cvmx_fau_reg_64_t reg, int64_t value)
|
||||
{
|
||||
union {
|
||||
uint64_t i64;
|
||||
cvmx_fau_tagwait64_t t;
|
||||
} result;
|
||||
result.i64 =
|
||||
cvmx_read64_int64(__cvmx_fau_atomic_address(1, reg, value));
|
||||
return result.t;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 32 bit add after the current tag switch
|
||||
* completes
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns If a timeout occurs, the error bit will be set. Otherwise
|
||||
* the value of the register before the update will be
|
||||
* returned
|
||||
*/
|
||||
static inline cvmx_fau_tagwait32_t
|
||||
cvmx_fau_tagwait_fetch_and_add32(cvmx_fau_reg_32_t reg, int32_t value)
|
||||
{
|
||||
union {
|
||||
uint64_t i32;
|
||||
cvmx_fau_tagwait32_t t;
|
||||
} result;
|
||||
result.i32 =
|
||||
cvmx_read64_int32(__cvmx_fau_atomic_address(1, reg, value));
|
||||
return result.t;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 16 bit add after the current tag switch
|
||||
* completes
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Returns If a timeout occurs, the error bit will be set. Otherwise
|
||||
* the value of the register before the update will be
|
||||
* returned
|
||||
*/
|
||||
static inline cvmx_fau_tagwait16_t
|
||||
cvmx_fau_tagwait_fetch_and_add16(cvmx_fau_reg_16_t reg, int16_t value)
|
||||
{
|
||||
union {
|
||||
uint64_t i16;
|
||||
cvmx_fau_tagwait16_t t;
|
||||
} result;
|
||||
result.i16 =
|
||||
cvmx_read64_int16(__cvmx_fau_atomic_address(1, reg, value));
|
||||
return result.t;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 8 bit add after the current tag switch
|
||||
* completes
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to add.
|
||||
* Returns If a timeout occurs, the error bit will be set. Otherwise
|
||||
* the value of the register before the update will be
|
||||
* returned
|
||||
*/
|
||||
static inline cvmx_fau_tagwait8_t
|
||||
cvmx_fau_tagwait_fetch_and_add8(cvmx_fau_reg_8_t reg, int8_t value)
|
||||
{
|
||||
union {
|
||||
uint64_t i8;
|
||||
cvmx_fau_tagwait8_t t;
|
||||
} result;
|
||||
result.i8 = cvmx_read64_int8(__cvmx_fau_atomic_address(1, reg, value));
|
||||
return result.t;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds I/O data for async operations
|
||||
*
|
||||
* @scraddr: Scratch pad byte address to write to. Must be 8 byte aligned
|
||||
* @value: Signed value to add.
|
||||
* Note: When performing 32 and 64 bit access, only the low
|
||||
* 22 bits are available.
|
||||
* @tagwait: Should the atomic add wait for the current tag switch
|
||||
* operation to complete.
|
||||
* - 0 = Don't wait
|
||||
* - 1 = Wait for tag switch to complete
|
||||
* @size: The size of the operation:
|
||||
* - CVMX_FAU_OP_SIZE_8 (0) = 8 bits
|
||||
* - CVMX_FAU_OP_SIZE_16 (1) = 16 bits
|
||||
* - CVMX_FAU_OP_SIZE_32 (2) = 32 bits
|
||||
* - CVMX_FAU_OP_SIZE_64 (3) = 64 bits
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* Returns Data to write using cvmx_send_single
|
||||
*/
|
||||
static inline uint64_t __cvmx_fau_iobdma_data(uint64_t scraddr, int64_t value,
|
||||
uint64_t tagwait,
|
||||
cvmx_fau_op_size_t size,
|
||||
uint64_t reg)
|
||||
{
|
||||
return CVMX_FAU_LOAD_IO_ADDRESS |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_SCRADDR, scraddr >> 3) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_LEN, 1) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_INEVAL, value) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_TAGWAIT, tagwait) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_SIZE, size) |
|
||||
cvmx_build_bits(CVMX_FAU_BITS_REGISTER, reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 64 bit add. The old value is
|
||||
* placed in the scratch memory at byte address scraddr.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in.
|
||||
* Must be 8 byte aligned.
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_fetch_and_add64(uint64_t scraddr,
|
||||
cvmx_fau_reg_64_t reg,
|
||||
int64_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 0, CVMX_FAU_OP_SIZE_64, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 32 bit add. The old value is
|
||||
* placed in the scratch memory at byte address scraddr.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in.
|
||||
* Must be 8 byte aligned.
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_fetch_and_add32(uint64_t scraddr,
|
||||
cvmx_fau_reg_32_t reg,
|
||||
int32_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 0, CVMX_FAU_OP_SIZE_32, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 16 bit add. The old value is
|
||||
* placed in the scratch memory at byte address scraddr.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in.
|
||||
* Must be 8 byte aligned.
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_fetch_and_add16(uint64_t scraddr,
|
||||
cvmx_fau_reg_16_t reg,
|
||||
int16_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 0, CVMX_FAU_OP_SIZE_16, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 8 bit add. The old value is
|
||||
* placed in the scratch memory at byte address scraddr.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in.
|
||||
* Must be 8 byte aligned.
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to add.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_fetch_and_add8(uint64_t scraddr,
|
||||
cvmx_fau_reg_8_t reg,
|
||||
int8_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 0, CVMX_FAU_OP_SIZE_8, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 64 bit add after the current tag
|
||||
* switch completes.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in. Must be
|
||||
* 8 byte aligned. If a timeout occurs, the error bit (63)
|
||||
* will be set. Otherwise the value of the register before
|
||||
* the update will be returned
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_tagwait_fetch_and_add64(uint64_t scraddr,
|
||||
cvmx_fau_reg_64_t reg,
|
||||
int64_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 1, CVMX_FAU_OP_SIZE_64, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 32 bit add after the current tag
|
||||
* switch completes.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in. Must be
|
||||
* 8 byte aligned. If a timeout occurs, the error bit (63)
|
||||
* will be set. Otherwise the value of the register before
|
||||
* the update will be returned
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to add.
|
||||
* Note: Only the low 22 bits are available.
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_tagwait_fetch_and_add32(uint64_t scraddr,
|
||||
cvmx_fau_reg_32_t reg,
|
||||
int32_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 1, CVMX_FAU_OP_SIZE_32, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 16 bit add after the current tag
|
||||
* switch completes.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in. Must be
|
||||
* 8 byte aligned. If a timeout occurs, the error bit (63)
|
||||
* will be set. Otherwise the value of the register before
|
||||
* the update will be returned
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to add.
|
||||
*
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_tagwait_fetch_and_add16(uint64_t scraddr,
|
||||
cvmx_fau_reg_16_t reg,
|
||||
int16_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 1, CVMX_FAU_OP_SIZE_16, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an async atomic 8 bit add after the current tag
|
||||
* switch completes.
|
||||
*
|
||||
* @scraddr: Scratch memory byte address to put response in. Must be
|
||||
* 8 byte aligned. If a timeout occurs, the error bit (63)
|
||||
* will be set. Otherwise the value of the register before
|
||||
* the update will be returned
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to add.
|
||||
*
|
||||
* Returns Placed in the scratch pad register
|
||||
*/
|
||||
static inline void cvmx_fau_async_tagwait_fetch_and_add8(uint64_t scraddr,
|
||||
cvmx_fau_reg_8_t reg,
|
||||
int8_t value)
|
||||
{
|
||||
cvmx_send_single(__cvmx_fau_iobdma_data
|
||||
(scraddr, value, 1, CVMX_FAU_OP_SIZE_8, reg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 64 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to add.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_add64(cvmx_fau_reg_64_t reg, int64_t value)
|
||||
{
|
||||
cvmx_write64_int64(__cvmx_fau_store_address(0, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 32 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to add.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_add32(cvmx_fau_reg_32_t reg, int32_t value)
|
||||
{
|
||||
cvmx_write64_int32(__cvmx_fau_store_address(0, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 16 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to add.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_add16(cvmx_fau_reg_16_t reg, int16_t value)
|
||||
{
|
||||
cvmx_write64_int16(__cvmx_fau_store_address(0, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 8 bit add
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to add.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_add8(cvmx_fau_reg_8_t reg, int8_t value)
|
||||
{
|
||||
cvmx_write64_int8(__cvmx_fau_store_address(0, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 64 bit write
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 8 for 64 bit access.
|
||||
* @value: Signed value to write.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_write64(cvmx_fau_reg_64_t reg, int64_t value)
|
||||
{
|
||||
cvmx_write64_int64(__cvmx_fau_store_address(1, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 32 bit write
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 4 for 32 bit access.
|
||||
* @value: Signed value to write.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_write32(cvmx_fau_reg_32_t reg, int32_t value)
|
||||
{
|
||||
cvmx_write64_int32(__cvmx_fau_store_address(1, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 16 bit write
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* - Step by 2 for 16 bit access.
|
||||
* @value: Signed value to write.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_write16(cvmx_fau_reg_16_t reg, int16_t value)
|
||||
{
|
||||
cvmx_write64_int16(__cvmx_fau_store_address(1, reg), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an atomic 8 bit write
|
||||
*
|
||||
* @reg: FAU atomic register to access. 0 <= reg < 2048.
|
||||
* @value: Signed value to write.
|
||||
*/
|
||||
static inline void cvmx_fau_atomic_write8(cvmx_fau_reg_8_t reg, int8_t value)
|
||||
{
|
||||
cvmx_write64_int8(__cvmx_fau_store_address(1, reg), value);
|
||||
}
|
||||
|
||||
#endif /* __CVMX_FAU_H__ */
|
||||
1498
arch/mips/include/asm/octeon/cvmx-fpa-defs.h
Normal file
1498
arch/mips/include/asm/octeon/cvmx-fpa-defs.h
Normal file
File diff suppressed because it is too large
Load diff
299
arch/mips/include/asm/octeon/cvmx-fpa.h
Normal file
299
arch/mips/include/asm/octeon/cvmx-fpa.h
Normal file
|
|
@ -0,0 +1,299 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Interface to the hardware Free Pool Allocator.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_FPA_H__
|
||||
#define __CVMX_FPA_H__
|
||||
|
||||
#include <asm/octeon/cvmx-address.h>
|
||||
#include <asm/octeon/cvmx-fpa-defs.h>
|
||||
|
||||
#define CVMX_FPA_NUM_POOLS 8
|
||||
#define CVMX_FPA_MIN_BLOCK_SIZE 128
|
||||
#define CVMX_FPA_ALIGNMENT 128
|
||||
|
||||
/**
|
||||
* Structure describing the data format used for stores to the FPA.
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/*
|
||||
* the (64-bit word) location in scratchpad to write
|
||||
* to (if len != 0)
|
||||
*/
|
||||
uint64_t scraddr:8;
|
||||
/* the number of words in the response (0 => no response) */
|
||||
uint64_t len:8;
|
||||
/* the ID of the device on the non-coherent bus */
|
||||
uint64_t did:8;
|
||||
/*
|
||||
* the address that will appear in the first tick on
|
||||
* the NCB bus.
|
||||
*/
|
||||
uint64_t addr:40;
|
||||
} s;
|
||||
} cvmx_fpa_iobdma_data_t;
|
||||
|
||||
/**
|
||||
* Structure describing the current state of a FPA pool.
|
||||
*/
|
||||
typedef struct {
|
||||
/* Name it was created under */
|
||||
const char *name;
|
||||
/* Size of each block */
|
||||
uint64_t size;
|
||||
/* The base memory address of whole block */
|
||||
void *base;
|
||||
/* The number of elements in the pool at creation */
|
||||
uint64_t starting_element_count;
|
||||
} cvmx_fpa_pool_info_t;
|
||||
|
||||
/**
|
||||
* Current state of all the pools. Use access functions
|
||||
* instead of using it directly.
|
||||
*/
|
||||
extern cvmx_fpa_pool_info_t cvmx_fpa_pool_info[CVMX_FPA_NUM_POOLS];
|
||||
|
||||
/* CSR typedefs have been moved to cvmx-csr-*.h */
|
||||
|
||||
/**
|
||||
* Return the name of the pool
|
||||
*
|
||||
* @pool: Pool to get the name of
|
||||
* Returns The name
|
||||
*/
|
||||
static inline const char *cvmx_fpa_get_name(uint64_t pool)
|
||||
{
|
||||
return cvmx_fpa_pool_info[pool].name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the base of the pool
|
||||
*
|
||||
* @pool: Pool to get the base of
|
||||
* Returns The base
|
||||
*/
|
||||
static inline void *cvmx_fpa_get_base(uint64_t pool)
|
||||
{
|
||||
return cvmx_fpa_pool_info[pool].base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a pointer belongs to an FPA pool. Return non-zero
|
||||
* if the supplied pointer is inside the memory controlled by
|
||||
* an FPA pool.
|
||||
*
|
||||
* @pool: Pool to check
|
||||
* @ptr: Pointer to check
|
||||
* Returns Non-zero if pointer is in the pool. Zero if not
|
||||
*/
|
||||
static inline int cvmx_fpa_is_member(uint64_t pool, void *ptr)
|
||||
{
|
||||
return ((ptr >= cvmx_fpa_pool_info[pool].base) &&
|
||||
((char *)ptr <
|
||||
((char *)(cvmx_fpa_pool_info[pool].base)) +
|
||||
cvmx_fpa_pool_info[pool].size *
|
||||
cvmx_fpa_pool_info[pool].starting_element_count));
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the FPA for use. Must be performed after any CSR
|
||||
* configuration but before any other FPA functions.
|
||||
*/
|
||||
static inline void cvmx_fpa_enable(void)
|
||||
{
|
||||
union cvmx_fpa_ctl_status status;
|
||||
|
||||
status.u64 = cvmx_read_csr(CVMX_FPA_CTL_STATUS);
|
||||
if (status.s.enb) {
|
||||
cvmx_dprintf
|
||||
("Warning: Enabling FPA when FPA already enabled.\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* Do runtime check as we allow pass1 compiled code to run on
|
||||
* pass2 chips.
|
||||
*/
|
||||
if (cvmx_octeon_is_pass1()) {
|
||||
union cvmx_fpa_fpfx_marks marks;
|
||||
int i;
|
||||
for (i = 1; i < 8; i++) {
|
||||
marks.u64 =
|
||||
cvmx_read_csr(CVMX_FPA_FPF1_MARKS + (i - 1) * 8ull);
|
||||
marks.s.fpf_wr = 0xe0;
|
||||
cvmx_write_csr(CVMX_FPA_FPF1_MARKS + (i - 1) * 8ull,
|
||||
marks.u64);
|
||||
}
|
||||
|
||||
/* Enforce a 10 cycle delay between config and enable */
|
||||
cvmx_wait(10);
|
||||
}
|
||||
|
||||
/* FIXME: CVMX_FPA_CTL_STATUS read is unmodelled */
|
||||
status.u64 = 0;
|
||||
status.s.enb = 1;
|
||||
cvmx_write_csr(CVMX_FPA_CTL_STATUS, status.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new block from the FPA
|
||||
*
|
||||
* @pool: Pool to get the block from
|
||||
* Returns Pointer to the block or NULL on failure
|
||||
*/
|
||||
static inline void *cvmx_fpa_alloc(uint64_t pool)
|
||||
{
|
||||
uint64_t address =
|
||||
cvmx_read_csr(CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool)));
|
||||
if (address)
|
||||
return cvmx_phys_to_ptr(address);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Asynchronously get a new block from the FPA
|
||||
*
|
||||
* @scr_addr: Local scratch address to put response in. This is a byte address,
|
||||
* but must be 8 byte aligned.
|
||||
* @pool: Pool to get the block from
|
||||
*/
|
||||
static inline void cvmx_fpa_async_alloc(uint64_t scr_addr, uint64_t pool)
|
||||
{
|
||||
cvmx_fpa_iobdma_data_t data;
|
||||
|
||||
/*
|
||||
* Hardware only uses 64 bit aligned locations, so convert
|
||||
* from byte address to 64-bit index
|
||||
*/
|
||||
data.s.scraddr = scr_addr >> 3;
|
||||
data.s.len = 1;
|
||||
data.s.did = CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool);
|
||||
data.s.addr = 0;
|
||||
cvmx_send_single(data.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free a block allocated with a FPA pool. Does NOT provide memory
|
||||
* ordering in cases where the memory block was modified by the core.
|
||||
*
|
||||
* @ptr: Block to free
|
||||
* @pool: Pool to put it in
|
||||
* @num_cache_lines:
|
||||
* Cache lines to invalidate
|
||||
*/
|
||||
static inline void cvmx_fpa_free_nosync(void *ptr, uint64_t pool,
|
||||
uint64_t num_cache_lines)
|
||||
{
|
||||
cvmx_addr_t newptr;
|
||||
newptr.u64 = cvmx_ptr_to_phys(ptr);
|
||||
newptr.sfilldidspace.didspace =
|
||||
CVMX_ADDR_DIDSPACE(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool));
|
||||
/* Prevent GCC from reordering around free */
|
||||
barrier();
|
||||
/* value written is number of cache lines not written back */
|
||||
cvmx_write_io(newptr.u64, num_cache_lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free a block allocated with a FPA pool. Provides required memory
|
||||
* ordering in cases where memory block was modified by core.
|
||||
*
|
||||
* @ptr: Block to free
|
||||
* @pool: Pool to put it in
|
||||
* @num_cache_lines:
|
||||
* Cache lines to invalidate
|
||||
*/
|
||||
static inline void cvmx_fpa_free(void *ptr, uint64_t pool,
|
||||
uint64_t num_cache_lines)
|
||||
{
|
||||
cvmx_addr_t newptr;
|
||||
newptr.u64 = cvmx_ptr_to_phys(ptr);
|
||||
newptr.sfilldidspace.didspace =
|
||||
CVMX_ADDR_DIDSPACE(CVMX_FULL_DID(CVMX_OCT_DID_FPA, pool));
|
||||
/*
|
||||
* Make sure that any previous writes to memory go out before
|
||||
* we free this buffer. This also serves as a barrier to
|
||||
* prevent GCC from reordering operations to after the
|
||||
* free.
|
||||
*/
|
||||
CVMX_SYNCWS;
|
||||
/* value written is number of cache lines not written back */
|
||||
cvmx_write_io(newptr.u64, num_cache_lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup a FPA pool to control a new block of memory.
|
||||
* This can only be called once per pool. Make sure proper
|
||||
* locking enforces this.
|
||||
*
|
||||
* @pool: Pool to initialize
|
||||
* 0 <= pool < 8
|
||||
* @name: Constant character string to name this pool.
|
||||
* String is not copied.
|
||||
* @buffer: Pointer to the block of memory to use. This must be
|
||||
* accessible by all processors and external hardware.
|
||||
* @block_size: Size for each block controlled by the FPA
|
||||
* @num_blocks: Number of blocks
|
||||
*
|
||||
* Returns 0 on Success,
|
||||
* -1 on failure
|
||||
*/
|
||||
extern int cvmx_fpa_setup_pool(uint64_t pool, const char *name, void *buffer,
|
||||
uint64_t block_size, uint64_t num_blocks);
|
||||
|
||||
/**
|
||||
* Shutdown a Memory pool and validate that it had all of
|
||||
* the buffers originally placed in it. This should only be
|
||||
* called by one processor after all hardware has finished
|
||||
* using the pool.
|
||||
*
|
||||
* @pool: Pool to shutdown
|
||||
* Returns Zero on success
|
||||
* - Positive is count of missing buffers
|
||||
* - Negative is too many buffers or corrupted pointers
|
||||
*/
|
||||
extern uint64_t cvmx_fpa_shutdown_pool(uint64_t pool);
|
||||
|
||||
/**
|
||||
* Get the size of blocks controlled by the pool
|
||||
* This is resolved to a constant at compile time.
|
||||
*
|
||||
* @pool: Pool to access
|
||||
* Returns Size of the block in bytes
|
||||
*/
|
||||
uint64_t cvmx_fpa_get_block_size(uint64_t pool);
|
||||
|
||||
#endif /* __CVM_FPA_H__ */
|
||||
6929
arch/mips/include/asm/octeon/cvmx-gmxx-defs.h
Normal file
6929
arch/mips/include/asm/octeon/cvmx-gmxx-defs.h
Normal file
File diff suppressed because it is too large
Load diff
511
arch/mips/include/asm/octeon/cvmx-gpio-defs.h
Normal file
511
arch/mips/include/asm/octeon/cvmx-gpio-defs.h
Normal file
|
|
@ -0,0 +1,511 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_GPIO_DEFS_H__
|
||||
#define __CVMX_GPIO_DEFS_H__
|
||||
|
||||
#define CVMX_GPIO_BIT_CFGX(offset) (CVMX_ADD_IO_SEG(0x0001070000000800ull) + ((offset) & 15) * 8)
|
||||
#define CVMX_GPIO_BOOT_ENA (CVMX_ADD_IO_SEG(0x00010700000008A8ull))
|
||||
#define CVMX_GPIO_CLK_GENX(offset) (CVMX_ADD_IO_SEG(0x00010700000008C0ull) + ((offset) & 3) * 8)
|
||||
#define CVMX_GPIO_CLK_QLMX(offset) (CVMX_ADD_IO_SEG(0x00010700000008E0ull) + ((offset) & 1) * 8)
|
||||
#define CVMX_GPIO_DBG_ENA (CVMX_ADD_IO_SEG(0x00010700000008A0ull))
|
||||
#define CVMX_GPIO_INT_CLR (CVMX_ADD_IO_SEG(0x0001070000000898ull))
|
||||
#define CVMX_GPIO_MULTI_CAST (CVMX_ADD_IO_SEG(0x00010700000008B0ull))
|
||||
#define CVMX_GPIO_PIN_ENA (CVMX_ADD_IO_SEG(0x00010700000008B8ull))
|
||||
#define CVMX_GPIO_RX_DAT (CVMX_ADD_IO_SEG(0x0001070000000880ull))
|
||||
#define CVMX_GPIO_TIM_CTL (CVMX_ADD_IO_SEG(0x00010700000008A0ull))
|
||||
#define CVMX_GPIO_TX_CLR (CVMX_ADD_IO_SEG(0x0001070000000890ull))
|
||||
#define CVMX_GPIO_TX_SET (CVMX_ADD_IO_SEG(0x0001070000000888ull))
|
||||
#define CVMX_GPIO_XBIT_CFGX(offset) (CVMX_ADD_IO_SEG(0x0001070000000900ull) + ((offset) & 31) * 8 - 8*16)
|
||||
|
||||
union cvmx_gpio_bit_cfgx {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_bit_cfgx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t synce_sel:2;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t int_type:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t tx_oe:1;
|
||||
#else
|
||||
uint64_t tx_oe:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t int_type:1;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t synce_sel:2;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t int_type:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t tx_oe:1;
|
||||
#else
|
||||
uint64_t tx_oe:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t int_type:1;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn31xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn38xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn38xxp2;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn50xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_15_63:49;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t int_type:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t tx_oe:1;
|
||||
#else
|
||||
uint64_t tx_oe:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t int_type:1;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t reserved_15_63:49;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn52xx cn52xxp1;
|
||||
struct cvmx_gpio_bit_cfgx_cn52xx cn56xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn52xx cn56xxp1;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn58xx;
|
||||
struct cvmx_gpio_bit_cfgx_cn30xx cn58xxp1;
|
||||
struct cvmx_gpio_bit_cfgx_s cn61xx;
|
||||
struct cvmx_gpio_bit_cfgx_s cn63xx;
|
||||
struct cvmx_gpio_bit_cfgx_s cn63xxp1;
|
||||
struct cvmx_gpio_bit_cfgx_s cn66xx;
|
||||
struct cvmx_gpio_bit_cfgx_s cn68xx;
|
||||
struct cvmx_gpio_bit_cfgx_s cn68xxp1;
|
||||
struct cvmx_gpio_bit_cfgx_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_boot_ena {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_boot_ena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t boot_ena:4;
|
||||
uint64_t reserved_0_7:8;
|
||||
#else
|
||||
uint64_t reserved_0_7:8;
|
||||
uint64_t boot_ena:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_boot_ena_s cn30xx;
|
||||
struct cvmx_gpio_boot_ena_s cn31xx;
|
||||
struct cvmx_gpio_boot_ena_s cn50xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_clk_genx {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_clk_genx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t n:32;
|
||||
#else
|
||||
uint64_t n:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_clk_genx_s cn52xx;
|
||||
struct cvmx_gpio_clk_genx_s cn52xxp1;
|
||||
struct cvmx_gpio_clk_genx_s cn56xx;
|
||||
struct cvmx_gpio_clk_genx_s cn56xxp1;
|
||||
struct cvmx_gpio_clk_genx_s cn61xx;
|
||||
struct cvmx_gpio_clk_genx_s cn63xx;
|
||||
struct cvmx_gpio_clk_genx_s cn63xxp1;
|
||||
struct cvmx_gpio_clk_genx_s cn66xx;
|
||||
struct cvmx_gpio_clk_genx_s cn68xx;
|
||||
struct cvmx_gpio_clk_genx_s cn68xxp1;
|
||||
struct cvmx_gpio_clk_genx_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_clk_qlmx {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_clk_qlmx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_11_63:53;
|
||||
uint64_t qlm_sel:3;
|
||||
uint64_t reserved_3_7:5;
|
||||
uint64_t div:1;
|
||||
uint64_t lane_sel:2;
|
||||
#else
|
||||
uint64_t lane_sel:2;
|
||||
uint64_t div:1;
|
||||
uint64_t reserved_3_7:5;
|
||||
uint64_t qlm_sel:3;
|
||||
uint64_t reserved_11_63:53;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_clk_qlmx_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_10_63:54;
|
||||
uint64_t qlm_sel:2;
|
||||
uint64_t reserved_3_7:5;
|
||||
uint64_t div:1;
|
||||
uint64_t lane_sel:2;
|
||||
#else
|
||||
uint64_t lane_sel:2;
|
||||
uint64_t div:1;
|
||||
uint64_t reserved_3_7:5;
|
||||
uint64_t qlm_sel:2;
|
||||
uint64_t reserved_10_63:54;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_gpio_clk_qlmx_cn63xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_3_63:61;
|
||||
uint64_t div:1;
|
||||
uint64_t lane_sel:2;
|
||||
#else
|
||||
uint64_t lane_sel:2;
|
||||
uint64_t div:1;
|
||||
uint64_t reserved_3_63:61;
|
||||
#endif
|
||||
} cn63xx;
|
||||
struct cvmx_gpio_clk_qlmx_cn63xx cn63xxp1;
|
||||
struct cvmx_gpio_clk_qlmx_cn61xx cn66xx;
|
||||
struct cvmx_gpio_clk_qlmx_s cn68xx;
|
||||
struct cvmx_gpio_clk_qlmx_s cn68xxp1;
|
||||
struct cvmx_gpio_clk_qlmx_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_dbg_ena {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_dbg_ena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_21_63:43;
|
||||
uint64_t dbg_ena:21;
|
||||
#else
|
||||
uint64_t dbg_ena:21;
|
||||
uint64_t reserved_21_63:43;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_dbg_ena_s cn30xx;
|
||||
struct cvmx_gpio_dbg_ena_s cn31xx;
|
||||
struct cvmx_gpio_dbg_ena_s cn50xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_int_clr {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_int_clr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t type:16;
|
||||
#else
|
||||
uint64_t type:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_int_clr_s cn30xx;
|
||||
struct cvmx_gpio_int_clr_s cn31xx;
|
||||
struct cvmx_gpio_int_clr_s cn38xx;
|
||||
struct cvmx_gpio_int_clr_s cn38xxp2;
|
||||
struct cvmx_gpio_int_clr_s cn50xx;
|
||||
struct cvmx_gpio_int_clr_s cn52xx;
|
||||
struct cvmx_gpio_int_clr_s cn52xxp1;
|
||||
struct cvmx_gpio_int_clr_s cn56xx;
|
||||
struct cvmx_gpio_int_clr_s cn56xxp1;
|
||||
struct cvmx_gpio_int_clr_s cn58xx;
|
||||
struct cvmx_gpio_int_clr_s cn58xxp1;
|
||||
struct cvmx_gpio_int_clr_s cn61xx;
|
||||
struct cvmx_gpio_int_clr_s cn63xx;
|
||||
struct cvmx_gpio_int_clr_s cn63xxp1;
|
||||
struct cvmx_gpio_int_clr_s cn66xx;
|
||||
struct cvmx_gpio_int_clr_s cn68xx;
|
||||
struct cvmx_gpio_int_clr_s cn68xxp1;
|
||||
struct cvmx_gpio_int_clr_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_multi_cast {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_multi_cast_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t en:1;
|
||||
#else
|
||||
uint64_t en:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_multi_cast_s cn61xx;
|
||||
struct cvmx_gpio_multi_cast_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_pin_ena {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_pin_ena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t ena19:1;
|
||||
uint64_t ena18:1;
|
||||
uint64_t reserved_0_17:18;
|
||||
#else
|
||||
uint64_t reserved_0_17:18;
|
||||
uint64_t ena18:1;
|
||||
uint64_t ena19:1;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_pin_ena_s cn66xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_rx_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_rx_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_24_63:40;
|
||||
uint64_t dat:24;
|
||||
#else
|
||||
uint64_t dat:24;
|
||||
uint64_t reserved_24_63:40;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_rx_dat_s cn30xx;
|
||||
struct cvmx_gpio_rx_dat_s cn31xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t dat:16;
|
||||
#else
|
||||
uint64_t dat:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn38xxp2;
|
||||
struct cvmx_gpio_rx_dat_s cn50xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn52xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn52xxp1;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn56xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn56xxp1;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn58xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn58xxp1;
|
||||
struct cvmx_gpio_rx_dat_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t dat:20;
|
||||
#else
|
||||
uint64_t dat:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn63xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn63xxp1;
|
||||
struct cvmx_gpio_rx_dat_cn61xx cn66xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn68xx;
|
||||
struct cvmx_gpio_rx_dat_cn38xx cn68xxp1;
|
||||
struct cvmx_gpio_rx_dat_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_tim_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_tim_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t sel:4;
|
||||
#else
|
||||
uint64_t sel:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_tim_ctl_s cn68xx;
|
||||
struct cvmx_gpio_tim_ctl_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_gpio_tx_clr {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_tx_clr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_24_63:40;
|
||||
uint64_t clr:24;
|
||||
#else
|
||||
uint64_t clr:24;
|
||||
uint64_t reserved_24_63:40;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_tx_clr_s cn30xx;
|
||||
struct cvmx_gpio_tx_clr_s cn31xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t clr:16;
|
||||
#else
|
||||
uint64_t clr:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn38xxp2;
|
||||
struct cvmx_gpio_tx_clr_s cn50xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn52xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn52xxp1;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn56xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn56xxp1;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn58xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn58xxp1;
|
||||
struct cvmx_gpio_tx_clr_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t clr:20;
|
||||
#else
|
||||
uint64_t clr:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn63xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn63xxp1;
|
||||
struct cvmx_gpio_tx_clr_cn61xx cn66xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn68xx;
|
||||
struct cvmx_gpio_tx_clr_cn38xx cn68xxp1;
|
||||
struct cvmx_gpio_tx_clr_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_tx_set {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_tx_set_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_24_63:40;
|
||||
uint64_t set:24;
|
||||
#else
|
||||
uint64_t set:24;
|
||||
uint64_t reserved_24_63:40;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_tx_set_s cn30xx;
|
||||
struct cvmx_gpio_tx_set_s cn31xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t set:16;
|
||||
#else
|
||||
uint64_t set:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn38xxp2;
|
||||
struct cvmx_gpio_tx_set_s cn50xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn52xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn52xxp1;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn56xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn56xxp1;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn58xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn58xxp1;
|
||||
struct cvmx_gpio_tx_set_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t set:20;
|
||||
#else
|
||||
uint64_t set:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn63xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn63xxp1;
|
||||
struct cvmx_gpio_tx_set_cn61xx cn66xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn68xx;
|
||||
struct cvmx_gpio_tx_set_cn38xx cn68xxp1;
|
||||
struct cvmx_gpio_tx_set_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_gpio_xbit_cfgx {
|
||||
uint64_t u64;
|
||||
struct cvmx_gpio_xbit_cfgx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t synce_sel:2;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t int_type:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t tx_oe:1;
|
||||
#else
|
||||
uint64_t tx_oe:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t int_en:1;
|
||||
uint64_t int_type:1;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t clk_sel:2;
|
||||
uint64_t clk_gen:1;
|
||||
uint64_t synce_sel:2;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_gpio_xbit_cfgx_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t tx_oe:1;
|
||||
#else
|
||||
uint64_t tx_oe:1;
|
||||
uint64_t rx_xor:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t fil_cnt:4;
|
||||
uint64_t fil_sel:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_gpio_xbit_cfgx_cn30xx cn31xx;
|
||||
struct cvmx_gpio_xbit_cfgx_cn30xx cn50xx;
|
||||
struct cvmx_gpio_xbit_cfgx_s cn61xx;
|
||||
struct cvmx_gpio_xbit_cfgx_s cn66xx;
|
||||
struct cvmx_gpio_xbit_cfgx_s cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
166
arch/mips/include/asm/octeon/cvmx-helper-board.h
Normal file
166
arch/mips/include/asm/octeon/cvmx-helper-board.h
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
*
|
||||
* Helper functions to abstract board specific data about
|
||||
* network ports from the rest of the cvmx-helper files.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_BOARD_H__
|
||||
#define __CVMX_HELPER_BOARD_H__
|
||||
|
||||
#include <asm/octeon/cvmx-helper.h>
|
||||
|
||||
enum cvmx_helper_board_usb_clock_types {
|
||||
USB_CLOCK_TYPE_REF_12,
|
||||
USB_CLOCK_TYPE_REF_24,
|
||||
USB_CLOCK_TYPE_REF_48,
|
||||
USB_CLOCK_TYPE_CRYSTAL_12,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
set_phy_link_flags_autoneg = 0x1,
|
||||
set_phy_link_flags_flow_control_dont_touch = 0x0 << 1,
|
||||
set_phy_link_flags_flow_control_enable = 0x1 << 1,
|
||||
set_phy_link_flags_flow_control_disable = 0x2 << 1,
|
||||
set_phy_link_flags_flow_control_mask = 0x3 << 1, /* Mask for 2 bit wide flow control field */
|
||||
} cvmx_helper_board_set_phy_link_flags_types_t;
|
||||
|
||||
/*
|
||||
* Fake IPD port, the RGMII/MII interface may use different PHY, use
|
||||
* this macro to return appropriate MIX address to read the PHY.
|
||||
*/
|
||||
#define CVMX_HELPER_BOARD_MGMT_IPD_PORT -10
|
||||
|
||||
/**
|
||||
* cvmx_override_board_link_get(int ipd_port) is a function
|
||||
* pointer. It is meant to allow customization of the process of
|
||||
* talking to a PHY to determine link speed. It is called every
|
||||
* time a PHY must be polled for link status. Users should set
|
||||
* this pointer to a function before calling any cvmx-helper
|
||||
* operations.
|
||||
*/
|
||||
extern cvmx_helper_link_info_t(*cvmx_override_board_link_get) (int ipd_port);
|
||||
|
||||
/**
|
||||
* Return the MII PHY address associated with the given IPD
|
||||
* port. A result of -1 means there isn't a MII capable PHY
|
||||
* connected to this port. On chips supporting multiple MII
|
||||
* busses the bus number is encoded in bits <15:8>.
|
||||
*
|
||||
* This function must be modifed for every new Octeon board.
|
||||
* Internally it uses switch statements based on the cvmx_sysinfo
|
||||
* data to determine board types and revisions. It relys on the
|
||||
* fact that every Octeon board receives a unique board type
|
||||
* enumeration from the bootloader.
|
||||
*
|
||||
* @ipd_port: Octeon IPD port to get the MII address for.
|
||||
*
|
||||
* Returns MII PHY address and bus number or -1.
|
||||
*/
|
||||
extern int cvmx_helper_board_get_mii_address(int ipd_port);
|
||||
|
||||
/**
|
||||
* This function as a board specific method of changing the PHY
|
||||
* speed, duplex, and autonegotiation. This programs the PHY and
|
||||
* not Octeon. This can be used to force Octeon's links to
|
||||
* specific settings.
|
||||
*
|
||||
* @phy_addr: The address of the PHY to program
|
||||
* @link_flags:
|
||||
* Flags to control autonegotiation. Bit 0 is autonegotiation
|
||||
* enable/disable to maintain backware compatibility.
|
||||
* @link_info: Link speed to program. If the speed is zero and autonegotiation
|
||||
* is enabled, all possible negotiation speeds are advertised.
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
int cvmx_helper_board_link_set_phy(int phy_addr,
|
||||
cvmx_helper_board_set_phy_link_flags_types_t
|
||||
link_flags,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
/**
|
||||
* This function is the board specific method of determining an
|
||||
* ethernet ports link speed. Most Octeon boards have Marvell PHYs
|
||||
* and are handled by the fall through case. This function must be
|
||||
* updated for boards that don't have the normal Marvell PHYs.
|
||||
*
|
||||
* This function must be modifed for every new Octeon board.
|
||||
* Internally it uses switch statements based on the cvmx_sysinfo
|
||||
* data to determine board types and revisions. It relys on the
|
||||
* fact that every Octeon board receives a unique board type
|
||||
* enumeration from the bootloader.
|
||||
*
|
||||
* @ipd_port: IPD input port associated with the port we want to get link
|
||||
* status for.
|
||||
*
|
||||
* Returns The ports link status. If the link isn't fully resolved, this must
|
||||
* return zero.
|
||||
*/
|
||||
extern cvmx_helper_link_info_t __cvmx_helper_board_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* This function is called by cvmx_helper_interface_probe() after it
|
||||
* determines the number of ports Octeon can support on a specific
|
||||
* interface. This function is the per board location to override
|
||||
* this value. It is called with the number of ports Octeon might
|
||||
* support and should return the number of actual ports on the
|
||||
* board.
|
||||
*
|
||||
* This function must be modifed for every new Octeon board.
|
||||
* Internally it uses switch statements based on the cvmx_sysinfo
|
||||
* data to determine board types and revisions. It relys on the
|
||||
* fact that every Octeon board receives a unique board type
|
||||
* enumeration from the bootloader.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
* @supported_ports:
|
||||
* Number of ports Octeon supports.
|
||||
*
|
||||
* Returns Number of ports the actual board supports. Many times this will
|
||||
* simple be "support_ports".
|
||||
*/
|
||||
extern int __cvmx_helper_board_interface_probe(int interface,
|
||||
int supported_ports);
|
||||
|
||||
/**
|
||||
* Enable packet input/output from the hardware. This function is
|
||||
* called after by cvmx_helper_packet_hardware_enable() to
|
||||
* perform board specific initialization. For most boards
|
||||
* nothing is needed.
|
||||
*
|
||||
* @interface: Interface to enable
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_board_hardware_enable(int interface);
|
||||
|
||||
enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(void);
|
||||
|
||||
#endif /* __CVMX_HELPER_BOARD_H__ */
|
||||
33
arch/mips/include/asm/octeon/cvmx-helper-errata.h
Normal file
33
arch/mips/include/asm/octeon/cvmx-helper-errata.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_HELPER_ERRATA_H__
|
||||
#define __CVMX_HELPER_ERRATA_H__
|
||||
|
||||
extern void __cvmx_helper_errata_qlm_disable_2nd_order_cdr(int qlm);
|
||||
|
||||
#endif
|
||||
43
arch/mips/include/asm/octeon/cvmx-helper-jtag.h
Normal file
43
arch/mips/include/asm/octeon/cvmx-helper-jtag.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Helper utilities for qlm_jtag.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_HELPER_JTAG_H__
|
||||
#define __CVMX_HELPER_JTAG_H__
|
||||
|
||||
extern void cvmx_helper_qlm_jtag_init(void);
|
||||
extern uint32_t cvmx_helper_qlm_jtag_shift(int qlm, int bits, uint32_t data);
|
||||
extern void cvmx_helper_qlm_jtag_shift_zeros(int qlm, int bits);
|
||||
extern void cvmx_helper_qlm_jtag_update(int qlm);
|
||||
|
||||
#endif /* __CVMX_HELPER_JTAG_H__ */
|
||||
60
arch/mips/include/asm/octeon/cvmx-helper-loop.h
Normal file
60
arch/mips/include/asm/octeon/cvmx-helper-loop.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as published by
|
||||
* the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Functions for LOOP initialization, configuration,
|
||||
* and monitoring.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_LOOP_H__
|
||||
#define __CVMX_HELPER_LOOP_H__
|
||||
|
||||
/**
|
||||
* Probe a LOOP interface and determine the number of ports
|
||||
* connected to it. The LOOP interface should still be down after
|
||||
* this call.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_loop_probe(int interface);
|
||||
static inline int __cvmx_helper_loop_enumerate(int interface) {return 4; }
|
||||
|
||||
/**
|
||||
* Bringup and enable a LOOP interface. After this call packet
|
||||
* I/O should be fully functional. This is called with IPD
|
||||
* enabled but PKO disabled.
|
||||
*
|
||||
* @interface: Interface to bring up
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_loop_enable(int interface);
|
||||
|
||||
#endif
|
||||
61
arch/mips/include/asm/octeon/cvmx-helper-npi.h
Normal file
61
arch/mips/include/asm/octeon/cvmx-helper-npi.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Functions for NPI initialization, configuration,
|
||||
* and monitoring.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_NPI_H__
|
||||
#define __CVMX_HELPER_NPI_H__
|
||||
|
||||
/**
|
||||
* Probe a NPI interface and determine the number of ports
|
||||
* connected to it. The NPI interface should still be down after
|
||||
* this call.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_npi_probe(int interface);
|
||||
#define __cvmx_helper_npi_enumerate __cvmx_helper_npi_probe
|
||||
|
||||
/**
|
||||
* Bringup and enable a NPI interface. After this call packet
|
||||
* I/O should be fully functional. This is called with IPD
|
||||
* enabled but PKO disabled.
|
||||
*
|
||||
* @interface: Interface to bring up
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_npi_enable(int interface);
|
||||
|
||||
#endif
|
||||
111
arch/mips/include/asm/octeon/cvmx-helper-rgmii.h
Normal file
111
arch/mips/include/asm/octeon/cvmx-helper-rgmii.h
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Functions for RGMII/GMII/MII initialization, configuration,
|
||||
* and monitoring.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_RGMII_H__
|
||||
#define __CVMX_HELPER_RGMII_H__
|
||||
|
||||
/**
|
||||
* Probe RGMII ports and determine the number present
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of RGMII/GMII/MII ports (0-4).
|
||||
*/
|
||||
extern int __cvmx_helper_rgmii_probe(int interface);
|
||||
#define __cvmx_helper_rgmii_enumerate __cvmx_helper_rgmii_probe
|
||||
|
||||
/**
|
||||
* Put an RGMII interface in loopback mode. Internal packets sent
|
||||
* out will be received back again on the same port. Externally
|
||||
* received packets will echo back out.
|
||||
*
|
||||
* @port: IPD port number to loop.
|
||||
*/
|
||||
extern void cvmx_helper_rgmii_internal_loopback(int port);
|
||||
|
||||
/**
|
||||
* Configure all of the ASX, GMX, and PKO regsiters required
|
||||
* to get RGMII to function on the supplied interface.
|
||||
*
|
||||
* @interface: PKO Interface to configure (0 or 1)
|
||||
*
|
||||
* Returns Zero on success
|
||||
*/
|
||||
extern int __cvmx_helper_rgmii_enable(int interface);
|
||||
|
||||
/**
|
||||
* Return the link state of an IPD/PKO port as returned by
|
||||
* auto negotiation. The result of this function may not match
|
||||
* Octeon's link config if auto negotiation has changed since
|
||||
* the last call to cvmx_helper_link_set().
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to query
|
||||
*
|
||||
* Returns Link state
|
||||
*/
|
||||
extern cvmx_helper_link_info_t __cvmx_helper_rgmii_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* Configure an IPD/PKO port for the specified link state. This
|
||||
* function does not influence auto negotiation at the PHY level.
|
||||
* The passed link state must always match the link state returned
|
||||
* by cvmx_helper_link_get(). It is normally best to use
|
||||
* cvmx_helper_link_autoconf() instead.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to configure
|
||||
* @link_info: The new link state
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_rgmii_link_set(int ipd_port,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
/**
|
||||
* Configure a port for internal and/or external loopback. Internal loopback
|
||||
* causes packets sent by the port to be received by Octeon. External loopback
|
||||
* causes packets received from the wire to sent out again.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to loopback.
|
||||
* @enable_internal:
|
||||
* Non zero if you want internal loopback
|
||||
* @enable_external:
|
||||
* Non zero if you want external loopback
|
||||
*
|
||||
* Returns Zero on success, negative on failure.
|
||||
*/
|
||||
extern int __cvmx_helper_rgmii_configure_loopback(int ipd_port,
|
||||
int enable_internal,
|
||||
int enable_external);
|
||||
|
||||
#endif
|
||||
105
arch/mips/include/asm/octeon/cvmx-helper-sgmii.h
Normal file
105
arch/mips/include/asm/octeon/cvmx-helper-sgmii.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Functions for SGMII initialization, configuration,
|
||||
* and monitoring.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_SGMII_H__
|
||||
#define __CVMX_HELPER_SGMII_H__
|
||||
|
||||
/**
|
||||
* Probe a SGMII interface and determine the number of ports
|
||||
* connected to it. The SGMII interface should still be down after
|
||||
* this call.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_sgmii_probe(int interface);
|
||||
extern int __cvmx_helper_sgmii_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a SGMII interface. After this call packet
|
||||
* I/O should be fully functional. This is called with IPD
|
||||
* enabled but PKO disabled.
|
||||
*
|
||||
* @interface: Interface to bring up
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_sgmii_enable(int interface);
|
||||
|
||||
/**
|
||||
* Return the link state of an IPD/PKO port as returned by
|
||||
* auto negotiation. The result of this function may not match
|
||||
* Octeon's link config if auto negotiation has changed since
|
||||
* the last call to cvmx_helper_link_set().
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to query
|
||||
*
|
||||
* Returns Link state
|
||||
*/
|
||||
extern cvmx_helper_link_info_t __cvmx_helper_sgmii_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* Configure an IPD/PKO port for the specified link state. This
|
||||
* function does not influence auto negotiation at the PHY level.
|
||||
* The passed link state must always match the link state returned
|
||||
* by cvmx_helper_link_get(). It is normally best to use
|
||||
* cvmx_helper_link_autoconf() instead.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to configure
|
||||
* @link_info: The new link state
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_sgmii_link_set(int ipd_port,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
/**
|
||||
* Configure a port for internal and/or external loopback. Internal loopback
|
||||
* causes packets sent by the port to be received by Octeon. External loopback
|
||||
* causes packets received from the wire to sent out again.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to loopback.
|
||||
* @enable_internal:
|
||||
* Non zero if you want internal loopback
|
||||
* @enable_external:
|
||||
* Non zero if you want external loopback
|
||||
*
|
||||
* Returns Zero on success, negative on failure.
|
||||
*/
|
||||
extern int __cvmx_helper_sgmii_configure_loopback(int ipd_port,
|
||||
int enable_internal,
|
||||
int enable_external);
|
||||
|
||||
#endif
|
||||
85
arch/mips/include/asm/octeon/cvmx-helper-spi.h
Normal file
85
arch/mips/include/asm/octeon/cvmx-helper-spi.h
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Functions for SPI initialization, configuration,
|
||||
* and monitoring.
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_SPI_H__
|
||||
#define __CVMX_HELPER_SPI_H__
|
||||
|
||||
/**
|
||||
* Probe a SPI interface and determine the number of ports
|
||||
* connected to it. The SPI interface should still be down after
|
||||
* this call.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_spi_probe(int interface);
|
||||
extern int __cvmx_helper_spi_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a SPI interface. After this call packet I/O
|
||||
* should be fully functional. This is called with IPD enabled but
|
||||
* PKO disabled.
|
||||
*
|
||||
* @interface: Interface to bring up
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_spi_enable(int interface);
|
||||
|
||||
/**
|
||||
* Return the link state of an IPD/PKO port as returned by
|
||||
* auto negotiation. The result of this function may not match
|
||||
* Octeon's link config if auto negotiation has changed since
|
||||
* the last call to cvmx_helper_link_set().
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to query
|
||||
*
|
||||
* Returns Link state
|
||||
*/
|
||||
extern cvmx_helper_link_info_t __cvmx_helper_spi_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* Configure an IPD/PKO port for the specified link state. This
|
||||
* function does not influence auto negotiation at the PHY level.
|
||||
* The passed link state must always match the link state returned
|
||||
* by cvmx_helper_link_get(). It is normally best to use
|
||||
* cvmx_helper_link_autoconf() instead.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to configure
|
||||
* @link_info: The new link state
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_spi_link_set(int ipd_port,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
#endif
|
||||
215
arch/mips/include/asm/octeon/cvmx-helper-util.h
Normal file
215
arch/mips/include/asm/octeon/cvmx-helper-util.h
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* Small helper utilities.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_HELPER_UTIL_H__
|
||||
#define __CVMX_HELPER_UTIL_H__
|
||||
|
||||
/**
|
||||
* Convert a interface mode into a human readable string
|
||||
*
|
||||
* @mode: Mode to convert
|
||||
*
|
||||
* Returns String
|
||||
*/
|
||||
extern const char
|
||||
*cvmx_helper_interface_mode_to_string(cvmx_helper_interface_mode_t mode);
|
||||
|
||||
/**
|
||||
* Debug routine to dump the packet structure to the console
|
||||
*
|
||||
* @work: Work queue entry containing the packet to dump
|
||||
* Returns
|
||||
*/
|
||||
extern int cvmx_helper_dump_packet(cvmx_wqe_t *work);
|
||||
|
||||
/**
|
||||
* Setup Random Early Drop on a specific input queue
|
||||
*
|
||||
* @queue: Input queue to setup RED on (0-7)
|
||||
* @pass_thresh:
|
||||
* Packets will begin slowly dropping when there are less than
|
||||
* this many packet buffers free in FPA 0.
|
||||
* @drop_thresh:
|
||||
* All incoming packets will be dropped when there are less
|
||||
* than this many free packet buffers in FPA 0.
|
||||
* Returns Zero on success. Negative on failure
|
||||
*/
|
||||
extern int cvmx_helper_setup_red_queue(int queue, int pass_thresh,
|
||||
int drop_thresh);
|
||||
|
||||
/**
|
||||
* Setup Random Early Drop to automatically begin dropping packets.
|
||||
*
|
||||
* @pass_thresh:
|
||||
* Packets will begin slowly dropping when there are less than
|
||||
* this many packet buffers free in FPA 0.
|
||||
* @drop_thresh:
|
||||
* All incoming packets will be dropped when there are less
|
||||
* than this many free packet buffers in FPA 0.
|
||||
* Returns Zero on success. Negative on failure
|
||||
*/
|
||||
extern int cvmx_helper_setup_red(int pass_thresh, int drop_thresh);
|
||||
|
||||
/**
|
||||
* Get the version of the CVMX libraries.
|
||||
*
|
||||
* Returns Version string. Note this buffer is allocated statically
|
||||
* and will be shared by all callers.
|
||||
*/
|
||||
extern const char *cvmx_helper_get_version(void);
|
||||
|
||||
/**
|
||||
* Setup the common GMX settings that determine the number of
|
||||
* ports. These setting apply to almost all configurations of all
|
||||
* chips.
|
||||
*
|
||||
* @interface: Interface to configure
|
||||
* @num_ports: Number of ports on the interface
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_setup_gmx(int interface, int num_ports);
|
||||
|
||||
/**
|
||||
* Returns the IPD/PKO port number for a port on the given
|
||||
* interface.
|
||||
*
|
||||
* @interface: Interface to use
|
||||
* @port: Port on the interface
|
||||
*
|
||||
* Returns IPD/PKO port number
|
||||
*/
|
||||
extern int cvmx_helper_get_ipd_port(int interface, int port);
|
||||
|
||||
/**
|
||||
* Returns the IPD/PKO port number for the first port on the given
|
||||
* interface.
|
||||
*
|
||||
* @interface: Interface to use
|
||||
*
|
||||
* Returns IPD/PKO port number
|
||||
*/
|
||||
static inline int cvmx_helper_get_first_ipd_port(int interface)
|
||||
{
|
||||
return cvmx_helper_get_ipd_port(interface, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the IPD/PKO port number for the last port on the given
|
||||
* interface.
|
||||
*
|
||||
* @interface: Interface to use
|
||||
*
|
||||
* Returns IPD/PKO port number
|
||||
*/
|
||||
static inline int cvmx_helper_get_last_ipd_port(int interface)
|
||||
{
|
||||
extern int cvmx_helper_ports_on_interface(int interface);
|
||||
|
||||
return cvmx_helper_get_first_ipd_port(interface) +
|
||||
cvmx_helper_ports_on_interface(interface) - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Free the packet buffers contained in a work queue entry.
|
||||
* The work queue entry is not freed.
|
||||
*
|
||||
* @work: Work queue entry with packet to free
|
||||
*/
|
||||
static inline void cvmx_helper_free_packet_data(cvmx_wqe_t *work)
|
||||
{
|
||||
uint64_t number_buffers;
|
||||
union cvmx_buf_ptr buffer_ptr;
|
||||
union cvmx_buf_ptr next_buffer_ptr;
|
||||
uint64_t start_of_buffer;
|
||||
|
||||
number_buffers = work->word2.s.bufs;
|
||||
if (number_buffers == 0)
|
||||
return;
|
||||
buffer_ptr = work->packet_ptr;
|
||||
|
||||
/*
|
||||
* Since the number of buffers is not zero, we know this is
|
||||
* not a dynamic short packet. We need to check if it is a
|
||||
* packet received with IPD_CTL_STATUS[NO_WPTR]. If this is
|
||||
* true, we need to free all buffers except for the first
|
||||
* one. The caller doesn't expect their WQE pointer to be
|
||||
* freed
|
||||
*/
|
||||
start_of_buffer = ((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7;
|
||||
if (cvmx_ptr_to_phys(work) == start_of_buffer) {
|
||||
next_buffer_ptr =
|
||||
*(union cvmx_buf_ptr *) cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
|
||||
buffer_ptr = next_buffer_ptr;
|
||||
number_buffers--;
|
||||
}
|
||||
|
||||
while (number_buffers--) {
|
||||
/*
|
||||
* Remember the back pointer is in cache lines, not
|
||||
* 64bit words
|
||||
*/
|
||||
start_of_buffer =
|
||||
((buffer_ptr.s.addr >> 7) - buffer_ptr.s.back) << 7;
|
||||
/*
|
||||
* Read pointer to next buffer before we free the
|
||||
* current buffer.
|
||||
*/
|
||||
next_buffer_ptr =
|
||||
*(union cvmx_buf_ptr *) cvmx_phys_to_ptr(buffer_ptr.s.addr - 8);
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr(start_of_buffer),
|
||||
buffer_ptr.s.pool, 0);
|
||||
buffer_ptr = next_buffer_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the interface number for an IPD/PKO port number.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port number
|
||||
*
|
||||
* Returns Interface number
|
||||
*/
|
||||
extern int cvmx_helper_get_interface_num(int ipd_port);
|
||||
|
||||
/**
|
||||
* Returns the interface index number for an IPD/PKO port
|
||||
* number.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port number
|
||||
*
|
||||
* Returns Interface index number
|
||||
*/
|
||||
extern int cvmx_helper_get_interface_index_num(int ipd_port);
|
||||
|
||||
#endif /* __CVMX_HELPER_H__ */
|
||||
104
arch/mips/include/asm/octeon/cvmx-helper-xaui.h
Normal file
104
arch/mips/include/asm/octeon/cvmx-helper-xaui.h
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Functions for XAUI initialization, configuration,
|
||||
* and monitoring.
|
||||
*
|
||||
*/
|
||||
#ifndef __CVMX_HELPER_XAUI_H__
|
||||
#define __CVMX_HELPER_XAUI_H__
|
||||
|
||||
/**
|
||||
* Probe a XAUI interface and determine the number of ports
|
||||
* connected to it. The XAUI interface should still be down
|
||||
* after this call.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Number of ports on the interface. Zero to disable.
|
||||
*/
|
||||
extern int __cvmx_helper_xaui_probe(int interface);
|
||||
extern int __cvmx_helper_xaui_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Bringup and enable a XAUI interface. After this call packet
|
||||
* I/O should be fully functional. This is called with IPD
|
||||
* enabled but PKO disabled.
|
||||
*
|
||||
* @interface: Interface to bring up
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_xaui_enable(int interface);
|
||||
|
||||
/**
|
||||
* Return the link state of an IPD/PKO port as returned by
|
||||
* auto negotiation. The result of this function may not match
|
||||
* Octeon's link config if auto negotiation has changed since
|
||||
* the last call to cvmx_helper_link_set().
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to query
|
||||
*
|
||||
* Returns Link state
|
||||
*/
|
||||
extern cvmx_helper_link_info_t __cvmx_helper_xaui_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* Configure an IPD/PKO port for the specified link state. This
|
||||
* function does not influence auto negotiation at the PHY level.
|
||||
* The passed link state must always match the link state returned
|
||||
* by cvmx_helper_link_get(). It is normally best to use
|
||||
* cvmx_helper_link_autoconf() instead.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to configure
|
||||
* @link_info: The new link state
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int __cvmx_helper_xaui_link_set(int ipd_port,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
/**
|
||||
* Configure a port for internal and/or external loopback. Internal loopback
|
||||
* causes packets sent by the port to be received by Octeon. External loopback
|
||||
* causes packets received from the wire to sent out again.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to loopback.
|
||||
* @enable_internal:
|
||||
* Non zero if you want internal loopback
|
||||
* @enable_external:
|
||||
* Non zero if you want external loopback
|
||||
*
|
||||
* Returns Zero on success, negative on failure.
|
||||
*/
|
||||
extern int __cvmx_helper_xaui_configure_loopback(int ipd_port,
|
||||
int enable_internal,
|
||||
int enable_external);
|
||||
#endif
|
||||
226
arch/mips/include/asm/octeon/cvmx-helper.h
Normal file
226
arch/mips/include/asm/octeon/cvmx-helper.h
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* Helper functions for common, but complicated tasks.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_HELPER_H__
|
||||
#define __CVMX_HELPER_H__
|
||||
|
||||
#include <asm/octeon/cvmx-config.h>
|
||||
#include <asm/octeon/cvmx-fpa.h>
|
||||
#include <asm/octeon/cvmx-wqe.h>
|
||||
|
||||
typedef enum {
|
||||
CVMX_HELPER_INTERFACE_MODE_DISABLED,
|
||||
CVMX_HELPER_INTERFACE_MODE_RGMII,
|
||||
CVMX_HELPER_INTERFACE_MODE_GMII,
|
||||
CVMX_HELPER_INTERFACE_MODE_SPI,
|
||||
CVMX_HELPER_INTERFACE_MODE_PCIE,
|
||||
CVMX_HELPER_INTERFACE_MODE_XAUI,
|
||||
CVMX_HELPER_INTERFACE_MODE_SGMII,
|
||||
CVMX_HELPER_INTERFACE_MODE_PICMG,
|
||||
CVMX_HELPER_INTERFACE_MODE_NPI,
|
||||
CVMX_HELPER_INTERFACE_MODE_LOOP,
|
||||
} cvmx_helper_interface_mode_t;
|
||||
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t link_up:1; /**< Is the physical link up? */
|
||||
uint64_t full_duplex:1; /**< 1 if the link is full duplex */
|
||||
uint64_t speed:18; /**< Speed of the link in Mbps */
|
||||
} s;
|
||||
} cvmx_helper_link_info_t;
|
||||
|
||||
#include <asm/octeon/cvmx-helper-errata.h>
|
||||
#include <asm/octeon/cvmx-helper-loop.h>
|
||||
#include <asm/octeon/cvmx-helper-npi.h>
|
||||
#include <asm/octeon/cvmx-helper-rgmii.h>
|
||||
#include <asm/octeon/cvmx-helper-sgmii.h>
|
||||
#include <asm/octeon/cvmx-helper-spi.h>
|
||||
#include <asm/octeon/cvmx-helper-util.h>
|
||||
#include <asm/octeon/cvmx-helper-xaui.h>
|
||||
|
||||
/**
|
||||
* cvmx_override_pko_queue_priority(int ipd_port, uint64_t
|
||||
* priorities[16]) is a function pointer. It is meant to allow
|
||||
* customization of the PKO queue priorities based on the port
|
||||
* number. Users should set this pointer to a function before
|
||||
* calling any cvmx-helper operations.
|
||||
*/
|
||||
extern void (*cvmx_override_pko_queue_priority) (int pko_port,
|
||||
uint64_t priorities[16]);
|
||||
|
||||
/**
|
||||
* cvmx_override_ipd_port_setup(int ipd_port) is a function
|
||||
* pointer. It is meant to allow customization of the IPD port
|
||||
* setup before packet input/output comes online. It is called
|
||||
* after cvmx-helper does the default IPD configuration, but
|
||||
* before IPD is enabled. Users should set this pointer to a
|
||||
* function before calling any cvmx-helper operations.
|
||||
*/
|
||||
extern void (*cvmx_override_ipd_port_setup) (int ipd_port);
|
||||
|
||||
/**
|
||||
* This function enables the IPD and also enables the packet interfaces.
|
||||
* The packet interfaces (RGMII and SPI) must be enabled after the
|
||||
* IPD. This should be called by the user program after any additional
|
||||
* IPD configuration changes are made if CVMX_HELPER_ENABLE_IPD
|
||||
* is not set in the executive-config.h file.
|
||||
*
|
||||
* Returns 0 on success
|
||||
* -1 on failure
|
||||
*/
|
||||
extern int cvmx_helper_ipd_and_packet_input_enable(void);
|
||||
|
||||
/**
|
||||
* Initialize the PIP, IPD, and PKO hardware to support
|
||||
* simple priority based queues for the ethernet ports. Each
|
||||
* port is configured with a number of priority queues based
|
||||
* on CVMX_PKO_QUEUES_PER_PORT_* where each queue is lower
|
||||
* priority than the previous.
|
||||
*
|
||||
* Returns Zero on success, non-zero on failure
|
||||
*/
|
||||
extern int cvmx_helper_initialize_packet_io_global(void);
|
||||
|
||||
/**
|
||||
* Does core local initialization for packet io
|
||||
*
|
||||
* Returns Zero on success, non-zero on failure
|
||||
*/
|
||||
extern int cvmx_helper_initialize_packet_io_local(void);
|
||||
|
||||
/**
|
||||
* Returns the number of ports on the given interface.
|
||||
* The interface must be initialized before the port count
|
||||
* can be returned.
|
||||
*
|
||||
* @interface: Which interface to return port count for.
|
||||
*
|
||||
* Returns Port count for interface
|
||||
* -1 for uninitialized interface
|
||||
*/
|
||||
extern int cvmx_helper_ports_on_interface(int interface);
|
||||
|
||||
/**
|
||||
* Return the number of interfaces the chip has. Each interface
|
||||
* may have multiple ports. Most chips support two interfaces,
|
||||
* but the CNX0XX and CNX1XX are exceptions. These only support
|
||||
* one interface.
|
||||
*
|
||||
* Returns Number of interfaces on chip
|
||||
*/
|
||||
extern int cvmx_helper_get_number_of_interfaces(void);
|
||||
|
||||
/**
|
||||
* Get the operating mode of an interface. Depending on the Octeon
|
||||
* chip and configuration, this function returns an enumeration
|
||||
* of the type of packet I/O supported by an interface.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Mode of the interface. Unknown or unsupported interfaces return
|
||||
* DISABLED.
|
||||
*/
|
||||
extern cvmx_helper_interface_mode_t cvmx_helper_interface_get_mode(int
|
||||
interface);
|
||||
|
||||
/**
|
||||
* Auto configure an IPD/PKO port link state and speed. This
|
||||
* function basically does the equivalent of:
|
||||
* cvmx_helper_link_set(ipd_port, cvmx_helper_link_get(ipd_port));
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to auto configure
|
||||
*
|
||||
* Returns Link state after configure
|
||||
*/
|
||||
extern cvmx_helper_link_info_t cvmx_helper_link_autoconf(int ipd_port);
|
||||
|
||||
/**
|
||||
* Return the link state of an IPD/PKO port as returned by
|
||||
* auto negotiation. The result of this function may not match
|
||||
* Octeon's link config if auto negotiation has changed since
|
||||
* the last call to cvmx_helper_link_set().
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to query
|
||||
*
|
||||
* Returns Link state
|
||||
*/
|
||||
extern cvmx_helper_link_info_t cvmx_helper_link_get(int ipd_port);
|
||||
|
||||
/**
|
||||
* Configure an IPD/PKO port for the specified link state. This
|
||||
* function does not influence auto negotiation at the PHY level.
|
||||
* The passed link state must always match the link state returned
|
||||
* by cvmx_helper_link_get(). It is normally best to use
|
||||
* cvmx_helper_link_autoconf() instead.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to configure
|
||||
* @link_info: The new link state
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int cvmx_helper_link_set(int ipd_port,
|
||||
cvmx_helper_link_info_t link_info);
|
||||
|
||||
/**
|
||||
* This function probes an interface to determine the actual
|
||||
* number of hardware ports connected to it. It doesn't setup the
|
||||
* ports or enable them. The main goal here is to set the global
|
||||
* interface_port_count[interface] correctly. Hardware setup of the
|
||||
* ports will be performed later.
|
||||
*
|
||||
* @interface: Interface to probe
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int cvmx_helper_interface_probe(int interface);
|
||||
extern int cvmx_helper_interface_enumerate(int interface);
|
||||
|
||||
/**
|
||||
* Configure a port for internal and/or external loopback. Internal loopback
|
||||
* causes packets sent by the port to be received by Octeon. External loopback
|
||||
* causes packets received from the wire to sent out again.
|
||||
*
|
||||
* @ipd_port: IPD/PKO port to loopback.
|
||||
* @enable_internal:
|
||||
* Non zero if you want internal loopback
|
||||
* @enable_external:
|
||||
* Non zero if you want external loopback
|
||||
*
|
||||
* Returns Zero on success, negative on failure.
|
||||
*/
|
||||
extern int cvmx_helper_configure_loopback(int ipd_port, int enable_internal,
|
||||
int enable_external);
|
||||
|
||||
#endif /* __CVMX_HELPER_H__ */
|
||||
1278
arch/mips/include/asm/octeon/cvmx-iob-defs.h
Normal file
1278
arch/mips/include/asm/octeon/cvmx-iob-defs.h
Normal file
File diff suppressed because it is too large
Load diff
2010
arch/mips/include/asm/octeon/cvmx-ipd-defs.h
Normal file
2010
arch/mips/include/asm/octeon/cvmx-ipd-defs.h
Normal file
File diff suppressed because it is too large
Load diff
338
arch/mips/include/asm/octeon/cvmx-ipd.h
Normal file
338
arch/mips/include/asm/octeon/cvmx-ipd.h
Normal file
|
|
@ -0,0 +1,338 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
*
|
||||
* Interface to the hardware Input Packet Data unit.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_IPD_H__
|
||||
#define __CVMX_IPD_H__
|
||||
|
||||
#include <asm/octeon/octeon-feature.h>
|
||||
|
||||
#include <asm/octeon/cvmx-ipd-defs.h>
|
||||
|
||||
enum cvmx_ipd_mode {
|
||||
CVMX_IPD_OPC_MODE_STT = 0LL, /* All blocks DRAM, not cached in L2 */
|
||||
CVMX_IPD_OPC_MODE_STF = 1LL, /* All bloccks into L2 */
|
||||
CVMX_IPD_OPC_MODE_STF1_STT = 2LL, /* 1st block L2, rest DRAM */
|
||||
CVMX_IPD_OPC_MODE_STF2_STT = 3LL /* 1st, 2nd blocks L2, rest DRAM */
|
||||
};
|
||||
|
||||
#ifndef CVMX_ENABLE_LEN_M8_FIX
|
||||
#define CVMX_ENABLE_LEN_M8_FIX 0
|
||||
#endif
|
||||
|
||||
/* CSR typedefs have been moved to cvmx-csr-*.h */
|
||||
typedef union cvmx_ipd_1st_mbuff_skip cvmx_ipd_mbuff_first_skip_t;
|
||||
typedef union cvmx_ipd_1st_next_ptr_back cvmx_ipd_first_next_ptr_back_t;
|
||||
|
||||
typedef cvmx_ipd_mbuff_first_skip_t cvmx_ipd_mbuff_not_first_skip_t;
|
||||
typedef cvmx_ipd_first_next_ptr_back_t cvmx_ipd_second_next_ptr_back_t;
|
||||
|
||||
/**
|
||||
* Configure IPD
|
||||
*
|
||||
* @mbuff_size: Packets buffer size in 8 byte words
|
||||
* @first_mbuff_skip:
|
||||
* Number of 8 byte words to skip in the first buffer
|
||||
* @not_first_mbuff_skip:
|
||||
* Number of 8 byte words to skip in each following buffer
|
||||
* @first_back: Must be same as first_mbuff_skip / 128
|
||||
* @second_back:
|
||||
* Must be same as not_first_mbuff_skip / 128
|
||||
* @wqe_fpa_pool:
|
||||
* FPA pool to get work entries from
|
||||
* @cache_mode:
|
||||
* @back_pres_enable_flag:
|
||||
* Enable or disable port back pressure
|
||||
*/
|
||||
static inline void cvmx_ipd_config(uint64_t mbuff_size,
|
||||
uint64_t first_mbuff_skip,
|
||||
uint64_t not_first_mbuff_skip,
|
||||
uint64_t first_back,
|
||||
uint64_t second_back,
|
||||
uint64_t wqe_fpa_pool,
|
||||
enum cvmx_ipd_mode cache_mode,
|
||||
uint64_t back_pres_enable_flag)
|
||||
{
|
||||
cvmx_ipd_mbuff_first_skip_t first_skip;
|
||||
cvmx_ipd_mbuff_not_first_skip_t not_first_skip;
|
||||
union cvmx_ipd_packet_mbuff_size size;
|
||||
cvmx_ipd_first_next_ptr_back_t first_back_struct;
|
||||
cvmx_ipd_second_next_ptr_back_t second_back_struct;
|
||||
union cvmx_ipd_wqe_fpa_queue wqe_pool;
|
||||
union cvmx_ipd_ctl_status ipd_ctl_reg;
|
||||
|
||||
first_skip.u64 = 0;
|
||||
first_skip.s.skip_sz = first_mbuff_skip;
|
||||
cvmx_write_csr(CVMX_IPD_1ST_MBUFF_SKIP, first_skip.u64);
|
||||
|
||||
not_first_skip.u64 = 0;
|
||||
not_first_skip.s.skip_sz = not_first_mbuff_skip;
|
||||
cvmx_write_csr(CVMX_IPD_NOT_1ST_MBUFF_SKIP, not_first_skip.u64);
|
||||
|
||||
size.u64 = 0;
|
||||
size.s.mb_size = mbuff_size;
|
||||
cvmx_write_csr(CVMX_IPD_PACKET_MBUFF_SIZE, size.u64);
|
||||
|
||||
first_back_struct.u64 = 0;
|
||||
first_back_struct.s.back = first_back;
|
||||
cvmx_write_csr(CVMX_IPD_1st_NEXT_PTR_BACK, first_back_struct.u64);
|
||||
|
||||
second_back_struct.u64 = 0;
|
||||
second_back_struct.s.back = second_back;
|
||||
cvmx_write_csr(CVMX_IPD_2nd_NEXT_PTR_BACK, second_back_struct.u64);
|
||||
|
||||
wqe_pool.u64 = 0;
|
||||
wqe_pool.s.wqe_pool = wqe_fpa_pool;
|
||||
cvmx_write_csr(CVMX_IPD_WQE_FPA_QUEUE, wqe_pool.u64);
|
||||
|
||||
ipd_ctl_reg.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
|
||||
ipd_ctl_reg.s.opc_mode = cache_mode;
|
||||
ipd_ctl_reg.s.pbp_en = back_pres_enable_flag;
|
||||
cvmx_write_csr(CVMX_IPD_CTL_STATUS, ipd_ctl_reg.u64);
|
||||
|
||||
/* Note: the example RED code that used to be here has been moved to
|
||||
cvmx_helper_setup_red */
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable IPD
|
||||
*/
|
||||
static inline void cvmx_ipd_enable(void)
|
||||
{
|
||||
union cvmx_ipd_ctl_status ipd_reg;
|
||||
ipd_reg.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
|
||||
if (ipd_reg.s.ipd_en) {
|
||||
cvmx_dprintf
|
||||
("Warning: Enabling IPD when IPD already enabled.\n");
|
||||
}
|
||||
ipd_reg.s.ipd_en = 1;
|
||||
#if CVMX_ENABLE_LEN_M8_FIX
|
||||
if (!OCTEON_IS_MODEL(OCTEON_CN38XX_PASS2))
|
||||
ipd_reg.s.len_m8 = TRUE;
|
||||
#endif
|
||||
cvmx_write_csr(CVMX_IPD_CTL_STATUS, ipd_reg.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable IPD
|
||||
*/
|
||||
static inline void cvmx_ipd_disable(void)
|
||||
{
|
||||
union cvmx_ipd_ctl_status ipd_reg;
|
||||
ipd_reg.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
|
||||
ipd_reg.s.ipd_en = 0;
|
||||
cvmx_write_csr(CVMX_IPD_CTL_STATUS, ipd_reg.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Supportive function for cvmx_fpa_shutdown_pool.
|
||||
*/
|
||||
static inline void cvmx_ipd_free_ptr(void)
|
||||
{
|
||||
/* Only CN38XXp{1,2} cannot read pointer out of the IPD */
|
||||
if (!OCTEON_IS_MODEL(OCTEON_CN38XX_PASS1)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN38XX_PASS2)) {
|
||||
int no_wptr = 0;
|
||||
union cvmx_ipd_ptr_count ipd_ptr_count;
|
||||
ipd_ptr_count.u64 = cvmx_read_csr(CVMX_IPD_PTR_COUNT);
|
||||
|
||||
/* Handle Work Queue Entry in cn56xx and cn52xx */
|
||||
if (octeon_has_feature(OCTEON_FEATURE_NO_WPTR)) {
|
||||
union cvmx_ipd_ctl_status ipd_ctl_status;
|
||||
ipd_ctl_status.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
|
||||
if (ipd_ctl_status.s.no_wptr)
|
||||
no_wptr = 1;
|
||||
}
|
||||
|
||||
/* Free the prefetched WQE */
|
||||
if (ipd_ptr_count.s.wqev_cnt) {
|
||||
union cvmx_ipd_wqe_ptr_valid ipd_wqe_ptr_valid;
|
||||
ipd_wqe_ptr_valid.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_WQE_PTR_VALID);
|
||||
if (no_wptr)
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t) ipd_wqe_ptr_valid.s.
|
||||
ptr << 7), CVMX_FPA_PACKET_POOL,
|
||||
0);
|
||||
else
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t) ipd_wqe_ptr_valid.s.
|
||||
ptr << 7), CVMX_FPA_WQE_POOL, 0);
|
||||
}
|
||||
|
||||
/* Free all WQE in the fifo */
|
||||
if (ipd_ptr_count.s.wqe_pcnt) {
|
||||
int i;
|
||||
union cvmx_ipd_pwp_ptr_fifo_ctl ipd_pwp_ptr_fifo_ctl;
|
||||
ipd_pwp_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PWP_PTR_FIFO_CTL);
|
||||
for (i = 0; i < ipd_ptr_count.s.wqe_pcnt; i++) {
|
||||
ipd_pwp_ptr_fifo_ctl.s.cena = 0;
|
||||
ipd_pwp_ptr_fifo_ctl.s.raddr =
|
||||
ipd_pwp_ptr_fifo_ctl.s.max_cnts +
|
||||
(ipd_pwp_ptr_fifo_ctl.s.wraddr +
|
||||
i) % ipd_pwp_ptr_fifo_ctl.s.max_cnts;
|
||||
cvmx_write_csr(CVMX_IPD_PWP_PTR_FIFO_CTL,
|
||||
ipd_pwp_ptr_fifo_ctl.u64);
|
||||
ipd_pwp_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PWP_PTR_FIFO_CTL);
|
||||
if (no_wptr)
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t)
|
||||
ipd_pwp_ptr_fifo_ctl.s.
|
||||
ptr << 7),
|
||||
CVMX_FPA_PACKET_POOL, 0);
|
||||
else
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t)
|
||||
ipd_pwp_ptr_fifo_ctl.s.
|
||||
ptr << 7),
|
||||
CVMX_FPA_WQE_POOL, 0);
|
||||
}
|
||||
ipd_pwp_ptr_fifo_ctl.s.cena = 1;
|
||||
cvmx_write_csr(CVMX_IPD_PWP_PTR_FIFO_CTL,
|
||||
ipd_pwp_ptr_fifo_ctl.u64);
|
||||
}
|
||||
|
||||
/* Free the prefetched packet */
|
||||
if (ipd_ptr_count.s.pktv_cnt) {
|
||||
union cvmx_ipd_pkt_ptr_valid ipd_pkt_ptr_valid;
|
||||
ipd_pkt_ptr_valid.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PKT_PTR_VALID);
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
(ipd_pkt_ptr_valid.s.ptr << 7),
|
||||
CVMX_FPA_PACKET_POOL, 0);
|
||||
}
|
||||
|
||||
/* Free the per port prefetched packets */
|
||||
if (1) {
|
||||
int i;
|
||||
union cvmx_ipd_prc_port_ptr_fifo_ctl
|
||||
ipd_prc_port_ptr_fifo_ctl;
|
||||
ipd_prc_port_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PRC_PORT_PTR_FIFO_CTL);
|
||||
|
||||
for (i = 0; i < ipd_prc_port_ptr_fifo_ctl.s.max_pkt;
|
||||
i++) {
|
||||
ipd_prc_port_ptr_fifo_ctl.s.cena = 0;
|
||||
ipd_prc_port_ptr_fifo_ctl.s.raddr =
|
||||
i % ipd_prc_port_ptr_fifo_ctl.s.max_pkt;
|
||||
cvmx_write_csr(CVMX_IPD_PRC_PORT_PTR_FIFO_CTL,
|
||||
ipd_prc_port_ptr_fifo_ctl.u64);
|
||||
ipd_prc_port_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr
|
||||
(CVMX_IPD_PRC_PORT_PTR_FIFO_CTL);
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t)
|
||||
ipd_prc_port_ptr_fifo_ctl.s.
|
||||
ptr << 7), CVMX_FPA_PACKET_POOL,
|
||||
0);
|
||||
}
|
||||
ipd_prc_port_ptr_fifo_ctl.s.cena = 1;
|
||||
cvmx_write_csr(CVMX_IPD_PRC_PORT_PTR_FIFO_CTL,
|
||||
ipd_prc_port_ptr_fifo_ctl.u64);
|
||||
}
|
||||
|
||||
/* Free all packets in the holding fifo */
|
||||
if (ipd_ptr_count.s.pfif_cnt) {
|
||||
int i;
|
||||
union cvmx_ipd_prc_hold_ptr_fifo_ctl
|
||||
ipd_prc_hold_ptr_fifo_ctl;
|
||||
|
||||
ipd_prc_hold_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PRC_HOLD_PTR_FIFO_CTL);
|
||||
|
||||
for (i = 0; i < ipd_ptr_count.s.pfif_cnt; i++) {
|
||||
ipd_prc_hold_ptr_fifo_ctl.s.cena = 0;
|
||||
ipd_prc_hold_ptr_fifo_ctl.s.raddr =
|
||||
(ipd_prc_hold_ptr_fifo_ctl.s.praddr +
|
||||
i) % ipd_prc_hold_ptr_fifo_ctl.s.max_pkt;
|
||||
cvmx_write_csr(CVMX_IPD_PRC_HOLD_PTR_FIFO_CTL,
|
||||
ipd_prc_hold_ptr_fifo_ctl.u64);
|
||||
ipd_prc_hold_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr
|
||||
(CVMX_IPD_PRC_HOLD_PTR_FIFO_CTL);
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t)
|
||||
ipd_prc_hold_ptr_fifo_ctl.s.
|
||||
ptr << 7), CVMX_FPA_PACKET_POOL,
|
||||
0);
|
||||
}
|
||||
ipd_prc_hold_ptr_fifo_ctl.s.cena = 1;
|
||||
cvmx_write_csr(CVMX_IPD_PRC_HOLD_PTR_FIFO_CTL,
|
||||
ipd_prc_hold_ptr_fifo_ctl.u64);
|
||||
}
|
||||
|
||||
/* Free all packets in the fifo */
|
||||
if (ipd_ptr_count.s.pkt_pcnt) {
|
||||
int i;
|
||||
union cvmx_ipd_pwp_ptr_fifo_ctl ipd_pwp_ptr_fifo_ctl;
|
||||
ipd_pwp_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PWP_PTR_FIFO_CTL);
|
||||
|
||||
for (i = 0; i < ipd_ptr_count.s.pkt_pcnt; i++) {
|
||||
ipd_pwp_ptr_fifo_ctl.s.cena = 0;
|
||||
ipd_pwp_ptr_fifo_ctl.s.raddr =
|
||||
(ipd_pwp_ptr_fifo_ctl.s.praddr +
|
||||
i) % ipd_pwp_ptr_fifo_ctl.s.max_cnts;
|
||||
cvmx_write_csr(CVMX_IPD_PWP_PTR_FIFO_CTL,
|
||||
ipd_pwp_ptr_fifo_ctl.u64);
|
||||
ipd_pwp_ptr_fifo_ctl.u64 =
|
||||
cvmx_read_csr(CVMX_IPD_PWP_PTR_FIFO_CTL);
|
||||
cvmx_fpa_free(cvmx_phys_to_ptr
|
||||
((uint64_t) ipd_pwp_ptr_fifo_ctl.
|
||||
s.ptr << 7),
|
||||
CVMX_FPA_PACKET_POOL, 0);
|
||||
}
|
||||
ipd_pwp_ptr_fifo_ctl.s.cena = 1;
|
||||
cvmx_write_csr(CVMX_IPD_PWP_PTR_FIFO_CTL,
|
||||
ipd_pwp_ptr_fifo_ctl.u64);
|
||||
}
|
||||
|
||||
/* Reset the IPD to get all buffers out of it */
|
||||
{
|
||||
union cvmx_ipd_ctl_status ipd_ctl_status;
|
||||
ipd_ctl_status.u64 = cvmx_read_csr(CVMX_IPD_CTL_STATUS);
|
||||
ipd_ctl_status.s.reset = 1;
|
||||
cvmx_write_csr(CVMX_IPD_CTL_STATUS, ipd_ctl_status.u64);
|
||||
}
|
||||
|
||||
/* Reset the PIP */
|
||||
{
|
||||
union cvmx_pip_sft_rst pip_sft_rst;
|
||||
pip_sft_rst.u64 = cvmx_read_csr(CVMX_PIP_SFT_RST);
|
||||
pip_sft_rst.s.rst = 1;
|
||||
cvmx_write_csr(CVMX_PIP_SFT_RST, pip_sft_rst.u64);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* __CVMX_IPD_H__ */
|
||||
3167
arch/mips/include/asm/octeon/cvmx-l2c-defs.h
Normal file
3167
arch/mips/include/asm/octeon/cvmx-l2c-defs.h
Normal file
File diff suppressed because it is too large
Load diff
360
arch/mips/include/asm/octeon/cvmx-l2c.h
Normal file
360
arch/mips/include/asm/octeon/cvmx-l2c.h
Normal file
|
|
@ -0,0 +1,360 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2010 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Interface to the Level 2 Cache (L2C) control, measurement, and debugging
|
||||
* facilities.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_L2C_H__
|
||||
#define __CVMX_L2C_H__
|
||||
|
||||
#define CVMX_L2_ASSOC cvmx_l2c_get_num_assoc() /* Deprecated macro, use function */
|
||||
#define CVMX_L2_SET_BITS cvmx_l2c_get_set_bits() /* Deprecated macro, use function */
|
||||
#define CVMX_L2_SETS cvmx_l2c_get_num_sets() /* Deprecated macro, use function */
|
||||
|
||||
|
||||
#define CVMX_L2C_IDX_ADDR_SHIFT 7 /* based on 128 byte cache line size */
|
||||
#define CVMX_L2C_IDX_MASK (cvmx_l2c_get_num_sets() - 1)
|
||||
|
||||
/* Defines for index aliasing computations */
|
||||
#define CVMX_L2C_TAG_ADDR_ALIAS_SHIFT (CVMX_L2C_IDX_ADDR_SHIFT + cvmx_l2c_get_set_bits())
|
||||
#define CVMX_L2C_ALIAS_MASK (CVMX_L2C_IDX_MASK << CVMX_L2C_TAG_ADDR_ALIAS_SHIFT)
|
||||
#define CVMX_L2C_MEMBANK_SELECT_SIZE 4096
|
||||
|
||||
/* Defines for Virtualizations, valid only from Octeon II onwards. */
|
||||
#define CVMX_L2C_VRT_MAX_VIRTID_ALLOWED ((OCTEON_IS_MODEL(OCTEON_CN63XX)) ? 64 : 0)
|
||||
#define CVMX_L2C_VRT_MAX_MEMSZ_ALLOWED ((OCTEON_IS_MODEL(OCTEON_CN63XX)) ? 32 : 0)
|
||||
|
||||
union cvmx_l2c_tag {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
uint64_t reserved:28;
|
||||
uint64_t V:1; /* Line valid */
|
||||
uint64_t D:1; /* Line dirty */
|
||||
uint64_t L:1; /* Line locked */
|
||||
uint64_t U:1; /* Use, LRU eviction */
|
||||
uint64_t addr:32; /* Phys mem (not all bits valid) */
|
||||
} s;
|
||||
};
|
||||
|
||||
/* Number of L2C Tag-and-data sections (TADs) that are connected to LMC. */
|
||||
#define CVMX_L2C_TADS 1
|
||||
|
||||
/* L2C Performance Counter events. */
|
||||
enum cvmx_l2c_event {
|
||||
CVMX_L2C_EVENT_CYCLES = 0,
|
||||
CVMX_L2C_EVENT_INSTRUCTION_MISS = 1,
|
||||
CVMX_L2C_EVENT_INSTRUCTION_HIT = 2,
|
||||
CVMX_L2C_EVENT_DATA_MISS = 3,
|
||||
CVMX_L2C_EVENT_DATA_HIT = 4,
|
||||
CVMX_L2C_EVENT_MISS = 5,
|
||||
CVMX_L2C_EVENT_HIT = 6,
|
||||
CVMX_L2C_EVENT_VICTIM_HIT = 7,
|
||||
CVMX_L2C_EVENT_INDEX_CONFLICT = 8,
|
||||
CVMX_L2C_EVENT_TAG_PROBE = 9,
|
||||
CVMX_L2C_EVENT_TAG_UPDATE = 10,
|
||||
CVMX_L2C_EVENT_TAG_COMPLETE = 11,
|
||||
CVMX_L2C_EVENT_TAG_DIRTY = 12,
|
||||
CVMX_L2C_EVENT_DATA_STORE_NOP = 13,
|
||||
CVMX_L2C_EVENT_DATA_STORE_READ = 14,
|
||||
CVMX_L2C_EVENT_DATA_STORE_WRITE = 15,
|
||||
CVMX_L2C_EVENT_FILL_DATA_VALID = 16,
|
||||
CVMX_L2C_EVENT_WRITE_REQUEST = 17,
|
||||
CVMX_L2C_EVENT_READ_REQUEST = 18,
|
||||
CVMX_L2C_EVENT_WRITE_DATA_VALID = 19,
|
||||
CVMX_L2C_EVENT_XMC_NOP = 20,
|
||||
CVMX_L2C_EVENT_XMC_LDT = 21,
|
||||
CVMX_L2C_EVENT_XMC_LDI = 22,
|
||||
CVMX_L2C_EVENT_XMC_LDD = 23,
|
||||
CVMX_L2C_EVENT_XMC_STF = 24,
|
||||
CVMX_L2C_EVENT_XMC_STT = 25,
|
||||
CVMX_L2C_EVENT_XMC_STP = 26,
|
||||
CVMX_L2C_EVENT_XMC_STC = 27,
|
||||
CVMX_L2C_EVENT_XMC_DWB = 28,
|
||||
CVMX_L2C_EVENT_XMC_PL2 = 29,
|
||||
CVMX_L2C_EVENT_XMC_PSL1 = 30,
|
||||
CVMX_L2C_EVENT_XMC_IOBLD = 31,
|
||||
CVMX_L2C_EVENT_XMC_IOBST = 32,
|
||||
CVMX_L2C_EVENT_XMC_IOBDMA = 33,
|
||||
CVMX_L2C_EVENT_XMC_IOBRSP = 34,
|
||||
CVMX_L2C_EVENT_XMC_BUS_VALID = 35,
|
||||
CVMX_L2C_EVENT_XMC_MEM_DATA = 36,
|
||||
CVMX_L2C_EVENT_XMC_REFL_DATA = 37,
|
||||
CVMX_L2C_EVENT_XMC_IOBRSP_DATA = 38,
|
||||
CVMX_L2C_EVENT_RSC_NOP = 39,
|
||||
CVMX_L2C_EVENT_RSC_STDN = 40,
|
||||
CVMX_L2C_EVENT_RSC_FILL = 41,
|
||||
CVMX_L2C_EVENT_RSC_REFL = 42,
|
||||
CVMX_L2C_EVENT_RSC_STIN = 43,
|
||||
CVMX_L2C_EVENT_RSC_SCIN = 44,
|
||||
CVMX_L2C_EVENT_RSC_SCFL = 45,
|
||||
CVMX_L2C_EVENT_RSC_SCDN = 46,
|
||||
CVMX_L2C_EVENT_RSC_DATA_VALID = 47,
|
||||
CVMX_L2C_EVENT_RSC_VALID_FILL = 48,
|
||||
CVMX_L2C_EVENT_RSC_VALID_STRSP = 49,
|
||||
CVMX_L2C_EVENT_RSC_VALID_REFL = 50,
|
||||
CVMX_L2C_EVENT_LRF_REQ = 51,
|
||||
CVMX_L2C_EVENT_DT_RD_ALLOC = 52,
|
||||
CVMX_L2C_EVENT_DT_WR_INVAL = 53,
|
||||
CVMX_L2C_EVENT_MAX
|
||||
};
|
||||
|
||||
/* L2C Performance Counter events for Octeon2. */
|
||||
enum cvmx_l2c_tad_event {
|
||||
CVMX_L2C_TAD_EVENT_NONE = 0,
|
||||
CVMX_L2C_TAD_EVENT_TAG_HIT = 1,
|
||||
CVMX_L2C_TAD_EVENT_TAG_MISS = 2,
|
||||
CVMX_L2C_TAD_EVENT_TAG_NOALLOC = 3,
|
||||
CVMX_L2C_TAD_EVENT_TAG_VICTIM = 4,
|
||||
CVMX_L2C_TAD_EVENT_SC_FAIL = 5,
|
||||
CVMX_L2C_TAD_EVENT_SC_PASS = 6,
|
||||
CVMX_L2C_TAD_EVENT_LFB_VALID = 7,
|
||||
CVMX_L2C_TAD_EVENT_LFB_WAIT_LFB = 8,
|
||||
CVMX_L2C_TAD_EVENT_LFB_WAIT_VAB = 9,
|
||||
CVMX_L2C_TAD_EVENT_QUAD0_INDEX = 128,
|
||||
CVMX_L2C_TAD_EVENT_QUAD0_READ = 129,
|
||||
CVMX_L2C_TAD_EVENT_QUAD0_BANK = 130,
|
||||
CVMX_L2C_TAD_EVENT_QUAD0_WDAT = 131,
|
||||
CVMX_L2C_TAD_EVENT_QUAD1_INDEX = 144,
|
||||
CVMX_L2C_TAD_EVENT_QUAD1_READ = 145,
|
||||
CVMX_L2C_TAD_EVENT_QUAD1_BANK = 146,
|
||||
CVMX_L2C_TAD_EVENT_QUAD1_WDAT = 147,
|
||||
CVMX_L2C_TAD_EVENT_QUAD2_INDEX = 160,
|
||||
CVMX_L2C_TAD_EVENT_QUAD2_READ = 161,
|
||||
CVMX_L2C_TAD_EVENT_QUAD2_BANK = 162,
|
||||
CVMX_L2C_TAD_EVENT_QUAD2_WDAT = 163,
|
||||
CVMX_L2C_TAD_EVENT_QUAD3_INDEX = 176,
|
||||
CVMX_L2C_TAD_EVENT_QUAD3_READ = 177,
|
||||
CVMX_L2C_TAD_EVENT_QUAD3_BANK = 178,
|
||||
CVMX_L2C_TAD_EVENT_QUAD3_WDAT = 179,
|
||||
CVMX_L2C_TAD_EVENT_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* Configure one of the four L2 Cache performance counters to capture event
|
||||
* occurrences.
|
||||
*
|
||||
* @counter: The counter to configure. Range 0..3.
|
||||
* @event: The type of L2 Cache event occurrence to count.
|
||||
* @clear_on_read: When asserted, any read of the performance counter
|
||||
* clears the counter.
|
||||
*
|
||||
* @note The routine does not clear the counter.
|
||||
*/
|
||||
void cvmx_l2c_config_perf(uint32_t counter, enum cvmx_l2c_event event, uint32_t clear_on_read);
|
||||
|
||||
/**
|
||||
* Read the given L2 Cache performance counter. The counter must be configured
|
||||
* before reading, but this routine does not enforce this requirement.
|
||||
*
|
||||
* @counter: The counter to configure. Range 0..3.
|
||||
*
|
||||
* Returns The current counter value.
|
||||
*/
|
||||
uint64_t cvmx_l2c_read_perf(uint32_t counter);
|
||||
|
||||
/**
|
||||
* Return the L2 Cache way partitioning for a given core.
|
||||
*
|
||||
* @core: The core processor of interest.
|
||||
*
|
||||
* Returns The mask specifying the partitioning. 0 bits in mask indicates
|
||||
* the cache 'ways' that a core can evict from.
|
||||
* -1 on error
|
||||
*/
|
||||
int cvmx_l2c_get_core_way_partition(uint32_t core);
|
||||
|
||||
/**
|
||||
* Partitions the L2 cache for a core
|
||||
*
|
||||
* @core: The core that the partitioning applies to.
|
||||
* @mask: The partitioning of the ways expressed as a binary
|
||||
* mask. A 0 bit allows the core to evict cache lines from
|
||||
* a way, while a 1 bit blocks the core from evicting any
|
||||
* lines from that way. There must be at least one allowed
|
||||
* way (0 bit) in the mask.
|
||||
*
|
||||
|
||||
* @note If any ways are blocked for all cores and the HW blocks, then
|
||||
* those ways will never have any cache lines evicted from them.
|
||||
* All cores and the hardware blocks are free to read from all
|
||||
* ways regardless of the partitioning.
|
||||
*/
|
||||
int cvmx_l2c_set_core_way_partition(uint32_t core, uint32_t mask);
|
||||
|
||||
/**
|
||||
* Return the L2 Cache way partitioning for the hw blocks.
|
||||
*
|
||||
* Returns The mask specifying the reserved way. 0 bits in mask indicates
|
||||
* the cache 'ways' that a core can evict from.
|
||||
* -1 on error
|
||||
*/
|
||||
int cvmx_l2c_get_hw_way_partition(void);
|
||||
|
||||
/**
|
||||
* Partitions the L2 cache for the hardware blocks.
|
||||
*
|
||||
* @mask: The partitioning of the ways expressed as a binary
|
||||
* mask. A 0 bit allows the core to evict cache lines from
|
||||
* a way, while a 1 bit blocks the core from evicting any
|
||||
* lines from that way. There must be at least one allowed
|
||||
* way (0 bit) in the mask.
|
||||
*
|
||||
|
||||
* @note If any ways are blocked for all cores and the HW blocks, then
|
||||
* those ways will never have any cache lines evicted from them.
|
||||
* All cores and the hardware blocks are free to read from all
|
||||
* ways regardless of the partitioning.
|
||||
*/
|
||||
int cvmx_l2c_set_hw_way_partition(uint32_t mask);
|
||||
|
||||
|
||||
/**
|
||||
* Locks a line in the L2 cache at the specified physical address
|
||||
*
|
||||
* @addr: physical address of line to lock
|
||||
*
|
||||
* Returns 0 on success,
|
||||
* 1 if line not locked.
|
||||
*/
|
||||
int cvmx_l2c_lock_line(uint64_t addr);
|
||||
|
||||
/**
|
||||
* Locks a specified memory region in the L2 cache.
|
||||
*
|
||||
* Note that if not all lines can be locked, that means that all
|
||||
* but one of the ways (associations) available to the locking
|
||||
* core are locked. Having only 1 association available for
|
||||
* normal caching may have a significant adverse affect on performance.
|
||||
* Care should be taken to ensure that enough of the L2 cache is left
|
||||
* unlocked to allow for normal caching of DRAM.
|
||||
*
|
||||
* @start: Physical address of the start of the region to lock
|
||||
* @len: Length (in bytes) of region to lock
|
||||
*
|
||||
* Returns Number of requested lines that where not locked.
|
||||
* 0 on success (all locked)
|
||||
*/
|
||||
int cvmx_l2c_lock_mem_region(uint64_t start, uint64_t len);
|
||||
|
||||
/**
|
||||
* Unlock and flush a cache line from the L2 cache.
|
||||
* IMPORTANT: Must only be run by one core at a time due to use
|
||||
* of L2C debug features.
|
||||
* Note that this function will flush a matching but unlocked cache line.
|
||||
* (If address is not in L2, no lines are flushed.)
|
||||
*
|
||||
* @address: Physical address to unlock
|
||||
*
|
||||
* Returns 0: line not unlocked
|
||||
* 1: line unlocked
|
||||
*/
|
||||
int cvmx_l2c_unlock_line(uint64_t address);
|
||||
|
||||
/**
|
||||
* Unlocks a region of memory that is locked in the L2 cache
|
||||
*
|
||||
* @start: start physical address
|
||||
* @len: length (in bytes) to unlock
|
||||
*
|
||||
* Returns Number of locked lines that the call unlocked
|
||||
*/
|
||||
int cvmx_l2c_unlock_mem_region(uint64_t start, uint64_t len);
|
||||
|
||||
/**
|
||||
* Read the L2 controller tag for a given location in L2
|
||||
*
|
||||
* @association:
|
||||
* Which association to read line from
|
||||
* @index: Which way to read from.
|
||||
*
|
||||
* Returns l2c tag structure for line requested.
|
||||
*/
|
||||
union cvmx_l2c_tag cvmx_l2c_get_tag(uint32_t association, uint32_t index);
|
||||
|
||||
/* Wrapper providing a deprecated old function name */
|
||||
static inline union cvmx_l2c_tag cvmx_get_l2c_tag(uint32_t association, uint32_t index) __attribute__((deprecated));
|
||||
static inline union cvmx_l2c_tag cvmx_get_l2c_tag(uint32_t association, uint32_t index)
|
||||
{
|
||||
return cvmx_l2c_get_tag(association, index);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the cache index for a given physical address
|
||||
*
|
||||
* @addr: physical address
|
||||
*
|
||||
* Returns L2 cache index
|
||||
*/
|
||||
uint32_t cvmx_l2c_address_to_index(uint64_t addr);
|
||||
|
||||
/**
|
||||
* Flushes (and unlocks) the entire L2 cache.
|
||||
* IMPORTANT: Must only be run by one core at a time due to use
|
||||
* of L2C debug features.
|
||||
*/
|
||||
void cvmx_l2c_flush(void);
|
||||
|
||||
/**
|
||||
*
|
||||
* Returns Returns the size of the L2 cache in bytes,
|
||||
* -1 on error (unrecognized model)
|
||||
*/
|
||||
int cvmx_l2c_get_cache_size_bytes(void);
|
||||
|
||||
/**
|
||||
* Return the number of sets in the L2 Cache
|
||||
*
|
||||
* Returns
|
||||
*/
|
||||
int cvmx_l2c_get_num_sets(void);
|
||||
|
||||
/**
|
||||
* Return log base 2 of the number of sets in the L2 cache
|
||||
* Returns
|
||||
*/
|
||||
int cvmx_l2c_get_set_bits(void);
|
||||
/**
|
||||
* Return the number of associations in the L2 Cache
|
||||
*
|
||||
* Returns
|
||||
*/
|
||||
int cvmx_l2c_get_num_assoc(void);
|
||||
|
||||
/**
|
||||
* Flush a line from the L2 cache
|
||||
* This should only be called from one core at a time, as this routine
|
||||
* sets the core to the 'debug' core in order to flush the line.
|
||||
*
|
||||
* @assoc: Association (or way) to flush
|
||||
* @index: Index to flush
|
||||
*/
|
||||
void cvmx_l2c_flush_line(uint32_t assoc, uint32_t index);
|
||||
|
||||
#endif /* __CVMX_L2C_H__ */
|
||||
526
arch/mips/include/asm/octeon/cvmx-l2d-defs.h
Normal file
526
arch/mips/include/asm/octeon/cvmx-l2d-defs.h
Normal file
|
|
@ -0,0 +1,526 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_L2D_DEFS_H__
|
||||
#define __CVMX_L2D_DEFS_H__
|
||||
|
||||
#define CVMX_L2D_BST0 (CVMX_ADD_IO_SEG(0x0001180080000780ull))
|
||||
#define CVMX_L2D_BST1 (CVMX_ADD_IO_SEG(0x0001180080000788ull))
|
||||
#define CVMX_L2D_BST2 (CVMX_ADD_IO_SEG(0x0001180080000790ull))
|
||||
#define CVMX_L2D_BST3 (CVMX_ADD_IO_SEG(0x0001180080000798ull))
|
||||
#define CVMX_L2D_ERR (CVMX_ADD_IO_SEG(0x0001180080000010ull))
|
||||
#define CVMX_L2D_FADR (CVMX_ADD_IO_SEG(0x0001180080000018ull))
|
||||
#define CVMX_L2D_FSYN0 (CVMX_ADD_IO_SEG(0x0001180080000020ull))
|
||||
#define CVMX_L2D_FSYN1 (CVMX_ADD_IO_SEG(0x0001180080000028ull))
|
||||
#define CVMX_L2D_FUS0 (CVMX_ADD_IO_SEG(0x00011800800007A0ull))
|
||||
#define CVMX_L2D_FUS1 (CVMX_ADD_IO_SEG(0x00011800800007A8ull))
|
||||
#define CVMX_L2D_FUS2 (CVMX_ADD_IO_SEG(0x00011800800007B0ull))
|
||||
#define CVMX_L2D_FUS3 (CVMX_ADD_IO_SEG(0x00011800800007B8ull))
|
||||
|
||||
union cvmx_l2d_bst0 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_bst0_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_35_63:29;
|
||||
uint64_t ftl:1;
|
||||
uint64_t q0stat:34;
|
||||
#else
|
||||
uint64_t q0stat:34;
|
||||
uint64_t ftl:1;
|
||||
uint64_t reserved_35_63:29;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_bst0_s cn30xx;
|
||||
struct cvmx_l2d_bst0_s cn31xx;
|
||||
struct cvmx_l2d_bst0_s cn38xx;
|
||||
struct cvmx_l2d_bst0_s cn38xxp2;
|
||||
struct cvmx_l2d_bst0_s cn50xx;
|
||||
struct cvmx_l2d_bst0_s cn52xx;
|
||||
struct cvmx_l2d_bst0_s cn52xxp1;
|
||||
struct cvmx_l2d_bst0_s cn56xx;
|
||||
struct cvmx_l2d_bst0_s cn56xxp1;
|
||||
struct cvmx_l2d_bst0_s cn58xx;
|
||||
struct cvmx_l2d_bst0_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_bst1 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_bst1_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q1stat:34;
|
||||
#else
|
||||
uint64_t q1stat:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_bst1_s cn30xx;
|
||||
struct cvmx_l2d_bst1_s cn31xx;
|
||||
struct cvmx_l2d_bst1_s cn38xx;
|
||||
struct cvmx_l2d_bst1_s cn38xxp2;
|
||||
struct cvmx_l2d_bst1_s cn50xx;
|
||||
struct cvmx_l2d_bst1_s cn52xx;
|
||||
struct cvmx_l2d_bst1_s cn52xxp1;
|
||||
struct cvmx_l2d_bst1_s cn56xx;
|
||||
struct cvmx_l2d_bst1_s cn56xxp1;
|
||||
struct cvmx_l2d_bst1_s cn58xx;
|
||||
struct cvmx_l2d_bst1_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_bst2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_bst2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q2stat:34;
|
||||
#else
|
||||
uint64_t q2stat:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_bst2_s cn30xx;
|
||||
struct cvmx_l2d_bst2_s cn31xx;
|
||||
struct cvmx_l2d_bst2_s cn38xx;
|
||||
struct cvmx_l2d_bst2_s cn38xxp2;
|
||||
struct cvmx_l2d_bst2_s cn50xx;
|
||||
struct cvmx_l2d_bst2_s cn52xx;
|
||||
struct cvmx_l2d_bst2_s cn52xxp1;
|
||||
struct cvmx_l2d_bst2_s cn56xx;
|
||||
struct cvmx_l2d_bst2_s cn56xxp1;
|
||||
struct cvmx_l2d_bst2_s cn58xx;
|
||||
struct cvmx_l2d_bst2_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_bst3 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_bst3_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q3stat:34;
|
||||
#else
|
||||
uint64_t q3stat:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_bst3_s cn30xx;
|
||||
struct cvmx_l2d_bst3_s cn31xx;
|
||||
struct cvmx_l2d_bst3_s cn38xx;
|
||||
struct cvmx_l2d_bst3_s cn38xxp2;
|
||||
struct cvmx_l2d_bst3_s cn50xx;
|
||||
struct cvmx_l2d_bst3_s cn52xx;
|
||||
struct cvmx_l2d_bst3_s cn52xxp1;
|
||||
struct cvmx_l2d_bst3_s cn56xx;
|
||||
struct cvmx_l2d_bst3_s cn56xxp1;
|
||||
struct cvmx_l2d_bst3_s cn58xx;
|
||||
struct cvmx_l2d_bst3_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_err {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_err_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t bmhclsel:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t bmhclsel:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_err_s cn30xx;
|
||||
struct cvmx_l2d_err_s cn31xx;
|
||||
struct cvmx_l2d_err_s cn38xx;
|
||||
struct cvmx_l2d_err_s cn38xxp2;
|
||||
struct cvmx_l2d_err_s cn50xx;
|
||||
struct cvmx_l2d_err_s cn52xx;
|
||||
struct cvmx_l2d_err_s cn52xxp1;
|
||||
struct cvmx_l2d_err_s cn56xx;
|
||||
struct cvmx_l2d_err_s cn56xxp1;
|
||||
struct cvmx_l2d_err_s cn58xx;
|
||||
struct cvmx_l2d_err_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fadr {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fadr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_19_63:45;
|
||||
uint64_t fadru:1;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t fset:3;
|
||||
uint64_t fadr:11;
|
||||
#else
|
||||
uint64_t fadr:11;
|
||||
uint64_t fset:3;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t fadru:1;
|
||||
uint64_t reserved_19_63:45;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fadr_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_13_13:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_9_10:2;
|
||||
uint64_t fadr:9;
|
||||
#else
|
||||
uint64_t fadr:9;
|
||||
uint64_t reserved_9_10:2;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_13_13:1;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_l2d_fadr_cn31xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_13_13:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_10_10:1;
|
||||
uint64_t fadr:10;
|
||||
#else
|
||||
uint64_t fadr:10;
|
||||
uint64_t reserved_10_10:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_13_13:1;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} cn31xx;
|
||||
struct cvmx_l2d_fadr_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t fset:3;
|
||||
uint64_t fadr:11;
|
||||
#else
|
||||
uint64_t fadr:11;
|
||||
uint64_t fset:3;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_l2d_fadr_cn38xx cn38xxp2;
|
||||
struct cvmx_l2d_fadr_cn50xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t fset:3;
|
||||
uint64_t reserved_8_10:3;
|
||||
uint64_t fadr:8;
|
||||
#else
|
||||
uint64_t fadr:8;
|
||||
uint64_t reserved_8_10:3;
|
||||
uint64_t fset:3;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} cn50xx;
|
||||
struct cvmx_l2d_fadr_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t fset:3;
|
||||
uint64_t reserved_10_10:1;
|
||||
uint64_t fadr:10;
|
||||
#else
|
||||
uint64_t fadr:10;
|
||||
uint64_t reserved_10_10:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t fowmsk:4;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_l2d_fadr_cn52xx cn52xxp1;
|
||||
struct cvmx_l2d_fadr_s cn56xx;
|
||||
struct cvmx_l2d_fadr_s cn56xxp1;
|
||||
struct cvmx_l2d_fadr_s cn58xx;
|
||||
struct cvmx_l2d_fadr_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fsyn0 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fsyn0_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t fsyn_ow1:10;
|
||||
uint64_t fsyn_ow0:10;
|
||||
#else
|
||||
uint64_t fsyn_ow0:10;
|
||||
uint64_t fsyn_ow1:10;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fsyn0_s cn30xx;
|
||||
struct cvmx_l2d_fsyn0_s cn31xx;
|
||||
struct cvmx_l2d_fsyn0_s cn38xx;
|
||||
struct cvmx_l2d_fsyn0_s cn38xxp2;
|
||||
struct cvmx_l2d_fsyn0_s cn50xx;
|
||||
struct cvmx_l2d_fsyn0_s cn52xx;
|
||||
struct cvmx_l2d_fsyn0_s cn52xxp1;
|
||||
struct cvmx_l2d_fsyn0_s cn56xx;
|
||||
struct cvmx_l2d_fsyn0_s cn56xxp1;
|
||||
struct cvmx_l2d_fsyn0_s cn58xx;
|
||||
struct cvmx_l2d_fsyn0_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fsyn1 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fsyn1_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t fsyn_ow3:10;
|
||||
uint64_t fsyn_ow2:10;
|
||||
#else
|
||||
uint64_t fsyn_ow2:10;
|
||||
uint64_t fsyn_ow3:10;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fsyn1_s cn30xx;
|
||||
struct cvmx_l2d_fsyn1_s cn31xx;
|
||||
struct cvmx_l2d_fsyn1_s cn38xx;
|
||||
struct cvmx_l2d_fsyn1_s cn38xxp2;
|
||||
struct cvmx_l2d_fsyn1_s cn50xx;
|
||||
struct cvmx_l2d_fsyn1_s cn52xx;
|
||||
struct cvmx_l2d_fsyn1_s cn52xxp1;
|
||||
struct cvmx_l2d_fsyn1_s cn56xx;
|
||||
struct cvmx_l2d_fsyn1_s cn56xxp1;
|
||||
struct cvmx_l2d_fsyn1_s cn58xx;
|
||||
struct cvmx_l2d_fsyn1_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fus0 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fus0_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q0fus:34;
|
||||
#else
|
||||
uint64_t q0fus:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fus0_s cn30xx;
|
||||
struct cvmx_l2d_fus0_s cn31xx;
|
||||
struct cvmx_l2d_fus0_s cn38xx;
|
||||
struct cvmx_l2d_fus0_s cn38xxp2;
|
||||
struct cvmx_l2d_fus0_s cn50xx;
|
||||
struct cvmx_l2d_fus0_s cn52xx;
|
||||
struct cvmx_l2d_fus0_s cn52xxp1;
|
||||
struct cvmx_l2d_fus0_s cn56xx;
|
||||
struct cvmx_l2d_fus0_s cn56xxp1;
|
||||
struct cvmx_l2d_fus0_s cn58xx;
|
||||
struct cvmx_l2d_fus0_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fus1 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fus1_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q1fus:34;
|
||||
#else
|
||||
uint64_t q1fus:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fus1_s cn30xx;
|
||||
struct cvmx_l2d_fus1_s cn31xx;
|
||||
struct cvmx_l2d_fus1_s cn38xx;
|
||||
struct cvmx_l2d_fus1_s cn38xxp2;
|
||||
struct cvmx_l2d_fus1_s cn50xx;
|
||||
struct cvmx_l2d_fus1_s cn52xx;
|
||||
struct cvmx_l2d_fus1_s cn52xxp1;
|
||||
struct cvmx_l2d_fus1_s cn56xx;
|
||||
struct cvmx_l2d_fus1_s cn56xxp1;
|
||||
struct cvmx_l2d_fus1_s cn58xx;
|
||||
struct cvmx_l2d_fus1_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fus2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fus2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_34_63:30;
|
||||
uint64_t q2fus:34;
|
||||
#else
|
||||
uint64_t q2fus:34;
|
||||
uint64_t reserved_34_63:30;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fus2_s cn30xx;
|
||||
struct cvmx_l2d_fus2_s cn31xx;
|
||||
struct cvmx_l2d_fus2_s cn38xx;
|
||||
struct cvmx_l2d_fus2_s cn38xxp2;
|
||||
struct cvmx_l2d_fus2_s cn50xx;
|
||||
struct cvmx_l2d_fus2_s cn52xx;
|
||||
struct cvmx_l2d_fus2_s cn52xxp1;
|
||||
struct cvmx_l2d_fus2_s cn56xx;
|
||||
struct cvmx_l2d_fus2_s cn56xxp1;
|
||||
struct cvmx_l2d_fus2_s cn58xx;
|
||||
struct cvmx_l2d_fus2_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_l2d_fus3 {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2d_fus3_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_40_63:24;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_34_36:3;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t reserved_34_36:3;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_40_63:24;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2d_fus3_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_35_63:29;
|
||||
uint64_t crip_64k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_64k:1;
|
||||
uint64_t reserved_35_63:29;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_l2d_fus3_cn31xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_35_63:29;
|
||||
uint64_t crip_128k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_128k:1;
|
||||
uint64_t reserved_35_63:29;
|
||||
#endif
|
||||
} cn31xx;
|
||||
struct cvmx_l2d_fus3_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_36_63:28;
|
||||
uint64_t crip_256k:1;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t crip_256k:1;
|
||||
uint64_t reserved_36_63:28;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_l2d_fus3_cn38xx cn38xxp2;
|
||||
struct cvmx_l2d_fus3_cn50xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_40_63:24;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t crip_32k:1;
|
||||
uint64_t crip_64k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_64k:1;
|
||||
uint64_t crip_32k:1;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_40_63:24;
|
||||
#endif
|
||||
} cn50xx;
|
||||
struct cvmx_l2d_fus3_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_40_63:24;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t crip_128k:1;
|
||||
uint64_t crip_256k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_256k:1;
|
||||
uint64_t crip_128k:1;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_40_63:24;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_l2d_fus3_cn52xx cn52xxp1;
|
||||
struct cvmx_l2d_fus3_cn56xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_40_63:24;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t crip_1024k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_1024k:1;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t ema_ctl:3;
|
||||
uint64_t reserved_40_63:24;
|
||||
#endif
|
||||
} cn56xx;
|
||||
struct cvmx_l2d_fus3_cn56xx cn56xxp1;
|
||||
struct cvmx_l2d_fus3_cn58xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_39_63:25;
|
||||
uint64_t ema_ctl:2;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t crip_1024k:1;
|
||||
uint64_t q3fus:34;
|
||||
#else
|
||||
uint64_t q3fus:34;
|
||||
uint64_t crip_1024k:1;
|
||||
uint64_t crip_512k:1;
|
||||
uint64_t reserved_36_36:1;
|
||||
uint64_t ema_ctl:2;
|
||||
uint64_t reserved_39_63:25;
|
||||
#endif
|
||||
} cn58xx;
|
||||
struct cvmx_l2d_fus3_cn58xx cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
243
arch/mips/include/asm/octeon/cvmx-l2t-defs.h
Normal file
243
arch/mips/include/asm/octeon/cvmx-l2t-defs.h
Normal file
|
|
@ -0,0 +1,243 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_L2T_DEFS_H__
|
||||
#define __CVMX_L2T_DEFS_H__
|
||||
|
||||
#define CVMX_L2T_ERR (CVMX_ADD_IO_SEG(0x0001180080000008ull))
|
||||
|
||||
union cvmx_l2t_err {
|
||||
uint64_t u64;
|
||||
struct cvmx_l2t_err_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t fadru:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t fadr:10;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:10;
|
||||
uint64_t fset:3;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t fadru:1;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_l2t_err_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t reserved_23_23:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_19_20:2;
|
||||
uint64_t fadr:8;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:8;
|
||||
uint64_t reserved_19_20:2;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_23_23:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_l2t_err_cn31xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t reserved_23_23:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_20_20:1;
|
||||
uint64_t fadr:9;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:9;
|
||||
uint64_t reserved_20_20:1;
|
||||
uint64_t fset:2;
|
||||
uint64_t reserved_23_23:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn31xx;
|
||||
struct cvmx_l2t_err_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t fadr:10;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:10;
|
||||
uint64_t fset:3;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_l2t_err_cn38xx cn38xxp2;
|
||||
struct cvmx_l2t_err_cn50xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t reserved_18_20:3;
|
||||
uint64_t fadr:7;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:7;
|
||||
uint64_t reserved_18_20:3;
|
||||
uint64_t fset:3;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn50xx;
|
||||
struct cvmx_l2t_err_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t reserved_20_20:1;
|
||||
uint64_t fadr:9;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ecc_ena:1;
|
||||
#else
|
||||
uint64_t ecc_ena:1;
|
||||
uint64_t sec_intena:1;
|
||||
uint64_t ded_intena:1;
|
||||
uint64_t sec_err:1;
|
||||
uint64_t ded_err:1;
|
||||
uint64_t fsyn:6;
|
||||
uint64_t fadr:9;
|
||||
uint64_t reserved_20_20:1;
|
||||
uint64_t fset:3;
|
||||
uint64_t lckerr:1;
|
||||
uint64_t lck_intena:1;
|
||||
uint64_t lckerr2:1;
|
||||
uint64_t lck_intena2:1;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_l2t_err_cn52xx cn52xxp1;
|
||||
struct cvmx_l2t_err_s cn56xx;
|
||||
struct cvmx_l2t_err_s cn56xxp1;
|
||||
struct cvmx_l2t_err_s cn58xx;
|
||||
struct cvmx_l2t_err_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
292
arch/mips/include/asm/octeon/cvmx-led-defs.h
Normal file
292
arch/mips/include/asm/octeon/cvmx-led-defs.h
Normal file
|
|
@ -0,0 +1,292 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_LED_DEFS_H__
|
||||
#define __CVMX_LED_DEFS_H__
|
||||
|
||||
#define CVMX_LED_BLINK (CVMX_ADD_IO_SEG(0x0001180000001A48ull))
|
||||
#define CVMX_LED_CLK_PHASE (CVMX_ADD_IO_SEG(0x0001180000001A08ull))
|
||||
#define CVMX_LED_CYLON (CVMX_ADD_IO_SEG(0x0001180000001AF8ull))
|
||||
#define CVMX_LED_DBG (CVMX_ADD_IO_SEG(0x0001180000001A18ull))
|
||||
#define CVMX_LED_EN (CVMX_ADD_IO_SEG(0x0001180000001A00ull))
|
||||
#define CVMX_LED_POLARITY (CVMX_ADD_IO_SEG(0x0001180000001A50ull))
|
||||
#define CVMX_LED_PRT (CVMX_ADD_IO_SEG(0x0001180000001A10ull))
|
||||
#define CVMX_LED_PRT_FMT (CVMX_ADD_IO_SEG(0x0001180000001A30ull))
|
||||
#define CVMX_LED_PRT_STATUSX(offset) (CVMX_ADD_IO_SEG(0x0001180000001A80ull) + ((offset) & 7) * 8)
|
||||
#define CVMX_LED_UDD_CNTX(offset) (CVMX_ADD_IO_SEG(0x0001180000001A20ull) + ((offset) & 1) * 8)
|
||||
#define CVMX_LED_UDD_DATX(offset) (CVMX_ADD_IO_SEG(0x0001180000001A38ull) + ((offset) & 1) * 8)
|
||||
#define CVMX_LED_UDD_DAT_CLRX(offset) (CVMX_ADD_IO_SEG(0x0001180000001AC8ull) + ((offset) & 1) * 16)
|
||||
#define CVMX_LED_UDD_DAT_SETX(offset) (CVMX_ADD_IO_SEG(0x0001180000001AC0ull) + ((offset) & 1) * 16)
|
||||
|
||||
union cvmx_led_blink {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_blink_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t rate:8;
|
||||
#else
|
||||
uint64_t rate:8;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_blink_s cn38xx;
|
||||
struct cvmx_led_blink_s cn38xxp2;
|
||||
struct cvmx_led_blink_s cn56xx;
|
||||
struct cvmx_led_blink_s cn56xxp1;
|
||||
struct cvmx_led_blink_s cn58xx;
|
||||
struct cvmx_led_blink_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_clk_phase {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_clk_phase_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t phase:7;
|
||||
#else
|
||||
uint64_t phase:7;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_clk_phase_s cn38xx;
|
||||
struct cvmx_led_clk_phase_s cn38xxp2;
|
||||
struct cvmx_led_clk_phase_s cn56xx;
|
||||
struct cvmx_led_clk_phase_s cn56xxp1;
|
||||
struct cvmx_led_clk_phase_s cn58xx;
|
||||
struct cvmx_led_clk_phase_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_cylon {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_cylon_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t rate:16;
|
||||
#else
|
||||
uint64_t rate:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_cylon_s cn38xx;
|
||||
struct cvmx_led_cylon_s cn38xxp2;
|
||||
struct cvmx_led_cylon_s cn56xx;
|
||||
struct cvmx_led_cylon_s cn56xxp1;
|
||||
struct cvmx_led_cylon_s cn58xx;
|
||||
struct cvmx_led_cylon_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_dbg {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_dbg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t dbg_en:1;
|
||||
#else
|
||||
uint64_t dbg_en:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_dbg_s cn38xx;
|
||||
struct cvmx_led_dbg_s cn38xxp2;
|
||||
struct cvmx_led_dbg_s cn56xx;
|
||||
struct cvmx_led_dbg_s cn56xxp1;
|
||||
struct cvmx_led_dbg_s cn58xx;
|
||||
struct cvmx_led_dbg_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t en:1;
|
||||
#else
|
||||
uint64_t en:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_en_s cn38xx;
|
||||
struct cvmx_led_en_s cn38xxp2;
|
||||
struct cvmx_led_en_s cn56xx;
|
||||
struct cvmx_led_en_s cn56xxp1;
|
||||
struct cvmx_led_en_s cn58xx;
|
||||
struct cvmx_led_en_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_polarity {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_polarity_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t polarity:1;
|
||||
#else
|
||||
uint64_t polarity:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_polarity_s cn38xx;
|
||||
struct cvmx_led_polarity_s cn38xxp2;
|
||||
struct cvmx_led_polarity_s cn56xx;
|
||||
struct cvmx_led_polarity_s cn56xxp1;
|
||||
struct cvmx_led_polarity_s cn58xx;
|
||||
struct cvmx_led_polarity_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_prt {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_prt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t prt_en:8;
|
||||
#else
|
||||
uint64_t prt_en:8;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_prt_s cn38xx;
|
||||
struct cvmx_led_prt_s cn38xxp2;
|
||||
struct cvmx_led_prt_s cn56xx;
|
||||
struct cvmx_led_prt_s cn56xxp1;
|
||||
struct cvmx_led_prt_s cn58xx;
|
||||
struct cvmx_led_prt_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_prt_fmt {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_prt_fmt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t format:4;
|
||||
#else
|
||||
uint64_t format:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_prt_fmt_s cn38xx;
|
||||
struct cvmx_led_prt_fmt_s cn38xxp2;
|
||||
struct cvmx_led_prt_fmt_s cn56xx;
|
||||
struct cvmx_led_prt_fmt_s cn56xxp1;
|
||||
struct cvmx_led_prt_fmt_s cn58xx;
|
||||
struct cvmx_led_prt_fmt_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_prt_statusx {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_prt_statusx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t status:6;
|
||||
#else
|
||||
uint64_t status:6;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_prt_statusx_s cn38xx;
|
||||
struct cvmx_led_prt_statusx_s cn38xxp2;
|
||||
struct cvmx_led_prt_statusx_s cn56xx;
|
||||
struct cvmx_led_prt_statusx_s cn56xxp1;
|
||||
struct cvmx_led_prt_statusx_s cn58xx;
|
||||
struct cvmx_led_prt_statusx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_udd_cntx {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_udd_cntx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t cnt:6;
|
||||
#else
|
||||
uint64_t cnt:6;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_udd_cntx_s cn38xx;
|
||||
struct cvmx_led_udd_cntx_s cn38xxp2;
|
||||
struct cvmx_led_udd_cntx_s cn56xx;
|
||||
struct cvmx_led_udd_cntx_s cn56xxp1;
|
||||
struct cvmx_led_udd_cntx_s cn58xx;
|
||||
struct cvmx_led_udd_cntx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_udd_datx {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_udd_datx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t dat:32;
|
||||
#else
|
||||
uint64_t dat:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_udd_datx_s cn38xx;
|
||||
struct cvmx_led_udd_datx_s cn38xxp2;
|
||||
struct cvmx_led_udd_datx_s cn56xx;
|
||||
struct cvmx_led_udd_datx_s cn56xxp1;
|
||||
struct cvmx_led_udd_datx_s cn58xx;
|
||||
struct cvmx_led_udd_datx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_udd_dat_clrx {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_udd_dat_clrx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t clr:32;
|
||||
#else
|
||||
uint64_t clr:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_udd_dat_clrx_s cn38xx;
|
||||
struct cvmx_led_udd_dat_clrx_s cn38xxp2;
|
||||
struct cvmx_led_udd_dat_clrx_s cn56xx;
|
||||
struct cvmx_led_udd_dat_clrx_s cn56xxp1;
|
||||
struct cvmx_led_udd_dat_clrx_s cn58xx;
|
||||
struct cvmx_led_udd_dat_clrx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_led_udd_dat_setx {
|
||||
uint64_t u64;
|
||||
struct cvmx_led_udd_dat_setx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t set:32;
|
||||
#else
|
||||
uint64_t set:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_led_udd_dat_setx_s cn38xx;
|
||||
struct cvmx_led_udd_dat_setx_s cn38xxp2;
|
||||
struct cvmx_led_udd_dat_setx_s cn56xx;
|
||||
struct cvmx_led_udd_dat_setx_s cn56xxp1;
|
||||
struct cvmx_led_udd_dat_setx_s cn58xx;
|
||||
struct cvmx_led_udd_dat_setx_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
3457
arch/mips/include/asm/octeon/cvmx-lmcx-defs.h
Normal file
3457
arch/mips/include/asm/octeon/cvmx-lmcx-defs.h
Normal file
File diff suppressed because it is too large
Load diff
506
arch/mips/include/asm/octeon/cvmx-mdio.h
Normal file
506
arch/mips/include/asm/octeon/cvmx-mdio.h
Normal file
|
|
@ -0,0 +1,506 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* Interface to the SMI/MDIO hardware, including support for both IEEE 802.3
|
||||
* clause 22 and clause 45 operations.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_MIO_H__
|
||||
#define __CVMX_MIO_H__
|
||||
|
||||
#include <asm/octeon/cvmx-smix-defs.h>
|
||||
|
||||
/**
|
||||
* PHY register 0 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_CONTROL 0
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t reset:1;
|
||||
uint16_t loopback:1;
|
||||
uint16_t speed_lsb:1;
|
||||
uint16_t autoneg_enable:1;
|
||||
uint16_t power_down:1;
|
||||
uint16_t isolate:1;
|
||||
uint16_t restart_autoneg:1;
|
||||
uint16_t duplex:1;
|
||||
uint16_t collision_test:1;
|
||||
uint16_t speed_msb:1;
|
||||
uint16_t unidirectional_enable:1;
|
||||
uint16_t reserved_0_4:5;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_control_t;
|
||||
|
||||
/**
|
||||
* PHY register 1 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_STATUS 1
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t capable_100base_t4:1;
|
||||
uint16_t capable_100base_x_full:1;
|
||||
uint16_t capable_100base_x_half:1;
|
||||
uint16_t capable_10_full:1;
|
||||
uint16_t capable_10_half:1;
|
||||
uint16_t capable_100base_t2_full:1;
|
||||
uint16_t capable_100base_t2_half:1;
|
||||
uint16_t capable_extended_status:1;
|
||||
uint16_t capable_unidirectional:1;
|
||||
uint16_t capable_mf_preamble_suppression:1;
|
||||
uint16_t autoneg_complete:1;
|
||||
uint16_t remote_fault:1;
|
||||
uint16_t capable_autoneg:1;
|
||||
uint16_t link_status:1;
|
||||
uint16_t jabber_detect:1;
|
||||
uint16_t capable_extended_registers:1;
|
||||
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_status_t;
|
||||
|
||||
/**
|
||||
* PHY register 2 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_ID1 2
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t oui_bits_3_18;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_id1_t;
|
||||
|
||||
/**
|
||||
* PHY register 3 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_ID2 3
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t oui_bits_19_24:6;
|
||||
uint16_t model:6;
|
||||
uint16_t revision:4;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_id2_t;
|
||||
|
||||
/**
|
||||
* PHY register 4 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_AUTONEG_ADVER 4
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t next_page:1;
|
||||
uint16_t reserved_14:1;
|
||||
uint16_t remote_fault:1;
|
||||
uint16_t reserved_12:1;
|
||||
uint16_t asymmetric_pause:1;
|
||||
uint16_t pause:1;
|
||||
uint16_t advert_100base_t4:1;
|
||||
uint16_t advert_100base_tx_full:1;
|
||||
uint16_t advert_100base_tx_half:1;
|
||||
uint16_t advert_10base_tx_full:1;
|
||||
uint16_t advert_10base_tx_half:1;
|
||||
uint16_t selector:5;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_autoneg_adver_t;
|
||||
|
||||
/**
|
||||
* PHY register 5 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_LINK_PARTNER_ABILITY 5
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t next_page:1;
|
||||
uint16_t ack:1;
|
||||
uint16_t remote_fault:1;
|
||||
uint16_t reserved_12:1;
|
||||
uint16_t asymmetric_pause:1;
|
||||
uint16_t pause:1;
|
||||
uint16_t advert_100base_t4:1;
|
||||
uint16_t advert_100base_tx_full:1;
|
||||
uint16_t advert_100base_tx_half:1;
|
||||
uint16_t advert_10base_tx_full:1;
|
||||
uint16_t advert_10base_tx_half:1;
|
||||
uint16_t selector:5;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_link_partner_ability_t;
|
||||
|
||||
/**
|
||||
* PHY register 6 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_AUTONEG_EXPANSION 6
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t reserved_5_15:11;
|
||||
uint16_t parallel_detection_fault:1;
|
||||
uint16_t link_partner_next_page_capable:1;
|
||||
uint16_t local_next_page_capable:1;
|
||||
uint16_t page_received:1;
|
||||
uint16_t link_partner_autoneg_capable:1;
|
||||
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_autoneg_expansion_t;
|
||||
|
||||
/**
|
||||
* PHY register 9 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_CONTROL_1000 9
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t test_mode:3;
|
||||
uint16_t manual_master_slave:1;
|
||||
uint16_t master:1;
|
||||
uint16_t port_type:1;
|
||||
uint16_t advert_1000base_t_full:1;
|
||||
uint16_t advert_1000base_t_half:1;
|
||||
uint16_t reserved_0_7:8;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_control_1000_t;
|
||||
|
||||
/**
|
||||
* PHY register 10 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_STATUS_1000 10
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t master_slave_fault:1;
|
||||
uint16_t is_master:1;
|
||||
uint16_t local_receiver_ok:1;
|
||||
uint16_t remote_receiver_ok:1;
|
||||
uint16_t remote_capable_1000base_t_full:1;
|
||||
uint16_t remote_capable_1000base_t_half:1;
|
||||
uint16_t reserved_8_9:2;
|
||||
uint16_t idle_error_count:8;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_status_1000_t;
|
||||
|
||||
/**
|
||||
* PHY register 15 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_EXTENDED_STATUS 15
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t capable_1000base_x_full:1;
|
||||
uint16_t capable_1000base_x_half:1;
|
||||
uint16_t capable_1000base_t_full:1;
|
||||
uint16_t capable_1000base_t_half:1;
|
||||
uint16_t reserved_0_11:12;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_extended_status_t;
|
||||
|
||||
/**
|
||||
* PHY register 13 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_MMD_CONTROL 13
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t function:2;
|
||||
uint16_t reserved_5_13:9;
|
||||
uint16_t devad:5;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_mmd_control_t;
|
||||
|
||||
/**
|
||||
* PHY register 14 from the 802.3 spec
|
||||
*/
|
||||
#define CVMX_MDIO_PHY_REG_MMD_ADDRESS_DATA 14
|
||||
typedef union {
|
||||
uint16_t u16;
|
||||
struct {
|
||||
uint16_t address_data:16;
|
||||
} s;
|
||||
} cvmx_mdio_phy_reg_mmd_address_data_t;
|
||||
|
||||
/* Operating request encodings. */
|
||||
#define MDIO_CLAUSE_22_WRITE 0
|
||||
#define MDIO_CLAUSE_22_READ 1
|
||||
|
||||
#define MDIO_CLAUSE_45_ADDRESS 0
|
||||
#define MDIO_CLAUSE_45_WRITE 1
|
||||
#define MDIO_CLAUSE_45_READ_INC 2
|
||||
#define MDIO_CLAUSE_45_READ 3
|
||||
|
||||
/* MMD identifiers, mostly for accessing devices within XENPAK modules. */
|
||||
#define CVMX_MMD_DEVICE_PMA_PMD 1
|
||||
#define CVMX_MMD_DEVICE_WIS 2
|
||||
#define CVMX_MMD_DEVICE_PCS 3
|
||||
#define CVMX_MMD_DEVICE_PHY_XS 4
|
||||
#define CVMX_MMD_DEVICE_DTS_XS 5
|
||||
#define CVMX_MMD_DEVICE_TC 6
|
||||
#define CVMX_MMD_DEVICE_CL22_EXT 29
|
||||
#define CVMX_MMD_DEVICE_VENDOR_1 30
|
||||
#define CVMX_MMD_DEVICE_VENDOR_2 31
|
||||
|
||||
/* Helper function to put MDIO interface into clause 45 mode */
|
||||
static inline void __cvmx_mdio_set_clause45_mode(int bus_id)
|
||||
{
|
||||
union cvmx_smix_clk smi_clk;
|
||||
/* Put bus into clause 45 mode */
|
||||
smi_clk.u64 = cvmx_read_csr(CVMX_SMIX_CLK(bus_id));
|
||||
smi_clk.s.mode = 1;
|
||||
smi_clk.s.preamble = 1;
|
||||
cvmx_write_csr(CVMX_SMIX_CLK(bus_id), smi_clk.u64);
|
||||
}
|
||||
|
||||
/* Helper function to put MDIO interface into clause 22 mode */
|
||||
static inline void __cvmx_mdio_set_clause22_mode(int bus_id)
|
||||
{
|
||||
union cvmx_smix_clk smi_clk;
|
||||
/* Put bus into clause 22 mode */
|
||||
smi_clk.u64 = cvmx_read_csr(CVMX_SMIX_CLK(bus_id));
|
||||
smi_clk.s.mode = 0;
|
||||
cvmx_write_csr(CVMX_SMIX_CLK(bus_id), smi_clk.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an MII read. This function is used to read PHY
|
||||
* registers controlling auto negotiation.
|
||||
*
|
||||
* @bus_id: MDIO bus number. Zero on most chips, but some chips (ex CN56XX)
|
||||
* support multiple busses.
|
||||
* @phy_id: The MII phy id
|
||||
* @location: Register location to read
|
||||
*
|
||||
* Returns Result from the read or -1 on failure
|
||||
*/
|
||||
static inline int cvmx_mdio_read(int bus_id, int phy_id, int location)
|
||||
{
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_rd_dat smi_rd;
|
||||
int timeout = 1000;
|
||||
|
||||
if (octeon_has_feature(OCTEON_FEATURE_MDIO_CLAUSE_45))
|
||||
__cvmx_mdio_set_clause22_mode(bus_id);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_22_READ;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = location;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_rd.u64 = cvmx_read_csr(CVMX_SMIX_RD_DAT(bus_id));
|
||||
} while (smi_rd.s.pending && timeout--);
|
||||
|
||||
if (smi_rd.s.val)
|
||||
return smi_rd.s.dat;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an MII write. This function is used to write PHY
|
||||
* registers controlling auto negotiation.
|
||||
*
|
||||
* @bus_id: MDIO bus number. Zero on most chips, but some chips (ex CN56XX)
|
||||
* support multiple busses.
|
||||
* @phy_id: The MII phy id
|
||||
* @location: Register location to write
|
||||
* @val: Value to write
|
||||
*
|
||||
* Returns -1 on error
|
||||
* 0 on success
|
||||
*/
|
||||
static inline int cvmx_mdio_write(int bus_id, int phy_id, int location, int val)
|
||||
{
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_wr_dat smi_wr;
|
||||
int timeout = 1000;
|
||||
|
||||
if (octeon_has_feature(OCTEON_FEATURE_MDIO_CLAUSE_45))
|
||||
__cvmx_mdio_set_clause22_mode(bus_id);
|
||||
|
||||
smi_wr.u64 = 0;
|
||||
smi_wr.s.dat = val;
|
||||
cvmx_write_csr(CVMX_SMIX_WR_DAT(bus_id), smi_wr.u64);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_22_WRITE;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = location;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_wr.u64 = cvmx_read_csr(CVMX_SMIX_WR_DAT(bus_id));
|
||||
} while (smi_wr.s.pending && --timeout);
|
||||
if (timeout <= 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an IEEE 802.3 clause 45 MII read. This function is used to
|
||||
* read PHY registers controlling auto negotiation.
|
||||
*
|
||||
* @bus_id: MDIO bus number. Zero on most chips, but some chips (ex CN56XX)
|
||||
* support multiple busses.
|
||||
* @phy_id: The MII phy id
|
||||
* @device: MDIO Managable Device (MMD) id
|
||||
* @location: Register location to read
|
||||
*
|
||||
* Returns Result from the read or -1 on failure
|
||||
*/
|
||||
|
||||
static inline int cvmx_mdio_45_read(int bus_id, int phy_id, int device,
|
||||
int location)
|
||||
{
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_rd_dat smi_rd;
|
||||
union cvmx_smix_wr_dat smi_wr;
|
||||
int timeout = 1000;
|
||||
|
||||
if (!octeon_has_feature(OCTEON_FEATURE_MDIO_CLAUSE_45))
|
||||
return -1;
|
||||
|
||||
__cvmx_mdio_set_clause45_mode(bus_id);
|
||||
|
||||
smi_wr.u64 = 0;
|
||||
smi_wr.s.dat = location;
|
||||
cvmx_write_csr(CVMX_SMIX_WR_DAT(bus_id), smi_wr.u64);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_45_ADDRESS;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = device;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_wr.u64 = cvmx_read_csr(CVMX_SMIX_WR_DAT(bus_id));
|
||||
} while (smi_wr.s.pending && --timeout);
|
||||
if (timeout <= 0) {
|
||||
cvmx_dprintf("cvmx_mdio_45_read: bus_id %d phy_id %2d "
|
||||
"device %2d register %2d TIME OUT(address)\n",
|
||||
bus_id, phy_id, device, location);
|
||||
return -1;
|
||||
}
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_45_READ;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = device;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_rd.u64 = cvmx_read_csr(CVMX_SMIX_RD_DAT(bus_id));
|
||||
} while (smi_rd.s.pending && --timeout);
|
||||
|
||||
if (timeout <= 0) {
|
||||
cvmx_dprintf("cvmx_mdio_45_read: bus_id %d phy_id %2d "
|
||||
"device %2d register %2d TIME OUT(data)\n",
|
||||
bus_id, phy_id, device, location);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (smi_rd.s.val)
|
||||
return smi_rd.s.dat;
|
||||
else {
|
||||
cvmx_dprintf("cvmx_mdio_45_read: bus_id %d phy_id %2d "
|
||||
"device %2d register %2d INVALID READ\n",
|
||||
bus_id, phy_id, device, location);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an IEEE 802.3 clause 45 MII write. This function is used to
|
||||
* write PHY registers controlling auto negotiation.
|
||||
*
|
||||
* @bus_id: MDIO bus number. Zero on most chips, but some chips (ex CN56XX)
|
||||
* support multiple busses.
|
||||
* @phy_id: The MII phy id
|
||||
* @device: MDIO Managable Device (MMD) id
|
||||
* @location: Register location to write
|
||||
* @val: Value to write
|
||||
*
|
||||
* Returns -1 on error
|
||||
* 0 on success
|
||||
*/
|
||||
static inline int cvmx_mdio_45_write(int bus_id, int phy_id, int device,
|
||||
int location, int val)
|
||||
{
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_wr_dat smi_wr;
|
||||
int timeout = 1000;
|
||||
|
||||
if (!octeon_has_feature(OCTEON_FEATURE_MDIO_CLAUSE_45))
|
||||
return -1;
|
||||
|
||||
__cvmx_mdio_set_clause45_mode(bus_id);
|
||||
|
||||
smi_wr.u64 = 0;
|
||||
smi_wr.s.dat = location;
|
||||
cvmx_write_csr(CVMX_SMIX_WR_DAT(bus_id), smi_wr.u64);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_45_ADDRESS;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = device;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_wr.u64 = cvmx_read_csr(CVMX_SMIX_WR_DAT(bus_id));
|
||||
} while (smi_wr.s.pending && --timeout);
|
||||
if (timeout <= 0)
|
||||
return -1;
|
||||
|
||||
smi_wr.u64 = 0;
|
||||
smi_wr.s.dat = val;
|
||||
cvmx_write_csr(CVMX_SMIX_WR_DAT(bus_id), smi_wr.u64);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = MDIO_CLAUSE_45_WRITE;
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = device;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(bus_id), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
cvmx_wait(1000);
|
||||
smi_wr.u64 = cvmx_read_csr(CVMX_SMIX_WR_DAT(bus_id));
|
||||
} while (smi_wr.s.pending && --timeout);
|
||||
if (timeout <= 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
5215
arch/mips/include/asm/octeon/cvmx-mio-defs.h
Normal file
5215
arch/mips/include/asm/octeon/cvmx-mio-defs.h
Normal file
File diff suppressed because it is too large
Load diff
566
arch/mips/include/asm/octeon/cvmx-mixx-defs.h
Normal file
566
arch/mips/include/asm/octeon/cvmx-mixx-defs.h
Normal file
|
|
@ -0,0 +1,566 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_MIXX_DEFS_H__
|
||||
#define __CVMX_MIXX_DEFS_H__
|
||||
|
||||
#define CVMX_MIXX_BIST(offset) (CVMX_ADD_IO_SEG(0x0001070000100078ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_CTL(offset) (CVMX_ADD_IO_SEG(0x0001070000100020ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_INTENA(offset) (CVMX_ADD_IO_SEG(0x0001070000100050ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_IRCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100030ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_IRHWM(offset) (CVMX_ADD_IO_SEG(0x0001070000100028ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_IRING1(offset) (CVMX_ADD_IO_SEG(0x0001070000100010ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_IRING2(offset) (CVMX_ADD_IO_SEG(0x0001070000100018ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_ISR(offset) (CVMX_ADD_IO_SEG(0x0001070000100048ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_ORCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100040ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_ORHWM(offset) (CVMX_ADD_IO_SEG(0x0001070000100038ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_ORING1(offset) (CVMX_ADD_IO_SEG(0x0001070000100000ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_ORING2(offset) (CVMX_ADD_IO_SEG(0x0001070000100008ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_REMCNT(offset) (CVMX_ADD_IO_SEG(0x0001070000100058ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_TSCTL(offset) (CVMX_ADD_IO_SEG(0x0001070000100068ull) + ((offset) & 1) * 2048)
|
||||
#define CVMX_MIXX_TSTAMP(offset) (CVMX_ADD_IO_SEG(0x0001070000100060ull) + ((offset) & 1) * 2048)
|
||||
|
||||
union cvmx_mixx_bist {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_bist_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t opfdat:1;
|
||||
uint64_t mrgdat:1;
|
||||
uint64_t mrqdat:1;
|
||||
uint64_t ipfdat:1;
|
||||
uint64_t irfdat:1;
|
||||
uint64_t orfdat:1;
|
||||
#else
|
||||
uint64_t orfdat:1;
|
||||
uint64_t irfdat:1;
|
||||
uint64_t ipfdat:1;
|
||||
uint64_t mrqdat:1;
|
||||
uint64_t mrgdat:1;
|
||||
uint64_t opfdat:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_bist_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t mrqdat:1;
|
||||
uint64_t ipfdat:1;
|
||||
uint64_t irfdat:1;
|
||||
uint64_t orfdat:1;
|
||||
#else
|
||||
uint64_t orfdat:1;
|
||||
uint64_t irfdat:1;
|
||||
uint64_t ipfdat:1;
|
||||
uint64_t mrqdat:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_bist_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_bist_cn52xx cn56xx;
|
||||
struct cvmx_mixx_bist_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_bist_s cn61xx;
|
||||
struct cvmx_mixx_bist_s cn63xx;
|
||||
struct cvmx_mixx_bist_s cn63xxp1;
|
||||
struct cvmx_mixx_bist_s cn66xx;
|
||||
struct cvmx_mixx_bist_s cn68xx;
|
||||
struct cvmx_mixx_bist_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t ts_thresh:4;
|
||||
uint64_t crc_strip:1;
|
||||
uint64_t busy:1;
|
||||
uint64_t en:1;
|
||||
uint64_t reset:1;
|
||||
uint64_t lendian:1;
|
||||
uint64_t nbtarb:1;
|
||||
uint64_t mrq_hwm:2;
|
||||
#else
|
||||
uint64_t mrq_hwm:2;
|
||||
uint64_t nbtarb:1;
|
||||
uint64_t lendian:1;
|
||||
uint64_t reset:1;
|
||||
uint64_t en:1;
|
||||
uint64_t busy:1;
|
||||
uint64_t crc_strip:1;
|
||||
uint64_t ts_thresh:4;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_ctl_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t crc_strip:1;
|
||||
uint64_t busy:1;
|
||||
uint64_t en:1;
|
||||
uint64_t reset:1;
|
||||
uint64_t lendian:1;
|
||||
uint64_t nbtarb:1;
|
||||
uint64_t mrq_hwm:2;
|
||||
#else
|
||||
uint64_t mrq_hwm:2;
|
||||
uint64_t nbtarb:1;
|
||||
uint64_t lendian:1;
|
||||
uint64_t reset:1;
|
||||
uint64_t en:1;
|
||||
uint64_t busy:1;
|
||||
uint64_t crc_strip:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_ctl_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_ctl_cn52xx cn56xx;
|
||||
struct cvmx_mixx_ctl_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_ctl_s cn61xx;
|
||||
struct cvmx_mixx_ctl_s cn63xx;
|
||||
struct cvmx_mixx_ctl_s cn63xxp1;
|
||||
struct cvmx_mixx_ctl_s cn66xx;
|
||||
struct cvmx_mixx_ctl_s cn68xx;
|
||||
struct cvmx_mixx_ctl_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_intena {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_intena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t tsena:1;
|
||||
uint64_t orunena:1;
|
||||
uint64_t irunena:1;
|
||||
uint64_t data_drpena:1;
|
||||
uint64_t ithena:1;
|
||||
uint64_t othena:1;
|
||||
uint64_t ivfena:1;
|
||||
uint64_t ovfena:1;
|
||||
#else
|
||||
uint64_t ovfena:1;
|
||||
uint64_t ivfena:1;
|
||||
uint64_t othena:1;
|
||||
uint64_t ithena:1;
|
||||
uint64_t data_drpena:1;
|
||||
uint64_t irunena:1;
|
||||
uint64_t orunena:1;
|
||||
uint64_t tsena:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_intena_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t orunena:1;
|
||||
uint64_t irunena:1;
|
||||
uint64_t data_drpena:1;
|
||||
uint64_t ithena:1;
|
||||
uint64_t othena:1;
|
||||
uint64_t ivfena:1;
|
||||
uint64_t ovfena:1;
|
||||
#else
|
||||
uint64_t ovfena:1;
|
||||
uint64_t ivfena:1;
|
||||
uint64_t othena:1;
|
||||
uint64_t ithena:1;
|
||||
uint64_t data_drpena:1;
|
||||
uint64_t irunena:1;
|
||||
uint64_t orunena:1;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_intena_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_intena_cn52xx cn56xx;
|
||||
struct cvmx_mixx_intena_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_intena_s cn61xx;
|
||||
struct cvmx_mixx_intena_s cn63xx;
|
||||
struct cvmx_mixx_intena_s cn63xxp1;
|
||||
struct cvmx_mixx_intena_s cn66xx;
|
||||
struct cvmx_mixx_intena_s cn68xx;
|
||||
struct cvmx_mixx_intena_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_ircnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_ircnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t ircnt:20;
|
||||
#else
|
||||
uint64_t ircnt:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_ircnt_s cn52xx;
|
||||
struct cvmx_mixx_ircnt_s cn52xxp1;
|
||||
struct cvmx_mixx_ircnt_s cn56xx;
|
||||
struct cvmx_mixx_ircnt_s cn56xxp1;
|
||||
struct cvmx_mixx_ircnt_s cn61xx;
|
||||
struct cvmx_mixx_ircnt_s cn63xx;
|
||||
struct cvmx_mixx_ircnt_s cn63xxp1;
|
||||
struct cvmx_mixx_ircnt_s cn66xx;
|
||||
struct cvmx_mixx_ircnt_s cn68xx;
|
||||
struct cvmx_mixx_ircnt_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_irhwm {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_irhwm_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_40_63:24;
|
||||
uint64_t ibplwm:20;
|
||||
uint64_t irhwm:20;
|
||||
#else
|
||||
uint64_t irhwm:20;
|
||||
uint64_t ibplwm:20;
|
||||
uint64_t reserved_40_63:24;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_irhwm_s cn52xx;
|
||||
struct cvmx_mixx_irhwm_s cn52xxp1;
|
||||
struct cvmx_mixx_irhwm_s cn56xx;
|
||||
struct cvmx_mixx_irhwm_s cn56xxp1;
|
||||
struct cvmx_mixx_irhwm_s cn61xx;
|
||||
struct cvmx_mixx_irhwm_s cn63xx;
|
||||
struct cvmx_mixx_irhwm_s cn63xxp1;
|
||||
struct cvmx_mixx_irhwm_s cn66xx;
|
||||
struct cvmx_mixx_irhwm_s cn68xx;
|
||||
struct cvmx_mixx_irhwm_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_iring1 {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_iring1_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_60_63:4;
|
||||
uint64_t isize:20;
|
||||
uint64_t ibase:37;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t ibase:37;
|
||||
uint64_t isize:20;
|
||||
uint64_t reserved_60_63:4;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_iring1_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_60_63:4;
|
||||
uint64_t isize:20;
|
||||
uint64_t reserved_36_39:4;
|
||||
uint64_t ibase:33;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t ibase:33;
|
||||
uint64_t reserved_36_39:4;
|
||||
uint64_t isize:20;
|
||||
uint64_t reserved_60_63:4;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_iring1_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_iring1_cn52xx cn56xx;
|
||||
struct cvmx_mixx_iring1_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_iring1_s cn61xx;
|
||||
struct cvmx_mixx_iring1_s cn63xx;
|
||||
struct cvmx_mixx_iring1_s cn63xxp1;
|
||||
struct cvmx_mixx_iring1_s cn66xx;
|
||||
struct cvmx_mixx_iring1_s cn68xx;
|
||||
struct cvmx_mixx_iring1_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_iring2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_iring2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_52_63:12;
|
||||
uint64_t itlptr:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t idbell:20;
|
||||
#else
|
||||
uint64_t idbell:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t itlptr:20;
|
||||
uint64_t reserved_52_63:12;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_iring2_s cn52xx;
|
||||
struct cvmx_mixx_iring2_s cn52xxp1;
|
||||
struct cvmx_mixx_iring2_s cn56xx;
|
||||
struct cvmx_mixx_iring2_s cn56xxp1;
|
||||
struct cvmx_mixx_iring2_s cn61xx;
|
||||
struct cvmx_mixx_iring2_s cn63xx;
|
||||
struct cvmx_mixx_iring2_s cn63xxp1;
|
||||
struct cvmx_mixx_iring2_s cn66xx;
|
||||
struct cvmx_mixx_iring2_s cn68xx;
|
||||
struct cvmx_mixx_iring2_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_isr {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_isr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t ts:1;
|
||||
uint64_t orun:1;
|
||||
uint64_t irun:1;
|
||||
uint64_t data_drp:1;
|
||||
uint64_t irthresh:1;
|
||||
uint64_t orthresh:1;
|
||||
uint64_t idblovf:1;
|
||||
uint64_t odblovf:1;
|
||||
#else
|
||||
uint64_t odblovf:1;
|
||||
uint64_t idblovf:1;
|
||||
uint64_t orthresh:1;
|
||||
uint64_t irthresh:1;
|
||||
uint64_t data_drp:1;
|
||||
uint64_t irun:1;
|
||||
uint64_t orun:1;
|
||||
uint64_t ts:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_isr_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t orun:1;
|
||||
uint64_t irun:1;
|
||||
uint64_t data_drp:1;
|
||||
uint64_t irthresh:1;
|
||||
uint64_t orthresh:1;
|
||||
uint64_t idblovf:1;
|
||||
uint64_t odblovf:1;
|
||||
#else
|
||||
uint64_t odblovf:1;
|
||||
uint64_t idblovf:1;
|
||||
uint64_t orthresh:1;
|
||||
uint64_t irthresh:1;
|
||||
uint64_t data_drp:1;
|
||||
uint64_t irun:1;
|
||||
uint64_t orun:1;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_isr_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_isr_cn52xx cn56xx;
|
||||
struct cvmx_mixx_isr_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_isr_s cn61xx;
|
||||
struct cvmx_mixx_isr_s cn63xx;
|
||||
struct cvmx_mixx_isr_s cn63xxp1;
|
||||
struct cvmx_mixx_isr_s cn66xx;
|
||||
struct cvmx_mixx_isr_s cn68xx;
|
||||
struct cvmx_mixx_isr_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_orcnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_orcnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t orcnt:20;
|
||||
#else
|
||||
uint64_t orcnt:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_orcnt_s cn52xx;
|
||||
struct cvmx_mixx_orcnt_s cn52xxp1;
|
||||
struct cvmx_mixx_orcnt_s cn56xx;
|
||||
struct cvmx_mixx_orcnt_s cn56xxp1;
|
||||
struct cvmx_mixx_orcnt_s cn61xx;
|
||||
struct cvmx_mixx_orcnt_s cn63xx;
|
||||
struct cvmx_mixx_orcnt_s cn63xxp1;
|
||||
struct cvmx_mixx_orcnt_s cn66xx;
|
||||
struct cvmx_mixx_orcnt_s cn68xx;
|
||||
struct cvmx_mixx_orcnt_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_orhwm {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_orhwm_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t orhwm:20;
|
||||
#else
|
||||
uint64_t orhwm:20;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_orhwm_s cn52xx;
|
||||
struct cvmx_mixx_orhwm_s cn52xxp1;
|
||||
struct cvmx_mixx_orhwm_s cn56xx;
|
||||
struct cvmx_mixx_orhwm_s cn56xxp1;
|
||||
struct cvmx_mixx_orhwm_s cn61xx;
|
||||
struct cvmx_mixx_orhwm_s cn63xx;
|
||||
struct cvmx_mixx_orhwm_s cn63xxp1;
|
||||
struct cvmx_mixx_orhwm_s cn66xx;
|
||||
struct cvmx_mixx_orhwm_s cn68xx;
|
||||
struct cvmx_mixx_orhwm_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_oring1 {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_oring1_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_60_63:4;
|
||||
uint64_t osize:20;
|
||||
uint64_t obase:37;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t obase:37;
|
||||
uint64_t osize:20;
|
||||
uint64_t reserved_60_63:4;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_oring1_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_60_63:4;
|
||||
uint64_t osize:20;
|
||||
uint64_t reserved_36_39:4;
|
||||
uint64_t obase:33;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t obase:33;
|
||||
uint64_t reserved_36_39:4;
|
||||
uint64_t osize:20;
|
||||
uint64_t reserved_60_63:4;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_mixx_oring1_cn52xx cn52xxp1;
|
||||
struct cvmx_mixx_oring1_cn52xx cn56xx;
|
||||
struct cvmx_mixx_oring1_cn52xx cn56xxp1;
|
||||
struct cvmx_mixx_oring1_s cn61xx;
|
||||
struct cvmx_mixx_oring1_s cn63xx;
|
||||
struct cvmx_mixx_oring1_s cn63xxp1;
|
||||
struct cvmx_mixx_oring1_s cn66xx;
|
||||
struct cvmx_mixx_oring1_s cn68xx;
|
||||
struct cvmx_mixx_oring1_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_oring2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_oring2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_52_63:12;
|
||||
uint64_t otlptr:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t odbell:20;
|
||||
#else
|
||||
uint64_t odbell:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t otlptr:20;
|
||||
uint64_t reserved_52_63:12;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_oring2_s cn52xx;
|
||||
struct cvmx_mixx_oring2_s cn52xxp1;
|
||||
struct cvmx_mixx_oring2_s cn56xx;
|
||||
struct cvmx_mixx_oring2_s cn56xxp1;
|
||||
struct cvmx_mixx_oring2_s cn61xx;
|
||||
struct cvmx_mixx_oring2_s cn63xx;
|
||||
struct cvmx_mixx_oring2_s cn63xxp1;
|
||||
struct cvmx_mixx_oring2_s cn66xx;
|
||||
struct cvmx_mixx_oring2_s cn68xx;
|
||||
struct cvmx_mixx_oring2_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_remcnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_remcnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_52_63:12;
|
||||
uint64_t iremcnt:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t oremcnt:20;
|
||||
#else
|
||||
uint64_t oremcnt:20;
|
||||
uint64_t reserved_20_31:12;
|
||||
uint64_t iremcnt:20;
|
||||
uint64_t reserved_52_63:12;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_remcnt_s cn52xx;
|
||||
struct cvmx_mixx_remcnt_s cn52xxp1;
|
||||
struct cvmx_mixx_remcnt_s cn56xx;
|
||||
struct cvmx_mixx_remcnt_s cn56xxp1;
|
||||
struct cvmx_mixx_remcnt_s cn61xx;
|
||||
struct cvmx_mixx_remcnt_s cn63xx;
|
||||
struct cvmx_mixx_remcnt_s cn63xxp1;
|
||||
struct cvmx_mixx_remcnt_s cn66xx;
|
||||
struct cvmx_mixx_remcnt_s cn68xx;
|
||||
struct cvmx_mixx_remcnt_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_tsctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_tsctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_21_63:43;
|
||||
uint64_t tsavl:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t tstot:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t tscnt:5;
|
||||
#else
|
||||
uint64_t tscnt:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t tstot:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t tsavl:5;
|
||||
uint64_t reserved_21_63:43;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_tsctl_s cn61xx;
|
||||
struct cvmx_mixx_tsctl_s cn63xx;
|
||||
struct cvmx_mixx_tsctl_s cn63xxp1;
|
||||
struct cvmx_mixx_tsctl_s cn66xx;
|
||||
struct cvmx_mixx_tsctl_s cn68xx;
|
||||
struct cvmx_mixx_tsctl_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_mixx_tstamp {
|
||||
uint64_t u64;
|
||||
struct cvmx_mixx_tstamp_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t tstamp:64;
|
||||
#else
|
||||
uint64_t tstamp:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mixx_tstamp_s cn61xx;
|
||||
struct cvmx_mixx_tstamp_s cn63xx;
|
||||
struct cvmx_mixx_tstamp_s cn63xxp1;
|
||||
struct cvmx_mixx_tstamp_s cn66xx;
|
||||
struct cvmx_mixx_tstamp_s cn68xx;
|
||||
struct cvmx_mixx_tstamp_s cn68xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
328
arch/mips/include/asm/octeon/cvmx-mpi-defs.h
Normal file
328
arch/mips/include/asm/octeon/cvmx-mpi-defs.h
Normal file
|
|
@ -0,0 +1,328 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_MPI_DEFS_H__
|
||||
#define __CVMX_MPI_DEFS_H__
|
||||
|
||||
#define CVMX_MPI_CFG (CVMX_ADD_IO_SEG(0x0001070000001000ull))
|
||||
#define CVMX_MPI_DATX(offset) (CVMX_ADD_IO_SEG(0x0001070000001080ull) + ((offset) & 15) * 8)
|
||||
#define CVMX_MPI_STS (CVMX_ADD_IO_SEG(0x0001070000001008ull))
|
||||
#define CVMX_MPI_TX (CVMX_ADD_IO_SEG(0x0001070000001010ull))
|
||||
|
||||
union cvmx_mpi_cfg {
|
||||
uint64_t u64;
|
||||
struct cvmx_mpi_cfg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t csena3:1;
|
||||
uint64_t csena2:1;
|
||||
uint64_t csena1:1;
|
||||
uint64_t csena0:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t tritx:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t cshi:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t cshi:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t tritx:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t csena0:1;
|
||||
uint64_t csena1:1;
|
||||
uint64_t csena2:1;
|
||||
uint64_t csena3:1;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mpi_cfg_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t cslate:1;
|
||||
uint64_t tritx:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t cshi:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t cshi:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t tritx:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_mpi_cfg_cn31xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_11_15:5;
|
||||
uint64_t tritx:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t cshi:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t csena:1;
|
||||
uint64_t cshi:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t tritx:1;
|
||||
uint64_t reserved_11_15:5;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn31xx;
|
||||
struct cvmx_mpi_cfg_cn30xx cn50xx;
|
||||
struct cvmx_mpi_cfg_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_14_15:2;
|
||||
uint64_t csena1:1;
|
||||
uint64_t csena0:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t tritx:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t cshi:1;
|
||||
uint64_t reserved_6_6:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t reserved_6_6:1;
|
||||
uint64_t cshi:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t tritx:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t csena0:1;
|
||||
uint64_t csena1:1;
|
||||
uint64_t reserved_14_15:2;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_mpi_cfg_cn66xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_29_63:35;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t csena3:1;
|
||||
uint64_t csena2:1;
|
||||
uint64_t reserved_12_13:2;
|
||||
uint64_t cslate:1;
|
||||
uint64_t tritx:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t cshi:1;
|
||||
uint64_t reserved_6_6:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t enable:1;
|
||||
#else
|
||||
uint64_t enable:1;
|
||||
uint64_t idlelo:1;
|
||||
uint64_t clk_cont:1;
|
||||
uint64_t wireor:1;
|
||||
uint64_t lsbfirst:1;
|
||||
uint64_t int_ena:1;
|
||||
uint64_t reserved_6_6:1;
|
||||
uint64_t cshi:1;
|
||||
uint64_t idleclks:2;
|
||||
uint64_t tritx:1;
|
||||
uint64_t cslate:1;
|
||||
uint64_t reserved_12_13:2;
|
||||
uint64_t csena2:1;
|
||||
uint64_t csena3:1;
|
||||
uint64_t clkdiv:13;
|
||||
uint64_t reserved_29_63:35;
|
||||
#endif
|
||||
} cn66xx;
|
||||
struct cvmx_mpi_cfg_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_mpi_datx {
|
||||
uint64_t u64;
|
||||
struct cvmx_mpi_datx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t data:8;
|
||||
#else
|
||||
uint64_t data:8;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mpi_datx_s cn30xx;
|
||||
struct cvmx_mpi_datx_s cn31xx;
|
||||
struct cvmx_mpi_datx_s cn50xx;
|
||||
struct cvmx_mpi_datx_s cn61xx;
|
||||
struct cvmx_mpi_datx_s cn66xx;
|
||||
struct cvmx_mpi_datx_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_mpi_sts {
|
||||
uint64_t u64;
|
||||
struct cvmx_mpi_sts_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t rxnum:5;
|
||||
uint64_t reserved_1_7:7;
|
||||
uint64_t busy:1;
|
||||
#else
|
||||
uint64_t busy:1;
|
||||
uint64_t reserved_1_7:7;
|
||||
uint64_t rxnum:5;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mpi_sts_s cn30xx;
|
||||
struct cvmx_mpi_sts_s cn31xx;
|
||||
struct cvmx_mpi_sts_s cn50xx;
|
||||
struct cvmx_mpi_sts_s cn61xx;
|
||||
struct cvmx_mpi_sts_s cn66xx;
|
||||
struct cvmx_mpi_sts_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_mpi_tx {
|
||||
uint64_t u64;
|
||||
struct cvmx_mpi_tx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_22_63:42;
|
||||
uint64_t csid:2;
|
||||
uint64_t reserved_17_19:3;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t totnum:5;
|
||||
#else
|
||||
uint64_t totnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_17_19:3;
|
||||
uint64_t csid:2;
|
||||
uint64_t reserved_22_63:42;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_mpi_tx_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t totnum:5;
|
||||
#else
|
||||
uint64_t totnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_mpi_tx_cn30xx cn31xx;
|
||||
struct cvmx_mpi_tx_cn30xx cn50xx;
|
||||
struct cvmx_mpi_tx_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_21_63:43;
|
||||
uint64_t csid:1;
|
||||
uint64_t reserved_17_19:3;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t totnum:5;
|
||||
#else
|
||||
uint64_t totnum:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t txnum:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t leavecs:1;
|
||||
uint64_t reserved_17_19:3;
|
||||
uint64_t csid:1;
|
||||
uint64_t reserved_21_63:43;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_mpi_tx_s cn66xx;
|
||||
struct cvmx_mpi_tx_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
4220
arch/mips/include/asm/octeon/cvmx-npei-defs.h
Normal file
4220
arch/mips/include/asm/octeon/cvmx-npei-defs.h
Normal file
File diff suppressed because it is too large
Load diff
2749
arch/mips/include/asm/octeon/cvmx-npi-defs.h
Normal file
2749
arch/mips/include/asm/octeon/cvmx-npi-defs.h
Normal file
File diff suppressed because it is too large
Load diff
61
arch/mips/include/asm/octeon/cvmx-packet.h
Normal file
61
arch/mips/include/asm/octeon/cvmx-packet.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Packet buffer defines.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_PACKET_H__
|
||||
#define __CVMX_PACKET_H__
|
||||
|
||||
/**
|
||||
* This structure defines a buffer pointer on Octeon
|
||||
*/
|
||||
union cvmx_buf_ptr {
|
||||
void *ptr;
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/* if set, invert the "free" pick of the overall
|
||||
* packet. HW always sets this bit to 0 on inbound
|
||||
* packet */
|
||||
uint64_t i:1;
|
||||
|
||||
/* Indicates the amount to back up to get to the
|
||||
* buffer start in cache lines. In most cases this is
|
||||
* less than one complete cache line, so the value is
|
||||
* zero */
|
||||
uint64_t back:4;
|
||||
/* The pool that the buffer came from / goes to */
|
||||
uint64_t pool:3;
|
||||
/* The size of the segment pointed to by addr (in bytes) */
|
||||
uint64_t size:16;
|
||||
/* Pointer to the first byte of the data, NOT buffer */
|
||||
uint64_t addr:40;
|
||||
} s;
|
||||
};
|
||||
|
||||
#endif /* __CVMX_PACKET_H__ */
|
||||
2429
arch/mips/include/asm/octeon/cvmx-pci-defs.h
Normal file
2429
arch/mips/include/asm/octeon/cvmx-pci-defs.h
Normal file
File diff suppressed because it is too large
Load diff
3175
arch/mips/include/asm/octeon/cvmx-pciercx-defs.h
Normal file
3175
arch/mips/include/asm/octeon/cvmx-pciercx-defs.h
Normal file
File diff suppressed because it is too large
Load diff
1009
arch/mips/include/asm/octeon/cvmx-pcsx-defs.h
Normal file
1009
arch/mips/include/asm/octeon/cvmx-pcsx-defs.h
Normal file
File diff suppressed because it is too large
Load diff
808
arch/mips/include/asm/octeon/cvmx-pcsxx-defs.h
Normal file
808
arch/mips/include/asm/octeon/cvmx-pcsxx-defs.h
Normal file
|
|
@ -0,0 +1,808 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_PCSXX_DEFS_H__
|
||||
#define __CVMX_PCSXX_DEFS_H__
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_10GBX_STATUS_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000828ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000828ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000828ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000828ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_BIST_STATUS_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000870ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000870ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000870ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000870ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_BIT_LOCK_STATUS_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000850ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000850ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000850ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000850ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_CONTROL1_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000800ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000800ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000800ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000800ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_CONTROL2_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000818ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000818ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000818ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000818ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_INT_EN_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000860ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000860ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000860ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000860ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_INT_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000858ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000858ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000858ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000858ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_LOG_ANL_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000868ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000868ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000868ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000868ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_MISC_CTL_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000848ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000848ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000848ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000848ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_RX_SYNC_STATES_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000838ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000838ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000838ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000838ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_SPD_ABIL_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000810ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000810ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000810ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000810ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_STATUS1_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000808ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000808ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000808ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000808ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_STATUS2_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000820ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000820ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000820ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000820ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_TX_RX_POLARITY_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000840ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000840ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000840ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000840ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_PCSXX_TX_RX_STATES_REG(unsigned long block_id)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000830ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000830ull) + (block_id) * 0x8000000ull;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000830ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x00011800B0000830ull) + (block_id) * 0x1000000ull;
|
||||
}
|
||||
|
||||
union cvmx_pcsxx_10gbx_status_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t alignd:1;
|
||||
uint64_t pattst:1;
|
||||
uint64_t reserved_4_10:7;
|
||||
uint64_t l3sync:1;
|
||||
uint64_t l2sync:1;
|
||||
uint64_t l1sync:1;
|
||||
uint64_t l0sync:1;
|
||||
#else
|
||||
uint64_t l0sync:1;
|
||||
uint64_t l1sync:1;
|
||||
uint64_t l2sync:1;
|
||||
uint64_t l3sync:1;
|
||||
uint64_t reserved_4_10:7;
|
||||
uint64_t pattst:1;
|
||||
uint64_t alignd:1;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_10gbx_status_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_bist_status_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_bist_status_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t bist_status:1;
|
||||
#else
|
||||
uint64_t bist_status:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_bist_status_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_bit_lock_status_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t bitlck3:1;
|
||||
uint64_t bitlck2:1;
|
||||
uint64_t bitlck1:1;
|
||||
uint64_t bitlck0:1;
|
||||
#else
|
||||
uint64_t bitlck0:1;
|
||||
uint64_t bitlck1:1;
|
||||
uint64_t bitlck2:1;
|
||||
uint64_t bitlck3:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_bit_lock_status_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_control1_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_control1_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t reset:1;
|
||||
uint64_t loopbck1:1;
|
||||
uint64_t spdsel1:1;
|
||||
uint64_t reserved_12_12:1;
|
||||
uint64_t lo_pwr:1;
|
||||
uint64_t reserved_7_10:4;
|
||||
uint64_t spdsel0:1;
|
||||
uint64_t spd:4;
|
||||
uint64_t reserved_0_1:2;
|
||||
#else
|
||||
uint64_t reserved_0_1:2;
|
||||
uint64_t spd:4;
|
||||
uint64_t spdsel0:1;
|
||||
uint64_t reserved_7_10:4;
|
||||
uint64_t lo_pwr:1;
|
||||
uint64_t reserved_12_12:1;
|
||||
uint64_t spdsel1:1;
|
||||
uint64_t loopbck1:1;
|
||||
uint64_t reset:1;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_control1_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_control1_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_control1_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_control1_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_control1_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_control2_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_control2_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t type:2;
|
||||
#else
|
||||
uint64_t type:2;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_control2_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_control2_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_control2_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_control2_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_control2_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_int_en_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_int_en_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t dbg_sync_en:1;
|
||||
uint64_t algnlos_en:1;
|
||||
uint64_t synlos_en:1;
|
||||
uint64_t bitlckls_en:1;
|
||||
uint64_t rxsynbad_en:1;
|
||||
uint64_t rxbad_en:1;
|
||||
uint64_t txflt_en:1;
|
||||
#else
|
||||
uint64_t txflt_en:1;
|
||||
uint64_t rxbad_en:1;
|
||||
uint64_t rxsynbad_en:1;
|
||||
uint64_t bitlckls_en:1;
|
||||
uint64_t synlos_en:1;
|
||||
uint64_t algnlos_en:1;
|
||||
uint64_t dbg_sync_en:1;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_int_en_reg_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t algnlos_en:1;
|
||||
uint64_t synlos_en:1;
|
||||
uint64_t bitlckls_en:1;
|
||||
uint64_t rxsynbad_en:1;
|
||||
uint64_t rxbad_en:1;
|
||||
uint64_t txflt_en:1;
|
||||
#else
|
||||
uint64_t txflt_en:1;
|
||||
uint64_t rxbad_en:1;
|
||||
uint64_t rxsynbad_en:1;
|
||||
uint64_t bitlckls_en:1;
|
||||
uint64_t synlos_en:1;
|
||||
uint64_t algnlos_en:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_pcsxx_int_en_reg_cn52xx cn52xxp1;
|
||||
struct cvmx_pcsxx_int_en_reg_cn52xx cn56xx;
|
||||
struct cvmx_pcsxx_int_en_reg_cn52xx cn56xxp1;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_int_en_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_int_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_int_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t dbg_sync:1;
|
||||
uint64_t algnlos:1;
|
||||
uint64_t synlos:1;
|
||||
uint64_t bitlckls:1;
|
||||
uint64_t rxsynbad:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t txflt:1;
|
||||
#else
|
||||
uint64_t txflt:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t rxsynbad:1;
|
||||
uint64_t bitlckls:1;
|
||||
uint64_t synlos:1;
|
||||
uint64_t algnlos:1;
|
||||
uint64_t dbg_sync:1;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_int_reg_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t algnlos:1;
|
||||
uint64_t synlos:1;
|
||||
uint64_t bitlckls:1;
|
||||
uint64_t rxsynbad:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t txflt:1;
|
||||
#else
|
||||
uint64_t txflt:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t rxsynbad:1;
|
||||
uint64_t bitlckls:1;
|
||||
uint64_t synlos:1;
|
||||
uint64_t algnlos:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_pcsxx_int_reg_cn52xx cn52xxp1;
|
||||
struct cvmx_pcsxx_int_reg_cn52xx cn56xx;
|
||||
struct cvmx_pcsxx_int_reg_cn52xx cn56xxp1;
|
||||
struct cvmx_pcsxx_int_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_int_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_int_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_int_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_int_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_int_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_log_anl_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_log_anl_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t enc_mode:1;
|
||||
uint64_t drop_ln:2;
|
||||
uint64_t lafifovfl:1;
|
||||
uint64_t la_en:1;
|
||||
uint64_t pkt_sz:2;
|
||||
#else
|
||||
uint64_t pkt_sz:2;
|
||||
uint64_t la_en:1;
|
||||
uint64_t lafifovfl:1;
|
||||
uint64_t drop_ln:2;
|
||||
uint64_t enc_mode:1;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_log_anl_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_misc_ctl_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t tx_swap:1;
|
||||
uint64_t rx_swap:1;
|
||||
uint64_t xaui:1;
|
||||
uint64_t gmxeno:1;
|
||||
#else
|
||||
uint64_t gmxeno:1;
|
||||
uint64_t xaui:1;
|
||||
uint64_t rx_swap:1;
|
||||
uint64_t tx_swap:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_misc_ctl_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_rx_sync_states_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t sync3st:4;
|
||||
uint64_t sync2st:4;
|
||||
uint64_t sync1st:4;
|
||||
uint64_t sync0st:4;
|
||||
#else
|
||||
uint64_t sync0st:4;
|
||||
uint64_t sync1st:4;
|
||||
uint64_t sync2st:4;
|
||||
uint64_t sync3st:4;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_rx_sync_states_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_spd_abil_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t tenpasst:1;
|
||||
uint64_t tengb:1;
|
||||
#else
|
||||
uint64_t tengb:1;
|
||||
uint64_t tenpasst:1;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_spd_abil_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_status1_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_status1_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t flt:1;
|
||||
uint64_t reserved_3_6:4;
|
||||
uint64_t rcv_lnk:1;
|
||||
uint64_t lpable:1;
|
||||
uint64_t reserved_0_0:1;
|
||||
#else
|
||||
uint64_t reserved_0_0:1;
|
||||
uint64_t lpable:1;
|
||||
uint64_t rcv_lnk:1;
|
||||
uint64_t reserved_3_6:4;
|
||||
uint64_t flt:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_status1_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_status1_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_status1_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_status1_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_status1_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_status2_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_status2_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t dev:2;
|
||||
uint64_t reserved_12_13:2;
|
||||
uint64_t xmtflt:1;
|
||||
uint64_t rcvflt:1;
|
||||
uint64_t reserved_3_9:7;
|
||||
uint64_t tengb_w:1;
|
||||
uint64_t tengb_x:1;
|
||||
uint64_t tengb_r:1;
|
||||
#else
|
||||
uint64_t tengb_r:1;
|
||||
uint64_t tengb_x:1;
|
||||
uint64_t tengb_w:1;
|
||||
uint64_t reserved_3_9:7;
|
||||
uint64_t rcvflt:1;
|
||||
uint64_t xmtflt:1;
|
||||
uint64_t reserved_12_13:2;
|
||||
uint64_t dev:2;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_status2_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn52xxp1;
|
||||
struct cvmx_pcsxx_status2_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn56xxp1;
|
||||
struct cvmx_pcsxx_status2_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_status2_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_status2_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_tx_rx_polarity_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_10_63:54;
|
||||
uint64_t xor_rxplrt:4;
|
||||
uint64_t xor_txplrt:4;
|
||||
uint64_t rxplrt:1;
|
||||
uint64_t txplrt:1;
|
||||
#else
|
||||
uint64_t txplrt:1;
|
||||
uint64_t rxplrt:1;
|
||||
uint64_t xor_txplrt:4;
|
||||
uint64_t xor_rxplrt:4;
|
||||
uint64_t reserved_10_63:54;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1 {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t rxplrt:1;
|
||||
uint64_t txplrt:1;
|
||||
#else
|
||||
uint64_t txplrt:1;
|
||||
uint64_t rxplrt:1;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} cn52xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1 cn56xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_tx_rx_polarity_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pcsxx_tx_rx_states_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t term_err:1;
|
||||
uint64_t syn3bad:1;
|
||||
uint64_t syn2bad:1;
|
||||
uint64_t syn1bad:1;
|
||||
uint64_t syn0bad:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t algn_st:3;
|
||||
uint64_t rx_st:2;
|
||||
uint64_t tx_st:3;
|
||||
#else
|
||||
uint64_t tx_st:3;
|
||||
uint64_t rx_st:2;
|
||||
uint64_t algn_st:3;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t syn0bad:1;
|
||||
uint64_t syn1bad:1;
|
||||
uint64_t syn2bad:1;
|
||||
uint64_t syn3bad:1;
|
||||
uint64_t term_err:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn52xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1 {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t syn3bad:1;
|
||||
uint64_t syn2bad:1;
|
||||
uint64_t syn1bad:1;
|
||||
uint64_t syn0bad:1;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t algn_st:3;
|
||||
uint64_t rx_st:2;
|
||||
uint64_t tx_st:3;
|
||||
#else
|
||||
uint64_t tx_st:3;
|
||||
uint64_t rx_st:2;
|
||||
uint64_t algn_st:3;
|
||||
uint64_t rxbad:1;
|
||||
uint64_t syn0bad:1;
|
||||
uint64_t syn1bad:1;
|
||||
uint64_t syn2bad:1;
|
||||
uint64_t syn3bad:1;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} cn52xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn56xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1 cn56xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn61xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn63xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn63xxp1;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn66xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn68xx;
|
||||
struct cvmx_pcsxx_tx_rx_states_reg_s cn68xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
795
arch/mips/include/asm/octeon/cvmx-pemx-defs.h
Normal file
795
arch/mips/include/asm/octeon/cvmx-pemx-defs.h
Normal file
|
|
@ -0,0 +1,795 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_PEMX_DEFS_H__
|
||||
#define __CVMX_PEMX_DEFS_H__
|
||||
|
||||
#define CVMX_PEMX_BAR1_INDEXX(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800C00000A8ull) + (((offset) & 15) + ((block_id) & 1) * 0x200000ull) * 8)
|
||||
#define CVMX_PEMX_BAR2_MASK(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000130ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_BAR_CTL(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000128ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_BIST_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000018ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_BIST_STATUS2(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000420ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_CFG_RD(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000030ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_CFG_WR(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000028ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_CPL_LUT_VALID(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000098ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_CTL_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000000ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_DBG_INFO(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000008ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_DBG_INFO_EN(block_id) (CVMX_ADD_IO_SEG(0x00011800C00000A0ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_DIAG_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000020ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_INB_READ_CREDITS(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000138ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_INT_ENB(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000410ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_INT_ENB_INT(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000418ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_INT_SUM(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000408ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_P2N_BAR0_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000080ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_P2N_BAR1_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000088ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_P2N_BAR2_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000090ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
#define CVMX_PEMX_P2P_BARX_END(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800C0000048ull) + (((offset) & 3) + ((block_id) & 1) * 0x100000ull) * 16)
|
||||
#define CVMX_PEMX_P2P_BARX_START(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800C0000040ull) + (((offset) & 3) + ((block_id) & 1) * 0x100000ull) * 16)
|
||||
#define CVMX_PEMX_TLP_CREDITS(block_id) (CVMX_ADD_IO_SEG(0x00011800C0000038ull) + ((block_id) & 1) * 0x1000000ull)
|
||||
|
||||
union cvmx_pemx_bar1_indexx {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_bar1_indexx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t addr_idx:16;
|
||||
uint64_t ca:1;
|
||||
uint64_t end_swp:2;
|
||||
uint64_t addr_v:1;
|
||||
#else
|
||||
uint64_t addr_v:1;
|
||||
uint64_t end_swp:2;
|
||||
uint64_t ca:1;
|
||||
uint64_t addr_idx:16;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_bar1_indexx_s cn61xx;
|
||||
struct cvmx_pemx_bar1_indexx_s cn63xx;
|
||||
struct cvmx_pemx_bar1_indexx_s cn63xxp1;
|
||||
struct cvmx_pemx_bar1_indexx_s cn66xx;
|
||||
struct cvmx_pemx_bar1_indexx_s cn68xx;
|
||||
struct cvmx_pemx_bar1_indexx_s cn68xxp1;
|
||||
struct cvmx_pemx_bar1_indexx_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_bar2_mask {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_bar2_mask_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_38_63:26;
|
||||
uint64_t mask:35;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t mask:35;
|
||||
uint64_t reserved_38_63:26;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_bar2_mask_s cn61xx;
|
||||
struct cvmx_pemx_bar2_mask_s cn66xx;
|
||||
struct cvmx_pemx_bar2_mask_s cn68xx;
|
||||
struct cvmx_pemx_bar2_mask_s cn68xxp1;
|
||||
struct cvmx_pemx_bar2_mask_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_bar_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_bar_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_7_63:57;
|
||||
uint64_t bar1_siz:3;
|
||||
uint64_t bar2_enb:1;
|
||||
uint64_t bar2_esx:2;
|
||||
uint64_t bar2_cax:1;
|
||||
#else
|
||||
uint64_t bar2_cax:1;
|
||||
uint64_t bar2_esx:2;
|
||||
uint64_t bar2_enb:1;
|
||||
uint64_t bar1_siz:3;
|
||||
uint64_t reserved_7_63:57;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_bar_ctl_s cn61xx;
|
||||
struct cvmx_pemx_bar_ctl_s cn63xx;
|
||||
struct cvmx_pemx_bar_ctl_s cn63xxp1;
|
||||
struct cvmx_pemx_bar_ctl_s cn66xx;
|
||||
struct cvmx_pemx_bar_ctl_s cn68xx;
|
||||
struct cvmx_pemx_bar_ctl_s cn68xxp1;
|
||||
struct cvmx_pemx_bar_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_bist_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_bist_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t retry:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t sot:1;
|
||||
#else
|
||||
uint64_t sot:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t retry:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_bist_status_s cn61xx;
|
||||
struct cvmx_pemx_bist_status_s cn63xx;
|
||||
struct cvmx_pemx_bist_status_s cn63xxp1;
|
||||
struct cvmx_pemx_bist_status_s cn66xx;
|
||||
struct cvmx_pemx_bist_status_s cn68xx;
|
||||
struct cvmx_pemx_bist_status_s cn68xxp1;
|
||||
struct cvmx_pemx_bist_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_bist_status2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_bist_status2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_10_63:54;
|
||||
uint64_t e2p_cpl:1;
|
||||
uint64_t e2p_n:1;
|
||||
uint64_t e2p_p:1;
|
||||
uint64_t peai_p2e:1;
|
||||
uint64_t pef_tpf1:1;
|
||||
uint64_t pef_tpf0:1;
|
||||
uint64_t pef_tnf:1;
|
||||
uint64_t pef_tcf1:1;
|
||||
uint64_t pef_tc0:1;
|
||||
uint64_t ppf:1;
|
||||
#else
|
||||
uint64_t ppf:1;
|
||||
uint64_t pef_tc0:1;
|
||||
uint64_t pef_tcf1:1;
|
||||
uint64_t pef_tnf:1;
|
||||
uint64_t pef_tpf0:1;
|
||||
uint64_t pef_tpf1:1;
|
||||
uint64_t peai_p2e:1;
|
||||
uint64_t e2p_p:1;
|
||||
uint64_t e2p_n:1;
|
||||
uint64_t e2p_cpl:1;
|
||||
uint64_t reserved_10_63:54;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_bist_status2_s cn61xx;
|
||||
struct cvmx_pemx_bist_status2_s cn63xx;
|
||||
struct cvmx_pemx_bist_status2_s cn63xxp1;
|
||||
struct cvmx_pemx_bist_status2_s cn66xx;
|
||||
struct cvmx_pemx_bist_status2_s cn68xx;
|
||||
struct cvmx_pemx_bist_status2_s cn68xxp1;
|
||||
struct cvmx_pemx_bist_status2_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_cfg_rd {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_cfg_rd_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t data:32;
|
||||
uint64_t addr:32;
|
||||
#else
|
||||
uint64_t addr:32;
|
||||
uint64_t data:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_cfg_rd_s cn61xx;
|
||||
struct cvmx_pemx_cfg_rd_s cn63xx;
|
||||
struct cvmx_pemx_cfg_rd_s cn63xxp1;
|
||||
struct cvmx_pemx_cfg_rd_s cn66xx;
|
||||
struct cvmx_pemx_cfg_rd_s cn68xx;
|
||||
struct cvmx_pemx_cfg_rd_s cn68xxp1;
|
||||
struct cvmx_pemx_cfg_rd_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_cfg_wr {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_cfg_wr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t data:32;
|
||||
uint64_t addr:32;
|
||||
#else
|
||||
uint64_t addr:32;
|
||||
uint64_t data:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_cfg_wr_s cn61xx;
|
||||
struct cvmx_pemx_cfg_wr_s cn63xx;
|
||||
struct cvmx_pemx_cfg_wr_s cn63xxp1;
|
||||
struct cvmx_pemx_cfg_wr_s cn66xx;
|
||||
struct cvmx_pemx_cfg_wr_s cn68xx;
|
||||
struct cvmx_pemx_cfg_wr_s cn68xxp1;
|
||||
struct cvmx_pemx_cfg_wr_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_cpl_lut_valid {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_cpl_lut_valid_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t tag:32;
|
||||
#else
|
||||
uint64_t tag:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn61xx;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn63xx;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn63xxp1;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn66xx;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn68xx;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cn68xxp1;
|
||||
struct cvmx_pemx_cpl_lut_valid_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_ctl_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_ctl_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_48_63:16;
|
||||
uint64_t auto_sd:1;
|
||||
uint64_t dnum:5;
|
||||
uint64_t pbus:8;
|
||||
uint64_t reserved_32_33:2;
|
||||
uint64_t cfg_rtry:16;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t fast_lm:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t inv_lcrc:1;
|
||||
#else
|
||||
uint64_t inv_lcrc:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t fast_lm:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t cfg_rtry:16;
|
||||
uint64_t reserved_32_33:2;
|
||||
uint64_t pbus:8;
|
||||
uint64_t dnum:5;
|
||||
uint64_t auto_sd:1;
|
||||
uint64_t reserved_48_63:16;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_ctl_status_s cn61xx;
|
||||
struct cvmx_pemx_ctl_status_s cn63xx;
|
||||
struct cvmx_pemx_ctl_status_s cn63xxp1;
|
||||
struct cvmx_pemx_ctl_status_s cn66xx;
|
||||
struct cvmx_pemx_ctl_status_s cn68xx;
|
||||
struct cvmx_pemx_ctl_status_s cn68xxp1;
|
||||
struct cvmx_pemx_ctl_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_dbg_info {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_dbg_info_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_31_63:33;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t spoison:1;
|
||||
#else
|
||||
uint64_t spoison:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t reserved_31_63:33;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_dbg_info_s cn61xx;
|
||||
struct cvmx_pemx_dbg_info_s cn63xx;
|
||||
struct cvmx_pemx_dbg_info_s cn63xxp1;
|
||||
struct cvmx_pemx_dbg_info_s cn66xx;
|
||||
struct cvmx_pemx_dbg_info_s cn68xx;
|
||||
struct cvmx_pemx_dbg_info_s cn68xxp1;
|
||||
struct cvmx_pemx_dbg_info_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_dbg_info_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_dbg_info_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_31_63:33;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t spoison:1;
|
||||
#else
|
||||
uint64_t spoison:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t reserved_31_63:33;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_dbg_info_en_s cn61xx;
|
||||
struct cvmx_pemx_dbg_info_en_s cn63xx;
|
||||
struct cvmx_pemx_dbg_info_en_s cn63xxp1;
|
||||
struct cvmx_pemx_dbg_info_en_s cn66xx;
|
||||
struct cvmx_pemx_dbg_info_en_s cn68xx;
|
||||
struct cvmx_pemx_dbg_info_en_s cn68xxp1;
|
||||
struct cvmx_pemx_dbg_info_en_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_diag_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_diag_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t pm_dst:1;
|
||||
uint64_t pm_stat:1;
|
||||
uint64_t pm_en:1;
|
||||
uint64_t aux_en:1;
|
||||
#else
|
||||
uint64_t aux_en:1;
|
||||
uint64_t pm_en:1;
|
||||
uint64_t pm_stat:1;
|
||||
uint64_t pm_dst:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_diag_status_s cn61xx;
|
||||
struct cvmx_pemx_diag_status_s cn63xx;
|
||||
struct cvmx_pemx_diag_status_s cn63xxp1;
|
||||
struct cvmx_pemx_diag_status_s cn66xx;
|
||||
struct cvmx_pemx_diag_status_s cn68xx;
|
||||
struct cvmx_pemx_diag_status_s cn68xxp1;
|
||||
struct cvmx_pemx_diag_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_inb_read_credits {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_inb_read_credits_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t num:6;
|
||||
#else
|
||||
uint64_t num:6;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_inb_read_credits_s cn61xx;
|
||||
struct cvmx_pemx_inb_read_credits_s cn66xx;
|
||||
struct cvmx_pemx_inb_read_credits_s cn68xx;
|
||||
struct cvmx_pemx_inb_read_credits_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_int_enb {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_int_enb_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t se:1;
|
||||
uint64_t aeri:1;
|
||||
#else
|
||||
uint64_t aeri:1;
|
||||
uint64_t se:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_int_enb_s cn61xx;
|
||||
struct cvmx_pemx_int_enb_s cn63xx;
|
||||
struct cvmx_pemx_int_enb_s cn63xxp1;
|
||||
struct cvmx_pemx_int_enb_s cn66xx;
|
||||
struct cvmx_pemx_int_enb_s cn68xx;
|
||||
struct cvmx_pemx_int_enb_s cn68xxp1;
|
||||
struct cvmx_pemx_int_enb_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_int_enb_int {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_int_enb_int_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t se:1;
|
||||
uint64_t aeri:1;
|
||||
#else
|
||||
uint64_t aeri:1;
|
||||
uint64_t se:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_int_enb_int_s cn61xx;
|
||||
struct cvmx_pemx_int_enb_int_s cn63xx;
|
||||
struct cvmx_pemx_int_enb_int_s cn63xxp1;
|
||||
struct cvmx_pemx_int_enb_int_s cn66xx;
|
||||
struct cvmx_pemx_int_enb_int_s cn68xx;
|
||||
struct cvmx_pemx_int_enb_int_s cn68xxp1;
|
||||
struct cvmx_pemx_int_enb_int_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_int_sum {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_int_sum_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t se:1;
|
||||
uint64_t aeri:1;
|
||||
#else
|
||||
uint64_t aeri:1;
|
||||
uint64_t se:1;
|
||||
uint64_t pmei:1;
|
||||
uint64_t pmem:1;
|
||||
uint64_t up_b1:1;
|
||||
uint64_t up_b2:1;
|
||||
uint64_t up_bx:1;
|
||||
uint64_t un_b1:1;
|
||||
uint64_t un_b2:1;
|
||||
uint64_t un_bx:1;
|
||||
uint64_t exc:1;
|
||||
uint64_t rdlk:1;
|
||||
uint64_t crs_er:1;
|
||||
uint64_t crs_dr:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_int_sum_s cn61xx;
|
||||
struct cvmx_pemx_int_sum_s cn63xx;
|
||||
struct cvmx_pemx_int_sum_s cn63xxp1;
|
||||
struct cvmx_pemx_int_sum_s cn66xx;
|
||||
struct cvmx_pemx_int_sum_s cn68xx;
|
||||
struct cvmx_pemx_int_sum_s cn68xxp1;
|
||||
struct cvmx_pemx_int_sum_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_p2n_bar0_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_p2n_bar0_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:50;
|
||||
uint64_t reserved_0_13:14;
|
||||
#else
|
||||
uint64_t reserved_0_13:14;
|
||||
uint64_t addr:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn61xx;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn63xx;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn63xxp1;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn66xx;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn68xx;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cn68xxp1;
|
||||
struct cvmx_pemx_p2n_bar0_start_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_p2n_bar1_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_p2n_bar1_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:38;
|
||||
uint64_t reserved_0_25:26;
|
||||
#else
|
||||
uint64_t reserved_0_25:26;
|
||||
uint64_t addr:38;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn61xx;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn63xx;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn63xxp1;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn66xx;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn68xx;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cn68xxp1;
|
||||
struct cvmx_pemx_p2n_bar1_start_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_p2n_bar2_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_p2n_bar2_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:23;
|
||||
uint64_t reserved_0_40:41;
|
||||
#else
|
||||
uint64_t reserved_0_40:41;
|
||||
uint64_t addr:23;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn61xx;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn63xx;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn63xxp1;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn66xx;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn68xx;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cn68xxp1;
|
||||
struct cvmx_pemx_p2n_bar2_start_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_pemx_p2p_barx_end {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_p2p_barx_end_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:52;
|
||||
uint64_t reserved_0_11:12;
|
||||
#else
|
||||
uint64_t reserved_0_11:12;
|
||||
uint64_t addr:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_p2p_barx_end_s cn63xx;
|
||||
struct cvmx_pemx_p2p_barx_end_s cn63xxp1;
|
||||
struct cvmx_pemx_p2p_barx_end_s cn66xx;
|
||||
struct cvmx_pemx_p2p_barx_end_s cn68xx;
|
||||
struct cvmx_pemx_p2p_barx_end_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pemx_p2p_barx_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_p2p_barx_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:52;
|
||||
uint64_t reserved_0_11:12;
|
||||
#else
|
||||
uint64_t reserved_0_11:12;
|
||||
uint64_t addr:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_p2p_barx_start_s cn63xx;
|
||||
struct cvmx_pemx_p2p_barx_start_s cn63xxp1;
|
||||
struct cvmx_pemx_p2p_barx_start_s cn66xx;
|
||||
struct cvmx_pemx_p2p_barx_start_s cn68xx;
|
||||
struct cvmx_pemx_p2p_barx_start_s cn68xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pemx_tlp_credits {
|
||||
uint64_t u64;
|
||||
struct cvmx_pemx_tlp_credits_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_56_63:8;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t pem_cpl:8;
|
||||
uint64_t pem_np:8;
|
||||
uint64_t pem_p:8;
|
||||
uint64_t sli_cpl:8;
|
||||
uint64_t sli_np:8;
|
||||
uint64_t sli_p:8;
|
||||
#else
|
||||
uint64_t sli_p:8;
|
||||
uint64_t sli_np:8;
|
||||
uint64_t sli_cpl:8;
|
||||
uint64_t pem_p:8;
|
||||
uint64_t pem_np:8;
|
||||
uint64_t pem_cpl:8;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t reserved_56_63:8;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pemx_tlp_credits_cn61xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_56_63:8;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t reserved_24_47:24;
|
||||
uint64_t sli_cpl:8;
|
||||
uint64_t sli_np:8;
|
||||
uint64_t sli_p:8;
|
||||
#else
|
||||
uint64_t sli_p:8;
|
||||
uint64_t sli_np:8;
|
||||
uint64_t sli_cpl:8;
|
||||
uint64_t reserved_24_47:24;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t reserved_56_63:8;
|
||||
#endif
|
||||
} cn61xx;
|
||||
struct cvmx_pemx_tlp_credits_s cn63xx;
|
||||
struct cvmx_pemx_tlp_credits_s cn63xxp1;
|
||||
struct cvmx_pemx_tlp_credits_s cn66xx;
|
||||
struct cvmx_pemx_tlp_credits_s cn68xx;
|
||||
struct cvmx_pemx_tlp_credits_s cn68xxp1;
|
||||
struct cvmx_pemx_tlp_credits_cn61xx cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
638
arch/mips/include/asm/octeon/cvmx-pescx-defs.h
Normal file
638
arch/mips/include/asm/octeon/cvmx-pescx-defs.h
Normal file
|
|
@ -0,0 +1,638 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_PESCX_DEFS_H__
|
||||
#define __CVMX_PESCX_DEFS_H__
|
||||
|
||||
#define CVMX_PESCX_BIST_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000018ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_BIST_STATUS2(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000418ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_CFG_RD(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000030ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_CFG_WR(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000028ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_CPL_LUT_VALID(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000098ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_CTL_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000000ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_CTL_STATUS2(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000400ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_DBG_INFO(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000008ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_DBG_INFO_EN(block_id) (CVMX_ADD_IO_SEG(0x00011800C80000A0ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_DIAG_STATUS(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000020ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_P2N_BAR0_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000080ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_P2N_BAR1_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000088ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_P2N_BAR2_START(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000090ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_PESCX_P2P_BARX_END(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800C8000048ull) + (((offset) & 3) + ((block_id) & 1) * 0x800000ull) * 16)
|
||||
#define CVMX_PESCX_P2P_BARX_START(offset, block_id) (CVMX_ADD_IO_SEG(0x00011800C8000040ull) + (((offset) & 3) + ((block_id) & 1) * 0x800000ull) * 16)
|
||||
#define CVMX_PESCX_TLP_CREDITS(block_id) (CVMX_ADD_IO_SEG(0x00011800C8000038ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
|
||||
union cvmx_pescx_bist_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_bist_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t rqdata5:1;
|
||||
uint64_t ctlp_or:1;
|
||||
uint64_t ntlp_or:1;
|
||||
uint64_t ptlp_or:1;
|
||||
uint64_t retry:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqdata4:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t sot:1;
|
||||
#else
|
||||
uint64_t sot:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqdata4:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t retry:1;
|
||||
uint64_t ptlp_or:1;
|
||||
uint64_t ntlp_or:1;
|
||||
uint64_t ctlp_or:1;
|
||||
uint64_t rqdata5:1;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_bist_status_s cn52xx;
|
||||
struct cvmx_pescx_bist_status_cn52xxp1 {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t ctlp_or:1;
|
||||
uint64_t ntlp_or:1;
|
||||
uint64_t ptlp_or:1;
|
||||
uint64_t retry:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqdata4:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t sot:1;
|
||||
#else
|
||||
uint64_t sot:1;
|
||||
uint64_t rqhdr0:1;
|
||||
uint64_t rqhdr1:1;
|
||||
uint64_t rqdata4:1;
|
||||
uint64_t rqdata3:1;
|
||||
uint64_t rqdata2:1;
|
||||
uint64_t rqdata1:1;
|
||||
uint64_t rqdata0:1;
|
||||
uint64_t retry:1;
|
||||
uint64_t ptlp_or:1;
|
||||
uint64_t ntlp_or:1;
|
||||
uint64_t ctlp_or:1;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} cn52xxp1;
|
||||
struct cvmx_pescx_bist_status_s cn56xx;
|
||||
struct cvmx_pescx_bist_status_cn52xxp1 cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_bist_status2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_bist_status2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t cto_p2e:1;
|
||||
uint64_t e2p_cpl:1;
|
||||
uint64_t e2p_n:1;
|
||||
uint64_t e2p_p:1;
|
||||
uint64_t e2p_rsl:1;
|
||||
uint64_t dbg_p2e:1;
|
||||
uint64_t peai_p2e:1;
|
||||
uint64_t rsl_p2e:1;
|
||||
uint64_t pef_tpf1:1;
|
||||
uint64_t pef_tpf0:1;
|
||||
uint64_t pef_tnf:1;
|
||||
uint64_t pef_tcf1:1;
|
||||
uint64_t pef_tc0:1;
|
||||
uint64_t ppf:1;
|
||||
#else
|
||||
uint64_t ppf:1;
|
||||
uint64_t pef_tc0:1;
|
||||
uint64_t pef_tcf1:1;
|
||||
uint64_t pef_tnf:1;
|
||||
uint64_t pef_tpf0:1;
|
||||
uint64_t pef_tpf1:1;
|
||||
uint64_t rsl_p2e:1;
|
||||
uint64_t peai_p2e:1;
|
||||
uint64_t dbg_p2e:1;
|
||||
uint64_t e2p_rsl:1;
|
||||
uint64_t e2p_p:1;
|
||||
uint64_t e2p_n:1;
|
||||
uint64_t e2p_cpl:1;
|
||||
uint64_t cto_p2e:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_bist_status2_s cn52xx;
|
||||
struct cvmx_pescx_bist_status2_s cn52xxp1;
|
||||
struct cvmx_pescx_bist_status2_s cn56xx;
|
||||
struct cvmx_pescx_bist_status2_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_cfg_rd {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_cfg_rd_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t data:32;
|
||||
uint64_t addr:32;
|
||||
#else
|
||||
uint64_t addr:32;
|
||||
uint64_t data:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_cfg_rd_s cn52xx;
|
||||
struct cvmx_pescx_cfg_rd_s cn52xxp1;
|
||||
struct cvmx_pescx_cfg_rd_s cn56xx;
|
||||
struct cvmx_pescx_cfg_rd_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_cfg_wr {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_cfg_wr_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t data:32;
|
||||
uint64_t addr:32;
|
||||
#else
|
||||
uint64_t addr:32;
|
||||
uint64_t data:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_cfg_wr_s cn52xx;
|
||||
struct cvmx_pescx_cfg_wr_s cn52xxp1;
|
||||
struct cvmx_pescx_cfg_wr_s cn56xx;
|
||||
struct cvmx_pescx_cfg_wr_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_cpl_lut_valid {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_cpl_lut_valid_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t tag:32;
|
||||
#else
|
||||
uint64_t tag:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_cpl_lut_valid_s cn52xx;
|
||||
struct cvmx_pescx_cpl_lut_valid_s cn52xxp1;
|
||||
struct cvmx_pescx_cpl_lut_valid_s cn56xx;
|
||||
struct cvmx_pescx_cpl_lut_valid_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_ctl_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_ctl_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t dnum:5;
|
||||
uint64_t pbus:8;
|
||||
uint64_t qlm_cfg:2;
|
||||
uint64_t lane_swp:1;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t reserved_2_2:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t inv_lcrc:1;
|
||||
#else
|
||||
uint64_t inv_lcrc:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t reserved_2_2:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t lane_swp:1;
|
||||
uint64_t qlm_cfg:2;
|
||||
uint64_t pbus:8;
|
||||
uint64_t dnum:5;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_ctl_status_s cn52xx;
|
||||
struct cvmx_pescx_ctl_status_s cn52xxp1;
|
||||
struct cvmx_pescx_ctl_status_cn56xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_28_63:36;
|
||||
uint64_t dnum:5;
|
||||
uint64_t pbus:8;
|
||||
uint64_t qlm_cfg:2;
|
||||
uint64_t reserved_12_12:1;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t reserved_2_2:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t inv_lcrc:1;
|
||||
#else
|
||||
uint64_t inv_lcrc:1;
|
||||
uint64_t inv_ecrc:1;
|
||||
uint64_t reserved_2_2:1;
|
||||
uint64_t ro_ctlp:1;
|
||||
uint64_t lnk_enb:1;
|
||||
uint64_t dly_one:1;
|
||||
uint64_t nf_ecrc:1;
|
||||
uint64_t reserved_7_8:2;
|
||||
uint64_t ob_p_cmd:1;
|
||||
uint64_t pm_xpme:1;
|
||||
uint64_t pm_xtoff:1;
|
||||
uint64_t reserved_12_12:1;
|
||||
uint64_t qlm_cfg:2;
|
||||
uint64_t pbus:8;
|
||||
uint64_t dnum:5;
|
||||
uint64_t reserved_28_63:36;
|
||||
#endif
|
||||
} cn56xx;
|
||||
struct cvmx_pescx_ctl_status_cn56xx cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_ctl_status2 {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_ctl_status2_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t pclk_run:1;
|
||||
uint64_t pcierst:1;
|
||||
#else
|
||||
uint64_t pcierst:1;
|
||||
uint64_t pclk_run:1;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_ctl_status2_s cn52xx;
|
||||
struct cvmx_pescx_ctl_status2_cn52xxp1 {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t pcierst:1;
|
||||
#else
|
||||
uint64_t pcierst:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} cn52xxp1;
|
||||
struct cvmx_pescx_ctl_status2_s cn56xx;
|
||||
struct cvmx_pescx_ctl_status2_cn52xxp1 cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_dbg_info {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_dbg_info_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_31_63:33;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t spoison:1;
|
||||
#else
|
||||
uint64_t spoison:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t reserved_31_63:33;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_dbg_info_s cn52xx;
|
||||
struct cvmx_pescx_dbg_info_s cn52xxp1;
|
||||
struct cvmx_pescx_dbg_info_s cn56xx;
|
||||
struct cvmx_pescx_dbg_info_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_dbg_info_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_dbg_info_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_31_63:33;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t spoison:1;
|
||||
#else
|
||||
uint64_t spoison:1;
|
||||
uint64_t rtlpmal:1;
|
||||
uint64_t rtlplle:1;
|
||||
uint64_t recrce:1;
|
||||
uint64_t rpoison:1;
|
||||
uint64_t rcemrc:1;
|
||||
uint64_t rnfemrc:1;
|
||||
uint64_t rfemrc:1;
|
||||
uint64_t rpmerc:1;
|
||||
uint64_t rptamrc:1;
|
||||
uint64_t rumep:1;
|
||||
uint64_t rvdm:1;
|
||||
uint64_t acto:1;
|
||||
uint64_t rte:1;
|
||||
uint64_t mre:1;
|
||||
uint64_t rdwdle:1;
|
||||
uint64_t rtwdle:1;
|
||||
uint64_t dpeoosd:1;
|
||||
uint64_t fcpvwt:1;
|
||||
uint64_t rpe:1;
|
||||
uint64_t fcuv:1;
|
||||
uint64_t rqo:1;
|
||||
uint64_t rauc:1;
|
||||
uint64_t racur:1;
|
||||
uint64_t racca:1;
|
||||
uint64_t caar:1;
|
||||
uint64_t rarwdns:1;
|
||||
uint64_t ramtlp:1;
|
||||
uint64_t racpp:1;
|
||||
uint64_t rawwpp:1;
|
||||
uint64_t ecrc_e:1;
|
||||
uint64_t reserved_31_63:33;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_dbg_info_en_s cn52xx;
|
||||
struct cvmx_pescx_dbg_info_en_s cn52xxp1;
|
||||
struct cvmx_pescx_dbg_info_en_s cn56xx;
|
||||
struct cvmx_pescx_dbg_info_en_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_diag_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_diag_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t pm_dst:1;
|
||||
uint64_t pm_stat:1;
|
||||
uint64_t pm_en:1;
|
||||
uint64_t aux_en:1;
|
||||
#else
|
||||
uint64_t aux_en:1;
|
||||
uint64_t pm_en:1;
|
||||
uint64_t pm_stat:1;
|
||||
uint64_t pm_dst:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_diag_status_s cn52xx;
|
||||
struct cvmx_pescx_diag_status_s cn52xxp1;
|
||||
struct cvmx_pescx_diag_status_s cn56xx;
|
||||
struct cvmx_pescx_diag_status_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_p2n_bar0_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_p2n_bar0_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:50;
|
||||
uint64_t reserved_0_13:14;
|
||||
#else
|
||||
uint64_t reserved_0_13:14;
|
||||
uint64_t addr:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_p2n_bar0_start_s cn52xx;
|
||||
struct cvmx_pescx_p2n_bar0_start_s cn52xxp1;
|
||||
struct cvmx_pescx_p2n_bar0_start_s cn56xx;
|
||||
struct cvmx_pescx_p2n_bar0_start_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_p2n_bar1_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_p2n_bar1_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:38;
|
||||
uint64_t reserved_0_25:26;
|
||||
#else
|
||||
uint64_t reserved_0_25:26;
|
||||
uint64_t addr:38;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_p2n_bar1_start_s cn52xx;
|
||||
struct cvmx_pescx_p2n_bar1_start_s cn52xxp1;
|
||||
struct cvmx_pescx_p2n_bar1_start_s cn56xx;
|
||||
struct cvmx_pescx_p2n_bar1_start_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_p2n_bar2_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_p2n_bar2_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:25;
|
||||
uint64_t reserved_0_38:39;
|
||||
#else
|
||||
uint64_t reserved_0_38:39;
|
||||
uint64_t addr:25;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_p2n_bar2_start_s cn52xx;
|
||||
struct cvmx_pescx_p2n_bar2_start_s cn52xxp1;
|
||||
struct cvmx_pescx_p2n_bar2_start_s cn56xx;
|
||||
struct cvmx_pescx_p2n_bar2_start_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_p2p_barx_end {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_p2p_barx_end_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:52;
|
||||
uint64_t reserved_0_11:12;
|
||||
#else
|
||||
uint64_t reserved_0_11:12;
|
||||
uint64_t addr:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_p2p_barx_end_s cn52xx;
|
||||
struct cvmx_pescx_p2p_barx_end_s cn52xxp1;
|
||||
struct cvmx_pescx_p2p_barx_end_s cn56xx;
|
||||
struct cvmx_pescx_p2p_barx_end_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_p2p_barx_start {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_p2p_barx_start_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t addr:52;
|
||||
uint64_t reserved_0_11:12;
|
||||
#else
|
||||
uint64_t reserved_0_11:12;
|
||||
uint64_t addr:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_p2p_barx_start_s cn52xx;
|
||||
struct cvmx_pescx_p2p_barx_start_s cn52xxp1;
|
||||
struct cvmx_pescx_p2p_barx_start_s cn56xx;
|
||||
struct cvmx_pescx_p2p_barx_start_s cn56xxp1;
|
||||
};
|
||||
|
||||
union cvmx_pescx_tlp_credits {
|
||||
uint64_t u64;
|
||||
struct cvmx_pescx_tlp_credits_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_0_63:64;
|
||||
#else
|
||||
uint64_t reserved_0_63:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_pescx_tlp_credits_cn52xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_56_63:8;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t pesc_cpl:8;
|
||||
uint64_t pesc_np:8;
|
||||
uint64_t pesc_p:8;
|
||||
uint64_t npei_cpl:8;
|
||||
uint64_t npei_np:8;
|
||||
uint64_t npei_p:8;
|
||||
#else
|
||||
uint64_t npei_p:8;
|
||||
uint64_t npei_np:8;
|
||||
uint64_t npei_cpl:8;
|
||||
uint64_t pesc_p:8;
|
||||
uint64_t pesc_np:8;
|
||||
uint64_t pesc_cpl:8;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t reserved_56_63:8;
|
||||
#endif
|
||||
} cn52xx;
|
||||
struct cvmx_pescx_tlp_credits_cn52xxp1 {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_38_63:26;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t pesc_cpl:5;
|
||||
uint64_t pesc_np:5;
|
||||
uint64_t pesc_p:5;
|
||||
uint64_t npei_cpl:5;
|
||||
uint64_t npei_np:5;
|
||||
uint64_t npei_p:5;
|
||||
#else
|
||||
uint64_t npei_p:5;
|
||||
uint64_t npei_np:5;
|
||||
uint64_t npei_cpl:5;
|
||||
uint64_t pesc_p:5;
|
||||
uint64_t pesc_np:5;
|
||||
uint64_t pesc_cpl:5;
|
||||
uint64_t peai_ppf:8;
|
||||
uint64_t reserved_38_63:26;
|
||||
#endif
|
||||
} cn52xxp1;
|
||||
struct cvmx_pescx_tlp_credits_cn52xx cn56xx;
|
||||
struct cvmx_pescx_tlp_credits_cn52xxp1 cn56xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
224
arch/mips/include/asm/octeon/cvmx-pexp-defs.h
Normal file
224
arch/mips/include/asm/octeon/cvmx-pexp-defs.h
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_PEXP_DEFS_H__
|
||||
#define __CVMX_PEXP_DEFS_H__
|
||||
|
||||
#define CVMX_PEXP_NPEI_BAR1_INDEXX(offset) (CVMX_ADD_IO_SEG(0x00011F0000008000ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011F0000008580ull))
|
||||
#define CVMX_PEXP_NPEI_BIST_STATUS2 (CVMX_ADD_IO_SEG(0x00011F0000008680ull))
|
||||
#define CVMX_PEXP_NPEI_CTL_PORT0 (CVMX_ADD_IO_SEG(0x00011F0000008250ull))
|
||||
#define CVMX_PEXP_NPEI_CTL_PORT1 (CVMX_ADD_IO_SEG(0x00011F0000008260ull))
|
||||
#define CVMX_PEXP_NPEI_CTL_STATUS (CVMX_ADD_IO_SEG(0x00011F0000008570ull))
|
||||
#define CVMX_PEXP_NPEI_CTL_STATUS2 (CVMX_ADD_IO_SEG(0x00011F000000BC00ull))
|
||||
#define CVMX_PEXP_NPEI_DATA_OUT_CNT (CVMX_ADD_IO_SEG(0x00011F00000085F0ull))
|
||||
#define CVMX_PEXP_NPEI_DBG_DATA (CVMX_ADD_IO_SEG(0x00011F0000008510ull))
|
||||
#define CVMX_PEXP_NPEI_DBG_SELECT (CVMX_ADD_IO_SEG(0x00011F0000008500ull))
|
||||
#define CVMX_PEXP_NPEI_DMA0_INT_LEVEL (CVMX_ADD_IO_SEG(0x00011F00000085C0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA1_INT_LEVEL (CVMX_ADD_IO_SEG(0x00011F00000085D0ull))
|
||||
#define CVMX_PEXP_NPEI_DMAX_COUNTS(offset) (CVMX_ADD_IO_SEG(0x00011F0000008450ull) + ((offset) & 7) * 16)
|
||||
#define CVMX_PEXP_NPEI_DMAX_DBELL(offset) (CVMX_ADD_IO_SEG(0x00011F00000083B0ull) + ((offset) & 7) * 16)
|
||||
#define CVMX_PEXP_NPEI_DMAX_IBUFF_SADDR(offset) (CVMX_ADD_IO_SEG(0x00011F0000008400ull) + ((offset) & 7) * 16)
|
||||
#define CVMX_PEXP_NPEI_DMAX_NADDR(offset) (CVMX_ADD_IO_SEG(0x00011F00000084A0ull) + ((offset) & 7) * 16)
|
||||
#define CVMX_PEXP_NPEI_DMA_CNTS (CVMX_ADD_IO_SEG(0x00011F00000085E0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_CONTROL (CVMX_ADD_IO_SEG(0x00011F00000083A0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_PCIE_REQ_NUM (CVMX_ADD_IO_SEG(0x00011F00000085B0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE1 (CVMX_ADD_IO_SEG(0x00011F00000086C0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE1_P1 (CVMX_ADD_IO_SEG(0x00011F0000008680ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE2 (CVMX_ADD_IO_SEG(0x00011F00000086D0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE2_P1 (CVMX_ADD_IO_SEG(0x00011F0000008690ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE3_P1 (CVMX_ADD_IO_SEG(0x00011F00000086A0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE4_P1 (CVMX_ADD_IO_SEG(0x00011F00000086B0ull))
|
||||
#define CVMX_PEXP_NPEI_DMA_STATE5_P1 (CVMX_ADD_IO_SEG(0x00011F00000086C0ull))
|
||||
#define CVMX_PEXP_NPEI_INT_A_ENB (CVMX_ADD_IO_SEG(0x00011F0000008560ull))
|
||||
#define CVMX_PEXP_NPEI_INT_A_ENB2 (CVMX_ADD_IO_SEG(0x00011F000000BCE0ull))
|
||||
#define CVMX_PEXP_NPEI_INT_A_SUM (CVMX_ADD_IO_SEG(0x00011F0000008550ull))
|
||||
#define CVMX_PEXP_NPEI_INT_ENB (CVMX_ADD_IO_SEG(0x00011F0000008540ull))
|
||||
#define CVMX_PEXP_NPEI_INT_ENB2 (CVMX_ADD_IO_SEG(0x00011F000000BCD0ull))
|
||||
#define CVMX_PEXP_NPEI_INT_INFO (CVMX_ADD_IO_SEG(0x00011F0000008590ull))
|
||||
#define CVMX_PEXP_NPEI_INT_SUM (CVMX_ADD_IO_SEG(0x00011F0000008530ull))
|
||||
#define CVMX_PEXP_NPEI_INT_SUM2 (CVMX_ADD_IO_SEG(0x00011F000000BCC0ull))
|
||||
#define CVMX_PEXP_NPEI_LAST_WIN_RDATA0 (CVMX_ADD_IO_SEG(0x00011F0000008600ull))
|
||||
#define CVMX_PEXP_NPEI_LAST_WIN_RDATA1 (CVMX_ADD_IO_SEG(0x00011F0000008610ull))
|
||||
#define CVMX_PEXP_NPEI_MEM_ACCESS_CTL (CVMX_ADD_IO_SEG(0x00011F00000084F0ull))
|
||||
#define CVMX_PEXP_NPEI_MEM_ACCESS_SUBIDX(offset) (CVMX_ADD_IO_SEG(0x00011F0000008280ull) + ((offset) & 31) * 16 - 16*12)
|
||||
#define CVMX_PEXP_NPEI_MSI_ENB0 (CVMX_ADD_IO_SEG(0x00011F000000BC50ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_ENB1 (CVMX_ADD_IO_SEG(0x00011F000000BC60ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_ENB2 (CVMX_ADD_IO_SEG(0x00011F000000BC70ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_ENB3 (CVMX_ADD_IO_SEG(0x00011F000000BC80ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_RCV0 (CVMX_ADD_IO_SEG(0x00011F000000BC10ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_RCV1 (CVMX_ADD_IO_SEG(0x00011F000000BC20ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_RCV2 (CVMX_ADD_IO_SEG(0x00011F000000BC30ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_RCV3 (CVMX_ADD_IO_SEG(0x00011F000000BC40ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_RD_MAP (CVMX_ADD_IO_SEG(0x00011F000000BCA0ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1C_ENB0 (CVMX_ADD_IO_SEG(0x00011F000000BCF0ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1C_ENB1 (CVMX_ADD_IO_SEG(0x00011F000000BD00ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1C_ENB2 (CVMX_ADD_IO_SEG(0x00011F000000BD10ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1C_ENB3 (CVMX_ADD_IO_SEG(0x00011F000000BD20ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1S_ENB0 (CVMX_ADD_IO_SEG(0x00011F000000BD30ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1S_ENB1 (CVMX_ADD_IO_SEG(0x00011F000000BD40ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1S_ENB2 (CVMX_ADD_IO_SEG(0x00011F000000BD50ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_W1S_ENB3 (CVMX_ADD_IO_SEG(0x00011F000000BD60ull))
|
||||
#define CVMX_PEXP_NPEI_MSI_WR_MAP (CVMX_ADD_IO_SEG(0x00011F000000BC90ull))
|
||||
#define CVMX_PEXP_NPEI_PCIE_CREDIT_CNT (CVMX_ADD_IO_SEG(0x00011F000000BD70ull))
|
||||
#define CVMX_PEXP_NPEI_PCIE_MSI_RCV (CVMX_ADD_IO_SEG(0x00011F000000BCB0ull))
|
||||
#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B1 (CVMX_ADD_IO_SEG(0x00011F0000008650ull))
|
||||
#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B2 (CVMX_ADD_IO_SEG(0x00011F0000008660ull))
|
||||
#define CVMX_PEXP_NPEI_PCIE_MSI_RCV_B3 (CVMX_ADD_IO_SEG(0x00011F0000008670ull))
|
||||
#define CVMX_PEXP_NPEI_PKTX_CNTS(offset) (CVMX_ADD_IO_SEG(0x00011F000000A400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_INSTR_BADDR(offset) (CVMX_ADD_IO_SEG(0x00011F000000A800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_INSTR_BAOFF_DBELL(offset) (CVMX_ADD_IO_SEG(0x00011F000000AC00ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_INSTR_FIFO_RSIZE(offset) (CVMX_ADD_IO_SEG(0x00011F000000B000ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_INSTR_HEADER(offset) (CVMX_ADD_IO_SEG(0x00011F000000B400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_IN_BP(offset) (CVMX_ADD_IO_SEG(0x00011F000000B800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_SLIST_BADDR(offset) (CVMX_ADD_IO_SEG(0x00011F0000009400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_SLIST_BAOFF_DBELL(offset) (CVMX_ADD_IO_SEG(0x00011F0000009800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKTX_SLIST_FIFO_RSIZE(offset) (CVMX_ADD_IO_SEG(0x00011F0000009C00ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKT_CNT_INT (CVMX_ADD_IO_SEG(0x00011F0000009110ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_CNT_INT_ENB (CVMX_ADD_IO_SEG(0x00011F0000009130ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ES (CVMX_ADD_IO_SEG(0x00011F00000090B0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_DATA_OUT_NS (CVMX_ADD_IO_SEG(0x00011F00000090A0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_DATA_OUT_ROR (CVMX_ADD_IO_SEG(0x00011F0000009090ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_DPADDR (CVMX_ADD_IO_SEG(0x00011F0000009080ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_INPUT_CONTROL (CVMX_ADD_IO_SEG(0x00011F0000009150ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_INSTR_ENB (CVMX_ADD_IO_SEG(0x00011F0000009000ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_INSTR_RD_SIZE (CVMX_ADD_IO_SEG(0x00011F0000009190ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_INSTR_SIZE (CVMX_ADD_IO_SEG(0x00011F0000009020ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_INT_LEVELS (CVMX_ADD_IO_SEG(0x00011F0000009100ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_IN_BP (CVMX_ADD_IO_SEG(0x00011F00000086B0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_IN_DONEX_CNTS(offset) (CVMX_ADD_IO_SEG(0x00011F000000A000ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_NPEI_PKT_IN_INSTR_COUNTS (CVMX_ADD_IO_SEG(0x00011F00000086A0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_IN_PCIE_PORT (CVMX_ADD_IO_SEG(0x00011F00000091A0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_IPTR (CVMX_ADD_IO_SEG(0x00011F0000009070ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_OUTPUT_WMARK (CVMX_ADD_IO_SEG(0x00011F0000009160ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_OUT_BMODE (CVMX_ADD_IO_SEG(0x00011F00000090D0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_OUT_ENB (CVMX_ADD_IO_SEG(0x00011F0000009010ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_PCIE_PORT (CVMX_ADD_IO_SEG(0x00011F00000090E0ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_PORT_IN_RST (CVMX_ADD_IO_SEG(0x00011F0000008690ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_SLIST_ES (CVMX_ADD_IO_SEG(0x00011F0000009050ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_SLIST_ID_SIZE (CVMX_ADD_IO_SEG(0x00011F0000009180ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_SLIST_NS (CVMX_ADD_IO_SEG(0x00011F0000009040ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_SLIST_ROR (CVMX_ADD_IO_SEG(0x00011F0000009030ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_TIME_INT (CVMX_ADD_IO_SEG(0x00011F0000009120ull))
|
||||
#define CVMX_PEXP_NPEI_PKT_TIME_INT_ENB (CVMX_ADD_IO_SEG(0x00011F0000009140ull))
|
||||
#define CVMX_PEXP_NPEI_RSL_INT_BLOCKS (CVMX_ADD_IO_SEG(0x00011F0000008520ull))
|
||||
#define CVMX_PEXP_NPEI_SCRATCH_1 (CVMX_ADD_IO_SEG(0x00011F0000008270ull))
|
||||
#define CVMX_PEXP_NPEI_STATE1 (CVMX_ADD_IO_SEG(0x00011F0000008620ull))
|
||||
#define CVMX_PEXP_NPEI_STATE2 (CVMX_ADD_IO_SEG(0x00011F0000008630ull))
|
||||
#define CVMX_PEXP_NPEI_STATE3 (CVMX_ADD_IO_SEG(0x00011F0000008640ull))
|
||||
#define CVMX_PEXP_NPEI_WINDOW_CTL (CVMX_ADD_IO_SEG(0x00011F0000008380ull))
|
||||
#define CVMX_PEXP_SLI_BIST_STATUS (CVMX_ADD_IO_SEG(0x00011F0000010580ull))
|
||||
#define CVMX_PEXP_SLI_CTL_PORTX(offset) (CVMX_ADD_IO_SEG(0x00011F0000010050ull) + ((offset) & 3) * 16)
|
||||
#define CVMX_PEXP_SLI_CTL_STATUS (CVMX_ADD_IO_SEG(0x00011F0000010570ull))
|
||||
#define CVMX_PEXP_SLI_DATA_OUT_CNT (CVMX_ADD_IO_SEG(0x00011F00000105F0ull))
|
||||
#define CVMX_PEXP_SLI_DBG_DATA (CVMX_ADD_IO_SEG(0x00011F0000010310ull))
|
||||
#define CVMX_PEXP_SLI_DBG_SELECT (CVMX_ADD_IO_SEG(0x00011F0000010300ull))
|
||||
#define CVMX_PEXP_SLI_DMAX_CNT(offset) (CVMX_ADD_IO_SEG(0x00011F0000010400ull) + ((offset) & 1) * 16)
|
||||
#define CVMX_PEXP_SLI_DMAX_INT_LEVEL(offset) (CVMX_ADD_IO_SEG(0x00011F00000103E0ull) + ((offset) & 1) * 16)
|
||||
#define CVMX_PEXP_SLI_DMAX_TIM(offset) (CVMX_ADD_IO_SEG(0x00011F0000010420ull) + ((offset) & 1) * 16)
|
||||
#define CVMX_PEXP_SLI_INT_ENB_CIU (CVMX_ADD_IO_SEG(0x00011F0000013CD0ull))
|
||||
#define CVMX_PEXP_SLI_INT_ENB_PORTX(offset) (CVMX_ADD_IO_SEG(0x00011F0000010340ull) + ((offset) & 1) * 16)
|
||||
#define CVMX_PEXP_SLI_INT_SUM (CVMX_ADD_IO_SEG(0x00011F0000010330ull))
|
||||
#define CVMX_PEXP_SLI_LAST_WIN_RDATA0 (CVMX_ADD_IO_SEG(0x00011F0000010600ull))
|
||||
#define CVMX_PEXP_SLI_LAST_WIN_RDATA1 (CVMX_ADD_IO_SEG(0x00011F0000010610ull))
|
||||
#define CVMX_PEXP_SLI_LAST_WIN_RDATA2 (CVMX_ADD_IO_SEG(0x00011F00000106C0ull))
|
||||
#define CVMX_PEXP_SLI_LAST_WIN_RDATA3 (CVMX_ADD_IO_SEG(0x00011F00000106D0ull))
|
||||
#define CVMX_PEXP_SLI_MAC_CREDIT_CNT (CVMX_ADD_IO_SEG(0x00011F0000013D70ull))
|
||||
#define CVMX_PEXP_SLI_MAC_CREDIT_CNT2 (CVMX_ADD_IO_SEG(0x00011F0000013E10ull))
|
||||
#define CVMX_PEXP_SLI_MEM_ACCESS_CTL (CVMX_ADD_IO_SEG(0x00011F00000102F0ull))
|
||||
#define CVMX_PEXP_SLI_MEM_ACCESS_SUBIDX(offset) (CVMX_ADD_IO_SEG(0x00011F00000100E0ull) + ((offset) & 31) * 16 - 16*12)
|
||||
#define CVMX_PEXP_SLI_MSI_ENB0 (CVMX_ADD_IO_SEG(0x00011F0000013C50ull))
|
||||
#define CVMX_PEXP_SLI_MSI_ENB1 (CVMX_ADD_IO_SEG(0x00011F0000013C60ull))
|
||||
#define CVMX_PEXP_SLI_MSI_ENB2 (CVMX_ADD_IO_SEG(0x00011F0000013C70ull))
|
||||
#define CVMX_PEXP_SLI_MSI_ENB3 (CVMX_ADD_IO_SEG(0x00011F0000013C80ull))
|
||||
#define CVMX_PEXP_SLI_MSI_RCV0 (CVMX_ADD_IO_SEG(0x00011F0000013C10ull))
|
||||
#define CVMX_PEXP_SLI_MSI_RCV1 (CVMX_ADD_IO_SEG(0x00011F0000013C20ull))
|
||||
#define CVMX_PEXP_SLI_MSI_RCV2 (CVMX_ADD_IO_SEG(0x00011F0000013C30ull))
|
||||
#define CVMX_PEXP_SLI_MSI_RCV3 (CVMX_ADD_IO_SEG(0x00011F0000013C40ull))
|
||||
#define CVMX_PEXP_SLI_MSI_RD_MAP (CVMX_ADD_IO_SEG(0x00011F0000013CA0ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1C_ENB0 (CVMX_ADD_IO_SEG(0x00011F0000013CF0ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1C_ENB1 (CVMX_ADD_IO_SEG(0x00011F0000013D00ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1C_ENB2 (CVMX_ADD_IO_SEG(0x00011F0000013D10ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1C_ENB3 (CVMX_ADD_IO_SEG(0x00011F0000013D20ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1S_ENB0 (CVMX_ADD_IO_SEG(0x00011F0000013D30ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1S_ENB1 (CVMX_ADD_IO_SEG(0x00011F0000013D40ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1S_ENB2 (CVMX_ADD_IO_SEG(0x00011F0000013D50ull))
|
||||
#define CVMX_PEXP_SLI_MSI_W1S_ENB3 (CVMX_ADD_IO_SEG(0x00011F0000013D60ull))
|
||||
#define CVMX_PEXP_SLI_MSI_WR_MAP (CVMX_ADD_IO_SEG(0x00011F0000013C90ull))
|
||||
#define CVMX_PEXP_SLI_PCIE_MSI_RCV (CVMX_ADD_IO_SEG(0x00011F0000013CB0ull))
|
||||
#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B1 (CVMX_ADD_IO_SEG(0x00011F0000010650ull))
|
||||
#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B2 (CVMX_ADD_IO_SEG(0x00011F0000010660ull))
|
||||
#define CVMX_PEXP_SLI_PCIE_MSI_RCV_B3 (CVMX_ADD_IO_SEG(0x00011F0000010670ull))
|
||||
#define CVMX_PEXP_SLI_PKTX_CNTS(offset) (CVMX_ADD_IO_SEG(0x00011F0000012400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_INSTR_BADDR(offset) (CVMX_ADD_IO_SEG(0x00011F0000012800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_INSTR_BAOFF_DBELL(offset) (CVMX_ADD_IO_SEG(0x00011F0000012C00ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_INSTR_FIFO_RSIZE(offset) (CVMX_ADD_IO_SEG(0x00011F0000013000ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_INSTR_HEADER(offset) (CVMX_ADD_IO_SEG(0x00011F0000013400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_IN_BP(offset) (CVMX_ADD_IO_SEG(0x00011F0000013800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_OUT_SIZE(offset) (CVMX_ADD_IO_SEG(0x00011F0000010C00ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_SLIST_BADDR(offset) (CVMX_ADD_IO_SEG(0x00011F0000011400ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_SLIST_BAOFF_DBELL(offset) (CVMX_ADD_IO_SEG(0x00011F0000011800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKTX_SLIST_FIFO_RSIZE(offset) (CVMX_ADD_IO_SEG(0x00011F0000011C00ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKT_CNT_INT (CVMX_ADD_IO_SEG(0x00011F0000011130ull))
|
||||
#define CVMX_PEXP_SLI_PKT_CNT_INT_ENB (CVMX_ADD_IO_SEG(0x00011F0000011150ull))
|
||||
#define CVMX_PEXP_SLI_PKT_CTL (CVMX_ADD_IO_SEG(0x00011F0000011220ull))
|
||||
#define CVMX_PEXP_SLI_PKT_DATA_OUT_ES (CVMX_ADD_IO_SEG(0x00011F00000110B0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_DATA_OUT_NS (CVMX_ADD_IO_SEG(0x00011F00000110A0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_DATA_OUT_ROR (CVMX_ADD_IO_SEG(0x00011F0000011090ull))
|
||||
#define CVMX_PEXP_SLI_PKT_DPADDR (CVMX_ADD_IO_SEG(0x00011F0000011080ull))
|
||||
#define CVMX_PEXP_SLI_PKT_INPUT_CONTROL (CVMX_ADD_IO_SEG(0x00011F0000011170ull))
|
||||
#define CVMX_PEXP_SLI_PKT_INSTR_ENB (CVMX_ADD_IO_SEG(0x00011F0000011000ull))
|
||||
#define CVMX_PEXP_SLI_PKT_INSTR_RD_SIZE (CVMX_ADD_IO_SEG(0x00011F00000111A0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_INSTR_SIZE (CVMX_ADD_IO_SEG(0x00011F0000011020ull))
|
||||
#define CVMX_PEXP_SLI_PKT_INT_LEVELS (CVMX_ADD_IO_SEG(0x00011F0000011120ull))
|
||||
#define CVMX_PEXP_SLI_PKT_IN_BP (CVMX_ADD_IO_SEG(0x00011F0000011210ull))
|
||||
#define CVMX_PEXP_SLI_PKT_IN_DONEX_CNTS(offset) (CVMX_ADD_IO_SEG(0x00011F0000012000ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_PKT_IN_INSTR_COUNTS (CVMX_ADD_IO_SEG(0x00011F0000011200ull))
|
||||
#define CVMX_PEXP_SLI_PKT_IN_PCIE_PORT (CVMX_ADD_IO_SEG(0x00011F00000111B0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_IPTR (CVMX_ADD_IO_SEG(0x00011F0000011070ull))
|
||||
#define CVMX_PEXP_SLI_PKT_OUTPUT_WMARK (CVMX_ADD_IO_SEG(0x00011F0000011180ull))
|
||||
#define CVMX_PEXP_SLI_PKT_OUT_BMODE (CVMX_ADD_IO_SEG(0x00011F00000110D0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_OUT_BP_EN (CVMX_ADD_IO_SEG(0x00011F0000011240ull))
|
||||
#define CVMX_PEXP_SLI_PKT_OUT_ENB (CVMX_ADD_IO_SEG(0x00011F0000011010ull))
|
||||
#define CVMX_PEXP_SLI_PKT_PCIE_PORT (CVMX_ADD_IO_SEG(0x00011F00000110E0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_PORT_IN_RST (CVMX_ADD_IO_SEG(0x00011F00000111F0ull))
|
||||
#define CVMX_PEXP_SLI_PKT_SLIST_ES (CVMX_ADD_IO_SEG(0x00011F0000011050ull))
|
||||
#define CVMX_PEXP_SLI_PKT_SLIST_NS (CVMX_ADD_IO_SEG(0x00011F0000011040ull))
|
||||
#define CVMX_PEXP_SLI_PKT_SLIST_ROR (CVMX_ADD_IO_SEG(0x00011F0000011030ull))
|
||||
#define CVMX_PEXP_SLI_PKT_TIME_INT (CVMX_ADD_IO_SEG(0x00011F0000011140ull))
|
||||
#define CVMX_PEXP_SLI_PKT_TIME_INT_ENB (CVMX_ADD_IO_SEG(0x00011F0000011160ull))
|
||||
#define CVMX_PEXP_SLI_PORTX_PKIND(offset) (CVMX_ADD_IO_SEG(0x00011F0000010800ull) + ((offset) & 31) * 16)
|
||||
#define CVMX_PEXP_SLI_S2M_PORTX_CTL(offset) (CVMX_ADD_IO_SEG(0x00011F0000013D80ull) + ((offset) & 3) * 16)
|
||||
#define CVMX_PEXP_SLI_SCRATCH_1 (CVMX_ADD_IO_SEG(0x00011F00000103C0ull))
|
||||
#define CVMX_PEXP_SLI_SCRATCH_2 (CVMX_ADD_IO_SEG(0x00011F00000103D0ull))
|
||||
#define CVMX_PEXP_SLI_STATE1 (CVMX_ADD_IO_SEG(0x00011F0000010620ull))
|
||||
#define CVMX_PEXP_SLI_STATE2 (CVMX_ADD_IO_SEG(0x00011F0000010630ull))
|
||||
#define CVMX_PEXP_SLI_STATE3 (CVMX_ADD_IO_SEG(0x00011F0000010640ull))
|
||||
#define CVMX_PEXP_SLI_TX_PIPE (CVMX_ADD_IO_SEG(0x00011F0000011230ull))
|
||||
#define CVMX_PEXP_SLI_WINDOW_CTL (CVMX_ADD_IO_SEG(0x00011F00000102E0ull))
|
||||
|
||||
#endif
|
||||
3422
arch/mips/include/asm/octeon/cvmx-pip-defs.h
Normal file
3422
arch/mips/include/asm/octeon/cvmx-pip-defs.h
Normal file
File diff suppressed because it is too large
Load diff
524
arch/mips/include/asm/octeon/cvmx-pip.h
Normal file
524
arch/mips/include/asm/octeon/cvmx-pip.h
Normal file
|
|
@ -0,0 +1,524 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* Interface to the hardware Packet Input Processing unit.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_PIP_H__
|
||||
#define __CVMX_PIP_H__
|
||||
|
||||
#include <asm/octeon/cvmx-wqe.h>
|
||||
#include <asm/octeon/cvmx-fpa.h>
|
||||
#include <asm/octeon/cvmx-pip-defs.h>
|
||||
|
||||
#define CVMX_PIP_NUM_INPUT_PORTS 40
|
||||
#define CVMX_PIP_NUM_WATCHERS 4
|
||||
|
||||
/*
|
||||
* Encodes the different error and exception codes
|
||||
*/
|
||||
typedef enum {
|
||||
CVMX_PIP_L4_NO_ERR = 0ull,
|
||||
/*
|
||||
* 1 = TCP (UDP) packet not long enough to cover TCP (UDP)
|
||||
* header
|
||||
*/
|
||||
CVMX_PIP_L4_MAL_ERR = 1ull,
|
||||
/* 2 = TCP/UDP checksum failure */
|
||||
CVMX_PIP_CHK_ERR = 2ull,
|
||||
/*
|
||||
* 3 = TCP/UDP length check (TCP/UDP length does not match IP
|
||||
* length).
|
||||
*/
|
||||
CVMX_PIP_L4_LENGTH_ERR = 3ull,
|
||||
/* 4 = illegal TCP/UDP port (either source or dest port is zero) */
|
||||
CVMX_PIP_BAD_PRT_ERR = 4ull,
|
||||
/* 8 = TCP flags = FIN only */
|
||||
CVMX_PIP_TCP_FLG8_ERR = 8ull,
|
||||
/* 9 = TCP flags = 0 */
|
||||
CVMX_PIP_TCP_FLG9_ERR = 9ull,
|
||||
/* 10 = TCP flags = FIN+RST+* */
|
||||
CVMX_PIP_TCP_FLG10_ERR = 10ull,
|
||||
/* 11 = TCP flags = SYN+URG+* */
|
||||
CVMX_PIP_TCP_FLG11_ERR = 11ull,
|
||||
/* 12 = TCP flags = SYN+RST+* */
|
||||
CVMX_PIP_TCP_FLG12_ERR = 12ull,
|
||||
/* 13 = TCP flags = SYN+FIN+* */
|
||||
CVMX_PIP_TCP_FLG13_ERR = 13ull
|
||||
} cvmx_pip_l4_err_t;
|
||||
|
||||
typedef enum {
|
||||
|
||||
CVMX_PIP_IP_NO_ERR = 0ull,
|
||||
/* 1 = not IPv4 or IPv6 */
|
||||
CVMX_PIP_NOT_IP = 1ull,
|
||||
/* 2 = IPv4 header checksum violation */
|
||||
CVMX_PIP_IPV4_HDR_CHK = 2ull,
|
||||
/* 3 = malformed (packet not long enough to cover IP hdr) */
|
||||
CVMX_PIP_IP_MAL_HDR = 3ull,
|
||||
/* 4 = malformed (packet not long enough to cover len in IP hdr) */
|
||||
CVMX_PIP_IP_MAL_PKT = 4ull,
|
||||
/* 5 = TTL / hop count equal zero */
|
||||
CVMX_PIP_TTL_HOP = 5ull,
|
||||
/* 6 = IPv4 options / IPv6 early extension headers */
|
||||
CVMX_PIP_OPTS = 6ull
|
||||
} cvmx_pip_ip_exc_t;
|
||||
|
||||
/**
|
||||
* NOTES
|
||||
* late collision (data received before collision)
|
||||
* late collisions cannot be detected by the receiver
|
||||
* they would appear as JAM bits which would appear as bad FCS
|
||||
* or carrier extend error which is CVMX_PIP_EXTEND_ERR
|
||||
*/
|
||||
typedef enum {
|
||||
/* No error */
|
||||
CVMX_PIP_RX_NO_ERR = 0ull,
|
||||
/* RGM+SPI 1 = partially received packet (buffering/bandwidth
|
||||
* not adequate) */
|
||||
CVMX_PIP_PARTIAL_ERR = 1ull,
|
||||
/* RGM+SPI 2 = receive packet too large and truncated */
|
||||
CVMX_PIP_JABBER_ERR = 2ull,
|
||||
/*
|
||||
* RGM 3 = max frame error (pkt len > max frame len) (with FCS
|
||||
* error)
|
||||
*/
|
||||
CVMX_PIP_OVER_FCS_ERR = 3ull,
|
||||
/* RGM+SPI 4 = max frame error (pkt len > max frame len) */
|
||||
CVMX_PIP_OVER_ERR = 4ull,
|
||||
/*
|
||||
* RGM 5 = nibble error (data not byte multiple - 100M and 10M
|
||||
* only)
|
||||
*/
|
||||
CVMX_PIP_ALIGN_ERR = 5ull,
|
||||
/*
|
||||
* RGM 6 = min frame error (pkt len < min frame len) (with FCS
|
||||
* error)
|
||||
*/
|
||||
CVMX_PIP_UNDER_FCS_ERR = 6ull,
|
||||
/* RGM 7 = FCS error */
|
||||
CVMX_PIP_GMX_FCS_ERR = 7ull,
|
||||
/* RGM+SPI 8 = min frame error (pkt len < min frame len) */
|
||||
CVMX_PIP_UNDER_ERR = 8ull,
|
||||
/* RGM 9 = Frame carrier extend error */
|
||||
CVMX_PIP_EXTEND_ERR = 9ull,
|
||||
/*
|
||||
* RGM 10 = length mismatch (len did not match len in L2
|
||||
* length/type)
|
||||
*/
|
||||
CVMX_PIP_LENGTH_ERR = 10ull,
|
||||
/* RGM 11 = Frame error (some or all data bits marked err) */
|
||||
CVMX_PIP_DAT_ERR = 11ull,
|
||||
/* SPI 11 = DIP4 error */
|
||||
CVMX_PIP_DIP_ERR = 11ull,
|
||||
/*
|
||||
* RGM 12 = packet was not large enough to pass the skipper -
|
||||
* no inspection could occur.
|
||||
*/
|
||||
CVMX_PIP_SKIP_ERR = 12ull,
|
||||
/*
|
||||
* RGM 13 = studder error (data not repeated - 100M and 10M
|
||||
* only)
|
||||
*/
|
||||
CVMX_PIP_NIBBLE_ERR = 13ull,
|
||||
/* RGM+SPI 16 = FCS error */
|
||||
CVMX_PIP_PIP_FCS = 16L,
|
||||
/*
|
||||
* RGM+SPI+PCI 17 = packet was not large enough to pass the
|
||||
* skipper - no inspection could occur.
|
||||
*/
|
||||
CVMX_PIP_PIP_SKIP_ERR = 17L,
|
||||
/*
|
||||
* RGM+SPI+PCI 18 = malformed l2 (packet not long enough to
|
||||
* cover L2 hdr).
|
||||
*/
|
||||
CVMX_PIP_PIP_L2_MAL_HDR = 18L
|
||||
/*
|
||||
* NOTES: xx = late collision (data received before collision)
|
||||
* late collisions cannot be detected by the receiver
|
||||
* they would appear as JAM bits which would appear as
|
||||
* bad FCS or carrier extend error which is
|
||||
* CVMX_PIP_EXTEND_ERR
|
||||
*/
|
||||
} cvmx_pip_rcv_err_t;
|
||||
|
||||
/**
|
||||
* This defines the err_code field errors in the work Q entry
|
||||
*/
|
||||
typedef union {
|
||||
cvmx_pip_l4_err_t l4_err;
|
||||
cvmx_pip_ip_exc_t ip_exc;
|
||||
cvmx_pip_rcv_err_t rcv_err;
|
||||
} cvmx_pip_err_t;
|
||||
|
||||
/**
|
||||
* Status statistics for a port
|
||||
*/
|
||||
typedef struct {
|
||||
/* Inbound octets marked to be dropped by the IPD */
|
||||
uint32_t dropped_octets;
|
||||
/* Inbound packets marked to be dropped by the IPD */
|
||||
uint32_t dropped_packets;
|
||||
/* RAW PCI Packets received by PIP per port */
|
||||
uint32_t pci_raw_packets;
|
||||
/* Number of octets processed by PIP */
|
||||
uint32_t octets;
|
||||
/* Number of packets processed by PIP */
|
||||
uint32_t packets;
|
||||
/*
|
||||
* Number of identified L2 multicast packets. Does not
|
||||
* include broadcast packets. Only includes packets whose
|
||||
* parse mode is SKIP_TO_L2
|
||||
*/
|
||||
uint32_t multicast_packets;
|
||||
/*
|
||||
* Number of identified L2 broadcast packets. Does not
|
||||
* include multicast packets. Only includes packets whose
|
||||
* parse mode is SKIP_TO_L2
|
||||
*/
|
||||
uint32_t broadcast_packets;
|
||||
/* Number of 64B packets */
|
||||
uint32_t len_64_packets;
|
||||
/* Number of 65-127B packets */
|
||||
uint32_t len_65_127_packets;
|
||||
/* Number of 128-255B packets */
|
||||
uint32_t len_128_255_packets;
|
||||
/* Number of 256-511B packets */
|
||||
uint32_t len_256_511_packets;
|
||||
/* Number of 512-1023B packets */
|
||||
uint32_t len_512_1023_packets;
|
||||
/* Number of 1024-1518B packets */
|
||||
uint32_t len_1024_1518_packets;
|
||||
/* Number of 1519-max packets */
|
||||
uint32_t len_1519_max_packets;
|
||||
/* Number of packets with FCS or Align opcode errors */
|
||||
uint32_t fcs_align_err_packets;
|
||||
/* Number of packets with length < min */
|
||||
uint32_t runt_packets;
|
||||
/* Number of packets with length < min and FCS error */
|
||||
uint32_t runt_crc_packets;
|
||||
/* Number of packets with length > max */
|
||||
uint32_t oversize_packets;
|
||||
/* Number of packets with length > max and FCS error */
|
||||
uint32_t oversize_crc_packets;
|
||||
/* Number of packets without GMX/SPX/PCI errors received by PIP */
|
||||
uint32_t inb_packets;
|
||||
/*
|
||||
* Total number of octets from all packets received by PIP,
|
||||
* including CRC
|
||||
*/
|
||||
uint64_t inb_octets;
|
||||
/* Number of packets with GMX/SPX/PCI errors received by PIP */
|
||||
uint16_t inb_errors;
|
||||
} cvmx_pip_port_status_t;
|
||||
|
||||
/**
|
||||
* Definition of the PIP custom header that can be prepended
|
||||
* to a packet by external hardware.
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/*
|
||||
* Documented as R - Set if the Packet is RAWFULL. If
|
||||
* set, this header must be the full 8 bytes.
|
||||
*/
|
||||
uint64_t rawfull:1;
|
||||
/* Must be zero */
|
||||
uint64_t reserved0:5;
|
||||
/* PIP parse mode for this packet */
|
||||
uint64_t parse_mode:2;
|
||||
/* Must be zero */
|
||||
uint64_t reserved1:1;
|
||||
/*
|
||||
* Skip amount, including this header, to the
|
||||
* beginning of the packet
|
||||
*/
|
||||
uint64_t skip_len:7;
|
||||
/* Must be zero */
|
||||
uint64_t reserved2:6;
|
||||
/* POW input queue for this packet */
|
||||
uint64_t qos:3;
|
||||
/* POW input group for this packet */
|
||||
uint64_t grp:4;
|
||||
/*
|
||||
* Flag to store this packet in the work queue entry,
|
||||
* if possible
|
||||
*/
|
||||
uint64_t rs:1;
|
||||
/* POW input tag type */
|
||||
uint64_t tag_type:2;
|
||||
/* POW input tag */
|
||||
uint64_t tag:32;
|
||||
} s;
|
||||
} cvmx_pip_pkt_inst_hdr_t;
|
||||
|
||||
/* CSR typedefs have been moved to cvmx-csr-*.h */
|
||||
|
||||
/**
|
||||
* Configure an ethernet input port
|
||||
*
|
||||
* @port_num: Port number to configure
|
||||
* @port_cfg: Port hardware configuration
|
||||
* @port_tag_cfg:
|
||||
* Port POW tagging configuration
|
||||
*/
|
||||
static inline void cvmx_pip_config_port(uint64_t port_num,
|
||||
union cvmx_pip_prt_cfgx port_cfg,
|
||||
union cvmx_pip_prt_tagx port_tag_cfg)
|
||||
{
|
||||
cvmx_write_csr(CVMX_PIP_PRT_CFGX(port_num), port_cfg.u64);
|
||||
cvmx_write_csr(CVMX_PIP_PRT_TAGX(port_num), port_tag_cfg.u64);
|
||||
}
|
||||
#if 0
|
||||
/**
|
||||
* @deprecated This function is a thin wrapper around the Pass1 version
|
||||
* of the CVMX_PIP_QOS_WATCHX CSR; Pass2 has added a field for
|
||||
* setting the group that is incompatible with this function,
|
||||
* the preferred upgrade path is to use the CSR directly.
|
||||
*
|
||||
* Configure the global QoS packet watchers. Each watcher is
|
||||
* capable of matching a field in a packet to determine the
|
||||
* QoS queue for scheduling.
|
||||
*
|
||||
* @watcher: Watcher number to configure (0 - 3).
|
||||
* @match_type: Watcher match type
|
||||
* @match_value:
|
||||
* Value the watcher will match against
|
||||
* @qos: QoS queue for packets matching this watcher
|
||||
*/
|
||||
static inline void cvmx_pip_config_watcher(uint64_t watcher,
|
||||
cvmx_pip_qos_watch_types match_type,
|
||||
uint64_t match_value, uint64_t qos)
|
||||
{
|
||||
cvmx_pip_port_watcher_cfg_t watcher_config;
|
||||
|
||||
watcher_config.u64 = 0;
|
||||
watcher_config.s.match_type = match_type;
|
||||
watcher_config.s.match_value = match_value;
|
||||
watcher_config.s.qos = qos;
|
||||
|
||||
cvmx_write_csr(CVMX_PIP_QOS_WATCHX(watcher), watcher_config.u64);
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* Configure the VLAN priority to QoS queue mapping.
|
||||
*
|
||||
* @vlan_priority:
|
||||
* VLAN priority (0-7)
|
||||
* @qos: QoS queue for packets matching this watcher
|
||||
*/
|
||||
static inline void cvmx_pip_config_vlan_qos(uint64_t vlan_priority,
|
||||
uint64_t qos)
|
||||
{
|
||||
union cvmx_pip_qos_vlanx pip_qos_vlanx;
|
||||
pip_qos_vlanx.u64 = 0;
|
||||
pip_qos_vlanx.s.qos = qos;
|
||||
cvmx_write_csr(CVMX_PIP_QOS_VLANX(vlan_priority), pip_qos_vlanx.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the Diffserv to QoS queue mapping.
|
||||
*
|
||||
* @diffserv: Diffserv field value (0-63)
|
||||
* @qos: QoS queue for packets matching this watcher
|
||||
*/
|
||||
static inline void cvmx_pip_config_diffserv_qos(uint64_t diffserv, uint64_t qos)
|
||||
{
|
||||
union cvmx_pip_qos_diffx pip_qos_diffx;
|
||||
pip_qos_diffx.u64 = 0;
|
||||
pip_qos_diffx.s.qos = qos;
|
||||
cvmx_write_csr(CVMX_PIP_QOS_DIFFX(diffserv), pip_qos_diffx.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the status counters for a port.
|
||||
*
|
||||
* @port_num: Port number to get statistics for.
|
||||
* @clear: Set to 1 to clear the counters after they are read
|
||||
* @status: Where to put the results.
|
||||
*/
|
||||
static inline void cvmx_pip_get_port_status(uint64_t port_num, uint64_t clear,
|
||||
cvmx_pip_port_status_t *status)
|
||||
{
|
||||
union cvmx_pip_stat_ctl pip_stat_ctl;
|
||||
union cvmx_pip_stat0_prtx stat0;
|
||||
union cvmx_pip_stat1_prtx stat1;
|
||||
union cvmx_pip_stat2_prtx stat2;
|
||||
union cvmx_pip_stat3_prtx stat3;
|
||||
union cvmx_pip_stat4_prtx stat4;
|
||||
union cvmx_pip_stat5_prtx stat5;
|
||||
union cvmx_pip_stat6_prtx stat6;
|
||||
union cvmx_pip_stat7_prtx stat7;
|
||||
union cvmx_pip_stat8_prtx stat8;
|
||||
union cvmx_pip_stat9_prtx stat9;
|
||||
union cvmx_pip_stat_inb_pktsx pip_stat_inb_pktsx;
|
||||
union cvmx_pip_stat_inb_octsx pip_stat_inb_octsx;
|
||||
union cvmx_pip_stat_inb_errsx pip_stat_inb_errsx;
|
||||
|
||||
pip_stat_ctl.u64 = 0;
|
||||
pip_stat_ctl.s.rdclr = clear;
|
||||
cvmx_write_csr(CVMX_PIP_STAT_CTL, pip_stat_ctl.u64);
|
||||
|
||||
stat0.u64 = cvmx_read_csr(CVMX_PIP_STAT0_PRTX(port_num));
|
||||
stat1.u64 = cvmx_read_csr(CVMX_PIP_STAT1_PRTX(port_num));
|
||||
stat2.u64 = cvmx_read_csr(CVMX_PIP_STAT2_PRTX(port_num));
|
||||
stat3.u64 = cvmx_read_csr(CVMX_PIP_STAT3_PRTX(port_num));
|
||||
stat4.u64 = cvmx_read_csr(CVMX_PIP_STAT4_PRTX(port_num));
|
||||
stat5.u64 = cvmx_read_csr(CVMX_PIP_STAT5_PRTX(port_num));
|
||||
stat6.u64 = cvmx_read_csr(CVMX_PIP_STAT6_PRTX(port_num));
|
||||
stat7.u64 = cvmx_read_csr(CVMX_PIP_STAT7_PRTX(port_num));
|
||||
stat8.u64 = cvmx_read_csr(CVMX_PIP_STAT8_PRTX(port_num));
|
||||
stat9.u64 = cvmx_read_csr(CVMX_PIP_STAT9_PRTX(port_num));
|
||||
pip_stat_inb_pktsx.u64 =
|
||||
cvmx_read_csr(CVMX_PIP_STAT_INB_PKTSX(port_num));
|
||||
pip_stat_inb_octsx.u64 =
|
||||
cvmx_read_csr(CVMX_PIP_STAT_INB_OCTSX(port_num));
|
||||
pip_stat_inb_errsx.u64 =
|
||||
cvmx_read_csr(CVMX_PIP_STAT_INB_ERRSX(port_num));
|
||||
|
||||
status->dropped_octets = stat0.s.drp_octs;
|
||||
status->dropped_packets = stat0.s.drp_pkts;
|
||||
status->octets = stat1.s.octs;
|
||||
status->pci_raw_packets = stat2.s.raw;
|
||||
status->packets = stat2.s.pkts;
|
||||
status->multicast_packets = stat3.s.mcst;
|
||||
status->broadcast_packets = stat3.s.bcst;
|
||||
status->len_64_packets = stat4.s.h64;
|
||||
status->len_65_127_packets = stat4.s.h65to127;
|
||||
status->len_128_255_packets = stat5.s.h128to255;
|
||||
status->len_256_511_packets = stat5.s.h256to511;
|
||||
status->len_512_1023_packets = stat6.s.h512to1023;
|
||||
status->len_1024_1518_packets = stat6.s.h1024to1518;
|
||||
status->len_1519_max_packets = stat7.s.h1519;
|
||||
status->fcs_align_err_packets = stat7.s.fcs;
|
||||
status->runt_packets = stat8.s.undersz;
|
||||
status->runt_crc_packets = stat8.s.frag;
|
||||
status->oversize_packets = stat9.s.oversz;
|
||||
status->oversize_crc_packets = stat9.s.jabber;
|
||||
status->inb_packets = pip_stat_inb_pktsx.s.pkts;
|
||||
status->inb_octets = pip_stat_inb_octsx.s.octs;
|
||||
status->inb_errors = pip_stat_inb_errsx.s.errs;
|
||||
|
||||
if (cvmx_octeon_is_pass1()) {
|
||||
/*
|
||||
* Kludge to fix Octeon Pass 1 errata - Drop counts
|
||||
* don't work.
|
||||
*/
|
||||
if (status->inb_packets > status->packets)
|
||||
status->dropped_packets =
|
||||
status->inb_packets - status->packets;
|
||||
else
|
||||
status->dropped_packets = 0;
|
||||
if (status->inb_octets - status->inb_packets * 4 >
|
||||
status->octets)
|
||||
status->dropped_octets =
|
||||
status->inb_octets - status->inb_packets * 4 -
|
||||
status->octets;
|
||||
else
|
||||
status->dropped_octets = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the hardware CRC engine
|
||||
*
|
||||
* @interface: Interface to configure (0 or 1)
|
||||
* @invert_result:
|
||||
* Invert the result of the CRC
|
||||
* @reflect: Reflect
|
||||
* @initialization_vector:
|
||||
* CRC initialization vector
|
||||
*/
|
||||
static inline void cvmx_pip_config_crc(uint64_t interface,
|
||||
uint64_t invert_result, uint64_t reflect,
|
||||
uint32_t initialization_vector)
|
||||
{
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN58XX)) {
|
||||
union cvmx_pip_crc_ctlx config;
|
||||
union cvmx_pip_crc_ivx pip_crc_ivx;
|
||||
|
||||
config.u64 = 0;
|
||||
config.s.invres = invert_result;
|
||||
config.s.reflect = reflect;
|
||||
cvmx_write_csr(CVMX_PIP_CRC_CTLX(interface), config.u64);
|
||||
|
||||
pip_crc_ivx.u64 = 0;
|
||||
pip_crc_ivx.s.iv = initialization_vector;
|
||||
cvmx_write_csr(CVMX_PIP_CRC_IVX(interface), pip_crc_ivx.u64);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all bits in a tag mask. This should be called on
|
||||
* startup before any calls to cvmx_pip_tag_mask_set. Each bit
|
||||
* set in the final mask represent a byte used in the packet for
|
||||
* tag generation.
|
||||
*
|
||||
* @mask_index: Which tag mask to clear (0..3)
|
||||
*/
|
||||
static inline void cvmx_pip_tag_mask_clear(uint64_t mask_index)
|
||||
{
|
||||
uint64_t index;
|
||||
union cvmx_pip_tag_incx pip_tag_incx;
|
||||
pip_tag_incx.u64 = 0;
|
||||
pip_tag_incx.s.en = 0;
|
||||
for (index = mask_index * 16; index < (mask_index + 1) * 16; index++)
|
||||
cvmx_write_csr(CVMX_PIP_TAG_INCX(index), pip_tag_incx.u64);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a range of bits in the tag mask. The tag mask is used
|
||||
* when the cvmx_pip_port_tag_cfg_t tag_mode is non zero.
|
||||
* There are four separate masks that can be configured.
|
||||
*
|
||||
* @mask_index: Which tag mask to modify (0..3)
|
||||
* @offset: Offset into the bitmask to set bits at. Use the GCC macro
|
||||
* offsetof() to determine the offsets into packet headers.
|
||||
* For example, offsetof(ethhdr, protocol) returns the offset
|
||||
* of the ethernet protocol field. The bitmask selects which
|
||||
* bytes to include the the tag, with bit offset X selecting
|
||||
* byte at offset X from the beginning of the packet data.
|
||||
* @len: Number of bytes to include. Usually this is the sizeof()
|
||||
* the field.
|
||||
*/
|
||||
static inline void cvmx_pip_tag_mask_set(uint64_t mask_index, uint64_t offset,
|
||||
uint64_t len)
|
||||
{
|
||||
while (len--) {
|
||||
union cvmx_pip_tag_incx pip_tag_incx;
|
||||
uint64_t index = mask_index * 16 + offset / 8;
|
||||
pip_tag_incx.u64 = cvmx_read_csr(CVMX_PIP_TAG_INCX(index));
|
||||
pip_tag_incx.s.en |= 0x80 >> (offset & 0x7);
|
||||
cvmx_write_csr(CVMX_PIP_TAG_INCX(index), pip_tag_incx.u64);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* __CVMX_PIP_H__ */
|
||||
2824
arch/mips/include/asm/octeon/cvmx-pko-defs.h
Normal file
2824
arch/mips/include/asm/octeon/cvmx-pko-defs.h
Normal file
File diff suppressed because it is too large
Load diff
610
arch/mips/include/asm/octeon/cvmx-pko.h
Normal file
610
arch/mips/include/asm/octeon/cvmx-pko.h
Normal file
|
|
@ -0,0 +1,610 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
*
|
||||
* Interface to the hardware Packet Output unit.
|
||||
*
|
||||
* Starting with SDK 1.7.0, the PKO output functions now support
|
||||
* two types of locking. CVMX_PKO_LOCK_ATOMIC_TAG continues to
|
||||
* function similarly to previous SDKs by using POW atomic tags
|
||||
* to preserve ordering and exclusivity. As a new option, you
|
||||
* can now pass CVMX_PKO_LOCK_CMD_QUEUE which uses a ll/sc
|
||||
* memory based locking instead. This locking has the advantage
|
||||
* of not affecting the tag state but doesn't preserve packet
|
||||
* ordering. CVMX_PKO_LOCK_CMD_QUEUE is appropriate in most
|
||||
* generic code while CVMX_PKO_LOCK_CMD_QUEUE should be used
|
||||
* with hand tuned fast path code.
|
||||
*
|
||||
* Some of other SDK differences visible to the command command
|
||||
* queuing:
|
||||
* - PKO indexes are no longer stored in the FAU. A large
|
||||
* percentage of the FAU register block used to be tied up
|
||||
* maintaining PKO queue pointers. These are now stored in a
|
||||
* global named block.
|
||||
* - The PKO <b>use_locking</b> parameter can now have a global
|
||||
* effect. Since all application use the same named block,
|
||||
* queue locking correctly applies across all operating
|
||||
* systems when using CVMX_PKO_LOCK_CMD_QUEUE.
|
||||
* - PKO 3 word commands are now supported. Use
|
||||
* cvmx_pko_send_packet_finish3().
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_PKO_H__
|
||||
#define __CVMX_PKO_H__
|
||||
|
||||
#include <asm/octeon/cvmx-fpa.h>
|
||||
#include <asm/octeon/cvmx-pow.h>
|
||||
#include <asm/octeon/cvmx-cmd-queue.h>
|
||||
#include <asm/octeon/cvmx-pko-defs.h>
|
||||
|
||||
/* Adjust the command buffer size by 1 word so that in the case of using only
|
||||
* two word PKO commands no command words stradle buffers. The useful values
|
||||
* for this are 0 and 1. */
|
||||
#define CVMX_PKO_COMMAND_BUFFER_SIZE_ADJUST (1)
|
||||
|
||||
#define CVMX_PKO_MAX_OUTPUT_QUEUES_STATIC 256
|
||||
#define CVMX_PKO_MAX_OUTPUT_QUEUES ((OCTEON_IS_MODEL(OCTEON_CN31XX) || \
|
||||
OCTEON_IS_MODEL(OCTEON_CN3010) || OCTEON_IS_MODEL(OCTEON_CN3005) || \
|
||||
OCTEON_IS_MODEL(OCTEON_CN50XX)) ? 32 : \
|
||||
(OCTEON_IS_MODEL(OCTEON_CN58XX) || \
|
||||
OCTEON_IS_MODEL(OCTEON_CN56XX)) ? 256 : 128)
|
||||
#define CVMX_PKO_NUM_OUTPUT_PORTS 40
|
||||
/* use this for queues that are not used */
|
||||
#define CVMX_PKO_MEM_QUEUE_PTRS_ILLEGAL_PID 63
|
||||
#define CVMX_PKO_QUEUE_STATIC_PRIORITY 9
|
||||
#define CVMX_PKO_ILLEGAL_QUEUE 0xFFFF
|
||||
#define CVMX_PKO_MAX_QUEUE_DEPTH 0
|
||||
|
||||
typedef enum {
|
||||
CVMX_PKO_SUCCESS,
|
||||
CVMX_PKO_INVALID_PORT,
|
||||
CVMX_PKO_INVALID_QUEUE,
|
||||
CVMX_PKO_INVALID_PRIORITY,
|
||||
CVMX_PKO_NO_MEMORY,
|
||||
CVMX_PKO_PORT_ALREADY_SETUP,
|
||||
CVMX_PKO_CMD_QUEUE_INIT_ERROR
|
||||
} cvmx_pko_status_t;
|
||||
|
||||
/**
|
||||
* This enumeration represents the differnet locking modes supported by PKO.
|
||||
*/
|
||||
typedef enum {
|
||||
/*
|
||||
* PKO doesn't do any locking. It is the responsibility of the
|
||||
* application to make sure that no other core is accessing
|
||||
* the same queue at the same time
|
||||
*/
|
||||
CVMX_PKO_LOCK_NONE = 0,
|
||||
/*
|
||||
* PKO performs an atomic tagswitch to insure exclusive access
|
||||
* to the output queue. This will maintain packet ordering on
|
||||
* output.
|
||||
*/
|
||||
CVMX_PKO_LOCK_ATOMIC_TAG = 1,
|
||||
/*
|
||||
* PKO uses the common command queue locks to insure exclusive
|
||||
* access to the output queue. This is a memory based
|
||||
* ll/sc. This is the most portable locking mechanism.
|
||||
*/
|
||||
CVMX_PKO_LOCK_CMD_QUEUE = 2,
|
||||
} cvmx_pko_lock_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t packets;
|
||||
uint64_t octets;
|
||||
uint64_t doorbell;
|
||||
} cvmx_pko_port_status_t;
|
||||
|
||||
/**
|
||||
* This structure defines the address to use on a packet enqueue
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/* Must CVMX_IO_SEG */
|
||||
uint64_t mem_space:2;
|
||||
/* Must be zero */
|
||||
uint64_t reserved:13;
|
||||
/* Must be one */
|
||||
uint64_t is_io:1;
|
||||
/* The ID of the device on the non-coherent bus */
|
||||
uint64_t did:8;
|
||||
/* Must be zero */
|
||||
uint64_t reserved2:4;
|
||||
/* Must be zero */
|
||||
uint64_t reserved3:18;
|
||||
/*
|
||||
* The hardware likes to have the output port in
|
||||
* addition to the output queue,
|
||||
*/
|
||||
uint64_t port:6;
|
||||
/*
|
||||
* The output queue to send the packet to (0-127 are
|
||||
* legal)
|
||||
*/
|
||||
uint64_t queue:9;
|
||||
/* Must be zero */
|
||||
uint64_t reserved4:3;
|
||||
} s;
|
||||
} cvmx_pko_doorbell_address_t;
|
||||
|
||||
/**
|
||||
* Structure of the first packet output command word.
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/*
|
||||
* The size of the reg1 operation - could be 8, 16,
|
||||
* 32, or 64 bits.
|
||||
*/
|
||||
uint64_t size1:2;
|
||||
/*
|
||||
* The size of the reg0 operation - could be 8, 16,
|
||||
* 32, or 64 bits.
|
||||
*/
|
||||
uint64_t size0:2;
|
||||
/*
|
||||
* If set, subtract 1, if clear, subtract packet
|
||||
* size.
|
||||
*/
|
||||
uint64_t subone1:1;
|
||||
/*
|
||||
* The register, subtract will be done if reg1 is
|
||||
* non-zero.
|
||||
*/
|
||||
uint64_t reg1:11;
|
||||
/* If set, subtract 1, if clear, subtract packet size */
|
||||
uint64_t subone0:1;
|
||||
/* The register, subtract will be done if reg0 is non-zero */
|
||||
uint64_t reg0:11;
|
||||
/*
|
||||
* When set, interpret segment pointer and segment
|
||||
* bytes in little endian order.
|
||||
*/
|
||||
uint64_t le:1;
|
||||
/*
|
||||
* When set, packet data not allocated in L2 cache by
|
||||
* PKO.
|
||||
*/
|
||||
uint64_t n2:1;
|
||||
/*
|
||||
* If set and rsp is set, word3 contains a pointer to
|
||||
* a work queue entry.
|
||||
*/
|
||||
uint64_t wqp:1;
|
||||
/* If set, the hardware will send a response when done */
|
||||
uint64_t rsp:1;
|
||||
/*
|
||||
* If set, the supplied pkt_ptr is really a pointer to
|
||||
* a list of pkt_ptr's.
|
||||
*/
|
||||
uint64_t gather:1;
|
||||
/*
|
||||
* If ipoffp1 is non zero, (ipoffp1-1) is the number
|
||||
* of bytes to IP header, and the hardware will
|
||||
* calculate and insert the UDP/TCP checksum.
|
||||
*/
|
||||
uint64_t ipoffp1:7;
|
||||
/*
|
||||
* If set, ignore the I bit (force to zero) from all
|
||||
* pointer structures.
|
||||
*/
|
||||
uint64_t ignore_i:1;
|
||||
/*
|
||||
* If clear, the hardware will attempt to free the
|
||||
* buffers containing the packet.
|
||||
*/
|
||||
uint64_t dontfree:1;
|
||||
/*
|
||||
* The total number of segs in the packet, if gather
|
||||
* set, also gather list length.
|
||||
*/
|
||||
uint64_t segs:6;
|
||||
/* Including L2, but no trailing CRC */
|
||||
uint64_t total_bytes:16;
|
||||
} s;
|
||||
} cvmx_pko_command_word0_t;
|
||||
|
||||
/* CSR typedefs have been moved to cvmx-csr-*.h */
|
||||
|
||||
/**
|
||||
* Definition of internal state for Packet output processing
|
||||
*/
|
||||
typedef struct {
|
||||
/* ptr to start of buffer, offset kept in FAU reg */
|
||||
uint64_t *start_ptr;
|
||||
} cvmx_pko_state_elem_t;
|
||||
|
||||
/**
|
||||
* Call before any other calls to initialize the packet
|
||||
* output system.
|
||||
*/
|
||||
extern void cvmx_pko_initialize_global(void);
|
||||
extern int cvmx_pko_initialize_local(void);
|
||||
|
||||
/**
|
||||
* Enables the packet output hardware. It must already be
|
||||
* configured.
|
||||
*/
|
||||
extern void cvmx_pko_enable(void);
|
||||
|
||||
/**
|
||||
* Disables the packet output. Does not affect any configuration.
|
||||
*/
|
||||
extern void cvmx_pko_disable(void);
|
||||
|
||||
/**
|
||||
* Shutdown and free resources required by packet output.
|
||||
*/
|
||||
|
||||
extern void cvmx_pko_shutdown(void);
|
||||
|
||||
/**
|
||||
* Configure a output port and the associated queues for use.
|
||||
*
|
||||
* @port: Port to configure.
|
||||
* @base_queue: First queue number to associate with this port.
|
||||
* @num_queues: Number of queues t oassociate with this port
|
||||
* @priority: Array of priority levels for each queue. Values are
|
||||
* allowed to be 1-8. A value of 8 get 8 times the traffic
|
||||
* of a value of 1. There must be num_queues elements in the
|
||||
* array.
|
||||
*/
|
||||
extern cvmx_pko_status_t cvmx_pko_config_port(uint64_t port,
|
||||
uint64_t base_queue,
|
||||
uint64_t num_queues,
|
||||
const uint64_t priority[]);
|
||||
|
||||
/**
|
||||
* Ring the packet output doorbell. This tells the packet
|
||||
* output hardware that "len" command words have been added
|
||||
* to its pending list. This command includes the required
|
||||
* CVMX_SYNCWS before the doorbell ring.
|
||||
*
|
||||
* @port: Port the packet is for
|
||||
* @queue: Queue the packet is for
|
||||
* @len: Length of the command in 64 bit words
|
||||
*/
|
||||
static inline void cvmx_pko_doorbell(uint64_t port, uint64_t queue,
|
||||
uint64_t len)
|
||||
{
|
||||
cvmx_pko_doorbell_address_t ptr;
|
||||
|
||||
ptr.u64 = 0;
|
||||
ptr.s.mem_space = CVMX_IO_SEG;
|
||||
ptr.s.did = CVMX_OCT_DID_PKT_SEND;
|
||||
ptr.s.is_io = 1;
|
||||
ptr.s.port = port;
|
||||
ptr.s.queue = queue;
|
||||
/*
|
||||
* Need to make sure output queue data is in DRAM before
|
||||
* doorbell write.
|
||||
*/
|
||||
CVMX_SYNCWS;
|
||||
cvmx_write_io(ptr.u64, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare to send a packet. This may initiate a tag switch to
|
||||
* get exclusive access to the output queue structure, and
|
||||
* performs other prep work for the packet send operation.
|
||||
*
|
||||
* cvmx_pko_send_packet_finish() MUST be called after this function is called,
|
||||
* and must be called with the same port/queue/use_locking arguments.
|
||||
*
|
||||
* The use_locking parameter allows the caller to use three
|
||||
* possible locking modes.
|
||||
* - CVMX_PKO_LOCK_NONE
|
||||
* - PKO doesn't do any locking. It is the responsibility
|
||||
* of the application to make sure that no other core
|
||||
* is accessing the same queue at the same time.
|
||||
* - CVMX_PKO_LOCK_ATOMIC_TAG
|
||||
* - PKO performs an atomic tagswitch to insure exclusive
|
||||
* access to the output queue. This will maintain
|
||||
* packet ordering on output.
|
||||
* - CVMX_PKO_LOCK_CMD_QUEUE
|
||||
* - PKO uses the common command queue locks to insure
|
||||
* exclusive access to the output queue. This is a
|
||||
* memory based ll/sc. This is the most portable
|
||||
* locking mechanism.
|
||||
*
|
||||
* NOTE: If atomic locking is used, the POW entry CANNOT be
|
||||
* descheduled, as it does not contain a valid WQE pointer.
|
||||
*
|
||||
* @port: Port to send it on
|
||||
* @queue: Queue to use
|
||||
* @use_locking: CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or
|
||||
* CVMX_PKO_LOCK_CMD_QUEUE
|
||||
*/
|
||||
|
||||
static inline void cvmx_pko_send_packet_prepare(uint64_t port, uint64_t queue,
|
||||
cvmx_pko_lock_t use_locking)
|
||||
{
|
||||
if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG) {
|
||||
/*
|
||||
* Must do a full switch here to handle all cases. We
|
||||
* use a fake WQE pointer, as the POW does not access
|
||||
* this memory. The WQE pointer and group are only
|
||||
* used if this work is descheduled, which is not
|
||||
* supported by the
|
||||
* cvmx_pko_send_packet_prepare/cvmx_pko_send_packet_finish
|
||||
* combination. Note that this is a special case in
|
||||
* which these fake values can be used - this is not a
|
||||
* general technique.
|
||||
*/
|
||||
uint32_t tag =
|
||||
CVMX_TAG_SW_BITS_INTERNAL << CVMX_TAG_SW_SHIFT |
|
||||
CVMX_TAG_SUBGROUP_PKO << CVMX_TAG_SUBGROUP_SHIFT |
|
||||
(CVMX_TAG_SUBGROUP_MASK & queue);
|
||||
cvmx_pow_tag_sw_full((cvmx_wqe_t *) cvmx_phys_to_ptr(0x80), tag,
|
||||
CVMX_POW_TAG_TYPE_ATOMIC, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete packet output. cvmx_pko_send_packet_prepare() must be
|
||||
* called exactly once before this, and the same parameters must be
|
||||
* passed to both cvmx_pko_send_packet_prepare() and
|
||||
* cvmx_pko_send_packet_finish().
|
||||
*
|
||||
* @port: Port to send it on
|
||||
* @queue: Queue to use
|
||||
* @pko_command:
|
||||
* PKO HW command word
|
||||
* @packet: Packet to send
|
||||
* @use_locking: CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or
|
||||
* CVMX_PKO_LOCK_CMD_QUEUE
|
||||
*
|
||||
* Returns returns CVMX_PKO_SUCCESS on success, or error code on
|
||||
* failure of output
|
||||
*/
|
||||
static inline cvmx_pko_status_t cvmx_pko_send_packet_finish(
|
||||
uint64_t port,
|
||||
uint64_t queue,
|
||||
cvmx_pko_command_word0_t pko_command,
|
||||
union cvmx_buf_ptr packet,
|
||||
cvmx_pko_lock_t use_locking)
|
||||
{
|
||||
cvmx_cmd_queue_result_t result;
|
||||
if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
|
||||
cvmx_pow_tag_sw_wait();
|
||||
result = cvmx_cmd_queue_write2(CVMX_CMD_QUEUE_PKO(queue),
|
||||
(use_locking == CVMX_PKO_LOCK_CMD_QUEUE),
|
||||
pko_command.u64, packet.u64);
|
||||
if (likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
|
||||
cvmx_pko_doorbell(port, queue, 2);
|
||||
return CVMX_PKO_SUCCESS;
|
||||
} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY)
|
||||
|| (result == CVMX_CMD_QUEUE_FULL)) {
|
||||
return CVMX_PKO_NO_MEMORY;
|
||||
} else {
|
||||
return CVMX_PKO_INVALID_QUEUE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete packet output. cvmx_pko_send_packet_prepare() must be
|
||||
* called exactly once before this, and the same parameters must be
|
||||
* passed to both cvmx_pko_send_packet_prepare() and
|
||||
* cvmx_pko_send_packet_finish().
|
||||
*
|
||||
* @port: Port to send it on
|
||||
* @queue: Queue to use
|
||||
* @pko_command:
|
||||
* PKO HW command word
|
||||
* @packet: Packet to send
|
||||
* @addr: Plysical address of a work queue entry or physical address
|
||||
* to zero on complete.
|
||||
* @use_locking: CVMX_PKO_LOCK_NONE, CVMX_PKO_LOCK_ATOMIC_TAG, or
|
||||
* CVMX_PKO_LOCK_CMD_QUEUE
|
||||
*
|
||||
* Returns returns CVMX_PKO_SUCCESS on success, or error code on
|
||||
* failure of output
|
||||
*/
|
||||
static inline cvmx_pko_status_t cvmx_pko_send_packet_finish3(
|
||||
uint64_t port,
|
||||
uint64_t queue,
|
||||
cvmx_pko_command_word0_t pko_command,
|
||||
union cvmx_buf_ptr packet,
|
||||
uint64_t addr,
|
||||
cvmx_pko_lock_t use_locking)
|
||||
{
|
||||
cvmx_cmd_queue_result_t result;
|
||||
if (use_locking == CVMX_PKO_LOCK_ATOMIC_TAG)
|
||||
cvmx_pow_tag_sw_wait();
|
||||
result = cvmx_cmd_queue_write3(CVMX_CMD_QUEUE_PKO(queue),
|
||||
(use_locking == CVMX_PKO_LOCK_CMD_QUEUE),
|
||||
pko_command.u64, packet.u64, addr);
|
||||
if (likely(result == CVMX_CMD_QUEUE_SUCCESS)) {
|
||||
cvmx_pko_doorbell(port, queue, 3);
|
||||
return CVMX_PKO_SUCCESS;
|
||||
} else if ((result == CVMX_CMD_QUEUE_NO_MEMORY)
|
||||
|| (result == CVMX_CMD_QUEUE_FULL)) {
|
||||
return CVMX_PKO_NO_MEMORY;
|
||||
} else {
|
||||
return CVMX_PKO_INVALID_QUEUE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the pko output queue associated with a port and a specific core.
|
||||
* In normal mode (PKO lockless operation is disabled), the value returned
|
||||
* is the base queue.
|
||||
*
|
||||
* @port: Port number
|
||||
* @core: Core to get queue for
|
||||
*
|
||||
* Returns Core-specific output queue
|
||||
*/
|
||||
static inline int cvmx_pko_get_base_queue_per_core(int port, int core)
|
||||
{
|
||||
#ifndef CVMX_HELPER_PKO_MAX_PORTS_INTERFACE0
|
||||
#define CVMX_HELPER_PKO_MAX_PORTS_INTERFACE0 16
|
||||
#endif
|
||||
#ifndef CVMX_HELPER_PKO_MAX_PORTS_INTERFACE1
|
||||
#define CVMX_HELPER_PKO_MAX_PORTS_INTERFACE1 16
|
||||
#endif
|
||||
|
||||
if (port < CVMX_PKO_MAX_PORTS_INTERFACE0)
|
||||
return port * CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 + core;
|
||||
else if (port >= 16 && port < 16 + CVMX_PKO_MAX_PORTS_INTERFACE1)
|
||||
return CVMX_PKO_MAX_PORTS_INTERFACE0 *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 + (port -
|
||||
16) *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE1 + core;
|
||||
else if ((port >= 32) && (port < 36))
|
||||
return CVMX_PKO_MAX_PORTS_INTERFACE0 *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 +
|
||||
CVMX_PKO_MAX_PORTS_INTERFACE1 *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE1 + (port -
|
||||
32) *
|
||||
CVMX_PKO_QUEUES_PER_PORT_PCI;
|
||||
else if ((port >= 36) && (port < 40))
|
||||
return CVMX_PKO_MAX_PORTS_INTERFACE0 *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 +
|
||||
CVMX_PKO_MAX_PORTS_INTERFACE1 *
|
||||
CVMX_PKO_QUEUES_PER_PORT_INTERFACE1 +
|
||||
4 * CVMX_PKO_QUEUES_PER_PORT_PCI + (port -
|
||||
36) *
|
||||
CVMX_PKO_QUEUES_PER_PORT_LOOP;
|
||||
else
|
||||
/* Given the limit on the number of ports we can map to
|
||||
* CVMX_MAX_OUTPUT_QUEUES_STATIC queues (currently 256,
|
||||
* divided among all cores), the remaining unmapped ports
|
||||
* are assigned an illegal queue number */
|
||||
return CVMX_PKO_ILLEGAL_QUEUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* For a given port number, return the base pko output queue
|
||||
* for the port.
|
||||
*
|
||||
* @port: Port number
|
||||
* Returns Base output queue
|
||||
*/
|
||||
static inline int cvmx_pko_get_base_queue(int port)
|
||||
{
|
||||
return cvmx_pko_get_base_queue_per_core(port, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* For a given port number, return the number of pko output queues.
|
||||
*
|
||||
* @port: Port number
|
||||
* Returns Number of output queues
|
||||
*/
|
||||
static inline int cvmx_pko_get_num_queues(int port)
|
||||
{
|
||||
if (port < 16)
|
||||
return CVMX_PKO_QUEUES_PER_PORT_INTERFACE0;
|
||||
else if (port < 32)
|
||||
return CVMX_PKO_QUEUES_PER_PORT_INTERFACE1;
|
||||
else if (port < 36)
|
||||
return CVMX_PKO_QUEUES_PER_PORT_PCI;
|
||||
else if (port < 40)
|
||||
return CVMX_PKO_QUEUES_PER_PORT_LOOP;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the status counters for a port.
|
||||
*
|
||||
* @port_num: Port number to get statistics for.
|
||||
* @clear: Set to 1 to clear the counters after they are read
|
||||
* @status: Where to put the results.
|
||||
*/
|
||||
static inline void cvmx_pko_get_port_status(uint64_t port_num, uint64_t clear,
|
||||
cvmx_pko_port_status_t *status)
|
||||
{
|
||||
union cvmx_pko_reg_read_idx pko_reg_read_idx;
|
||||
union cvmx_pko_mem_count0 pko_mem_count0;
|
||||
union cvmx_pko_mem_count1 pko_mem_count1;
|
||||
|
||||
pko_reg_read_idx.u64 = 0;
|
||||
pko_reg_read_idx.s.index = port_num;
|
||||
cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64);
|
||||
|
||||
pko_mem_count0.u64 = cvmx_read_csr(CVMX_PKO_MEM_COUNT0);
|
||||
status->packets = pko_mem_count0.s.count;
|
||||
if (clear) {
|
||||
pko_mem_count0.s.count = port_num;
|
||||
cvmx_write_csr(CVMX_PKO_MEM_COUNT0, pko_mem_count0.u64);
|
||||
}
|
||||
|
||||
pko_mem_count1.u64 = cvmx_read_csr(CVMX_PKO_MEM_COUNT1);
|
||||
status->octets = pko_mem_count1.s.count;
|
||||
if (clear) {
|
||||
pko_mem_count1.s.count = port_num;
|
||||
cvmx_write_csr(CVMX_PKO_MEM_COUNT1, pko_mem_count1.u64);
|
||||
}
|
||||
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN3XXX)) {
|
||||
union cvmx_pko_mem_debug9 debug9;
|
||||
pko_reg_read_idx.s.index = cvmx_pko_get_base_queue(port_num);
|
||||
cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64);
|
||||
debug9.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG9);
|
||||
status->doorbell = debug9.cn38xx.doorbell;
|
||||
} else {
|
||||
union cvmx_pko_mem_debug8 debug8;
|
||||
pko_reg_read_idx.s.index = cvmx_pko_get_base_queue(port_num);
|
||||
cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64);
|
||||
debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8);
|
||||
status->doorbell = debug8.cn58xx.doorbell;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rate limit a PKO port to a max packets/sec. This function is only
|
||||
* supported on CN57XX, CN56XX, CN55XX, and CN54XX.
|
||||
*
|
||||
* @port: Port to rate limit
|
||||
* @packets_s: Maximum packet/sec
|
||||
* @burst: Maximum number of packets to burst in a row before rate
|
||||
* limiting cuts in.
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int cvmx_pko_rate_limit_packets(int port, int packets_s, int burst);
|
||||
|
||||
/**
|
||||
* Rate limit a PKO port to a max bits/sec. This function is only
|
||||
* supported on CN57XX, CN56XX, CN55XX, and CN54XX.
|
||||
*
|
||||
* @port: Port to rate limit
|
||||
* @bits_s: PKO rate limit in bits/sec
|
||||
* @burst: Maximum number of bits to burst before rate
|
||||
* limiting cuts in.
|
||||
*
|
||||
* Returns Zero on success, negative on failure
|
||||
*/
|
||||
extern int cvmx_pko_rate_limit_bits(int port, uint64_t bits_s, int burst);
|
||||
|
||||
#endif /* __CVMX_PKO_H__ */
|
||||
1289
arch/mips/include/asm/octeon/cvmx-pow-defs.h
Normal file
1289
arch/mips/include/asm/octeon/cvmx-pow-defs.h
Normal file
File diff suppressed because it is too large
Load diff
1982
arch/mips/include/asm/octeon/cvmx-pow.h
Normal file
1982
arch/mips/include/asm/octeon/cvmx-pow.h
Normal file
File diff suppressed because it is too large
Load diff
224
arch/mips/include/asm/octeon/cvmx-rnm-defs.h
Normal file
224
arch/mips/include/asm/octeon/cvmx-rnm-defs.h
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_RNM_DEFS_H__
|
||||
#define __CVMX_RNM_DEFS_H__
|
||||
|
||||
#define CVMX_RNM_BIST_STATUS (CVMX_ADD_IO_SEG(0x0001180040000008ull))
|
||||
#define CVMX_RNM_CTL_STATUS (CVMX_ADD_IO_SEG(0x0001180040000000ull))
|
||||
#define CVMX_RNM_EER_DBG (CVMX_ADD_IO_SEG(0x0001180040000018ull))
|
||||
#define CVMX_RNM_EER_KEY (CVMX_ADD_IO_SEG(0x0001180040000010ull))
|
||||
#define CVMX_RNM_SERIAL_NUM (CVMX_ADD_IO_SEG(0x0001180040000020ull))
|
||||
|
||||
union cvmx_rnm_bist_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_rnm_bist_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_2_63:62;
|
||||
uint64_t rrc:1;
|
||||
uint64_t mem:1;
|
||||
#else
|
||||
uint64_t mem:1;
|
||||
uint64_t rrc:1;
|
||||
uint64_t reserved_2_63:62;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_rnm_bist_status_s cn30xx;
|
||||
struct cvmx_rnm_bist_status_s cn31xx;
|
||||
struct cvmx_rnm_bist_status_s cn38xx;
|
||||
struct cvmx_rnm_bist_status_s cn38xxp2;
|
||||
struct cvmx_rnm_bist_status_s cn50xx;
|
||||
struct cvmx_rnm_bist_status_s cn52xx;
|
||||
struct cvmx_rnm_bist_status_s cn52xxp1;
|
||||
struct cvmx_rnm_bist_status_s cn56xx;
|
||||
struct cvmx_rnm_bist_status_s cn56xxp1;
|
||||
struct cvmx_rnm_bist_status_s cn58xx;
|
||||
struct cvmx_rnm_bist_status_s cn58xxp1;
|
||||
struct cvmx_rnm_bist_status_s cn61xx;
|
||||
struct cvmx_rnm_bist_status_s cn63xx;
|
||||
struct cvmx_rnm_bist_status_s cn63xxp1;
|
||||
struct cvmx_rnm_bist_status_s cn66xx;
|
||||
struct cvmx_rnm_bist_status_s cn68xx;
|
||||
struct cvmx_rnm_bist_status_s cn68xxp1;
|
||||
struct cvmx_rnm_bist_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_rnm_ctl_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_rnm_ctl_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t dis_mak:1;
|
||||
uint64_t eer_lck:1;
|
||||
uint64_t eer_val:1;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t ent_en:1;
|
||||
#else
|
||||
uint64_t ent_en:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t eer_val:1;
|
||||
uint64_t eer_lck:1;
|
||||
uint64_t dis_mak:1;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_rnm_ctl_status_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t ent_en:1;
|
||||
#else
|
||||
uint64_t ent_en:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_rnm_ctl_status_cn30xx cn31xx;
|
||||
struct cvmx_rnm_ctl_status_cn30xx cn38xx;
|
||||
struct cvmx_rnm_ctl_status_cn30xx cn38xxp2;
|
||||
struct cvmx_rnm_ctl_status_cn50xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t ent_en:1;
|
||||
#else
|
||||
uint64_t ent_en:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} cn50xx;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn52xx;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn52xxp1;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn56xx;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn56xxp1;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn58xx;
|
||||
struct cvmx_rnm_ctl_status_cn50xx cn58xxp1;
|
||||
struct cvmx_rnm_ctl_status_s cn61xx;
|
||||
struct cvmx_rnm_ctl_status_cn63xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_11_63:53;
|
||||
uint64_t eer_lck:1;
|
||||
uint64_t eer_val:1;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t ent_en:1;
|
||||
#else
|
||||
uint64_t ent_en:1;
|
||||
uint64_t rng_en:1;
|
||||
uint64_t rnm_rst:1;
|
||||
uint64_t rng_rst:1;
|
||||
uint64_t exp_ent:1;
|
||||
uint64_t ent_sel:4;
|
||||
uint64_t eer_val:1;
|
||||
uint64_t eer_lck:1;
|
||||
uint64_t reserved_11_63:53;
|
||||
#endif
|
||||
} cn63xx;
|
||||
struct cvmx_rnm_ctl_status_cn63xx cn63xxp1;
|
||||
struct cvmx_rnm_ctl_status_s cn66xx;
|
||||
struct cvmx_rnm_ctl_status_cn63xx cn68xx;
|
||||
struct cvmx_rnm_ctl_status_cn63xx cn68xxp1;
|
||||
struct cvmx_rnm_ctl_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_rnm_eer_dbg {
|
||||
uint64_t u64;
|
||||
struct cvmx_rnm_eer_dbg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t dat:64;
|
||||
#else
|
||||
uint64_t dat:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_rnm_eer_dbg_s cn61xx;
|
||||
struct cvmx_rnm_eer_dbg_s cn63xx;
|
||||
struct cvmx_rnm_eer_dbg_s cn63xxp1;
|
||||
struct cvmx_rnm_eer_dbg_s cn66xx;
|
||||
struct cvmx_rnm_eer_dbg_s cn68xx;
|
||||
struct cvmx_rnm_eer_dbg_s cn68xxp1;
|
||||
struct cvmx_rnm_eer_dbg_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_rnm_eer_key {
|
||||
uint64_t u64;
|
||||
struct cvmx_rnm_eer_key_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t key:64;
|
||||
#else
|
||||
uint64_t key:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_rnm_eer_key_s cn61xx;
|
||||
struct cvmx_rnm_eer_key_s cn63xx;
|
||||
struct cvmx_rnm_eer_key_s cn63xxp1;
|
||||
struct cvmx_rnm_eer_key_s cn66xx;
|
||||
struct cvmx_rnm_eer_key_s cn68xx;
|
||||
struct cvmx_rnm_eer_key_s cn68xxp1;
|
||||
struct cvmx_rnm_eer_key_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_rnm_serial_num {
|
||||
uint64_t u64;
|
||||
struct cvmx_rnm_serial_num_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t dat:64;
|
||||
#else
|
||||
uint64_t dat:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_rnm_serial_num_s cn61xx;
|
||||
struct cvmx_rnm_serial_num_s cn63xx;
|
||||
struct cvmx_rnm_serial_num_s cn66xx;
|
||||
struct cvmx_rnm_serial_num_s cn68xx;
|
||||
struct cvmx_rnm_serial_num_s cn68xxp1;
|
||||
struct cvmx_rnm_serial_num_s cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
139
arch/mips/include/asm/octeon/cvmx-scratch.h
Normal file
139
arch/mips/include/asm/octeon/cvmx-scratch.h
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
*
|
||||
* This file provides support for the processor local scratch memory.
|
||||
* Scratch memory is byte addressable - all addresses are byte addresses.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_SCRATCH_H__
|
||||
#define __CVMX_SCRATCH_H__
|
||||
|
||||
/*
|
||||
* Note: This define must be a long, not a long long in order to
|
||||
* compile without warnings for both 32bit and 64bit.
|
||||
*/
|
||||
#define CVMX_SCRATCH_BASE (-32768l) /* 0xffffffffffff8000 */
|
||||
|
||||
/**
|
||||
* Reads an 8 bit value from the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to read from
|
||||
*
|
||||
* Returns value read
|
||||
*/
|
||||
static inline uint8_t cvmx_scratch_read8(uint64_t address)
|
||||
{
|
||||
return *CASTPTR(volatile uint8_t, CVMX_SCRATCH_BASE + address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a 16 bit value from the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to read from
|
||||
*
|
||||
* Returns value read
|
||||
*/
|
||||
static inline uint16_t cvmx_scratch_read16(uint64_t address)
|
||||
{
|
||||
return *CASTPTR(volatile uint16_t, CVMX_SCRATCH_BASE + address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a 32 bit value from the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to read from
|
||||
*
|
||||
* Returns value read
|
||||
*/
|
||||
static inline uint32_t cvmx_scratch_read32(uint64_t address)
|
||||
{
|
||||
return *CASTPTR(volatile uint32_t, CVMX_SCRATCH_BASE + address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a 64 bit value from the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to read from
|
||||
*
|
||||
* Returns value read
|
||||
*/
|
||||
static inline uint64_t cvmx_scratch_read64(uint64_t address)
|
||||
{
|
||||
return *CASTPTR(volatile uint64_t, CVMX_SCRATCH_BASE + address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes an 8 bit value to the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to write to
|
||||
* @value: value to write
|
||||
*/
|
||||
static inline void cvmx_scratch_write8(uint64_t address, uint64_t value)
|
||||
{
|
||||
*CASTPTR(volatile uint8_t, CVMX_SCRATCH_BASE + address) =
|
||||
(uint8_t) value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a 32 bit value to the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to write to
|
||||
* @value: value to write
|
||||
*/
|
||||
static inline void cvmx_scratch_write16(uint64_t address, uint64_t value)
|
||||
{
|
||||
*CASTPTR(volatile uint16_t, CVMX_SCRATCH_BASE + address) =
|
||||
(uint16_t) value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a 16 bit value to the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to write to
|
||||
* @value: value to write
|
||||
*/
|
||||
static inline void cvmx_scratch_write32(uint64_t address, uint64_t value)
|
||||
{
|
||||
*CASTPTR(volatile uint32_t, CVMX_SCRATCH_BASE + address) =
|
||||
(uint32_t) value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a 64 bit value to the processor local scratchpad memory.
|
||||
*
|
||||
* @address: byte address to write to
|
||||
* @value: value to write
|
||||
*/
|
||||
static inline void cvmx_scratch_write64(uint64_t address, uint64_t value)
|
||||
{
|
||||
*CASTPTR(volatile uint64_t, CVMX_SCRATCH_BASE + address) = value;
|
||||
}
|
||||
|
||||
#endif /* __CVMX_SCRATCH_H__ */
|
||||
3521
arch/mips/include/asm/octeon/cvmx-sli-defs.h
Normal file
3521
arch/mips/include/asm/octeon/cvmx-sli-defs.h
Normal file
File diff suppressed because it is too large
Load diff
364
arch/mips/include/asm/octeon/cvmx-smix-defs.h
Normal file
364
arch/mips/include/asm/octeon/cvmx-smix-defs.h
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_SMIX_DEFS_H__
|
||||
#define __CVMX_SMIX_DEFS_H__
|
||||
|
||||
static inline uint64_t CVMX_SMIX_CLK(unsigned long offset)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN30XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN38XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN58XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001818ull) + (offset) * 256;
|
||||
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001818ull) + (offset) * 256;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000003818ull) + (offset) * 128;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001818ull) + (offset) * 256;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_SMIX_CMD(unsigned long offset)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN30XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN38XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN58XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001800ull) + (offset) * 256;
|
||||
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001800ull) + (offset) * 256;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000003800ull) + (offset) * 128;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001800ull) + (offset) * 256;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_SMIX_EN(unsigned long offset)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN30XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN38XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN58XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001820ull) + (offset) * 256;
|
||||
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001820ull) + (offset) * 256;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000003820ull) + (offset) * 128;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001820ull) + (offset) * 256;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_SMIX_RD_DAT(unsigned long offset)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN30XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN38XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN58XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001810ull) + (offset) * 256;
|
||||
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001810ull) + (offset) * 256;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000003810ull) + (offset) * 128;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001810ull) + (offset) * 256;
|
||||
}
|
||||
|
||||
static inline uint64_t CVMX_SMIX_WR_DAT(unsigned long offset)
|
||||
{
|
||||
switch (cvmx_get_octeon_family()) {
|
||||
case OCTEON_CN30XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN38XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN58XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001808ull) + (offset) * 256;
|
||||
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
|
||||
case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001808ull) + (offset) * 256;
|
||||
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
|
||||
return CVMX_ADD_IO_SEG(0x0001180000003808ull) + (offset) * 128;
|
||||
}
|
||||
return CVMX_ADD_IO_SEG(0x0001180000001808ull) + (offset) * 256;
|
||||
}
|
||||
|
||||
union cvmx_smix_clk {
|
||||
uint64_t u64;
|
||||
struct cvmx_smix_clk_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_25_63:39;
|
||||
uint64_t mode:1;
|
||||
uint64_t reserved_21_23:3;
|
||||
uint64_t sample_hi:5;
|
||||
uint64_t sample_mode:1;
|
||||
uint64_t reserved_14_14:1;
|
||||
uint64_t clk_idle:1;
|
||||
uint64_t preamble:1;
|
||||
uint64_t sample:4;
|
||||
uint64_t phase:8;
|
||||
#else
|
||||
uint64_t phase:8;
|
||||
uint64_t sample:4;
|
||||
uint64_t preamble:1;
|
||||
uint64_t clk_idle:1;
|
||||
uint64_t reserved_14_14:1;
|
||||
uint64_t sample_mode:1;
|
||||
uint64_t sample_hi:5;
|
||||
uint64_t reserved_21_23:3;
|
||||
uint64_t mode:1;
|
||||
uint64_t reserved_25_63:39;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_smix_clk_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_21_63:43;
|
||||
uint64_t sample_hi:5;
|
||||
uint64_t sample_mode:1;
|
||||
uint64_t reserved_14_14:1;
|
||||
uint64_t clk_idle:1;
|
||||
uint64_t preamble:1;
|
||||
uint64_t sample:4;
|
||||
uint64_t phase:8;
|
||||
#else
|
||||
uint64_t phase:8;
|
||||
uint64_t sample:4;
|
||||
uint64_t preamble:1;
|
||||
uint64_t clk_idle:1;
|
||||
uint64_t reserved_14_14:1;
|
||||
uint64_t sample_mode:1;
|
||||
uint64_t sample_hi:5;
|
||||
uint64_t reserved_21_63:43;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_smix_clk_cn30xx cn31xx;
|
||||
struct cvmx_smix_clk_cn30xx cn38xx;
|
||||
struct cvmx_smix_clk_cn30xx cn38xxp2;
|
||||
struct cvmx_smix_clk_s cn50xx;
|
||||
struct cvmx_smix_clk_s cn52xx;
|
||||
struct cvmx_smix_clk_s cn52xxp1;
|
||||
struct cvmx_smix_clk_s cn56xx;
|
||||
struct cvmx_smix_clk_s cn56xxp1;
|
||||
struct cvmx_smix_clk_cn30xx cn58xx;
|
||||
struct cvmx_smix_clk_cn30xx cn58xxp1;
|
||||
struct cvmx_smix_clk_s cn61xx;
|
||||
struct cvmx_smix_clk_s cn63xx;
|
||||
struct cvmx_smix_clk_s cn63xxp1;
|
||||
struct cvmx_smix_clk_s cn66xx;
|
||||
struct cvmx_smix_clk_s cn68xx;
|
||||
struct cvmx_smix_clk_s cn68xxp1;
|
||||
struct cvmx_smix_clk_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_smix_cmd {
|
||||
uint64_t u64;
|
||||
struct cvmx_smix_cmd_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t phy_op:2;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t phy_adr:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t reg_adr:5;
|
||||
#else
|
||||
uint64_t reg_adr:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t phy_adr:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t phy_op:2;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_smix_cmd_cn30xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t phy_op:1;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t phy_adr:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t reg_adr:5;
|
||||
#else
|
||||
uint64_t reg_adr:5;
|
||||
uint64_t reserved_5_7:3;
|
||||
uint64_t phy_adr:5;
|
||||
uint64_t reserved_13_15:3;
|
||||
uint64_t phy_op:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} cn30xx;
|
||||
struct cvmx_smix_cmd_cn30xx cn31xx;
|
||||
struct cvmx_smix_cmd_cn30xx cn38xx;
|
||||
struct cvmx_smix_cmd_cn30xx cn38xxp2;
|
||||
struct cvmx_smix_cmd_s cn50xx;
|
||||
struct cvmx_smix_cmd_s cn52xx;
|
||||
struct cvmx_smix_cmd_s cn52xxp1;
|
||||
struct cvmx_smix_cmd_s cn56xx;
|
||||
struct cvmx_smix_cmd_s cn56xxp1;
|
||||
struct cvmx_smix_cmd_cn30xx cn58xx;
|
||||
struct cvmx_smix_cmd_cn30xx cn58xxp1;
|
||||
struct cvmx_smix_cmd_s cn61xx;
|
||||
struct cvmx_smix_cmd_s cn63xx;
|
||||
struct cvmx_smix_cmd_s cn63xxp1;
|
||||
struct cvmx_smix_cmd_s cn66xx;
|
||||
struct cvmx_smix_cmd_s cn68xx;
|
||||
struct cvmx_smix_cmd_s cn68xxp1;
|
||||
struct cvmx_smix_cmd_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_smix_en {
|
||||
uint64_t u64;
|
||||
struct cvmx_smix_en_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t en:1;
|
||||
#else
|
||||
uint64_t en:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_smix_en_s cn30xx;
|
||||
struct cvmx_smix_en_s cn31xx;
|
||||
struct cvmx_smix_en_s cn38xx;
|
||||
struct cvmx_smix_en_s cn38xxp2;
|
||||
struct cvmx_smix_en_s cn50xx;
|
||||
struct cvmx_smix_en_s cn52xx;
|
||||
struct cvmx_smix_en_s cn52xxp1;
|
||||
struct cvmx_smix_en_s cn56xx;
|
||||
struct cvmx_smix_en_s cn56xxp1;
|
||||
struct cvmx_smix_en_s cn58xx;
|
||||
struct cvmx_smix_en_s cn58xxp1;
|
||||
struct cvmx_smix_en_s cn61xx;
|
||||
struct cvmx_smix_en_s cn63xx;
|
||||
struct cvmx_smix_en_s cn63xxp1;
|
||||
struct cvmx_smix_en_s cn66xx;
|
||||
struct cvmx_smix_en_s cn68xx;
|
||||
struct cvmx_smix_en_s cn68xxp1;
|
||||
struct cvmx_smix_en_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_smix_rd_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_smix_rd_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t pending:1;
|
||||
uint64_t val:1;
|
||||
uint64_t dat:16;
|
||||
#else
|
||||
uint64_t dat:16;
|
||||
uint64_t val:1;
|
||||
uint64_t pending:1;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_smix_rd_dat_s cn30xx;
|
||||
struct cvmx_smix_rd_dat_s cn31xx;
|
||||
struct cvmx_smix_rd_dat_s cn38xx;
|
||||
struct cvmx_smix_rd_dat_s cn38xxp2;
|
||||
struct cvmx_smix_rd_dat_s cn50xx;
|
||||
struct cvmx_smix_rd_dat_s cn52xx;
|
||||
struct cvmx_smix_rd_dat_s cn52xxp1;
|
||||
struct cvmx_smix_rd_dat_s cn56xx;
|
||||
struct cvmx_smix_rd_dat_s cn56xxp1;
|
||||
struct cvmx_smix_rd_dat_s cn58xx;
|
||||
struct cvmx_smix_rd_dat_s cn58xxp1;
|
||||
struct cvmx_smix_rd_dat_s cn61xx;
|
||||
struct cvmx_smix_rd_dat_s cn63xx;
|
||||
struct cvmx_smix_rd_dat_s cn63xxp1;
|
||||
struct cvmx_smix_rd_dat_s cn66xx;
|
||||
struct cvmx_smix_rd_dat_s cn68xx;
|
||||
struct cvmx_smix_rd_dat_s cn68xxp1;
|
||||
struct cvmx_smix_rd_dat_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_smix_wr_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_smix_wr_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_18_63:46;
|
||||
uint64_t pending:1;
|
||||
uint64_t val:1;
|
||||
uint64_t dat:16;
|
||||
#else
|
||||
uint64_t dat:16;
|
||||
uint64_t val:1;
|
||||
uint64_t pending:1;
|
||||
uint64_t reserved_18_63:46;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_smix_wr_dat_s cn30xx;
|
||||
struct cvmx_smix_wr_dat_s cn31xx;
|
||||
struct cvmx_smix_wr_dat_s cn38xx;
|
||||
struct cvmx_smix_wr_dat_s cn38xxp2;
|
||||
struct cvmx_smix_wr_dat_s cn50xx;
|
||||
struct cvmx_smix_wr_dat_s cn52xx;
|
||||
struct cvmx_smix_wr_dat_s cn52xxp1;
|
||||
struct cvmx_smix_wr_dat_s cn56xx;
|
||||
struct cvmx_smix_wr_dat_s cn56xxp1;
|
||||
struct cvmx_smix_wr_dat_s cn58xx;
|
||||
struct cvmx_smix_wr_dat_s cn58xxp1;
|
||||
struct cvmx_smix_wr_dat_s cn61xx;
|
||||
struct cvmx_smix_wr_dat_s cn63xx;
|
||||
struct cvmx_smix_wr_dat_s cn63xxp1;
|
||||
struct cvmx_smix_wr_dat_s cn66xx;
|
||||
struct cvmx_smix_wr_dat_s cn68xx;
|
||||
struct cvmx_smix_wr_dat_s cn68xxp1;
|
||||
struct cvmx_smix_wr_dat_s cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
269
arch/mips/include/asm/octeon/cvmx-spi.h
Normal file
269
arch/mips/include/asm/octeon/cvmx-spi.h
Normal file
|
|
@ -0,0 +1,269 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
*
|
||||
* This file contains defines for the SPI interface
|
||||
*/
|
||||
#ifndef __CVMX_SPI_H__
|
||||
#define __CVMX_SPI_H__
|
||||
|
||||
#include <asm/octeon/cvmx-gmxx-defs.h>
|
||||
|
||||
/* CSR typedefs have been moved to cvmx-csr-*.h */
|
||||
|
||||
typedef enum {
|
||||
CVMX_SPI_MODE_UNKNOWN = 0,
|
||||
CVMX_SPI_MODE_TX_HALFPLEX = 1,
|
||||
CVMX_SPI_MODE_RX_HALFPLEX = 2,
|
||||
CVMX_SPI_MODE_DUPLEX = 3
|
||||
} cvmx_spi_mode_t;
|
||||
|
||||
/** Callbacks structure to customize SPI4 initialization sequence */
|
||||
typedef struct {
|
||||
/** Called to reset SPI4 DLL */
|
||||
int (*reset_cb) (int interface, cvmx_spi_mode_t mode);
|
||||
|
||||
/** Called to setup calendar */
|
||||
int (*calendar_setup_cb) (int interface, cvmx_spi_mode_t mode,
|
||||
int num_ports);
|
||||
|
||||
/** Called for Tx and Rx clock detection */
|
||||
int (*clock_detect_cb) (int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/** Called to perform link training */
|
||||
int (*training_cb) (int interface, cvmx_spi_mode_t mode, int timeout);
|
||||
|
||||
/** Called for calendar data synchronization */
|
||||
int (*calendar_sync_cb) (int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/** Called when interface is up */
|
||||
int (*interface_up_cb) (int interface, cvmx_spi_mode_t mode);
|
||||
|
||||
} cvmx_spi_callbacks_t;
|
||||
|
||||
/**
|
||||
* Return true if the supplied interface is configured for SPI
|
||||
*
|
||||
* @interface: Interface to check
|
||||
* Returns True if interface is SPI
|
||||
*/
|
||||
static inline int cvmx_spi_is_spi_interface(int interface)
|
||||
{
|
||||
uint64_t gmxState = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
|
||||
return (gmxState & 0x2) && (gmxState & 0x1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize and start the SPI interface.
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @timeout: Timeout to wait for clock synchronization in seconds
|
||||
* @num_ports: Number of SPI ports to configure
|
||||
*
|
||||
* Returns Zero on success, negative of failure.
|
||||
*/
|
||||
extern int cvmx_spi_start_interface(int interface, cvmx_spi_mode_t mode,
|
||||
int timeout, int num_ports);
|
||||
|
||||
/**
|
||||
* This routine restarts the SPI interface after it has lost synchronization
|
||||
* with its corespondant system.
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @timeout: Timeout to wait for clock synchronization in seconds
|
||||
* Returns Zero on success, negative of failure.
|
||||
*/
|
||||
extern int cvmx_spi_restart_interface(int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/**
|
||||
* Return non-zero if the SPI interface has a SPI4000 attached
|
||||
*
|
||||
* @interface: SPI interface the SPI4000 is connected to
|
||||
*
|
||||
* Returns
|
||||
*/
|
||||
static inline int cvmx_spi4000_is_present(int interface)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the SPI4000 for use
|
||||
*
|
||||
* @interface: SPI interface the SPI4000 is connected to
|
||||
*/
|
||||
static inline int cvmx_spi4000_initialize(int interface)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Poll all the SPI4000 port and check its speed
|
||||
*
|
||||
* @interface: Interface the SPI4000 is on
|
||||
* @port: Port to poll (0-9)
|
||||
* Returns Status of the port. 0=down. All other values the port is up.
|
||||
*/
|
||||
static inline union cvmx_gmxx_rxx_rx_inbnd cvmx_spi4000_check_speed(
|
||||
int interface,
|
||||
int port)
|
||||
{
|
||||
union cvmx_gmxx_rxx_rx_inbnd r;
|
||||
r.u64 = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current SPI4 initialization callbacks
|
||||
*
|
||||
* @callbacks: Pointer to the callbacks structure.to fill
|
||||
*
|
||||
* Returns Pointer to cvmx_spi_callbacks_t structure.
|
||||
*/
|
||||
extern void cvmx_spi_get_callbacks(cvmx_spi_callbacks_t *callbacks);
|
||||
|
||||
/**
|
||||
* Set new SPI4 initialization callbacks
|
||||
*
|
||||
* @new_callbacks: Pointer to an updated callbacks structure.
|
||||
*/
|
||||
extern void cvmx_spi_set_callbacks(cvmx_spi_callbacks_t *new_callbacks);
|
||||
|
||||
/**
|
||||
* Callback to perform SPI4 reset
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_reset_cb(int interface, cvmx_spi_mode_t mode);
|
||||
|
||||
/**
|
||||
* Callback to setup calendar and miscellaneous settings before clock
|
||||
* detection
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @num_ports: Number of ports to configure on SPI
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_calendar_setup_cb(int interface, cvmx_spi_mode_t mode,
|
||||
int num_ports);
|
||||
|
||||
/**
|
||||
* Callback to perform clock detection
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @timeout: Timeout to wait for clock synchronization in seconds
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_clock_detect_cb(int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/**
|
||||
* Callback to perform link training
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @timeout: Timeout to wait for link to be trained (in seconds)
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_training_cb(int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/**
|
||||
* Callback to perform calendar data synchronization
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
* @timeout: Timeout to wait for calendar data in seconds
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_calendar_sync_cb(int interface, cvmx_spi_mode_t mode,
|
||||
int timeout);
|
||||
|
||||
/**
|
||||
* Callback to handle interface up
|
||||
*
|
||||
* @interface: The identifier of the packet interface to configure and
|
||||
* use as a SPI interface.
|
||||
* @mode: The operating mode for the SPI interface. The interface
|
||||
* can operate as a full duplex (both Tx and Rx data paths
|
||||
* active) or as a halfplex (either the Tx data path is
|
||||
* active or the Rx data path is active, but not both).
|
||||
*
|
||||
* Returns Zero on success, non-zero error code on failure (will cause
|
||||
* SPI initialization to abort)
|
||||
*/
|
||||
extern int cvmx_spi_interface_up_cb(int interface, cvmx_spi_mode_t mode);
|
||||
|
||||
#endif /* __CVMX_SPI_H__ */
|
||||
232
arch/mips/include/asm/octeon/cvmx-spinlock.h
Normal file
232
arch/mips/include/asm/octeon/cvmx-spinlock.h
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
* Implementation of spinlocks for Octeon CVMX. Although similar in
|
||||
* function to Linux kernel spinlocks, they are not compatible.
|
||||
* Octeon CVMX spinlocks are only used to synchronize with the boot
|
||||
* monitor and other non-Linux programs running in the system.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_SPINLOCK_H__
|
||||
#define __CVMX_SPINLOCK_H__
|
||||
|
||||
#include <asm/octeon/cvmx-asm.h>
|
||||
|
||||
/* Spinlocks for Octeon */
|
||||
|
||||
/* define these to enable recursive spinlock debugging */
|
||||
/*#define CVMX_SPINLOCK_DEBUG */
|
||||
|
||||
/**
|
||||
* Spinlocks for Octeon CVMX
|
||||
*/
|
||||
typedef struct {
|
||||
volatile uint32_t value;
|
||||
} cvmx_spinlock_t;
|
||||
|
||||
/* note - macros not expanded in inline ASM, so values hardcoded */
|
||||
#define CVMX_SPINLOCK_UNLOCKED_VAL 0
|
||||
#define CVMX_SPINLOCK_LOCKED_VAL 1
|
||||
|
||||
#define CVMX_SPINLOCK_UNLOCKED_INITIALIZER {CVMX_SPINLOCK_UNLOCKED_VAL}
|
||||
|
||||
/**
|
||||
* Initialize a spinlock
|
||||
*
|
||||
* @lock: Lock to initialize
|
||||
*/
|
||||
static inline void cvmx_spinlock_init(cvmx_spinlock_t *lock)
|
||||
{
|
||||
lock->value = CVMX_SPINLOCK_UNLOCKED_VAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return non-zero if the spinlock is currently locked
|
||||
*
|
||||
* @lock: Lock to check
|
||||
* Returns Non-zero if locked
|
||||
*/
|
||||
static inline int cvmx_spinlock_locked(cvmx_spinlock_t *lock)
|
||||
{
|
||||
return lock->value != CVMX_SPINLOCK_UNLOCKED_VAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Releases lock
|
||||
*
|
||||
* @lock: pointer to lock structure
|
||||
*/
|
||||
static inline void cvmx_spinlock_unlock(cvmx_spinlock_t *lock)
|
||||
{
|
||||
CVMX_SYNCWS;
|
||||
lock->value = 0;
|
||||
CVMX_SYNCWS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to take the lock, but does not spin if lock is not available.
|
||||
* May take some time to acquire the lock even if it is available
|
||||
* due to the ll/sc not succeeding.
|
||||
*
|
||||
* @lock: pointer to lock structure
|
||||
*
|
||||
* Returns 0: lock successfully taken
|
||||
* 1: lock not taken, held by someone else
|
||||
* These return values match the Linux semantics.
|
||||
*/
|
||||
|
||||
static inline unsigned int cvmx_spinlock_trylock(cvmx_spinlock_t *lock)
|
||||
{
|
||||
unsigned int tmp;
|
||||
|
||||
__asm__ __volatile__(".set noreorder \n"
|
||||
"1: ll %[tmp], %[val] \n"
|
||||
/* if lock held, fail immediately */
|
||||
" bnez %[tmp], 2f \n"
|
||||
" li %[tmp], 1 \n"
|
||||
" sc %[tmp], %[val] \n"
|
||||
" beqz %[tmp], 1b \n"
|
||||
" li %[tmp], 0 \n"
|
||||
"2: \n"
|
||||
".set reorder \n" :
|
||||
[val] "+m"(lock->value), [tmp] "=&r"(tmp)
|
||||
: : "memory");
|
||||
|
||||
return tmp != 0; /* normalize to 0 or 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lock, spins until lock is taken
|
||||
*
|
||||
* @lock: pointer to lock structure
|
||||
*/
|
||||
static inline void cvmx_spinlock_lock(cvmx_spinlock_t *lock)
|
||||
{
|
||||
unsigned int tmp;
|
||||
|
||||
__asm__ __volatile__(".set noreorder \n"
|
||||
"1: ll %[tmp], %[val] \n"
|
||||
" bnez %[tmp], 1b \n"
|
||||
" li %[tmp], 1 \n"
|
||||
" sc %[tmp], %[val] \n"
|
||||
" beqz %[tmp], 1b \n"
|
||||
" nop \n"
|
||||
".set reorder \n" :
|
||||
[val] "+m"(lock->value), [tmp] "=&r"(tmp)
|
||||
: : "memory");
|
||||
|
||||
}
|
||||
|
||||
/** ********************************************************************
|
||||
* Bit spinlocks
|
||||
* These spinlocks use a single bit (bit 31) of a 32 bit word for locking.
|
||||
* The rest of the bits in the word are left undisturbed. This enables more
|
||||
* compact data structures as only 1 bit is consumed for the lock.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Gets lock, spins until lock is taken
|
||||
* Preserves the low 31 bits of the 32 bit
|
||||
* word used for the lock.
|
||||
*
|
||||
*
|
||||
* @word: word to lock bit 31 of
|
||||
*/
|
||||
static inline void cvmx_spinlock_bit_lock(uint32_t *word)
|
||||
{
|
||||
unsigned int tmp;
|
||||
unsigned int sav;
|
||||
|
||||
__asm__ __volatile__(".set noreorder \n"
|
||||
".set noat \n"
|
||||
"1: ll %[tmp], %[val] \n"
|
||||
" bbit1 %[tmp], 31, 1b \n"
|
||||
" li $at, 1 \n"
|
||||
" ins %[tmp], $at, 31, 1 \n"
|
||||
" sc %[tmp], %[val] \n"
|
||||
" beqz %[tmp], 1b \n"
|
||||
" nop \n"
|
||||
".set at \n"
|
||||
".set reorder \n" :
|
||||
[val] "+m"(*word), [tmp] "=&r"(tmp), [sav] "=&r"(sav)
|
||||
: : "memory");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to get lock, returns immediately with success/failure
|
||||
* Preserves the low 31 bits of the 32 bit
|
||||
* word used for the lock.
|
||||
*
|
||||
*
|
||||
* @word: word to lock bit 31 of
|
||||
* Returns 0: lock successfully taken
|
||||
* 1: lock not taken, held by someone else
|
||||
* These return values match the Linux semantics.
|
||||
*/
|
||||
static inline unsigned int cvmx_spinlock_bit_trylock(uint32_t *word)
|
||||
{
|
||||
unsigned int tmp;
|
||||
|
||||
__asm__ __volatile__(".set noreorder\n\t"
|
||||
".set noat\n"
|
||||
"1: ll %[tmp], %[val] \n"
|
||||
/* if lock held, fail immediately */
|
||||
" bbit1 %[tmp], 31, 2f \n"
|
||||
" li $at, 1 \n"
|
||||
" ins %[tmp], $at, 31, 1 \n"
|
||||
" sc %[tmp], %[val] \n"
|
||||
" beqz %[tmp], 1b \n"
|
||||
" li %[tmp], 0 \n"
|
||||
"2: \n"
|
||||
".set at \n"
|
||||
".set reorder \n" :
|
||||
[val] "+m"(*word), [tmp] "=&r"(tmp)
|
||||
: : "memory");
|
||||
|
||||
return tmp != 0; /* normalize to 0 or 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Releases bit lock
|
||||
*
|
||||
* Unconditionally clears bit 31 of the lock word. Note that this is
|
||||
* done non-atomically, as this implementation assumes that the rest
|
||||
* of the bits in the word are protected by the lock.
|
||||
*
|
||||
* @word: word to unlock bit 31 in
|
||||
*/
|
||||
static inline void cvmx_spinlock_bit_unlock(uint32_t *word)
|
||||
{
|
||||
CVMX_SYNCWS;
|
||||
*word &= ~(1UL << 31);
|
||||
CVMX_SYNCWS;
|
||||
}
|
||||
|
||||
#endif /* __CVMX_SPINLOCK_H__ */
|
||||
506
arch/mips/include/asm/octeon/cvmx-spxx-defs.h
Normal file
506
arch/mips/include/asm/octeon/cvmx-spxx-defs.h
Normal file
|
|
@ -0,0 +1,506 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_SPXX_DEFS_H__
|
||||
#define __CVMX_SPXX_DEFS_H__
|
||||
|
||||
#define CVMX_SPXX_BCKPRS_CNT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000340ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_BIST_STAT(block_id) (CVMX_ADD_IO_SEG(0x00011800900007F8ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_CLK_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000348ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_CLK_STAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000350ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_DBG_DESKEW_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000368ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_DBG_DESKEW_STATE(block_id) (CVMX_ADD_IO_SEG(0x0001180090000370ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_DRV_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000358ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_ERR_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000320ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_INT_DAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000318ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_INT_MSK(block_id) (CVMX_ADD_IO_SEG(0x0001180090000308ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_INT_REG(block_id) (CVMX_ADD_IO_SEG(0x0001180090000300ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_INT_SYNC(block_id) (CVMX_ADD_IO_SEG(0x0001180090000310ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_TPA_ACC(block_id) (CVMX_ADD_IO_SEG(0x0001180090000338ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_TPA_MAX(block_id) (CVMX_ADD_IO_SEG(0x0001180090000330ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_TPA_SEL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000328ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SPXX_TRN4_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000360ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
|
||||
union cvmx_spxx_bckprs_cnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_bckprs_cnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_bckprs_cnt_s cn38xx;
|
||||
struct cvmx_spxx_bckprs_cnt_s cn38xxp2;
|
||||
struct cvmx_spxx_bckprs_cnt_s cn58xx;
|
||||
struct cvmx_spxx_bckprs_cnt_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_bist_stat {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_bist_stat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_3_63:61;
|
||||
uint64_t stat2:1;
|
||||
uint64_t stat1:1;
|
||||
uint64_t stat0:1;
|
||||
#else
|
||||
uint64_t stat0:1;
|
||||
uint64_t stat1:1;
|
||||
uint64_t stat2:1;
|
||||
uint64_t reserved_3_63:61;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_bist_stat_s cn38xx;
|
||||
struct cvmx_spxx_bist_stat_s cn38xxp2;
|
||||
struct cvmx_spxx_bist_stat_s cn58xx;
|
||||
struct cvmx_spxx_bist_stat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_clk_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_clk_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t seetrn:1;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t clkdly:5;
|
||||
uint64_t runbist:1;
|
||||
uint64_t statdrv:1;
|
||||
uint64_t statrcv:1;
|
||||
uint64_t sndtrn:1;
|
||||
uint64_t drptrn:1;
|
||||
uint64_t rcvtrn:1;
|
||||
uint64_t srxdlck:1;
|
||||
#else
|
||||
uint64_t srxdlck:1;
|
||||
uint64_t rcvtrn:1;
|
||||
uint64_t drptrn:1;
|
||||
uint64_t sndtrn:1;
|
||||
uint64_t statrcv:1;
|
||||
uint64_t statdrv:1;
|
||||
uint64_t runbist:1;
|
||||
uint64_t clkdly:5;
|
||||
uint64_t reserved_12_15:4;
|
||||
uint64_t seetrn:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_clk_ctl_s cn38xx;
|
||||
struct cvmx_spxx_clk_ctl_s cn38xxp2;
|
||||
struct cvmx_spxx_clk_ctl_s cn58xx;
|
||||
struct cvmx_spxx_clk_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_clk_stat {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_clk_stat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_11_63:53;
|
||||
uint64_t stxcal:1;
|
||||
uint64_t reserved_9_9:1;
|
||||
uint64_t srxtrn:1;
|
||||
uint64_t s4clk1:1;
|
||||
uint64_t s4clk0:1;
|
||||
uint64_t d4clk1:1;
|
||||
uint64_t d4clk0:1;
|
||||
uint64_t reserved_0_3:4;
|
||||
#else
|
||||
uint64_t reserved_0_3:4;
|
||||
uint64_t d4clk0:1;
|
||||
uint64_t d4clk1:1;
|
||||
uint64_t s4clk0:1;
|
||||
uint64_t s4clk1:1;
|
||||
uint64_t srxtrn:1;
|
||||
uint64_t reserved_9_9:1;
|
||||
uint64_t stxcal:1;
|
||||
uint64_t reserved_11_63:53;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_clk_stat_s cn38xx;
|
||||
struct cvmx_spxx_clk_stat_s cn38xxp2;
|
||||
struct cvmx_spxx_clk_stat_s cn58xx;
|
||||
struct cvmx_spxx_clk_stat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_dbg_deskew_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_dbg_deskew_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_30_63:34;
|
||||
uint64_t fallnop:1;
|
||||
uint64_t fall8:1;
|
||||
uint64_t reserved_26_27:2;
|
||||
uint64_t sstep_go:1;
|
||||
uint64_t sstep:1;
|
||||
uint64_t reserved_22_23:2;
|
||||
uint64_t clrdly:1;
|
||||
uint64_t dec:1;
|
||||
uint64_t inc:1;
|
||||
uint64_t mux:1;
|
||||
uint64_t offset:5;
|
||||
uint64_t bitsel:5;
|
||||
uint64_t offdly:6;
|
||||
uint64_t dllfrc:1;
|
||||
uint64_t dlldis:1;
|
||||
#else
|
||||
uint64_t dlldis:1;
|
||||
uint64_t dllfrc:1;
|
||||
uint64_t offdly:6;
|
||||
uint64_t bitsel:5;
|
||||
uint64_t offset:5;
|
||||
uint64_t mux:1;
|
||||
uint64_t inc:1;
|
||||
uint64_t dec:1;
|
||||
uint64_t clrdly:1;
|
||||
uint64_t reserved_22_23:2;
|
||||
uint64_t sstep:1;
|
||||
uint64_t sstep_go:1;
|
||||
uint64_t reserved_26_27:2;
|
||||
uint64_t fall8:1;
|
||||
uint64_t fallnop:1;
|
||||
uint64_t reserved_30_63:34;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_dbg_deskew_ctl_s cn38xx;
|
||||
struct cvmx_spxx_dbg_deskew_ctl_s cn38xxp2;
|
||||
struct cvmx_spxx_dbg_deskew_ctl_s cn58xx;
|
||||
struct cvmx_spxx_dbg_deskew_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_dbg_deskew_state {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_dbg_deskew_state_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t testres:1;
|
||||
uint64_t unxterm:1;
|
||||
uint64_t muxsel:2;
|
||||
uint64_t offset:5;
|
||||
#else
|
||||
uint64_t offset:5;
|
||||
uint64_t muxsel:2;
|
||||
uint64_t unxterm:1;
|
||||
uint64_t testres:1;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_dbg_deskew_state_s cn38xx;
|
||||
struct cvmx_spxx_dbg_deskew_state_s cn38xxp2;
|
||||
struct cvmx_spxx_dbg_deskew_state_s cn58xx;
|
||||
struct cvmx_spxx_dbg_deskew_state_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_drv_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_drv_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_0_63:64;
|
||||
#else
|
||||
uint64_t reserved_0_63:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_drv_ctl_cn38xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t stx4ncmp:4;
|
||||
uint64_t stx4pcmp:4;
|
||||
uint64_t srx4cmp:8;
|
||||
#else
|
||||
uint64_t srx4cmp:8;
|
||||
uint64_t stx4pcmp:4;
|
||||
uint64_t stx4ncmp:4;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} cn38xx;
|
||||
struct cvmx_spxx_drv_ctl_cn38xx cn38xxp2;
|
||||
struct cvmx_spxx_drv_ctl_cn58xx {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_24_63:40;
|
||||
uint64_t stx4ncmp:4;
|
||||
uint64_t stx4pcmp:4;
|
||||
uint64_t reserved_10_15:6;
|
||||
uint64_t srx4cmp:10;
|
||||
#else
|
||||
uint64_t srx4cmp:10;
|
||||
uint64_t reserved_10_15:6;
|
||||
uint64_t stx4pcmp:4;
|
||||
uint64_t stx4ncmp:4;
|
||||
uint64_t reserved_24_63:40;
|
||||
#endif
|
||||
} cn58xx;
|
||||
struct cvmx_spxx_drv_ctl_cn58xx cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_err_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_err_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t prtnxa:1;
|
||||
uint64_t dipcls:1;
|
||||
uint64_t dippay:1;
|
||||
uint64_t reserved_4_5:2;
|
||||
uint64_t errcnt:4;
|
||||
#else
|
||||
uint64_t errcnt:4;
|
||||
uint64_t reserved_4_5:2;
|
||||
uint64_t dippay:1;
|
||||
uint64_t dipcls:1;
|
||||
uint64_t prtnxa:1;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_err_ctl_s cn38xx;
|
||||
struct cvmx_spxx_err_ctl_s cn38xxp2;
|
||||
struct cvmx_spxx_err_ctl_s cn58xx;
|
||||
struct cvmx_spxx_err_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_int_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_int_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t mul:1;
|
||||
uint64_t reserved_14_30:17;
|
||||
uint64_t calbnk:2;
|
||||
uint64_t rsvop:4;
|
||||
uint64_t prt:8;
|
||||
#else
|
||||
uint64_t prt:8;
|
||||
uint64_t rsvop:4;
|
||||
uint64_t calbnk:2;
|
||||
uint64_t reserved_14_30:17;
|
||||
uint64_t mul:1;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_int_dat_s cn38xx;
|
||||
struct cvmx_spxx_int_dat_s cn38xxp2;
|
||||
struct cvmx_spxx_int_dat_s cn58xx;
|
||||
struct cvmx_spxx_int_dat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_int_msk {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_int_msk_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t calerr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t prtnxa:1;
|
||||
#else
|
||||
uint64_t prtnxa:1;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t calerr:1;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_int_msk_s cn38xx;
|
||||
struct cvmx_spxx_int_msk_s cn38xxp2;
|
||||
struct cvmx_spxx_int_msk_s cn58xx;
|
||||
struct cvmx_spxx_int_msk_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_int_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_int_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t spf:1;
|
||||
uint64_t reserved_12_30:19;
|
||||
uint64_t calerr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t prtnxa:1;
|
||||
#else
|
||||
uint64_t prtnxa:1;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t calerr:1;
|
||||
uint64_t reserved_12_30:19;
|
||||
uint64_t spf:1;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_int_reg_s cn38xx;
|
||||
struct cvmx_spxx_int_reg_s cn38xxp2;
|
||||
struct cvmx_spxx_int_reg_s cn58xx;
|
||||
struct cvmx_spxx_int_reg_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_int_sync {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_int_sync_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_12_63:52;
|
||||
uint64_t calerr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t prtnxa:1;
|
||||
#else
|
||||
uint64_t prtnxa:1;
|
||||
uint64_t abnorm:1;
|
||||
uint64_t reserved_2_3:2;
|
||||
uint64_t spiovr:1;
|
||||
uint64_t clserr:1;
|
||||
uint64_t drwnng:1;
|
||||
uint64_t rsverr:1;
|
||||
uint64_t tpaovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t calerr:1;
|
||||
uint64_t reserved_12_63:52;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_int_sync_s cn38xx;
|
||||
struct cvmx_spxx_int_sync_s cn38xxp2;
|
||||
struct cvmx_spxx_int_sync_s cn58xx;
|
||||
struct cvmx_spxx_int_sync_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_tpa_acc {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_tpa_acc_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_tpa_acc_s cn38xx;
|
||||
struct cvmx_spxx_tpa_acc_s cn38xxp2;
|
||||
struct cvmx_spxx_tpa_acc_s cn58xx;
|
||||
struct cvmx_spxx_tpa_acc_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_tpa_max {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_tpa_max_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t max:32;
|
||||
#else
|
||||
uint64_t max:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_tpa_max_s cn38xx;
|
||||
struct cvmx_spxx_tpa_max_s cn38xxp2;
|
||||
struct cvmx_spxx_tpa_max_s cn58xx;
|
||||
struct cvmx_spxx_tpa_max_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_tpa_sel {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_tpa_sel_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t prtsel:4;
|
||||
#else
|
||||
uint64_t prtsel:4;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_tpa_sel_s cn38xx;
|
||||
struct cvmx_spxx_tpa_sel_s cn38xxp2;
|
||||
struct cvmx_spxx_tpa_sel_s cn58xx;
|
||||
struct cvmx_spxx_tpa_sel_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_spxx_trn4_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_spxx_trn4_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_13_63:51;
|
||||
uint64_t trntest:1;
|
||||
uint64_t jitter:3;
|
||||
uint64_t clr_boot:1;
|
||||
uint64_t set_boot:1;
|
||||
uint64_t maxdist:5;
|
||||
uint64_t macro_en:1;
|
||||
uint64_t mux_en:1;
|
||||
#else
|
||||
uint64_t mux_en:1;
|
||||
uint64_t macro_en:1;
|
||||
uint64_t maxdist:5;
|
||||
uint64_t set_boot:1;
|
||||
uint64_t clr_boot:1;
|
||||
uint64_t jitter:3;
|
||||
uint64_t trntest:1;
|
||||
uint64_t reserved_13_63:51;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_spxx_trn4_ctl_s cn38xx;
|
||||
struct cvmx_spxx_trn4_ctl_s cn38xxp2;
|
||||
struct cvmx_spxx_trn4_ctl_s cn58xx;
|
||||
struct cvmx_spxx_trn4_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
1737
arch/mips/include/asm/octeon/cvmx-sriox-defs.h
Normal file
1737
arch/mips/include/asm/octeon/cvmx-sriox-defs.h
Normal file
File diff suppressed because it is too large
Load diff
162
arch/mips/include/asm/octeon/cvmx-srxx-defs.h
Normal file
162
arch/mips/include/asm/octeon/cvmx-srxx-defs.h
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_SRXX_DEFS_H__
|
||||
#define __CVMX_SRXX_DEFS_H__
|
||||
|
||||
#define CVMX_SRXX_COM_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000200ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SRXX_IGN_RX_FULL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000218ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SRXX_SPI4_CALX(offset, block_id) (CVMX_ADD_IO_SEG(0x0001180090000000ull) + (((offset) & 31) + ((block_id) & 1) * 0x1000000ull) * 8)
|
||||
#define CVMX_SRXX_SPI4_STAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000208ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SRXX_SW_TICK_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000220ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_SRXX_SW_TICK_DAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000228ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
|
||||
union cvmx_srxx_com_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_com_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t prts:4;
|
||||
uint64_t st_en:1;
|
||||
uint64_t reserved_1_2:2;
|
||||
uint64_t inf_en:1;
|
||||
#else
|
||||
uint64_t inf_en:1;
|
||||
uint64_t reserved_1_2:2;
|
||||
uint64_t st_en:1;
|
||||
uint64_t prts:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_com_ctl_s cn38xx;
|
||||
struct cvmx_srxx_com_ctl_s cn38xxp2;
|
||||
struct cvmx_srxx_com_ctl_s cn58xx;
|
||||
struct cvmx_srxx_com_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_srxx_ign_rx_full {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_ign_rx_full_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t ignore:16;
|
||||
#else
|
||||
uint64_t ignore:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_ign_rx_full_s cn38xx;
|
||||
struct cvmx_srxx_ign_rx_full_s cn38xxp2;
|
||||
struct cvmx_srxx_ign_rx_full_s cn58xx;
|
||||
struct cvmx_srxx_ign_rx_full_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_srxx_spi4_calx {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_spi4_calx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t oddpar:1;
|
||||
uint64_t prt3:4;
|
||||
uint64_t prt2:4;
|
||||
uint64_t prt1:4;
|
||||
uint64_t prt0:4;
|
||||
#else
|
||||
uint64_t prt0:4;
|
||||
uint64_t prt1:4;
|
||||
uint64_t prt2:4;
|
||||
uint64_t prt3:4;
|
||||
uint64_t oddpar:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_spi4_calx_s cn38xx;
|
||||
struct cvmx_srxx_spi4_calx_s cn38xxp2;
|
||||
struct cvmx_srxx_spi4_calx_s cn58xx;
|
||||
struct cvmx_srxx_spi4_calx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_srxx_spi4_stat {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_spi4_stat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t m:8;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t len:7;
|
||||
#else
|
||||
uint64_t len:7;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t m:8;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_spi4_stat_s cn38xx;
|
||||
struct cvmx_srxx_spi4_stat_s cn38xxp2;
|
||||
struct cvmx_srxx_spi4_stat_s cn58xx;
|
||||
struct cvmx_srxx_spi4_stat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_srxx_sw_tick_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_sw_tick_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_14_63:50;
|
||||
uint64_t eop:1;
|
||||
uint64_t sop:1;
|
||||
uint64_t mod:4;
|
||||
uint64_t opc:4;
|
||||
uint64_t adr:4;
|
||||
#else
|
||||
uint64_t adr:4;
|
||||
uint64_t opc:4;
|
||||
uint64_t mod:4;
|
||||
uint64_t sop:1;
|
||||
uint64_t eop:1;
|
||||
uint64_t reserved_14_63:50;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_sw_tick_ctl_s cn38xx;
|
||||
struct cvmx_srxx_sw_tick_ctl_s cn58xx;
|
||||
struct cvmx_srxx_sw_tick_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_srxx_sw_tick_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_srxx_sw_tick_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t dat:64;
|
||||
#else
|
||||
uint64_t dat:64;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_srxx_sw_tick_dat_s cn38xx;
|
||||
struct cvmx_srxx_sw_tick_dat_s cn58xx;
|
||||
struct cvmx_srxx_sw_tick_dat_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
392
arch/mips/include/asm/octeon/cvmx-stxx-defs.h
Normal file
392
arch/mips/include/asm/octeon/cvmx-stxx-defs.h
Normal file
|
|
@ -0,0 +1,392 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_STXX_DEFS_H__
|
||||
#define __CVMX_STXX_DEFS_H__
|
||||
|
||||
#define CVMX_STXX_ARB_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000608ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_BCKPRS_CNT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000688ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_COM_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000600ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_DIP_CNT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000690ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_IGN_CAL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000610ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_INT_MSK(block_id) (CVMX_ADD_IO_SEG(0x00011800900006A0ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_INT_REG(block_id) (CVMX_ADD_IO_SEG(0x0001180090000698ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_INT_SYNC(block_id) (CVMX_ADD_IO_SEG(0x00011800900006A8ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_MIN_BST(block_id) (CVMX_ADD_IO_SEG(0x0001180090000618ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_SPI4_CALX(offset, block_id) (CVMX_ADD_IO_SEG(0x0001180090000400ull) + (((offset) & 31) + ((block_id) & 1) * 0x1000000ull) * 8)
|
||||
#define CVMX_STXX_SPI4_DAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000628ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_SPI4_STAT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000630ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_STAT_BYTES_HI(block_id) (CVMX_ADD_IO_SEG(0x0001180090000648ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_STAT_BYTES_LO(block_id) (CVMX_ADD_IO_SEG(0x0001180090000680ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_STAT_CTL(block_id) (CVMX_ADD_IO_SEG(0x0001180090000638ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
#define CVMX_STXX_STAT_PKT_XMT(block_id) (CVMX_ADD_IO_SEG(0x0001180090000640ull) + ((block_id) & 1) * 0x8000000ull)
|
||||
|
||||
union cvmx_stxx_arb_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_arb_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t mintrn:1;
|
||||
uint64_t reserved_4_4:1;
|
||||
uint64_t igntpa:1;
|
||||
uint64_t reserved_0_2:3;
|
||||
#else
|
||||
uint64_t reserved_0_2:3;
|
||||
uint64_t igntpa:1;
|
||||
uint64_t reserved_4_4:1;
|
||||
uint64_t mintrn:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_arb_ctl_s cn38xx;
|
||||
struct cvmx_stxx_arb_ctl_s cn38xxp2;
|
||||
struct cvmx_stxx_arb_ctl_s cn58xx;
|
||||
struct cvmx_stxx_arb_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_bckprs_cnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_bckprs_cnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_bckprs_cnt_s cn38xx;
|
||||
struct cvmx_stxx_bckprs_cnt_s cn38xxp2;
|
||||
struct cvmx_stxx_bckprs_cnt_s cn58xx;
|
||||
struct cvmx_stxx_bckprs_cnt_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_com_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_com_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_4_63:60;
|
||||
uint64_t st_en:1;
|
||||
uint64_t reserved_1_2:2;
|
||||
uint64_t inf_en:1;
|
||||
#else
|
||||
uint64_t inf_en:1;
|
||||
uint64_t reserved_1_2:2;
|
||||
uint64_t st_en:1;
|
||||
uint64_t reserved_4_63:60;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_com_ctl_s cn38xx;
|
||||
struct cvmx_stxx_com_ctl_s cn38xxp2;
|
||||
struct cvmx_stxx_com_ctl_s cn58xx;
|
||||
struct cvmx_stxx_com_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_dip_cnt {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_dip_cnt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t frmmax:4;
|
||||
uint64_t dipmax:4;
|
||||
#else
|
||||
uint64_t dipmax:4;
|
||||
uint64_t frmmax:4;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_dip_cnt_s cn38xx;
|
||||
struct cvmx_stxx_dip_cnt_s cn38xxp2;
|
||||
struct cvmx_stxx_dip_cnt_s cn58xx;
|
||||
struct cvmx_stxx_dip_cnt_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_ign_cal {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_ign_cal_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t igntpa:16;
|
||||
#else
|
||||
uint64_t igntpa:16;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_ign_cal_s cn38xx;
|
||||
struct cvmx_stxx_ign_cal_s cn38xxp2;
|
||||
struct cvmx_stxx_ign_cal_s cn58xx;
|
||||
struct cvmx_stxx_ign_cal_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_int_msk {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_int_msk_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t calpar0:1;
|
||||
#else
|
||||
uint64_t calpar0:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_int_msk_s cn38xx;
|
||||
struct cvmx_stxx_int_msk_s cn38xxp2;
|
||||
struct cvmx_stxx_int_msk_s cn58xx;
|
||||
struct cvmx_stxx_int_msk_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_int_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_int_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t calpar0:1;
|
||||
#else
|
||||
uint64_t calpar0:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t syncerr:1;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_int_reg_s cn38xx;
|
||||
struct cvmx_stxx_int_reg_s cn38xxp2;
|
||||
struct cvmx_stxx_int_reg_s cn58xx;
|
||||
struct cvmx_stxx_int_reg_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_int_sync {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_int_sync_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t calpar0:1;
|
||||
#else
|
||||
uint64_t calpar0:1;
|
||||
uint64_t calpar1:1;
|
||||
uint64_t ovrbst:1;
|
||||
uint64_t datovr:1;
|
||||
uint64_t diperr:1;
|
||||
uint64_t nosync:1;
|
||||
uint64_t unxfrm:1;
|
||||
uint64_t frmerr:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_int_sync_s cn38xx;
|
||||
struct cvmx_stxx_int_sync_s cn38xxp2;
|
||||
struct cvmx_stxx_int_sync_s cn58xx;
|
||||
struct cvmx_stxx_int_sync_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_min_bst {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_min_bst_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_9_63:55;
|
||||
uint64_t minb:9;
|
||||
#else
|
||||
uint64_t minb:9;
|
||||
uint64_t reserved_9_63:55;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_min_bst_s cn38xx;
|
||||
struct cvmx_stxx_min_bst_s cn38xxp2;
|
||||
struct cvmx_stxx_min_bst_s cn58xx;
|
||||
struct cvmx_stxx_min_bst_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_spi4_calx {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_spi4_calx_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_17_63:47;
|
||||
uint64_t oddpar:1;
|
||||
uint64_t prt3:4;
|
||||
uint64_t prt2:4;
|
||||
uint64_t prt1:4;
|
||||
uint64_t prt0:4;
|
||||
#else
|
||||
uint64_t prt0:4;
|
||||
uint64_t prt1:4;
|
||||
uint64_t prt2:4;
|
||||
uint64_t prt3:4;
|
||||
uint64_t oddpar:1;
|
||||
uint64_t reserved_17_63:47;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_spi4_calx_s cn38xx;
|
||||
struct cvmx_stxx_spi4_calx_s cn38xxp2;
|
||||
struct cvmx_stxx_spi4_calx_s cn58xx;
|
||||
struct cvmx_stxx_spi4_calx_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_spi4_dat {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_spi4_dat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t alpha:16;
|
||||
uint64_t max_t:16;
|
||||
#else
|
||||
uint64_t max_t:16;
|
||||
uint64_t alpha:16;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_spi4_dat_s cn38xx;
|
||||
struct cvmx_stxx_spi4_dat_s cn38xxp2;
|
||||
struct cvmx_stxx_spi4_dat_s cn58xx;
|
||||
struct cvmx_stxx_spi4_dat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_spi4_stat {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_spi4_stat_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_16_63:48;
|
||||
uint64_t m:8;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t len:7;
|
||||
#else
|
||||
uint64_t len:7;
|
||||
uint64_t reserved_7_7:1;
|
||||
uint64_t m:8;
|
||||
uint64_t reserved_16_63:48;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_spi4_stat_s cn38xx;
|
||||
struct cvmx_stxx_spi4_stat_s cn38xxp2;
|
||||
struct cvmx_stxx_spi4_stat_s cn58xx;
|
||||
struct cvmx_stxx_spi4_stat_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_stat_bytes_hi {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_stat_bytes_hi_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_stat_bytes_hi_s cn38xx;
|
||||
struct cvmx_stxx_stat_bytes_hi_s cn38xxp2;
|
||||
struct cvmx_stxx_stat_bytes_hi_s cn58xx;
|
||||
struct cvmx_stxx_stat_bytes_hi_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_stat_bytes_lo {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_stat_bytes_lo_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_stat_bytes_lo_s cn38xx;
|
||||
struct cvmx_stxx_stat_bytes_lo_s cn38xxp2;
|
||||
struct cvmx_stxx_stat_bytes_lo_s cn58xx;
|
||||
struct cvmx_stxx_stat_bytes_lo_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_stat_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_stat_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t clr:1;
|
||||
uint64_t bckprs:4;
|
||||
#else
|
||||
uint64_t bckprs:4;
|
||||
uint64_t clr:1;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_stat_ctl_s cn38xx;
|
||||
struct cvmx_stxx_stat_ctl_s cn38xxp2;
|
||||
struct cvmx_stxx_stat_ctl_s cn58xx;
|
||||
struct cvmx_stxx_stat_ctl_s cn58xxp1;
|
||||
};
|
||||
|
||||
union cvmx_stxx_stat_pkt_xmt {
|
||||
uint64_t u64;
|
||||
struct cvmx_stxx_stat_pkt_xmt_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t cnt:32;
|
||||
#else
|
||||
uint64_t cnt:32;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_stxx_stat_pkt_xmt_s cn38xx;
|
||||
struct cvmx_stxx_stat_pkt_xmt_s cn38xxp2;
|
||||
struct cvmx_stxx_stat_pkt_xmt_s cn58xx;
|
||||
struct cvmx_stxx_stat_pkt_xmt_s cn58xxp1;
|
||||
};
|
||||
|
||||
#endif
|
||||
152
arch/mips/include/asm/octeon/cvmx-sysinfo.h
Normal file
152
arch/mips/include/asm/octeon/cvmx-sysinfo.h
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* This module provides system/board information obtained by the bootloader.
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_SYSINFO_H__
|
||||
#define __CVMX_SYSINFO_H__
|
||||
|
||||
#define OCTEON_SERIAL_LEN 20
|
||||
/**
|
||||
* Structure describing application specific information.
|
||||
* __cvmx_app_init() populates this from the cvmx boot descriptor.
|
||||
* This structure is private to simple executive applications, so
|
||||
* no versioning is required.
|
||||
*
|
||||
* This structure must be provided with some fields set in order to
|
||||
* use simple executive functions in other applications (Linux kernel,
|
||||
* u-boot, etc.) The cvmx_sysinfo_minimal_initialize() function is
|
||||
* provided to set the required values in these cases.
|
||||
*/
|
||||
struct cvmx_sysinfo {
|
||||
/* System wide variables */
|
||||
/* installed DRAM in system, in bytes */
|
||||
uint64_t system_dram_size;
|
||||
|
||||
/* ptr to memory descriptor block */
|
||||
void *phy_mem_desc_ptr;
|
||||
|
||||
|
||||
/* Application image specific variables */
|
||||
/* stack top address (virtual) */
|
||||
uint64_t stack_top;
|
||||
/* heap base address (virtual) */
|
||||
uint64_t heap_base;
|
||||
/* stack size in bytes */
|
||||
uint32_t stack_size;
|
||||
/* heap size in bytes */
|
||||
uint32_t heap_size;
|
||||
/* coremask defining cores running application */
|
||||
uint32_t core_mask;
|
||||
/* Deprecated, use cvmx_coremask_first_core() to select init core */
|
||||
uint32_t init_core;
|
||||
|
||||
/* exception base address, as set by bootloader */
|
||||
uint64_t exception_base_addr;
|
||||
|
||||
/* cpu clock speed in hz */
|
||||
uint32_t cpu_clock_hz;
|
||||
|
||||
/* dram data rate in hz (data rate = 2 * clock rate */
|
||||
uint32_t dram_data_rate_hz;
|
||||
|
||||
|
||||
uint16_t board_type;
|
||||
uint8_t board_rev_major;
|
||||
uint8_t board_rev_minor;
|
||||
uint8_t mac_addr_base[6];
|
||||
uint8_t mac_addr_count;
|
||||
char board_serial_number[OCTEON_SERIAL_LEN];
|
||||
/*
|
||||
* Several boards support compact flash on the Octeon boot
|
||||
* bus. The CF memory spaces may be mapped to different
|
||||
* addresses on different boards. These values will be 0 if
|
||||
* CF is not present. Note that these addresses are physical
|
||||
* addresses, and it is up to the application to use the
|
||||
* proper addressing mode (XKPHYS, KSEG0, etc.)
|
||||
*/
|
||||
uint64_t compact_flash_common_base_addr;
|
||||
uint64_t compact_flash_attribute_base_addr;
|
||||
/*
|
||||
* Base address of the LED display (as on EBT3000 board) This
|
||||
* will be 0 if LED display not present. Note that this
|
||||
* address is a physical address, and it is up to the
|
||||
* application to use the proper addressing mode (XKPHYS,
|
||||
* KSEG0, etc.)
|
||||
*/
|
||||
uint64_t led_display_base_addr;
|
||||
/* DFA reference clock in hz (if applicable)*/
|
||||
uint32_t dfa_ref_clock_hz;
|
||||
/* configuration flags from bootloader */
|
||||
uint32_t bootloader_config_flags;
|
||||
|
||||
/* Uart number used for console */
|
||||
uint8_t console_uart_num;
|
||||
};
|
||||
|
||||
/**
|
||||
* This function returns the system/board information as obtained
|
||||
* by the bootloader.
|
||||
*
|
||||
*
|
||||
* Returns Pointer to the boot information structure
|
||||
*
|
||||
*/
|
||||
|
||||
extern struct cvmx_sysinfo *cvmx_sysinfo_get(void);
|
||||
|
||||
/**
|
||||
* This function is used in non-simple executive environments (such as
|
||||
* Linux kernel, u-boot, etc.) to configure the minimal fields that
|
||||
* are required to use simple executive files directly.
|
||||
*
|
||||
* Locking (if required) must be handled outside of this
|
||||
* function
|
||||
*
|
||||
* @phy_mem_desc_ptr: Pointer to global physical memory descriptor
|
||||
* (bootmem descriptor) @board_type: Octeon board
|
||||
* type enumeration
|
||||
*
|
||||
* @board_rev_major:
|
||||
* Board major revision
|
||||
* @board_rev_minor:
|
||||
* Board minor revision
|
||||
* @cpu_clock_hz:
|
||||
* CPU clock freqency in hertz
|
||||
*
|
||||
* Returns 0: Failure
|
||||
* 1: success
|
||||
*/
|
||||
extern int cvmx_sysinfo_minimal_initialize(void *phy_mem_desc_ptr,
|
||||
uint16_t board_type,
|
||||
uint8_t board_rev_major,
|
||||
uint8_t board_rev_minor,
|
||||
uint32_t cpu_clock_hz);
|
||||
|
||||
#endif /* __CVMX_SYSINFO_H__ */
|
||||
475
arch/mips/include/asm/octeon/cvmx-uctlx-defs.h
Normal file
475
arch/mips/include/asm/octeon/cvmx-uctlx-defs.h
Normal file
|
|
@ -0,0 +1,475 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2012 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_UCTLX_DEFS_H__
|
||||
#define __CVMX_UCTLX_DEFS_H__
|
||||
|
||||
#define CVMX_UCTLX_BIST_STATUS(block_id) (CVMX_ADD_IO_SEG(0x000118006F0000A0ull))
|
||||
#define CVMX_UCTLX_CLK_RST_CTL(block_id) (CVMX_ADD_IO_SEG(0x000118006F000000ull))
|
||||
#define CVMX_UCTLX_EHCI_CTL(block_id) (CVMX_ADD_IO_SEG(0x000118006F000080ull))
|
||||
#define CVMX_UCTLX_EHCI_FLA(block_id) (CVMX_ADD_IO_SEG(0x000118006F0000A8ull))
|
||||
#define CVMX_UCTLX_ERTO_CTL(block_id) (CVMX_ADD_IO_SEG(0x000118006F000090ull))
|
||||
#define CVMX_UCTLX_IF_ENA(block_id) (CVMX_ADD_IO_SEG(0x000118006F000030ull))
|
||||
#define CVMX_UCTLX_INT_ENA(block_id) (CVMX_ADD_IO_SEG(0x000118006F000028ull))
|
||||
#define CVMX_UCTLX_INT_REG(block_id) (CVMX_ADD_IO_SEG(0x000118006F000020ull))
|
||||
#define CVMX_UCTLX_OHCI_CTL(block_id) (CVMX_ADD_IO_SEG(0x000118006F000088ull))
|
||||
#define CVMX_UCTLX_ORTO_CTL(block_id) (CVMX_ADD_IO_SEG(0x000118006F000098ull))
|
||||
#define CVMX_UCTLX_PPAF_WM(block_id) (CVMX_ADD_IO_SEG(0x000118006F000038ull))
|
||||
#define CVMX_UCTLX_UPHY_CTL_STATUS(block_id) (CVMX_ADD_IO_SEG(0x000118006F000008ull))
|
||||
#define CVMX_UCTLX_UPHY_PORTX_CTL_STATUS(offset, block_id) (CVMX_ADD_IO_SEG(0x000118006F000010ull) + (((offset) & 1) + ((block_id) & 0) * 0x0ull) * 8)
|
||||
|
||||
union cvmx_uctlx_bist_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_bist_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t data_bis:1;
|
||||
uint64_t desc_bis:1;
|
||||
uint64_t erbm_bis:1;
|
||||
uint64_t orbm_bis:1;
|
||||
uint64_t wrbm_bis:1;
|
||||
uint64_t ppaf_bis:1;
|
||||
#else
|
||||
uint64_t ppaf_bis:1;
|
||||
uint64_t wrbm_bis:1;
|
||||
uint64_t orbm_bis:1;
|
||||
uint64_t erbm_bis:1;
|
||||
uint64_t desc_bis:1;
|
||||
uint64_t data_bis:1;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_bist_status_s cn61xx;
|
||||
struct cvmx_uctlx_bist_status_s cn63xx;
|
||||
struct cvmx_uctlx_bist_status_s cn63xxp1;
|
||||
struct cvmx_uctlx_bist_status_s cn66xx;
|
||||
struct cvmx_uctlx_bist_status_s cn68xx;
|
||||
struct cvmx_uctlx_bist_status_s cn68xxp1;
|
||||
struct cvmx_uctlx_bist_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_clk_rst_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_25_63:39;
|
||||
uint64_t clear_bist:1;
|
||||
uint64_t start_bist:1;
|
||||
uint64_t ehci_sm:1;
|
||||
uint64_t ohci_clkcktrst:1;
|
||||
uint64_t ohci_sm:1;
|
||||
uint64_t ohci_susp_lgcy:1;
|
||||
uint64_t app_start_clk:1;
|
||||
uint64_t o_clkdiv_rst:1;
|
||||
uint64_t h_clkdiv_byp:1;
|
||||
uint64_t h_clkdiv_rst:1;
|
||||
uint64_t h_clkdiv_en:1;
|
||||
uint64_t o_clkdiv_en:1;
|
||||
uint64_t h_div:4;
|
||||
uint64_t p_refclk_sel:2;
|
||||
uint64_t p_refclk_div:2;
|
||||
uint64_t reserved_4_4:1;
|
||||
uint64_t p_com_on:1;
|
||||
uint64_t p_por:1;
|
||||
uint64_t p_prst:1;
|
||||
uint64_t hrst:1;
|
||||
#else
|
||||
uint64_t hrst:1;
|
||||
uint64_t p_prst:1;
|
||||
uint64_t p_por:1;
|
||||
uint64_t p_com_on:1;
|
||||
uint64_t reserved_4_4:1;
|
||||
uint64_t p_refclk_div:2;
|
||||
uint64_t p_refclk_sel:2;
|
||||
uint64_t h_div:4;
|
||||
uint64_t o_clkdiv_en:1;
|
||||
uint64_t h_clkdiv_en:1;
|
||||
uint64_t h_clkdiv_rst:1;
|
||||
uint64_t h_clkdiv_byp:1;
|
||||
uint64_t o_clkdiv_rst:1;
|
||||
uint64_t app_start_clk:1;
|
||||
uint64_t ohci_susp_lgcy:1;
|
||||
uint64_t ohci_sm:1;
|
||||
uint64_t ohci_clkcktrst:1;
|
||||
uint64_t ehci_sm:1;
|
||||
uint64_t start_bist:1;
|
||||
uint64_t clear_bist:1;
|
||||
uint64_t reserved_25_63:39;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn61xx;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn63xx;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn63xxp1;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn66xx;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn68xx;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cn68xxp1;
|
||||
struct cvmx_uctlx_clk_rst_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_ehci_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_ehci_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_20_63:44;
|
||||
uint64_t desc_rbm:1;
|
||||
uint64_t reg_nb:1;
|
||||
uint64_t l2c_dc:1;
|
||||
uint64_t l2c_bc:1;
|
||||
uint64_t l2c_0pag:1;
|
||||
uint64_t l2c_stt:1;
|
||||
uint64_t l2c_buff_emod:2;
|
||||
uint64_t l2c_desc_emod:2;
|
||||
uint64_t inv_reg_a2:1;
|
||||
uint64_t ehci_64b_addr_en:1;
|
||||
uint64_t l2c_addr_msb:8;
|
||||
#else
|
||||
uint64_t l2c_addr_msb:8;
|
||||
uint64_t ehci_64b_addr_en:1;
|
||||
uint64_t inv_reg_a2:1;
|
||||
uint64_t l2c_desc_emod:2;
|
||||
uint64_t l2c_buff_emod:2;
|
||||
uint64_t l2c_stt:1;
|
||||
uint64_t l2c_0pag:1;
|
||||
uint64_t l2c_bc:1;
|
||||
uint64_t l2c_dc:1;
|
||||
uint64_t reg_nb:1;
|
||||
uint64_t desc_rbm:1;
|
||||
uint64_t reserved_20_63:44;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn61xx;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn63xx;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn63xxp1;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn66xx;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn68xx;
|
||||
struct cvmx_uctlx_ehci_ctl_s cn68xxp1;
|
||||
struct cvmx_uctlx_ehci_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_ehci_fla {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_ehci_fla_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_6_63:58;
|
||||
uint64_t fla:6;
|
||||
#else
|
||||
uint64_t fla:6;
|
||||
uint64_t reserved_6_63:58;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_ehci_fla_s cn61xx;
|
||||
struct cvmx_uctlx_ehci_fla_s cn63xx;
|
||||
struct cvmx_uctlx_ehci_fla_s cn63xxp1;
|
||||
struct cvmx_uctlx_ehci_fla_s cn66xx;
|
||||
struct cvmx_uctlx_ehci_fla_s cn68xx;
|
||||
struct cvmx_uctlx_ehci_fla_s cn68xxp1;
|
||||
struct cvmx_uctlx_ehci_fla_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_erto_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_erto_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t to_val:27;
|
||||
uint64_t reserved_0_4:5;
|
||||
#else
|
||||
uint64_t reserved_0_4:5;
|
||||
uint64_t to_val:27;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_erto_ctl_s cn61xx;
|
||||
struct cvmx_uctlx_erto_ctl_s cn63xx;
|
||||
struct cvmx_uctlx_erto_ctl_s cn63xxp1;
|
||||
struct cvmx_uctlx_erto_ctl_s cn66xx;
|
||||
struct cvmx_uctlx_erto_ctl_s cn68xx;
|
||||
struct cvmx_uctlx_erto_ctl_s cn68xxp1;
|
||||
struct cvmx_uctlx_erto_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_if_ena {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_if_ena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_1_63:63;
|
||||
uint64_t en:1;
|
||||
#else
|
||||
uint64_t en:1;
|
||||
uint64_t reserved_1_63:63;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_if_ena_s cn61xx;
|
||||
struct cvmx_uctlx_if_ena_s cn63xx;
|
||||
struct cvmx_uctlx_if_ena_s cn63xxp1;
|
||||
struct cvmx_uctlx_if_ena_s cn66xx;
|
||||
struct cvmx_uctlx_if_ena_s cn68xx;
|
||||
struct cvmx_uctlx_if_ena_s cn68xxp1;
|
||||
struct cvmx_uctlx_if_ena_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_int_ena {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_int_ena_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t ec_ovf_e:1;
|
||||
uint64_t oc_ovf_e:1;
|
||||
uint64_t wb_pop_e:1;
|
||||
uint64_t wb_psh_f:1;
|
||||
uint64_t cf_psh_f:1;
|
||||
uint64_t or_psh_f:1;
|
||||
uint64_t er_psh_f:1;
|
||||
uint64_t pp_psh_f:1;
|
||||
#else
|
||||
uint64_t pp_psh_f:1;
|
||||
uint64_t er_psh_f:1;
|
||||
uint64_t or_psh_f:1;
|
||||
uint64_t cf_psh_f:1;
|
||||
uint64_t wb_psh_f:1;
|
||||
uint64_t wb_pop_e:1;
|
||||
uint64_t oc_ovf_e:1;
|
||||
uint64_t ec_ovf_e:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_int_ena_s cn61xx;
|
||||
struct cvmx_uctlx_int_ena_s cn63xx;
|
||||
struct cvmx_uctlx_int_ena_s cn63xxp1;
|
||||
struct cvmx_uctlx_int_ena_s cn66xx;
|
||||
struct cvmx_uctlx_int_ena_s cn68xx;
|
||||
struct cvmx_uctlx_int_ena_s cn68xxp1;
|
||||
struct cvmx_uctlx_int_ena_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_int_reg {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_int_reg_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_8_63:56;
|
||||
uint64_t ec_ovf_e:1;
|
||||
uint64_t oc_ovf_e:1;
|
||||
uint64_t wb_pop_e:1;
|
||||
uint64_t wb_psh_f:1;
|
||||
uint64_t cf_psh_f:1;
|
||||
uint64_t or_psh_f:1;
|
||||
uint64_t er_psh_f:1;
|
||||
uint64_t pp_psh_f:1;
|
||||
#else
|
||||
uint64_t pp_psh_f:1;
|
||||
uint64_t er_psh_f:1;
|
||||
uint64_t or_psh_f:1;
|
||||
uint64_t cf_psh_f:1;
|
||||
uint64_t wb_psh_f:1;
|
||||
uint64_t wb_pop_e:1;
|
||||
uint64_t oc_ovf_e:1;
|
||||
uint64_t ec_ovf_e:1;
|
||||
uint64_t reserved_8_63:56;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_int_reg_s cn61xx;
|
||||
struct cvmx_uctlx_int_reg_s cn63xx;
|
||||
struct cvmx_uctlx_int_reg_s cn63xxp1;
|
||||
struct cvmx_uctlx_int_reg_s cn66xx;
|
||||
struct cvmx_uctlx_int_reg_s cn68xx;
|
||||
struct cvmx_uctlx_int_reg_s cn68xxp1;
|
||||
struct cvmx_uctlx_int_reg_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_ohci_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_ohci_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_19_63:45;
|
||||
uint64_t reg_nb:1;
|
||||
uint64_t l2c_dc:1;
|
||||
uint64_t l2c_bc:1;
|
||||
uint64_t l2c_0pag:1;
|
||||
uint64_t l2c_stt:1;
|
||||
uint64_t l2c_buff_emod:2;
|
||||
uint64_t l2c_desc_emod:2;
|
||||
uint64_t inv_reg_a2:1;
|
||||
uint64_t reserved_8_8:1;
|
||||
uint64_t l2c_addr_msb:8;
|
||||
#else
|
||||
uint64_t l2c_addr_msb:8;
|
||||
uint64_t reserved_8_8:1;
|
||||
uint64_t inv_reg_a2:1;
|
||||
uint64_t l2c_desc_emod:2;
|
||||
uint64_t l2c_buff_emod:2;
|
||||
uint64_t l2c_stt:1;
|
||||
uint64_t l2c_0pag:1;
|
||||
uint64_t l2c_bc:1;
|
||||
uint64_t l2c_dc:1;
|
||||
uint64_t reg_nb:1;
|
||||
uint64_t reserved_19_63:45;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn61xx;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn63xx;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn63xxp1;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn66xx;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn68xx;
|
||||
struct cvmx_uctlx_ohci_ctl_s cn68xxp1;
|
||||
struct cvmx_uctlx_ohci_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_orto_ctl {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_orto_ctl_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_32_63:32;
|
||||
uint64_t to_val:24;
|
||||
uint64_t reserved_0_7:8;
|
||||
#else
|
||||
uint64_t reserved_0_7:8;
|
||||
uint64_t to_val:24;
|
||||
uint64_t reserved_32_63:32;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_orto_ctl_s cn61xx;
|
||||
struct cvmx_uctlx_orto_ctl_s cn63xx;
|
||||
struct cvmx_uctlx_orto_ctl_s cn63xxp1;
|
||||
struct cvmx_uctlx_orto_ctl_s cn66xx;
|
||||
struct cvmx_uctlx_orto_ctl_s cn68xx;
|
||||
struct cvmx_uctlx_orto_ctl_s cn68xxp1;
|
||||
struct cvmx_uctlx_orto_ctl_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_ppaf_wm {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_ppaf_wm_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_5_63:59;
|
||||
uint64_t wm:5;
|
||||
#else
|
||||
uint64_t wm:5;
|
||||
uint64_t reserved_5_63:59;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_ppaf_wm_s cn61xx;
|
||||
struct cvmx_uctlx_ppaf_wm_s cn63xx;
|
||||
struct cvmx_uctlx_ppaf_wm_s cn63xxp1;
|
||||
struct cvmx_uctlx_ppaf_wm_s cn66xx;
|
||||
struct cvmx_uctlx_ppaf_wm_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_uphy_ctl_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_10_63:54;
|
||||
uint64_t bist_done:1;
|
||||
uint64_t bist_err:1;
|
||||
uint64_t hsbist:1;
|
||||
uint64_t fsbist:1;
|
||||
uint64_t lsbist:1;
|
||||
uint64_t siddq:1;
|
||||
uint64_t vtest_en:1;
|
||||
uint64_t uphy_bist:1;
|
||||
uint64_t bist_en:1;
|
||||
uint64_t ate_reset:1;
|
||||
#else
|
||||
uint64_t ate_reset:1;
|
||||
uint64_t bist_en:1;
|
||||
uint64_t uphy_bist:1;
|
||||
uint64_t vtest_en:1;
|
||||
uint64_t siddq:1;
|
||||
uint64_t lsbist:1;
|
||||
uint64_t fsbist:1;
|
||||
uint64_t hsbist:1;
|
||||
uint64_t bist_err:1;
|
||||
uint64_t bist_done:1;
|
||||
uint64_t reserved_10_63:54;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn61xx;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn63xx;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn63xxp1;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn66xx;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn68xx;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cn68xxp1;
|
||||
struct cvmx_uctlx_uphy_ctl_status_s cnf71xx;
|
||||
};
|
||||
|
||||
union cvmx_uctlx_uphy_portx_ctl_status {
|
||||
uint64_t u64;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s {
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
uint64_t reserved_43_63:21;
|
||||
uint64_t tdata_out:4;
|
||||
uint64_t txbiststuffenh:1;
|
||||
uint64_t txbiststuffen:1;
|
||||
uint64_t dmpulldown:1;
|
||||
uint64_t dppulldown:1;
|
||||
uint64_t vbusvldext:1;
|
||||
uint64_t portreset:1;
|
||||
uint64_t txhsvxtune:2;
|
||||
uint64_t txvreftune:4;
|
||||
uint64_t txrisetune:1;
|
||||
uint64_t txpreemphasistune:1;
|
||||
uint64_t txfslstune:4;
|
||||
uint64_t sqrxtune:3;
|
||||
uint64_t compdistune:3;
|
||||
uint64_t loop_en:1;
|
||||
uint64_t tclk:1;
|
||||
uint64_t tdata_sel:1;
|
||||
uint64_t taddr_in:4;
|
||||
uint64_t tdata_in:8;
|
||||
#else
|
||||
uint64_t tdata_in:8;
|
||||
uint64_t taddr_in:4;
|
||||
uint64_t tdata_sel:1;
|
||||
uint64_t tclk:1;
|
||||
uint64_t loop_en:1;
|
||||
uint64_t compdistune:3;
|
||||
uint64_t sqrxtune:3;
|
||||
uint64_t txfslstune:4;
|
||||
uint64_t txpreemphasistune:1;
|
||||
uint64_t txrisetune:1;
|
||||
uint64_t txvreftune:4;
|
||||
uint64_t txhsvxtune:2;
|
||||
uint64_t portreset:1;
|
||||
uint64_t vbusvldext:1;
|
||||
uint64_t dppulldown:1;
|
||||
uint64_t dmpulldown:1;
|
||||
uint64_t txbiststuffen:1;
|
||||
uint64_t txbiststuffenh:1;
|
||||
uint64_t tdata_out:4;
|
||||
uint64_t reserved_43_63:21;
|
||||
#endif
|
||||
} s;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn61xx;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn63xx;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn63xxp1;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn66xx;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn68xx;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cn68xxp1;
|
||||
struct cvmx_uctlx_uphy_portx_ctl_status_s cnf71xx;
|
||||
};
|
||||
|
||||
#endif
|
||||
397
arch/mips/include/asm/octeon/cvmx-wqe.h
Normal file
397
arch/mips/include/asm/octeon/cvmx-wqe.h
Normal file
|
|
@ -0,0 +1,397 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/**
|
||||
*
|
||||
* This header file defines the work queue entry (wqe) data structure.
|
||||
* Since this is a commonly used structure that depends on structures
|
||||
* from several hardware blocks, those definitions have been placed
|
||||
* in this file to create a single point of definition of the wqe
|
||||
* format.
|
||||
* Data structures are still named according to the block that they
|
||||
* relate to.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CVMX_WQE_H__
|
||||
#define __CVMX_WQE_H__
|
||||
|
||||
#include <asm/octeon/cvmx-packet.h>
|
||||
|
||||
|
||||
#define OCT_TAG_TYPE_STRING(x) \
|
||||
(((x) == CVMX_POW_TAG_TYPE_ORDERED) ? "ORDERED" : \
|
||||
(((x) == CVMX_POW_TAG_TYPE_ATOMIC) ? "ATOMIC" : \
|
||||
(((x) == CVMX_POW_TAG_TYPE_NULL) ? "NULL" : \
|
||||
"NULL_NULL")))
|
||||
|
||||
/**
|
||||
* HW decode / err_code in work queue entry
|
||||
*/
|
||||
typedef union {
|
||||
uint64_t u64;
|
||||
|
||||
/* Use this struct if the hardware determines that the packet is IP */
|
||||
struct {
|
||||
/* HW sets this to the number of buffers used by this packet */
|
||||
uint64_t bufs:8;
|
||||
/* HW sets to the number of L2 bytes prior to the IP */
|
||||
uint64_t ip_offset:8;
|
||||
/* set to 1 if we found DSA/VLAN in the L2 */
|
||||
uint64_t vlan_valid:1;
|
||||
/* Set to 1 if the DSA/VLAN tag is stacked */
|
||||
uint64_t vlan_stacked:1;
|
||||
uint64_t unassigned:1;
|
||||
/* HW sets to the DSA/VLAN CFI flag (valid when vlan_valid) */
|
||||
uint64_t vlan_cfi:1;
|
||||
/* HW sets to the DSA/VLAN_ID field (valid when vlan_valid) */
|
||||
uint64_t vlan_id:12;
|
||||
/* Ring Identifier (if PCIe). Requires PIP_GBL_CTL[RING_EN]=1 */
|
||||
uint64_t pr:4;
|
||||
uint64_t unassigned2:8;
|
||||
/* the packet needs to be decompressed */
|
||||
uint64_t dec_ipcomp:1;
|
||||
/* the packet is either TCP or UDP */
|
||||
uint64_t tcp_or_udp:1;
|
||||
/* the packet needs to be decrypted (ESP or AH) */
|
||||
uint64_t dec_ipsec:1;
|
||||
/* the packet is IPv6 */
|
||||
uint64_t is_v6:1;
|
||||
|
||||
/*
|
||||
* (rcv_error, not_IP, IP_exc, is_frag, L4_error,
|
||||
* software, etc.).
|
||||
*/
|
||||
|
||||
/*
|
||||
* reserved for software use, hardware will clear on
|
||||
* packet creation.
|
||||
*/
|
||||
uint64_t software:1;
|
||||
/* exceptional conditions below */
|
||||
/* the receive interface hardware detected an L4 error
|
||||
* (only applies if !is_frag) (only applies if
|
||||
* !rcv_error && !not_IP && !IP_exc && !is_frag)
|
||||
* failure indicated in err_code below, decode:
|
||||
*
|
||||
* - 1 = Malformed L4
|
||||
* - 2 = L4 Checksum Error: the L4 checksum value is
|
||||
* - 3 = UDP Length Error: The UDP length field would
|
||||
* make the UDP data longer than what remains in
|
||||
* the IP packet (as defined by the IP header
|
||||
* length field).
|
||||
* - 4 = Bad L4 Port: either the source or destination
|
||||
* TCP/UDP port is 0.
|
||||
* - 8 = TCP FIN Only: the packet is TCP and only the
|
||||
* FIN flag set.
|
||||
* - 9 = TCP No Flags: the packet is TCP and no flags
|
||||
* are set.
|
||||
* - 10 = TCP FIN RST: the packet is TCP and both FIN
|
||||
* and RST are set.
|
||||
* - 11 = TCP SYN URG: the packet is TCP and both SYN
|
||||
* and URG are set.
|
||||
* - 12 = TCP SYN RST: the packet is TCP and both SYN
|
||||
* and RST are set.
|
||||
* - 13 = TCP SYN FIN: the packet is TCP and both SYN
|
||||
* and FIN are set.
|
||||
*/
|
||||
uint64_t L4_error:1;
|
||||
/* set if the packet is a fragment */
|
||||
uint64_t is_frag:1;
|
||||
/* the receive interface hardware detected an IP error
|
||||
* / exception (only applies if !rcv_error && !not_IP)
|
||||
* failure indicated in err_code below, decode:
|
||||
*
|
||||
* - 1 = Not IP: the IP version field is neither 4 nor
|
||||
* 6.
|
||||
* - 2 = IPv4 Header Checksum Error: the IPv4 header
|
||||
* has a checksum violation.
|
||||
* - 3 = IP Malformed Header: the packet is not long
|
||||
* enough to contain the IP header.
|
||||
* - 4 = IP Malformed: the packet is not long enough
|
||||
* to contain the bytes indicated by the IP
|
||||
* header. Pad is allowed.
|
||||
* - 5 = IP TTL Hop: the IPv4 TTL field or the IPv6
|
||||
* Hop Count field are zero.
|
||||
* - 6 = IP Options
|
||||
*/
|
||||
uint64_t IP_exc:1;
|
||||
/*
|
||||
* Set if the hardware determined that the packet is a
|
||||
* broadcast.
|
||||
*/
|
||||
uint64_t is_bcast:1;
|
||||
/*
|
||||
* St if the hardware determined that the packet is a
|
||||
* multi-cast.
|
||||
*/
|
||||
uint64_t is_mcast:1;
|
||||
/*
|
||||
* Set if the packet may not be IP (must be zero in
|
||||
* this case).
|
||||
*/
|
||||
uint64_t not_IP:1;
|
||||
/*
|
||||
* The receive interface hardware detected a receive
|
||||
* error (must be zero in this case).
|
||||
*/
|
||||
uint64_t rcv_error:1;
|
||||
/* lower err_code = first-level descriptor of the
|
||||
* work */
|
||||
/* zero for packet submitted by hardware that isn't on
|
||||
* the slow path */
|
||||
/* type is cvmx_pip_err_t */
|
||||
uint64_t err_code:8;
|
||||
} s;
|
||||
|
||||
/* use this to get at the 16 vlan bits */
|
||||
struct {
|
||||
uint64_t unused1:16;
|
||||
uint64_t vlan:16;
|
||||
uint64_t unused2:32;
|
||||
} svlan;
|
||||
|
||||
/*
|
||||
* use this struct if the hardware could not determine that
|
||||
* the packet is ip.
|
||||
*/
|
||||
struct {
|
||||
/*
|
||||
* HW sets this to the number of buffers used by this
|
||||
* packet.
|
||||
*/
|
||||
uint64_t bufs:8;
|
||||
uint64_t unused:8;
|
||||
/* set to 1 if we found DSA/VLAN in the L2 */
|
||||
uint64_t vlan_valid:1;
|
||||
/* Set to 1 if the DSA/VLAN tag is stacked */
|
||||
uint64_t vlan_stacked:1;
|
||||
uint64_t unassigned:1;
|
||||
/*
|
||||
* HW sets to the DSA/VLAN CFI flag (valid when
|
||||
* vlan_valid)
|
||||
*/
|
||||
uint64_t vlan_cfi:1;
|
||||
/*
|
||||
* HW sets to the DSA/VLAN_ID field (valid when
|
||||
* vlan_valid).
|
||||
*/
|
||||
uint64_t vlan_id:12;
|
||||
/*
|
||||
* Ring Identifier (if PCIe). Requires
|
||||
* PIP_GBL_CTL[RING_EN]=1
|
||||
*/
|
||||
uint64_t pr:4;
|
||||
uint64_t unassigned2:12;
|
||||
/*
|
||||
* reserved for software use, hardware will clear on
|
||||
* packet creation.
|
||||
*/
|
||||
uint64_t software:1;
|
||||
uint64_t unassigned3:1;
|
||||
/*
|
||||
* set if the hardware determined that the packet is
|
||||
* rarp.
|
||||
*/
|
||||
uint64_t is_rarp:1;
|
||||
/*
|
||||
* set if the hardware determined that the packet is
|
||||
* arp
|
||||
*/
|
||||
uint64_t is_arp:1;
|
||||
/*
|
||||
* set if the hardware determined that the packet is a
|
||||
* broadcast.
|
||||
*/
|
||||
uint64_t is_bcast:1;
|
||||
/*
|
||||
* set if the hardware determined that the packet is a
|
||||
* multi-cast
|
||||
*/
|
||||
uint64_t is_mcast:1;
|
||||
/*
|
||||
* set if the packet may not be IP (must be one in
|
||||
* this case)
|
||||
*/
|
||||
uint64_t not_IP:1;
|
||||
/* The receive interface hardware detected a receive
|
||||
* error. Failure indicated in err_code below,
|
||||
* decode:
|
||||
*
|
||||
* - 1 = partial error: a packet was partially
|
||||
* received, but internal buffering / bandwidth
|
||||
* was not adequate to receive the entire
|
||||
* packet.
|
||||
* - 2 = jabber error: the RGMII packet was too large
|
||||
* and is truncated.
|
||||
* - 3 = overrun error: the RGMII packet is longer
|
||||
* than allowed and had an FCS error.
|
||||
* - 4 = oversize error: the RGMII packet is longer
|
||||
* than allowed.
|
||||
* - 5 = alignment error: the RGMII packet is not an
|
||||
* integer number of bytes
|
||||
* and had an FCS error (100M and 10M only).
|
||||
* - 6 = fragment error: the RGMII packet is shorter
|
||||
* than allowed and had an FCS error.
|
||||
* - 7 = GMX FCS error: the RGMII packet had an FCS
|
||||
* error.
|
||||
* - 8 = undersize error: the RGMII packet is shorter
|
||||
* than allowed.
|
||||
* - 9 = extend error: the RGMII packet had an extend
|
||||
* error.
|
||||
* - 10 = length mismatch error: the RGMII packet had
|
||||
* a length that did not match the length field
|
||||
* in the L2 HDR.
|
||||
* - 11 = RGMII RX error/SPI4 DIP4 Error: the RGMII
|
||||
* packet had one or more data reception errors
|
||||
* (RXERR) or the SPI4 packet had one or more
|
||||
* DIP4 errors.
|
||||
* - 12 = RGMII skip error/SPI4 Abort Error: the RGMII
|
||||
* packet was not large enough to cover the
|
||||
* skipped bytes or the SPI4 packet was
|
||||
* terminated with an About EOPS.
|
||||
* - 13 = RGMII nibble error/SPI4 Port NXA Error: the
|
||||
* RGMII packet had a studder error (data not
|
||||
* repeated - 10/100M only) or the SPI4 packet
|
||||
* was sent to an NXA.
|
||||
* - 16 = FCS error: a SPI4.2 packet had an FCS error.
|
||||
* - 17 = Skip error: a packet was not large enough to
|
||||
* cover the skipped bytes.
|
||||
* - 18 = L2 header malformed: the packet is not long
|
||||
* enough to contain the L2.
|
||||
*/
|
||||
|
||||
uint64_t rcv_error:1;
|
||||
/*
|
||||
* lower err_code = first-level descriptor of the
|
||||
* work
|
||||
*/
|
||||
/*
|
||||
* zero for packet submitted by hardware that isn't on
|
||||
* the slow path
|
||||
*/
|
||||
/* type is cvmx_pip_err_t (union, so can't use directly */
|
||||
uint64_t err_code:8;
|
||||
} snoip;
|
||||
|
||||
} cvmx_pip_wqe_word2;
|
||||
|
||||
/**
|
||||
* Work queue entry format
|
||||
*
|
||||
* must be 8-byte aligned
|
||||
*/
|
||||
typedef struct {
|
||||
|
||||
/*****************************************************************
|
||||
* WORD 0
|
||||
* HW WRITE: the following 64 bits are filled by HW when a packet arrives
|
||||
*/
|
||||
|
||||
/**
|
||||
* raw chksum result generated by the HW
|
||||
*/
|
||||
uint16_t hw_chksum;
|
||||
/**
|
||||
* Field unused by hardware - available for software
|
||||
*/
|
||||
uint8_t unused;
|
||||
/**
|
||||
* Next pointer used by hardware for list maintenance.
|
||||
* May be written/read by HW before the work queue
|
||||
* entry is scheduled to a PP
|
||||
* (Only 36 bits used in Octeon 1)
|
||||
*/
|
||||
uint64_t next_ptr:40;
|
||||
|
||||
/*****************************************************************
|
||||
* WORD 1
|
||||
* HW WRITE: the following 64 bits are filled by HW when a packet arrives
|
||||
*/
|
||||
|
||||
/**
|
||||
* HW sets to the total number of bytes in the packet
|
||||
*/
|
||||
uint64_t len:16;
|
||||
/**
|
||||
* HW sets this to input physical port
|
||||
*/
|
||||
uint64_t ipprt:6;
|
||||
|
||||
/**
|
||||
* HW sets this to what it thought the priority of the input packet was
|
||||
*/
|
||||
uint64_t qos:3;
|
||||
|
||||
/**
|
||||
* the group that the work queue entry will be scheduled to
|
||||
*/
|
||||
uint64_t grp:4;
|
||||
/**
|
||||
* the type of the tag (ORDERED, ATOMIC, NULL)
|
||||
*/
|
||||
uint64_t tag_type:3;
|
||||
/**
|
||||
* the synchronization/ordering tag
|
||||
*/
|
||||
uint64_t tag:32;
|
||||
|
||||
/**
|
||||
* WORD 2 HW WRITE: the following 64-bits are filled in by
|
||||
* hardware when a packet arrives This indicates a variety of
|
||||
* status and error conditions.
|
||||
*/
|
||||
cvmx_pip_wqe_word2 word2;
|
||||
|
||||
/**
|
||||
* Pointer to the first segment of the packet.
|
||||
*/
|
||||
union cvmx_buf_ptr packet_ptr;
|
||||
|
||||
/**
|
||||
* HW WRITE: octeon will fill in a programmable amount from the
|
||||
* packet, up to (at most, but perhaps less) the amount
|
||||
* needed to fill the work queue entry to 128 bytes
|
||||
*
|
||||
* If the packet is recognized to be IP, the hardware starts
|
||||
* (except that the IPv4 header is padded for appropriate
|
||||
* alignment) writing here where the IP header starts. If the
|
||||
* packet is not recognized to be IP, the hardware starts
|
||||
* writing the beginning of the packet here.
|
||||
*/
|
||||
uint8_t packet_data[96];
|
||||
|
||||
/**
|
||||
* If desired, SW can make the work Q entry any length. For the
|
||||
* purposes of discussion here, Assume 128B always, as this is all that
|
||||
* the hardware deals with.
|
||||
*
|
||||
*/
|
||||
|
||||
} CVMX_CACHE_LINE_ALIGNED cvmx_wqe_t;
|
||||
|
||||
#endif /* __CVMX_WQE_H__ */
|
||||
517
arch/mips/include/asm/octeon/cvmx.h
Normal file
517
arch/mips/include/asm/octeon/cvmx.h
Normal file
|
|
@ -0,0 +1,517 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
#ifndef __CVMX_H__
|
||||
#define __CVMX_H__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
enum cvmx_mips_space {
|
||||
CVMX_MIPS_SPACE_XKSEG = 3LL,
|
||||
CVMX_MIPS_SPACE_XKPHYS = 2LL,
|
||||
CVMX_MIPS_SPACE_XSSEG = 1LL,
|
||||
CVMX_MIPS_SPACE_XUSEG = 0LL
|
||||
};
|
||||
|
||||
/* These macros for use when using 32 bit pointers. */
|
||||
#define CVMX_MIPS32_SPACE_KSEG0 1l
|
||||
#define CVMX_ADD_SEG32(segment, add) \
|
||||
(((int32_t)segment << 31) | (int32_t)(add))
|
||||
|
||||
#define CVMX_IO_SEG CVMX_MIPS_SPACE_XKPHYS
|
||||
|
||||
/* These macros simplify the process of creating common IO addresses */
|
||||
#define CVMX_ADD_SEG(segment, add) \
|
||||
((((uint64_t)segment) << 62) | (add))
|
||||
#ifndef CVMX_ADD_IO_SEG
|
||||
#define CVMX_ADD_IO_SEG(add) CVMX_ADD_SEG(CVMX_IO_SEG, (add))
|
||||
#endif
|
||||
|
||||
#include <asm/octeon/cvmx-asm.h>
|
||||
#include <asm/octeon/cvmx-packet.h>
|
||||
#include <asm/octeon/cvmx-sysinfo.h>
|
||||
|
||||
#include <asm/octeon/cvmx-ciu-defs.h>
|
||||
#include <asm/octeon/cvmx-gpio-defs.h>
|
||||
#include <asm/octeon/cvmx-iob-defs.h>
|
||||
#include <asm/octeon/cvmx-ipd-defs.h>
|
||||
#include <asm/octeon/cvmx-l2c-defs.h>
|
||||
#include <asm/octeon/cvmx-l2d-defs.h>
|
||||
#include <asm/octeon/cvmx-l2t-defs.h>
|
||||
#include <asm/octeon/cvmx-led-defs.h>
|
||||
#include <asm/octeon/cvmx-mio-defs.h>
|
||||
#include <asm/octeon/cvmx-pow-defs.h>
|
||||
|
||||
#include <asm/octeon/cvmx-bootinfo.h>
|
||||
#include <asm/octeon/cvmx-bootmem.h>
|
||||
#include <asm/octeon/cvmx-l2c.h>
|
||||
|
||||
#ifndef CVMX_ENABLE_DEBUG_PRINTS
|
||||
#define CVMX_ENABLE_DEBUG_PRINTS 1
|
||||
#endif
|
||||
|
||||
#if CVMX_ENABLE_DEBUG_PRINTS
|
||||
#define cvmx_dprintf printk
|
||||
#else
|
||||
#define cvmx_dprintf(...) {}
|
||||
#endif
|
||||
|
||||
#define CVMX_MAX_CORES (16)
|
||||
#define CVMX_CACHE_LINE_SIZE (128) /* In bytes */
|
||||
#define CVMX_CACHE_LINE_MASK (CVMX_CACHE_LINE_SIZE - 1) /* In bytes */
|
||||
#define CVMX_CACHE_LINE_ALIGNED __attribute__ ((aligned(CVMX_CACHE_LINE_SIZE)))
|
||||
#define CAST64(v) ((long long)(long)(v))
|
||||
#define CASTPTR(type, v) ((type *)(long)(v))
|
||||
|
||||
/*
|
||||
* Returns processor ID, different Linux and simple exec versions
|
||||
* provided in the cvmx-app-init*.c files.
|
||||
*/
|
||||
static inline uint32_t cvmx_get_proc_id(void) __attribute__ ((pure));
|
||||
static inline uint32_t cvmx_get_proc_id(void)
|
||||
{
|
||||
uint32_t id;
|
||||
asm("mfc0 %0, $15,0" : "=r"(id));
|
||||
return id;
|
||||
}
|
||||
|
||||
/* turn the variable name into a string */
|
||||
#define CVMX_TMP_STR(x) CVMX_TMP_STR2(x)
|
||||
#define CVMX_TMP_STR2(x) #x
|
||||
|
||||
/**
|
||||
* Builds a bit mask given the required size in bits.
|
||||
*
|
||||
* @bits: Number of bits in the mask
|
||||
* Returns The mask
|
||||
*/ static inline uint64_t cvmx_build_mask(uint64_t bits)
|
||||
{
|
||||
return ~((~0x0ull) << bits);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a memory address for I/O based on the Major and Sub DID.
|
||||
*
|
||||
* @major_did: 5 bit major did
|
||||
* @sub_did: 3 bit sub did
|
||||
* Returns I/O base address
|
||||
*/
|
||||
static inline uint64_t cvmx_build_io_address(uint64_t major_did,
|
||||
uint64_t sub_did)
|
||||
{
|
||||
return (0x1ull << 48) | (major_did << 43) | (sub_did << 40);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform mask and shift to place the supplied value into
|
||||
* the supplied bit rage.
|
||||
*
|
||||
* Example: cvmx_build_bits(39,24,value)
|
||||
* <pre>
|
||||
* 6 5 4 3 3 2 1
|
||||
* 3 5 7 9 1 3 5 7 0
|
||||
* +-------+-------+-------+-------+-------+-------+-------+------+
|
||||
* 000000000000000000000000___________value000000000000000000000000
|
||||
* </pre>
|
||||
*
|
||||
* @high_bit: Highest bit value can occupy (inclusive) 0-63
|
||||
* @low_bit: Lowest bit value can occupy inclusive 0-high_bit
|
||||
* @value: Value to use
|
||||
* Returns Value masked and shifted
|
||||
*/
|
||||
static inline uint64_t cvmx_build_bits(uint64_t high_bit,
|
||||
uint64_t low_bit, uint64_t value)
|
||||
{
|
||||
return (value & cvmx_build_mask(high_bit - low_bit + 1)) << low_bit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a memory pointer (void*) into a hardware compatible
|
||||
* memory address (uint64_t). Octeon hardware widgets don't
|
||||
* understand logical addresses.
|
||||
*
|
||||
* @ptr: C style memory pointer
|
||||
* Returns Hardware physical address
|
||||
*/
|
||||
static inline uint64_t cvmx_ptr_to_phys(void *ptr)
|
||||
{
|
||||
if (sizeof(void *) == 8) {
|
||||
/*
|
||||
* We're running in 64 bit mode. Normally this means
|
||||
* that we can use 40 bits of address space (the
|
||||
* hardware limit). Unfortunately there is one case
|
||||
* were we need to limit this to 30 bits, sign
|
||||
* extended 32 bit. Although these are 64 bits wide,
|
||||
* only 30 bits can be used.
|
||||
*/
|
||||
if ((CAST64(ptr) >> 62) == 3)
|
||||
return CAST64(ptr) & cvmx_build_mask(30);
|
||||
else
|
||||
return CAST64(ptr) & cvmx_build_mask(40);
|
||||
} else {
|
||||
return (long)(ptr) & 0x1fffffff;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a hardware physical address (uint64_t) into a
|
||||
* memory pointer (void *).
|
||||
*
|
||||
* @physical_address:
|
||||
* Hardware physical address to memory
|
||||
* Returns Pointer to memory
|
||||
*/
|
||||
static inline void *cvmx_phys_to_ptr(uint64_t physical_address)
|
||||
{
|
||||
if (sizeof(void *) == 8) {
|
||||
/* Just set the top bit, avoiding any TLB uglyness */
|
||||
return CASTPTR(void,
|
||||
CVMX_ADD_SEG(CVMX_MIPS_SPACE_XKPHYS,
|
||||
physical_address));
|
||||
} else {
|
||||
return CASTPTR(void,
|
||||
CVMX_ADD_SEG32(CVMX_MIPS32_SPACE_KSEG0,
|
||||
physical_address));
|
||||
}
|
||||
}
|
||||
|
||||
/* The following #if controls the definition of the macro
|
||||
CVMX_BUILD_WRITE64. This macro is used to build a store operation to
|
||||
a full 64bit address. With a 64bit ABI, this can be done with a simple
|
||||
pointer access. 32bit ABIs require more complicated assembly */
|
||||
|
||||
/* We have a full 64bit ABI. Writing to a 64bit address can be done with
|
||||
a simple volatile pointer */
|
||||
#define CVMX_BUILD_WRITE64(TYPE, ST) \
|
||||
static inline void cvmx_write64_##TYPE(uint64_t addr, TYPE##_t val) \
|
||||
{ \
|
||||
*CASTPTR(volatile TYPE##_t, addr) = val; \
|
||||
}
|
||||
|
||||
|
||||
/* The following #if controls the definition of the macro
|
||||
CVMX_BUILD_READ64. This macro is used to build a load operation from
|
||||
a full 64bit address. With a 64bit ABI, this can be done with a simple
|
||||
pointer access. 32bit ABIs require more complicated assembly */
|
||||
|
||||
/* We have a full 64bit ABI. Writing to a 64bit address can be done with
|
||||
a simple volatile pointer */
|
||||
#define CVMX_BUILD_READ64(TYPE, LT) \
|
||||
static inline TYPE##_t cvmx_read64_##TYPE(uint64_t addr) \
|
||||
{ \
|
||||
return *CASTPTR(volatile TYPE##_t, addr); \
|
||||
}
|
||||
|
||||
|
||||
/* The following defines 8 functions for writing to a 64bit address. Each
|
||||
takes two arguments, the address and the value to write.
|
||||
cvmx_write64_int64 cvmx_write64_uint64
|
||||
cvmx_write64_int32 cvmx_write64_uint32
|
||||
cvmx_write64_int16 cvmx_write64_uint16
|
||||
cvmx_write64_int8 cvmx_write64_uint8 */
|
||||
CVMX_BUILD_WRITE64(int64, "sd");
|
||||
CVMX_BUILD_WRITE64(int32, "sw");
|
||||
CVMX_BUILD_WRITE64(int16, "sh");
|
||||
CVMX_BUILD_WRITE64(int8, "sb");
|
||||
CVMX_BUILD_WRITE64(uint64, "sd");
|
||||
CVMX_BUILD_WRITE64(uint32, "sw");
|
||||
CVMX_BUILD_WRITE64(uint16, "sh");
|
||||
CVMX_BUILD_WRITE64(uint8, "sb");
|
||||
#define cvmx_write64 cvmx_write64_uint64
|
||||
|
||||
/* The following defines 8 functions for reading from a 64bit address. Each
|
||||
takes the address as the only argument
|
||||
cvmx_read64_int64 cvmx_read64_uint64
|
||||
cvmx_read64_int32 cvmx_read64_uint32
|
||||
cvmx_read64_int16 cvmx_read64_uint16
|
||||
cvmx_read64_int8 cvmx_read64_uint8 */
|
||||
CVMX_BUILD_READ64(int64, "ld");
|
||||
CVMX_BUILD_READ64(int32, "lw");
|
||||
CVMX_BUILD_READ64(int16, "lh");
|
||||
CVMX_BUILD_READ64(int8, "lb");
|
||||
CVMX_BUILD_READ64(uint64, "ld");
|
||||
CVMX_BUILD_READ64(uint32, "lw");
|
||||
CVMX_BUILD_READ64(uint16, "lhu");
|
||||
CVMX_BUILD_READ64(uint8, "lbu");
|
||||
#define cvmx_read64 cvmx_read64_uint64
|
||||
|
||||
|
||||
static inline void cvmx_write_csr(uint64_t csr_addr, uint64_t val)
|
||||
{
|
||||
cvmx_write64(csr_addr, val);
|
||||
|
||||
/*
|
||||
* Perform an immediate read after every write to an RSL
|
||||
* register to force the write to complete. It doesn't matter
|
||||
* what RSL read we do, so we choose CVMX_MIO_BOOT_BIST_STAT
|
||||
* because it is fast and harmless.
|
||||
*/
|
||||
if (((csr_addr >> 40) & 0x7ffff) == (0x118))
|
||||
cvmx_read64(CVMX_MIO_BOOT_BIST_STAT);
|
||||
}
|
||||
|
||||
static inline void cvmx_write_io(uint64_t io_addr, uint64_t val)
|
||||
{
|
||||
cvmx_write64(io_addr, val);
|
||||
|
||||
}
|
||||
|
||||
static inline uint64_t cvmx_read_csr(uint64_t csr_addr)
|
||||
{
|
||||
uint64_t val = cvmx_read64(csr_addr);
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
static inline void cvmx_send_single(uint64_t data)
|
||||
{
|
||||
const uint64_t CVMX_IOBDMA_SENDSINGLE = 0xffffffffffffa200ull;
|
||||
cvmx_write64(CVMX_IOBDMA_SENDSINGLE, data);
|
||||
}
|
||||
|
||||
static inline void cvmx_read_csr_async(uint64_t scraddr, uint64_t csr_addr)
|
||||
{
|
||||
union {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
uint64_t scraddr:8;
|
||||
uint64_t len:8;
|
||||
uint64_t addr:48;
|
||||
} s;
|
||||
} addr;
|
||||
addr.u64 = csr_addr;
|
||||
addr.s.scraddr = scraddr >> 3;
|
||||
addr.s.len = 1;
|
||||
cvmx_send_single(addr.u64);
|
||||
}
|
||||
|
||||
/* Return true if Octeon is CN38XX pass 1 */
|
||||
static inline int cvmx_octeon_is_pass1(void)
|
||||
{
|
||||
#if OCTEON_IS_COMMON_BINARY()
|
||||
return 0; /* Pass 1 isn't supported for common binaries */
|
||||
#else
|
||||
/* Now that we know we're built for a specific model, only check CN38XX */
|
||||
#if OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
return cvmx_get_proc_id() == OCTEON_CN38XX_PASS1;
|
||||
#else
|
||||
return 0; /* Built for non CN38XX chip, we're not CN38XX pass1 */
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline unsigned int cvmx_get_core_num(void)
|
||||
{
|
||||
unsigned int core_num;
|
||||
CVMX_RDHWRNV(core_num, 0);
|
||||
return core_num;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bits set in the provided value.
|
||||
* Simple wrapper for POP instruction.
|
||||
*
|
||||
* @val: 32 bit value to count set bits in
|
||||
*
|
||||
* Returns Number of bits set
|
||||
*/
|
||||
static inline uint32_t cvmx_pop(uint32_t val)
|
||||
{
|
||||
uint32_t pop;
|
||||
CVMX_POP(pop, val);
|
||||
return pop;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of bits set in the provided value.
|
||||
* Simple wrapper for DPOP instruction.
|
||||
*
|
||||
* @val: 64 bit value to count set bits in
|
||||
*
|
||||
* Returns Number of bits set
|
||||
*/
|
||||
static inline int cvmx_dpop(uint64_t val)
|
||||
{
|
||||
int pop;
|
||||
CVMX_DPOP(pop, val);
|
||||
return pop;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide current cycle counter as a return value
|
||||
*
|
||||
* Returns current cycle counter
|
||||
*/
|
||||
|
||||
static inline uint64_t cvmx_get_cycle(void)
|
||||
{
|
||||
uint64_t cycle;
|
||||
CVMX_RDHWR(cycle, 31);
|
||||
return cycle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for the specified number of cycle
|
||||
*
|
||||
*/
|
||||
static inline void cvmx_wait(uint64_t cycles)
|
||||
{
|
||||
uint64_t done = cvmx_get_cycle() + cycles;
|
||||
|
||||
while (cvmx_get_cycle() < done)
|
||||
; /* Spin */
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a chip global cycle counter. This counts CPU cycles since
|
||||
* chip reset. The counter is 64 bit.
|
||||
* This register does not exist on CN38XX pass 1 silicion
|
||||
*
|
||||
* Returns Global chip cycle count since chip reset.
|
||||
*/
|
||||
static inline uint64_t cvmx_get_cycle_global(void)
|
||||
{
|
||||
if (cvmx_octeon_is_pass1())
|
||||
return 0;
|
||||
else
|
||||
return cvmx_read64(CVMX_IPD_CLK_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
* This macro spins on a field waiting for it to reach a value. It
|
||||
* is common in code to need to wait for a specific field in a CSR
|
||||
* to match a specific value. Conceptually this macro expands to:
|
||||
*
|
||||
* 1) read csr at "address" with a csr typedef of "type"
|
||||
* 2) Check if ("type".s."field" "op" "value")
|
||||
* 3) If #2 isn't true loop to #1 unless too much time has passed.
|
||||
*/
|
||||
#define CVMX_WAIT_FOR_FIELD64(address, type, field, op, value, timeout_usec)\
|
||||
( \
|
||||
{ \
|
||||
int result; \
|
||||
do { \
|
||||
uint64_t done = cvmx_get_cycle() + (uint64_t)timeout_usec * \
|
||||
cvmx_sysinfo_get()->cpu_clock_hz / 1000000; \
|
||||
type c; \
|
||||
while (1) { \
|
||||
c.u64 = cvmx_read_csr(address); \
|
||||
if ((c.s.field) op(value)) { \
|
||||
result = 0; \
|
||||
break; \
|
||||
} else if (cvmx_get_cycle() > done) { \
|
||||
result = -1; \
|
||||
break; \
|
||||
} else \
|
||||
cvmx_wait(100); \
|
||||
} \
|
||||
} while (0); \
|
||||
result; \
|
||||
})
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static inline void cvmx_reset_octeon(void)
|
||||
{
|
||||
union cvmx_ciu_soft_rst ciu_soft_rst;
|
||||
ciu_soft_rst.u64 = 0;
|
||||
ciu_soft_rst.s.soft_rst = 1;
|
||||
cvmx_write_csr(CVMX_CIU_SOFT_RST, ciu_soft_rst.u64);
|
||||
}
|
||||
|
||||
/* Return the number of cores available in the chip */
|
||||
static inline uint32_t cvmx_octeon_num_cores(void)
|
||||
{
|
||||
uint32_t ciu_fuse = (uint32_t) cvmx_read_csr(CVMX_CIU_FUSE) & 0xffff;
|
||||
return cvmx_pop(ciu_fuse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a byte of fuse data
|
||||
* @byte_addr: address to read
|
||||
*
|
||||
* Returns fuse value: 0 or 1
|
||||
*/
|
||||
static uint8_t cvmx_fuse_read_byte(int byte_addr)
|
||||
{
|
||||
union cvmx_mio_fus_rcmd read_cmd;
|
||||
|
||||
read_cmd.u64 = 0;
|
||||
read_cmd.s.addr = byte_addr;
|
||||
read_cmd.s.pend = 1;
|
||||
cvmx_write_csr(CVMX_MIO_FUS_RCMD, read_cmd.u64);
|
||||
while ((read_cmd.u64 = cvmx_read_csr(CVMX_MIO_FUS_RCMD))
|
||||
&& read_cmd.s.pend)
|
||||
;
|
||||
return read_cmd.s.dat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a single fuse bit
|
||||
*
|
||||
* @fuse: Fuse number (0-1024)
|
||||
*
|
||||
* Returns fuse value: 0 or 1
|
||||
*/
|
||||
static inline int cvmx_fuse_read(int fuse)
|
||||
{
|
||||
return (cvmx_fuse_read_byte(fuse >> 3) >> (fuse & 0x7)) & 1;
|
||||
}
|
||||
|
||||
static inline int cvmx_octeon_model_CN36XX(void)
|
||||
{
|
||||
return OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
&& !cvmx_octeon_is_pass1()
|
||||
&& cvmx_fuse_read(264);
|
||||
}
|
||||
|
||||
static inline int cvmx_octeon_zip_present(void)
|
||||
{
|
||||
return octeon_has_feature(OCTEON_FEATURE_ZIP);
|
||||
}
|
||||
|
||||
static inline int cvmx_octeon_dfa_present(void)
|
||||
{
|
||||
if (!OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN31XX)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN58XX))
|
||||
return 0;
|
||||
else if (OCTEON_IS_MODEL(OCTEON_CN3020))
|
||||
return 0;
|
||||
else if (cvmx_octeon_is_pass1())
|
||||
return 1;
|
||||
else
|
||||
return !cvmx_fuse_read(120);
|
||||
}
|
||||
|
||||
static inline int cvmx_octeon_crypto_present(void)
|
||||
{
|
||||
return octeon_has_feature(OCTEON_FEATURE_CRYPTO);
|
||||
}
|
||||
|
||||
#endif /* __CVMX_H__ */
|
||||
238
arch/mips/include/asm/octeon/octeon-feature.h
Normal file
238
arch/mips/include/asm/octeon/octeon-feature.h
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2008 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
|
||||
/*
|
||||
* File defining checks for different Octeon features.
|
||||
*/
|
||||
|
||||
#ifndef __OCTEON_FEATURE_H__
|
||||
#define __OCTEON_FEATURE_H__
|
||||
#include <asm/octeon/cvmx-mio-defs.h>
|
||||
#include <asm/octeon/cvmx-rnm-defs.h>
|
||||
|
||||
enum octeon_feature {
|
||||
/* CN68XX uses port kinds for packet interface */
|
||||
OCTEON_FEATURE_PKND,
|
||||
/* CN68XX has different fields in word0 - word2 */
|
||||
OCTEON_FEATURE_CN68XX_WQE,
|
||||
/*
|
||||
* Octeon models in the CN5XXX family and higher support
|
||||
* atomic add instructions to memory (saa/saad).
|
||||
*/
|
||||
OCTEON_FEATURE_SAAD,
|
||||
/* Does this Octeon support the ZIP offload engine? */
|
||||
OCTEON_FEATURE_ZIP,
|
||||
/* Does this Octeon support crypto acceleration using COP2? */
|
||||
OCTEON_FEATURE_CRYPTO,
|
||||
OCTEON_FEATURE_DORM_CRYPTO,
|
||||
/* Does this Octeon support PCI express? */
|
||||
OCTEON_FEATURE_PCIE,
|
||||
/* Does this Octeon support SRIOs */
|
||||
OCTEON_FEATURE_SRIO,
|
||||
/* Does this Octeon support Interlaken */
|
||||
OCTEON_FEATURE_ILK,
|
||||
/* Some Octeon models support internal memory for storing
|
||||
* cryptographic keys */
|
||||
OCTEON_FEATURE_KEY_MEMORY,
|
||||
/* Octeon has a LED controller for banks of external LEDs */
|
||||
OCTEON_FEATURE_LED_CONTROLLER,
|
||||
/* Octeon has a trace buffer */
|
||||
OCTEON_FEATURE_TRA,
|
||||
/* Octeon has a management port */
|
||||
OCTEON_FEATURE_MGMT_PORT,
|
||||
/* Octeon has a raid unit */
|
||||
OCTEON_FEATURE_RAID,
|
||||
/* Octeon has a builtin USB */
|
||||
OCTEON_FEATURE_USB,
|
||||
/* Octeon IPD can run without using work queue entries */
|
||||
OCTEON_FEATURE_NO_WPTR,
|
||||
/* Octeon has DFA state machines */
|
||||
OCTEON_FEATURE_DFA,
|
||||
/* Octeon MDIO block supports clause 45 transactions for 10
|
||||
* Gig support */
|
||||
OCTEON_FEATURE_MDIO_CLAUSE_45,
|
||||
/*
|
||||
* CN52XX and CN56XX used a block named NPEI for PCIe
|
||||
* access. Newer chips replaced this with SLI+DPI.
|
||||
*/
|
||||
OCTEON_FEATURE_NPEI,
|
||||
OCTEON_FEATURE_HFA,
|
||||
OCTEON_FEATURE_DFM,
|
||||
OCTEON_FEATURE_CIU2,
|
||||
OCTEON_MAX_FEATURE
|
||||
};
|
||||
|
||||
static inline int cvmx_fuse_read(int fuse);
|
||||
|
||||
/**
|
||||
* Determine if the current Octeon supports a specific feature. These
|
||||
* checks have been optimized to be fairly quick, but they should still
|
||||
* be kept out of fast path code.
|
||||
*
|
||||
* @feature: Feature to check for. This should always be a constant so the
|
||||
* compiler can remove the switch statement through optimization.
|
||||
*
|
||||
* Returns Non zero if the feature exists. Zero if the feature does not
|
||||
* exist.
|
||||
*/
|
||||
static inline int octeon_has_feature(enum octeon_feature feature)
|
||||
{
|
||||
switch (feature) {
|
||||
case OCTEON_FEATURE_SAAD:
|
||||
return !OCTEON_IS_MODEL(OCTEON_CN3XXX);
|
||||
|
||||
case OCTEON_FEATURE_ZIP:
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN30XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN50XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX))
|
||||
return 0;
|
||||
else if (OCTEON_IS_MODEL(OCTEON_CN38XX_PASS1))
|
||||
return 1;
|
||||
else
|
||||
return !cvmx_fuse_read(121);
|
||||
|
||||
case OCTEON_FEATURE_CRYPTO:
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) {
|
||||
union cvmx_mio_fus_dat2 fus_2;
|
||||
fus_2.u64 = cvmx_read_csr(CVMX_MIO_FUS_DAT2);
|
||||
if (fus_2.s.nocrypto || fus_2.s.nomul) {
|
||||
return 0;
|
||||
} else if (!fus_2.s.dorm_crypto) {
|
||||
return 1;
|
||||
} else {
|
||||
union cvmx_rnm_ctl_status st;
|
||||
st.u64 = cvmx_read_csr(CVMX_RNM_CTL_STATUS);
|
||||
return st.s.eer_val;
|
||||
}
|
||||
} else {
|
||||
return !cvmx_fuse_read(90);
|
||||
}
|
||||
|
||||
case OCTEON_FEATURE_DORM_CRYPTO:
|
||||
if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) {
|
||||
union cvmx_mio_fus_dat2 fus_2;
|
||||
fus_2.u64 = cvmx_read_csr(CVMX_MIO_FUS_DAT2);
|
||||
return !fus_2.s.nocrypto && !fus_2.s.nomul && fus_2.s.dorm_crypto;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
case OCTEON_FEATURE_PCIE:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN6XXX);
|
||||
|
||||
case OCTEON_FEATURE_SRIO:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN63XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN66XX);
|
||||
|
||||
case OCTEON_FEATURE_ILK:
|
||||
return (OCTEON_IS_MODEL(OCTEON_CN68XX));
|
||||
|
||||
case OCTEON_FEATURE_KEY_MEMORY:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN58XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN6XXX);
|
||||
|
||||
case OCTEON_FEATURE_LED_CONTROLLER:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN58XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN56XX);
|
||||
|
||||
case OCTEON_FEATURE_TRA:
|
||||
return !(OCTEON_IS_MODEL(OCTEON_CN30XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN50XX));
|
||||
case OCTEON_FEATURE_MGMT_PORT:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN6XXX);
|
||||
|
||||
case OCTEON_FEATURE_RAID:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN6XXX);
|
||||
|
||||
case OCTEON_FEATURE_USB:
|
||||
return !(OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN58XX));
|
||||
|
||||
case OCTEON_FEATURE_NO_WPTR:
|
||||
return (OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN6XXX))
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN56XX_PASS1_X)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN52XX_PASS1_X);
|
||||
|
||||
case OCTEON_FEATURE_DFA:
|
||||
if (!OCTEON_IS_MODEL(OCTEON_CN38XX)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN31XX)
|
||||
&& !OCTEON_IS_MODEL(OCTEON_CN58XX))
|
||||
return 0;
|
||||
else if (OCTEON_IS_MODEL(OCTEON_CN3020))
|
||||
return 0;
|
||||
else
|
||||
return !cvmx_fuse_read(120);
|
||||
|
||||
case OCTEON_FEATURE_HFA:
|
||||
if (!OCTEON_IS_MODEL(OCTEON_CN6XXX))
|
||||
return 0;
|
||||
else
|
||||
return !cvmx_fuse_read(90);
|
||||
|
||||
case OCTEON_FEATURE_DFM:
|
||||
if (!(OCTEON_IS_MODEL(OCTEON_CN63XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN66XX)))
|
||||
return 0;
|
||||
else
|
||||
return !cvmx_fuse_read(90);
|
||||
|
||||
case OCTEON_FEATURE_MDIO_CLAUSE_45:
|
||||
return !(OCTEON_IS_MODEL(OCTEON_CN3XXX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN58XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN50XX));
|
||||
|
||||
case OCTEON_FEATURE_NPEI:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN56XX)
|
||||
|| OCTEON_IS_MODEL(OCTEON_CN52XX);
|
||||
|
||||
case OCTEON_FEATURE_PKND:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN68XX);
|
||||
|
||||
case OCTEON_FEATURE_CN68XX_WQE:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN68XX);
|
||||
|
||||
case OCTEON_FEATURE_CIU2:
|
||||
return OCTEON_IS_MODEL(OCTEON_CN68XX);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __OCTEON_FEATURE_H__ */
|
||||
342
arch/mips/include/asm/octeon/octeon-model.h
Normal file
342
arch/mips/include/asm/octeon/octeon-model.h
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
/***********************license start***************
|
||||
* Author: Cavium Networks
|
||||
*
|
||||
* Contact: support@caviumnetworks.com
|
||||
* This file is part of the OCTEON SDK
|
||||
*
|
||||
* Copyright (c) 2003-2010 Cavium Networks
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, Version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful, but
|
||||
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
|
||||
* NONINFRINGEMENT. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this file; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* or visit http://www.gnu.org/licenses/.
|
||||
*
|
||||
* This file may also be available under a different license from Cavium.
|
||||
* Contact Cavium Networks for more information
|
||||
***********************license end**************************************/
|
||||
#ifndef __OCTEON_MODEL_H__
|
||||
#define __OCTEON_MODEL_H__
|
||||
|
||||
/*
|
||||
* The defines below should be used with the OCTEON_IS_MODEL() macro
|
||||
* to determine what model of chip the software is running on. Models
|
||||
* ending in 'XX' match multiple models (families), while specific
|
||||
* models match only that model. If a pass (revision) is specified,
|
||||
* then only that revision will be matched. Care should be taken when
|
||||
* checking for both specific models and families that the specific
|
||||
* models are checked for first. While these defines are similar to
|
||||
* the processor ID, they are not intended to be used by anything
|
||||
* other that the OCTEON_IS_MODEL framework, and the values are
|
||||
* subject to change at anytime without notice.
|
||||
*
|
||||
* NOTE: only the OCTEON_IS_MODEL() macro/function and the OCTEON_CN*
|
||||
* macros should be used outside of this file. All other macros are
|
||||
* for internal use only, and may change without notice.
|
||||
*/
|
||||
|
||||
#define OCTEON_FAMILY_MASK 0x00ffff00
|
||||
|
||||
/* Flag bits in top byte */
|
||||
/* Ignores revision in model checks */
|
||||
#define OM_IGNORE_REVISION 0x01000000
|
||||
/* Check submodels */
|
||||
#define OM_CHECK_SUBMODEL 0x02000000
|
||||
/* Match all models previous than the one specified */
|
||||
#define OM_MATCH_PREVIOUS_MODELS 0x04000000
|
||||
/* Ignores the minor revison on newer parts */
|
||||
#define OM_IGNORE_MINOR_REVISION 0x08000000
|
||||
#define OM_FLAG_MASK 0xff000000
|
||||
|
||||
/* Match all cn5XXX Octeon models. */
|
||||
#define OM_MATCH_5XXX_FAMILY_MODELS 0x20000000
|
||||
/* Match all cn6XXX Octeon models. */
|
||||
#define OM_MATCH_6XXX_FAMILY_MODELS 0x40000000
|
||||
/* Match all cnf7XXX Octeon models. */
|
||||
#define OM_MATCH_F7XXX_FAMILY_MODELS 0x80000000
|
||||
|
||||
/*
|
||||
* CNF7XXX models with new revision encoding
|
||||
*/
|
||||
#define OCTEON_CNF71XX_PASS1_0 0x000d9400
|
||||
|
||||
#define OCTEON_CNF71XX (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CNF71XX_PASS1_X (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
/*
|
||||
* CN6XXX models with new revision encoding
|
||||
*/
|
||||
#define OCTEON_CN68XX_PASS1_0 0x000d9100
|
||||
#define OCTEON_CN68XX_PASS1_1 0x000d9101
|
||||
#define OCTEON_CN68XX_PASS1_2 0x000d9102
|
||||
#define OCTEON_CN68XX_PASS2_0 0x000d9108
|
||||
|
||||
#define OCTEON_CN68XX (OCTEON_CN68XX_PASS2_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN68XX_PASS1_X (OCTEON_CN68XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN68XX_PASS2_X (OCTEON_CN68XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
#define OCTEON_CN68XX_PASS1 OCTEON_CN68XX_PASS1_X
|
||||
#define OCTEON_CN68XX_PASS2 OCTEON_CN68XX_PASS2_X
|
||||
|
||||
#define OCTEON_CN66XX_PASS1_0 0x000d9200
|
||||
#define OCTEON_CN66XX_PASS1_2 0x000d9202
|
||||
|
||||
#define OCTEON_CN66XX (OCTEON_CN66XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN66XX_PASS1_X (OCTEON_CN66XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
#define OCTEON_CN63XX_PASS1_0 0x000d9000
|
||||
#define OCTEON_CN63XX_PASS1_1 0x000d9001
|
||||
#define OCTEON_CN63XX_PASS1_2 0x000d9002
|
||||
#define OCTEON_CN63XX_PASS2_0 0x000d9008
|
||||
#define OCTEON_CN63XX_PASS2_1 0x000d9009
|
||||
#define OCTEON_CN63XX_PASS2_2 0x000d900a
|
||||
|
||||
#define OCTEON_CN63XX (OCTEON_CN63XX_PASS2_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN63XX_PASS1_X (OCTEON_CN63XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN63XX_PASS2_X (OCTEON_CN63XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
#define OCTEON_CN61XX_PASS1_0 0x000d9300
|
||||
|
||||
#define OCTEON_CN61XX (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN61XX_PASS1_X (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
/*
|
||||
* CN5XXX models with new revision encoding
|
||||
*/
|
||||
#define OCTEON_CN58XX_PASS1_0 0x000d0300
|
||||
#define OCTEON_CN58XX_PASS1_1 0x000d0301
|
||||
#define OCTEON_CN58XX_PASS1_2 0x000d0303
|
||||
#define OCTEON_CN58XX_PASS2_0 0x000d0308
|
||||
#define OCTEON_CN58XX_PASS2_1 0x000d0309
|
||||
#define OCTEON_CN58XX_PASS2_2 0x000d030a
|
||||
#define OCTEON_CN58XX_PASS2_3 0x000d030b
|
||||
|
||||
#define OCTEON_CN58XX (OCTEON_CN58XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN58XX_PASS1_X (OCTEON_CN58XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN58XX_PASS2_X (OCTEON_CN58XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN58XX_PASS1 OCTEON_CN58XX_PASS1_X
|
||||
#define OCTEON_CN58XX_PASS2 OCTEON_CN58XX_PASS2_X
|
||||
|
||||
#define OCTEON_CN56XX_PASS1_0 0x000d0400
|
||||
#define OCTEON_CN56XX_PASS1_1 0x000d0401
|
||||
#define OCTEON_CN56XX_PASS2_0 0x000d0408
|
||||
#define OCTEON_CN56XX_PASS2_1 0x000d0409
|
||||
|
||||
#define OCTEON_CN56XX (OCTEON_CN56XX_PASS2_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN56XX_PASS1_X (OCTEON_CN56XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN56XX_PASS2_X (OCTEON_CN56XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN56XX_PASS1 OCTEON_CN56XX_PASS1_X
|
||||
#define OCTEON_CN56XX_PASS2 OCTEON_CN56XX_PASS2_X
|
||||
|
||||
#define OCTEON_CN57XX OCTEON_CN56XX
|
||||
#define OCTEON_CN57XX_PASS1 OCTEON_CN56XX_PASS1
|
||||
#define OCTEON_CN57XX_PASS2 OCTEON_CN56XX_PASS2
|
||||
|
||||
#define OCTEON_CN55XX OCTEON_CN56XX
|
||||
#define OCTEON_CN55XX_PASS1 OCTEON_CN56XX_PASS1
|
||||
#define OCTEON_CN55XX_PASS2 OCTEON_CN56XX_PASS2
|
||||
|
||||
#define OCTEON_CN54XX OCTEON_CN56XX
|
||||
#define OCTEON_CN54XX_PASS1 OCTEON_CN56XX_PASS1
|
||||
#define OCTEON_CN54XX_PASS2 OCTEON_CN56XX_PASS2
|
||||
|
||||
#define OCTEON_CN50XX_PASS1_0 0x000d0600
|
||||
|
||||
#define OCTEON_CN50XX (OCTEON_CN50XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN50XX_PASS1_X (OCTEON_CN50XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN50XX_PASS1 OCTEON_CN50XX_PASS1_X
|
||||
|
||||
/*
|
||||
* NOTE: Octeon CN5000F model is not identifiable using the
|
||||
* OCTEON_IS_MODEL() functions, but are treated as CN50XX.
|
||||
*/
|
||||
|
||||
#define OCTEON_CN52XX_PASS1_0 0x000d0700
|
||||
#define OCTEON_CN52XX_PASS2_0 0x000d0708
|
||||
|
||||
#define OCTEON_CN52XX (OCTEON_CN52XX_PASS2_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN52XX_PASS1_X (OCTEON_CN52XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN52XX_PASS2_X (OCTEON_CN52XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
#define OCTEON_CN52XX_PASS1 OCTEON_CN52XX_PASS1_X
|
||||
#define OCTEON_CN52XX_PASS2 OCTEON_CN52XX_PASS2_X
|
||||
|
||||
/*
|
||||
* CN3XXX models with old revision enconding
|
||||
*/
|
||||
#define OCTEON_CN38XX_PASS1 0x000d0000
|
||||
#define OCTEON_CN38XX_PASS2 0x000d0001
|
||||
#define OCTEON_CN38XX_PASS3 0x000d0003
|
||||
#define OCTEON_CN38XX (OCTEON_CN38XX_PASS3 | OM_IGNORE_REVISION)
|
||||
|
||||
#define OCTEON_CN36XX OCTEON_CN38XX
|
||||
#define OCTEON_CN36XX_PASS2 OCTEON_CN38XX_PASS2
|
||||
#define OCTEON_CN36XX_PASS3 OCTEON_CN38XX_PASS3
|
||||
|
||||
/* The OCTEON_CN31XX matches CN31XX models and the CN3020 */
|
||||
#define OCTEON_CN31XX_PASS1 0x000d0100
|
||||
#define OCTEON_CN31XX_PASS1_1 0x000d0102
|
||||
#define OCTEON_CN31XX (OCTEON_CN31XX_PASS1 | OM_IGNORE_REVISION)
|
||||
|
||||
/*
|
||||
* This model is only used for internal checks, it is not a valid
|
||||
* model for the OCTEON_MODEL environment variable. This matches the
|
||||
* CN3010 and CN3005 but NOT the CN3020.
|
||||
*/
|
||||
#define OCTEON_CN30XX_PASS1 0x000d0200
|
||||
#define OCTEON_CN30XX_PASS1_1 0x000d0202
|
||||
#define OCTEON_CN30XX (OCTEON_CN30XX_PASS1 | OM_IGNORE_REVISION)
|
||||
|
||||
#define OCTEON_CN3005_PASS1 (0x000d0210 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3005_PASS1_0 (0x000d0210 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3005_PASS1_1 (0x000d0212 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3005 (OCTEON_CN3005_PASS1 | OM_IGNORE_REVISION | OM_CHECK_SUBMODEL)
|
||||
|
||||
#define OCTEON_CN3010_PASS1 (0x000d0200 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3010_PASS1_0 (0x000d0200 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3010_PASS1_1 (0x000d0202 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3010 (OCTEON_CN3010_PASS1 | OM_IGNORE_REVISION | OM_CHECK_SUBMODEL)
|
||||
|
||||
#define OCTEON_CN3020_PASS1 (0x000d0110 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3020_PASS1_0 (0x000d0110 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3020_PASS1_1 (0x000d0112 | OM_CHECK_SUBMODEL)
|
||||
#define OCTEON_CN3020 (OCTEON_CN3020_PASS1 | OM_IGNORE_REVISION | OM_CHECK_SUBMODEL)
|
||||
|
||||
/*
|
||||
* This matches the complete family of CN3xxx CPUs, and not subsequent
|
||||
* models
|
||||
*/
|
||||
#define OCTEON_CN3XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_PREVIOUS_MODELS | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN5XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_5XXX_FAMILY_MODELS)
|
||||
#define OCTEON_CN6XXX (OCTEON_CN63XX_PASS1_0 | OM_MATCH_6XXX_FAMILY_MODELS)
|
||||
|
||||
/* These are used to cover entire families of OCTEON processors */
|
||||
#define OCTEON_FAM_1 (OCTEON_CN3XXX)
|
||||
#define OCTEON_FAM_PLUS (OCTEON_CN5XXX)
|
||||
#define OCTEON_FAM_1_PLUS (OCTEON_FAM_PLUS | OM_MATCH_PREVIOUS_MODELS)
|
||||
#define OCTEON_FAM_2 (OCTEON_CN6XXX)
|
||||
|
||||
/* The revision byte (low byte) has two different encodings.
|
||||
* CN3XXX:
|
||||
*
|
||||
* bits
|
||||
* <7:5>: reserved (0)
|
||||
* <4>: alternate package
|
||||
* <3:0>: revision
|
||||
*
|
||||
* CN5XXX:
|
||||
*
|
||||
* bits
|
||||
* <7>: reserved (0)
|
||||
* <6>: alternate package
|
||||
* <5:3>: major revision
|
||||
* <2:0>: minor revision
|
||||
*
|
||||
*/
|
||||
|
||||
/* Masks used for the various types of model/family/revision matching */
|
||||
#define OCTEON_38XX_FAMILY_MASK 0x00ffff00
|
||||
#define OCTEON_38XX_FAMILY_REV_MASK 0x00ffff0f
|
||||
#define OCTEON_38XX_MODEL_MASK 0x00ffff10
|
||||
#define OCTEON_38XX_MODEL_REV_MASK (OCTEON_38XX_FAMILY_REV_MASK | OCTEON_38XX_MODEL_MASK)
|
||||
|
||||
/* CN5XXX and later use different layout of bits in the revision ID field */
|
||||
#define OCTEON_58XX_FAMILY_MASK OCTEON_38XX_FAMILY_MASK
|
||||
#define OCTEON_58XX_FAMILY_REV_MASK 0x00ffff3f
|
||||
#define OCTEON_58XX_MODEL_MASK 0x00ffffc0
|
||||
#define OCTEON_58XX_MODEL_REV_MASK (OCTEON_58XX_FAMILY_REV_MASK | OCTEON_58XX_MODEL_MASK)
|
||||
#define OCTEON_58XX_MODEL_MINOR_REV_MASK (OCTEON_58XX_MODEL_REV_MASK & 0x00fffff8)
|
||||
#define OCTEON_5XXX_MODEL_MASK 0x00ff0fc0
|
||||
|
||||
/* forward declarations */
|
||||
static inline uint32_t cvmx_get_proc_id(void) __attribute__ ((pure));
|
||||
static inline uint64_t cvmx_read_csr(uint64_t csr_addr);
|
||||
|
||||
#define __OCTEON_MATCH_MASK__(x, y, z) (((x) & (z)) == ((y) & (z)))
|
||||
|
||||
/* NOTE: This for internal use only! */
|
||||
#define __OCTEON_IS_MODEL_COMPILE__(arg_model, chip_model) \
|
||||
((((arg_model & OCTEON_38XX_FAMILY_MASK) < OCTEON_CN58XX_PASS1_0) && ( \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == (OM_IGNORE_REVISION | OM_CHECK_SUBMODEL)) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_38XX_MODEL_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == 0) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_38XX_FAMILY_REV_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == OM_IGNORE_REVISION) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_38XX_FAMILY_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == OM_CHECK_SUBMODEL) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_38XX_MODEL_REV_MASK)) || \
|
||||
((((arg_model) & (OM_MATCH_PREVIOUS_MODELS)) == OM_MATCH_PREVIOUS_MODELS) \
|
||||
&& (((chip_model) & OCTEON_38XX_MODEL_MASK) < ((arg_model) & OCTEON_38XX_MODEL_MASK))) \
|
||||
)) || \
|
||||
(((arg_model & OCTEON_38XX_FAMILY_MASK) >= OCTEON_CN58XX_PASS1_0) && ( \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == (OM_IGNORE_REVISION | OM_CHECK_SUBMODEL)) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_MODEL_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == 0) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_FAMILY_REV_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == OM_IGNORE_MINOR_REVISION) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_MODEL_MINOR_REV_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == OM_IGNORE_REVISION) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_FAMILY_MASK)) || \
|
||||
((((arg_model) & (OM_FLAG_MASK)) == OM_CHECK_SUBMODEL) \
|
||||
&& __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_MODEL_REV_MASK)) || \
|
||||
((((arg_model) & (OM_MATCH_5XXX_FAMILY_MODELS)) == OM_MATCH_5XXX_FAMILY_MODELS) \
|
||||
&& ((chip_model) >= OCTEON_CN58XX_PASS1_0) && ((chip_model) < OCTEON_CN63XX_PASS1_0)) || \
|
||||
((((arg_model) & (OM_MATCH_6XXX_FAMILY_MODELS)) == OM_MATCH_6XXX_FAMILY_MODELS) \
|
||||
&& ((chip_model) >= OCTEON_CN63XX_PASS1_0)) || \
|
||||
((((arg_model) & (OM_MATCH_PREVIOUS_MODELS)) == OM_MATCH_PREVIOUS_MODELS) \
|
||||
&& (((chip_model) & OCTEON_58XX_MODEL_MASK) < ((arg_model) & OCTEON_58XX_MODEL_MASK))) \
|
||||
)))
|
||||
|
||||
/* NOTE: This for internal use only!!!!! */
|
||||
static inline int __octeon_is_model_runtime__(uint32_t model)
|
||||
{
|
||||
uint32_t cpuid = cvmx_get_proc_id();
|
||||
|
||||
/*
|
||||
* Check for special case of mismarked 3005 samples. We only
|
||||
* need to check if the sub model isn't being ignored
|
||||
*/
|
||||
if ((model & OM_CHECK_SUBMODEL) == OM_CHECK_SUBMODEL) {
|
||||
if (cpuid == OCTEON_CN3010_PASS1 && (cvmx_read_csr(0x80011800800007B8ull) & (1ull << 34)))
|
||||
cpuid |= 0x10;
|
||||
}
|
||||
return __OCTEON_IS_MODEL_COMPILE__(model, cpuid);
|
||||
}
|
||||
|
||||
/*
|
||||
* The OCTEON_IS_MODEL macro should be used for all Octeon model checking done
|
||||
* in a program.
|
||||
* This should be kept runtime if at all possible and must be conditionalized
|
||||
* with OCTEON_IS_COMMON_BINARY() if runtime checking support is required.
|
||||
*
|
||||
* Use of the macro in preprocessor directives ( #if OCTEON_IS_MODEL(...) )
|
||||
* is NOT SUPPORTED, and should be replaced with CVMX_COMPILED_FOR()
|
||||
* I.e.:
|
||||
* #if OCTEON_IS_MODEL(OCTEON_CN56XX) -> #if CVMX_COMPILED_FOR(OCTEON_CN56XX)
|
||||
*/
|
||||
#define OCTEON_IS_MODEL(x) __octeon_is_model_runtime__(x)
|
||||
#define OCTEON_IS_COMMON_BINARY() 1
|
||||
#undef OCTEON_MODEL
|
||||
|
||||
const char *octeon_model_get_string(uint32_t chip_id);
|
||||
const char *octeon_model_get_string_buffer(uint32_t chip_id, char *buffer);
|
||||
|
||||
/*
|
||||
* Return the octeon family, i.e., ProcessorID of the PrID register.
|
||||
*/
|
||||
static inline uint32_t cvmx_get_octeon_family(void)
|
||||
{
|
||||
return cvmx_get_proc_id() & OCTEON_FAMILY_MASK;
|
||||
}
|
||||
|
||||
#include <asm/octeon/octeon-feature.h>
|
||||
|
||||
#endif /* __OCTEON_MODEL_H__ */
|
||||
255
arch/mips/include/asm/octeon/octeon.h
Normal file
255
arch/mips/include/asm/octeon/octeon.h
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2004-2008 Cavium Networks
|
||||
*/
|
||||
#ifndef __ASM_OCTEON_OCTEON_H
|
||||
#define __ASM_OCTEON_OCTEON_H
|
||||
|
||||
#include <asm/octeon/cvmx.h>
|
||||
|
||||
extern uint64_t octeon_bootmem_alloc_range_phys(uint64_t size,
|
||||
uint64_t alignment,
|
||||
uint64_t min_addr,
|
||||
uint64_t max_addr,
|
||||
int do_locking);
|
||||
extern void *octeon_bootmem_alloc(uint64_t size, uint64_t alignment,
|
||||
int do_locking);
|
||||
extern void *octeon_bootmem_alloc_range(uint64_t size, uint64_t alignment,
|
||||
uint64_t min_addr, uint64_t max_addr,
|
||||
int do_locking);
|
||||
extern void *octeon_bootmem_alloc_named(uint64_t size, uint64_t alignment,
|
||||
char *name);
|
||||
extern void *octeon_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
|
||||
uint64_t max_addr, uint64_t align,
|
||||
char *name);
|
||||
extern void *octeon_bootmem_alloc_named_address(uint64_t size, uint64_t address,
|
||||
char *name);
|
||||
extern int octeon_bootmem_free_named(char *name);
|
||||
extern void octeon_bootmem_lock(void);
|
||||
extern void octeon_bootmem_unlock(void);
|
||||
|
||||
extern int octeon_is_simulation(void);
|
||||
extern int octeon_is_pci_host(void);
|
||||
extern int octeon_usb_is_ref_clk(void);
|
||||
extern uint64_t octeon_get_clock_rate(void);
|
||||
extern u64 octeon_get_io_clock_rate(void);
|
||||
extern const char *octeon_board_type_string(void);
|
||||
extern const char *octeon_get_pci_interrupts(void);
|
||||
extern int octeon_get_southbridge_interrupt(void);
|
||||
extern int octeon_get_boot_coremask(void);
|
||||
extern int octeon_get_boot_num_arguments(void);
|
||||
extern const char *octeon_get_boot_argument(int arg);
|
||||
extern void octeon_hal_setup_reserved32(void);
|
||||
extern void octeon_user_io_init(void);
|
||||
struct octeon_cop2_state;
|
||||
extern unsigned long octeon_crypto_enable(struct octeon_cop2_state *state);
|
||||
extern void octeon_crypto_disable(struct octeon_cop2_state *state,
|
||||
unsigned long flags);
|
||||
extern asmlinkage void octeon_cop2_restore(struct octeon_cop2_state *task);
|
||||
|
||||
extern void octeon_init_cvmcount(void);
|
||||
extern void octeon_setup_delays(void);
|
||||
extern void octeon_io_clk_delay(unsigned long);
|
||||
|
||||
#define OCTEON_ARGV_MAX_ARGS 64
|
||||
#define OCTOEN_SERIAL_LEN 20
|
||||
|
||||
struct octeon_boot_descriptor {
|
||||
/* Start of block referenced by assembly code - do not change! */
|
||||
uint32_t desc_version;
|
||||
uint32_t desc_size;
|
||||
uint64_t stack_top;
|
||||
uint64_t heap_base;
|
||||
uint64_t heap_end;
|
||||
/* Only used by bootloader */
|
||||
uint64_t entry_point;
|
||||
uint64_t desc_vaddr;
|
||||
/* End of This block referenced by assembly code - do not change! */
|
||||
uint32_t exception_base_addr;
|
||||
uint32_t stack_size;
|
||||
uint32_t heap_size;
|
||||
/* Argc count for application. */
|
||||
uint32_t argc;
|
||||
uint32_t argv[OCTEON_ARGV_MAX_ARGS];
|
||||
|
||||
#define BOOT_FLAG_INIT_CORE (1 << 0)
|
||||
#define OCTEON_BL_FLAG_DEBUG (1 << 1)
|
||||
#define OCTEON_BL_FLAG_NO_MAGIC (1 << 2)
|
||||
/* If set, use uart1 for console */
|
||||
#define OCTEON_BL_FLAG_CONSOLE_UART1 (1 << 3)
|
||||
/* If set, use PCI console */
|
||||
#define OCTEON_BL_FLAG_CONSOLE_PCI (1 << 4)
|
||||
/* Call exit on break on serial port */
|
||||
#define OCTEON_BL_FLAG_BREAK (1 << 5)
|
||||
|
||||
uint32_t flags;
|
||||
uint32_t core_mask;
|
||||
/* DRAM size in megabyes. */
|
||||
uint32_t dram_size;
|
||||
/* physical address of free memory descriptor block. */
|
||||
uint32_t phy_mem_desc_addr;
|
||||
/* used to pass flags from app to debugger. */
|
||||
uint32_t debugger_flags_base_addr;
|
||||
/* CPU clock speed, in hz. */
|
||||
uint32_t eclock_hz;
|
||||
/* DRAM clock speed, in hz. */
|
||||
uint32_t dclock_hz;
|
||||
/* SPI4 clock in hz. */
|
||||
uint32_t spi_clock_hz;
|
||||
uint16_t board_type;
|
||||
uint8_t board_rev_major;
|
||||
uint8_t board_rev_minor;
|
||||
uint16_t chip_type;
|
||||
uint8_t chip_rev_major;
|
||||
uint8_t chip_rev_minor;
|
||||
char board_serial_number[OCTOEN_SERIAL_LEN];
|
||||
uint8_t mac_addr_base[6];
|
||||
uint8_t mac_addr_count;
|
||||
uint64_t cvmx_desc_vaddr;
|
||||
};
|
||||
|
||||
union octeon_cvmemctl {
|
||||
uint64_t u64;
|
||||
struct {
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t tlbbist:1;
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t l1cbist:1;
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t l1dbist:1;
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t dcmbist:1;
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t ptgbist:1;
|
||||
/* RO 1 = BIST fail, 0 = BIST pass */
|
||||
uint64_t wbfbist:1;
|
||||
/* Reserved */
|
||||
uint64_t reserved:22;
|
||||
/* R/W If set, marked write-buffer entries time out
|
||||
* the same as as other entries; if clear, marked
|
||||
* write-buffer entries use the maximum timeout. */
|
||||
uint64_t dismarkwblongto:1;
|
||||
/* R/W If set, a merged store does not clear the
|
||||
* write-buffer entry timeout state. */
|
||||
uint64_t dismrgclrwbto:1;
|
||||
/* R/W Two bits that are the MSBs of the resultant
|
||||
* CVMSEG LM word location for an IOBDMA. The other 8
|
||||
* bits come from the SCRADDR field of the IOBDMA. */
|
||||
uint64_t iobdmascrmsb:2;
|
||||
/* R/W If set, SYNCWS and SYNCS only order marked
|
||||
* stores; if clear, SYNCWS and SYNCS only order
|
||||
* unmarked stores. SYNCWSMARKED has no effect when
|
||||
* DISSYNCWS is set. */
|
||||
uint64_t syncwsmarked:1;
|
||||
/* R/W If set, SYNCWS acts as SYNCW and SYNCS acts as
|
||||
* SYNC. */
|
||||
uint64_t dissyncws:1;
|
||||
/* R/W If set, no stall happens on write buffer
|
||||
* full. */
|
||||
uint64_t diswbfst:1;
|
||||
/* R/W If set (and SX set), supervisor-level
|
||||
* loads/stores can use XKPHYS addresses with
|
||||
* VA<48>==0 */
|
||||
uint64_t xkmemenas:1;
|
||||
/* R/W If set (and UX set), user-level loads/stores
|
||||
* can use XKPHYS addresses with VA<48>==0 */
|
||||
uint64_t xkmemenau:1;
|
||||
/* R/W If set (and SX set), supervisor-level
|
||||
* loads/stores can use XKPHYS addresses with
|
||||
* VA<48>==1 */
|
||||
uint64_t xkioenas:1;
|
||||
/* R/W If set (and UX set), user-level loads/stores
|
||||
* can use XKPHYS addresses with VA<48>==1 */
|
||||
uint64_t xkioenau:1;
|
||||
/* R/W If set, all stores act as SYNCW (NOMERGE must
|
||||
* be set when this is set) RW, reset to 0. */
|
||||
uint64_t allsyncw:1;
|
||||
/* R/W If set, no stores merge, and all stores reach
|
||||
* the coherent bus in order. */
|
||||
uint64_t nomerge:1;
|
||||
/* R/W Selects the bit in the counter used for DID
|
||||
* time-outs 0 = 231, 1 = 230, 2 = 229, 3 =
|
||||
* 214. Actual time-out is between 1x and 2x this
|
||||
* interval. For example, with DIDTTO=3, expiration
|
||||
* interval is between 16K and 32K. */
|
||||
uint64_t didtto:2;
|
||||
/* R/W If set, the (mem) CSR clock never turns off. */
|
||||
uint64_t csrckalwys:1;
|
||||
/* R/W If set, mclk never turns off. */
|
||||
uint64_t mclkalwys:1;
|
||||
/* R/W Selects the bit in the counter used for write
|
||||
* buffer flush time-outs (WBFLT+11) is the bit
|
||||
* position in an internal counter used to determine
|
||||
* expiration. The write buffer expires between 1x and
|
||||
* 2x this interval. For example, with WBFLT = 0, a
|
||||
* write buffer expires between 2K and 4K cycles after
|
||||
* the write buffer entry is allocated. */
|
||||
uint64_t wbfltime:3;
|
||||
/* R/W If set, do not put Istream in the L2 cache. */
|
||||
uint64_t istrnol2:1;
|
||||
/* R/W The write buffer threshold. */
|
||||
uint64_t wbthresh:4;
|
||||
/* Reserved */
|
||||
uint64_t reserved2:2;
|
||||
/* R/W If set, CVMSEG is available for loads/stores in
|
||||
* kernel/debug mode. */
|
||||
uint64_t cvmsegenak:1;
|
||||
/* R/W If set, CVMSEG is available for loads/stores in
|
||||
* supervisor mode. */
|
||||
uint64_t cvmsegenas:1;
|
||||
/* R/W If set, CVMSEG is available for loads/stores in
|
||||
* user mode. */
|
||||
uint64_t cvmsegenau:1;
|
||||
/* R/W Size of local memory in cache blocks, 54 (6912
|
||||
* bytes) is max legal value. */
|
||||
uint64_t lmemsz:6;
|
||||
} s;
|
||||
};
|
||||
|
||||
extern void octeon_write_lcd(const char *s);
|
||||
extern void octeon_check_cpu_bist(void);
|
||||
extern int octeon_get_boot_uart(void);
|
||||
|
||||
struct uart_port;
|
||||
extern unsigned int octeon_serial_in(struct uart_port *, int);
|
||||
extern void octeon_serial_out(struct uart_port *, int, int);
|
||||
|
||||
/**
|
||||
* Write a 32bit value to the Octeon NPI register space
|
||||
*
|
||||
* @address: Address to write to
|
||||
* @val: Value to write
|
||||
*/
|
||||
static inline void octeon_npi_write32(uint64_t address, uint32_t val)
|
||||
{
|
||||
cvmx_write64_uint32(address ^ 4, val);
|
||||
cvmx_read64_uint32(address ^ 4);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read a 32bit value from the Octeon NPI register space
|
||||
*
|
||||
* @address: Address to read
|
||||
* Returns The result
|
||||
*/
|
||||
static inline uint32_t octeon_npi_read32(uint64_t address)
|
||||
{
|
||||
return cvmx_read64_uint32(address ^ 4);
|
||||
}
|
||||
|
||||
extern struct cvmx_bootinfo *octeon_bootinfo;
|
||||
|
||||
extern uint64_t octeon_bootloader_entry_addr;
|
||||
|
||||
extern void (*octeon_irq_setup_secondary)(void);
|
||||
|
||||
typedef void (*octeon_irq_ip4_handler_t)(void);
|
||||
void octeon_irq_set_ip4_handler(octeon_irq_ip4_handler_t);
|
||||
|
||||
extern void octeon_fixup_irqs(void);
|
||||
|
||||
#endif /* __ASM_OCTEON_OCTEON_H */
|
||||
66
arch/mips/include/asm/octeon/pci-octeon.h
Normal file
66
arch/mips/include/asm/octeon/pci-octeon.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2005-2009 Cavium Networks
|
||||
*/
|
||||
|
||||
#ifndef __PCI_OCTEON_H__
|
||||
#define __PCI_OCTEON_H__
|
||||
|
||||
#include <linux/pci.h>
|
||||
|
||||
/*
|
||||
* The physical memory base mapped by BAR1. 256MB at the end of the
|
||||
* first 4GB.
|
||||
*/
|
||||
#define CVMX_PCIE_BAR1_PHYS_BASE ((1ull << 32) - (1ull << 28))
|
||||
#define CVMX_PCIE_BAR1_PHYS_SIZE (1ull << 28)
|
||||
|
||||
/*
|
||||
* The RC base of BAR1. gen1 has a 39-bit BAR2, gen2 has 41-bit BAR2,
|
||||
* place BAR1 so it is the same for both.
|
||||
*/
|
||||
#define CVMX_PCIE_BAR1_RC_BASE (1ull << 41)
|
||||
|
||||
/*
|
||||
* pcibios_map_irq() is defined inside pci-octeon.c. All it does is
|
||||
* call the Octeon specific version pointed to by this variable. This
|
||||
* function needs to change for PCI or PCIe based hosts.
|
||||
*/
|
||||
extern int (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin);
|
||||
|
||||
/*
|
||||
* For PCI (not PCIe) the BAR2 base address.
|
||||
*/
|
||||
#define OCTEON_BAR2_PCI_ADDRESS 0x8000000000ull
|
||||
|
||||
/*
|
||||
* For PCI (not PCIe) the base of the memory mapped by BAR1
|
||||
*/
|
||||
extern u64 octeon_bar1_pci_phys;
|
||||
|
||||
/*
|
||||
* The following defines are used when octeon_dma_bar_type =
|
||||
* OCTEON_DMA_BAR_TYPE_BIG
|
||||
*/
|
||||
#define OCTEON_PCI_BAR1_HOLE_BITS 5
|
||||
#define OCTEON_PCI_BAR1_HOLE_SIZE (1ul<<(OCTEON_PCI_BAR1_HOLE_BITS+3))
|
||||
|
||||
enum octeon_dma_bar_type {
|
||||
OCTEON_DMA_BAR_TYPE_INVALID,
|
||||
OCTEON_DMA_BAR_TYPE_SMALL,
|
||||
OCTEON_DMA_BAR_TYPE_BIG,
|
||||
OCTEON_DMA_BAR_TYPE_PCIE,
|
||||
OCTEON_DMA_BAR_TYPE_PCIE2
|
||||
};
|
||||
|
||||
/*
|
||||
* This tells the DMA mapping system in dma-octeon.c how to map PCI
|
||||
* DMA addresses.
|
||||
*/
|
||||
extern enum octeon_dma_bar_type octeon_dma_bar_type;
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue