1*f173c2b7SSean Bruno /* 2*f173c2b7SSean Bruno * BSD LICENSE 3*f173c2b7SSean Bruno * 4*f173c2b7SSean Bruno * Copyright(c) 2017 Cavium, Inc.. All rights reserved. 5*f173c2b7SSean Bruno * All rights reserved. 6*f173c2b7SSean Bruno * 7*f173c2b7SSean Bruno * Redistribution and use in source and binary forms, with or without 8*f173c2b7SSean Bruno * modification, are permitted provided that the following conditions 9*f173c2b7SSean Bruno * are met: 10*f173c2b7SSean Bruno * 11*f173c2b7SSean Bruno * * Redistributions of source code must retain the above copyright 12*f173c2b7SSean Bruno * notice, this list of conditions and the following disclaimer. 13*f173c2b7SSean Bruno * * Redistributions in binary form must reproduce the above copyright 14*f173c2b7SSean Bruno * notice, this list of conditions and the following disclaimer in 15*f173c2b7SSean Bruno * the documentation and/or other materials provided with the 16*f173c2b7SSean Bruno * distribution. 17*f173c2b7SSean Bruno * * Neither the name of Cavium, Inc. nor the names of its 18*f173c2b7SSean Bruno * contributors may be used to endorse or promote products derived 19*f173c2b7SSean Bruno * from this software without specific prior written permission. 20*f173c2b7SSean Bruno * 21*f173c2b7SSean Bruno * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22*f173c2b7SSean Bruno * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23*f173c2b7SSean Bruno * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24*f173c2b7SSean Bruno * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25*f173c2b7SSean Bruno * OWNER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26*f173c2b7SSean Bruno * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27*f173c2b7SSean Bruno * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28*f173c2b7SSean Bruno * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29*f173c2b7SSean Bruno * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30*f173c2b7SSean Bruno * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31*f173c2b7SSean Bruno * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*f173c2b7SSean Bruno */ 33*f173c2b7SSean Bruno 34*f173c2b7SSean Bruno /* \file cn23xx_pf_regs.h 35*f173c2b7SSean Bruno * \brief Host Driver: Register Address and Register Mask values for 36*f173c2b7SSean Bruno * CN23XX devices. 37*f173c2b7SSean Bruno */ 38*f173c2b7SSean Bruno 39*f173c2b7SSean Bruno #ifndef __CN23XX_PF_REGS_H__ 40*f173c2b7SSean Bruno #define __CN23XX_PF_REGS_H__ 41*f173c2b7SSean Bruno 42*f173c2b7SSean Bruno #define LIO_CN23XX_CFG_PCIE_DEVCTL 0x78 43*f173c2b7SSean Bruno #define LIO_CN23XX_CFG_PCIE_UNCORRECT_ERR_MASK 0x108 44*f173c2b7SSean Bruno #define LIO_CN23XX_CFG_PCIE_CORRECT_ERR_STATUS 0x110 45*f173c2b7SSean Bruno #define LIO_CN23XX_CFG_PCIE_DEVCTL_MASK 0x00040000 46*f173c2b7SSean Bruno 47*f173c2b7SSean Bruno #define LIO_CN23XX_PCIE_SRIOV_FDL 0x188 48*f173c2b7SSean Bruno #define LIO_CN23XX_PCIE_SRIOV_FDL_BIT_POS 0x10 49*f173c2b7SSean Bruno #define LIO_CN23XX_PCIE_SRIOV_FDL_MASK 0xFF 50*f173c2b7SSean Bruno 51*f173c2b7SSean Bruno /* ############## BAR0 Registers ################ */ 52*f173c2b7SSean Bruno 53*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_CTL_PORT_START 0x286E0 54*f173c2b7SSean Bruno #define LIO_CN23XX_PORT_OFFSET 0x10 55*f173c2b7SSean Bruno 56*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_CTL_PORT(p) \ 57*f173c2b7SSean Bruno (LIO_CN23XX_SLI_CTL_PORT_START + \ 58*f173c2b7SSean Bruno ((p) * LIO_CN23XX_PORT_OFFSET)) 59*f173c2b7SSean Bruno 60*f173c2b7SSean Bruno /* 2 scatch registers (64-bit) */ 61*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WINDOW_CTL 0x282E0 62*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_SCRATCH1 0x283C0 63*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_SCRATCH2 0x283D0 64*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WINDOW_CTL_DEFAULT 0x200000ULL 65*f173c2b7SSean Bruno 66*f173c2b7SSean Bruno /* 1 registers (64-bit) - SLI_CTL_STATUS */ 67*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_CTL_STATUS 0x28570 68*f173c2b7SSean Bruno 69*f173c2b7SSean Bruno /* 70*f173c2b7SSean Bruno * SLI Packet Input Jabber Register (64 bit register) 71*f173c2b7SSean Bruno * <31:0> for Byte count for limiting sizes of packet sizes 72*f173c2b7SSean Bruno * that are allowed for sli packet inbound packets. 73*f173c2b7SSean Bruno * the default value is 0xFA00(=64000). 74*f173c2b7SSean Bruno */ 75*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_IN_JABBER 0x29170 76*f173c2b7SSean Bruno 77*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_ADDR_LO 0x20000 78*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_ADDR64 LIO_CN23XX_SLI_WIN_WR_ADDR_LO 79*f173c2b7SSean Bruno 80*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_ADDR_LO 0x20010 81*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_ADDR_HI 0x20014 82*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_ADDR64 LIO_CN23XX_SLI_WIN_RD_ADDR_LO 83*f173c2b7SSean Bruno 84*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_DATA_LO 0x20020 85*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_DATA_HI 0x20024 86*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_DATA64 LIO_CN23XX_SLI_WIN_WR_DATA_LO 87*f173c2b7SSean Bruno 88*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_DATA_LO 0x20040 89*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_DATA_HI 0x20044 90*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_RD_DATA64 LIO_CN23XX_SLI_WIN_RD_DATA_LO 91*f173c2b7SSean Bruno 92*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_WIN_WR_MASK_REG 0x20030 93*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_MAC_CREDIT_CNT 0x23D70 94*f173c2b7SSean Bruno 95*f173c2b7SSean Bruno /* 96*f173c2b7SSean Bruno * 4 registers (64-bit) for mapping IOQs to MACs(PEMs)- 97*f173c2b7SSean Bruno * SLI_PKT_MAC(0..3)_PF(0..1)_RINFO 98*f173c2b7SSean Bruno */ 99*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_MAC_RINFO_START64 0x29030 100*f173c2b7SSean Bruno 101*f173c2b7SSean Bruno /*1 register (64-bit) to determine whether IOQs are in reset. */ 102*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_IOQ_RING_RST 0x291E0 103*f173c2b7SSean Bruno 104*f173c2b7SSean Bruno /* Each Input Queue register is at a 16-byte Offset in BAR0 */ 105*f173c2b7SSean Bruno #define LIO_CN23XX_IQ_OFFSET 0x20000 106*f173c2b7SSean Bruno 107*f173c2b7SSean Bruno #define LIO_CN23XX_MAC_RINFO_OFFSET 0x20 108*f173c2b7SSean Bruno #define LIO_CN23XX_PF_RINFO_OFFSET 0x10 109*f173c2b7SSean Bruno 110*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_MAC_RINFO64(mac, pf) \ 111*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_MAC_RINFO_START64 + \ 112*f173c2b7SSean Bruno ((mac) * LIO_CN23XX_MAC_RINFO_OFFSET) + \ 113*f173c2b7SSean Bruno ((pf) * LIO_CN23XX_PF_RINFO_OFFSET)) 114*f173c2b7SSean Bruno 115*f173c2b7SSean Bruno /* mask for total rings, setting TRS to base */ 116*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_MAC_CTL_RINFO_TRS BIT_ULL(16) 117*f173c2b7SSean Bruno 118*f173c2b7SSean Bruno /* Starting bit of the TRS field in LIO_CN23XX_SLI_PKT_MAC_RINFO64 register */ 119*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_MAC_CTL_RINFO_TRS_BIT_POS 16 120*f173c2b7SSean Bruno 121*f173c2b7SSean Bruno /*###################### REQUEST QUEUE #########################*/ 122*f173c2b7SSean Bruno 123*f173c2b7SSean Bruno /* 64 registers for Input Queue Instr Count - SLI_PKT_IN_DONE0_CNTS */ 124*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_IN_DONE_CNTS_START64 0x10040 125*f173c2b7SSean Bruno 126*f173c2b7SSean Bruno /* 64 registers for Input Queues Start Addr - SLI_PKT0_INSTR_BADDR */ 127*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_INSTR_BADDR_START64 0x10010 128*f173c2b7SSean Bruno 129*f173c2b7SSean Bruno /* 64 registers for Input Doorbell - SLI_PKT0_INSTR_BAOFF_DBELL */ 130*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_INSTR_BADDR_DBELL_START 0x10020 131*f173c2b7SSean Bruno 132*f173c2b7SSean Bruno /* 64 registers for Input Queue size - SLI_PKT0_INSTR_FIFO_RSIZE */ 133*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_INSTR_FIFO_RSIZE_START 0x10030 134*f173c2b7SSean Bruno 135*f173c2b7SSean Bruno /* 136*f173c2b7SSean Bruno * 64 registers (64-bit) - ES, RO, NS, Arbitration for Input Queue Data & 137*f173c2b7SSean Bruno * gather list fetches. SLI_PKT(0..63)_INPUT_CONTROL. 138*f173c2b7SSean Bruno */ 139*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_INPUT_CONTROL_START64 0x10000 140*f173c2b7SSean Bruno 141*f173c2b7SSean Bruno /*------- Request Queue Macros ---------*/ 142*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_IQ_PKT_CONTROL64(iq) \ 143*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_INPUT_CONTROL_START64 + \ 144*f173c2b7SSean Bruno ((iq) * LIO_CN23XX_IQ_OFFSET)) 145*f173c2b7SSean Bruno 146*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_IQ_BASE_ADDR64(iq) \ 147*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_INSTR_BADDR_START64 + \ 148*f173c2b7SSean Bruno ((iq) * LIO_CN23XX_IQ_OFFSET)) 149*f173c2b7SSean Bruno 150*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_IQ_SIZE(iq) \ 151*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_INSTR_FIFO_RSIZE_START + \ 152*f173c2b7SSean Bruno ((iq) * LIO_CN23XX_IQ_OFFSET)) 153*f173c2b7SSean Bruno 154*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_IQ_DOORBELL(iq) \ 155*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_INSTR_BADDR_DBELL_START + \ 156*f173c2b7SSean Bruno ((iq) * LIO_CN23XX_IQ_OFFSET)) 157*f173c2b7SSean Bruno 158*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_IQ_INSTR_COUNT64(iq) \ 159*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_IN_DONE_CNTS_START64 + \ 160*f173c2b7SSean Bruno ((iq) * LIO_CN23XX_IQ_OFFSET)) 161*f173c2b7SSean Bruno 162*f173c2b7SSean Bruno /*------------------ Masks ----------------*/ 163*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_VF_NUM BIT_ULL(32) 164*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_MAC_NUM BIT(29) 165*f173c2b7SSean Bruno /* 166*f173c2b7SSean Bruno * Number of instructions to be read in one MAC read request. 167*f173c2b7SSean Bruno * setting to Max value(4) 168*f173c2b7SSean Bruno */ 169*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_RDSIZE (3 << 25) 170*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_IS_64B BIT(24) 171*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_RST BIT(23) 172*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_QUIET BIT(28) 173*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_RING_ENB BIT(22) 174*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP BIT(6) 175*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_USE_CSR BIT(4) 176*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_GATHER_ES_64B_SWAP (2) 177*f173c2b7SSean Bruno 178*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_PF_NUM_POS (45) 179*f173c2b7SSean Bruno /* These bits[43:32] select the function number within the PF */ 180*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_MAC_NUM_POS (29) 181*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_IN_DONE_WMARK_MASK (0xFFFFULL) 182*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_IN_DONE_WMARK_BIT_POS (32) 183*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_IN_DONE_CNT_MASK 0x00000000FFFFFFFFULL 184*f173c2b7SSean Bruno 185*f173c2b7SSean Bruno #if BYTE_ORDER == LITTLE_ENDIAN 186*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_MASK \ 187*f173c2b7SSean Bruno (LIO_CN23XX_PKT_INPUT_CTL_RDSIZE | \ 188*f173c2b7SSean Bruno LIO_CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP | \ 189*f173c2b7SSean Bruno LIO_CN23XX_PKT_INPUT_CTL_USE_CSR) 190*f173c2b7SSean Bruno #else /* BYTE_ORDER != LITTLE_ENDIAN */ 191*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_INPUT_CTL_MASK \ 192*f173c2b7SSean Bruno (LIO_CN23XX_PKT_INPUT_CTL_RDSIZE | \ 193*f173c2b7SSean Bruno LIO_CN23XX_PKT_INPUT_CTL_DATA_ES_64B_SWAP | \ 194*f173c2b7SSean Bruno LIO_CN23XX_PKT_INPUT_CTL_USE_CSR | \ 195*f173c2b7SSean Bruno LIO_CN23XX_PKT_INPUT_CTL_GATHER_ES_64B_SWAP) 196*f173c2b7SSean Bruno #endif /* BYTE_ORDER == LITTLE_ENDIAN */ 197*f173c2b7SSean Bruno 198*f173c2b7SSean Bruno /*############################ OUTPUT QUEUE #########################*/ 199*f173c2b7SSean Bruno 200*f173c2b7SSean Bruno /* 64 registers for Output queue control - SLI_PKT(0..63)_OUTPUT_CONTROL */ 201*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_OUTPUT_CONTROL_START 0x10050 202*f173c2b7SSean Bruno 203*f173c2b7SSean Bruno /* 64 registers for Output queue buffer and info size - SLI_PKT0_OUT_SIZE */ 204*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_OUT_SIZE 0x10060 205*f173c2b7SSean Bruno 206*f173c2b7SSean Bruno /* 64 registers for Output Queue Start Addr - SLI_PKT0_SLIST_BADDR */ 207*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_SLIST_BADDR_START64 0x10070 208*f173c2b7SSean Bruno 209*f173c2b7SSean Bruno /* 64 registers for Output Queue Packet Credits - SLI_PKT0_SLIST_BAOFF_DBELL */ 210*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_SLIST_BAOFF_DBELL_START 0x10080 211*f173c2b7SSean Bruno 212*f173c2b7SSean Bruno /* 64 registers for Output Queue size - SLI_PKT0_SLIST_FIFO_RSIZE */ 213*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_SLIST_FIFO_RSIZE_START 0x10090 214*f173c2b7SSean Bruno 215*f173c2b7SSean Bruno /* 64 registers for Output Queue Packet Count - SLI_PKT0_CNTS */ 216*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_CNTS_START 0x100B0 217*f173c2b7SSean Bruno 218*f173c2b7SSean Bruno /* 64 registers for Output Queue INT Levels - SLI_PKT0_INT_LEVELS */ 219*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_INT_LEVELS_START64 0x100A0 220*f173c2b7SSean Bruno 221*f173c2b7SSean Bruno /* Each Output Queue register is at a 16-byte Offset in BAR0 */ 222*f173c2b7SSean Bruno #define LIO_CN23XX_OQ_OFFSET 0x20000 223*f173c2b7SSean Bruno 224*f173c2b7SSean Bruno /* 1 (64-bit register) for Output Queue backpressure across all rings. */ 225*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_WMARK 0x29180 226*f173c2b7SSean Bruno 227*f173c2b7SSean Bruno /* Global pkt control register */ 228*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_GBL_CONTROL 0x29210 229*f173c2b7SSean Bruno 230*f173c2b7SSean Bruno /* Backpressure enable register for PF0 */ 231*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OUT_BP_EN_W1S 0x29260 232*f173c2b7SSean Bruno 233*f173c2b7SSean Bruno /* Backpressure enable register for PF1 */ 234*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OUT_BP_EN2_W1S 0x29270 235*f173c2b7SSean Bruno 236*f173c2b7SSean Bruno /*------- Output Queue Macros ---------*/ 237*f173c2b7SSean Bruno 238*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_PKT_CONTROL(oq) \ 239*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_OUTPUT_CONTROL_START + \ 240*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 241*f173c2b7SSean Bruno 242*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_BASE_ADDR64(oq) \ 243*f173c2b7SSean Bruno (LIO_CN23XX_SLI_SLIST_BADDR_START64 + \ 244*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 245*f173c2b7SSean Bruno 246*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_SIZE(oq) \ 247*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_SLIST_FIFO_RSIZE_START + \ 248*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 249*f173c2b7SSean Bruno 250*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_BUFF_INFO_SIZE(oq) \ 251*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_OUT_SIZE + \ 252*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 253*f173c2b7SSean Bruno 254*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_PKTS_SENT(oq) \ 255*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_CNTS_START + \ 256*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 257*f173c2b7SSean Bruno 258*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_PKTS_CREDIT(oq) \ 259*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_SLIST_BAOFF_DBELL_START + \ 260*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 261*f173c2b7SSean Bruno 262*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_OQ_PKT_INT_LEVELS(oq) \ 263*f173c2b7SSean Bruno (LIO_CN23XX_SLI_PKT_INT_LEVELS_START64 + \ 264*f173c2b7SSean Bruno ((oq) * LIO_CN23XX_OQ_OFFSET)) 265*f173c2b7SSean Bruno 266*f173c2b7SSean Bruno /*------------------ Masks ----------------*/ 267*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_TENB BIT(13) 268*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_CENB BIT(12) 269*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_IPTR BIT(11) 270*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_ES BIT(9) 271*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_NSR BIT(8) 272*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_ROR BIT(7) 273*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_DPTR BIT(6) 274*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_BMODE BIT(5) 275*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_ES_P BIT(3) 276*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_NSR_P BIT(2) 277*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_ROR_P BIT(1) 278*f173c2b7SSean Bruno #define LIO_CN23XX_PKT_OUTPUT_CTL_RING_ENB BIT(0) 279*f173c2b7SSean Bruno 280*f173c2b7SSean Bruno /*######################## MSIX TABLE #########################*/ 281*f173c2b7SSean Bruno 282*f173c2b7SSean Bruno #define LIO_CN23XX_MSIX_TABLE_ADDR_START 0x0 283*f173c2b7SSean Bruno #define CN23XX_MSIX_TABLE_DATA_START 0x8 284*f173c2b7SSean Bruno #define CN23XX_MSIX_TABLE_SIZE 0x10 285*f173c2b7SSean Bruno 286*f173c2b7SSean Bruno #define CN23XX_MSIX_TABLE_ADDR(idx) \ 287*f173c2b7SSean Bruno (LIO_CN23XX_MSIX_TABLE_ADDR_START + \ 288*f173c2b7SSean Bruno ((idx) * LIO_CN23XX_MSIX_TABLE_SIZE)) 289*f173c2b7SSean Bruno 290*f173c2b7SSean Bruno #define CN23XX_MSIX_TABLE_DATA(idx) \ 291*f173c2b7SSean Bruno (LIO_CN23XX_MSIX_TABLE_DATA_START + \ 292*f173c2b7SSean Bruno ((idx) * LIO_CN23XX_MSIX_TABLE_SIZE)) 293*f173c2b7SSean Bruno 294*f173c2b7SSean Bruno /*######################## INTERRUPTS #########################*/ 295*f173c2b7SSean Bruno #define LIO_CN23XX_MAC_INT_OFFSET 0x20 296*f173c2b7SSean Bruno #define LIO_CN23XX_PF_INT_OFFSET 0x10 297*f173c2b7SSean Bruno 298*f173c2b7SSean Bruno /* 1 register (64-bit) for Interrupt Summary */ 299*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_INT_SUM64 0x27000 300*f173c2b7SSean Bruno 301*f173c2b7SSean Bruno /* 4 registers (64-bit) for Interrupt Enable for each Port */ 302*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_INT_ENB64 0x27080 303*f173c2b7SSean Bruno 304*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_MAC_PF_INT_SUM64(mac, pf) \ 305*f173c2b7SSean Bruno (LIO_CN23XX_SLI_INT_SUM64 + \ 306*f173c2b7SSean Bruno ((mac) * LIO_CN23XX_MAC_INT_OFFSET) + \ 307*f173c2b7SSean Bruno ((pf) * LIO_CN23XX_PF_INT_OFFSET)) 308*f173c2b7SSean Bruno 309*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_MAC_PF_INT_ENB64(mac, pf) \ 310*f173c2b7SSean Bruno (LIO_CN23XX_SLI_INT_ENB64 + \ 311*f173c2b7SSean Bruno ((mac) * LIO_CN23XX_MAC_INT_OFFSET) + \ 312*f173c2b7SSean Bruno ((pf) * LIO_CN23XX_PF_INT_OFFSET)) 313*f173c2b7SSean Bruno 314*f173c2b7SSean Bruno /* 1 register (64-bit) to indicate which Output Queue reached pkt threshold */ 315*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_CNT_INT 0x29130 316*f173c2b7SSean Bruno 317*f173c2b7SSean Bruno /* 1 register (64-bit) to indicate which Output Queue reached time threshold */ 318*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_PKT_TIME_INT 0x29140 319*f173c2b7SSean Bruno 320*f173c2b7SSean Bruno /*------------------ Interrupt Masks ----------------*/ 321*f173c2b7SSean Bruno 322*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PO_INT BIT_ULL(63) 323*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PI_INT BIT_ULL(62) 324*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_RESEND BIT_ULL(60) 325*f173c2b7SSean Bruno 326*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_CINT_ENB BIT_ULL(48) 327*f173c2b7SSean Bruno 328*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_MIO_INT BIT(1) 329*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PKT_TIME BIT(5) 330*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_M0UPB0_ERR BIT(8) 331*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_M0UPWI_ERR BIT(9) 332*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_M0UNB0_ERR BIT(10) 333*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_M0UNWI_ERR BIT(11) 334*f173c2b7SSean Bruno 335*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA0_FORCE BIT_ULL(32) 336*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA1_FORCE BIT_ULL(33) 337*f173c2b7SSean Bruno 338*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA0_TIME BIT_ULL(36) 339*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA1_TIME BIT_ULL(37) 340*f173c2b7SSean Bruno 341*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMAPF_ERR BIT_ULL(59) 342*f173c2b7SSean Bruno 343*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PKTPF_ERR BIT_ULL(61) 344*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PPPF_ERR BIT_ULL(63) 345*f173c2b7SSean Bruno 346*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA0_DATA (LIO_CN23XX_INTR_DMA0_TIME) 347*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA1_DATA (LIO_CN23XX_INTR_DMA1_TIME) 348*f173c2b7SSean Bruno 349*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_DMA_DATA \ 350*f173c2b7SSean Bruno (LIO_CN23XX_INTR_DMA0_DATA | LIO_CN23XX_INTR_DMA1_DATA) 351*f173c2b7SSean Bruno 352*f173c2b7SSean Bruno /* By fault only TIME based */ 353*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_PKT_DATA (LIO_CN23XX_INTR_PKT_TIME) 354*f173c2b7SSean Bruno 355*f173c2b7SSean Bruno /* Sum of interrupts for error events */ 356*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_ERR \ 357*f173c2b7SSean Bruno (LIO_CN23XX_INTR_M0UPB0_ERR | \ 358*f173c2b7SSean Bruno LIO_CN23XX_INTR_M0UPWI_ERR | \ 359*f173c2b7SSean Bruno LIO_CN23XX_INTR_M0UNB0_ERR | \ 360*f173c2b7SSean Bruno LIO_CN23XX_INTR_M0UNWI_ERR | \ 361*f173c2b7SSean Bruno LIO_CN23XX_INTR_DMAPF_ERR | \ 362*f173c2b7SSean Bruno LIO_CN23XX_INTR_PKTPF_ERR | \ 363*f173c2b7SSean Bruno LIO_CN23XX_INTR_PPPF_ERR) 364*f173c2b7SSean Bruno 365*f173c2b7SSean Bruno /* Programmed Mask for Interrupt Sum */ 366*f173c2b7SSean Bruno #define LIO_CN23XX_INTR_MASK \ 367*f173c2b7SSean Bruno (LIO_CN23XX_INTR_DMA_DATA | \ 368*f173c2b7SSean Bruno LIO_CN23XX_INTR_DMA0_FORCE | \ 369*f173c2b7SSean Bruno LIO_CN23XX_INTR_DMA1_FORCE | \ 370*f173c2b7SSean Bruno LIO_CN23XX_INTR_MIO_INT | \ 371*f173c2b7SSean Bruno LIO_CN23XX_INTR_ERR) 372*f173c2b7SSean Bruno 373*f173c2b7SSean Bruno /* 4 Registers (64 - bit) */ 374*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_S2M_PORT_CTL_START 0x23D80 375*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_S2M_PORTX_CTL(port) \ 376*f173c2b7SSean Bruno (LIO_CN23XX_SLI_S2M_PORT_CTL_START + \ 377*f173c2b7SSean Bruno ((port) * 0x10)) 378*f173c2b7SSean Bruno 379*f173c2b7SSean Bruno #define LIO_CN23XX_SLI_MAC_NUMBER 0x20050 380*f173c2b7SSean Bruno 381*f173c2b7SSean Bruno /* 382*f173c2b7SSean Bruno * PEM(0..3)_BAR1_INDEX(0..15)address is defined as 383*f173c2b7SSean Bruno * addr = (0x00011800C0000100 |port <<24 |idx <<3 ) 384*f173c2b7SSean Bruno * Here, port is PEM(0..3) & idx is INDEX(0..15) 385*f173c2b7SSean Bruno */ 386*f173c2b7SSean Bruno #define LIO_CN23XX_PEM_BAR1_INDEX_START 0x00011800C0000100ULL 387*f173c2b7SSean Bruno #define LIO_CN23XX_PEM_OFFSET 24 388*f173c2b7SSean Bruno #define LIO_CN23XX_BAR1_INDEX_OFFSET 3 389*f173c2b7SSean Bruno 390*f173c2b7SSean Bruno #define LIO_CN23XX_PEM_BAR1_INDEX_REG(port, idx) \ 391*f173c2b7SSean Bruno (LIO_CN23XX_PEM_BAR1_INDEX_START + \ 392*f173c2b7SSean Bruno ((port) << LIO_CN23XX_PEM_OFFSET) + \ 393*f173c2b7SSean Bruno ((idx) << LIO_CN23XX_BAR1_INDEX_OFFSET)) 394*f173c2b7SSean Bruno 395*f173c2b7SSean Bruno /*############################ DPI #########################*/ 396*f173c2b7SSean Bruno /* 4 Registers (64-bit) */ 397*f173c2b7SSean Bruno #define LIO_CN23XX_DPI_SLI_PRT_CFG_START 0x0001df0000000900ULL 398*f173c2b7SSean Bruno #define LIO_CN23XX_DPI_SLI_PRTX_CFG(port) \ 399*f173c2b7SSean Bruno ((IO_CN23XX_DPI_SLI_PRT_CFG_START + \ 400*f173c2b7SSean Bruno ((port) * 0x8)) 401*f173c2b7SSean Bruno 402*f173c2b7SSean Bruno /*############################ RST #########################*/ 403*f173c2b7SSean Bruno 404*f173c2b7SSean Bruno #define LIO_CN23XX_RST_BOOT 0x0001180006001600ULL 405*f173c2b7SSean Bruno #define LIO_CN23XX_RST_SOFT_RST 0x0001180006001680ULL 406*f173c2b7SSean Bruno 407*f173c2b7SSean Bruno #define LIO_CN23XX_LMC0_RESET_CTL 0x0001180088000180ULL 408*f173c2b7SSean Bruno #define LIO_CN23XX_LMC0_RESET_CTL_DDR3RST_MASK 0x0000000000000001ULL 409*f173c2b7SSean Bruno 410*f173c2b7SSean Bruno #endif /* __CN23XX_PF_REGS_H__ */ 411